openc3-tool-scriptrunner 5.0.6 → 5.0.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +0,0 @@
1
- {"version":3,"file":"js/859.js","mappings":"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AE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EA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","sources":["webpack://@openc3/tool-scriptrunner/../../node_modules/@rails/actioncable/app/assets/javascripts/action_cable.js","webpack://@openc3/tool-scriptrunner/../../node_modules/ace-builds/src-min-noconflict/ext-language_tools.js","webpack://@openc3/tool-scriptrunner/../../node_modules/ace-builds/src-min-noconflict/ext-searchbox.js","webpack://@openc3/tool-scriptrunner/../../node_modules/ace-builds/src-min-noconflict/mode-ruby.js","webpack://@openc3/tool-scriptrunner/../../node_modules/ace-builds/src-min-noconflict/theme-twilight.js","webpack://@openc3/tool-scriptrunner/../../node_modules/ace-builds/src-noconflict/ace.js","webpack://@openc3/tool-scriptrunner/../../node_modules/axios/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/axios/lib/adapters/xhr.js","webpack://@openc3/tool-scriptrunner/../../node_modules/axios/lib/axios.js","webpack://@openc3/tool-scriptrunner/../../node_modules/axios/lib/cancel/Cancel.js","webpack://@openc3/tool-scriptrunner/../../node_modules/axios/lib/cancel/CancelToken.js","webpack://@openc3/tool-scriptrunner/../../node_modules/axios/lib/cancel/isCancel.js","webpack://@openc3/tool-scriptrunner/../../node_modules/axios/lib/core/Axios.js","webpack://@openc3/tool-scriptrunner/../../node_modules/axios/lib/core/InterceptorManager.js","webpack://@openc3/tool-scriptrunner/../../node_modules/axios/lib/core/buildFullPath.js","webpack://@openc3/tool-scriptrunner/../../node_modules/axios/lib/core/createError.js","webpack://@openc3/tool-scriptrunner/../../node_modules/axios/lib/core/dispatchRequest.js","webpack://@openc3/tool-scriptrunner/../../node_modules/axios/lib/core/enhanceError.js","webpack://@openc3/tool-scriptrunner/../../node_modules/axios/lib/core/mergeConfig.js","webpack://@openc3/tool-scriptrunner/../../node_modules/axios/lib/core/settle.js","webpack://@openc3/tool-scriptrunner/../../node_modules/axios/lib/core/transformData.js","webpack://@openc3/tool-scriptrunner/../../node_modules/axios/lib/defaults.js","webpack://@openc3/tool-scriptrunner/../../node_modules/axios/lib/env/data.js","webpack://@openc3/tool-scriptrunner/../../node_modules/axios/lib/helpers/bind.js","webpack://@openc3/tool-scriptrunner/../../node_modules/axios/lib/helpers/buildURL.js","webpack://@openc3/tool-scriptrunner/../../node_modules/axios/lib/helpers/combineURLs.js","webpack://@openc3/tool-scriptrunner/../../node_modules/axios/lib/helpers/cookies.js","webpack://@openc3/tool-scriptrunner/../../node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack://@openc3/tool-scriptrunner/../../node_modules/axios/lib/helpers/isAxiosError.js","webpack://@openc3/tool-scriptrunner/../../node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack://@openc3/tool-scriptrunner/../../node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack://@openc3/tool-scriptrunner/../../node_modules/axios/lib/helpers/parseHeaders.js","webpack://@openc3/tool-scriptrunner/../../node_modules/axios/lib/helpers/spread.js","webpack://@openc3/tool-scriptrunner/../../node_modules/axios/lib/helpers/validator.js","webpack://@openc3/tool-scriptrunner/../../node_modules/axios/lib/utils.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/internals/array-buffer-native.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/internals/array-buffer-view-core.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/internals/array-buffer.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/internals/array-copy-within.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/internals/array-from-constructor-and-list.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/internals/array-iteration-from-last.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/internals/array-last-index-of.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/internals/collection-strong.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/internals/collection-weak.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/internals/collection.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/internals/define-built-in-accessor.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/internals/define-built-ins.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/internals/ieee754.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/internals/is-integral-number.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/internals/native-url.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/internals/string-pad-webkit-bug.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/internals/string-pad.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/internals/string-punycode-to-ascii.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/internals/to-big-int.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/internals/to-index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/internals/to-offset.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/internals/to-positive-integer.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/internals/typed-array-constructor.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/internals/typed-array-constructors-require-wrappers.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/internals/typed-array-from-species-and-list.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/internals/typed-array-from.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/internals/typed-array-species-constructor.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.array.find-index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.json.to-string-tag.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.math.to-string-tag.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.number.is-integer.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.regexp.constructor.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.regexp.dot-all.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.regexp.sticky.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.set.constructor.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.set.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.string.pad-start.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.string.replace-all.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.symbol.async-iterator.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.symbol.to-string-tag.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.typed-array.at.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.typed-array.copy-within.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.typed-array.every.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.typed-array.fill.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.typed-array.filter.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.typed-array.find-index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.typed-array.find-last-index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.typed-array.find-last.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.typed-array.find.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.typed-array.for-each.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.typed-array.includes.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.typed-array.index-of.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.typed-array.iterator.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.typed-array.join.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.typed-array.last-index-of.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.typed-array.map.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.typed-array.reduce-right.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.typed-array.reduce.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.typed-array.reverse.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.typed-array.set.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.typed-array.slice.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.typed-array.some.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.typed-array.sort.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.typed-array.to-locale-string.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.typed-array.to-string.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.typed-array.uint8-array.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.weak-map.constructor.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/es.weak-map.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/esnext.typed-array.find-last-index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/esnext.typed-array.find-last.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/web.url-search-params.constructor.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/web.url-search-params.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/web.url.constructor.js","webpack://@openc3/tool-scriptrunner/../../node_modules/core-js/modules/web.url.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/requiredArgs/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/isDate/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/toDate/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/isValid/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/locale/en-US/_lib/match/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/locale/en-US/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/toInteger/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/addMilliseconds/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/subMilliseconds/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/getUTCDayOfYear/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/startOfUTCISOWeek/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/getUTCISOWeekYear/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/startOfUTCISOWeekYear/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/getUTCISOWeek/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/startOfUTCWeek/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/getUTCWeekYear/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/startOfUTCWeekYear/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/getUTCWeek/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/addLeadingZeros/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/format/lightFormatters/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/format/formatters/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/format/longFormatters/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/protectedTokens/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/date-fns/esm/format/index.js","webpack://@openc3/tool-scriptrunner/../../node_modules/vue-multipane/dist/vue-multipane.esm.js","webpack://@openc3/tool-scriptrunner/../../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","webpack://@openc3/tool-scriptrunner/../../node_modules/@babel/runtime/helpers/esm/classExtractFieldDescriptor.js","webpack://@openc3/tool-scriptrunner/../../node_modules/@babel/runtime/helpers/esm/classApplyDescriptorGet.js","webpack://@openc3/tool-scriptrunner/../../node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet.js","webpack://@openc3/tool-scriptrunner/../../node_modules/@babel/runtime/helpers/esm/checkPrivateRedeclaration.js","webpack://@openc3/tool-scriptrunner/../../node_modules/@babel/runtime/helpers/esm/classPrivateFieldInitSpec.js","webpack://@openc3/tool-scriptrunner/../../node_modules/@babel/runtime/helpers/esm/classApplyDescriptorSet.js","webpack://@openc3/tool-scriptrunner/../../node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet.js","webpack://@openc3/tool-scriptrunner/../../node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","webpack://@openc3/tool-scriptrunner/../../node_modules/@babel/runtime/helpers/esm/readOnlyError.js","webpack://@openc3/tool-scriptrunner/../../node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js","webpack://@openc3/tool-scriptrunner/../../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack://@openc3/tool-scriptrunner/../../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack://@openc3/tool-scriptrunner/../../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack://@openc3/tool-scriptrunner/../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"],"sourcesContent":["(function(global, factory) {\n typeof exports === \"object\" && typeof module !== \"undefined\" ? factory(exports) : typeof define === \"function\" && define.amd ? define([ \"exports\" ], factory) : factory(global.ActionCable = {});\n})(this, function(exports) {\n \"use strict\";\n var adapters = {\n logger: self.console,\n WebSocket: self.WebSocket\n };\n var logger = {\n log: function log() {\n if (this.enabled) {\n var _adapters$logger;\n for (var _len = arguments.length, messages = Array(_len), _key = 0; _key < _len; _key++) {\n messages[_key] = arguments[_key];\n }\n messages.push(Date.now());\n (_adapters$logger = adapters.logger).log.apply(_adapters$logger, [ \"[ActionCable]\" ].concat(messages));\n }\n }\n };\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function(obj) {\n return typeof obj;\n } : function(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n var classCallCheck = function(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n };\n var createClass = function() {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function(Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n var now = function now() {\n return new Date().getTime();\n };\n var secondsSince = function secondsSince(time) {\n return (now() - time) / 1e3;\n };\n var clamp = function clamp(number, min, max) {\n return Math.max(min, Math.min(max, number));\n };\n var ConnectionMonitor = function() {\n function ConnectionMonitor(connection) {\n classCallCheck(this, ConnectionMonitor);\n this.visibilityDidChange = this.visibilityDidChange.bind(this);\n this.connection = connection;\n this.reconnectAttempts = 0;\n }\n ConnectionMonitor.prototype.start = function start() {\n if (!this.isRunning()) {\n this.startedAt = now();\n delete this.stoppedAt;\n this.startPolling();\n addEventListener(\"visibilitychange\", this.visibilityDidChange);\n logger.log(\"ConnectionMonitor started. pollInterval = \" + this.getPollInterval() + \" ms\");\n }\n };\n ConnectionMonitor.prototype.stop = function stop() {\n if (this.isRunning()) {\n this.stoppedAt = now();\n this.stopPolling();\n removeEventListener(\"visibilitychange\", this.visibilityDidChange);\n logger.log(\"ConnectionMonitor stopped\");\n }\n };\n ConnectionMonitor.prototype.isRunning = function isRunning() {\n return this.startedAt && !this.stoppedAt;\n };\n ConnectionMonitor.prototype.recordPing = function recordPing() {\n this.pingedAt = now();\n };\n ConnectionMonitor.prototype.recordConnect = function recordConnect() {\n this.reconnectAttempts = 0;\n this.recordPing();\n delete this.disconnectedAt;\n logger.log(\"ConnectionMonitor recorded connect\");\n };\n ConnectionMonitor.prototype.recordDisconnect = function recordDisconnect() {\n this.disconnectedAt = now();\n logger.log(\"ConnectionMonitor recorded disconnect\");\n };\n ConnectionMonitor.prototype.startPolling = function startPolling() {\n this.stopPolling();\n this.poll();\n };\n ConnectionMonitor.prototype.stopPolling = function stopPolling() {\n clearTimeout(this.pollTimeout);\n };\n ConnectionMonitor.prototype.poll = function poll() {\n var _this = this;\n this.pollTimeout = setTimeout(function() {\n _this.reconnectIfStale();\n _this.poll();\n }, this.getPollInterval());\n };\n ConnectionMonitor.prototype.getPollInterval = function getPollInterval() {\n var _constructor$pollInte = this.constructor.pollInterval, min = _constructor$pollInte.min, max = _constructor$pollInte.max, multiplier = _constructor$pollInte.multiplier;\n var interval = multiplier * Math.log(this.reconnectAttempts + 1);\n return Math.round(clamp(interval, min, max) * 1e3);\n };\n ConnectionMonitor.prototype.reconnectIfStale = function reconnectIfStale() {\n if (this.connectionIsStale()) {\n logger.log(\"ConnectionMonitor detected stale connection. reconnectAttempts = \" + this.reconnectAttempts + \", pollInterval = \" + this.getPollInterval() + \" ms, time disconnected = \" + secondsSince(this.disconnectedAt) + \" s, stale threshold = \" + this.constructor.staleThreshold + \" s\");\n this.reconnectAttempts++;\n if (this.disconnectedRecently()) {\n logger.log(\"ConnectionMonitor skipping reopening recent disconnect\");\n } else {\n logger.log(\"ConnectionMonitor reopening\");\n this.connection.reopen();\n }\n }\n };\n ConnectionMonitor.prototype.connectionIsStale = function connectionIsStale() {\n return secondsSince(this.pingedAt ? this.pingedAt : this.startedAt) > this.constructor.staleThreshold;\n };\n ConnectionMonitor.prototype.disconnectedRecently = function disconnectedRecently() {\n return this.disconnectedAt && secondsSince(this.disconnectedAt) < this.constructor.staleThreshold;\n };\n ConnectionMonitor.prototype.visibilityDidChange = function visibilityDidChange() {\n var _this2 = this;\n if (document.visibilityState === \"visible\") {\n setTimeout(function() {\n if (_this2.connectionIsStale() || !_this2.connection.isOpen()) {\n logger.log(\"ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = \" + document.visibilityState);\n _this2.connection.reopen();\n }\n }, 200);\n }\n };\n return ConnectionMonitor;\n }();\n ConnectionMonitor.pollInterval = {\n min: 3,\n max: 30,\n multiplier: 5\n };\n ConnectionMonitor.staleThreshold = 6;\n var INTERNAL = {\n message_types: {\n welcome: \"welcome\",\n disconnect: \"disconnect\",\n ping: \"ping\",\n confirmation: \"confirm_subscription\",\n rejection: \"reject_subscription\"\n },\n disconnect_reasons: {\n unauthorized: \"unauthorized\",\n invalid_request: \"invalid_request\",\n server_restart: \"server_restart\"\n },\n default_mount_path: \"/cable\",\n protocols: [ \"actioncable-v1-json\", \"actioncable-unsupported\" ]\n };\n var message_types = INTERNAL.message_types, protocols = INTERNAL.protocols;\n var supportedProtocols = protocols.slice(0, protocols.length - 1);\n var indexOf = [].indexOf;\n var Connection = function() {\n function Connection(consumer) {\n classCallCheck(this, Connection);\n this.open = this.open.bind(this);\n this.consumer = consumer;\n this.subscriptions = this.consumer.subscriptions;\n this.monitor = new ConnectionMonitor(this);\n this.disconnected = true;\n }\n Connection.prototype.send = function send(data) {\n if (this.isOpen()) {\n this.webSocket.send(JSON.stringify(data));\n return true;\n } else {\n return false;\n }\n };\n Connection.prototype.open = function open() {\n if (this.isActive()) {\n logger.log(\"Attempted to open WebSocket, but existing socket is \" + this.getState());\n return false;\n } else {\n logger.log(\"Opening WebSocket, current state is \" + this.getState() + \", subprotocols: \" + protocols);\n if (this.webSocket) {\n this.uninstallEventHandlers();\n }\n this.webSocket = new adapters.WebSocket(this.consumer.url, protocols);\n this.installEventHandlers();\n this.monitor.start();\n return true;\n }\n };\n Connection.prototype.close = function close() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n allowReconnect: true\n }, allowReconnect = _ref.allowReconnect;\n if (!allowReconnect) {\n this.monitor.stop();\n }\n if (this.isActive()) {\n return this.webSocket.close();\n }\n };\n Connection.prototype.reopen = function reopen() {\n logger.log(\"Reopening WebSocket, current state is \" + this.getState());\n if (this.isActive()) {\n try {\n return this.close();\n } catch (error) {\n logger.log(\"Failed to reopen WebSocket\", error);\n } finally {\n logger.log(\"Reopening WebSocket in \" + this.constructor.reopenDelay + \"ms\");\n setTimeout(this.open, this.constructor.reopenDelay);\n }\n } else {\n return this.open();\n }\n };\n Connection.prototype.getProtocol = function getProtocol() {\n if (this.webSocket) {\n return this.webSocket.protocol;\n }\n };\n Connection.prototype.isOpen = function isOpen() {\n return this.isState(\"open\");\n };\n Connection.prototype.isActive = function isActive() {\n return this.isState(\"open\", \"connecting\");\n };\n Connection.prototype.isProtocolSupported = function isProtocolSupported() {\n return indexOf.call(supportedProtocols, this.getProtocol()) >= 0;\n };\n Connection.prototype.isState = function isState() {\n for (var _len = arguments.length, states = Array(_len), _key = 0; _key < _len; _key++) {\n states[_key] = arguments[_key];\n }\n return indexOf.call(states, this.getState()) >= 0;\n };\n Connection.prototype.getState = function getState() {\n if (this.webSocket) {\n for (var state in adapters.WebSocket) {\n if (adapters.WebSocket[state] === this.webSocket.readyState) {\n return state.toLowerCase();\n }\n }\n }\n return null;\n };\n Connection.prototype.installEventHandlers = function installEventHandlers() {\n for (var eventName in this.events) {\n var handler = this.events[eventName].bind(this);\n this.webSocket[\"on\" + eventName] = handler;\n }\n };\n Connection.prototype.uninstallEventHandlers = function uninstallEventHandlers() {\n for (var eventName in this.events) {\n this.webSocket[\"on\" + eventName] = function() {};\n }\n };\n return Connection;\n }();\n Connection.reopenDelay = 500;\n Connection.prototype.events = {\n message: function message(event) {\n if (!this.isProtocolSupported()) {\n return;\n }\n var _JSON$parse = JSON.parse(event.data), identifier = _JSON$parse.identifier, message = _JSON$parse.message, reason = _JSON$parse.reason, reconnect = _JSON$parse.reconnect, type = _JSON$parse.type;\n switch (type) {\n case message_types.welcome:\n this.monitor.recordConnect();\n return this.subscriptions.reload();\n\n case message_types.disconnect:\n logger.log(\"Disconnecting. Reason: \" + reason);\n return this.close({\n allowReconnect: reconnect\n });\n\n case message_types.ping:\n return this.monitor.recordPing();\n\n case message_types.confirmation:\n this.subscriptions.confirmSubscription(identifier);\n return this.subscriptions.notify(identifier, \"connected\");\n\n case message_types.rejection:\n return this.subscriptions.reject(identifier);\n\n default:\n return this.subscriptions.notify(identifier, \"received\", message);\n }\n },\n open: function open() {\n logger.log(\"WebSocket onopen event, using '\" + this.getProtocol() + \"' subprotocol\");\n this.disconnected = false;\n if (!this.isProtocolSupported()) {\n logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\");\n return this.close({\n allowReconnect: false\n });\n }\n },\n close: function close(event) {\n logger.log(\"WebSocket onclose event\");\n if (this.disconnected) {\n return;\n }\n this.disconnected = true;\n this.monitor.recordDisconnect();\n return this.subscriptions.notifyAll(\"disconnected\", {\n willAttemptReconnect: this.monitor.isRunning()\n });\n },\n error: function error() {\n logger.log(\"WebSocket onerror event\");\n }\n };\n var extend = function extend(object, properties) {\n if (properties != null) {\n for (var key in properties) {\n var value = properties[key];\n object[key] = value;\n }\n }\n return object;\n };\n var Subscription = function() {\n function Subscription(consumer) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var mixin = arguments[2];\n classCallCheck(this, Subscription);\n this.consumer = consumer;\n this.identifier = JSON.stringify(params);\n extend(this, mixin);\n }\n Subscription.prototype.perform = function perform(action) {\n var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n data.action = action;\n return this.send(data);\n };\n Subscription.prototype.send = function send(data) {\n return this.consumer.send({\n command: \"message\",\n identifier: this.identifier,\n data: JSON.stringify(data)\n });\n };\n Subscription.prototype.unsubscribe = function unsubscribe() {\n return this.consumer.subscriptions.remove(this);\n };\n return Subscription;\n }();\n var SubscriptionGuarantor = function() {\n function SubscriptionGuarantor(subscriptions) {\n classCallCheck(this, SubscriptionGuarantor);\n this.subscriptions = subscriptions;\n this.pendingSubscriptions = [];\n }\n SubscriptionGuarantor.prototype.guarantee = function guarantee(subscription) {\n if (this.pendingSubscriptions.indexOf(subscription) == -1) {\n logger.log(\"SubscriptionGuarantor guaranteeing \" + subscription.identifier);\n this.pendingSubscriptions.push(subscription);\n } else {\n logger.log(\"SubscriptionGuarantor already guaranteeing \" + subscription.identifier);\n }\n this.startGuaranteeing();\n };\n SubscriptionGuarantor.prototype.forget = function forget(subscription) {\n logger.log(\"SubscriptionGuarantor forgetting \" + subscription.identifier);\n this.pendingSubscriptions = this.pendingSubscriptions.filter(function(s) {\n return s !== subscription;\n });\n };\n SubscriptionGuarantor.prototype.startGuaranteeing = function startGuaranteeing() {\n this.stopGuaranteeing();\n this.retrySubscribing();\n };\n SubscriptionGuarantor.prototype.stopGuaranteeing = function stopGuaranteeing() {\n clearTimeout(this.retryTimeout);\n };\n SubscriptionGuarantor.prototype.retrySubscribing = function retrySubscribing() {\n var _this = this;\n this.retryTimeout = setTimeout(function() {\n if (_this.subscriptions && typeof _this.subscriptions.subscribe === \"function\") {\n _this.pendingSubscriptions.map(function(subscription) {\n logger.log(\"SubscriptionGuarantor resubscribing \" + subscription.identifier);\n _this.subscriptions.subscribe(subscription);\n });\n }\n }, 500);\n };\n return SubscriptionGuarantor;\n }();\n var Subscriptions = function() {\n function Subscriptions(consumer) {\n classCallCheck(this, Subscriptions);\n this.consumer = consumer;\n this.guarantor = new SubscriptionGuarantor(this);\n this.subscriptions = [];\n }\n Subscriptions.prototype.create = function create(channelName, mixin) {\n var channel = channelName;\n var params = (typeof channel === \"undefined\" ? \"undefined\" : _typeof(channel)) === \"object\" ? channel : {\n channel: channel\n };\n var subscription = new Subscription(this.consumer, params, mixin);\n return this.add(subscription);\n };\n Subscriptions.prototype.add = function add(subscription) {\n this.subscriptions.push(subscription);\n this.consumer.ensureActiveConnection();\n this.notify(subscription, \"initialized\");\n this.subscribe(subscription);\n return subscription;\n };\n Subscriptions.prototype.remove = function remove(subscription) {\n this.forget(subscription);\n if (!this.findAll(subscription.identifier).length) {\n this.sendCommand(subscription, \"unsubscribe\");\n }\n return subscription;\n };\n Subscriptions.prototype.reject = function reject(identifier) {\n var _this = this;\n return this.findAll(identifier).map(function(subscription) {\n _this.forget(subscription);\n _this.notify(subscription, \"rejected\");\n return subscription;\n });\n };\n Subscriptions.prototype.forget = function forget(subscription) {\n this.guarantor.forget(subscription);\n this.subscriptions = this.subscriptions.filter(function(s) {\n return s !== subscription;\n });\n return subscription;\n };\n Subscriptions.prototype.findAll = function findAll(identifier) {\n return this.subscriptions.filter(function(s) {\n return s.identifier === identifier;\n });\n };\n Subscriptions.prototype.reload = function reload() {\n var _this2 = this;\n return this.subscriptions.map(function(subscription) {\n return _this2.subscribe(subscription);\n });\n };\n Subscriptions.prototype.notifyAll = function notifyAll(callbackName) {\n var _this3 = this;\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n return this.subscriptions.map(function(subscription) {\n return _this3.notify.apply(_this3, [ subscription, callbackName ].concat(args));\n });\n };\n Subscriptions.prototype.notify = function notify(subscription, callbackName) {\n for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n args[_key2 - 2] = arguments[_key2];\n }\n var subscriptions = void 0;\n if (typeof subscription === \"string\") {\n subscriptions = this.findAll(subscription);\n } else {\n subscriptions = [ subscription ];\n }\n return subscriptions.map(function(subscription) {\n return typeof subscription[callbackName] === \"function\" ? subscription[callbackName].apply(subscription, args) : undefined;\n });\n };\n Subscriptions.prototype.subscribe = function subscribe(subscription) {\n if (this.sendCommand(subscription, \"subscribe\")) {\n this.guarantor.guarantee(subscription);\n }\n };\n Subscriptions.prototype.confirmSubscription = function confirmSubscription(identifier) {\n var _this4 = this;\n logger.log(\"Subscription confirmed \" + identifier);\n this.findAll(identifier).map(function(subscription) {\n return _this4.guarantor.forget(subscription);\n });\n };\n Subscriptions.prototype.sendCommand = function sendCommand(subscription, command) {\n var identifier = subscription.identifier;\n return this.consumer.send({\n command: command,\n identifier: identifier\n });\n };\n return Subscriptions;\n }();\n var Consumer = function() {\n function Consumer(url) {\n classCallCheck(this, Consumer);\n this._url = url;\n this.subscriptions = new Subscriptions(this);\n this.connection = new Connection(this);\n }\n Consumer.prototype.send = function send(data) {\n return this.connection.send(data);\n };\n Consumer.prototype.connect = function connect() {\n return this.connection.open();\n };\n Consumer.prototype.disconnect = function disconnect() {\n return this.connection.close({\n allowReconnect: false\n });\n };\n Consumer.prototype.ensureActiveConnection = function ensureActiveConnection() {\n if (!this.connection.isActive()) {\n return this.connection.open();\n }\n };\n createClass(Consumer, [ {\n key: \"url\",\n get: function get$$1() {\n return createWebSocketURL(this._url);\n }\n } ]);\n return Consumer;\n }();\n function createWebSocketURL(url) {\n if (typeof url === \"function\") {\n url = url();\n }\n if (url && !/^wss?:/i.test(url)) {\n var a = document.createElement(\"a\");\n a.href = url;\n a.href = a.href;\n a.protocol = a.protocol.replace(\"http\", \"ws\");\n return a.href;\n } else {\n return url;\n }\n }\n function createConsumer() {\n var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getConfig(\"url\") || INTERNAL.default_mount_path;\n return new Consumer(url);\n }\n function getConfig(name) {\n var element = document.head.querySelector(\"meta[name='action-cable-\" + name + \"']\");\n if (element) {\n return element.getAttribute(\"content\");\n }\n }\n exports.Connection = Connection;\n exports.ConnectionMonitor = ConnectionMonitor;\n exports.Consumer = Consumer;\n exports.INTERNAL = INTERNAL;\n exports.Subscription = Subscription;\n exports.Subscriptions = Subscriptions;\n exports.SubscriptionGuarantor = SubscriptionGuarantor;\n exports.adapters = adapters;\n exports.createWebSocketURL = createWebSocketURL;\n exports.logger = logger;\n exports.createConsumer = createConsumer;\n exports.getConfig = getConfig;\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n});\n","ace.define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/range_list\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/clipboard\",\"ace/editor\"],function(e,t,n){\"use strict\";function p(e){var t=(new Date).toLocaleString(\"en-us\",e);return t.length==1?\"0\"+t:t}var r=e(\"./lib/dom\"),i=e(\"./lib/oop\"),s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./lib/lang\"),u=e(\"./range\").Range,a=e(\"./range_list\").RangeList,f=e(\"./keyboard/hash_handler\").HashHandler,l=e(\"./tokenizer\").Tokenizer,c=e(\"./clipboard\"),h={CURRENT_WORD:function(e){return e.session.getTextRange(e.session.getWordRange())},SELECTION:function(e,t,n){var r=e.session.getTextRange();return n?r.replace(/\\n\\r?([ \\t]*\\S)/g,\"\\n\"+n+\"$1\"):r},CURRENT_LINE:function(e){return e.session.getLine(e.getCursorPosition().row)},PREV_LINE:function(e){return e.session.getLine(e.getCursorPosition().row-1)},LINE_INDEX:function(e){return e.getCursorPosition().row},LINE_NUMBER:function(e){return e.getCursorPosition().row+1},SOFT_TABS:function(e){return e.session.getUseSoftTabs()?\"YES\":\"NO\"},TAB_SIZE:function(e){return e.session.getTabSize()},CLIPBOARD:function(e){return c.getText&&c.getText()},FILENAME:function(e){return/[^/\\\\]*$/.exec(this.FILEPATH(e))[0]},FILENAME_BASE:function(e){return/[^/\\\\]*$/.exec(this.FILEPATH(e))[0].replace(/\\.[^.]*$/,\"\")},DIRECTORY:function(e){return this.FILEPATH(e).replace(/[^/\\\\]*$/,\"\")},FILEPATH:function(e){return\"/not implemented.txt\"},WORKSPACE_NAME:function(){return\"Unknown\"},FULLNAME:function(){return\"Unknown\"},BLOCK_COMMENT_START:function(e){var t=e.session.$mode||{};return t.blockComment&&t.blockComment.start||\"\"},BLOCK_COMMENT_END:function(e){var t=e.session.$mode||{};return t.blockComment&&t.blockComment.end||\"\"},LINE_COMMENT:function(e){var t=e.session.$mode||{};return t.lineCommentStart||\"\"},CURRENT_YEAR:p.bind(null,{year:\"numeric\"}),CURRENT_YEAR_SHORT:p.bind(null,{year:\"2-digit\"}),CURRENT_MONTH:p.bind(null,{month:\"numeric\"}),CURRENT_MONTH_NAME:p.bind(null,{month:\"long\"}),CURRENT_MONTH_NAME_SHORT:p.bind(null,{month:\"short\"}),CURRENT_DATE:p.bind(null,{day:\"2-digit\"}),CURRENT_DAY_NAME:p.bind(null,{weekday:\"long\"}),CURRENT_DAY_NAME_SHORT:p.bind(null,{weekday:\"short\"}),CURRENT_HOUR:p.bind(null,{hour:\"2-digit\",hour12:!1}),CURRENT_MINUTE:p.bind(null,{minute:\"2-digit\"}),CURRENT_SECOND:p.bind(null,{second:\"2-digit\"})};h.SELECTED_TEXT=h.SELECTION;var d=function(){this.snippetMap={},this.snippetNameMap={}};(function(){i.implement(this,s),this.getTokenizer=function(){return d.$tokenizer||this.createTokenizer()},this.createTokenizer=function(){function e(e){return e=e.substr(1),/^\\d+$/.test(e)?[{tabstopId:parseInt(e,10)}]:[{text:e}]}function t(e){return\"(?:[^\\\\\\\\\"+e+\"]|\\\\\\\\.)\"}var n={regex:\"/(\"+t(\"/\")+\"+)/\",onMatch:function(e,t,n){var r=n[0];return r.fmtString=!0,r.guard=e.slice(1,-1),r.flag=\"\",\"\"},next:\"formatString\"};return d.$tokenizer=new l({start:[{regex:/\\\\./,onMatch:function(e,t,n){var r=e[1];return r==\"}\"&&n.length?e=r:\"`$\\\\\".indexOf(r)!=-1&&(e=r),[e]}},{regex:/}/,onMatch:function(e,t,n){return[n.length?n.shift():e]}},{regex:/\\$(?:\\d+|\\w+)/,onMatch:e},{regex:/\\$\\{[\\dA-Z_a-z]+/,onMatch:function(t,n,r){var i=e(t.substr(1));return r.unshift(i[0]),i},next:\"snippetVar\"},{regex:/\\n/,token:\"newline\",merge:!1}],snippetVar:[{regex:\"\\\\|\"+t(\"\\\\|\")+\"*\\\\|\",onMatch:function(e,t,n){var r=e.slice(1,-1).replace(/\\\\[,|\\\\]|,/g,function(e){return e.length==2?e[1]:\"\\0\"}).split(\"\\0\").map(function(e){return{value:e}});return n[0].choices=r,[r[0]]},next:\"start\"},n,{regex:\"([^:}\\\\\\\\]|\\\\\\\\.)*:?\",token:\"\",next:\"start\"}],formatString:[{regex:/:/,onMatch:function(e,t,n){return n.length&&n[0].expectElse?(n[0].expectElse=!1,n[0].ifEnd={elseEnd:n[0]},[n[0].ifEnd]):\":\"}},{regex:/\\\\./,onMatch:function(e,t,n){var r=e[1];return r==\"}\"&&n.length?e=r:\"`$\\\\\".indexOf(r)!=-1?e=r:r==\"n\"?e=\"\\n\":r==\"t\"?e=\"\t\":\"ulULE\".indexOf(r)!=-1&&(e={changeCase:r,local:r>\"a\"}),[e]}},{regex:\"/\\\\w*}\",onMatch:function(e,t,n){var r=n.shift();return r&&(r.flag=e.slice(1,-1)),this.next=r&&r.tabstopId?\"start\":\"\",[r||e]},next:\"start\"},{regex:/\\$(?:\\d+|\\w+)/,onMatch:function(e,t,n){return[{text:e.slice(1)}]}},{regex:/\\${\\w+/,onMatch:function(e,t,n){var r={text:e.slice(2)};return n.unshift(r),[r]},next:\"formatStringVar\"},{regex:/\\n/,token:\"newline\",merge:!1},{regex:/}/,onMatch:function(e,t,n){var r=n.shift();return this.next=r&&r.tabstopId?\"start\":\"\",[r||e]},next:\"start\"}],formatStringVar:[{regex:/:\\/\\w+}/,onMatch:function(e,t,n){var r=n[0];return r.formatFunction=e.slice(2,-1),[n.shift()]},next:\"formatString\"},n,{regex:/:[\\?\\-+]?/,onMatch:function(e,t,n){e[1]==\"+\"&&(n[0].ifEnd=n[0]),e[1]==\"?\"&&(n[0].expectElse=!0)},next:\"formatString\"},{regex:\"([^:}\\\\\\\\]|\\\\\\\\.)*:?\",token:\"\",next:\"formatString\"}]}),d.$tokenizer},this.tokenizeTmSnippet=function(e,t){return this.getTokenizer().getLineTokens(e,t).tokens.map(function(e){return e.value||e})},this.getVariableValue=function(e,t,n){if(/^\\d+$/.test(t))return(this.variables.__||{})[t]||\"\";if(/^[A-Z]\\d+$/.test(t))return(this.variables[t[0]+\"__\"]||{})[t.substr(1)]||\"\";t=t.replace(/^TM_/,\"\");if(!this.variables.hasOwnProperty(t))return\"\";var r=this.variables[t];return typeof r==\"function\"&&(r=this.variables[t](e,t,n)),r==null?\"\":r},this.variables=h,this.tmStrFormat=function(e,t,n){if(!t.fmt)return e;var r=t.flag||\"\",i=t.guard;i=new RegExp(i,r.replace(/[^gim]/g,\"\"));var s=typeof t.fmt==\"string\"?this.tokenizeTmSnippet(t.fmt,\"formatString\"):t.fmt,o=this,u=e.replace(i,function(){var e=o.variables.__;o.variables.__=[].slice.call(arguments);var t=o.resolveVariables(s,n),r=\"E\";for(var i=0;i<t.length;i++){var u=t[i];if(typeof u==\"object\"){t[i]=\"\";if(u.changeCase&&u.local){var a=t[i+1];a&&typeof a==\"string\"&&(u.changeCase==\"u\"?t[i]=a[0].toUpperCase():t[i]=a[0].toLowerCase(),t[i+1]=a.substr(1))}else u.changeCase&&(r=u.changeCase)}else r==\"U\"?t[i]=u.toUpperCase():r==\"L\"&&(t[i]=u.toLowerCase())}return o.variables.__=e,t.join(\"\")});return u},this.tmFormatFunction=function(e,t,n){return t.formatFunction==\"upcase\"?e.toUpperCase():t.formatFunction==\"downcase\"?e.toLowerCase():e},this.resolveVariables=function(e,t){function f(t){var n=e.indexOf(t,s+1);n!=-1&&(s=n)}var n=[],r=\"\",i=!0;for(var s=0;s<e.length;s++){var o=e[s];if(typeof o==\"string\"){n.push(o),o==\"\\n\"?(i=!0,r=\"\"):i&&(r=/^\\t*/.exec(o)[0],i=/\\S/.test(o));continue}if(!o)continue;i=!1;if(o.fmtString){var u=e.indexOf(o,s+1);u==-1&&(u=e.length),o.fmt=e.slice(s+1,u),s=u}if(o.text){var a=this.getVariableValue(t,o.text,r)+\"\";o.fmtString&&(a=this.tmStrFormat(a,o,t)),o.formatFunction&&(a=this.tmFormatFunction(a,o,t)),a&&!o.ifEnd?(n.push(a),f(o)):!a&&o.ifEnd&&f(o.ifEnd)}else o.elseEnd?f(o.elseEnd):o.tabstopId!=null?n.push(o):o.changeCase!=null&&n.push(o)}return n},this.insertSnippetForSelection=function(e,t){function f(e){var t=[];for(var n=0;n<e.length;n++){var r=e[n];if(typeof r==\"object\"){if(a[r.tabstopId])continue;var i=e.lastIndexOf(r,n-1);r=t[i]||{tabstopId:r.tabstopId}}t[n]=r}return t}var n=e.getCursorPosition(),r=e.session.getLine(n.row),i=e.session.getTabString(),s=r.match(/^\\s*/)[0];n.column<s.length&&(s=s.slice(0,n.column)),t=t.replace(/\\r/g,\"\");var o=this.tokenizeTmSnippet(t);o=this.resolveVariables(o,e),o=o.map(function(e){return e==\"\\n\"?e+s:typeof e==\"string\"?e.replace(/\\t/g,i):e});var u=[];o.forEach(function(e,t){if(typeof e!=\"object\")return;var n=e.tabstopId,r=u[n];r||(r=u[n]=[],r.index=n,r.value=\"\",r.parents={});if(r.indexOf(e)!==-1)return;e.choices&&!r.choices&&(r.choices=e.choices),r.push(e);var i=o.indexOf(e,t+1);if(i===-1)return;var s=o.slice(t+1,i),a=s.some(function(e){return typeof e==\"object\"});a&&!r.value?r.value=s:s.length&&(!r.value||typeof r.value!=\"string\")&&(r.value=s.join(\"\"))}),u.forEach(function(e){e.length=0});var a={};for(var l=0;l<o.length;l++){var c=o[l];if(typeof c!=\"object\")continue;var h=c.tabstopId,p=u[h],d=o.indexOf(c,l+1);if(a[h]){a[h]===c&&(delete a[h],Object.keys(a).forEach(function(e){p.parents[e]=!0}));continue}a[h]=c;var m=p.value;typeof m!=\"string\"?m=f(m):c.fmt&&(m=this.tmStrFormat(m,c,e)),o.splice.apply(o,[l+1,Math.max(0,d-l)].concat(m,c)),p.indexOf(c)===-1&&p.push(c)}var g=0,y=0,b=\"\";o.forEach(function(e){if(typeof e==\"string\"){var t=e.split(\"\\n\");t.length>1?(y=t[t.length-1].length,g+=t.length-1):y+=e.length,b+=e}else e&&(e.start?e.end={row:g,column:y}:e.start={row:g,column:y})});var w=e.getSelectionRange(),E=e.session.replace(w,b),S=new v(e),x=e.inVirtualSelectionMode&&e.selection.index;S.addTabstops(u,w.start,E,x)},this.insertSnippet=function(e,t){var n=this;if(e.inVirtualSelectionMode)return n.insertSnippetForSelection(e,t);e.forEachSelection(function(){n.insertSnippetForSelection(e,t)},null,{keepOrder:!0}),e.tabstopManager&&e.tabstopManager.tabNext()},this.$getScope=function(e){var t=e.session.$mode.$id||\"\";t=t.split(\"/\").pop();if(t===\"html\"||t===\"php\"){t===\"php\"&&!e.session.$mode.inlinePhp&&(t=\"html\");var n=e.getCursorPosition(),r=e.session.getState(n.row);typeof r==\"object\"&&(r=r[0]),r.substring&&(r.substring(0,3)==\"js-\"?t=\"javascript\":r.substring(0,4)==\"css-\"?t=\"css\":r.substring(0,4)==\"php-\"&&(t=\"php\"))}return t},this.getActiveScopes=function(e){var t=this.$getScope(e),n=[t],r=this.snippetMap;return r[t]&&r[t].includeScopes&&n.push.apply(n,r[t].includeScopes),n.push(\"_\"),n},this.expandWithTab=function(e,t){var n=this,r=e.forEachSelection(function(){return n.expandSnippetForSelection(e,t)},null,{keepOrder:!0});return r&&e.tabstopManager&&e.tabstopManager.tabNext(),r},this.expandSnippetForSelection=function(e,t){var n=e.getCursorPosition(),r=e.session.getLine(n.row),i=r.substring(0,n.column),s=r.substr(n.column),o=this.snippetMap,u;return this.getActiveScopes(e).some(function(e){var t=o[e];return t&&(u=this.findMatchingSnippet(t,i,s)),!!u},this),u?t&&t.dryRun?!0:(e.session.doc.removeInLine(n.row,n.column-u.replaceBefore.length,n.column+u.replaceAfter.length),this.variables.M__=u.matchBefore,this.variables.T__=u.matchAfter,this.insertSnippetForSelection(e,u.content),this.variables.M__=this.variables.T__=null,!0):!1},this.findMatchingSnippet=function(e,t,n){for(var r=e.length;r--;){var i=e[r];if(i.startRe&&!i.startRe.test(t))continue;if(i.endRe&&!i.endRe.test(n))continue;if(!i.startRe&&!i.endRe)continue;return i.matchBefore=i.startRe?i.startRe.exec(t):[\"\"],i.matchAfter=i.endRe?i.endRe.exec(n):[\"\"],i.replaceBefore=i.triggerRe?i.triggerRe.exec(t)[0]:\"\",i.replaceAfter=i.endTriggerRe?i.endTriggerRe.exec(n)[0]:\"\",i}},this.snippetMap={},this.snippetNameMap={},this.register=function(e,t){function s(e){return e&&!/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(e)&&(e=\"(?:\"+e+\")\"),e||\"\"}function u(e,t,n){return e=s(e),t=s(t),n?(e=t+e,e&&e[e.length-1]!=\"$\"&&(e+=\"$\")):(e+=t,e&&e[0]!=\"^\"&&(e=\"^\"+e)),new RegExp(e)}function a(e){e.scope||(e.scope=t||\"_\"),t=e.scope,n[t]||(n[t]=[],r[t]={});var s=r[t];if(e.name){var a=s[e.name];a&&i.unregister(a),s[e.name]=e}n[t].push(e),e.prefix&&(e.tabTrigger=e.prefix),!e.content&&e.body&&(e.content=Array.isArray(e.body)?e.body.join(\"\\n\"):e.body),e.tabTrigger&&!e.trigger&&(!e.guard&&/^\\w/.test(e.tabTrigger)&&(e.guard=\"\\\\b\"),e.trigger=o.escapeRegExp(e.tabTrigger));if(!e.trigger&&!e.guard&&!e.endTrigger&&!e.endGuard)return;e.startRe=u(e.trigger,e.guard,!0),e.triggerRe=new RegExp(e.trigger),e.endRe=u(e.endTrigger,e.endGuard,!0),e.endTriggerRe=new RegExp(e.endTrigger)}var n=this.snippetMap,r=this.snippetNameMap,i=this;e||(e=[]),Array.isArray(e)?e.forEach(a):Object.keys(e).forEach(function(t){a(e[t])}),this._signal(\"registerSnippets\",{scope:t})},this.unregister=function(e,t){function i(e){var i=r[e.scope||t];if(i&&i[e.name]){delete i[e.name];var s=n[e.scope||t],o=s&&s.indexOf(e);o>=0&&s.splice(o,1)}}var n=this.snippetMap,r=this.snippetNameMap;e.content?i(e):Array.isArray(e)&&e.forEach(i)},this.parseSnippetFile=function(e){e=e.replace(/\\r/g,\"\");var t=[],n={},r=/^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm,i;while(i=r.exec(e)){if(i[1])try{n=JSON.parse(i[1]),t.push(n)}catch(s){}if(i[4])n.content=i[4].replace(/^\\t/gm,\"\"),t.push(n),n={};else{var o=i[2],u=i[3];if(o==\"regex\"){var a=/\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;n.guard=a.exec(u)[1],n.trigger=a.exec(u)[1],n.endTrigger=a.exec(u)[1],n.endGuard=a.exec(u)[1]}else o==\"snippet\"?(n.tabTrigger=u.match(/^\\S*/)[0],n.name||(n.name=u)):o&&(n[o]=u)}}return t},this.getSnippetByName=function(e,t){var n=this.snippetNameMap,r;return this.getActiveScopes(t).some(function(t){var i=n[t];return i&&(r=i[e]),!!r},this),r}}).call(d.prototype);var v=function(e){if(e.tabstopManager)return e.tabstopManager;e.tabstopManager=this,this.$onChange=this.onChange.bind(this),this.$onChangeSelection=o.delayedCall(this.onChangeSelection.bind(this)).schedule,this.$onChangeSession=this.onChangeSession.bind(this),this.$onAfterExec=this.onAfterExec.bind(this),this.attach(e)};(function(){this.attach=function(e){this.index=0,this.ranges=[],this.tabstops=[],this.$openTabstops=null,this.selectedTabstop=null,this.editor=e,this.editor.on(\"change\",this.$onChange),this.editor.on(\"changeSelection\",this.$onChangeSelection),this.editor.on(\"changeSession\",this.$onChangeSession),this.editor.commands.on(\"afterExec\",this.$onAfterExec),this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.detach=function(){this.tabstops.forEach(this.removeTabstopMarkers,this),this.ranges=null,this.tabstops=null,this.selectedTabstop=null,this.editor.removeListener(\"change\",this.$onChange),this.editor.removeListener(\"changeSelection\",this.$onChangeSelection),this.editor.removeListener(\"changeSession\",this.$onChangeSession),this.editor.commands.removeListener(\"afterExec\",this.$onAfterExec),this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.tabstopManager=null,this.editor=null},this.onChange=function(e){var t=e.action[0]==\"r\",n=this.selectedTabstop||{},r=n.parents||{},i=(this.tabstops||[]).slice();for(var s=0;s<i.length;s++){var o=i[s],u=o==n||r[o.index];o.rangeList.$bias=u?0:1;if(e.action==\"remove\"&&o!==n){var a=o.parents&&o.parents[n.index],f=o.rangeList.pointIndex(e.start,a);f=f<0?-f-1:f+1;var l=o.rangeList.pointIndex(e.end,a);l=l<0?-l-1:l-1;var c=o.rangeList.ranges.slice(f,l);for(var h=0;h<c.length;h++)this.removeRange(c[h])}o.rangeList.$onChange(e)}var p=this.editor.session;!this.$inChange&&t&&p.getLength()==1&&!p.getValue()&&this.detach()},this.updateLinkedFields=function(){var e=this.selectedTabstop;if(!e||!e.hasLinkedRanges||!e.firstNonLinked)return;this.$inChange=!0;var n=this.editor.session,r=n.getTextRange(e.firstNonLinked);for(var i=0;i<e.length;i++){var s=e[i];if(!s.linked)continue;var o=s.original,u=t.snippetManager.tmStrFormat(r,o,this.editor);n.replace(s,u)}this.$inChange=!1},this.onAfterExec=function(e){e.command&&!e.command.readOnly&&this.updateLinkedFields()},this.onChangeSelection=function(){if(!this.editor)return;var e=this.editor.selection.lead,t=this.editor.selection.anchor,n=this.editor.selection.isEmpty();for(var r=0;r<this.ranges.length;r++){if(this.ranges[r].linked)continue;var i=this.ranges[r].contains(e.row,e.column),s=n||this.ranges[r].contains(t.row,t.column);if(i&&s)return}this.detach()},this.onChangeSession=function(){this.detach()},this.tabNext=function(e){var t=this.tabstops.length,n=this.index+(e||1);n=Math.min(Math.max(n,1),t),n==t&&(n=0),this.selectTabstop(n),n===0&&this.detach()},this.selectTabstop=function(e){this.$openTabstops=null;var t=this.tabstops[this.index];t&&this.addTabstopMarkers(t),this.index=e,t=this.tabstops[this.index];if(!t||!t.length)return;this.selectedTabstop=t;var n=t.firstNonLinked||t;t.choices&&(n.cursor=n.start);if(!this.editor.inVirtualSelectionMode){var r=this.editor.multiSelect;r.toSingleRange(n);for(var i=0;i<t.length;i++){if(t.hasLinkedRanges&&t[i].linked)continue;r.addRange(t[i].clone(),!0)}}else this.editor.selection.fromOrientedRange(n);this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler),this.selectedTabstop&&this.selectedTabstop.choices&&this.editor.execCommand(\"startAutocomplete\",{matches:this.selectedTabstop.choices})},this.addTabstops=function(e,t,n){var r=this.useLink||!this.editor.getOption(\"enableMultiselect\");this.$openTabstops||(this.$openTabstops=[]);if(!e[0]){var i=u.fromPoints(n,n);g(i.start,t),g(i.end,t),e[0]=[i],e[0].index=0}var s=this.index,o=[s+1,0],f=this.ranges;e.forEach(function(e,n){var i=this.$openTabstops[n]||e;for(var s=0;s<e.length;s++){var l=e[s],c=u.fromPoints(l.start,l.end||l.start);m(c.start,t),m(c.end,t),c.original=l,c.tabstop=i,f.push(c),i!=e?i.unshift(c):i[s]=c,l.fmtString||i.firstNonLinked&&r?(c.linked=!0,i.hasLinkedRanges=!0):i.firstNonLinked||(i.firstNonLinked=c)}i.firstNonLinked||(i.hasLinkedRanges=!1),i===e&&(o.push(i),this.$openTabstops[n]=i),this.addTabstopMarkers(i),i.rangeList=i.rangeList||new a,i.rangeList.$bias=0,i.rangeList.addList(i)},this),o.length>2&&(this.tabstops.length&&o.push(o.splice(2,1)[0]),this.tabstops.splice.apply(this.tabstops,o))},this.addTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){e.markerId||(e.markerId=t.addMarker(e,\"ace_snippet-marker\",\"text\"))})},this.removeTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){t.removeMarker(e.markerId),e.markerId=null})},this.removeRange=function(e){var t=e.tabstop.indexOf(e);t!=-1&&e.tabstop.splice(t,1),t=this.ranges.indexOf(e),t!=-1&&this.ranges.splice(t,1),t=e.tabstop.rangeList.ranges.indexOf(e),t!=-1&&e.tabstop.splice(t,1),this.editor.session.removeMarker(e.markerId),e.tabstop.length||(t=this.tabstops.indexOf(e.tabstop),t!=-1&&this.tabstops.splice(t,1),this.tabstops.length||this.detach())},this.keyboardHandler=new f,this.keyboardHandler.bindKeys({Tab:function(e){if(t.snippetManager&&t.snippetManager.expandWithTab(e))return;e.tabstopManager.tabNext(1),e.renderer.scrollCursorIntoView()},\"Shift-Tab\":function(e){e.tabstopManager.tabNext(-1),e.renderer.scrollCursorIntoView()},Esc:function(e){e.tabstopManager.detach()}})}).call(v.prototype);var m=function(e,t){e.row==0&&(e.column+=t.column),e.row+=t.row},g=function(e,t){e.row==t.row&&(e.column-=t.column),e.row-=t.row};r.importCssString(\".ace_snippet-marker { -moz-box-sizing: border-box; box-sizing: border-box; background: rgba(194, 193, 208, 0.09); border: 1px dotted rgba(211, 208, 235, 0.62); position: absolute;}\",\"snippets.css\",!1),t.snippetManager=new d;var y=e(\"./editor\").Editor;(function(){this.insertSnippet=function(e,n){return t.snippetManager.insertSnippet(this,e,n)},this.expandSnippet=function(e){return t.snippetManager.expandWithTab(this,e)}}).call(y.prototype)}),ace.define(\"ace/autocomplete/popup\",[\"require\",\"exports\",\"module\",\"ace/virtual_renderer\",\"ace/editor\",\"ace/range\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"../virtual_renderer\").VirtualRenderer,i=e(\"../editor\").Editor,s=e(\"../range\").Range,o=e(\"../lib/event\"),u=e(\"../lib/lang\"),a=e(\"../lib/dom\"),f=function(e){var t=new r(e);t.$maxLines=4;var n=new i(t);return n.setHighlightActiveLine(!1),n.setShowPrintMargin(!1),n.renderer.setShowGutter(!1),n.renderer.setHighlightGutterLine(!1),n.$mouseHandler.$focusTimeout=0,n.$highlightTagPending=!0,n},l=function(e){var t=a.createElement(\"div\"),n=new f(t);e&&e.appendChild(t),t.style.display=\"none\",n.renderer.content.style.cursor=\"default\",n.renderer.setStyle(\"ace_autocomplete\"),n.setOption(\"displayIndentGuides\",!1),n.setOption(\"dragDelay\",150);var r=function(){};n.focus=r,n.$isFocused=!0,n.renderer.$cursorLayer.restartTimer=r,n.renderer.$cursorLayer.element.style.opacity=0,n.renderer.$maxLines=8,n.renderer.$keepTextAreaAtCursor=!1,n.setHighlightActiveLine(!1),n.session.highlight(\"\"),n.session.$searchHighlight.clazz=\"ace_highlight-marker\",n.on(\"mousedown\",function(e){var t=e.getDocumentPosition();n.selection.moveToPosition(t),c.start.row=c.end.row=t.row,e.stop()});var i,l=new s(-1,0,-1,Infinity),c=new s(-1,0,-1,Infinity);c.id=n.session.addMarker(c,\"ace_active-line\",\"fullLine\"),n.setSelectOnHover=function(e){e?l.id&&(n.session.removeMarker(l.id),l.id=null):l.id=n.session.addMarker(l,\"ace_line-hover\",\"fullLine\")},n.setSelectOnHover(!1),n.on(\"mousemove\",function(e){if(!i){i=e;return}if(i.x==e.x&&i.y==e.y)return;i=e,i.scrollTop=n.renderer.scrollTop;var t=i.getDocumentPosition().row;l.start.row!=t&&(l.id||n.setRow(t),p(t))}),n.renderer.on(\"beforeRender\",function(){if(i&&l.start.row!=-1){i.$pos=null;var e=i.getDocumentPosition().row;l.id||n.setRow(e),p(e,!0)}}),n.renderer.on(\"afterRender\",function(){var e=n.getRow(),t=n.renderer.$textLayer,r=t.element.childNodes[e-t.config.firstRow];r!==t.selectedNode&&t.selectedNode&&a.removeCssClass(t.selectedNode,\"ace_selected\"),t.selectedNode=r,r&&a.addCssClass(r,\"ace_selected\")});var h=function(){p(-1)},p=function(e,t){e!==l.start.row&&(l.start.row=l.end.row=e,t||n.session._emit(\"changeBackMarker\"),n._emit(\"changeHoverMarker\"))};n.getHoveredRow=function(){return l.start.row},o.addListener(n.container,\"mouseout\",h),n.on(\"hide\",h),n.on(\"changeSelection\",h),n.session.doc.getLength=function(){return n.data.length},n.session.doc.getLine=function(e){var t=n.data[e];return typeof t==\"string\"?t:t&&t.value||\"\"};var d=n.session.bgTokenizer;return d.$tokenizeRow=function(e){function s(e,n){e&&r.push({type:(t.className||\"\")+(n||\"\"),value:e})}var t=n.data[e],r=[];if(!t)return r;typeof t==\"string\"&&(t={value:t});var i=t.caption||t.value||t.name,o=i.toLowerCase(),u=(n.filterText||\"\").toLowerCase(),a=0,f=0;for(var l=0;l<=u.length;l++)if(l!=f&&(t.matchMask&1<<l||l==u.length)){var c=u.slice(f,l);f=l;var h=o.indexOf(c,a);if(h==-1)continue;s(i.slice(a,h),\"\"),a=h+c.length,s(i.slice(h,a),\"completion-highlight\")}return s(i.slice(a,i.length),\"\"),t.meta&&r.push({type:\"completion-meta\",value:t.meta}),t.message&&r.push({type:\"completion-message\",value:t.message}),r},d.$updateOnChange=r,d.start=r,n.session.$computeWidth=function(){return this.screenWidth=0},n.isOpen=!1,n.isTopdown=!1,n.autoSelect=!0,n.filterText=\"\",n.data=[],n.setData=function(e,t){n.filterText=t||\"\",n.setValue(u.stringRepeat(\"\\n\",e.length),-1),n.data=e||[],n.setRow(0)},n.getData=function(e){return n.data[e]},n.getRow=function(){return c.start.row},n.setRow=function(e){e=Math.max(this.autoSelect?0:-1,Math.min(this.data.length,e)),c.start.row!=e&&(n.selection.clearSelection(),c.start.row=c.end.row=e||0,n.session._emit(\"changeBackMarker\"),n.moveCursorTo(e||0,0),n.isOpen&&n._signal(\"select\"))},n.on(\"changeSelection\",function(){n.isOpen&&n.setRow(n.selection.lead.row),n.renderer.scrollCursorIntoView()}),n.hide=function(){this.container.style.display=\"none\",this._signal(\"hide\"),n.isOpen=!1},n.show=function(e,t,r){var s=this.container,o=window.innerHeight,u=window.innerWidth,a=this.renderer,f=a.$maxLines*t*1.4,l=e.top+this.$borderSize,c=l>o/2&&!r;c&&l+t+f>o?(a.$maxPixelHeight=l-2*this.$borderSize,s.style.top=\"\",s.style.bottom=o-l+\"px\",n.isTopdown=!1):(l+=t,a.$maxPixelHeight=o-l-.2*t,s.style.top=l+\"px\",s.style.bottom=\"\",n.isTopdown=!0),s.style.display=\"\";var h=e.left;h+s.offsetWidth>u&&(h=u-s.offsetWidth),s.style.left=h+\"px\",this._signal(\"show\"),i=null,n.isOpen=!0},n.goTo=function(e){var t=this.getRow(),n=this.session.getLength()-1;switch(e){case\"up\":t=t<=0?n:t-1;break;case\"down\":t=t>=n?-1:t+1;break;case\"start\":t=0;break;case\"end\":t=n}this.setRow(t)},n.getTextLeftOffset=function(){return this.$borderSize+this.renderer.$padding+this.$imageSize},n.$imageSize=0,n.$borderSize=1,n};a.importCssString(\".ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line { background-color: #CAD6FA; z-index: 1;}.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line { background-color: #3a674e;}.ace_editor.ace_autocomplete .ace_line-hover { border: 1px solid #abbffe; margin-top: -1px; background: rgba(233,233,253,0.4); position: absolute; z-index: 2;}.ace_dark.ace_editor.ace_autocomplete .ace_line-hover { border: 1px solid rgba(109, 150, 13, 0.8); background: rgba(58, 103, 78, 0.62);}.ace_completion-meta { opacity: 0.5; margin: 0.9em;}.ace_completion-message { color: blue;}.ace_editor.ace_autocomplete .ace_completion-highlight{ color: #2d69c7;}.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{ color: #93ca12;}.ace_editor.ace_autocomplete { width: 300px; z-index: 200000; border: 1px lightgray solid; position: fixed; box-shadow: 2px 3px 5px rgba(0,0,0,.2); line-height: 1.4; background: #fefefe; color: #111;}.ace_dark.ace_editor.ace_autocomplete { border: 1px #484747 solid; box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51); line-height: 1.4; background: #25282c; color: #c1c1c1;}\",\"autocompletion.css\",!1),t.AcePopup=l,t.$singleLineEditor=f}),ace.define(\"ace/autocomplete/util\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.parForEach=function(e,t,n){var r=0,i=e.length;i===0&&n();for(var s=0;s<i;s++)t(e[s],function(e,t){r++,r===i&&n(e,t)})};var r=/[a-zA-Z_0-9\\$\\-\\u00A2-\\u2000\\u2070-\\uFFFF]/;t.retrievePrecedingIdentifier=function(e,t,n){n=n||r;var i=[];for(var s=t-1;s>=0;s--){if(!n.test(e[s]))break;i.push(e[s])}return i.reverse().join(\"\")},t.retrieveFollowingIdentifier=function(e,t,n){n=n||r;var i=[];for(var s=t;s<e.length;s++){if(!n.test(e[s]))break;i.push(e[s])}return i},t.getCompletionPrefix=function(e){var t=e.getCursorPosition(),n=e.session.getLine(t.row),r;return e.completers.forEach(function(e){e.identifierRegexps&&e.identifierRegexps.forEach(function(e){!r&&e&&(r=this.retrievePrecedingIdentifier(n,t.column,e))}.bind(this))}.bind(this)),r||this.retrievePrecedingIdentifier(n,t.column)}}),ace.define(\"ace/autocomplete\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/autocomplete/popup\",\"ace/autocomplete/util\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/snippets\",\"ace/config\"],function(e,t,n){\"use strict\";var r=e(\"./keyboard/hash_handler\").HashHandler,i=e(\"./autocomplete/popup\").AcePopup,s=e(\"./autocomplete/util\"),o=e(\"./lib/lang\"),u=e(\"./lib/dom\"),a=e(\"./snippets\").snippetManager,f=e(\"./config\"),l=function(){this.autoInsert=!1,this.autoSelect=!0,this.exactMatch=!1,this.gatherCompletionsId=0,this.keyboardHandler=new r,this.keyboardHandler.bindKeys(this.commands),this.blurListener=this.blurListener.bind(this),this.changeListener=this.changeListener.bind(this),this.mousedownListener=this.mousedownListener.bind(this),this.mousewheelListener=this.mousewheelListener.bind(this),this.changeTimer=o.delayedCall(function(){this.updateCompletions(!0)}.bind(this)),this.tooltipTimer=o.delayedCall(this.updateDocTooltip.bind(this),50)};(function(){this.$init=function(){return this.popup=new i(document.body||document.documentElement),this.popup.on(\"click\",function(e){this.insertMatch(),e.stop()}.bind(this)),this.popup.focus=this.editor.focus.bind(this.editor),this.popup.on(\"show\",this.tooltipTimer.bind(null,null)),this.popup.on(\"select\",this.tooltipTimer.bind(null,null)),this.popup.on(\"changeHoverMarker\",this.tooltipTimer.bind(null,null)),this.popup},this.getPopup=function(){return this.popup||this.$init()},this.openPopup=function(e,t,n){this.popup||this.$init(),this.popup.autoSelect=this.autoSelect,this.popup.setData(this.completions.filtered,this.completions.filterText),e.keyBinding.addKeyboardHandler(this.keyboardHandler);var r=e.renderer;this.popup.setRow(this.autoSelect?0:-1);if(!n){this.popup.setTheme(e.getTheme()),this.popup.setFontSize(e.getFontSize());var i=r.layerConfig.lineHeight,s=r.$cursorLayer.getPixelPosition(this.base,!0);s.left-=this.popup.getTextLeftOffset();var o=e.container.getBoundingClientRect();s.top+=o.top-r.layerConfig.offset,s.left+=o.left-e.renderer.scrollLeft,s.left+=r.gutterWidth,this.popup.show(s,i)}else n&&!t&&this.detach();this.changeTimer.cancel()},this.detach=function(){this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.off(\"changeSelection\",this.changeListener),this.editor.off(\"blur\",this.blurListener),this.editor.off(\"mousedown\",this.mousedownListener),this.editor.off(\"mousewheel\",this.mousewheelListener),this.changeTimer.cancel(),this.hideDocTooltip(),this.gatherCompletionsId+=1,this.popup&&this.popup.isOpen&&this.popup.hide(),this.base&&this.base.detach(),this.activated=!1,this.completions=this.base=null},this.changeListener=function(e){var t=this.editor.selection.lead;(t.row!=this.base.row||t.column<this.base.column)&&this.detach(),this.activated?this.changeTimer.schedule():this.detach()},this.blurListener=function(e){var t=document.activeElement,n=this.editor.textInput.getElement(),r=e.relatedTarget&&this.tooltipNode&&this.tooltipNode.contains(e.relatedTarget),i=this.popup&&this.popup.container;t!=n&&t.parentNode!=i&&!r&&t!=this.tooltipNode&&e.relatedTarget!=n&&this.detach()},this.mousedownListener=function(e){this.detach()},this.mousewheelListener=function(e){this.detach()},this.goTo=function(e){this.popup.goTo(e)},this.insertMatch=function(e,t){e||(e=this.popup.getData(this.popup.getRow()));if(!e)return!1;var n=this.completions;this.editor.startOperation({command:{name:\"insertMatch\"}});if(e.completer&&e.completer.insertMatch)e.completer.insertMatch(this.editor,e);else{if(n.filterText){var r=this.editor.selection.getAllRanges();for(var i=0,s;s=r[i];i++)s.start.column-=n.filterText.length,this.editor.session.remove(s)}e.snippet?a.insertSnippet(this.editor,e.snippet):this.editor.execCommand(\"insertstring\",e.value||e)}this.completions==n&&this.detach(),this.editor.endOperation()},this.commands={Up:function(e){e.completer.goTo(\"up\")},Down:function(e){e.completer.goTo(\"down\")},\"Ctrl-Up|Ctrl-Home\":function(e){e.completer.goTo(\"start\")},\"Ctrl-Down|Ctrl-End\":function(e){e.completer.goTo(\"end\")},Esc:function(e){e.completer.detach()},Return:function(e){return e.completer.insertMatch()},\"Shift-Return\":function(e){e.completer.insertMatch(null,{deleteSuffix:!0})},Tab:function(e){var t=e.completer.insertMatch();if(!!t||!!e.tabstopManager)return t;e.completer.goTo(\"down\")},PageUp:function(e){e.completer.popup.gotoPageUp()},PageDown:function(e){e.completer.popup.gotoPageDown()}},this.gatherCompletions=function(e,t){var n=e.getSession(),r=e.getCursorPosition(),i=s.getCompletionPrefix(e);this.base=n.doc.createAnchor(r.row,r.column-i.length),this.base.$insertRight=!0;var o=[],u=e.completers.length;return e.completers.forEach(function(a,f){a.getCompletions(e,n,r,i,function(n,r){!n&&r&&(o=o.concat(r)),t(null,{prefix:s.getCompletionPrefix(e),matches:o,finished:--u===0})})}),!0},this.showPopup=function(e,t){this.editor&&this.detach(),this.activated=!0,this.editor=e,e.completer!=this&&(e.completer&&e.completer.detach(),e.completer=this),e.on(\"changeSelection\",this.changeListener),e.on(\"blur\",this.blurListener),e.on(\"mousedown\",this.mousedownListener),e.on(\"mousewheel\",this.mousewheelListener),this.updateCompletions(!1,t)},this.updateCompletions=function(e,t){if(e&&this.base&&this.completions){var n=this.editor.getCursorPosition(),r=this.editor.session.getTextRange({start:this.base,end:n});if(r==this.completions.filterText)return;this.completions.setFilter(r);if(!this.completions.filtered.length)return this.detach();if(this.completions.filtered.length==1&&this.completions.filtered[0].value==r&&!this.completions.filtered[0].snippet)return this.detach();this.openPopup(this.editor,r,e);return}if(t&&t.matches){var n=this.editor.getSelectionRange().start;return this.base=this.editor.session.doc.createAnchor(n.row,n.column),this.base.$insertRight=!0,this.completions=new c(t.matches),this.openPopup(this.editor,\"\",e)}var i=this.gatherCompletionsId,s=function(e){if(!e.finished)return;return this.detach()}.bind(this),o=function(t){var n=t.prefix,r=t.matches;this.completions=new c(r),this.exactMatch&&(this.completions.exactMatch=!0),this.completions.setFilter(n);var i=this.completions.filtered;if(!i.length)return s(t);if(i.length==1&&i[0].value==n&&!i[0].snippet)return s(t);if(this.autoInsert&&i.length==1&&t.finished)return this.insertMatch(i[0]);this.openPopup(this.editor,n,e)}.bind(this),u=!0,a=null;this.gatherCompletions(this.editor,function(e,t){var n=t.prefix,r=t&&t.matches;if(!r||!r.length)return s(t);if(n.indexOf(t.prefix)!==0||i!=this.gatherCompletionsId)return;if(u){a=t;return}o(t)}.bind(this)),u=!1;if(a){var f=a;a=null,o(f)}},this.cancelContextMenu=function(){this.editor.$mouseHandler.cancelContextMenu()},this.updateDocTooltip=function(){var e=this.popup,t=e.data,n=t&&(t[e.getHoveredRow()]||t[e.getRow()]),r=null;if(!n||!this.editor||!this.popup.isOpen)return this.hideDocTooltip();this.editor.completers.some(function(e){return e.getDocTooltip&&(r=e.getDocTooltip(n)),r}),!r&&typeof n!=\"string\"&&(r=n),typeof r==\"string\"&&(r={docText:r});if(!r||!r.docHTML&&!r.docText)return this.hideDocTooltip();this.showDocTooltip(r)},this.showDocTooltip=function(e){this.tooltipNode||(this.tooltipNode=u.createElement(\"div\"),this.tooltipNode.className=\"ace_tooltip ace_doc-tooltip\",this.tooltipNode.style.margin=0,this.tooltipNode.style.pointerEvents=\"auto\",this.tooltipNode.tabIndex=-1,this.tooltipNode.onblur=this.blurListener.bind(this),this.tooltipNode.onclick=this.onTooltipClick.bind(this));var t=this.tooltipNode;e.docHTML?t.innerHTML=e.docHTML:e.docText&&(t.textContent=e.docText),t.parentNode||document.body.appendChild(t);var n=this.popup,r=n.container.getBoundingClientRect();t.style.top=n.container.style.top,t.style.bottom=n.container.style.bottom,t.style.display=\"block\",window.innerWidth-r.right<320?r.left<320?n.isTopdown?(t.style.top=r.bottom+\"px\",t.style.left=r.left+\"px\",t.style.right=\"\",t.style.bottom=\"\"):(t.style.top=n.container.offsetTop-t.offsetHeight+\"px\",t.style.left=r.left+\"px\",t.style.right=\"\",t.style.bottom=\"\"):(t.style.right=window.innerWidth-r.left+\"px\",t.style.left=\"\"):(t.style.left=r.right+1+\"px\",t.style.right=\"\")},this.hideDocTooltip=function(){this.tooltipTimer.cancel();if(!this.tooltipNode)return;var e=this.tooltipNode;!this.editor.isFocused()&&document.activeElement==e&&this.editor.focus(),this.tooltipNode=null,e.parentNode&&e.parentNode.removeChild(e)},this.onTooltipClick=function(e){var t=e.target;while(t&&t!=this.tooltipNode){if(t.nodeName==\"A\"&&t.href){t.rel=\"noreferrer\",t.target=\"_blank\";break}t=t.parentNode}},this.destroy=function(){this.detach();if(this.popup){this.popup.destroy();var e=this.popup.container;e&&e.parentNode&&e.parentNode.removeChild(e)}this.editor&&this.editor.completer==this&&this.editor.completer==null,this.popup=null}}).call(l.prototype),l.for=function(e){return e.completer?e.completer:(f.get(\"sharedPopups\")?(l.$shared||(l.$sharedInstance=new l),e.completer=l.$sharedInstance):(e.completer=new l,e.once(\"destroy\",function(e,t){t.completer.destroy()})),e.completer)},l.startCommand={name:\"startAutocomplete\",exec:function(e,t){var n=l.for(e);n.autoInsert=!1,n.autoSelect=!0,n.showPopup(e,t),n.cancelContextMenu()},bindKey:\"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"};var c=function(e,t){this.all=e,this.filtered=e,this.filterText=t||\"\",this.exactMatch=!1};(function(){this.setFilter=function(e){if(e.length>this.filterText&&e.lastIndexOf(this.filterText,0)===0)var t=this.filtered;else var t=this.all;this.filterText=e,t=this.filterCompletions(t,this.filterText),t=t.sort(function(e,t){return t.exactMatch-e.exactMatch||t.$score-e.$score||(e.caption||e.value).localeCompare(t.caption||t.value)});var n=null;t=t.filter(function(e){var t=e.snippet||e.caption||e.value;return t===n?!1:(n=t,!0)}),this.filtered=t},this.filterCompletions=function(e,t){var n=[],r=t.toUpperCase(),i=t.toLowerCase();e:for(var s=0,o;o=e[s];s++){var u=o.caption||o.value||o.snippet;if(!u)continue;var a=-1,f=0,l=0,c,h;if(this.exactMatch){if(t!==u.substr(0,t.length))continue e}else{var p=u.toLowerCase().indexOf(i);if(p>-1)l=p;else for(var d=0;d<t.length;d++){var v=u.indexOf(i[d],a+1),m=u.indexOf(r[d],a+1);c=v>=0?m<0||v<m?v:m:m;if(c<0)continue e;h=c-a-1,h>0&&(a===-1&&(l+=10),l+=h,f|=1<<d),a=c}}o.matchMask=f,o.exactMatch=l?0:1,o.$score=(o.score||0)-l,n.push(o)}return n}}).call(c.prototype),t.Autocomplete=l,t.FilteredList=c}),ace.define(\"ace/autocomplete/text_completer\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){function s(e,t){var n=e.getTextRange(r.fromPoints({row:0,column:0},t));return n.split(i).length-1}function o(e,t){var n=s(e,t),r=e.getValue().split(i),o=Object.create(null),u=r[n];return r.forEach(function(e,t){if(!e||e===u)return;var i=Math.abs(n-t),s=r.length-i;o[e]?o[e]=Math.max(s,o[e]):o[e]=s}),o}var r=e(\"../range\").Range,i=/[^a-zA-Z_0-9\\$\\-\\u00C0-\\u1FFF\\u2C00-\\uD7FF\\w]+/;t.getCompletions=function(e,t,n,r,i){var s=o(t,n),u=Object.keys(s);i(null,u.map(function(e){return{caption:e,value:e,score:s[e],meta:\"local\"}}))}}),ace.define(\"ace/ext/language_tools\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete\",\"ace/config\",\"ace/lib/lang\",\"ace/autocomplete/util\",\"ace/autocomplete/text_completer\",\"ace/editor\",\"ace/config\"],function(e,t,n){\"use strict\";var r=e(\"../snippets\").snippetManager,i=e(\"../autocomplete\").Autocomplete,s=e(\"../config\"),o=e(\"../lib/lang\"),u=e(\"../autocomplete/util\"),a=e(\"../autocomplete/text_completer\"),f={getCompletions:function(e,t,n,r,i){if(t.$mode.completer)return t.$mode.completer.getCompletions(e,t,n,r,i);var s=e.session.getState(n.row),o=t.$mode.getCompletions(s,t,n,r);i(null,o)}},l={getCompletions:function(e,t,n,i,s){var o=[],u=t.getTokenAt(n.row,n.column);u&&u.type.match(/(tag-name|tag-open|tag-whitespace|attribute-name|attribute-value)\\.xml$/)?o.push(\"html-tag\"):o=r.getActiveScopes(e);var a=r.snippetMap,f=[];o.forEach(function(e){var t=a[e]||[];for(var n=t.length;n--;){var r=t[n],i=r.name||r.tabTrigger;if(!i)continue;f.push({caption:i,snippet:r.content,meta:r.tabTrigger&&!r.name?r.tabTrigger+\"\\u21e5 \":\"snippet\",type:\"snippet\"})}},this),s(null,f)},getDocTooltip:function(e){e.type==\"snippet\"&&!e.docHTML&&(e.docHTML=[\"<b>\",o.escapeHTML(e.caption),\"</b>\",\"<hr></hr>\",o.escapeHTML(e.snippet)].join(\"\"))}},c=[l,a,f];t.setCompleters=function(e){c.length=0,e&&c.push.apply(c,e)},t.addCompleter=function(e){c.push(e)},t.textCompleter=a,t.keyWordCompleter=f,t.snippetCompleter=l;var h={name:\"expandSnippet\",exec:function(e){return r.expandWithTab(e)},bindKey:\"Tab\"},p=function(e,t){d(t.session.$mode)},d=function(e){typeof e==\"string\"&&(e=s.$modes[e]);if(!e)return;r.files||(r.files={}),v(e.$id,e.snippetFileId),e.modes&&e.modes.forEach(d)},v=function(e,t){if(!t||!e||r.files[e])return;r.files[e]={},s.loadModule(t,function(t){if(!t)return;r.files[e]=t,!t.snippets&&t.snippetText&&(t.snippets=r.parseSnippetFile(t.snippetText)),r.register(t.snippets||[],t.scope),t.includeScopes&&(r.snippetMap[t.scope].includeScopes=t.includeScopes,t.includeScopes.forEach(function(e){d(\"ace/mode/\"+e)}))})},m=function(e){var t=e.editor,n=t.completer&&t.completer.activated;if(e.command.name===\"backspace\")n&&!u.getCompletionPrefix(t)&&t.completer.detach();else if(e.command.name===\"insertstring\"){var r=u.getCompletionPrefix(t);if(r&&!n){var s=i.for(t);s.autoInsert=!1,s.showPopup(t)}}},g=e(\"../editor\").Editor;e(\"../config\").defineOptions(g.prototype,\"editor\",{enableBasicAutocompletion:{set:function(e){e?(this.completers||(this.completers=Array.isArray(e)?e:c),this.commands.addCommand(i.startCommand)):this.commands.removeCommand(i.startCommand)},value:!1},enableLiveAutocompletion:{set:function(e){e?(this.completers||(this.completers=Array.isArray(e)?e:c),this.commands.on(\"afterExec\",m)):this.commands.removeListener(\"afterExec\",m)},value:!1},enableSnippets:{set:function(e){e?(this.commands.addCommand(h),this.on(\"changeMode\",p),p(null,this)):(this.commands.removeCommand(h),this.off(\"changeMode\",p))},value:!1}})}); (function() {\n ace.require([\"ace/ext/language_tools\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","ace.define(\"ace/ext/searchbox\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/keyboard/hash_handler\",\"ace/lib/keys\"],function(e,t,n){\"use strict\";var r=e(\"../lib/dom\"),i=e(\"../lib/lang\"),s=e(\"../lib/event\"),o='.ace_search {background-color: #ddd;color: #666;border: 1px solid #cbcbcb;border-top: 0 none;overflow: hidden;margin: 0;padding: 4px 6px 0 4px;position: absolute;top: 0;z-index: 99;white-space: normal;}.ace_search.left {border-left: 0 none;border-radius: 0px 0px 5px 0px;left: 0;}.ace_search.right {border-radius: 0px 0px 0px 5px;border-right: 0 none;right: 0;}.ace_search_form, .ace_replace_form {margin: 0 20px 4px 0;overflow: hidden;line-height: 1.9;}.ace_replace_form {margin-right: 0;}.ace_search_form.ace_nomatch {outline: 1px solid red;}.ace_search_field {border-radius: 3px 0 0 3px;background-color: white;color: black;border: 1px solid #cbcbcb;border-right: 0 none;outline: 0;padding: 0;font-size: inherit;margin: 0;line-height: inherit;padding: 0 6px;min-width: 17em;vertical-align: top;min-height: 1.8em;box-sizing: content-box;}.ace_searchbtn {border: 1px solid #cbcbcb;line-height: inherit;display: inline-block;padding: 0 6px;background: #fff;border-right: 0 none;border-left: 1px solid #dcdcdc;cursor: pointer;margin: 0;position: relative;color: #666;}.ace_searchbtn:last-child {border-radius: 0 3px 3px 0;border-right: 1px solid #cbcbcb;}.ace_searchbtn:disabled {background: none;cursor: default;}.ace_searchbtn:hover {background-color: #eef1f6;}.ace_searchbtn.prev, .ace_searchbtn.next {padding: 0px 0.7em}.ace_searchbtn.prev:after, .ace_searchbtn.next:after {content: \"\";border: solid 2px #888;width: 0.5em;height: 0.5em;border-width: 2px 0 0 2px;display:inline-block;transform: rotate(-45deg);}.ace_searchbtn.next:after {border-width: 0 2px 2px 0 ;}.ace_searchbtn_close {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;border-radius: 50%;border: 0 none;color: #656565;cursor: pointer;font: 16px/16px Arial;padding: 0;height: 14px;width: 14px;top: 9px;right: 7px;position: absolute;}.ace_searchbtn_close:hover {background-color: #656565;background-position: 50% 100%;color: white;}.ace_button {margin-left: 2px;cursor: pointer;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;overflow: hidden;opacity: 0.7;border: 1px solid rgba(100,100,100,0.23);padding: 1px;box-sizing: border-box!important;color: black;}.ace_button:hover {background-color: #eee;opacity:1;}.ace_button:active {background-color: #ddd;}.ace_button.checked {border-color: #3399ff;opacity:1;}.ace_search_options{margin-bottom: 3px;text-align: right;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;clear: both;}.ace_search_counter {float: left;font-family: arial;padding: 0 8px;}',u=e(\"../keyboard/hash_handler\").HashHandler,a=e(\"../lib/keys\"),f=999;r.importCssString(o,\"ace_searchbox\",!1);var l=function(e,t,n){var i=r.createElement(\"div\");r.buildDom([\"div\",{\"class\":\"ace_search right\"},[\"span\",{action:\"hide\",\"class\":\"ace_searchbtn_close\"}],[\"div\",{\"class\":\"ace_search_form\"},[\"input\",{\"class\":\"ace_search_field\",placeholder:\"Search for\",spellcheck:\"false\"}],[\"span\",{action:\"findPrev\",\"class\":\"ace_searchbtn prev\"},\"\\u200b\"],[\"span\",{action:\"findNext\",\"class\":\"ace_searchbtn next\"},\"\\u200b\"],[\"span\",{action:\"findAll\",\"class\":\"ace_searchbtn\",title:\"Alt-Enter\"},\"All\"]],[\"div\",{\"class\":\"ace_replace_form\"},[\"input\",{\"class\":\"ace_search_field\",placeholder:\"Replace with\",spellcheck:\"false\"}],[\"span\",{action:\"replaceAndFindNext\",\"class\":\"ace_searchbtn\"},\"Replace\"],[\"span\",{action:\"replaceAll\",\"class\":\"ace_searchbtn\"},\"All\"]],[\"div\",{\"class\":\"ace_search_options\"},[\"span\",{action:\"toggleReplace\",\"class\":\"ace_button\",title:\"Toggle Replace mode\",style:\"float:left;margin-top:-2px;padding:0 5px;\"},\"+\"],[\"span\",{\"class\":\"ace_search_counter\"}],[\"span\",{action:\"toggleRegexpMode\",\"class\":\"ace_button\",title:\"RegExp Search\"},\".*\"],[\"span\",{action:\"toggleCaseSensitive\",\"class\":\"ace_button\",title:\"CaseSensitive Search\"},\"Aa\"],[\"span\",{action:\"toggleWholeWords\",\"class\":\"ace_button\",title:\"Whole Word Search\"},\"\\\\b\"],[\"span\",{action:\"searchInSelection\",\"class\":\"ace_button\",title:\"Search In Selection\"},\"S\"]]],i),this.element=i.firstChild,this.setSession=this.setSession.bind(this),this.$init(),this.setEditor(e),r.importCssString(o,\"ace_searchbox\",e.container)};(function(){this.setEditor=function(e){e.searchBox=this,e.renderer.scroller.appendChild(this.element),this.editor=e},this.setSession=function(e){this.searchRange=null,this.$syncOptions(!0)},this.$initElements=function(e){this.searchBox=e.querySelector(\".ace_search_form\"),this.replaceBox=e.querySelector(\".ace_replace_form\"),this.searchOption=e.querySelector(\"[action=searchInSelection]\"),this.replaceOption=e.querySelector(\"[action=toggleReplace]\"),this.regExpOption=e.querySelector(\"[action=toggleRegexpMode]\"),this.caseSensitiveOption=e.querySelector(\"[action=toggleCaseSensitive]\"),this.wholeWordOption=e.querySelector(\"[action=toggleWholeWords]\"),this.searchInput=this.searchBox.querySelector(\".ace_search_field\"),this.replaceInput=this.replaceBox.querySelector(\".ace_search_field\"),this.searchCounter=e.querySelector(\".ace_search_counter\")},this.$init=function(){var e=this.element;this.$initElements(e);var t=this;s.addListener(e,\"mousedown\",function(e){setTimeout(function(){t.activeInput.focus()},0),s.stopPropagation(e)}),s.addListener(e,\"click\",function(e){var n=e.target||e.srcElement,r=n.getAttribute(\"action\");r&&t[r]?t[r]():t.$searchBarKb.commands[r]&&t.$searchBarKb.commands[r].exec(t),s.stopPropagation(e)}),s.addCommandKeyListener(e,function(e,n,r){var i=a.keyCodeToString(r),o=t.$searchBarKb.findKeyCommand(n,i);o&&o.exec&&(o.exec(t),s.stopEvent(e))}),this.$onChange=i.delayedCall(function(){t.find(!1,!1)}),s.addListener(this.searchInput,\"input\",function(){t.$onChange.schedule(20)}),s.addListener(this.searchInput,\"focus\",function(){t.activeInput=t.searchInput,t.searchInput.value&&t.highlight()}),s.addListener(this.replaceInput,\"focus\",function(){t.activeInput=t.replaceInput,t.searchInput.value&&t.highlight()})},this.$closeSearchBarKb=new u([{bindKey:\"Esc\",name:\"closeSearchBar\",exec:function(e){e.searchBox.hide()}}]),this.$searchBarKb=new u,this.$searchBarKb.bindKeys({\"Ctrl-f|Command-f\":function(e){var t=e.isReplace=!e.isReplace;e.replaceBox.style.display=t?\"\":\"none\",e.replaceOption.checked=!1,e.$syncOptions(),e.searchInput.focus()},\"Ctrl-H|Command-Option-F\":function(e){if(e.editor.getReadOnly())return;e.replaceOption.checked=!0,e.$syncOptions(),e.replaceInput.focus()},\"Ctrl-G|Command-G\":function(e){e.findNext()},\"Ctrl-Shift-G|Command-Shift-G\":function(e){e.findPrev()},esc:function(e){setTimeout(function(){e.hide()})},Return:function(e){e.activeInput==e.replaceInput&&e.replace(),e.findNext()},\"Shift-Return\":function(e){e.activeInput==e.replaceInput&&e.replace(),e.findPrev()},\"Alt-Return\":function(e){e.activeInput==e.replaceInput&&e.replaceAll(),e.findAll()},Tab:function(e){(e.activeInput==e.replaceInput?e.searchInput:e.replaceInput).focus()}}),this.$searchBarKb.addCommands([{name:\"toggleRegexpMode\",bindKey:{win:\"Alt-R|Alt-/\",mac:\"Ctrl-Alt-R|Ctrl-Alt-/\"},exec:function(e){e.regExpOption.checked=!e.regExpOption.checked,e.$syncOptions()}},{name:\"toggleCaseSensitive\",bindKey:{win:\"Alt-C|Alt-I\",mac:\"Ctrl-Alt-R|Ctrl-Alt-I\"},exec:function(e){e.caseSensitiveOption.checked=!e.caseSensitiveOption.checked,e.$syncOptions()}},{name:\"toggleWholeWords\",bindKey:{win:\"Alt-B|Alt-W\",mac:\"Ctrl-Alt-B|Ctrl-Alt-W\"},exec:function(e){e.wholeWordOption.checked=!e.wholeWordOption.checked,e.$syncOptions()}},{name:\"toggleReplace\",exec:function(e){e.replaceOption.checked=!e.replaceOption.checked,e.$syncOptions()}},{name:\"searchInSelection\",exec:function(e){e.searchOption.checked=!e.searchRange,e.setSearchRange(e.searchOption.checked&&e.editor.getSelectionRange()),e.$syncOptions()}}]),this.setSearchRange=function(e){this.searchRange=e,e?this.searchRangeMarker=this.editor.session.addMarker(e,\"ace_active-line\"):this.searchRangeMarker&&(this.editor.session.removeMarker(this.searchRangeMarker),this.searchRangeMarker=null)},this.$syncOptions=function(e){r.setCssClass(this.replaceOption,\"checked\",this.searchRange),r.setCssClass(this.searchOption,\"checked\",this.searchOption.checked),this.replaceOption.textContent=this.replaceOption.checked?\"-\":\"+\",r.setCssClass(this.regExpOption,\"checked\",this.regExpOption.checked),r.setCssClass(this.wholeWordOption,\"checked\",this.wholeWordOption.checked),r.setCssClass(this.caseSensitiveOption,\"checked\",this.caseSensitiveOption.checked);var t=this.editor.getReadOnly();this.replaceOption.style.display=t?\"none\":\"\",this.replaceBox.style.display=this.replaceOption.checked&&!t?\"\":\"none\",this.find(!1,!1,e)},this.highlight=function(e){this.editor.session.highlight(e||this.editor.$search.$options.re),this.editor.renderer.updateBackMarkers()},this.find=function(e,t,n){var i=this.editor.find(this.searchInput.value,{skipCurrent:e,backwards:t,wrap:!0,regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked,preventScroll:n,range:this.searchRange}),s=!i&&this.searchInput.value;r.setCssClass(this.searchBox,\"ace_nomatch\",s),this.editor._emit(\"findSearchBox\",{match:!s}),this.highlight(),this.updateCounter()},this.updateCounter=function(){var e=this.editor,t=e.$search.$options.re,n=0,r=0;if(t){var i=this.searchRange?e.session.getTextRange(this.searchRange):e.getValue(),s=e.session.doc.positionToIndex(e.selection.anchor);this.searchRange&&(s-=e.session.doc.positionToIndex(this.searchRange.start));var o=t.lastIndex=0,u;while(u=t.exec(i)){n++,o=u.index,o<=s&&r++;if(n>f)break;if(!u[0]){t.lastIndex=o+=1;if(o>=i.length)break}}}this.searchCounter.textContent=r+\" of \"+(n>f?f+\"+\":n)},this.findNext=function(){this.find(!0,!1)},this.findPrev=function(){this.find(!0,!0)},this.findAll=function(){var e=this.editor.findAll(this.searchInput.value,{regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked}),t=!e&&this.searchInput.value;r.setCssClass(this.searchBox,\"ace_nomatch\",t),this.editor._emit(\"findSearchBox\",{match:!t}),this.highlight(),this.hide()},this.replace=function(){this.editor.getReadOnly()||this.editor.replace(this.replaceInput.value)},this.replaceAndFindNext=function(){this.editor.getReadOnly()||(this.editor.replace(this.replaceInput.value),this.findNext())},this.replaceAll=function(){this.editor.getReadOnly()||this.editor.replaceAll(this.replaceInput.value)},this.hide=function(){this.active=!1,this.setSearchRange(null),this.editor.off(\"changeSession\",this.setSession),this.element.style.display=\"none\",this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb),this.editor.focus()},this.show=function(e,t){this.active=!0,this.editor.on(\"changeSession\",this.setSession),this.element.style.display=\"\",this.replaceOption.checked=t,e&&(this.searchInput.value=e),this.searchInput.focus(),this.searchInput.select(),this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb),this.$syncOptions(!0)},this.isFocused=function(){var e=document.activeElement;return e==this.searchInput||e==this.replaceInput}}).call(l.prototype),t.SearchBox=l,t.Search=function(e,t){var n=e.searchBox||new l(e);n.show(e.session.getTextRange(),t)}}); (function() {\n ace.require([\"ace/ext/searchbox\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","ace.define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.constantOtherSymbol={token:\"constant.other.symbol.ruby\",regex:\"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"};t.qString={token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},t.qqString={token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},t.tString={token:\"string\",regex:\"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"};var o=t.constantNumericHex={token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"},u=t.constantNumericBinary={token:\"constant.numeric\",regex:/\\b(0[bB][01](?:[01]|_(?=[01]))*)\\b/},a=t.constantNumericDecimal={token:\"constant.numeric\",regex:/\\b(0[dD](?:[1-9](?:[\\d]|_(?=[\\d]))*|0))\\b/},f=t.constantNumericDecimal={token:\"constant.numeric\",regex:/\\b(0[oO]?(?:[1-7](?:[0-7]|_(?=[0-7]))*|0))\\b/},l=t.constantNumericRational={token:\"constant.numeric\",regex:/\\b([\\d]+(?:[./][\\d]+)?ri?)\\b/},c=t.constantNumericComplex={token:\"constant.numeric\",regex:/\\b([\\d]i)\\b/},h=t.constantNumericFloat={token:\"constant.numeric\",regex:\"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?i?\\\\b\"},p=t.instanceVariable={token:\"variable.instance\",regex:\"@{1,2}[a-zA-Z_\\\\d]+\"},d=function(){var e=\"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|validates_inclusion_of|validates_numericality_of|validates_with|validates_each|authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|cache|expire_fragment|expire_cache_for|observe|cache_sweeper|has_many|has_one|belongs_to|has_and_belongs_to_many|p|warn|refine|using|module_function|extend|alias_method|private_class_method|remove_method|undef_method\",t=\"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield|__ENCODING__|prepend\",n=\"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING|RUBY_PATCHLEVEL|RUBY_REVISION|RUBY_COPYRIGHT|RUBY_ENGINE|RUBY_ENGINE_VERSION|RUBY_DESCRIPTION\",r=\"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|$!|root_url|flash|session|cookies|params|request|response|logger|self\",i=this.$keywords=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"variable.language\":r,\"support.function\":e,\"invalid.deprecated\":\"debugger\"},\"identifier\"),d=\"\\\\\\\\(?:n(?:[1-7][0-7]{0,2}|0)|[nsrtvfbae'\\\"\\\\\\\\]|c(?:\\\\\\\\M-)?.|M-(?:\\\\\\\\C-|\\\\\\\\c)?.|C-(?:\\\\\\\\M-)?.|[0-7]{3}|x[\\\\da-fA-F]{2}|u[\\\\da-fA-F]{4}|u{[\\\\da-fA-F]{1,6}(?:\\\\s[\\\\da-fA-F]{1,6})*})\",v={\"(\":\")\",\"[\":\"]\",\"{\":\"}\",\"<\":\">\",\"^\":\"^\",\"|\":\"|\",\"%\":\"%\"};this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"comment.multiline\",regex:\"^=begin(?=$|\\\\s.*$)\",next:\"comment\"},{token:\"string.regexp\",regex:/[/](?=.*\\/)/,next:\"regex\"},[{token:[\"constant.other.symbol.ruby\",\"string.start\"],regex:/(:)?(\")/,push:[{token:\"constant.language.escape\",regex:d},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/\"/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:d},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string\"}]},{token:[\"constant.other.symbol.ruby\",\"string.start\"],regex:/(:)?(')/,push:[{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"string.end\",regex:/'/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/%[qwx]([(\\[<{^|%])/,onMatch:function(e,t,n){n.length&&(n=[]);var r=e[e.length-1];return n.unshift(r,t),this.next=\"qStateWithoutInterpolation\",this.token}},{token:\"string.start\",regex:/%[QWX]?([(\\[<{^|%])/,onMatch:function(e,t,n){n.length&&(n=[]);var r=e[e.length-1];return n.unshift(r,t),this.next=\"qStateWithInterpolation\",this.token}},{token:\"constant.other.symbol.ruby\",regex:/%[si]([(\\[<{^|%])/,onMatch:function(e,t,n){n.length&&(n=[]);var r=e[e.length-1];return n.unshift(r,t),this.next=\"sStateWithoutInterpolation\",this.token}},{token:\"constant.other.symbol.ruby\",regex:/%[SI]([(\\[<{^|%])/,onMatch:function(e,t,n){n.length&&(n=[]);var r=e[e.length-1];return n.unshift(r,t),this.next=\"sStateWithInterpolation\",this.token}},{token:\"string.regexp\",regex:/%[r]([(\\[<{^|%])/,onMatch:function(e,t,n){n.length&&(n=[]);var r=e[e.length-1];return n.unshift(r,t),this.next=\"rState\",this.token}}],{token:\"punctuation\",regex:\"::\"},p,{token:\"variable.global\",regex:\"[$][a-zA-Z_\\\\d]+\"},{token:\"support.class\",regex:\"[A-Z][a-zA-Z_\\\\d]*\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)([a-zA-Z_\\d]+)(?=\\()/},{token:[\"punctuation.operator\",\"identifier\"],regex:/(\\.)([a-zA-Z_][a-zA-Z_\\d]*)/},{token:\"string.character\",regex:\"\\\\B\\\\?(?:\"+d+\"|\\\\S)\"},{token:\"punctuation.operator\",regex:/\\?(?=.+:)/},l,c,s,o,h,u,a,f,{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:i,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"punctuation.separator.key-value\",regex:\"=>\"},{stateName:\"heredoc\",onMatch:function(e,t,n){var r=e[2]==\"-\"||e[2]==\"~\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[3]),[{type:\"constant\",value:i[1]},{type:\"string\",value:i[2]},{type:\"support.class\",value:i[3]},{type:\"string\",value:i[4]}]},regex:\"(<<[-~]?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^ +\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|/|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\||\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\",onMatch:function(e,t,n){return this.next=\"\",e==\"}\"&&n.length>1&&n[1]!=\"start\"&&(n.shift(),this.next=n.shift()),this.token}},{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.operator\",regex:/[?:,;.]/}],comment:[{token:\"comment.multiline\",regex:\"^=end(?=$|\\\\s.*$)\",next:\"start\"},{token:\"comment\",regex:\".+\"}],qStateWithInterpolation:[{token:\"string.start\",regex:/[(\\[<{]/,onMatch:function(e,t,n){return n.length&&e===n[0]?(n.unshift(e,t),this.token):\"string\"}},{token:\"constant.language.escape\",regex:d},{token:\"constant.language.escape\",regex:/\\\\./},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/[)\\]>}^|%]/,onMatch:function(e,t,n){return n.length&&e===v[n[0]]?(n.shift(),this.next=n.shift(),this.token):(this.next=\"\",\"string\")}},{defaultToken:\"string\"}],qStateWithoutInterpolation:[{token:\"string.start\",regex:/[(\\[<{]/,onMatch:function(e,t,n){return n.length&&e===n[0]?(n.unshift(e,t),this.token):\"string\"}},{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"constant.language.escape\",regex:/\\\\./},{token:\"string.end\",regex:/[)\\]>}^|%]/,onMatch:function(e,t,n){return n.length&&e===v[n[0]]?(n.shift(),this.next=n.shift(),this.token):(this.next=\"\",\"string\")}},{defaultToken:\"string\"}],sStateWithoutInterpolation:[{token:\"constant.other.symbol.ruby\",regex:/[(\\[<{]/,onMatch:function(e,t,n){return n.length&&e===n[0]?(n.unshift(e,t),this.token):\"constant.other.symbol.ruby\"}},{token:\"constant.other.symbol.ruby\",regex:/[)\\]>}^|%]/,onMatch:function(e,t,n){return n.length&&e===v[n[0]]?(n.shift(),this.next=n.shift(),this.token):(this.next=\"\",\"constant.other.symbol.ruby\")}},{defaultToken:\"constant.other.symbol.ruby\"}],sStateWithInterpolation:[{token:\"constant.other.symbol.ruby\",regex:/[(\\[<{]/,onMatch:function(e,t,n){return n.length&&e===n[0]?(n.unshift(e,t),this.token):\"constant.other.symbol.ruby\"}},{token:\"constant.language.escape\",regex:d},{token:\"constant.language.escape\",regex:/\\\\./},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"constant.other.symbol.ruby\",regex:/[)\\]>}^|%]/,onMatch:function(e,t,n){return n.length&&e===v[n[0]]?(n.shift(),this.next=n.shift(),this.token):(this.next=\"\",\"constant.other.symbol.ruby\")}},{defaultToken:\"constant.other.symbol.ruby\"}],rState:[{token:\"string.regexp\",regex:/[(\\[<{]/,onMatch:function(e,t,n){return n.length&&e===n[0]?(n.unshift(e,t),this.token):\"constant.language.escape\"}},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.regexp\",regex:/\\//},{token:\"string.regexp\",regex:/[)\\]>}^|%][imxouesn]*/,onMatch:function(e,t,n){return n.length&&e[0]===v[n[0]]?(n.shift(),this.next=n.shift(),this.token):(this.next=\"\",\"constant.language.escape\")}},{include:\"regex\"},{defaultToken:\"string.regexp\"}],regex:[{token:\"regexp.keyword\",regex:/\\\\[wWdDhHsS]/},{token:\"constant.language.escape\",regex:/\\\\[AGbBzZ]/},{token:\"constant.language.escape\",regex:/\\\\g<[a-zA-Z0-9]*>/},{token:[\"constant.language.escape\",\"regexp.keyword\",\"constant.language.escape\"],regex:/(\\\\p{\\^?)(Alnum|Alpha|Blank|Cntrl|Digit|Graph|Lower|Print|Punct|Space|Upper|XDigit|Word|ASCII|Any|Assigned|Arabic|Armenian|Balinese|Bengali|Bopomofo|Braille|Buginese|Buhid|Canadian_Aboriginal|Carian|Cham|Cherokee|Common|Coptic|Cuneiform|Cypriot|Cyrillic|Deseret|Devanagari|Ethiopic|Georgian|Glagolitic|Gothic|Greek|Gujarati|Gurmukhi|Han|Hangul|Hanunoo|Hebrew|Hiragana|Inherited|Kannada|Katakana|Kayah_Li|Kharoshthi|Khmer|Lao|Latin|Lepcha|Limbu|Linear_B|Lycian|Lydian|Malayalam|Mongolian|Myanmar|New_Tai_Lue|Nko|Ogham|Ol_Chiki|Old_Italic|Old_Persian|Oriya|Osmanya|Phags_Pa|Phoenician|Rejang|Runic|Saurashtra|Shavian|Sinhala|Sundanese|Syloti_Nagri|Syriac|Tagalog|Tagbanwa|Tai_Le|Tamil|Telugu|Thaana|Thai|Tibetan|Tifinagh|Ugaritic|Vai|Yi|Ll|Lm|Lt|Lu|Lo|Mn|Mc|Me|Nd|Nl|Pc|Pd|Ps|Pe|Pi|Pf|Po|No|Sm|Sc|Sk|So|Zs|Zl|Zp|Cc|Cf|Cn|Co|Cs|N|L|M|P|S|Z|C)(})/},{token:[\"constant.language.escape\",\"invalid\",\"constant.language.escape\"],regex:/(\\\\p{\\^?)([^/]*)(})/},{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:/[/][imxouesn]*/,next:\"start\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?(?:[:=!>]|<'?[a-zA-Z]*'?>|<[=!])|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"regexp.keyword\",regex:/\\[\\[:(?:alnum|alpha|blank|cntrl|digit|graph|lower|print|punct|space|upper|xdigit|word|ascii):\\]\\]/},{token:\"constant.language.escape\",regex:/\\[\\^?/,push:\"regex_character_class\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.keyword\",regex:/\\\\[wWdDhHsS]/},{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:/&?&?\\[\\^?/,push:\"regex_character_class\"},{token:\"constant.language.escape\",regex:\"]\",next:\"pop\"},{token:\"constant.language.escape\",regex:\"-\"},{defaultToken:\"string.regexp.characterclass\"}]},this.normalizeRules()};r.inherits(d,i),t.RubyHighlightRules=d}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=e(\"../../token_iterator\").TokenIterator,u=t.FoldMode=function(){};r.inherits(u,i),function(){this.indentKeywords={\"class\":1,def:1,module:1,\"do\":1,unless:1,\"if\":1,\"while\":1,\"for\":1,until:1,begin:1,\"else\":0,elsif:0,rescue:0,ensure:0,when:0,end:-1,\"case\":1,\"=begin\":1,\"=end\":-1},this.foldingStartMarker=/(?:\\s|^)(def|do|while|class|unless|module|if|for|until|begin|else|elsif|case|rescue|ensure|when)\\b|({\\s*$)|(=begin)/,this.foldingStopMarker=/(=end(?=$|\\s.*$))|(^\\s*})|\\b(end)\\b/,this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=this.foldingStartMarker.test(r),s=this.foldingStopMarker.test(r);if(i&&!s){var o=r.match(this.foldingStartMarker);if(o[1]){if(o[1]==\"if\"||o[1]==\"else\"||o[1]==\"while\"||o[1]==\"until\"||o[1]==\"unless\"){if(o[1]==\"else\"&&/^\\s*else\\s*$/.test(r)===!1)return;if(/^\\s*(?:if|else|while|until|unless)\\s*/.test(r)===!1)return}if(o[1]==\"when\"&&/\\sthen\\s/.test(r)===!0)return;if(e.getTokenAt(n,o.index+2).type===\"keyword\")return\"start\"}else{if(!o[3])return\"start\";if(e.getTokenAt(n,o.index+1).type===\"comment.multiline\")return\"start\"}}if(t!=\"markbeginend\"||!s||i&&s)return\"\";var o=r.match(this.foldingStopMarker);if(o[3]===\"end\"){if(e.getTokenAt(n,o.index+1).type===\"keyword\")return\"end\"}else{if(!o[1])return\"end\";if(e.getTokenAt(n,o.index+1).type===\"comment.multiline\")return\"end\"}},this.getFoldWidgetRange=function(e,t,n){var r=e.doc.getLine(n),i=this.foldingStartMarker.exec(r);if(i)return i[1]||i[3]?this.rubyBlock(e,n,i.index+2):this.openingBracketBlock(e,\"{\",n,i.index);var i=this.foldingStopMarker.exec(r);if(i)return i[3]===\"end\"&&e.getTokenAt(n,i.index+1).type===\"keyword\"?this.rubyBlock(e,n,i.index+1):i[1]===\"=end\"&&e.getTokenAt(n,i.index+1).type===\"comment.multiline\"?this.rubyBlock(e,n,i.index+1):this.closingBracketBlock(e,\"}\",n,i.index+i[0].length)},this.rubyBlock=function(e,t,n,r){var i=new o(e,t,n),u=i.getCurrentToken();if(!u||u.type!=\"keyword\"&&u.type!=\"comment.multiline\")return;var a=u.value,f=e.getLine(t);switch(u.value){case\"if\":case\"unless\":case\"while\":case\"until\":var l=new RegExp(\"^\\\\s*\"+u.value);if(!l.test(f))return;var c=this.indentKeywords[a];break;case\"when\":if(/\\sthen\\s/.test(f))return;case\"elsif\":case\"rescue\":case\"ensure\":var c=1;break;case\"else\":var l=new RegExp(\"^\\\\s*\"+u.value+\"\\\\s*$\");if(!l.test(f))return;var c=1;break;default:var c=this.indentKeywords[a]}var h=[a];if(!c)return;var p=c===-1?e.getLine(t-1).length:e.getLine(t).length,d=t,v=[];v.push(i.getCurrentTokenRange()),i.step=c===-1?i.stepBackward:i.stepForward;if(u.type==\"comment.multiline\")while(u=i.step()){if(u.type!==\"comment.multiline\")continue;if(c==1){p=6;if(u.value==\"=end\")break}else if(u.value==\"=begin\")break}else while(u=i.step()){var m=!1;if(u.type!==\"keyword\")continue;var g=c*this.indentKeywords[u.value];f=e.getLine(i.getCurrentTokenRow());switch(u.value){case\"do\":for(var y=i.$tokenIndex-1;y>=0;y--){var b=i.$rowTokens[y];if(b&&(b.value==\"while\"||b.value==\"until\"||b.value==\"for\")){g=0;break}}break;case\"else\":var l=new RegExp(\"^\\\\s*\"+u.value+\"\\\\s*$\");if(!l.test(f)||a==\"case\")g=0,m=!0;break;case\"if\":case\"unless\":case\"while\":case\"until\":var l=new RegExp(\"^\\\\s*\"+u.value);l.test(f)||(g=0,m=!0);break;case\"when\":if(/\\sthen\\s/.test(f)||a==\"case\")g=0,m=!0}if(g>0)h.unshift(u.value);else if(g<=0&&m===!1){h.shift();if(!h.length){if((a==\"while\"||a==\"until\"||a==\"for\")&&u.value!=\"do\")break;if(u.value==\"do\"&&c==-1&&g!=0)break;if(u.value!=\"do\")break}g===0&&h.unshift(u.value)}}if(!u)return null;if(r)return v.push(i.getCurrentTokenRange()),v;var t=i.getCurrentTokenRow();if(c===-1){if(u.type===\"comment.multiline\")var w=6;else var w=e.getLine(t).length;return new s(t,w,d-1,p)}return new s(d,p,t-1,e.getLine(t-1).length)}}.call(u.prototype)}),ace.define(\"ace/mode/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ruby_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/ruby\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./ruby_highlight_rules\").RubyHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/ruby\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f,this.indentKeywords=this.foldingRules.indentKeywords};r.inherits(l,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/),u=t.match(/^\\s*(class|def|module)\\s.*$/),a=t.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/),f=t.match(/^\\s*(if|else|when|elsif|unless|while|for|begin|rescue|ensure)\\s*/);if(o||u||a||f)r+=n}return r},this.checkOutdent=function(e,t,n){return/^\\s+(end|else|rescue|ensure)$/.test(t+n)||this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){var r=t.getLine(n);if(/}/.test(r))return this.$outdent.autoOutdent(t,n);var i=this.$getIndent(r),s=t.getLine(n-1),o=this.$getIndent(s),a=t.getTabString();o.length<=i.length&&i.slice(-a.length)==a&&t.remove(new u(n,i.length-a.length,n,i.length))},this.getMatching=function(e,t,n){if(t==undefined){var r=e.selection.lead;n=r.column,t=r.row}var i=e.getTokenAt(t,n);if(i&&i.value in this.indentKeywords)return this.foldingRules.rubyBlock(e,t,n,!0)},this.$id=\"ace/mode/ruby\",this.snippetFileId=\"ace/snippets/ruby\"}.call(l.prototype),t.Mode=l}); (function() {\n ace.require([\"ace/mode/ruby\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","ace.define(\"ace/theme/twilight\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-twilight\",t.cssText=\".ace-twilight .ace_gutter {background: #232323;color: #E2E2E2}.ace-twilight .ace_print-margin {width: 1px;background: #232323}.ace-twilight {background-color: #141414;color: #F8F8F8}.ace-twilight .ace_cursor {color: #A7A7A7}.ace-twilight .ace_marker-layer .ace_selection {background: rgba(221, 240, 255, 0.20)}.ace-twilight.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #141414;}.ace-twilight .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-twilight .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(255, 255, 255, 0.25)}.ace-twilight .ace_marker-layer .ace_active-line {background: rgba(255, 255, 255, 0.031)}.ace-twilight .ace_gutter-active-line {background-color: rgba(255, 255, 255, 0.031)}.ace-twilight .ace_marker-layer .ace_selected-word {border: 1px solid rgba(221, 240, 255, 0.20)}.ace-twilight .ace_invisible {color: rgba(255, 255, 255, 0.25)}.ace-twilight .ace_keyword,.ace-twilight .ace_meta {color: #CDA869}.ace-twilight .ace_constant,.ace-twilight .ace_constant.ace_character,.ace-twilight .ace_constant.ace_character.ace_escape,.ace-twilight .ace_constant.ace_other,.ace-twilight .ace_heading,.ace-twilight .ace_markup.ace_heading,.ace-twilight .ace_support.ace_constant {color: #CF6A4C}.ace-twilight .ace_invalid.ace_illegal {color: #F8F8F8;background-color: rgba(86, 45, 86, 0.75)}.ace-twilight .ace_invalid.ace_deprecated {text-decoration: underline;font-style: italic;color: #D2A8A1}.ace-twilight .ace_support {color: #9B859D}.ace-twilight .ace_fold {background-color: #AC885B;border-color: #F8F8F8}.ace-twilight .ace_support.ace_function {color: #DAD085}.ace-twilight .ace_list,.ace-twilight .ace_markup.ace_list,.ace-twilight .ace_storage {color: #F9EE98}.ace-twilight .ace_entity.ace_name.ace_function,.ace-twilight .ace_meta.ace_tag {color: #AC885B}.ace-twilight .ace_string {color: #8F9D6A}.ace-twilight .ace_string.ace_regexp {color: #E9C062}.ace-twilight .ace_comment {font-style: italic;color: #5F5A60}.ace-twilight .ace_variable {color: #7587A6}.ace-twilight .ace_xml-pe {color: #494949}.ace-twilight .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQERFpYLC1tf0PAAgOAnPnhxyiAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass,!1)}); (function() {\n ace.require([\"ace/theme/twilight\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * * Neither the name of Ajax.org B.V. nor the\n * names of its contributors may be used to endorse or promote products\n * derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/**\n * Define a module along with a payload\n * @param module a name for the payload\n * @param payload a function to call with (require, exports, module) params\n */\n\n(function() {\n\nvar ACE_NAMESPACE = \"ace\";\n\nvar global = (function() { return this; })();\nif (!global && typeof window != \"undefined\") global = window; // strict mode\n\n\nif (!ACE_NAMESPACE && typeof requirejs !== \"undefined\")\n return;\n\n\nvar define = function(module, deps, payload) {\n if (typeof module !== \"string\") {\n if (define.original)\n define.original.apply(this, arguments);\n else {\n console.error(\"dropping module because define wasn\\'t a string.\");\n console.trace();\n }\n return;\n }\n if (arguments.length == 2)\n payload = deps;\n if (!define.modules[module]) {\n define.payloads[module] = payload;\n define.modules[module] = null;\n }\n};\n\ndefine.modules = {};\ndefine.payloads = {};\n\n/**\n * Get at functionality define()ed using the function above\n */\nvar _require = function(parentId, module, callback) {\n if (typeof module === \"string\") {\n var payload = lookup(parentId, module);\n if (payload != undefined) {\n callback && callback();\n return payload;\n }\n } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\n var params = [];\n for (var i = 0, l = module.length; i < l; ++i) {\n var dep = lookup(parentId, module[i]);\n if (dep == undefined && require.original)\n return;\n params.push(dep);\n }\n return callback && callback.apply(null, params) || true;\n }\n};\n\nvar require = function(module, callback) {\n var packagedModule = _require(\"\", module, callback);\n if (packagedModule == undefined && require.original)\n return require.original.apply(this, arguments);\n return packagedModule;\n};\n\nvar normalizeModule = function(parentId, moduleName) {\n // normalize plugin requires\n if (moduleName.indexOf(\"!\") !== -1) {\n var chunks = moduleName.split(\"!\");\n return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\n }\n // normalize relative requires\n if (moduleName.charAt(0) == \".\") {\n var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n moduleName = base + \"/\" + moduleName;\n\n while(moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n var previous = moduleName;\n moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n }\n }\n return moduleName;\n};\n\n/**\n * Internal function to lookup moduleNames and resolve them by calling the\n * definition function if needed.\n */\nvar lookup = function(parentId, moduleName) {\n moduleName = normalizeModule(parentId, moduleName);\n\n var module = define.modules[moduleName];\n if (!module) {\n module = define.payloads[moduleName];\n if (typeof module === 'function') {\n var exports = {};\n var mod = {\n id: moduleName,\n uri: '',\n exports: exports,\n packaged: true\n };\n\n var req = function(module, callback) {\n return _require(moduleName, module, callback);\n };\n\n var returnValue = module(req, exports, mod);\n exports = returnValue || mod.exports;\n define.modules[moduleName] = exports;\n delete define.payloads[moduleName];\n }\n module = define.modules[moduleName] = exports || module;\n }\n return module;\n};\n\nfunction exportAce(ns) {\n var root = global;\n if (ns) {\n if (!global[ns])\n global[ns] = {};\n root = global[ns];\n }\n\n if (!root.define || !root.define.packaged) {\n define.original = root.define;\n root.define = define;\n root.define.packaged = true;\n }\n\n if (!root.require || !root.require.packaged) {\n require.original = root.require;\n root.require = require;\n root.require.packaged = true;\n }\n}\n\nexportAce(ACE_NAMESPACE);\n\n})();\n\nace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nif (typeof Element != \"undefined\" && !Element.prototype.remove) {\n Object.defineProperty(Element.prototype, \"remove\", {\n enumerable: false,\n writable: true,\n configurable: true,\n value: function() { this.parentNode && this.parentNode.removeChild(this); }\n });\n}\n\n\n});\n\nace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nexports.OS = {\n LINUX: \"LINUX\",\n MAC: \"MAC\",\n WINDOWS: \"WINDOWS\"\n};\nexports.getOS = function() {\n if (exports.isMac) {\n return exports.OS.MAC;\n } else if (exports.isLinux) {\n return exports.OS.LINUX;\n } else {\n return exports.OS.WINDOWS;\n }\n};\nvar _navigator = typeof navigator == \"object\" ? navigator : {};\n\nvar os = (/mac|win|linux/i.exec(_navigator.platform) || [\"other\"])[0].toLowerCase();\nvar ua = _navigator.userAgent || \"\";\nvar appName = _navigator.appName || \"\";\nexports.isWin = (os == \"win\");\nexports.isMac = (os == \"mac\");\nexports.isLinux = (os == \"linux\");\nexports.isIE = \n (appName == \"Microsoft Internet Explorer\" || appName.indexOf(\"MSAppHost\") >= 0)\n ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1])\n : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]); // for ie\n \nexports.isOldIE = exports.isIE && exports.isIE < 9;\nexports.isGecko = exports.isMozilla = ua.match(/ Gecko\\/\\d+/);\nexports.isOpera = typeof opera == \"object\" && Object.prototype.toString.call(window.opera) == \"[object Opera]\";\nexports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\n\nexports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\n\nexports.isEdge = parseFloat(ua.split(\" Edge/\")[1]) || undefined;\n\nexports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\n\nexports.isAndroid = ua.indexOf(\"Android\") >= 0;\n\nexports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\n\nexports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window.MSStream;\n\nif (exports.isIOS) exports.isMac = true;\n\nexports.isMobile = exports.isIOS || exports.isAndroid;\n\n});\n\nace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar useragent = require(\"./useragent\"); \nvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\n\nexports.buildDom = function buildDom(arr, parent, refs) {\n if (typeof arr == \"string\" && arr) {\n var txt = document.createTextNode(arr);\n if (parent)\n parent.appendChild(txt);\n return txt;\n }\n \n if (!Array.isArray(arr)) {\n if (arr && arr.appendChild && parent)\n parent.appendChild(arr);\n return arr;\n }\n if (typeof arr[0] != \"string\" || !arr[0]) {\n var els = [];\n for (var i = 0; i < arr.length; i++) {\n var ch = buildDom(arr[i], parent, refs);\n ch && els.push(ch);\n }\n return els;\n }\n \n var el = document.createElement(arr[0]);\n var options = arr[1];\n var childIndex = 1;\n if (options && typeof options == \"object\" && !Array.isArray(options))\n childIndex = 2;\n for (var i = childIndex; i < arr.length; i++)\n buildDom(arr[i], el, refs);\n if (childIndex == 2) {\n Object.keys(options).forEach(function(n) {\n var val = options[n];\n if (n === \"class\") {\n el.className = Array.isArray(val) ? val.join(\" \") : val;\n } else if (typeof val == \"function\" || n == \"value\" || n[0] == \"$\") {\n el[n] = val;\n } else if (n === \"ref\") {\n if (refs) refs[val] = el;\n } else if (n === \"style\") {\n if (typeof val == \"string\") el.style.cssText = val;\n } else if (val != null) {\n el.setAttribute(n, val);\n }\n });\n }\n if (parent)\n parent.appendChild(el);\n return el;\n};\n\nexports.getDocumentHead = function(doc) {\n if (!doc)\n doc = document;\n return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n};\n\nexports.createElement = function(tag, ns) {\n return document.createElementNS ?\n document.createElementNS(ns || XHTML_NS, tag) :\n document.createElement(tag);\n};\n\nexports.removeChildren = function(element) {\n element.innerHTML = \"\";\n};\n\nexports.createTextNode = function(textContent, element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createTextNode(textContent);\n};\n\nexports.createFragment = function(element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createDocumentFragment();\n};\n\nexports.hasCssClass = function(el, name) {\n var classes = (el.className + \"\").split(/\\s+/g);\n return classes.indexOf(name) !== -1;\n};\nexports.addCssClass = function(el, name) {\n if (!exports.hasCssClass(el, name)) {\n el.className += \" \" + name;\n }\n};\nexports.removeCssClass = function(el, name) {\n var classes = el.className.split(/\\s+/g);\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n classes.splice(index, 1);\n }\n el.className = classes.join(\" \");\n};\n\nexports.toggleCssClass = function(el, name) {\n var classes = el.className.split(/\\s+/g), add = true;\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n add = false;\n classes.splice(index, 1);\n }\n if (add)\n classes.push(name);\n\n el.className = classes.join(\" \");\n return add;\n};\nexports.setCssClass = function(node, className, include) {\n if (include) {\n exports.addCssClass(node, className);\n } else {\n exports.removeCssClass(node, className);\n }\n};\n\nexports.hasCssString = function(id, doc) {\n var index = 0, sheets;\n doc = doc || document;\n if ((sheets = doc.querySelectorAll(\"style\"))) {\n while (index < sheets.length)\n if (sheets[index++].id === id)\n return true;\n }\n};\n\nvar strictCSP;\nvar cssCache = [];\nexports.useStrictCSP = function(value) {\n strictCSP = value;\n if (value == false) insertPendingStyles();\n else if (!cssCache) cssCache = [];\n};\n\nfunction insertPendingStyles() {\n var cache = cssCache;\n cssCache = null;\n cache && cache.forEach(function(item) {\n importCssString(item[0], item[1]);\n });\n}\n\nfunction importCssString(cssText, id, target) {\n if (typeof document == \"undefined\")\n return;\n if (cssCache) {\n if (target) {\n insertPendingStyles();\n } else if (target === false) {\n return cssCache.push([cssText, id]);\n }\n }\n if (strictCSP) return;\n\n var container = target;\n if (!target || !target.getRootNode) {\n container = document;\n } else {\n container = target.getRootNode();\n if (!container || container == target)\n container = document;\n }\n \n var doc = container.ownerDocument || container;\n if (id && exports.hasCssString(id, container))\n return null;\n \n if (id)\n cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n \n var style = exports.createElement(\"style\");\n style.appendChild(doc.createTextNode(cssText));\n if (id)\n style.id = id;\n\n if (container == doc)\n container = exports.getDocumentHead(doc);\n container.insertBefore(style, container.firstChild);\n}\nexports.importCssString = importCssString;\n\nexports.importCssStylsheet = function(uri, doc) {\n exports.buildDom([\"link\", {rel: \"stylesheet\", href: uri}], exports.getDocumentHead(doc));\n};\nexports.scrollbarWidth = function(document) {\n var inner = exports.createElement(\"ace_inner\");\n inner.style.width = \"100%\";\n inner.style.minWidth = \"0px\";\n inner.style.height = \"200px\";\n inner.style.display = \"block\";\n\n var outer = exports.createElement(\"ace_outer\");\n var style = outer.style;\n\n style.position = \"absolute\";\n style.left = \"-10000px\";\n style.overflow = \"hidden\";\n style.width = \"200px\";\n style.minWidth = \"0px\";\n style.height = \"150px\";\n style.display = \"block\";\n\n outer.appendChild(inner);\n\n var body = document.documentElement;\n body.appendChild(outer);\n\n var noScrollbar = inner.offsetWidth;\n\n style.overflow = \"scroll\";\n var withScrollbar = inner.offsetWidth;\n\n if (noScrollbar == withScrollbar) {\n withScrollbar = outer.clientWidth;\n }\n\n body.removeChild(outer);\n\n return noScrollbar-withScrollbar;\n};\n\nexports.computedStyle = function(element, style) {\n return window.getComputedStyle(element, \"\") || {};\n};\n\nexports.setStyle = function(styles, property, value) {\n if (styles[property] !== value) {\n styles[property] = value;\n }\n};\n\nexports.HAS_CSS_ANIMATION = false;\nexports.HAS_CSS_TRANSFORMS = false;\nexports.HI_DPI = useragent.isWin\n ? typeof window !== \"undefined\" && window.devicePixelRatio >= 1.5\n : true;\n\nif (useragent.isChromeOS) exports.HI_DPI = false;\n\nif (typeof document !== \"undefined\") {\n var div = document.createElement(\"div\");\n if (exports.HI_DPI && div.style.transform !== undefined)\n exports.HAS_CSS_TRANSFORMS = true;\n if (!useragent.isEdge && typeof div.style.animationName !== \"undefined\")\n exports.HAS_CSS_ANIMATION = true;\n div = null;\n}\n\nif (exports.HAS_CSS_TRANSFORMS) {\n exports.translate = function(element, tx, ty) {\n element.style.transform = \"translate(\" + Math.round(tx) + \"px, \" + Math.round(ty) +\"px)\";\n };\n} else {\n exports.translate = function(element, tx, ty) {\n element.style.top = Math.round(ty) + \"px\";\n element.style.left = Math.round(tx) + \"px\";\n };\n}\n\n});\n\nace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n};\n\nexports.mixin = function(obj, mixin) {\n for (var key in mixin) {\n obj[key] = mixin[key];\n }\n return obj;\n};\n\nexports.implement = function(proto, mixin) {\n exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./oop\");\nvar Keys = (function() {\n var ret = {\n MODIFIER_KEYS: {\n 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta',\n 91: 'MetaLeft', 92: 'MetaRight', 93: 'ContextMenu'\n },\n\n KEY_MODS: {\n \"ctrl\": 1, \"alt\": 2, \"option\" : 2, \"shift\": 4,\n \"super\": 8, \"meta\": 8, \"command\": 8, \"cmd\": 8, \n \"control\": 1\n },\n\n FUNCTION_KEYS : {\n 8 : \"Backspace\",\n 9 : \"Tab\",\n 13 : \"Return\",\n 19 : \"Pause\",\n 27 : \"Esc\",\n 32 : \"Space\",\n 33 : \"PageUp\",\n 34 : \"PageDown\",\n 35 : \"End\",\n 36 : \"Home\",\n 37 : \"Left\",\n 38 : \"Up\",\n 39 : \"Right\",\n 40 : \"Down\",\n 44 : \"Print\",\n 45 : \"Insert\",\n 46 : \"Delete\",\n 96 : \"Numpad0\",\n 97 : \"Numpad1\",\n 98 : \"Numpad2\",\n 99 : \"Numpad3\",\n 100: \"Numpad4\",\n 101: \"Numpad5\",\n 102: \"Numpad6\",\n 103: \"Numpad7\",\n 104: \"Numpad8\",\n 105: \"Numpad9\",\n '-13': \"NumpadEnter\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"Numlock\",\n 145: \"Scrolllock\"\n },\n\n PRINTABLE_KEYS: {\n 32: ' ', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5',\n 54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 61: '=', 65: 'a',\n 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h',\n 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o',\n 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v',\n 87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.',\n 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\n 219: '[', 220: '\\\\',221: ']', 222: \"'\", 111: '/', 106: '*'\n }\n };\n var name, i;\n for (i in ret.FUNCTION_KEYS) {\n name = ret.FUNCTION_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n for (i in ret.PRINTABLE_KEYS) {\n name = ret.PRINTABLE_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n oop.mixin(ret, ret.MODIFIER_KEYS);\n oop.mixin(ret, ret.PRINTABLE_KEYS);\n oop.mixin(ret, ret.FUNCTION_KEYS);\n ret.enter = ret[\"return\"];\n ret.escape = ret.esc;\n ret.del = ret[\"delete\"];\n ret[173] = '-';\n \n (function() {\n var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\n for (var i = Math.pow(2, mods.length); i--;) { \n ret.KEY_MODS[i] = mods.filter(function(x) {\n return i & ret.KEY_MODS[x];\n }).join(\"-\") + \"-\";\n }\n })();\n\n ret.KEY_MODS[0] = \"\";\n ret.KEY_MODS[-1] = \"input-\";\n\n return ret;\n})();\noop.mixin(exports, Keys);\n\nexports.keyCodeToString = function(keyCode) {\n var keyString = Keys[keyCode];\n if (typeof keyString != \"string\")\n keyString = String.fromCharCode(keyCode);\n return keyString.toLowerCase();\n};\n\n});\n\nace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar keys = require(\"./keys\");\nvar useragent = require(\"./useragent\");\n\nvar pressedKeys = null;\nvar ts = 0;\n\nvar activeListenerOptions;\nfunction detectListenerOptionsSupport() {\n activeListenerOptions = false;\n try {\n document.createComment(\"\").addEventListener(\"test\", function() {}, { \n get passive() { \n activeListenerOptions = {passive: false};\n }\n });\n } catch(e) {}\n}\n\nfunction getListenerOptions() {\n if (activeListenerOptions == undefined)\n detectListenerOptionsSupport();\n return activeListenerOptions;\n}\n\nfunction EventListener(elem, type, callback) {\n this.elem = elem;\n this.type = type;\n this.callback = callback;\n}\nEventListener.prototype.destroy = function() {\n removeListener(this.elem, this.type, this.callback);\n this.elem = this.type = this.callback = undefined;\n};\n\nvar addListener = exports.addListener = function(elem, type, callback, destroyer) {\n elem.addEventListener(type, callback, getListenerOptions());\n if (destroyer)\n destroyer.$toDestroy.push(new EventListener(elem, type, callback));\n};\n\nvar removeListener = exports.removeListener = function(elem, type, callback) {\n elem.removeEventListener(type, callback, getListenerOptions());\n};\nexports.stopEvent = function(e) {\n exports.stopPropagation(e);\n exports.preventDefault(e);\n return false;\n};\n\nexports.stopPropagation = function(e) {\n if (e.stopPropagation)\n e.stopPropagation();\n};\n\nexports.preventDefault = function(e) {\n if (e.preventDefault)\n e.preventDefault();\n};\nexports.getButton = function(e) {\n if (e.type == \"dblclick\")\n return 0;\n if (e.type == \"contextmenu\" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey)))\n return 2;\n return e.button;\n};\n\nexports.capture = function(el, eventHandler, releaseCaptureHandler) {\n var ownerDocument = el && el.ownerDocument || document;\n function onMouseUp(e) {\n eventHandler && eventHandler(e);\n releaseCaptureHandler && releaseCaptureHandler(e);\n\n removeListener(ownerDocument, \"mousemove\", eventHandler);\n removeListener(ownerDocument, \"mouseup\", onMouseUp);\n removeListener(ownerDocument, \"dragstart\", onMouseUp);\n }\n\n addListener(ownerDocument, \"mousemove\", eventHandler);\n addListener(ownerDocument, \"mouseup\", onMouseUp);\n addListener(ownerDocument, \"dragstart\", onMouseUp);\n \n return onMouseUp;\n};\n\nexports.addMouseWheelListener = function(el, callback, destroyer) {\n if (\"onmousewheel\" in el) {\n addListener(el, \"mousewheel\", function(e) {\n var factor = 8;\n if (e.wheelDeltaX !== undefined) {\n e.wheelX = -e.wheelDeltaX / factor;\n e.wheelY = -e.wheelDeltaY / factor;\n } else {\n e.wheelX = 0;\n e.wheelY = -e.wheelDelta / factor;\n }\n callback(e);\n }, destroyer);\n } else if (\"onwheel\" in el) {\n addListener(el, \"wheel\", function(e) {\n var factor = 0.35;\n switch (e.deltaMode) {\n case e.DOM_DELTA_PIXEL:\n e.wheelX = e.deltaX * factor || 0;\n e.wheelY = e.deltaY * factor || 0;\n break;\n case e.DOM_DELTA_LINE:\n case e.DOM_DELTA_PAGE:\n e.wheelX = (e.deltaX || 0) * 5;\n e.wheelY = (e.deltaY || 0) * 5;\n break;\n }\n \n callback(e);\n }, destroyer);\n } else {\n addListener(el, \"DOMMouseScroll\", function(e) {\n if (e.axis && e.axis == e.HORIZONTAL_AXIS) {\n e.wheelX = (e.detail || 0) * 5;\n e.wheelY = 0;\n } else {\n e.wheelX = 0;\n e.wheelY = (e.detail || 0) * 5;\n }\n callback(e);\n }, destroyer);\n }\n};\n\nexports.addMultiMouseDownListener = function(elements, timeouts, eventHandler, callbackName, destroyer) {\n var clicks = 0;\n var startX, startY, timer; \n var eventNames = {\n 2: \"dblclick\",\n 3: \"tripleclick\",\n 4: \"quadclick\"\n };\n\n function onMousedown(e) {\n if (exports.getButton(e) !== 0) {\n clicks = 0;\n } else if (e.detail > 1) {\n clicks++;\n if (clicks > 4)\n clicks = 1;\n } else {\n clicks = 1;\n }\n if (useragent.isIE) {\n var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n if (!timer || isNewClick)\n clicks = 1;\n if (timer)\n clearTimeout(timer);\n timer = setTimeout(function() {timer = null;}, timeouts[clicks - 1] || 600);\n\n if (clicks == 1) {\n startX = e.clientX;\n startY = e.clientY;\n }\n }\n \n e._clicks = clicks;\n\n eventHandler[callbackName](\"mousedown\", e);\n\n if (clicks > 4)\n clicks = 0;\n else if (clicks > 1)\n return eventHandler[callbackName](eventNames[clicks], e);\n }\n if (!Array.isArray(elements))\n elements = [elements];\n elements.forEach(function(el) {\n addListener(el, \"mousedown\", onMousedown, destroyer);\n });\n};\n\nvar getModifierHash = function(e) {\n return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n};\n\nexports.getModifierString = function(e) {\n return keys.KEY_MODS[getModifierHash(e)];\n};\n\nfunction normalizeCommandKeys(callback, e, keyCode) {\n var hashId = getModifierHash(e);\n\n if (!useragent.isMac && pressedKeys) {\n if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\")))\n hashId |= 8;\n if (pressedKeys.altGr) {\n if ((3 & hashId) != 3)\n pressedKeys.altGr = 0;\n else\n return;\n }\n if (keyCode === 18 || keyCode === 17) {\n var location = \"location\" in e ? e.location : e.keyLocation;\n if (keyCode === 17 && location === 1) {\n if (pressedKeys[keyCode] == 1)\n ts = e.timeStamp;\n } else if (keyCode === 18 && hashId === 3 && location === 2) {\n var dt = e.timeStamp - ts;\n if (dt < 50)\n pressedKeys.altGr = true;\n }\n }\n }\n \n if (keyCode in keys.MODIFIER_KEYS) {\n keyCode = -1;\n }\n \n if (!hashId && keyCode === 13) {\n var location = \"location\" in e ? e.location : e.keyLocation;\n if (location === 3) {\n callback(e, hashId, -keyCode);\n if (e.defaultPrevented)\n return;\n }\n }\n \n if (useragent.isChromeOS && hashId & 8) {\n callback(e, hashId, keyCode);\n if (e.defaultPrevented)\n return;\n else\n hashId &= ~8;\n }\n if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\n return false;\n }\n \n return callback(e, hashId, keyCode);\n}\n\n\nexports.addCommandKeyListener = function(el, callback, destroyer) {\n if (useragent.isOldGecko || (useragent.isOpera && !(\"KeyboardEvent\" in window))) {\n var lastKeyDownKeyCode = null;\n addListener(el, \"keydown\", function(e) {\n lastKeyDownKeyCode = e.keyCode;\n }, destroyer);\n addListener(el, \"keypress\", function(e) {\n return normalizeCommandKeys(callback, e, lastKeyDownKeyCode);\n }, destroyer);\n } else {\n var lastDefaultPrevented = null;\n\n addListener(el, \"keydown\", function(e) {\n pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1;\n var result = normalizeCommandKeys(callback, e, e.keyCode);\n lastDefaultPrevented = e.defaultPrevented;\n return result;\n }, destroyer);\n\n addListener(el, \"keypress\", function(e) {\n if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\n exports.stopEvent(e);\n lastDefaultPrevented = null;\n }\n }, destroyer);\n\n addListener(el, \"keyup\", function(e) {\n pressedKeys[e.keyCode] = null;\n }, destroyer);\n\n if (!pressedKeys) {\n resetPressedKeys();\n addListener(window, \"focus\", resetPressedKeys);\n }\n }\n};\nfunction resetPressedKeys() {\n pressedKeys = Object.create(null);\n}\n\nif (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\n var postMessageId = 1;\n exports.nextTick = function(callback, win) {\n win = win || window;\n var messageName = \"zero-timeout-message-\" + (postMessageId++);\n \n var listener = function(e) {\n if (e.data == messageName) {\n exports.stopPropagation(e);\n removeListener(win, \"message\", listener);\n callback();\n }\n };\n \n addListener(win, \"message\", listener);\n win.postMessage(messageName, \"*\");\n };\n}\n\nexports.$idleBlocked = false;\nexports.onIdle = function(cb, timeout) {\n return setTimeout(function handler() {\n if (!exports.$idleBlocked) {\n cb();\n } else {\n setTimeout(handler, 100);\n }\n }, timeout);\n};\n\nexports.$idleBlockId = null;\nexports.blockIdle = function(delay) {\n if (exports.$idleBlockId)\n clearTimeout(exports.$idleBlockId);\n \n exports.$idleBlocked = true;\n exports.$idleBlockId = setTimeout(function() {\n exports.$idleBlocked = false;\n }, delay || 100);\n};\n\nexports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\n || window.mozRequestAnimationFrame\n || window.webkitRequestAnimationFrame\n || window.msRequestAnimationFrame\n || window.oRequestAnimationFrame);\n\nif (exports.nextFrame)\n exports.nextFrame = exports.nextFrame.bind(window);\nelse\n exports.nextFrame = function(callback) {\n setTimeout(callback, 17);\n };\n});\n\nace.define(\"ace/range\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n this.start = {\n row: startRow,\n column: startColumn\n };\n\n this.end = {\n row: endRow,\n column: endColumn\n };\n};\n\n(function() {\n this.isEqual = function(range) {\n return this.start.row === range.start.row &&\n this.end.row === range.end.row &&\n this.start.column === range.start.column &&\n this.end.column === range.end.column;\n };\n this.toString = function() {\n return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n };\n\n this.contains = function(row, column) {\n return this.compare(row, column) == 0;\n };\n this.compareRange = function(range) {\n var cmp,\n end = range.end,\n start = range.start;\n\n cmp = this.compare(end.row, end.column);\n if (cmp == 1) {\n cmp = this.compare(start.row, start.column);\n if (cmp == 1) {\n return 2;\n } else if (cmp == 0) {\n return 1;\n } else {\n return 0;\n }\n } else if (cmp == -1) {\n return -2;\n } else {\n cmp = this.compare(start.row, start.column);\n if (cmp == -1) {\n return -1;\n } else if (cmp == 1) {\n return 42;\n } else {\n return 0;\n }\n }\n };\n this.comparePoint = function(p) {\n return this.compare(p.row, p.column);\n };\n this.containsRange = function(range) {\n return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n };\n this.intersects = function(range) {\n var cmp = this.compareRange(range);\n return (cmp == -1 || cmp == 0 || cmp == 1);\n };\n this.isEnd = function(row, column) {\n return this.end.row == row && this.end.column == column;\n };\n this.isStart = function(row, column) {\n return this.start.row == row && this.start.column == column;\n };\n this.setStart = function(row, column) {\n if (typeof row == \"object\") {\n this.start.column = row.column;\n this.start.row = row.row;\n } else {\n this.start.row = row;\n this.start.column = column;\n }\n };\n this.setEnd = function(row, column) {\n if (typeof row == \"object\") {\n this.end.column = row.column;\n this.end.row = row.row;\n } else {\n this.end.row = row;\n this.end.column = column;\n }\n };\n this.inside = function(row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column) || this.isStart(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n return false;\n };\n this.insideStart = function(row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n return false;\n };\n this.insideEnd = function(row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isStart(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n return false;\n };\n this.compare = function(row, column) {\n if (!this.isMultiLine()) {\n if (row === this.start.row) {\n return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n }\n }\n\n if (row < this.start.row)\n return -1;\n\n if (row > this.end.row)\n return 1;\n\n if (this.start.row === row)\n return column >= this.start.column ? 0 : -1;\n\n if (this.end.row === row)\n return column <= this.end.column ? 0 : 1;\n\n return 0;\n };\n this.compareStart = function(row, column) {\n if (this.start.row == row && this.start.column == column) {\n return -1;\n } else {\n return this.compare(row, column);\n }\n };\n this.compareEnd = function(row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n } else {\n return this.compare(row, column);\n }\n };\n this.compareInside = function(row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n } else if (this.start.row == row && this.start.column == column) {\n return -1;\n } else {\n return this.compare(row, column);\n }\n };\n this.clipRows = function(firstRow, lastRow) {\n if (this.end.row > lastRow)\n var end = {row: lastRow + 1, column: 0};\n else if (this.end.row < firstRow)\n var end = {row: firstRow, column: 0};\n\n if (this.start.row > lastRow)\n var start = {row: lastRow + 1, column: 0};\n else if (this.start.row < firstRow)\n var start = {row: firstRow, column: 0};\n\n return Range.fromPoints(start || this.start, end || this.end);\n };\n this.extend = function(row, column) {\n var cmp = this.compare(row, column);\n\n if (cmp == 0)\n return this;\n else if (cmp == -1)\n var start = {row: row, column: column};\n else\n var end = {row: row, column: column};\n\n return Range.fromPoints(start || this.start, end || this.end);\n };\n\n this.isEmpty = function() {\n return (this.start.row === this.end.row && this.start.column === this.end.column);\n };\n this.isMultiLine = function() {\n return (this.start.row !== this.end.row);\n };\n this.clone = function() {\n return Range.fromPoints(this.start, this.end);\n };\n this.collapseRows = function() {\n if (this.end.column == 0)\n return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);\n else\n return new Range(this.start.row, 0, this.end.row, 0);\n };\n this.toScreenRange = function(session) {\n var screenPosStart = session.documentToScreenPosition(this.start);\n var screenPosEnd = session.documentToScreenPosition(this.end);\n\n return new Range(\n screenPosStart.row, screenPosStart.column,\n screenPosEnd.row, screenPosEnd.column\n );\n };\n this.moveBy = function(row, column) {\n this.start.row += row;\n this.start.column += column;\n this.end.row += row;\n this.end.column += column;\n };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\nace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n var result = '';\n while (count > 0) {\n if (count & 1)\n result += string;\n\n if (count >>= 1)\n string += string;\n }\n return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n var copy = {};\n for (var key in obj) {\n copy[key] = obj[key];\n }\n return copy;\n};\n\nexports.copyArray = function(array){\n var copy = [];\n for (var i=0, l=array.length; i<l; i++) {\n if (array[i] && typeof array[i] == \"object\")\n copy[i] = this.copyObject(array[i]);\n else \n copy[i] = array[i];\n }\n return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n if (typeof obj !== \"object\" || !obj)\n return obj;\n var copy;\n if (Array.isArray(obj)) {\n copy = [];\n for (var key = 0; key < obj.length; key++) {\n copy[key] = deepCopy(obj[key]);\n }\n return copy;\n }\n if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n return obj;\n \n copy = {};\n for (var key in obj)\n copy[key] = deepCopy(obj[key]);\n return copy;\n};\n\nexports.arrayToMap = function(arr) {\n var map = {};\n for (var i=0; i<arr.length; i++) {\n map[arr[i]] = 1;\n }\n return map;\n\n};\n\nexports.createMap = function(props) {\n var map = Object.create(null);\n for (var i in props) {\n map[i] = props[i];\n }\n return map;\n};\nexports.arrayRemove = function(array, value) {\n for (var i = 0; i <= array.length; i++) {\n if (value === array[i]) {\n array.splice(i, 1);\n }\n }\n};\n\nexports.escapeRegExp = function(str) {\n return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n var matches = [];\n\n string.replace(regExp, function(str) {\n matches.push({\n offset: arguments[arguments.length-2],\n length: str.length\n });\n });\n\n return matches;\n};\nexports.deferredCall = function(fcn) {\n var timer = null;\n var callback = function() {\n timer = null;\n fcn();\n };\n\n var deferred = function(timeout) {\n deferred.cancel();\n timer = setTimeout(callback, timeout || 0);\n return deferred;\n };\n\n deferred.schedule = deferred;\n\n deferred.call = function() {\n this.cancel();\n fcn();\n return deferred;\n };\n\n deferred.cancel = function() {\n clearTimeout(timer);\n timer = null;\n return deferred;\n };\n \n deferred.isPending = function() {\n return timer;\n };\n\n return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n var timer = null;\n var callback = function() {\n timer = null;\n fcn();\n };\n\n var _self = function(timeout) {\n if (timer == null)\n timer = setTimeout(callback, timeout || defaultTimeout);\n };\n\n _self.delay = function(timeout) {\n timer && clearTimeout(timer);\n timer = setTimeout(callback, timeout || defaultTimeout);\n };\n _self.schedule = _self;\n\n _self.call = function() {\n this.cancel();\n fcn();\n };\n\n _self.cancel = function() {\n timer && clearTimeout(timer);\n timer = null;\n };\n\n _self.isPending = function() {\n return timer;\n };\n\n return _self;\n};\n});\n\nace.define(\"ace/clipboard\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar $cancelT;\nmodule.exports = { \n lineMode: false,\n pasteCancelled: function() {\n if ($cancelT && $cancelT > Date.now() - 50)\n return true;\n return $cancelT = false;\n },\n cancel: function() {\n $cancelT = Date.now();\n }\n};\n\n});\n\nace.define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/clipboard\",\"ace/lib/keys\"], function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar clipboard = require(\"../clipboard\");\nvar BROKEN_SETDATA = useragent.isChrome < 18;\nvar USE_IE_MIME_TYPE = useragent.isIE;\nvar HAS_FOCUS_ARGS = useragent.isChrome > 63;\nvar MAX_LINE_LENGTH = 400;\n\nvar KEYS = require(\"../lib/keys\");\nvar MODS = KEYS.KEY_MODS;\nvar isIOS = useragent.isIOS;\nvar valueResetRegex = isIOS ? /\\s/ : /\\n/;\nvar isMobile = useragent.isMobile;\n\nvar TextInput = function(parentNode, host) {\n var text = dom.createElement(\"textarea\");\n text.className = \"ace_text-input\";\n\n text.setAttribute(\"wrap\", \"off\");\n text.setAttribute(\"autocorrect\", \"off\");\n text.setAttribute(\"autocapitalize\", \"off\");\n text.setAttribute(\"spellcheck\", false);\n\n text.style.opacity = \"0\";\n parentNode.insertBefore(text, parentNode.firstChild);\n\n var copied = false;\n var pasted = false;\n var inComposition = false;\n var sendingText = false;\n var tempStyle = '';\n \n if (!isMobile)\n text.style.fontSize = \"1px\";\n\n var commandMode = false;\n var ignoreFocusEvents = false;\n \n var lastValue = \"\";\n var lastSelectionStart = 0;\n var lastSelectionEnd = 0;\n var lastRestoreEnd = 0;\n try { var isFocused = document.activeElement === text; } catch(e) {}\n \n event.addListener(text, \"blur\", function(e) {\n if (ignoreFocusEvents) return;\n host.onBlur(e);\n isFocused = false;\n }, host);\n event.addListener(text, \"focus\", function(e) {\n if (ignoreFocusEvents) return;\n isFocused = true;\n if (useragent.isEdge) {\n try {\n if (!document.hasFocus())\n return;\n } catch(e) {}\n }\n host.onFocus(e);\n if (useragent.isEdge)\n setTimeout(resetSelection);\n else\n resetSelection();\n }, host);\n this.$focusScroll = false;\n this.focus = function() {\n if (tempStyle || HAS_FOCUS_ARGS || this.$focusScroll == \"browser\")\n return text.focus({ preventScroll: true });\n\n var top = text.style.top;\n text.style.position = \"fixed\";\n text.style.top = \"0px\";\n try {\n var isTransformed = text.getBoundingClientRect().top != 0;\n } catch(e) {\n return;\n }\n var ancestors = [];\n if (isTransformed) {\n var t = text.parentElement;\n while (t && t.nodeType == 1) {\n ancestors.push(t);\n t.setAttribute(\"ace_nocontext\", true);\n if (!t.parentElement && t.getRootNode)\n t = t.getRootNode().host;\n else\n t = t.parentElement;\n }\n }\n text.focus({ preventScroll: true });\n if (isTransformed) {\n ancestors.forEach(function(p) {\n p.removeAttribute(\"ace_nocontext\");\n });\n }\n setTimeout(function() {\n text.style.position = \"\";\n if (text.style.top == \"0px\")\n text.style.top = top;\n }, 0);\n };\n this.blur = function() {\n text.blur();\n };\n this.isFocused = function() {\n return isFocused;\n };\n \n host.on(\"beforeEndOperation\", function() {\n var curOp = host.curOp;\n var commandName = curOp && curOp.command && curOp.command.name;\n if (commandName == \"insertstring\")\n return;\n var isUserAction = commandName && (curOp.docChanged || curOp.selectionChanged);\n if (inComposition && isUserAction) {\n lastValue = text.value = \"\";\n onCompositionEnd();\n }\n resetSelection();\n });\n \n var resetSelection = isIOS\n ? function(value) {\n if (!isFocused || (copied && !value) || sendingText) return;\n if (!value) \n value = \"\";\n var newValue = \"\\n ab\" + value + \"cde fg\\n\";\n if (newValue != text.value)\n text.value = lastValue = newValue;\n \n var selectionStart = 4;\n var selectionEnd = 4 + (value.length || (host.selection.isEmpty() ? 0 : 1));\n\n if (lastSelectionStart != selectionStart || lastSelectionEnd != selectionEnd) {\n text.setSelectionRange(selectionStart, selectionEnd);\n }\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n }\n : function() {\n if (inComposition || sendingText)\n return;\n if (!isFocused && !afterContextMenu)\n return;\n inComposition = true;\n \n var selectionStart = 0;\n var selectionEnd = 0;\n var line = \"\";\n\n if (host.session) {\n var selection = host.selection;\n var range = selection.getRange();\n var row = selection.cursor.row;\n selectionStart = range.start.column;\n selectionEnd = range.end.column;\n line = host.session.getLine(row);\n\n if (range.start.row != row) {\n var prevLine = host.session.getLine(row - 1);\n selectionStart = range.start.row < row - 1 ? 0 : selectionStart;\n selectionEnd += prevLine.length + 1;\n line = prevLine + \"\\n\" + line;\n }\n else if (range.end.row != row) {\n var nextLine = host.session.getLine(row + 1);\n selectionEnd = range.end.row > row + 1 ? nextLine.length : selectionEnd;\n selectionEnd += line.length + 1;\n line = line + \"\\n\" + nextLine;\n }\n else if (isMobile && row > 0) {\n line = \"\\n\" + line;\n selectionEnd += 1;\n selectionStart += 1;\n }\n\n if (line.length > MAX_LINE_LENGTH) {\n if (selectionStart < MAX_LINE_LENGTH && selectionEnd < MAX_LINE_LENGTH) {\n line = line.slice(0, MAX_LINE_LENGTH);\n } else {\n line = \"\\n\";\n if (selectionStart == selectionEnd) {\n selectionStart = selectionEnd = 0;\n }\n else {\n selectionStart = 0;\n selectionEnd = 1;\n }\n }\n }\n }\n\n var newValue = line + \"\\n\\n\";\n if (newValue != lastValue) {\n text.value = lastValue = newValue;\n lastSelectionStart = lastSelectionEnd = newValue.length;\n }\n if (afterContextMenu) {\n lastSelectionStart = text.selectionStart;\n lastSelectionEnd = text.selectionEnd;\n }\n if (\n lastSelectionEnd != selectionEnd \n || lastSelectionStart != selectionStart \n || text.selectionEnd != lastSelectionEnd // on ie edge selectionEnd changes silently after the initialization\n ) {\n try {\n text.setSelectionRange(selectionStart, selectionEnd);\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n } catch(e){}\n }\n inComposition = false;\n };\n this.resetSelection = resetSelection;\n\n if (isFocused)\n host.onFocus();\n\n\n var isAllSelected = function(text) {\n return text.selectionStart === 0 && text.selectionEnd >= lastValue.length\n && text.value === lastValue && lastValue\n && text.selectionEnd !== lastSelectionEnd;\n };\n\n var onSelect = function(e) {\n if (inComposition)\n return;\n if (copied) {\n copied = false;\n } else if (isAllSelected(text)) {\n host.selectAll();\n resetSelection();\n } else if (isMobile && text.selectionStart != lastSelectionStart) {\n resetSelection();\n }\n };\n\n var inputHandler = null;\n this.setInputHandler = function(cb) {inputHandler = cb;};\n this.getInputHandler = function() {return inputHandler;};\n var afterContextMenu = false;\n \n var sendText = function(value, fromInput) {\n if (afterContextMenu)\n afterContextMenu = false;\n if (pasted) {\n resetSelection();\n if (value)\n host.onPaste(value);\n pasted = false;\n return \"\";\n } else {\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n \n var extendLeft = lastSelectionStart;\n var extendRight = lastValue.length - lastSelectionEnd;\n \n var inserted = value;\n var restoreStart = value.length - selectionStart;\n var restoreEnd = value.length - selectionEnd;\n \n var i = 0;\n while (extendLeft > 0 && lastValue[i] == value[i]) {\n i++;\n extendLeft--;\n }\n inserted = inserted.slice(i);\n i = 1;\n while (extendRight > 0 && lastValue.length - i > lastSelectionStart - 1 && lastValue[lastValue.length - i] == value[value.length - i]) {\n i++;\n extendRight--;\n }\n restoreStart -= i-1;\n restoreEnd -= i-1;\n var endIndex = inserted.length - i + 1;\n if (endIndex < 0) {\n extendLeft = -endIndex;\n endIndex = 0;\n } \n inserted = inserted.slice(0, endIndex);\n if (!fromInput && !inserted && !restoreStart && !extendLeft && !extendRight && !restoreEnd)\n return \"\";\n sendingText = true;\n var shouldReset = false;\n if (useragent.isAndroid && inserted == \". \") {\n inserted = \" \";\n shouldReset = true;\n }\n \n if (inserted && !extendLeft && !extendRight && !restoreStart && !restoreEnd || commandMode) {\n host.onTextInput(inserted);\n } else {\n host.onTextInput(inserted, {\n extendLeft: extendLeft,\n extendRight: extendRight,\n restoreStart: restoreStart,\n restoreEnd: restoreEnd\n });\n }\n sendingText = false;\n \n lastValue = value;\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n lastRestoreEnd = restoreEnd;\n return shouldReset ? \"\\n\" : inserted;\n }\n };\n var onInput = function(e) {\n if (inComposition)\n return onCompositionUpdate();\n if (e && e.inputType) {\n if (e.inputType == \"historyUndo\") return host.execCommand(\"undo\");\n if (e.inputType == \"historyRedo\") return host.execCommand(\"redo\");\n }\n var data = text.value;\n var inserted = sendText(data, true);\n if (\n data.length > MAX_LINE_LENGTH + 100 \n || valueResetRegex.test(inserted)\n || isMobile && lastSelectionStart < 1 && lastSelectionStart == lastSelectionEnd\n ) {\n resetSelection();\n }\n };\n \n var handleClipboardData = function(e, data, forceIEMime) {\n var clipboardData = e.clipboardData || window.clipboardData;\n if (!clipboardData || BROKEN_SETDATA)\n return;\n var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n try {\n if (data) {\n return clipboardData.setData(mime, data) !== false;\n } else {\n return clipboardData.getData(mime);\n }\n } catch(e) {\n if (!forceIEMime)\n return handleClipboardData(e, data, true);\n }\n };\n\n var doCopy = function(e, isCut) {\n var data = host.getCopyText();\n if (!data)\n return event.preventDefault(e);\n\n if (handleClipboardData(e, data)) {\n if (isIOS) {\n resetSelection(data);\n copied = data;\n setTimeout(function () {\n copied = false;\n }, 10);\n }\n isCut ? host.onCut() : host.onCopy();\n event.preventDefault(e);\n } else {\n copied = true;\n text.value = data;\n text.select();\n setTimeout(function(){\n copied = false;\n resetSelection();\n isCut ? host.onCut() : host.onCopy();\n });\n }\n };\n \n var onCut = function(e) {\n doCopy(e, true);\n };\n \n var onCopy = function(e) {\n doCopy(e, false);\n };\n \n var onPaste = function(e) {\n var data = handleClipboardData(e);\n if (clipboard.pasteCancelled())\n return;\n if (typeof data == \"string\") {\n if (data)\n host.onPaste(data, e);\n if (useragent.isIE)\n setTimeout(resetSelection);\n event.preventDefault(e);\n }\n else {\n text.value = \"\";\n pasted = true;\n }\n };\n\n event.addCommandKeyListener(text, host.onCommandKey.bind(host), host);\n\n event.addListener(text, \"select\", onSelect, host);\n event.addListener(text, \"input\", onInput, host);\n\n event.addListener(text, \"cut\", onCut, host);\n event.addListener(text, \"copy\", onCopy, host);\n event.addListener(text, \"paste\", onPaste, host);\n if (!('oncut' in text) || !('oncopy' in text) || !('onpaste' in text)) {\n event.addListener(parentNode, \"keydown\", function(e) {\n if ((useragent.isMac && !e.metaKey) || !e.ctrlKey)\n return;\n\n switch (e.keyCode) {\n case 67:\n onCopy(e);\n break;\n case 86:\n onPaste(e);\n break;\n case 88:\n onCut(e);\n break;\n }\n }, host);\n }\n var onCompositionStart = function(e) {\n if (inComposition || !host.onCompositionStart || host.$readOnly) \n return;\n \n inComposition = {};\n\n if (commandMode)\n return;\n \n if (e.data)\n inComposition.useTextareaForIME = false;\n \n setTimeout(onCompositionUpdate, 0);\n host._signal(\"compositionStart\");\n host.on(\"mousedown\", cancelComposition);\n \n var range = host.getSelectionRange();\n range.end.row = range.start.row;\n range.end.column = range.start.column;\n inComposition.markerRange = range;\n inComposition.selectionStart = lastSelectionStart;\n host.onCompositionStart(inComposition);\n \n if (inComposition.useTextareaForIME) {\n lastValue = text.value = \"\";\n lastSelectionStart = 0;\n lastSelectionEnd = 0;\n }\n else {\n if (text.msGetInputContext)\n inComposition.context = text.msGetInputContext();\n if (text.getInputContext)\n inComposition.context = text.getInputContext();\n }\n };\n\n var onCompositionUpdate = function() {\n if (!inComposition || !host.onCompositionUpdate || host.$readOnly)\n return;\n if (commandMode)\n return cancelComposition();\n \n if (inComposition.useTextareaForIME) {\n host.onCompositionUpdate(text.value);\n }\n else {\n var data = text.value;\n sendText(data);\n if (inComposition.markerRange) {\n if (inComposition.context) {\n inComposition.markerRange.start.column = inComposition.selectionStart\n = inComposition.context.compositionStartOffset;\n }\n inComposition.markerRange.end.column = inComposition.markerRange.start.column\n + lastSelectionEnd - inComposition.selectionStart + lastRestoreEnd;\n }\n }\n };\n\n var onCompositionEnd = function(e) {\n if (!host.onCompositionEnd || host.$readOnly) return;\n inComposition = false;\n host.onCompositionEnd();\n host.off(\"mousedown\", cancelComposition);\n if (e) onInput();\n };\n \n\n function cancelComposition() {\n ignoreFocusEvents = true;\n text.blur();\n text.focus();\n ignoreFocusEvents = false;\n }\n\n var syncComposition = lang.delayedCall(onCompositionUpdate, 50).schedule.bind(null, null);\n \n function onKeyup(e) {\n if (e.keyCode == 27 && text.value.length < text.selectionStart) {\n if (!inComposition)\n lastValue = text.value;\n lastSelectionStart = lastSelectionEnd = -1;\n resetSelection();\n }\n syncComposition();\n }\n\n event.addListener(text, \"compositionstart\", onCompositionStart, host);\n event.addListener(text, \"compositionupdate\", onCompositionUpdate, host);\n event.addListener(text, \"keyup\", onKeyup, host);\n event.addListener(text, \"keydown\", syncComposition, host);\n event.addListener(text, \"compositionend\", onCompositionEnd, host);\n\n this.getElement = function() {\n return text;\n };\n this.setCommandMode = function(value) {\n commandMode = value;\n text.readOnly = false;\n };\n \n this.setReadOnly = function(readOnly) {\n if (!commandMode)\n text.readOnly = readOnly;\n };\n\n this.setCopyWithEmptySelection = function(value) {\n };\n\n this.onContextMenu = function(e) {\n afterContextMenu = true;\n resetSelection();\n host._emit(\"nativecontextmenu\", {target: host, domEvent: e});\n this.moveToMouse(e, true);\n };\n \n this.moveToMouse = function(e, bringToFront) {\n if (!tempStyle)\n tempStyle = text.style.cssText;\n text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\")\n + (useragent.isIE ? \"opacity:0.1;\" : \"\")\n + \"text-indent: -\" + (lastSelectionStart + lastSelectionEnd) * host.renderer.characterWidth * 0.5 + \"px;\";\n\n var rect = host.container.getBoundingClientRect();\n var style = dom.computedStyle(host.container);\n var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);\n var maxTop = rect.bottom - top - text.clientHeight -2;\n var move = function(e) {\n dom.translate(text, e.clientX - left - 2, Math.min(e.clientY - top - 2, maxTop));\n }; \n move(e);\n\n if (e.type != \"mousedown\")\n return;\n\n host.renderer.$isMousePressed = true;\n\n clearTimeout(closeTimeout);\n if (useragent.isWin)\n event.capture(host.container, move, onContextMenuClose);\n };\n\n this.onContextMenuClose = onContextMenuClose;\n var closeTimeout;\n function onContextMenuClose() {\n clearTimeout(closeTimeout);\n closeTimeout = setTimeout(function () {\n if (tempStyle) {\n text.style.cssText = tempStyle;\n tempStyle = '';\n }\n host.renderer.$isMousePressed = false;\n if (host.renderer.$keepTextAreaAtCursor)\n host.renderer.$moveTextAreaToCursor();\n }, 0);\n }\n\n var onContextMenu = function(e) {\n host.textInput.onContextMenu(e);\n onContextMenuClose();\n };\n event.addListener(text, \"mouseup\", onContextMenu, host);\n event.addListener(text, \"mousedown\", function(e) {\n e.preventDefault();\n onContextMenuClose();\n }, host);\n event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu, host);\n event.addListener(text, \"contextmenu\", onContextMenu, host);\n \n if (isIOS)\n addIosSelectionHandler(parentNode, host, text);\n\n function addIosSelectionHandler(parentNode, host, text) {\n var typingResetTimeout = null;\n var typing = false;\n \n text.addEventListener(\"keydown\", function (e) {\n if (typingResetTimeout) clearTimeout(typingResetTimeout);\n typing = true;\n }, true);\n\n text.addEventListener(\"keyup\", function (e) {\n typingResetTimeout = setTimeout(function () {\n typing = false;\n }, 100);\n }, true);\n var detectArrowKeys = function(e) {\n if (document.activeElement !== text) return;\n if (typing || inComposition || host.$mouseHandler.isMousePressed) return;\n\n if (copied) {\n return;\n }\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n \n var key = null;\n var modifier = 0;\n if (selectionStart == 0) {\n key = KEYS.up;\n } else if (selectionStart == 1) {\n key = KEYS.home;\n } else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd] == \"\\n\") {\n key = KEYS.end;\n } else if (selectionStart < lastSelectionStart && lastValue[selectionStart - 1] == \" \") {\n key = KEYS.left;\n modifier = MODS.option;\n } else if (\n selectionStart < lastSelectionStart\n || (\n selectionStart == lastSelectionStart \n && lastSelectionEnd != lastSelectionStart\n && selectionStart == selectionEnd\n )\n ) {\n key = KEYS.left;\n } else if (selectionEnd > lastSelectionEnd && lastValue.slice(0, selectionEnd).split(\"\\n\").length > 2) {\n key = KEYS.down;\n } else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd - 1] == \" \") {\n key = KEYS.right;\n modifier = MODS.option;\n } else if (\n selectionEnd > lastSelectionEnd\n || (\n selectionEnd == lastSelectionEnd \n && lastSelectionEnd != lastSelectionStart\n && selectionStart == selectionEnd\n )\n ) {\n key = KEYS.right;\n }\n \n if (selectionStart !== selectionEnd)\n modifier |= MODS.shift;\n\n if (key) {\n var result = host.onCommandKey({}, modifier, key);\n if (!result && host.commands) {\n key = KEYS.keyCodeToString(key);\n var command = host.commands.findKeyCommand(modifier, key);\n if (command)\n host.execCommand(command);\n }\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n resetSelection(\"\");\n }\n };\n document.addEventListener(\"selectionchange\", detectArrowKeys);\n host.on(\"destroy\", function() {\n document.removeEventListener(\"selectionchange\", detectArrowKeys);\n });\n }\n};\n\nexports.TextInput = TextInput;\nexports.$setUserAgentForTests = function(_isMobile, _isIOS) {\n isMobile = _isMobile;\n isIOS = _isIOS;\n};\n});\n\nace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar useragent = require(\"../lib/useragent\");\n\nvar DRAG_OFFSET = 0; // pixels\nvar SCROLL_COOLDOWN_T = 550; // milliseconds\n\nfunction DefaultHandlers(mouseHandler) {\n mouseHandler.$clickSelection = null;\n\n var editor = mouseHandler.editor;\n editor.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n editor.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(mouseHandler));\n editor.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(mouseHandler));\n\n var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\",\n \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n\n exports.forEach(function(x) {\n mouseHandler[x] = this[x];\n }, this);\n\n mouseHandler.selectByLines = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n mouseHandler.selectByWords = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n}\n\n(function() {\n\n this.onMouseDown = function(ev) {\n var inSelection = ev.inSelection();\n var pos = ev.getDocumentPosition();\n this.mousedownEvent = ev;\n var editor = this.editor;\n\n var button = ev.getButton();\n if (button !== 0) {\n var selectionRange = editor.getSelectionRange();\n var selectionEmpty = selectionRange.isEmpty();\n if (selectionEmpty || button == 1)\n editor.selection.moveToPosition(pos);\n if (button == 2) {\n editor.textInput.onContextMenu(ev.domEvent);\n if (!useragent.isMozilla)\n ev.preventDefault();\n }\n return;\n }\n\n this.mousedownEvent.time = Date.now();\n if (inSelection && !editor.isFocused()) {\n editor.focus();\n if (this.$focusTimeout && !this.$clickSelection && !editor.inMultiSelectMode) {\n this.setState(\"focusWait\");\n this.captureMouse(ev);\n return;\n }\n }\n\n this.captureMouse(ev);\n this.startSelect(pos, ev.domEvent._clicks > 1);\n return ev.preventDefault();\n };\n\n this.startSelect = function(pos, waitForClickSelection) {\n pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n var editor = this.editor;\n if (!this.mousedownEvent) return;\n if (this.mousedownEvent.getShiftKey())\n editor.selection.selectToPosition(pos);\n else if (!waitForClickSelection)\n editor.selection.moveToPosition(pos);\n if (!waitForClickSelection)\n this.select();\n if (editor.renderer.scroller.setCapture) {\n editor.renderer.scroller.setCapture();\n }\n editor.setStyle(\"ace_selecting\");\n this.setState(\"select\");\n };\n\n this.select = function() {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n if (this.$clickSelection) {\n var cmp = this.$clickSelection.comparePoint(cursor);\n\n if (cmp == -1) {\n anchor = this.$clickSelection.end;\n } else if (cmp == 1) {\n anchor = this.$clickSelection.start;\n } else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n };\n\n this.extendSelectionBy = function(unitName) {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n var range = editor.selection[unitName](cursor.row, cursor.column);\n if (this.$clickSelection) {\n var cmpStart = this.$clickSelection.comparePoint(range.start);\n var cmpEnd = this.$clickSelection.comparePoint(range.end);\n\n if (cmpStart == -1 && cmpEnd <= 0) {\n anchor = this.$clickSelection.end;\n if (range.end.row != cursor.row || range.end.column != cursor.column)\n cursor = range.start;\n } else if (cmpEnd == 1 && cmpStart >= 0) {\n anchor = this.$clickSelection.start;\n if (range.start.row != cursor.row || range.start.column != cursor.column)\n cursor = range.end;\n } else if (cmpStart == -1 && cmpEnd == 1) {\n cursor = range.end;\n anchor = range.start;\n } else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n };\n\n this.selectEnd =\n this.selectAllEnd =\n this.selectByWordsEnd =\n this.selectByLinesEnd = function() {\n this.$clickSelection = null;\n this.editor.unsetStyle(\"ace_selecting\");\n if (this.editor.renderer.scroller.releaseCapture) {\n this.editor.renderer.scroller.releaseCapture();\n }\n };\n\n this.focusWait = function() {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n var time = Date.now();\n\n if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimeout)\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n };\n\n this.onDoubleClick = function(ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n var session = editor.session;\n\n var range = session.getBracketRange(pos);\n if (range) {\n if (range.isEmpty()) {\n range.start.column--;\n range.end.column++;\n }\n this.setState(\"select\");\n } else {\n range = editor.selection.getWordRange(pos.row, pos.column);\n this.setState(\"selectByWords\");\n }\n this.$clickSelection = range;\n this.select();\n };\n\n this.onTripleClick = function(ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n\n this.setState(\"selectByLines\");\n var range = editor.getSelectionRange();\n if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\n this.$clickSelection = editor.selection.getLineRange(range.start.row);\n this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\n } else {\n this.$clickSelection = editor.selection.getLineRange(pos.row);\n }\n this.select();\n };\n\n this.onQuadClick = function(ev) {\n var editor = this.editor;\n\n editor.selectAll();\n this.$clickSelection = editor.getSelectionRange();\n this.setState(\"selectAll\");\n };\n\n this.onMouseWheel = function(ev) {\n if (ev.getAccelKey())\n return;\n if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\n ev.wheelX = ev.wheelY;\n ev.wheelY = 0;\n }\n \n var editor = this.editor;\n \n if (!this.$lastScroll)\n this.$lastScroll = { t: 0, vx: 0, vy: 0, allowed: 0 };\n \n var prevScroll = this.$lastScroll;\n var t = ev.domEvent.timeStamp;\n var dt = t - prevScroll.t;\n var vx = dt ? ev.wheelX / dt : prevScroll.vx;\n var vy = dt ? ev.wheelY / dt : prevScroll.vy;\n if (dt < SCROLL_COOLDOWN_T) {\n vx = (vx + prevScroll.vx) / 2;\n vy = (vy + prevScroll.vy) / 2;\n }\n \n var direction = Math.abs(vx / vy);\n \n var canScroll = false;\n if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0))\n canScroll = true;\n if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed))\n canScroll = true;\n \n if (canScroll) {\n prevScroll.allowed = t;\n } else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) {\n var isSlower = Math.abs(vx) <= 1.5 * Math.abs(prevScroll.vx)\n && Math.abs(vy) <= 1.5 * Math.abs(prevScroll.vy);\n if (isSlower) {\n canScroll = true;\n prevScroll.allowed = t;\n }\n else {\n prevScroll.allowed = 0;\n }\n }\n \n prevScroll.t = t;\n prevScroll.vx = vx;\n prevScroll.vy = vy;\n\n if (canScroll) {\n editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n return ev.stop();\n }\n };\n\n}).call(DefaultHandlers.prototype);\n\nexports.DefaultHandlers = DefaultHandlers;\n\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\n\nfunction calcRangeOrientation(range, cursor) {\n if (range.start.row == range.end.row)\n var cmp = 2 * cursor.column - range.start.column - range.end.column;\n else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)\n var cmp = cursor.column - 4;\n else\n var cmp = 2 * cursor.row - range.start.row - range.end.row;\n\n if (cmp < 0)\n return {cursor: range.start, anchor: range.end};\n else\n return {cursor: range.end, anchor: range.start};\n}\n\n});\n\nace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nfunction Tooltip (parentNode) {\n this.isOpen = false;\n this.$element = null;\n this.$parentNode = parentNode;\n}\n\n(function() {\n this.$init = function() {\n this.$element = dom.createElement(\"div\");\n this.$element.className = \"ace_tooltip\";\n this.$element.style.display = \"none\";\n this.$parentNode.appendChild(this.$element);\n return this.$element;\n };\n this.getElement = function() {\n return this.$element || this.$init();\n };\n this.setText = function(text) {\n this.getElement().textContent = text;\n };\n this.setHtml = function(html) {\n this.getElement().innerHTML = html;\n };\n this.setPosition = function(x, y) {\n this.getElement().style.left = x + \"px\";\n this.getElement().style.top = y + \"px\";\n };\n this.setClassName = function(className) {\n dom.addCssClass(this.getElement(), className);\n };\n this.show = function(text, x, y) {\n if (text != null)\n this.setText(text);\n if (x != null && y != null)\n this.setPosition(x, y);\n if (!this.isOpen) {\n this.getElement().style.display = \"block\";\n this.isOpen = true;\n }\n };\n\n this.hide = function() {\n if (this.isOpen) {\n this.getElement().style.display = \"none\";\n this.isOpen = false;\n }\n };\n this.getHeight = function() {\n return this.getElement().offsetHeight;\n };\n this.getWidth = function() {\n return this.getElement().offsetWidth;\n };\n \n this.destroy = function() {\n this.isOpen = false;\n if (this.$element && this.$element.parentNode) {\n this.$element.parentNode.removeChild(this.$element);\n }\n };\n\n}).call(Tooltip.prototype);\n\nexports.Tooltip = Tooltip;\n});\n\nace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/tooltip\"], function(require, exports, module) {\n\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar event = require(\"../lib/event\");\nvar Tooltip = require(\"../tooltip\").Tooltip;\n\nfunction GutterHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var gutter = editor.renderer.$gutterLayer;\n var tooltip = new GutterTooltip(editor.container);\n\n mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function(e) {\n if (!editor.isFocused() || e.getButton() != 0)\n return;\n var gutterRegion = gutter.getRegion(e);\n\n if (gutterRegion == \"foldWidgets\")\n return;\n\n var row = e.getDocumentPosition().row;\n var selection = editor.session.selection;\n\n if (e.getShiftKey())\n selection.selectTo(row, 0);\n else {\n if (e.domEvent.detail == 2) {\n editor.selectAll();\n return e.preventDefault();\n }\n mouseHandler.$clickSelection = editor.selection.getLineRange(row);\n }\n mouseHandler.setState(\"selectByLines\");\n mouseHandler.captureMouse(e);\n return e.preventDefault();\n });\n\n\n var tooltipTimeout, mouseEvent, tooltipAnnotation;\n\n function showTooltip() {\n var row = mouseEvent.getDocumentPosition().row;\n var annotation = gutter.$annotations[row];\n if (!annotation)\n return hideTooltip();\n\n var maxRow = editor.session.getLength();\n if (row == maxRow) {\n var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\n var pos = mouseEvent.$pos;\n if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column))\n return hideTooltip();\n }\n\n if (tooltipAnnotation == annotation)\n return;\n tooltipAnnotation = annotation.text.join(\"<br/>\");\n\n tooltip.setHtml(tooltipAnnotation);\n tooltip.show();\n editor._signal(\"showGutterTooltip\", tooltip);\n editor.on(\"mousewheel\", hideTooltip);\n\n if (mouseHandler.$tooltipFollowsMouse) {\n moveTooltip(mouseEvent);\n } else {\n var gutterElement = mouseEvent.domEvent.target;\n var rect = gutterElement.getBoundingClientRect();\n var style = tooltip.getElement().style;\n style.left = rect.right + \"px\";\n style.top = rect.bottom + \"px\";\n }\n }\n\n function hideTooltip() {\n if (tooltipTimeout)\n tooltipTimeout = clearTimeout(tooltipTimeout);\n if (tooltipAnnotation) {\n tooltip.hide();\n tooltipAnnotation = null;\n editor._signal(\"hideGutterTooltip\", tooltip);\n editor.off(\"mousewheel\", hideTooltip);\n }\n }\n\n function moveTooltip(e) {\n tooltip.setPosition(e.x, e.y);\n }\n\n mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function(e) {\n var target = e.domEvent.target || e.domEvent.srcElement;\n if (dom.hasCssClass(target, \"ace_fold-widget\"))\n return hideTooltip();\n\n if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse)\n moveTooltip(e);\n\n mouseEvent = e;\n if (tooltipTimeout)\n return;\n tooltipTimeout = setTimeout(function() {\n tooltipTimeout = null;\n if (mouseEvent && !mouseHandler.isMousePressed)\n showTooltip();\n else\n hideTooltip();\n }, 50);\n });\n\n event.addListener(editor.renderer.$gutter, \"mouseout\", function(e) {\n mouseEvent = null;\n if (!tooltipAnnotation || tooltipTimeout)\n return;\n\n tooltipTimeout = setTimeout(function() {\n tooltipTimeout = null;\n hideTooltip();\n }, 50);\n }, editor);\n \n editor.on(\"changeSession\", hideTooltip);\n}\n\nfunction GutterTooltip(parentNode) {\n Tooltip.call(this, parentNode);\n}\n\noop.inherits(GutterTooltip, Tooltip);\n\n(function(){\n this.setPosition = function(x, y) {\n var windowWidth = window.innerWidth || document.documentElement.clientWidth;\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n var width = this.getWidth();\n var height = this.getHeight();\n x += 15;\n y += 15;\n if (x + width > windowWidth) {\n x -= (x + width) - windowWidth;\n }\n if (y + height > windowHeight) {\n y -= 20 + height;\n }\n Tooltip.prototype.setPosition.call(this, x, y);\n };\n\n}).call(GutterTooltip.prototype);\n\n\n\nexports.GutterHandler = GutterHandler;\n\n});\n\nace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar MouseEvent = exports.MouseEvent = function(domEvent, editor) {\n this.domEvent = domEvent;\n this.editor = editor;\n \n this.x = this.clientX = domEvent.clientX;\n this.y = this.clientY = domEvent.clientY;\n\n this.$pos = null;\n this.$inSelection = null;\n \n this.propagationStopped = false;\n this.defaultPrevented = false;\n};\n\n(function() { \n \n this.stopPropagation = function() {\n event.stopPropagation(this.domEvent);\n this.propagationStopped = true;\n };\n \n this.preventDefault = function() {\n event.preventDefault(this.domEvent);\n this.defaultPrevented = true;\n };\n \n this.stop = function() {\n this.stopPropagation();\n this.preventDefault();\n };\n this.getDocumentPosition = function() {\n if (this.$pos)\n return this.$pos;\n \n this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n return this.$pos;\n };\n this.inSelection = function() {\n if (this.$inSelection !== null)\n return this.$inSelection;\n \n var editor = this.editor;\n \n\n var selectionRange = editor.getSelectionRange();\n if (selectionRange.isEmpty())\n this.$inSelection = false;\n else {\n var pos = this.getDocumentPosition();\n this.$inSelection = selectionRange.contains(pos.row, pos.column);\n }\n\n return this.$inSelection;\n };\n this.getButton = function() {\n return event.getButton(this.domEvent);\n };\n this.getShiftKey = function() {\n return this.domEvent.shiftKey;\n };\n \n this.getAccelKey = useragent.isMac\n ? function() { return this.domEvent.metaKey; }\n : function() { return this.domEvent.ctrlKey; };\n \n}).call(MouseEvent.prototype);\n\n});\n\nace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\n\nvar AUTOSCROLL_DELAY = 200;\nvar SCROLL_CURSOR_DELAY = 200;\nvar SCROLL_CURSOR_HYSTERESIS = 5;\n\nfunction DragdropHandler(mouseHandler) {\n\n var editor = mouseHandler.editor;\n\n var dragImage = dom.createElement(\"div\");\n dragImage.style.cssText = \"top:-100px;position:absolute;z-index:2147483647;opacity:0.5\";\n dragImage.textContent = \"\\xa0\";\n\n var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n\n exports.forEach(function(x) {\n mouseHandler[x] = this[x];\n }, this);\n editor.on(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n\n var mouseTarget = editor.container;\n var dragSelectionMarker, x, y;\n var timerId, range;\n var dragCursor, counter = 0;\n var dragOperation;\n var isInternal;\n var autoScrollStartTime;\n var cursorMovedTime;\n var cursorPointOnCaretMoved;\n\n this.onDragStart = function(e) {\n if (this.cancelDrag || !mouseTarget.draggable) {\n var self = this;\n setTimeout(function(){\n self.startSelect();\n self.captureMouse(e);\n }, 0);\n return e.preventDefault();\n }\n range = editor.getSelectionRange();\n\n var dataTransfer = e.dataTransfer;\n dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n editor.container.appendChild(dragImage);\n\n dataTransfer.setDragImage && dataTransfer.setDragImage(dragImage, 0, 0);\n setTimeout(function() {\n editor.container.removeChild(dragImage);\n });\n dataTransfer.clearData();\n dataTransfer.setData(\"Text\", editor.session.getTextRange());\n\n isInternal = true;\n this.setState(\"drag\");\n };\n\n this.onDragEnd = function(e) {\n mouseTarget.draggable = false;\n isInternal = false;\n this.setState(null);\n if (!editor.getReadOnly()) {\n var dropEffect = e.dataTransfer.dropEffect;\n if (!dragOperation && dropEffect == \"move\")\n editor.session.remove(editor.getSelectionRange());\n editor.$resetCursorStyle();\n }\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n };\n\n this.onDragEnter = function(e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker)\n addDragMarker();\n counter++;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n\n this.onDragOver = function(e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker) {\n addDragMarker();\n counter++;\n }\n if (onMouseMoveTimer !== null)\n onMouseMoveTimer = null;\n\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n\n this.onDragLeave = function(e) {\n counter--;\n if (counter <= 0 && dragSelectionMarker) {\n clearDragMarker();\n dragOperation = null;\n return event.preventDefault(e);\n }\n };\n\n this.onDrop = function(e) {\n if (!dragCursor)\n return;\n var dataTransfer = e.dataTransfer;\n if (isInternal) {\n switch (dragOperation) {\n case \"move\":\n if (range.contains(dragCursor.row, dragCursor.column)) {\n range = {\n start: dragCursor,\n end: dragCursor\n };\n } else {\n range = editor.moveText(range, dragCursor);\n }\n break;\n case \"copy\":\n range = editor.moveText(range, dragCursor, true);\n break;\n }\n } else {\n var dropData = dataTransfer.getData('Text');\n range = {\n start: dragCursor,\n end: editor.session.insert(dragCursor, dropData)\n };\n editor.focus();\n dragOperation = null;\n }\n clearDragMarker();\n return event.preventDefault(e);\n };\n\n event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler), editor);\n\n function scrollCursorIntoView(cursor, prevCursor) {\n var now = Date.now();\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n var hMovement = !prevCursor || cursor.column != prevCursor.column;\n if (!cursorMovedTime || vMovement || hMovement) {\n editor.moveCursorToPosition(cursor);\n cursorMovedTime = now;\n cursorPointOnCaretMoved = {x: x, y: y};\n } else {\n var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n if (distance > SCROLL_CURSOR_HYSTERESIS) {\n cursorMovedTime = null;\n } else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n editor.renderer.scrollCursorIntoView();\n cursorMovedTime = null;\n }\n }\n }\n\n function autoScroll(cursor, prevCursor) {\n var now = Date.now();\n var lineHeight = editor.renderer.layerConfig.lineHeight;\n var characterWidth = editor.renderer.layerConfig.characterWidth;\n var editorRect = editor.renderer.scroller.getBoundingClientRect();\n var offsets = {\n x: {\n left: x - editorRect.left,\n right: editorRect.right - x\n },\n y: {\n top: y - editorRect.top,\n bottom: editorRect.bottom - y\n }\n };\n var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\n var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\n var scrollCursor = {row: cursor.row, column: cursor.column};\n if (nearestXOffset / characterWidth <= 2) {\n scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\n }\n if (nearestYOffset / lineHeight <= 1) {\n scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\n }\n var vScroll = cursor.row != scrollCursor.row;\n var hScroll = cursor.column != scrollCursor.column;\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n if (vScroll || (hScroll && !vMovement)) {\n if (!autoScrollStartTime)\n autoScrollStartTime = now;\n else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\n editor.renderer.scrollCursorIntoView(scrollCursor);\n } else {\n autoScrollStartTime = null;\n }\n }\n\n function onDragInterval() {\n var prevCursor = dragCursor;\n dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n scrollCursorIntoView(dragCursor, prevCursor);\n autoScroll(dragCursor, prevCursor);\n }\n\n function addDragMarker() {\n range = editor.selection.toOrientedRange();\n dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\n editor.clearSelection();\n if (editor.isFocused())\n editor.renderer.$cursorLayer.setBlinking(false);\n clearInterval(timerId);\n onDragInterval();\n timerId = setInterval(onDragInterval, 20);\n counter = 0;\n event.addListener(document, \"mousemove\", onMouseMove);\n }\n\n function clearDragMarker() {\n clearInterval(timerId);\n editor.session.removeMarker(dragSelectionMarker);\n dragSelectionMarker = null;\n editor.selection.fromOrientedRange(range);\n if (editor.isFocused() && !isInternal)\n editor.$resetCursorStyle();\n range = null;\n dragCursor = null;\n counter = 0;\n autoScrollStartTime = null;\n cursorMovedTime = null;\n event.removeListener(document, \"mousemove\", onMouseMove);\n }\n var onMouseMoveTimer = null;\n function onMouseMove() {\n if (onMouseMoveTimer == null) {\n onMouseMoveTimer = setTimeout(function() {\n if (onMouseMoveTimer != null && dragSelectionMarker)\n clearDragMarker();\n }, 20);\n }\n }\n\n function canAccept(dataTransfer) {\n var types = dataTransfer.types;\n return !types || Array.prototype.some.call(types, function(type) {\n return type == 'text/plain' || type == 'Text';\n });\n }\n\n function getDropEffect(e) {\n var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n\n var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n var effectAllowed = \"uninitialized\";\n try {\n effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n } catch (e) {}\n var dropEffect = \"none\";\n\n if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n else if (moveAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"move\";\n else if (copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n\n return dropEffect;\n }\n}\n\n(function() {\n\n this.dragWait = function() {\n var interval = Date.now() - this.mousedownEvent.time;\n if (interval > this.editor.getDragDelay())\n this.startDrag();\n };\n\n this.dragWaitEnd = function() {\n var target = this.editor.container;\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n this.selectEnd();\n };\n\n this.dragReadyEnd = function(e) {\n this.editor.$resetCursorStyle();\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n this.dragWaitEnd();\n };\n\n this.startDrag = function(){\n this.cancelDrag = false;\n var editor = this.editor;\n var target = editor.container;\n target.draggable = true;\n editor.renderer.$cursorLayer.setBlinking(false);\n editor.setStyle(\"ace_dragging\");\n var cursorStyle = useragent.isWin ? \"default\" : \"move\";\n editor.renderer.setCursorStyle(cursorStyle);\n this.setState(\"dragReady\");\n };\n\n this.onMouseDrag = function(e) {\n var target = this.editor.container;\n if (useragent.isIE && this.state == \"dragReady\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 3)\n target.dragDrop();\n }\n if (this.state === \"dragWait\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 0) {\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n }\n }\n };\n\n this.onMouseDown = function(e) {\n if (!this.$dragEnabled)\n return;\n this.mousedownEvent = e;\n var editor = this.editor;\n\n var inSelection = e.inSelection();\n var button = e.getButton();\n var clickCount = e.domEvent.detail || 1;\n if (clickCount === 1 && button === 0 && inSelection) {\n if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))\n return;\n this.mousedownEvent.time = Date.now();\n var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n if (\"unselectable\" in eventTarget)\n eventTarget.unselectable = \"on\";\n if (editor.getDragDelay()) {\n if (useragent.isWebKit) {\n this.cancelDrag = true;\n var mouseTarget = editor.container;\n mouseTarget.draggable = true;\n }\n this.setState(\"dragWait\");\n } else {\n this.startDrag();\n }\n this.captureMouse(e, this.onMouseDrag.bind(this));\n e.defaultPrevented = true;\n }\n };\n\n}).call(DragdropHandler.prototype);\n\n\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\n\nexports.DragdropHandler = DragdropHandler;\n\n});\n\nace.define(\"ace/mouse/touch_handler\",[\"require\",\"exports\",\"module\",\"ace/mouse/mouse_event\",\"ace/lib/event\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar event = require(\"../lib/event\");\nvar dom = require(\"../lib/dom\");\n\nexports.addTouchListeners = function(el, editor) {\n var mode = \"scroll\";\n var startX;\n var startY;\n var touchStartT;\n var lastT;\n var longTouchTimer;\n var animationTimer;\n var animationSteps = 0;\n var pos;\n var clickCount = 0;\n var vX = 0;\n var vY = 0;\n var pressed;\n var contextMenu;\n \n function createContextMenu() {\n var clipboard = window.navigator && window.navigator.clipboard;\n var isOpen = false;\n var updateMenu = function() {\n var selected = editor.getCopyText();\n var hasUndo = editor.session.getUndoManager().hasUndo();\n contextMenu.replaceChild(\n dom.buildDom(isOpen ? [\"span\",\n !selected && [\"span\", { class: \"ace_mobile-button\", action: \"selectall\" }, \"Select All\"],\n selected && [\"span\", { class: \"ace_mobile-button\", action: \"copy\" }, \"Copy\"],\n selected && [\"span\", { class: \"ace_mobile-button\", action: \"cut\" }, \"Cut\"],\n clipboard && [\"span\", { class: \"ace_mobile-button\", action: \"paste\" }, \"Paste\"],\n hasUndo && [\"span\", { class: \"ace_mobile-button\", action: \"undo\" }, \"Undo\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"find\" }, \"Find\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"openCommandPallete\" }, \"Pallete\"]\n ] : [\"span\"]),\n contextMenu.firstChild\n );\n };\n var handleClick = function(e) {\n var action = e.target.getAttribute(\"action\");\n\n if (action == \"more\" || !isOpen) {\n isOpen = !isOpen;\n return updateMenu();\n }\n if (action == \"paste\") {\n clipboard.readText().then(function (text) {\n editor.execCommand(action, text);\n });\n }\n else if (action) {\n if (action == \"cut\" || action == \"copy\") {\n if (clipboard)\n clipboard.writeText(editor.getCopyText());\n else\n document.execCommand(\"copy\");\n }\n editor.execCommand(action);\n }\n contextMenu.firstChild.style.display = \"none\";\n isOpen = false;\n if (action != \"openCommandPallete\")\n editor.focus();\n };\n contextMenu = dom.buildDom([\"div\",\n {\n class: \"ace_mobile-menu\",\n ontouchstart: function(e) {\n mode = \"menu\";\n e.stopPropagation();\n e.preventDefault();\n editor.textInput.focus();\n },\n ontouchend: function(e) {\n e.stopPropagation();\n e.preventDefault();\n handleClick(e);\n },\n onclick: handleClick\n },\n [\"span\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"more\" }, \"...\"]\n ], editor.container);\n }\n function showContextMenu() {\n if (!contextMenu) createContextMenu();\n var cursor = editor.selection.cursor;\n var pagePos = editor.renderer.textToScreenCoordinates(cursor.row, cursor.column);\n var leftOffset = editor.renderer.textToScreenCoordinates(0, 0).pageX;\n var scrollLeft = editor.renderer.scrollLeft;\n var rect = editor.container.getBoundingClientRect();\n contextMenu.style.top = pagePos.pageY - rect.top - 3 + \"px\";\n if (pagePos.pageX - rect.left < rect.width - 70) {\n contextMenu.style.left = \"\";\n contextMenu.style.right = \"10px\";\n } else {\n contextMenu.style.right = \"\";\n contextMenu.style.left = leftOffset + scrollLeft - rect.left + \"px\";\n }\n contextMenu.style.display = \"\";\n contextMenu.firstChild.style.display = \"none\";\n editor.on(\"input\", hideContextMenu);\n }\n function hideContextMenu(e) {\n if (contextMenu)\n contextMenu.style.display = \"none\";\n editor.off(\"input\", hideContextMenu);\n }\n\n function handleLongTap() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n var range = editor.selection.getRange();\n var inSelection = range.contains(pos.row, pos.column);\n if (range.isEmpty() || !inSelection) {\n editor.selection.moveToPosition(pos);\n editor.selection.selectWord();\n }\n mode = \"wait\";\n showContextMenu();\n }\n function switchToSelectionMode() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n editor.selection.moveToPosition(pos);\n var range = clickCount >= 2\n ? editor.selection.getLineRange(pos.row)\n : editor.session.getBracketRange(pos);\n if (range && !range.isEmpty()) {\n editor.selection.setRange(range);\n } else {\n editor.selection.selectWord();\n }\n mode = \"wait\";\n }\n event.addListener(el, \"contextmenu\", function(e) {\n if (!pressed) return;\n var textarea = editor.textInput.getElement();\n textarea.focus();\n }, editor);\n event.addListener(el, \"touchstart\", function (e) {\n var touches = e.touches;\n if (longTouchTimer || touches.length > 1) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n touchStartT = -1;\n mode = \"zoom\";\n return;\n }\n \n pressed = editor.$mouseHandler.isMousePressed = true;\n var h = editor.renderer.layerConfig.lineHeight;\n var w = editor.renderer.layerConfig.lineHeight;\n var t = e.timeStamp;\n lastT = t;\n var touchObj = touches[0];\n var x = touchObj.clientX;\n var y = touchObj.clientY;\n if (Math.abs(startX - x) + Math.abs(startY - y) > h)\n touchStartT = -1;\n \n startX = e.clientX = x;\n startY = e.clientY = y;\n vX = vY = 0;\n \n var ev = new MouseEvent(e, editor);\n pos = ev.getDocumentPosition();\n\n if (t - touchStartT < 500 && touches.length == 1 && !animationSteps) {\n clickCount++;\n e.preventDefault();\n e.button = 0;\n switchToSelectionMode();\n } else {\n clickCount = 0;\n var cursor = editor.selection.cursor;\n var anchor = editor.selection.isEmpty() ? cursor : editor.selection.anchor;\n \n var cursorPos = editor.renderer.$cursorLayer.getPixelPosition(cursor, true);\n var anchorPos = editor.renderer.$cursorLayer.getPixelPosition(anchor, true);\n var rect = editor.renderer.scroller.getBoundingClientRect();\n var offsetTop = editor.renderer.layerConfig.offset;\n var offsetLeft = editor.renderer.scrollLeft;\n var weightedDistance = function(x, y) {\n x = x / w;\n y = y / h - 0.75;\n return x * x + y * y;\n };\n \n if (e.clientX < rect.left) {\n mode = \"zoom\";\n return;\n }\n \n var diff1 = weightedDistance(\n e.clientX - rect.left - cursorPos.left + offsetLeft,\n e.clientY - rect.top - cursorPos.top + offsetTop\n );\n var diff2 = weightedDistance(\n e.clientX - rect.left - anchorPos.left + offsetLeft,\n e.clientY - rect.top - anchorPos.top + offsetTop\n );\n if (diff1 < 3.5 && diff2 < 3.5)\n mode = diff1 > diff2 ? \"cursor\" : \"anchor\";\n \n if (diff2 < 3.5)\n mode = \"anchor\";\n else if (diff1 < 3.5)\n mode = \"cursor\";\n else\n mode = \"scroll\";\n longTouchTimer = setTimeout(handleLongTap, 450);\n }\n touchStartT = t;\n }, editor);\n\n event.addListener(el, \"touchend\", function (e) {\n pressed = editor.$mouseHandler.isMousePressed = false;\n if (animationTimer) clearInterval(animationTimer);\n if (mode == \"zoom\") {\n mode = \"\";\n animationSteps = 0;\n } else if (longTouchTimer) {\n editor.selection.moveToPosition(pos);\n animationSteps = 0;\n showContextMenu();\n } else if (mode == \"scroll\") {\n animate();\n hideContextMenu();\n } else {\n showContextMenu();\n }\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n }, editor);\n event.addListener(el, \"touchmove\", function (e) {\n if (longTouchTimer) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n }\n var touches = e.touches;\n if (touches.length > 1 || mode == \"zoom\") return;\n\n var touchObj = touches[0];\n\n var wheelX = startX - touchObj.clientX;\n var wheelY = startY - touchObj.clientY;\n\n if (mode == \"wait\") {\n if (wheelX * wheelX + wheelY * wheelY > 4)\n mode = \"cursor\";\n else\n return e.preventDefault();\n }\n\n startX = touchObj.clientX;\n startY = touchObj.clientY;\n\n e.clientX = touchObj.clientX;\n e.clientY = touchObj.clientY;\n\n var t = e.timeStamp;\n var dt = t - lastT;\n lastT = t;\n if (mode == \"scroll\") {\n var mouseEvent = new MouseEvent(e, editor);\n mouseEvent.speed = 1;\n mouseEvent.wheelX = wheelX;\n mouseEvent.wheelY = wheelY;\n if (10 * Math.abs(wheelX) < Math.abs(wheelY)) wheelX = 0;\n if (10 * Math.abs(wheelY) < Math.abs(wheelX)) wheelY = 0;\n if (dt != 0) {\n vX = wheelX / dt;\n vY = wheelY / dt;\n }\n editor._emit(\"mousewheel\", mouseEvent);\n if (!mouseEvent.propagationStopped) {\n vX = vY = 0;\n }\n }\n else {\n var ev = new MouseEvent(e, editor);\n var pos = ev.getDocumentPosition();\n if (mode == \"cursor\")\n editor.selection.moveCursorToPosition(pos);\n else if (mode == \"anchor\")\n editor.selection.setSelectionAnchor(pos.row, pos.column);\n editor.renderer.scrollCursorIntoView(pos);\n e.preventDefault();\n }\n }, editor);\n\n function animate() {\n animationSteps += 60;\n animationTimer = setInterval(function() {\n if (animationSteps-- <= 0) {\n clearInterval(animationTimer);\n animationTimer = null;\n }\n if (Math.abs(vX) < 0.01) vX = 0;\n if (Math.abs(vY) < 0.01) vY = 0;\n if (animationSteps < 20) vX = 0.9 * vX;\n if (animationSteps < 20) vY = 0.9 * vY;\n var oldScrollTop = editor.session.getScrollTop();\n editor.renderer.scrollBy(10 * vX, 10 * vY);\n if (oldScrollTop == editor.session.getScrollTop())\n animationSteps = 0;\n }, 10);\n }\n};\n\n});\n\nace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\nvar dom = require(\"./dom\");\n\nexports.get = function (url, callback) {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n callback(xhr.responseText);\n }\n };\n xhr.send(null);\n};\n\nexports.loadScript = function(path, callback) {\n var head = dom.getDocumentHead();\n var s = document.createElement('script');\n\n s.src = path;\n head.appendChild(s);\n\n s.onload = s.onreadystatechange = function(_, isAbort) {\n if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\n s = s.onload = s.onreadystatechange = null;\n if (!isAbort)\n callback();\n }\n };\n};\nexports.qualifyURL = function(url) {\n var a = document.createElement('a');\n a.href = url;\n return a.href;\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n this._eventRegistry || (this._eventRegistry = {});\n this._defaultHandlers || (this._defaultHandlers = {});\n\n var listeners = this._eventRegistry[eventName] || [];\n var defaultHandler = this._defaultHandlers[eventName];\n if (!listeners.length && !defaultHandler)\n return;\n\n if (typeof e != \"object\" || !e)\n e = {};\n\n if (!e.type)\n e.type = eventName;\n if (!e.stopPropagation)\n e.stopPropagation = stopPropagation;\n if (!e.preventDefault)\n e.preventDefault = preventDefault;\n\n listeners = listeners.slice();\n for (var i=0; i<listeners.length; i++) {\n listeners[i](e, this);\n if (e.propagationStopped)\n break;\n }\n \n if (defaultHandler && !e.defaultPrevented)\n return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n var listeners = (this._eventRegistry || {})[eventName];\n if (!listeners)\n return;\n listeners = listeners.slice();\n for (var i=0; i<listeners.length; i++)\n listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n var _self = this;\n this.on(eventName, function newCallback() {\n _self.off(eventName, newCallback);\n callback.apply(null, arguments);\n });\n if (!callback) {\n return new Promise(function(resolve) {\n callback = resolve;\n });\n }\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers)\n handlers = this._defaultHandlers = {_disabled_: {}};\n \n if (handlers[eventName]) {\n var old = handlers[eventName];\n var disabled = handlers._disabled_[eventName];\n if (!disabled)\n handlers._disabled_[eventName] = disabled = [];\n disabled.push(old);\n var i = disabled.indexOf(callback);\n if (i != -1) \n disabled.splice(i, 1);\n }\n handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers)\n return;\n var disabled = handlers._disabled_[eventName];\n \n if (handlers[eventName] == callback) {\n if (disabled)\n this.setDefaultHandler(eventName, disabled.pop());\n } else if (disabled) {\n var i = disabled.indexOf(callback);\n if (i != -1)\n disabled.splice(i, 1);\n }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n this._eventRegistry = this._eventRegistry || {};\n\n var listeners = this._eventRegistry[eventName];\n if (!listeners)\n listeners = this._eventRegistry[eventName] = [];\n\n if (listeners.indexOf(callback) == -1)\n listeners[capturing ? \"unshift\" : \"push\"](callback);\n return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n this._eventRegistry = this._eventRegistry || {};\n\n var listeners = this._eventRegistry[eventName];\n if (!listeners)\n return;\n\n var index = listeners.indexOf(callback);\n if (index !== -1)\n listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n if (!eventName) this._eventRegistry = this._defaultHandlers = undefined;\n if (this._eventRegistry) this._eventRegistry[eventName] = undefined;\n if (this._defaultHandlers) this._defaultHandlers[eventName] = undefined;\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/lib/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"no use strict\";\n\nvar oop = require(\"./oop\");\nvar EventEmitter = require(\"./event_emitter\").EventEmitter;\n\nvar optionsProvider = {\n setOptions: function(optList) {\n Object.keys(optList).forEach(function(key) {\n this.setOption(key, optList[key]);\n }, this);\n },\n getOptions: function(optionNames) {\n var result = {};\n if (!optionNames) {\n var options = this.$options;\n optionNames = Object.keys(options).filter(function(key) {\n return !options[key].hidden;\n });\n } else if (!Array.isArray(optionNames)) {\n result = optionNames;\n optionNames = Object.keys(result);\n }\n optionNames.forEach(function(key) {\n result[key] = this.getOption(key);\n }, this);\n return result;\n },\n setOption: function(name, value) {\n if (this[\"$\" + name] === value)\n return;\n var opt = this.$options[name];\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n if (opt.forwardTo)\n return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value);\n\n if (!opt.handlesSet)\n this[\"$\" + name] = value;\n if (opt && opt.set)\n opt.set.call(this, value);\n },\n getOption: function(name) {\n var opt = this.$options[name];\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n if (opt.forwardTo)\n return this[opt.forwardTo] && this[opt.forwardTo].getOption(name);\n return opt && opt.get ? opt.get.call(this) : this[\"$\" + name];\n }\n};\n\nfunction warn(message) {\n if (typeof console != \"undefined\" && console.warn)\n console.warn.apply(console, arguments);\n}\n\nfunction reportError(msg, data) {\n var e = new Error(msg);\n e.data = data;\n if (typeof console == \"object\" && console.error)\n console.error(e);\n setTimeout(function() { throw e; });\n}\n\nvar AppConfig = function() {\n this.$defaultOptions = {};\n};\n\n(function() {\n oop.implement(this, EventEmitter);\n this.defineOptions = function(obj, path, options) {\n if (!obj.$options)\n this.$defaultOptions[path] = obj.$options = {};\n\n Object.keys(options).forEach(function(key) {\n var opt = options[key];\n if (typeof opt == \"string\")\n opt = {forwardTo: opt};\n\n opt.name || (opt.name = key);\n obj.$options[opt.name] = opt;\n if (\"initialValue\" in opt)\n obj[\"$\" + opt.name] = opt.initialValue;\n });\n oop.implement(obj, optionsProvider);\n\n return this;\n };\n\n this.resetOptions = function(obj) {\n Object.keys(obj.$options).forEach(function(key) {\n var opt = obj.$options[key];\n if (\"value\" in opt)\n obj.setOption(key, opt.value);\n });\n };\n\n this.setDefaultValue = function(path, name, value) {\n if (!path) {\n for (path in this.$defaultOptions)\n if (this.$defaultOptions[path][name])\n break;\n if (!this.$defaultOptions[path][name])\n return false;\n }\n var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {});\n if (opts[name]) {\n if (opts.forwardTo)\n this.setDefaultValue(opts.forwardTo, name, value);\n else\n opts[name].value = value;\n }\n };\n\n this.setDefaultValues = function(path, optionHash) {\n Object.keys(optionHash).forEach(function(key) {\n this.setDefaultValue(path, key, optionHash[key]);\n }, this);\n };\n \n this.warn = warn;\n this.reportError = reportError;\n \n}).call(AppConfig.prototype);\n\nexports.AppConfig = AppConfig;\n\n});\n\nace.define(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/dom\",\"ace/lib/app_config\"], function(require, exports, module) {\n\"no use strict\";\n\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar net = require(\"./lib/net\");\nvar dom = require(\"./lib/dom\");\nvar AppConfig = require(\"./lib/app_config\").AppConfig;\n\nmodule.exports = exports = new AppConfig();\n\nvar global = (function() {\n return this || typeof window != \"undefined\" && window;\n})();\n\nvar options = {\n packaged: false,\n workerPath: null,\n modePath: null,\n themePath: null,\n basePath: \"\",\n suffix: \".js\",\n $moduleUrls: {},\n loadWorkerFromBlob: true,\n sharedPopups: false,\n useStrictCSP: null\n};\n\nexports.get = function(key) {\n if (!options.hasOwnProperty(key))\n throw new Error(\"Unknown config key: \" + key);\n return options[key];\n};\n\nexports.set = function(key, value) {\n if (options.hasOwnProperty(key))\n options[key] = value;\n else if (this.setDefaultValue(\"\", key, value) == false)\n throw new Error(\"Unknown config key: \" + key);\n if (key == \"useStrictCSP\")\n dom.useStrictCSP(value);\n};\n\nexports.all = function() {\n return lang.copyObject(options);\n};\n\nexports.$modes = {};\nexports.moduleUrl = function(name, component) {\n if (options.$moduleUrls[name])\n return options.$moduleUrls[name];\n\n var parts = name.split(\"/\");\n component = component || parts[parts.length - 2] || \"\";\n var sep = component == \"snippets\" ? \"/\" : \"-\";\n var base = parts[parts.length - 1];\n if (component == \"worker\" && sep == \"-\") {\n var re = new RegExp(\"^\" + component + \"[\\\\-_]|[\\\\-_]\" + component + \"$\", \"g\");\n base = base.replace(re, \"\");\n }\n\n if ((!base || base == component) && parts.length > 1)\n base = parts[parts.length - 2];\n var path = options[component + \"Path\"];\n if (path == null) {\n path = options.basePath;\n } else if (sep == \"/\") {\n component = sep = \"\";\n }\n if (path && path.slice(-1) != \"/\")\n path += \"/\";\n return path + component + sep + base + this.get(\"suffix\");\n};\n\nexports.setModuleUrl = function(name, subst) {\n return options.$moduleUrls[name] = subst;\n};\n\nexports.$loading = {};\nexports.loadModule = function(moduleName, onLoad) {\n var module, moduleType;\n if (Array.isArray(moduleName)) {\n moduleType = moduleName[0];\n moduleName = moduleName[1];\n }\n\n try {\n module = require(moduleName);\n } catch (e) {}\n if (module && !exports.$loading[moduleName])\n return onLoad && onLoad(module);\n\n if (!exports.$loading[moduleName])\n exports.$loading[moduleName] = [];\n\n exports.$loading[moduleName].push(onLoad);\n\n if (exports.$loading[moduleName].length > 1)\n return;\n\n var afterLoad = function() {\n require([moduleName], function(module) {\n exports._emit(\"load.module\", {name: moduleName, module: module});\n var listeners = exports.$loading[moduleName];\n exports.$loading[moduleName] = null;\n listeners.forEach(function(onLoad) {\n onLoad && onLoad(module);\n });\n });\n };\n\n if (!exports.get(\"packaged\"))\n return afterLoad();\n \n net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n reportErrorIfPathIsNotConfigured();\n};\n\nvar reportErrorIfPathIsNotConfigured = function() {\n if (\n !options.basePath && !options.workerPath \n && !options.modePath && !options.themePath\n && !Object.keys(options.$moduleUrls).length\n ) {\n console.error(\n \"Unable to infer path to ace from script src,\",\n \"use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes\",\n \"or with webpack use ace/webpack-resolver\"\n );\n reportErrorIfPathIsNotConfigured = function() {};\n }\n};\ninit(true);function init(packaged) {\n\n if (!global || !global.document)\n return;\n \n options.packaged = packaged || require.packaged || module.packaged || (global.define && define.packaged);\n\n var scriptOptions = {};\n var scriptUrl = \"\";\n var currentScript = (document.currentScript || document._currentScript ); // native or polyfill\n var currentDocument = currentScript && currentScript.ownerDocument || document;\n \n var scripts = currentDocument.getElementsByTagName(\"script\");\n for (var i=0; i<scripts.length; i++) {\n var script = scripts[i];\n\n var src = script.src || script.getAttribute(\"src\");\n if (!src)\n continue;\n\n var attributes = script.attributes;\n for (var j=0, l=attributes.length; j < l; j++) {\n var attr = attributes[j];\n if (attr.name.indexOf(\"data-ace-\") === 0) {\n scriptOptions[deHyphenate(attr.name.replace(/^data-ace-/, \"\"))] = attr.value;\n }\n }\n\n var m = src.match(/^(.*)\\/ace(\\-\\w+)?\\.js(\\?|$)/);\n if (m)\n scriptUrl = m[1];\n }\n\n if (scriptUrl) {\n scriptOptions.base = scriptOptions.base || scriptUrl;\n scriptOptions.packaged = true;\n }\n\n scriptOptions.basePath = scriptOptions.base;\n scriptOptions.workerPath = scriptOptions.workerPath || scriptOptions.base;\n scriptOptions.modePath = scriptOptions.modePath || scriptOptions.base;\n scriptOptions.themePath = scriptOptions.themePath || scriptOptions.base;\n delete scriptOptions.base;\n\n for (var key in scriptOptions)\n if (typeof scriptOptions[key] !== \"undefined\")\n exports.set(key, scriptOptions[key]);\n}\n\nexports.init = init;\n\nfunction deHyphenate(str) {\n return str.replace(/-(.)/g, function(m, m1) { return m1.toUpperCase(); });\n}\n\nexports.version = \"1.4.14\";\n\n});\n\nace.define(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/mouse/touch_handler\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar DefaultHandlers = require(\"./default_handlers\").DefaultHandlers;\nvar DefaultGutterHandler = require(\"./default_gutter_handler\").GutterHandler;\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar DragdropHandler = require(\"./dragdrop_handler\").DragdropHandler;\nvar addTouchListeners = require(\"./touch_handler\").addTouchListeners;\nvar config = require(\"../config\");\n\nvar MouseHandler = function(editor) {\n var _self = this;\n this.editor = editor;\n\n new DefaultHandlers(this);\n new DefaultGutterHandler(this);\n new DragdropHandler(this);\n\n var focusEditor = function(e) {\n var windowBlurred = !document.hasFocus || !document.hasFocus()\n || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement());\n if (windowBlurred)\n window.focus();\n editor.focus();\n };\n\n var mouseTarget = editor.renderer.getMouseEventTarget();\n event.addListener(mouseTarget, \"click\", this.onMouseEvent.bind(this, \"click\"), editor);\n event.addListener(mouseTarget, \"mousemove\", this.onMouseMove.bind(this, \"mousemove\"), editor);\n event.addMultiMouseDownListener([\n mouseTarget,\n editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner,\n editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner,\n editor.textInput && editor.textInput.getElement()\n ].filter(Boolean), [400, 300, 250], this, \"onMouseEvent\", editor);\n event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, \"mousewheel\"), editor);\n addTouchListeners(editor.container, editor);\n\n var gutterEl = editor.renderer.$gutter;\n event.addListener(gutterEl, \"mousedown\", this.onMouseEvent.bind(this, \"guttermousedown\"), editor);\n event.addListener(gutterEl, \"click\", this.onMouseEvent.bind(this, \"gutterclick\"), editor);\n event.addListener(gutterEl, \"dblclick\", this.onMouseEvent.bind(this, \"gutterdblclick\"), editor);\n event.addListener(gutterEl, \"mousemove\", this.onMouseEvent.bind(this, \"guttermousemove\"), editor);\n\n event.addListener(mouseTarget, \"mousedown\", focusEditor, editor);\n event.addListener(gutterEl, \"mousedown\", focusEditor, editor);\n if (useragent.isIE && editor.renderer.scrollBarV) {\n event.addListener(editor.renderer.scrollBarV.element, \"mousedown\", focusEditor, editor);\n event.addListener(editor.renderer.scrollBarH.element, \"mousedown\", focusEditor, editor);\n }\n\n editor.on(\"mousemove\", function(e){\n if (_self.state || _self.$dragDelay || !_self.$dragEnabled)\n return;\n\n var character = editor.renderer.screenToTextCoordinates(e.x, e.y);\n var range = editor.session.selection.getRange();\n var renderer = editor.renderer;\n\n if (!range.isEmpty() && range.insideStart(character.row, character.column)) {\n renderer.setCursorStyle(\"default\");\n } else {\n renderer.setCursorStyle(\"\");\n }\n }, editor);\n};\n\n(function() {\n this.onMouseEvent = function(name, e) {\n if (!this.editor.session) return;\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n\n this.onMouseMove = function(name, e) {\n var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;\n if (!listeners || !listeners.length)\n return;\n\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n\n this.onMouseWheel = function(name, e) {\n var mouseEvent = new MouseEvent(e, this.editor);\n mouseEvent.speed = this.$scrollSpeed * 2;\n mouseEvent.wheelX = e.wheelX;\n mouseEvent.wheelY = e.wheelY;\n\n this.editor._emit(name, mouseEvent);\n };\n \n this.setState = function(state) {\n this.state = state;\n };\n\n this.captureMouse = function(ev, mouseMoveHandler) {\n this.x = ev.x;\n this.y = ev.y;\n\n this.isMousePressed = true;\n var editor = this.editor;\n var renderer = this.editor.renderer;\n renderer.$isMousePressed = true;\n\n var self = this;\n var onMouseMove = function(e) {\n if (!e) return;\n if (useragent.isWebKit && !e.which && self.releaseMouse)\n return self.releaseMouse();\n\n self.x = e.clientX;\n self.y = e.clientY;\n mouseMoveHandler && mouseMoveHandler(e);\n self.mouseEvent = new MouseEvent(e, self.editor);\n self.$mouseMoved = true;\n };\n\n var onCaptureEnd = function(e) {\n editor.off(\"beforeEndOperation\", onOperationEnd);\n clearInterval(timerId);\n if (editor.session) onCaptureInterval();\n self[self.state + \"End\"] && self[self.state + \"End\"](e);\n self.state = \"\";\n self.isMousePressed = renderer.$isMousePressed = false;\n if (renderer.$keepTextAreaAtCursor)\n renderer.$moveTextAreaToCursor();\n self.$onCaptureMouseMove = self.releaseMouse = null;\n e && self.onMouseEvent(\"mouseup\", e);\n editor.endOperation();\n };\n\n var onCaptureInterval = function() {\n self[self.state] && self[self.state]();\n self.$mouseMoved = false;\n };\n\n if (useragent.isOldIE && ev.domEvent.type == \"dblclick\") {\n return setTimeout(function() {onCaptureEnd(ev);});\n }\n\n var onOperationEnd = function(e) {\n if (!self.releaseMouse) return;\n if (editor.curOp.command.name && editor.curOp.selectionChanged) {\n self[self.state + \"End\"] && self[self.state + \"End\"]();\n self.state = \"\";\n self.releaseMouse();\n }\n };\n\n editor.on(\"beforeEndOperation\", onOperationEnd);\n editor.startOperation({command: {name: \"mouse\"}});\n\n self.$onCaptureMouseMove = onMouseMove;\n self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd);\n var timerId = setInterval(onCaptureInterval, 20);\n };\n this.releaseMouse = null;\n this.cancelContextMenu = function() {\n var stop = function(e) {\n if (e && e.domEvent && e.domEvent.type != \"contextmenu\")\n return;\n this.editor.off(\"nativecontextmenu\", stop);\n if (e && e.domEvent)\n event.stopEvent(e.domEvent);\n }.bind(this);\n setTimeout(stop, 10);\n this.editor.on(\"nativecontextmenu\", stop);\n };\n this.destroy = function() {\n if (this.releaseMouse) this.releaseMouse();\n };\n}).call(MouseHandler.prototype);\n\nconfig.defineOptions(MouseHandler.prototype, \"mouseHandler\", {\n scrollSpeed: {initialValue: 2},\n dragDelay: {initialValue: (useragent.isMac ? 150 : 0)},\n dragEnabled: {initialValue: true},\n focusTimeout: {initialValue: 0},\n tooltipFollowsMouse: {initialValue: true}\n});\n\n\nexports.MouseHandler = MouseHandler;\n});\n\nace.define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\nvar dom = require(\"../lib/dom\");\n\nfunction FoldHandler(editor) {\n\n editor.on(\"click\", function(e) {\n var position = e.getDocumentPosition();\n var session = editor.session;\n var fold = session.getFoldAt(position.row, position.column, 1);\n if (fold) {\n if (e.getAccelKey())\n session.removeFold(fold);\n else\n session.expandFold(fold);\n\n e.stop();\n }\n \n var target = e.domEvent && e.domEvent.target;\n if (target && dom.hasCssClass(target, \"ace_inline_button\")) {\n if (dom.hasCssClass(target, \"ace_toggle_wrap\")) {\n session.setOption(\"wrap\", !session.getUseWrapMode());\n editor.renderer.scrollCursorIntoView();\n }\n }\n });\n\n editor.on(\"gutterclick\", function(e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n if (session.foldWidgets && session.foldWidgets[row])\n editor.session.onFoldWidgetClick(row, e);\n if (!editor.isFocused())\n editor.focus();\n e.stop();\n }\n });\n\n editor.on(\"gutterdblclick\", function(e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n var data = session.getParentFoldRangeData(row, true);\n var range = data.range || data.firstRange;\n\n if (range) {\n row = range.start.row;\n var fold = session.getFoldAt(row, session.getLine(row).length, 1);\n\n if (fold) {\n session.removeFold(fold);\n } else {\n session.addFold(\"...\", range);\n editor.renderer.scrollCursorIntoView({row: range.start.row, column: 0});\n }\n }\n e.stop();\n }\n });\n}\n\nexports.FoldHandler = FoldHandler;\n\n});\n\nace.define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"], function(require, exports, module) {\n\"use strict\";\n\nvar keyUtil = require(\"../lib/keys\");\nvar event = require(\"../lib/event\");\n\nvar KeyBinding = function(editor) {\n this.$editor = editor;\n this.$data = {editor: editor};\n this.$handlers = [];\n this.setDefaultHandler(editor.commands);\n};\n\n(function() {\n this.setDefaultHandler = function(kb) {\n this.removeKeyboardHandler(this.$defaultHandler);\n this.$defaultHandler = kb;\n this.addKeyboardHandler(kb, 0);\n };\n\n this.setKeyboardHandler = function(kb) {\n var h = this.$handlers;\n if (h[h.length - 1] == kb)\n return;\n\n while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler)\n this.removeKeyboardHandler(h[h.length - 1]);\n\n this.addKeyboardHandler(kb, 1);\n };\n\n this.addKeyboardHandler = function(kb, pos) {\n if (!kb)\n return;\n if (typeof kb == \"function\" && !kb.handleKeyboard)\n kb.handleKeyboard = kb;\n var i = this.$handlers.indexOf(kb);\n if (i != -1)\n this.$handlers.splice(i, 1);\n\n if (pos == undefined)\n this.$handlers.push(kb);\n else\n this.$handlers.splice(pos, 0, kb);\n\n if (i == -1 && kb.attach)\n kb.attach(this.$editor);\n };\n\n this.removeKeyboardHandler = function(kb) {\n var i = this.$handlers.indexOf(kb);\n if (i == -1)\n return false;\n this.$handlers.splice(i, 1);\n kb.detach && kb.detach(this.$editor);\n return true;\n };\n\n this.getKeyboardHandler = function() {\n return this.$handlers[this.$handlers.length - 1];\n };\n \n this.getStatusText = function() {\n var data = this.$data;\n var editor = data.editor;\n return this.$handlers.map(function(h) {\n return h.getStatusText && h.getStatusText(editor, data) || \"\";\n }).filter(Boolean).join(\" \");\n };\n\n this.$callKeyboardHandlers = function(hashId, keyString, keyCode, e) {\n var toExecute;\n var success = false;\n var commands = this.$editor.commands;\n\n for (var i = this.$handlers.length; i--;) {\n toExecute = this.$handlers[i].handleKeyboard(\n this.$data, hashId, keyString, keyCode, e\n );\n if (!toExecute || !toExecute.command)\n continue;\n if (toExecute.command == \"null\") {\n success = true;\n } else {\n success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);\n }\n if (success && e && hashId != -1 && \n toExecute.passEvent != true && toExecute.command.passEvent != true\n ) {\n event.stopEvent(e);\n }\n if (success)\n break;\n }\n \n if (!success && hashId == -1) {\n toExecute = {command: \"insertstring\"};\n success = commands.exec(\"insertstring\", this.$editor, keyString);\n }\n \n if (success && this.$editor._signal)\n this.$editor._signal(\"keyboardActivity\", toExecute);\n \n return success;\n };\n\n this.onCommandKey = function(e, hashId, keyCode) {\n var keyString = keyUtil.keyCodeToString(keyCode);\n return this.$callKeyboardHandlers(hashId, keyString, keyCode, e);\n };\n\n this.onTextInput = function(text) {\n return this.$callKeyboardHandlers(-1, text);\n };\n\n}).call(KeyBinding.prototype);\n\nexports.KeyBinding = KeyBinding;\n});\n\nace.define(\"ace/lib/bidiutil\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar ArabicAlefBetIntervalsBegine = ['\\u0621', '\\u0641'];\nvar ArabicAlefBetIntervalsEnd = ['\\u063A', '\\u064a'];\nvar dir = 0, hiLevel = 0;\nvar lastArabic = false, hasUBAT_AL = false, hasUBAT_B = false, hasUBAT_S = false, hasBlockSep = false, hasSegSep = false;\n\nvar impTab_LTR = [\t[\t0,\t\t3,\t\t0,\t\t1,\t\t0,\t\t0,\t\t0\t],\t[\t0,\t\t3,\t\t0,\t\t1,\t\t2,\t\t2,\t\t0\t],\t[\t0,\t\t3,\t\t0,\t\t0x11,\t\t2,\t\t0,\t\t1\t],\t[\t0,\t\t3,\t\t5,\t\t5,\t\t4,\t\t1,\t\t0\t],\t[\t0,\t\t3,\t\t0x15,\t\t0x15,\t\t4,\t\t0,\t\t1\t],\t[\t0,\t\t3,\t\t5,\t\t5,\t\t4,\t\t2,\t\t0\t]\n];\n\nvar impTab_RTL = [\t[\t2,\t\t0,\t\t1,\t\t1,\t\t0,\t\t1,\t\t0\t],\t[\t2,\t\t0,\t\t1,\t\t1,\t\t0,\t\t2,\t\t0\t],\t[\t2,\t\t0,\t\t2,\t\t1,\t\t3,\t\t2,\t\t0\t],\t[\t2,\t\t0,\t\t2,\t\t0x21,\t\t3,\t\t1,\t\t1\t]\n];\n\nvar LTR = 0, RTL = 1;\n\nvar L = 0;\nvar R = 1;\nvar EN = 2;\nvar AN = 3;\nvar ON = 4;\nvar B = 5;\nvar S = 6;\nvar AL = 7;\nvar WS = 8;\nvar CS = 9;\nvar ES = 10;\nvar ET = 11;\nvar NSM = 12;\nvar LRE = 13;\nvar RLE = 14;\nvar PDF = 15;\nvar LRO = 16;\nvar RLO = 17;\nvar BN = 18;\n\nvar UnicodeTBL00 = [\nBN,BN,BN,BN,BN,BN,BN,BN,BN,S,B,S,WS,B,BN,BN,\nBN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,B,B,B,S,\nWS,ON,ON,ET,ET,ET,ON,ON,ON,ON,ON,ES,CS,ES,CS,CS,\nEN,EN,EN,EN,EN,EN,EN,EN,EN,EN,CS,ON,ON,ON,ON,ON,\nON,L,L,L,L,L,L,L,L,L,L,L,L,L,L,L,\nL,L,L,L,L,L,L,L,L,L,L,ON,ON,ON,ON,ON,\nON,L,L,L,L,L,L,L,L,L,L,L,L,L,L,L,\nL,L,L,L,L,L,L,L,L,L,L,ON,ON,ON,ON,BN,\nBN,BN,BN,BN,BN,B,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,\nBN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,\nCS,ON,ET,ET,ET,ET,ON,ON,ON,ON,L,ON,ON,BN,ON,ON,\nET,ET,EN,EN,ON,L,ON,ON,ON,EN,L,ON,ON,ON,ON,ON\n];\n\nvar UnicodeTBL20 = [\nWS,WS,WS,WS,WS,WS,WS,WS,WS,WS,WS,BN,BN,BN,L,R\t,\nON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,\nON,ON,ON,ON,ON,ON,ON,ON,WS,B,LRE,RLE,PDF,LRO,RLO,CS,\nET,ET,ET,ET,ET,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,\nON,ON,ON,ON,CS,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,\nON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,WS\n];\n\nfunction _computeLevels(chars, levels, len, charTypes) {\n\tvar impTab = dir ? impTab_RTL : impTab_LTR\n\t\t, prevState = null, newClass = null, newLevel = null, newState = 0\n\t\t, action = null, cond = null, condPos = -1, i = null, ix = null, classes = [];\n\n\tif (!charTypes) {\n\t\tfor (i = 0, charTypes = []; i < len; i++) {\n\t\t\tcharTypes[i] = _getCharacterType(chars[i]);\n\t\t}\n\t}\n\thiLevel = dir;\n\tlastArabic = false;\n\thasUBAT_AL = false;\n\thasUBAT_B = false;\n\thasUBAT_S = false;\n\tfor (ix = 0; ix < len; ix++){\n\t\tprevState = newState;\n\t\tclasses[ix] = newClass = _getCharClass(chars, charTypes, classes, ix);\n\t\tnewState = impTab[prevState][newClass];\n\t\taction = newState & 0xF0;\n\t\tnewState &= 0x0F;\n\t\tlevels[ix] = newLevel = impTab[newState][5];\n\t\tif (action > 0){\n\t\t\tif (action == 0x10){\n\t\t\t\tfor(i = condPos; i < ix; i++){\n\t\t\t\t\tlevels[i] = 1;\n\t\t\t\t}\n\t\t\t\tcondPos = -1;\n\t\t\t} else {\n\t\t\t\tcondPos = -1;\n\t\t\t}\n\t\t}\n\t\tcond = impTab[newState][6];\n\t\tif (cond){\n\t\t\tif(condPos == -1){\n\t\t\t\tcondPos = ix;\n\t\t\t}\n\t\t}else{\n\t\t\tif (condPos > -1){\n\t\t\t\tfor(i = condPos; i < ix; i++){\n\t\t\t\t\tlevels[i] = newLevel;\n\t\t\t\t}\n\t\t\t\tcondPos = -1;\n\t\t\t}\n\t\t}\n\t\tif (charTypes[ix] == B){\n\t\t\tlevels[ix] = 0;\n\t\t}\n\t\thiLevel |= newLevel;\n\t}\n\tif (hasUBAT_S){\n\t\tfor(i = 0; i < len; i++){\n\t\t\tif(charTypes[i] == S){\n\t\t\t\tlevels[i] = dir;\n\t\t\t\tfor(var j = i - 1; j >= 0; j--){\n\t\t\t\t\tif(charTypes[j] == WS){\n\t\t\t\t\t\tlevels[j] = dir;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction _invertLevel(lev, levels, _array) {\n\tif (hiLevel < lev){\n\t\treturn;\n\t}\n\tif (lev == 1 && dir == RTL && !hasUBAT_B){\n\t\t_array.reverse();\n\t\treturn;\n\t}\n\tvar len = _array.length, start = 0, end, lo, hi, tmp;\n\twhile(start < len){\n\t\tif (levels[start] >= lev){\n\t\t\tend = start + 1;\n\t\twhile(end < len && levels[end] >= lev){\n\t\t\tend++;\n\t\t}\n\t\tfor(lo = start, hi = end - 1 ; lo < hi; lo++, hi--){\n\t\t\ttmp = _array[lo];\n\t\t\t_array[lo] = _array[hi];\n\t\t\t_array[hi] = tmp;\n\t\t}\n\t\tstart = end;\n\t}\n\tstart++;\n\t}\n}\n\nfunction _getCharClass(chars, types, classes, ix) {\t\t\t\n\tvar cType = types[ix], wType, nType, len, i;\n\tswitch(cType){\n\t\tcase L:\n\t\tcase R:\n\t\t\tlastArabic = false;\n\t\tcase ON:\n\t\tcase AN:\n\t\t\treturn cType;\n\t\tcase EN:\n\t\t\treturn lastArabic ? AN : EN;\n\t\tcase AL:\n\t\t\tlastArabic = true;\n\t\t\thasUBAT_AL = true;\n\t\t\treturn R;\n\t\tcase WS:\n\t\t\treturn ON;\n\t\tcase CS:\n\t\t\tif (ix < 1 || (ix + 1) >= types.length ||\n\t\t\t\t((wType = classes[ix - 1]) != EN && wType != AN) ||\n\t\t\t\t((nType = types[ix + 1]) != EN && nType != AN)){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\tif (lastArabic){nType = AN;}\n\t\t\treturn nType == wType ? nType : ON;\n\t\tcase ES:\n\t\t\twType = ix > 0 ? classes[ix - 1] : B;\n\t\t\tif (wType == EN && (ix + 1) < types.length && types[ix + 1] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\treturn ON;\n\t\tcase ET:\n\t\t\tif (ix > 0 && classes[ix - 1] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\tif (lastArabic){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\ti = ix + 1;\n\t\t\tlen = types.length;\n\t\t\twhile (i < len && types[i] == ET){\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tif (i < len && types[i] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\treturn ON;\n\t\tcase NSM:\n\t\t\tlen = types.length;\n\t\t\ti = ix + 1;\n\t\t\twhile (i < len && types[i] == NSM){\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tif (i < len){\n\t\t\t\tvar c = chars[ix], rtlCandidate = (c >= 0x0591 && c <= 0x08FF) || c == 0xFB1E;\n\t\t\t\t\n\t\t\t\twType = types[i];\n\t\t\t\tif (rtlCandidate && (wType == R || wType == AL)){\n\t\t\t\t\treturn R;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ix < 1 || (wType = types[ix - 1]) == B){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\treturn classes[ix - 1];\n\t\tcase B:\n\t\t\tlastArabic = false;\n\t\t\thasUBAT_B = true;\n\t\t\treturn dir;\n\t\tcase S:\n\t\t\thasUBAT_S = true;\n\t\t\treturn ON;\n\t\tcase LRE:\n\t\tcase RLE:\n\t\tcase LRO:\n\t\tcase RLO:\n\t\tcase PDF:\n\t\t\tlastArabic = false;\n\t\tcase BN:\n\t\t\treturn ON;\n\t}\n}\n\nfunction _getCharacterType( ch ) {\t\t\n\tvar uc = ch.charCodeAt(0), hi = uc >> 8;\n\t\n\tif (hi == 0) {\t\t\n\t\treturn ((uc > 0x00BF) ? L : UnicodeTBL00[uc]);\n\t} else if (hi == 5) {\n\t\treturn (/[\\u0591-\\u05f4]/.test(ch) ? R : L);\n\t} else if (hi == 6) {\n\t\tif (/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(ch))\n\t\t\treturn NSM;\n\t\telse if (/[\\u0660-\\u0669\\u066b-\\u066c]/.test(ch))\n\t\t\treturn AN;\n\t\telse if (uc == 0x066A)\n\t\t\treturn ET;\n\t\telse if (/[\\u06f0-\\u06f9]/.test(ch))\n\t\t\treturn EN;\t\t\t\n\t\telse\n\t\t\treturn AL;\n\t} else if (hi == 0x20 && uc <= 0x205F) {\n\t\treturn UnicodeTBL20[uc & 0xFF];\n\t} else if (hi == 0xFE) {\n\t\treturn (uc >= 0xFE70 ? AL : ON);\n\t}\t\t\n\treturn ON;\t\n}\n\nfunction _isArabicDiacritics( ch ) {\n\treturn (ch >= '\\u064b' && ch <= '\\u0655');\n}\nexports.L = L;\nexports.R = R;\nexports.EN = EN;\nexports.ON_R = 3;\nexports.AN = 4;\nexports.R_H = 5;\nexports.B = 6;\nexports.RLE = 7;\n\nexports.DOT = \"\\xB7\";\nexports.doBidiReorder = function(text, textCharTypes, isRtl) {\n\tif (text.length < 2)\n\t\treturn {};\n\t\t\n\tvar chars = text.split(\"\"), logicalFromVisual = new Array(chars.length),\n\t\tbidiLevels = new Array(chars.length), levels = []; \n\n\tdir = isRtl ? RTL : LTR;\n\n\t_computeLevels(chars, levels, chars.length, textCharTypes);\n\n\tfor (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++);\n\n\t_invertLevel(2, levels, logicalFromVisual);\n\t_invertLevel(1, levels, logicalFromVisual);\n\n\tfor (var i = 0; i < logicalFromVisual.length - 1; i++) { //fix levels to reflect character width\n\t\tif (textCharTypes[i] === AN) {\n\t\t\tlevels[i] = exports.AN;\n\t\t} else if (levels[i] === R && ((textCharTypes[i] > AL && textCharTypes[i] < LRE) \n\t\t\t|| textCharTypes[i] === ON || textCharTypes[i] === BN)) {\n\t\t\tlevels[i] = exports.ON_R;\n\t\t} else if ((i > 0 && chars[i - 1] === '\\u0644') && /\\u0622|\\u0623|\\u0625|\\u0627/.test(chars[i])) {\n\t\t\tlevels[i - 1] = levels[i] = exports.R_H;\n\t\t\ti++;\n\t\t}\n\t}\n\tif (chars[chars.length - 1] === exports.DOT)\n\t\tlevels[chars.length - 1] = exports.B;\n\t\t\t\t\n\tif (chars[0] === '\\u202B')\n\t\tlevels[0] = exports.RLE;\n\t\t\t\t\n\tfor (var i = 0; i < logicalFromVisual.length; i++) {\n\t\tbidiLevels[i] = levels[logicalFromVisual[i]];\n\t}\n\n\treturn {'logicalFromVisual': logicalFromVisual, 'bidiLevels': bidiLevels};\n};\nexports.hasBidiCharacters = function(text, textCharTypes){\n\tvar ret = false;\n\tfor (var i = 0; i < text.length; i++){\n\t\ttextCharTypes[i] = _getCharacterType(text.charAt(i));\n\t\tif (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL || textCharTypes[i] == AN))\n\t\t\tret = true;\n\t}\n\treturn ret;\n};\t\nexports.getVisualFromLogicalIdx = function(logIdx, rowMap) {\n\tfor (var i = 0; i < rowMap.logicalFromVisual.length; i++) {\n\t\tif (rowMap.logicalFromVisual[i] == logIdx)\n\t\t\treturn i;\n\t}\n\treturn 0;\n};\n\n});\n\nace.define(\"ace/bidihandler\",[\"require\",\"exports\",\"module\",\"ace/lib/bidiutil\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar bidiUtil = require(\"./lib/bidiutil\");\nvar lang = require(\"./lib/lang\");\nvar bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\u202B]/;\nvar BidiHandler = function(session) {\n this.session = session;\n this.bidiMap = {};\n this.currentRow = null;\n this.bidiUtil = bidiUtil;\n this.charWidths = [];\n this.EOL = \"\\xAC\";\n this.showInvisibles = true;\n this.isRtlDir = false;\n this.$isRtl = false;\n this.line = \"\";\n this.wrapIndent = 0;\n this.EOF = \"\\xB6\";\n this.RLE = \"\\u202B\";\n this.contentWidth = 0;\n this.fontMetrics = null;\n this.rtlLineOffset = 0;\n this.wrapOffset = 0;\n this.isMoveLeftOperation = false;\n this.seenBidi = bidiRE.test(session.getValue());\n};\n\n(function() {\n this.isBidiRow = function(screenRow, docRow, splitIndex) {\n if (!this.seenBidi)\n return false;\n if (screenRow !== this.currentRow) {\n this.currentRow = screenRow;\n this.updateRowLine(docRow, splitIndex);\n this.updateBidiMap();\n }\n return this.bidiMap.bidiLevels;\n };\n\n this.onChange = function(delta) {\n if (!this.seenBidi) {\n if (delta.action == \"insert\" && bidiRE.test(delta.lines.join(\"\\n\"))) {\n this.seenBidi = true;\n this.currentRow = null;\n }\n } \n else {\n this.currentRow = null;\n }\n };\n\n this.getDocumentRow = function() {\n var docRow = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var index = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n if (index >= 0)\n docRow = this.session.$docRowCache[index];\n }\n\n return docRow;\n };\n\n this.getSplitIndex = function() {\n var splitIndex = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var currentIndex, prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n while (this.currentRow - splitIndex > 0) {\n currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1);\n if (currentIndex !== prevIndex)\n break;\n\n prevIndex = currentIndex;\n splitIndex++;\n }\n } else {\n splitIndex = this.currentRow;\n }\n\n return splitIndex;\n };\n\n this.updateRowLine = function(docRow, splitIndex) {\n if (docRow === undefined)\n docRow = this.getDocumentRow();\n \n var isLastRow = (docRow === this.session.getLength() - 1),\n endOfLine = isLastRow ? this.EOF : this.EOL;\n\n this.wrapIndent = 0;\n this.line = this.session.getLine(docRow);\n this.isRtlDir = this.$isRtl || this.line.charAt(0) === this.RLE;\n if (this.session.$useWrapMode) {\n var splits = this.session.$wrapData[docRow];\n if (splits) {\n if (splitIndex === undefined)\n splitIndex = this.getSplitIndex();\n\n if(splitIndex > 0 && splits.length) {\n this.wrapIndent = splits.indent;\n this.wrapOffset = this.wrapIndent * this.charWidths[bidiUtil.L];\n this.line = (splitIndex < splits.length) ?\n this.line.substring(splits[splitIndex - 1], splits[splitIndex]) :\n this.line.substring(splits[splits.length - 1]);\n } else {\n this.line = this.line.substring(0, splits[splitIndex]);\n }\n }\n if (splitIndex == splits.length)\n this.line += (this.showInvisibles) ? endOfLine : bidiUtil.DOT;\n } else {\n this.line += this.showInvisibles ? endOfLine : bidiUtil.DOT;\n }\n var session = this.session, shift = 0, size;\n this.line = this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g, function(ch, i){\n if (ch === '\\t' || session.isFullWidth(ch.charCodeAt(0))) {\n size = (ch === '\\t') ? session.getScreenTabSize(i + shift) : 2;\n shift += size - 1;\n return lang.stringRepeat(bidiUtil.DOT, size);\n }\n return ch;\n });\n\n if (this.isRtlDir) {\n this.fontMetrics.$main.textContent = (this.line.charAt(this.line.length - 1) == bidiUtil.DOT) ? this.line.substr(0, this.line.length - 1) : this.line;\n this.rtlLineOffset = this.contentWidth - this.fontMetrics.$main.getBoundingClientRect().width;\n }\n };\n \n this.updateBidiMap = function() {\n var textCharTypes = [];\n if (bidiUtil.hasBidiCharacters(this.line, textCharTypes) || this.isRtlDir) {\n this.bidiMap = bidiUtil.doBidiReorder(this.line, textCharTypes, this.isRtlDir);\n } else {\n this.bidiMap = {};\n }\n };\n this.markAsDirty = function() {\n this.currentRow = null;\n };\n this.updateCharacterWidths = function(fontMetrics) {\n if (this.characterWidth === fontMetrics.$characterSize.width)\n return;\n\n this.fontMetrics = fontMetrics;\n var characterWidth = this.characterWidth = fontMetrics.$characterSize.width;\n var bidiCharWidth = fontMetrics.$measureCharWidth(\"\\u05d4\");\n\n this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth;\n this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth;\n this.charWidths[bidiUtil.R_H] = bidiCharWidth * 0.45;\n this.charWidths[bidiUtil.B] = this.charWidths[bidiUtil.RLE] = 0;\n\n this.currentRow = null;\n };\n\n this.setShowInvisibles = function(showInvisibles) {\n this.showInvisibles = showInvisibles;\n this.currentRow = null;\n };\n\n this.setEolChar = function(eolChar) {\n this.EOL = eolChar; \n };\n\n this.setContentWidth = function(width) {\n this.contentWidth = width;\n };\n\n this.isRtlLine = function(row) {\n if (this.$isRtl) return true;\n if (row != undefined)\n return (this.session.getLine(row).charAt(0) == this.RLE);\n else\n return this.isRtlDir; \n };\n\n this.setRtlDirection = function(editor, isRtlDir) {\n var cursor = editor.getCursorPosition(); \n for (var row = editor.selection.getSelectionAnchor().row; row <= cursor.row; row++) {\n if (!isRtlDir && editor.session.getLine(row).charAt(0) === editor.session.$bidiHandler.RLE)\n editor.session.doc.removeInLine(row, 0, 1);\n else if (isRtlDir && editor.session.getLine(row).charAt(0) !== editor.session.$bidiHandler.RLE)\n editor.session.doc.insert({column: 0, row: row}, editor.session.$bidiHandler.RLE);\n }\n };\n this.getPosLeft = function(col) {\n col -= this.wrapIndent;\n var leftBoundary = (this.line.charAt(0) === this.RLE) ? 1 : 0;\n var logicalIdx = (col > leftBoundary) ? (this.session.getOverwrite() ? col : col - 1) : leftBoundary;\n var visualIdx = bidiUtil.getVisualFromLogicalIdx(logicalIdx, this.bidiMap),\n levels = this.bidiMap.bidiLevels, left = 0;\n\n if (!this.session.getOverwrite() && col <= leftBoundary && levels[visualIdx] % 2 !== 0)\n visualIdx++;\n \n for (var i = 0; i < visualIdx; i++) {\n left += this.charWidths[levels[i]];\n }\n\n if (!this.session.getOverwrite() && (col > leftBoundary) && (levels[visualIdx] % 2 === 0))\n left += this.charWidths[levels[visualIdx]];\n\n if (this.wrapIndent)\n left += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n\n if (this.isRtlDir)\n left += this.rtlLineOffset;\n\n return left;\n };\n this.getSelections = function(startCol, endCol) {\n var map = this.bidiMap, levels = map.bidiLevels, level, selections = [], offset = 0,\n selColMin = Math.min(startCol, endCol) - this.wrapIndent, selColMax = Math.max(startCol, endCol) - this.wrapIndent,\n isSelected = false, isSelectedPrev = false, selectionStart = 0;\n \n if (this.wrapIndent)\n offset += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n\n for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) {\n logIdx = map.logicalFromVisual[visIdx];\n level = levels[visIdx];\n isSelected = (logIdx >= selColMin) && (logIdx < selColMax);\n if (isSelected && !isSelectedPrev) {\n selectionStart = offset;\n } else if (!isSelected && isSelectedPrev) {\n selections.push({left: selectionStart, width: offset - selectionStart});\n }\n offset += this.charWidths[level];\n isSelectedPrev = isSelected;\n }\n\n if (isSelected && (visIdx === levels.length)) {\n selections.push({left: selectionStart, width: offset - selectionStart});\n }\n\n if(this.isRtlDir) {\n for (var i = 0; i < selections.length; i++) {\n selections[i].left += this.rtlLineOffset;\n }\n }\n return selections;\n };\n this.offsetToCol = function(posX) {\n if(this.isRtlDir)\n posX -= this.rtlLineOffset;\n\n var logicalIdx = 0, posX = Math.max(posX, 0),\n offset = 0, visualIdx = 0, levels = this.bidiMap.bidiLevels,\n charWidth = this.charWidths[levels[visualIdx]];\n\n if (this.wrapIndent)\n posX -= this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n \n while(posX > offset + charWidth/2) {\n offset += charWidth;\n if(visualIdx === levels.length - 1) {\n charWidth = 0;\n break;\n }\n charWidth = this.charWidths[levels[++visualIdx]];\n }\n \n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && (levels[visualIdx] % 2 === 0)){\n if(posX < offset)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n\n } else if (visualIdx > 0 && (levels[visualIdx - 1] % 2 === 0) && (levels[visualIdx] % 2 !== 0)){\n logicalIdx = 1 + ((posX > offset) ? this.bidiMap.logicalFromVisual[visualIdx]\n : this.bidiMap.logicalFromVisual[visualIdx - 1]);\n\n } else if ((this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && (levels[visualIdx - 1] % 2 === 0))\n || (!this.isRtlDir && visualIdx === 0 && (levels[visualIdx] % 2 !== 0))){\n logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx];\n } else {\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && charWidth !== 0)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n\n if (logicalIdx === 0 && this.isRtlDir)\n logicalIdx++;\n\n return (logicalIdx + this.wrapIndent);\n };\n\n}).call(BidiHandler.prototype);\n\nexports.BidiHandler = BidiHandler;\n});\n\nace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Selection = function(session) {\n this.session = session;\n this.doc = session.getDocument();\n\n this.clearSelection();\n this.cursor = this.lead = this.doc.createAnchor(0, 0);\n this.anchor = this.doc.createAnchor(0, 0);\n this.$silent = false;\n\n var self = this;\n this.cursor.on(\"change\", function(e) {\n self.$cursorChanged = true;\n if (!self.$silent)\n self._emit(\"changeCursor\");\n if (!self.$isEmpty && !self.$silent)\n self._emit(\"changeSelection\");\n if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)\n self.$desiredColumn = null;\n });\n\n this.anchor.on(\"change\", function() {\n self.$anchorChanged = true;\n if (!self.$isEmpty && !self.$silent)\n self._emit(\"changeSelection\");\n });\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.isEmpty = function() {\n return this.$isEmpty || (\n this.anchor.row == this.lead.row &&\n this.anchor.column == this.lead.column\n );\n };\n this.isMultiLine = function() {\n return !this.$isEmpty && this.anchor.row != this.cursor.row;\n };\n this.getCursor = function() {\n return this.lead.getPosition();\n };\n this.setSelectionAnchor = function(row, column) {\n this.$isEmpty = false;\n this.anchor.setPosition(row, column);\n };\n this.getAnchor = \n this.getSelectionAnchor = function() {\n if (this.$isEmpty)\n return this.getSelectionLead();\n \n return this.anchor.getPosition();\n };\n this.getSelectionLead = function() {\n return this.lead.getPosition();\n };\n this.isBackwards = function() {\n var anchor = this.anchor;\n var lead = this.lead;\n return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));\n };\n this.getRange = function() {\n var anchor = this.anchor;\n var lead = this.lead;\n\n if (this.$isEmpty)\n return Range.fromPoints(lead, lead);\n\n return this.isBackwards()\n ? Range.fromPoints(lead, anchor)\n : Range.fromPoints(anchor, lead);\n };\n this.clearSelection = function() {\n if (!this.$isEmpty) {\n this.$isEmpty = true;\n this._emit(\"changeSelection\");\n }\n };\n this.selectAll = function() {\n this.$setSelection(0, 0, Number.MAX_VALUE, Number.MAX_VALUE);\n };\n this.setRange =\n this.setSelectionRange = function(range, reverse) {\n var start = reverse ? range.end : range.start;\n var end = reverse ? range.start : range.end;\n this.$setSelection(start.row, start.column, end.row, end.column);\n };\n\n this.$setSelection = function(anchorRow, anchorColumn, cursorRow, cursorColumn) {\n if (this.$silent)\n return;\n var wasEmpty = this.$isEmpty;\n var wasMultiselect = this.inMultiSelectMode;\n this.$silent = true;\n this.$cursorChanged = this.$anchorChanged = false;\n this.anchor.setPosition(anchorRow, anchorColumn);\n this.cursor.setPosition(cursorRow, cursorColumn);\n this.$isEmpty = !Range.comparePoints(this.anchor, this.cursor);\n this.$silent = false;\n if (this.$cursorChanged)\n this._emit(\"changeCursor\");\n if (this.$cursorChanged || this.$anchorChanged || wasEmpty != this.$isEmpty || wasMultiselect)\n this._emit(\"changeSelection\");\n };\n\n this.$moveSelection = function(mover) {\n var lead = this.lead;\n if (this.$isEmpty)\n this.setSelectionAnchor(lead.row, lead.column);\n\n mover.call(this);\n };\n this.selectTo = function(row, column) {\n this.$moveSelection(function() {\n this.moveCursorTo(row, column);\n });\n };\n this.selectToPosition = function(pos) {\n this.$moveSelection(function() {\n this.moveCursorToPosition(pos);\n });\n };\n this.moveTo = function(row, column) {\n this.clearSelection();\n this.moveCursorTo(row, column);\n };\n this.moveToPosition = function(pos) {\n this.clearSelection();\n this.moveCursorToPosition(pos);\n };\n this.selectUp = function() {\n this.$moveSelection(this.moveCursorUp);\n };\n this.selectDown = function() {\n this.$moveSelection(this.moveCursorDown);\n };\n this.selectRight = function() {\n this.$moveSelection(this.moveCursorRight);\n };\n this.selectLeft = function() {\n this.$moveSelection(this.moveCursorLeft);\n };\n this.selectLineStart = function() {\n this.$moveSelection(this.moveCursorLineStart);\n };\n this.selectLineEnd = function() {\n this.$moveSelection(this.moveCursorLineEnd);\n };\n this.selectFileEnd = function() {\n this.$moveSelection(this.moveCursorFileEnd);\n };\n this.selectFileStart = function() {\n this.$moveSelection(this.moveCursorFileStart);\n };\n this.selectWordRight = function() {\n this.$moveSelection(this.moveCursorWordRight);\n };\n this.selectWordLeft = function() {\n this.$moveSelection(this.moveCursorWordLeft);\n };\n this.getWordRange = function(row, column) {\n if (typeof column == \"undefined\") {\n var cursor = row || this.lead;\n row = cursor.row;\n column = cursor.column;\n }\n return this.session.getWordRange(row, column);\n };\n this.selectWord = function() {\n this.setSelectionRange(this.getWordRange());\n };\n this.selectAWord = function() {\n var cursor = this.getCursor();\n var range = this.session.getAWordRange(cursor.row, cursor.column);\n this.setSelectionRange(range);\n };\n\n this.getLineRange = function(row, excludeLastChar) {\n var rowStart = typeof row == \"number\" ? row : this.lead.row;\n var rowEnd;\n\n var foldLine = this.session.getFoldLine(rowStart);\n if (foldLine) {\n rowStart = foldLine.start.row;\n rowEnd = foldLine.end.row;\n } else {\n rowEnd = rowStart;\n }\n if (excludeLastChar === true)\n return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\n else\n return new Range(rowStart, 0, rowEnd + 1, 0);\n };\n this.selectLine = function() {\n this.setSelectionRange(this.getLineRange());\n };\n this.moveCursorUp = function() {\n this.moveCursorBy(-1, 0);\n };\n this.moveCursorDown = function() {\n this.moveCursorBy(1, 0);\n };\n this.wouldMoveIntoSoftTab = function(cursor, tabSize, direction) {\n var start = cursor.column;\n var end = cursor.column + tabSize;\n\n if (direction < 0) {\n start = cursor.column - tabSize;\n end = cursor.column;\n }\n return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(\" \").length-1 == tabSize;\n };\n this.moveCursorLeft = function() {\n var cursor = this.lead.getPosition(),\n fold;\n\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n } else if (cursor.column === 0) {\n if (cursor.row > 0) {\n this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, -tabSize);\n } else {\n this.moveCursorBy(0, -1);\n }\n }\n };\n this.moveCursorRight = function() {\n var cursor = this.lead.getPosition(),\n fold;\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n }\n else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\n if (this.lead.row < this.doc.getLength() - 1) {\n this.moveCursorTo(this.lead.row + 1, 0);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n var cursor = this.lead;\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, tabSize);\n } else {\n this.moveCursorBy(0, 1);\n }\n }\n };\n this.moveCursorLineStart = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var screenRow = this.session.documentToScreenRow(row, column);\n var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\n var beforeCursor = this.session.getDisplayLine(\n row, null, firstColumnPosition.row,\n firstColumnPosition.column\n );\n\n var leadingSpace = beforeCursor.match(/^\\s*/);\n if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)\n firstColumnPosition.column += leadingSpace[0].length;\n this.moveCursorToPosition(firstColumnPosition);\n };\n this.moveCursorLineEnd = function() {\n var lead = this.lead;\n var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\n if (this.lead.column == lineEnd.column) {\n var line = this.session.getLine(lineEnd.row);\n if (lineEnd.column == line.length) {\n var textEnd = line.search(/\\s+$/);\n if (textEnd > 0)\n lineEnd.column = textEnd;\n }\n }\n\n this.moveCursorTo(lineEnd.row, lineEnd.column);\n };\n this.moveCursorFileEnd = function() {\n var row = this.doc.getLength() - 1;\n var column = this.doc.getLine(row).length;\n this.moveCursorTo(row, column);\n };\n this.moveCursorFileStart = function() {\n this.moveCursorTo(0, 0);\n };\n this.moveCursorLongWordRight = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n return;\n }\n if (this.session.nonTokenRe.exec(rightOfCursor)) {\n column += this.session.nonTokenRe.lastIndex;\n this.session.nonTokenRe.lastIndex = 0;\n rightOfCursor = line.substring(column);\n }\n if (column >= line.length) {\n this.moveCursorTo(row, line.length);\n this.moveCursorRight();\n if (row < this.doc.getLength() - 1)\n this.moveCursorWordRight();\n return;\n }\n if (this.session.tokenRe.exec(rightOfCursor)) {\n column += this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n\n this.moveCursorTo(row, column);\n };\n this.moveCursorLongWordLeft = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n return;\n }\n\n var str = this.session.getFoldStringAt(row, column, -1);\n if (str == null) {\n str = this.doc.getLine(row).substring(0, column);\n }\n\n var leftOfCursor = lang.stringReverse(str);\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n if (this.session.nonTokenRe.exec(leftOfCursor)) {\n column -= this.session.nonTokenRe.lastIndex;\n leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\n this.session.nonTokenRe.lastIndex = 0;\n }\n if (column <= 0) {\n this.moveCursorTo(row, 0);\n this.moveCursorLeft();\n if (row > 0)\n this.moveCursorWordLeft();\n return;\n }\n if (this.session.tokenRe.exec(leftOfCursor)) {\n column -= this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n\n this.moveCursorTo(row, column);\n };\n\n this.$shortWordEndIndex = function(rightOfCursor) {\n var index = 0, ch;\n var whitespaceRe = /\\s/;\n var tokenRe = this.session.tokenRe;\n\n tokenRe.lastIndex = 0;\n if (this.session.tokenRe.exec(rightOfCursor)) {\n index = this.session.tokenRe.lastIndex;\n } else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index ++;\n\n if (index < 1) {\n tokenRe.lastIndex = 0;\n while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n tokenRe.lastIndex = 0;\n index ++;\n if (whitespaceRe.test(ch)) {\n if (index > 2) {\n index--;\n break;\n } else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index ++;\n if (index > 2)\n break;\n }\n }\n }\n }\n }\n tokenRe.lastIndex = 0;\n\n return index;\n };\n\n this.moveCursorShortWordRight = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold)\n return this.moveCursorTo(fold.end.row, fold.end.column);\n\n if (column == line.length) {\n var l = this.doc.getLength();\n do {\n row++;\n rightOfCursor = this.doc.getLine(row);\n } while (row < l && /^\\s*$/.test(rightOfCursor));\n\n if (!/^\\s+/.test(rightOfCursor))\n rightOfCursor = \"\";\n column = 0;\n }\n\n var index = this.$shortWordEndIndex(rightOfCursor);\n\n this.moveCursorTo(row, column + index);\n };\n\n this.moveCursorShortWordLeft = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1))\n return this.moveCursorTo(fold.start.row, fold.start.column);\n\n var line = this.session.getLine(row).substring(0, column);\n if (column === 0) {\n do {\n row--;\n line = this.doc.getLine(row);\n } while (row > 0 && /^\\s*$/.test(line));\n\n column = line.length;\n if (!/\\s+$/.test(line))\n line = \"\";\n }\n\n var leftOfCursor = lang.stringReverse(line);\n var index = this.$shortWordEndIndex(leftOfCursor);\n\n return this.moveCursorTo(row, column - index);\n };\n\n this.moveCursorWordRight = function() {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordRight();\n else\n this.moveCursorShortWordRight();\n };\n\n this.moveCursorWordLeft = function() {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordLeft();\n else\n this.moveCursorShortWordLeft();\n };\n this.moveCursorBy = function(rows, chars) {\n var screenPos = this.session.documentToScreenPosition(\n this.lead.row,\n this.lead.column\n );\n\n var offsetX;\n\n if (chars === 0) {\n if (rows !== 0) {\n if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) {\n offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column);\n screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]);\n } else {\n offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0];\n }\n }\n\n if (this.$desiredColumn)\n screenPos.column = this.$desiredColumn;\n else\n this.$desiredColumn = screenPos.column;\n }\n \n if (rows != 0 && this.session.lineWidgets && this.session.lineWidgets[this.lead.row]) {\n var widget = this.session.lineWidgets[this.lead.row];\n if (rows < 0)\n rows -= widget.rowsAbove || 0;\n else if (rows > 0)\n rows += widget.rowCount - (widget.rowsAbove || 0);\n }\n \n var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX);\n \n if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n \n }\n this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\n };\n this.moveCursorToPosition = function(position) {\n this.moveCursorTo(position.row, position.column);\n };\n this.moveCursorTo = function(row, column, keepDesiredColumn) {\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n row = fold.start.row;\n column = fold.start.column;\n }\n\n this.$keepDesiredColumnOnChange = true;\n var line = this.session.getLine(row);\n if (/[\\uDC00-\\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) {\n if (this.lead.row == row && this.lead.column == column + 1)\n column = column - 1;\n else\n column = column + 1;\n }\n this.lead.setPosition(row, column);\n this.$keepDesiredColumnOnChange = false;\n\n if (!keepDesiredColumn)\n this.$desiredColumn = null;\n };\n this.moveCursorToScreen = function(row, column, keepDesiredColumn) {\n var pos = this.session.screenToDocumentPosition(row, column);\n this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n };\n this.detach = function() {\n this.lead.detach();\n this.anchor.detach();\n };\n\n this.fromOrientedRange = function(range) {\n this.setSelectionRange(range, range.cursor == range.start);\n this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n };\n\n this.toOrientedRange = function(range) {\n var r = this.getRange();\n if (range) {\n range.start.column = r.start.column;\n range.start.row = r.start.row;\n range.end.column = r.end.column;\n range.end.row = r.end.row;\n } else {\n range = r;\n }\n\n range.cursor = this.isBackwards() ? range.start : range.end;\n range.desiredColumn = this.$desiredColumn;\n return range;\n };\n this.getRangeOfMovements = function(func) {\n var start = this.getCursor();\n try {\n func(this);\n var end = this.getCursor();\n return Range.fromPoints(start, end);\n } catch(e) {\n return Range.fromPoints(start, start);\n } finally {\n this.moveCursorToPosition(start);\n }\n };\n\n this.toJSON = function() {\n if (this.rangeCount) {\n var data = this.ranges.map(function(r) {\n var r1 = r.clone();\n r1.isBackwards = r.cursor == r.start;\n return r1;\n });\n } else {\n var data = this.getRange();\n data.isBackwards = this.isBackwards();\n }\n return data;\n };\n\n this.fromJSON = function(data) {\n if (data.start == undefined) {\n if (this.rangeList && data.length > 1) {\n this.toSingleRange(data[0]);\n for (var i = data.length; i--; ) {\n var r = Range.fromPoints(data[i].start, data[i].end);\n if (data[i].isBackwards)\n r.cursor = r.start;\n this.addRange(r, true);\n }\n return;\n } else {\n data = data[0];\n }\n }\n if (this.rangeList)\n this.toSingleRange(data);\n this.setSelectionRange(data, data.isBackwards);\n };\n\n this.isEqual = function(data) {\n if ((data.length || this.rangeCount) && data.length != this.rangeCount)\n return false;\n if (!data.length || !this.ranges)\n return this.getRange().isEqual(data);\n\n for (var i = this.ranges.length; i--; ) {\n if (!this.ranges[i].isEqual(data[i]))\n return false;\n }\n return true;\n };\n\n}).call(Selection.prototype);\n\nexports.Selection = Selection;\n});\n\nace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar config = require(\"./config\");\nvar MAX_TOKEN_COUNT = 2000;\nvar Tokenizer = function(rules) {\n this.states = rules;\n\n this.regExps = {};\n this.matchMappings = {};\n for (var key in this.states) {\n var state = this.states[key];\n var ruleRegExps = [];\n var matchTotal = 0;\n var mapping = this.matchMappings[key] = {defaultToken: \"text\"};\n var flag = \"g\";\n\n var splitterRurles = [];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.defaultToken)\n mapping.defaultToken = rule.defaultToken;\n if (rule.caseInsensitive)\n flag = \"gi\";\n if (rule.regex == null)\n continue;\n\n if (rule.regex instanceof RegExp)\n rule.regex = rule.regex.toString().slice(1, -1);\n var adjustedregex = rule.regex;\n var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\n if (Array.isArray(rule.token)) {\n if (rule.token.length == 1 || matchcount == 1) {\n rule.token = rule.token[0];\n } else if (matchcount - 1 != rule.token.length) {\n this.reportError(\"number of classes and regexp groups doesn't match\", { \n rule: rule,\n groupCount: matchcount - 1\n });\n rule.token = rule.token[0];\n } else {\n rule.tokenArray = rule.token;\n rule.token = null;\n rule.onMatch = this.$arrayTokens;\n }\n } else if (typeof rule.token == \"function\" && !rule.onMatch) {\n if (matchcount > 1)\n rule.onMatch = this.$applyToken;\n else\n rule.onMatch = rule.token;\n }\n\n if (matchcount > 1) {\n if (/\\\\\\d/.test(rule.regex)) {\n adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function(match, digit) {\n return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\n });\n } else {\n matchcount = 1;\n adjustedregex = this.removeCapturingGroups(rule.regex);\n }\n if (!rule.splitRegex && typeof rule.token != \"string\")\n splitterRurles.push(rule); // flag will be known only at the very end\n }\n\n mapping[matchTotal] = i;\n matchTotal += matchcount;\n\n ruleRegExps.push(adjustedregex);\n if (!rule.onMatch)\n rule.onMatch = null;\n }\n \n if (!ruleRegExps.length) {\n mapping[0] = 0;\n ruleRegExps.push(\"$\");\n }\n \n splitterRurles.forEach(function(rule) {\n rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n }, this);\n\n this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n }\n};\n\n(function() {\n this.$setMaxTokenCount = function(m) {\n MAX_TOKEN_COUNT = m | 0;\n };\n \n this.$applyToken = function(str) {\n var values = this.splitRegex.exec(str).slice(1);\n var types = this.token.apply(this, values);\n if (typeof types === \"string\")\n return [{type: types, value: str}];\n\n var tokens = [];\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i]\n };\n }\n return tokens;\n };\n\n this.$arrayTokens = function(str) {\n if (!str)\n return [];\n var values = this.splitRegex.exec(str);\n if (!values)\n return \"text\";\n var tokens = [];\n var types = this.tokenArray;\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i + 1])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i + 1]\n };\n }\n return tokens;\n };\n\n this.removeCapturingGroups = function(src) {\n var r = src.replace(\n /\\\\.|\\[(?:\\\\.|[^\\\\\\]])*|\\(\\?[:=!<]|(\\()/g,\n function(x, y) {return y ? \"(?:\" : x;}\n );\n return r;\n };\n\n this.createSplitterRegexp = function(src, flag) {\n if (src.indexOf(\"(?=\") != -1) {\n var stack = 0;\n var inChClass = false;\n var lastCapture = {};\n src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function(\n m, esc, parenOpen, parenClose, square, index\n ) {\n if (inChClass) {\n inChClass = square != \"]\";\n } else if (square) {\n inChClass = true;\n } else if (parenClose) {\n if (stack == lastCapture.stack) {\n lastCapture.end = index+1;\n lastCapture.stack = -1;\n }\n stack--;\n } else if (parenOpen) {\n stack++;\n if (parenOpen.length != 1) {\n lastCapture.stack = stack;\n lastCapture.start = index;\n }\n }\n return m;\n });\n\n if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end)))\n src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\n }\n if (src.charAt(0) != \"^\") src = \"^\" + src;\n if (src.charAt(src.length - 1) != \"$\") src += \"$\";\n \n return new RegExp(src, (flag||\"\").replace(\"g\", \"\"));\n };\n this.getLineTokens = function(line, startState) {\n if (startState && typeof startState != \"string\") {\n var stack = startState.slice(0);\n startState = stack[0];\n if (startState === \"#tmp\") {\n stack.shift();\n startState = stack.shift();\n }\n } else\n var stack = [];\n\n var currentState = startState || \"start\";\n var state = this.states[currentState];\n if (!state) {\n currentState = \"start\";\n state = this.states[currentState];\n }\n var mapping = this.matchMappings[currentState];\n var re = this.regExps[currentState];\n re.lastIndex = 0;\n\n var match, tokens = [];\n var lastIndex = 0;\n var matchAttempts = 0;\n\n var token = {type: null, value: \"\"};\n\n while (match = re.exec(line)) {\n var type = mapping.defaultToken;\n var rule = null;\n var value = match[0];\n var index = re.lastIndex;\n\n if (index - value.length > lastIndex) {\n var skipped = line.substring(lastIndex, index - value.length);\n if (token.type == type) {\n token.value += skipped;\n } else {\n if (token.type)\n tokens.push(token);\n token = {type: type, value: skipped};\n }\n }\n\n for (var i = 0; i < match.length-2; i++) {\n if (match[i + 1] === undefined)\n continue;\n\n rule = state[mapping[i]];\n\n if (rule.onMatch)\n type = rule.onMatch(value, currentState, stack, line);\n else\n type = rule.token;\n\n if (rule.next) {\n if (typeof rule.next == \"string\") {\n currentState = rule.next;\n } else {\n currentState = rule.next(currentState, stack);\n }\n \n state = this.states[currentState];\n if (!state) {\n this.reportError(\"state doesn't exist\", currentState);\n currentState = \"start\";\n state = this.states[currentState];\n }\n mapping = this.matchMappings[currentState];\n lastIndex = index;\n re = this.regExps[currentState];\n re.lastIndex = index;\n }\n if (rule.consumeLineEnd)\n lastIndex = index;\n break;\n }\n\n if (value) {\n if (typeof type === \"string\") {\n if ((!rule || rule.merge !== false) && token.type === type) {\n token.value += value;\n } else {\n if (token.type)\n tokens.push(token);\n token = {type: type, value: value};\n }\n } else if (type) {\n if (token.type)\n tokens.push(token);\n token = {type: null, value: \"\"};\n for (var i = 0; i < type.length; i++)\n tokens.push(type[i]);\n }\n }\n\n if (lastIndex == line.length)\n break;\n\n lastIndex = index;\n\n if (matchAttempts++ > MAX_TOKEN_COUNT) {\n if (matchAttempts > 2 * line.length) {\n this.reportError(\"infinite loop with in ace tokenizer\", {\n startState: startState,\n line: line\n });\n }\n while (lastIndex < line.length) {\n if (token.type)\n tokens.push(token);\n token = {\n value: line.substring(lastIndex, lastIndex += 500),\n type: \"overflow\"\n };\n }\n currentState = \"start\";\n stack = [];\n break;\n }\n }\n\n if (token.type)\n tokens.push(token);\n \n if (stack.length > 1) {\n if (stack[0] !== currentState)\n stack.unshift(\"#tmp\", currentState);\n }\n return {\n tokens : tokens,\n state : stack.length ? stack : currentState\n };\n };\n \n this.reportError = config.reportError;\n \n}).call(Tokenizer.prototype);\n\nexports.Tokenizer = Tokenizer;\n});\n\nace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"../lib/lang\");\n\nvar TextHighlightRules = function() {\n\n this.$rules = {\n \"start\" : [{\n token : \"empty_line\",\n regex : '^$'\n }, {\n defaultToken : \"text\"\n }]\n };\n};\n\n(function() {\n\n this.addRules = function(rules, prefix) {\n if (!prefix) {\n for (var key in rules)\n this.$rules[key] = rules[key];\n return;\n }\n for (var key in rules) {\n var state = rules[key];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.next || rule.onMatch) {\n if (typeof rule.next == \"string\") {\n if (rule.next.indexOf(prefix) !== 0)\n rule.next = prefix + rule.next;\n }\n if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\n rule.nextState = prefix + rule.nextState;\n }\n }\n this.$rules[prefix + key] = state;\n }\n };\n\n this.getRules = function() {\n return this.$rules;\n };\n\n this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n var embedRules = typeof HighlightRules == \"function\"\n ? new HighlightRules().getRules()\n : HighlightRules;\n if (states) {\n for (var i = 0; i < states.length; i++)\n states[i] = prefix + states[i];\n } else {\n states = [];\n for (var key in embedRules)\n states.push(prefix + key);\n }\n\n this.addRules(embedRules, prefix);\n\n if (escapeRules) {\n var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n for (var i = 0; i < states.length; i++)\n addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules));\n }\n\n if (!this.$embeds)\n this.$embeds = [];\n this.$embeds.push(prefix);\n };\n\n this.getEmbeds = function() {\n return this.$embeds;\n };\n\n var pushState = function(currentState, stack) {\n if (currentState != \"start\" || stack.length)\n stack.unshift(this.nextState, currentState);\n return this.nextState;\n };\n var popState = function(currentState, stack) {\n stack.shift();\n return stack.shift() || \"start\";\n };\n\n this.normalizeRules = function() {\n var id = 0;\n var rules = this.$rules;\n function processState(key) {\n var state = rules[key];\n state.processed = true;\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n var toInsert = null;\n if (Array.isArray(rule)) {\n toInsert = rule;\n rule = {};\n }\n if (!rule.regex && rule.start) {\n rule.regex = rule.start;\n if (!rule.next)\n rule.next = [];\n rule.next.push({\n defaultToken: rule.token\n }, {\n token: rule.token + \".end\",\n regex: rule.end || rule.start,\n next: \"pop\"\n });\n rule.token = rule.token + \".start\";\n rule.push = true;\n }\n var next = rule.next || rule.push;\n if (next && Array.isArray(next)) {\n var stateName = rule.stateName;\n if (!stateName) {\n stateName = rule.token;\n if (typeof stateName != \"string\")\n stateName = stateName[0] || \"\";\n if (rules[stateName])\n stateName += id++;\n }\n rules[stateName] = next;\n rule.next = stateName;\n processState(stateName);\n } else if (next == \"pop\") {\n rule.next = popState;\n }\n\n if (rule.push) {\n rule.nextState = rule.next || rule.push;\n rule.next = pushState;\n delete rule.push;\n }\n\n if (rule.rules) {\n for (var r in rule.rules) {\n if (rules[r]) {\n if (rules[r].push)\n rules[r].push.apply(rules[r], rule.rules[r]);\n } else {\n rules[r] = rule.rules[r];\n }\n }\n }\n var includeName = typeof rule == \"string\" ? rule : rule.include;\n if (includeName) {\n if (Array.isArray(includeName))\n toInsert = includeName.map(function(x) { return rules[x]; });\n else\n toInsert = rules[includeName];\n }\n\n if (toInsert) {\n var args = [i, 1].concat(toInsert);\n if (rule.noEscape)\n args = args.filter(function(x) {return !x.next;});\n state.splice.apply(state, args);\n i--;\n }\n \n if (rule.keywordMap) {\n rule.token = this.createKeywordMapper(\n rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive\n );\n delete rule.defaultToken;\n }\n }\n }\n Object.keys(rules).forEach(processState, this);\n };\n\n this.createKeywordMapper = function(map, defaultToken, ignoreCase, splitChar) {\n var keywords = Object.create(null);\n this.$keywordList = [];\n Object.keys(map).forEach(function(className) {\n var a = map[className];\n var list = a.split(splitChar || \"|\");\n for (var i = list.length; i--; ) {\n var word = list[i];\n this.$keywordList.push(word);\n if (ignoreCase)\n word = word.toLowerCase(); \n keywords[word] = className;\n }\n }, this);\n map = null;\n return ignoreCase\n ? function(value) {return keywords[value.toLowerCase()] || defaultToken; }\n : function(value) {return keywords[value] || defaultToken; };\n };\n\n this.getKeywords = function() {\n return this.$keywords;\n };\n\n}).call(TextHighlightRules.prototype);\n\nexports.TextHighlightRules = TextHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar Behaviour = function() {\n this.$behaviours = {};\n};\n\n(function () {\n\n this.add = function (name, action, callback) {\n switch (undefined) {\n case this.$behaviours:\n this.$behaviours = {};\n case this.$behaviours[name]:\n this.$behaviours[name] = {};\n }\n this.$behaviours[name][action] = callback;\n };\n \n this.addBehaviours = function (behaviours) {\n for (var key in behaviours) {\n for (var action in behaviours[key]) {\n this.add(key, action, behaviours[key][action]);\n }\n }\n };\n \n this.remove = function (name) {\n if (this.$behaviours && this.$behaviours[name]) {\n delete this.$behaviours[name];\n }\n };\n \n this.inherit = function (mode, filter) {\n if (typeof mode === \"function\") {\n var behaviours = new mode().getBehaviours(filter);\n } else {\n var behaviours = mode.getBehaviours(filter);\n }\n this.addBehaviours(behaviours);\n };\n \n this.getBehaviours = function (filter) {\n if (!filter) {\n return this.$behaviours;\n } else {\n var ret = {};\n for (var i = 0; i < filter.length; i++) {\n if (this.$behaviours[filter[i]]) {\n ret[filter[i]] = this.$behaviours[filter[i]];\n }\n }\n return ret;\n }\n };\n\n}).call(Behaviour.prototype);\n\nexports.Behaviour = Behaviour;\n});\n\nace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"./range\").Range;\nvar TokenIterator = function(session, initialRow, initialColumn) {\n this.$session = session;\n this.$row = initialRow;\n this.$rowTokens = session.getTokens(initialRow);\n\n var token = session.getTokenAt(initialRow, initialColumn);\n this.$tokenIndex = token ? token.index : -1;\n};\n\n(function() { \n this.stepBackward = function() {\n this.$tokenIndex -= 1;\n \n while (this.$tokenIndex < 0) {\n this.$row -= 1;\n if (this.$row < 0) {\n this.$row = 0;\n return null;\n }\n \n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = this.$rowTokens.length - 1;\n }\n \n return this.$rowTokens[this.$tokenIndex];\n }; \n this.stepForward = function() {\n this.$tokenIndex += 1;\n var rowCount;\n while (this.$tokenIndex >= this.$rowTokens.length) {\n this.$row += 1;\n if (!rowCount)\n rowCount = this.$session.getLength();\n if (this.$row >= rowCount) {\n this.$row = rowCount - 1;\n return null;\n }\n\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = 0;\n }\n \n return this.$rowTokens[this.$tokenIndex];\n }; \n this.getCurrentToken = function () {\n return this.$rowTokens[this.$tokenIndex];\n }; \n this.getCurrentTokenRow = function () {\n return this.$row;\n }; \n this.getCurrentTokenColumn = function() {\n var rowTokens = this.$rowTokens;\n var tokenIndex = this.$tokenIndex;\n var column = rowTokens[tokenIndex].start;\n if (column !== undefined)\n return column;\n \n column = 0;\n while (tokenIndex > 0) {\n tokenIndex -= 1;\n column += rowTokens[tokenIndex].value.length;\n }\n \n return column; \n };\n this.getCurrentTokenPosition = function() {\n return {row: this.$row, column: this.getCurrentTokenColumn()};\n };\n this.getCurrentTokenRange = function() {\n var token = this.$rowTokens[this.$tokenIndex];\n var column = this.getCurrentTokenColumn();\n return new Range(this.$row, column, this.$row, column + token.value.length);\n };\n \n}).call(TokenIterator.prototype);\n\nexports.TokenIterator = TokenIterator;\n});\n\nace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nvar SAFE_INSERT_IN_TOKENS =\n [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\"];\nvar SAFE_INSERT_BEFORE_TOKENS =\n [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\", \"comment\"];\n\nvar context;\nvar contextCache = {};\nvar defaultQuotes = {'\"' : '\"', \"'\" : \"'\"};\n\nvar initContext = function(editor) {\n var id = -1;\n if (editor.multiSelect) {\n id = editor.selection.index;\n if (contextCache.rangeCount != editor.multiSelect.rangeCount)\n contextCache = {rangeCount: editor.multiSelect.rangeCount};\n }\n if (contextCache[id])\n return context = contextCache[id];\n context = contextCache[id] = {\n autoInsertedBrackets: 0,\n autoInsertedRow: -1,\n autoInsertedLineEnd: \"\",\n maybeInsertedBrackets: 0,\n maybeInsertedRow: -1,\n maybeInsertedLineStart: \"\",\n maybeInsertedLineEnd: \"\"\n };\n};\n\nvar getWrapped = function(selection, selected, opening, closing) {\n var rowDiff = selection.end.row - selection.start.row;\n return {\n text: opening + selected + closing,\n selection: [\n 0,\n selection.start.column + 1,\n rowDiff,\n selection.end.column + (rowDiff ? 0 : 1)\n ]\n };\n};\n\nvar CstyleBehaviour = function(options) {\n this.add(\"braces\", \"insertion\", function(state, action, editor, session, text) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (text == '{') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '{', '}');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options && options.braces) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n } else {\n CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n return {\n text: '{',\n selection: [1, 1]\n };\n }\n }\n } else if (text == '}') {\n initContext(editor);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == '}') {\n var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n } else if (text == \"\\n\" || text == \"\\r\\n\") {\n initContext(editor);\n var closing = \"\";\n if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar === '}') {\n var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}');\n if (!openBracePos)\n return null;\n var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n } else if (closing) {\n var next_indent = this.$getIndent(line);\n } else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n return;\n }\n var indent = next_indent + session.getTabString();\n\n return {\n text: '\\n' + indent + '\\n' + next_indent + closing,\n selection: [1, indent.length, 1, indent.length]\n };\n } else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n });\n\n this.add(\"braces\", \"deletion\", function(state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '{') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.end.column, range.end.column + 1);\n if (rightChar == '}') {\n range.end.column++;\n return range;\n } else {\n context.maybeInsertedBrackets--;\n }\n }\n });\n\n this.add(\"parens\", \"insertion\", function(state, action, editor, session, text) {\n if (text == '(') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '(', ')');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n return {\n text: '()',\n selection: [1, 1]\n };\n }\n } else if (text == ')') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ')') {\n var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n\n this.add(\"parens\", \"deletion\", function(state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '(') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ')') {\n range.end.column++;\n return range;\n }\n }\n });\n\n this.add(\"brackets\", \"insertion\", function(state, action, editor, session, text) {\n if (text == '[') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '[', ']');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n return {\n text: '[]',\n selection: [1, 1]\n };\n }\n } else if (text == ']') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ']') {\n var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n\n this.add(\"brackets\", \"deletion\", function(state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '[') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ']') {\n range.end.column++;\n return range;\n }\n }\n });\n\n this.add(\"string_dquotes\", \"insertion\", function(state, action, editor, session, text) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n if (text.length == 1 && quotes[text]) {\n if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1) \n return;\n initContext(editor);\n var quote = text;\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, quote, quote);\n } else if (!selected) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var leftChar = line.substring(cursor.column-1, cursor.column);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n \n var token = session.getTokenAt(cursor.row, cursor.column);\n var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\n return null;\n \n var stringBefore = token && /string|escape/.test(token.type);\n var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n \n var pair;\n if (rightChar == quote) {\n pair = stringBefore !== stringAfter;\n if (pair && /string\\.end/.test(rightToken.type))\n pair = false;\n } else {\n if (stringBefore && !stringAfter)\n return null; // wrap string with different quote\n if (stringBefore && stringAfter)\n return null; // do not pair quotes inside strings\n var wordRe = session.$mode.tokenRe;\n wordRe.lastIndex = 0;\n var isWordBefore = wordRe.test(leftChar);\n wordRe.lastIndex = 0;\n var isWordAfter = wordRe.test(leftChar);\n if (isWordBefore || isWordAfter)\n return null; // before or after alphanumeric\n if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\n return null; // there is rightChar and it isn't closing\n var charBefore = line[cursor.column - 2];\n if (leftChar == quote && (charBefore == quote || wordRe.test(charBefore)))\n return null;\n pair = true;\n }\n return {\n text: pair ? quote + quote : \"\",\n selection: [1,1]\n };\n }\n }\n });\n\n this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && quotes.hasOwnProperty(selected)) {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == selected) {\n range.end.column++;\n return range;\n }\n }\n });\n\n};\n\n \nCstyleBehaviour.isSaneInsertion = function(editor, session) {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n if (/[)}\\]]/.test(editor.session.getLine(cursor.row)[cursor.column]))\n return true;\n var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\n return false;\n }\n iterator.stepForward();\n return iterator.getCurrentTokenRow() !== cursor.row ||\n this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n};\n\nCstyleBehaviour.$matchTokenType = function(token, types) {\n return types.indexOf(token.type || token) > -1;\n};\n\nCstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0]))\n context.autoInsertedBrackets = 0;\n context.autoInsertedRow = cursor.row;\n context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n context.autoInsertedBrackets++;\n};\n\nCstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this.isMaybeInsertedClosing(cursor, line))\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = cursor.row;\n context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n context.maybeInsertedLineEnd = line.substr(cursor.column);\n context.maybeInsertedBrackets++;\n};\n\nCstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {\n return context.autoInsertedBrackets > 0 &&\n cursor.row === context.autoInsertedRow &&\n bracket === context.autoInsertedLineEnd[0] &&\n line.substr(cursor.column) === context.autoInsertedLineEnd;\n};\n\nCstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {\n return context.maybeInsertedBrackets > 0 &&\n cursor.row === context.maybeInsertedRow &&\n line.substr(cursor.column) === context.maybeInsertedLineEnd &&\n line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n};\n\nCstyleBehaviour.popAutoInsertedClosing = function() {\n context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n context.autoInsertedBrackets--;\n};\n\nCstyleBehaviour.clearMaybeInsertedClosing = function() {\n if (context) {\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = -1;\n }\n};\n\n\n\noop.inherits(CstyleBehaviour, Behaviour);\n\nexports.CstyleBehaviour = CstyleBehaviour;\n});\n\nace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nvar wordChars = [48,9,8,25,5,0,2,25,48,0,11,0,5,0,6,22,2,30,2,457,5,11,15,4,8,0,2,0,18,116,2,1,3,3,9,0,2,2,2,0,2,19,2,82,2,138,2,4,3,155,12,37,3,0,8,38,10,44,2,0,2,1,2,1,2,0,9,26,6,2,30,10,7,61,2,9,5,101,2,7,3,9,2,18,3,0,17,58,3,100,15,53,5,0,6,45,211,57,3,18,2,5,3,11,3,9,2,1,7,6,2,2,2,7,3,1,3,21,2,6,2,0,4,3,3,8,3,1,3,3,9,0,5,1,2,4,3,11,16,2,2,5,5,1,3,21,2,6,2,1,2,1,2,1,3,0,2,4,5,1,3,2,4,0,8,3,2,0,8,15,12,2,2,8,2,2,2,21,2,6,2,1,2,4,3,9,2,2,2,2,3,0,16,3,3,9,18,2,2,7,3,1,3,21,2,6,2,1,2,4,3,8,3,1,3,2,9,1,5,1,2,4,3,9,2,0,17,1,2,5,4,2,2,3,4,1,2,0,2,1,4,1,4,2,4,11,5,4,4,2,2,3,3,0,7,0,15,9,18,2,2,7,2,2,2,22,2,9,2,4,4,7,2,2,2,3,8,1,2,1,7,3,3,9,19,1,2,7,2,2,2,22,2,9,2,4,3,8,2,2,2,3,8,1,8,0,2,3,3,9,19,1,2,7,2,2,2,22,2,15,4,7,2,2,2,3,10,0,9,3,3,9,11,5,3,1,2,17,4,23,2,8,2,0,3,6,4,0,5,5,2,0,2,7,19,1,14,57,6,14,2,9,40,1,2,0,3,1,2,0,3,0,7,3,2,6,2,2,2,0,2,0,3,1,2,12,2,2,3,4,2,0,2,5,3,9,3,1,35,0,24,1,7,9,12,0,2,0,2,0,5,9,2,35,5,19,2,5,5,7,2,35,10,0,58,73,7,77,3,37,11,42,2,0,4,328,2,3,3,6,2,0,2,3,3,40,2,3,3,32,2,3,3,6,2,0,2,3,3,14,2,56,2,3,3,66,5,0,33,15,17,84,13,619,3,16,2,25,6,74,22,12,2,6,12,20,12,19,13,12,2,2,2,1,13,51,3,29,4,0,5,1,3,9,34,2,3,9,7,87,9,42,6,69,11,28,4,11,5,11,11,39,3,4,12,43,5,25,7,10,38,27,5,62,2,28,3,10,7,9,14,0,89,75,5,9,18,8,13,42,4,11,71,55,9,9,4,48,83,2,2,30,14,230,23,280,3,5,3,37,3,5,3,7,2,0,2,0,2,0,2,30,3,52,2,6,2,0,4,2,2,6,4,3,3,5,5,12,6,2,2,6,67,1,20,0,29,0,14,0,17,4,60,12,5,0,4,11,18,0,5,0,3,9,2,0,4,4,7,0,2,0,2,0,2,3,2,10,3,3,6,4,5,0,53,1,2684,46,2,46,2,132,7,6,15,37,11,53,10,0,17,22,10,6,2,6,2,6,2,6,2,6,2,6,2,6,2,6,2,31,48,0,470,1,36,5,2,4,6,1,5,85,3,1,3,2,2,89,2,3,6,40,4,93,18,23,57,15,513,6581,75,20939,53,1164,68,45,3,268,4,27,21,31,3,13,13,1,2,24,9,69,11,1,38,8,3,102,3,1,111,44,25,51,13,68,12,9,7,23,4,0,5,45,3,35,13,28,4,64,15,10,39,54,10,13,3,9,7,22,4,1,5,66,25,2,227,42,2,1,3,9,7,11171,13,22,5,48,8453,301,3,61,3,105,39,6,13,4,6,11,2,12,2,4,2,0,2,1,2,1,2,107,34,362,19,63,3,53,41,11,5,15,17,6,13,1,25,2,33,4,2,134,20,9,8,25,5,0,2,25,12,88,4,5,3,5,3,5,3,2];\n\nvar code = 0;\nvar str = [];\nfor (var i = 0; i < wordChars.length; i += 2) {\n str.push(code += wordChars[i]);\n if (wordChars[i + 1])\n str.push(45, code += wordChars[i + 1]);\n}\n\nexports.wordChars = String.fromCharCode.apply(null, str);\n\n});\n\nace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\nvar config = require(\"../config\");\n\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar unicode = require(\"../unicode\");\nvar lang = require(\"../lib/lang\");\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n this.HighlightRules = TextHighlightRules;\n};\n\n(function() {\n this.$defaultBehaviour = new CstyleBehaviour();\n\n this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"\\\\$_]+\", \"g\");\n\n this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"\\\\$_]|\\\\s])+\", \"g\");\n\n this.getTokenizer = function() {\n if (!this.$tokenizer) {\n this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig);\n this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n }\n return this.$tokenizer;\n };\n\n this.lineCommentStart = \"\";\n this.blockComment = \"\";\n\n this.toggleCommentLines = function(state, session, startRow, endRow) {\n var doc = session.doc;\n\n var ignoreBlankLines = true;\n var shouldRemove = true;\n var minIndent = Infinity;\n var tabSize = session.getTabSize();\n var insertAtTabStop = false;\n\n if (!this.lineCommentStart) {\n if (!this.blockComment)\n return false;\n var lineCommentStart = this.blockComment.start;\n var lineCommentEnd = this.blockComment.end;\n var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\n var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\n\n var comment = function(line, i) {\n if (testRemove(line, i))\n return;\n if (!ignoreBlankLines || /\\S/.test(line)) {\n doc.insertInLine({row: i, column: line.length}, lineCommentEnd);\n doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\n }\n };\n\n var uncomment = function(line, i) {\n var m;\n if (m = line.match(regexpEnd))\n doc.removeInLine(i, line.length - m[0].length, line.length);\n if (m = line.match(regexpStart))\n doc.removeInLine(i, m[1].length, m[0].length);\n };\n\n var testRemove = function(line, row) {\n if (regexpStart.test(line))\n return true;\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n if (tokens[i].type === \"comment\")\n return true;\n }\n };\n } else {\n if (Array.isArray(this.lineCommentStart)) {\n var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n var lineCommentStart = this.lineCommentStart[0];\n } else {\n var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n var lineCommentStart = this.lineCommentStart;\n }\n regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n \n insertAtTabStop = session.getUseSoftTabs();\n\n var uncomment = function(line, i) {\n var m = line.match(regexpStart);\n if (!m) return;\n var start = m[1].length, end = m[0].length;\n if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \")\n end--;\n doc.removeInLine(i, start, end);\n };\n var commentWithSpace = lineCommentStart + \" \";\n var comment = function(line, i) {\n if (!ignoreBlankLines || /\\S/.test(line)) {\n if (shouldInsertSpace(line, minIndent, minIndent))\n doc.insertInLine({row: i, column: minIndent}, commentWithSpace);\n else\n doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\n }\n };\n var testRemove = function(line, i) {\n return regexpStart.test(line);\n };\n \n var shouldInsertSpace = function(line, before, after) {\n var spaces = 0;\n while (before-- && line.charAt(before) == \" \")\n spaces++;\n if (spaces % tabSize != 0)\n return false;\n var spaces = 0;\n while (line.charAt(after++) == \" \")\n spaces++;\n if (tabSize > 2)\n return spaces % tabSize != tabSize - 1;\n else\n return spaces % tabSize == 0;\n };\n }\n\n function iter(fun) {\n for (var i = startRow; i <= endRow; i++)\n fun(doc.getLine(i), i);\n }\n\n\n var minEmptyLength = Infinity;\n iter(function(line, i) {\n var indent = line.search(/\\S/);\n if (indent !== -1) {\n if (indent < minIndent)\n minIndent = indent;\n if (shouldRemove && !testRemove(line, i))\n shouldRemove = false;\n } else if (minEmptyLength > line.length) {\n minEmptyLength = line.length;\n }\n });\n\n if (minIndent == Infinity) {\n minIndent = minEmptyLength;\n ignoreBlankLines = false;\n shouldRemove = false;\n }\n\n if (insertAtTabStop && minIndent % tabSize != 0)\n minIndent = Math.floor(minIndent / tabSize) * tabSize;\n\n iter(shouldRemove ? uncomment : comment);\n };\n\n this.toggleBlockComment = function(state, session, range, cursor) {\n var comment = this.blockComment;\n if (!comment)\n return;\n if (!comment.start && comment[0])\n comment = comment[0];\n\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n\n var sel = session.selection;\n var initialRange = session.selection.toOrientedRange();\n var startRow, colDiff;\n\n if (token && /comment/.test(token.type)) {\n var startRange, endRange;\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.start);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n startRange = new Range(row, column, row, column + comment.start.length);\n break;\n }\n token = iterator.stepBackward();\n }\n\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.end);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n endRange = new Range(row, column, row, column + comment.end.length);\n break;\n }\n token = iterator.stepForward();\n }\n if (endRange)\n session.remove(endRange);\n if (startRange) {\n session.remove(startRange);\n startRow = startRange.start.row;\n colDiff = -comment.start.length;\n }\n } else {\n colDiff = comment.start.length;\n startRow = range.start.row;\n session.insert(range.end, comment.end);\n session.insert(range.start, comment.start);\n }\n if (initialRange.start.row == startRow)\n initialRange.start.column += colDiff;\n if (initialRange.end.row == startRow)\n initialRange.end.column += colDiff;\n session.selection.fromOrientedRange(initialRange);\n };\n\n this.getNextLineIndent = function(state, line, tab) {\n return this.$getIndent(line);\n };\n\n this.checkOutdent = function(state, line, input) {\n return false;\n };\n\n this.autoOutdent = function(state, doc, row) {\n };\n\n this.$getIndent = function(line) {\n return line.match(/^\\s*/)[0];\n };\n\n this.createWorker = function(session) {\n return null;\n };\n\n this.createModeDelegates = function (mapping) {\n this.$embeds = [];\n this.$modes = {};\n for (var i in mapping) {\n if (mapping[i]) {\n var Mode = mapping[i];\n var id = Mode.prototype.$id;\n var mode = config.$modes[id];\n if (!mode)\n config.$modes[id] = mode = new Mode();\n if (!config.$modes[i])\n config.$modes[i] = mode;\n this.$embeds.push(i);\n this.$modes[i] = mode;\n }\n }\n\n var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\", \n \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n\n for (var i = 0; i < delegations.length; i++) {\n (function(scope) {\n var functionName = delegations[i];\n var defaultHandler = scope[functionName];\n scope[delegations[i]] = function() {\n return this.$delegator(functionName, arguments, defaultHandler);\n };\n }(this));\n }\n };\n\n this.$delegator = function(method, args, defaultHandler) {\n var state = args[0] || \"start\";\n if (typeof state != \"string\") {\n if (Array.isArray(state[2])) {\n var language = state[2][state[2].length - 1];\n var mode = this.$modes[language];\n if (mode)\n return mode[method].apply(mode, [state[1]].concat([].slice.call(args, 1)));\n }\n state = state[0] || \"start\";\n }\n \n for (var i = 0; i < this.$embeds.length; i++) {\n if (!this.$modes[this.$embeds[i]]) continue;\n\n var split = state.split(this.$embeds[i]);\n if (!split[0] && split[1]) {\n args[0] = split[1];\n var mode = this.$modes[this.$embeds[i]];\n return mode[method].apply(mode, args);\n }\n }\n var ret = defaultHandler.apply(this, args);\n return defaultHandler ? ret : undefined;\n };\n\n this.transformAction = function(state, action, editor, session, param) {\n if (this.$behaviour) {\n var behaviours = this.$behaviour.getBehaviours();\n for (var key in behaviours) {\n if (behaviours[key][action]) {\n var ret = behaviours[key][action].apply(this, arguments);\n if (ret) {\n return ret;\n }\n }\n }\n }\n };\n \n this.getKeywords = function(append) {\n if (!this.completionKeywords) {\n var rules = this.$tokenizer.rules;\n var completionKeywords = [];\n for (var rule in rules) {\n var ruleItr = rules[rule];\n for (var r = 0, l = ruleItr.length; r < l; r++) {\n if (typeof ruleItr[r].token === \"string\") {\n if (/keyword|support|storage/.test(ruleItr[r].token))\n completionKeywords.push(ruleItr[r].regex);\n }\n else if (typeof ruleItr[r].token === \"object\") {\n for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) { \n if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n completionKeywords.push(rule.substr(1, rule.length - 2));\n }\n }\n }\n }\n }\n this.completionKeywords = completionKeywords;\n }\n if (!append)\n return this.$keywordList;\n return completionKeywords.concat(this.$keywordList || []);\n };\n \n this.$createKeywordList = function() {\n if (!this.$highlightRules)\n this.getTokenizer();\n return this.$keywordList = this.$highlightRules.$keywordList || [];\n };\n\n this.getCompletions = function(state, session, pos, prefix) {\n var keywords = this.$keywordList || this.$createKeywordList();\n return keywords.map(function(word) {\n return {\n name: word,\n value: word,\n score: 0,\n meta: \"keyword\"\n };\n });\n };\n\n this.$id = \"ace/mode/text\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n console.log(\"Invalid Delta:\", delta);\n throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n return position.row >= 0 && position.row < docLines.length &&\n position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n if (delta.action != \"insert\" && delta.action != \"remove\")\n throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n if (!(delta.lines instanceof Array))\n throwDeltaError(delta, \"delta.lines must be an Array\");\n if (!delta.start || !delta.end)\n throwDeltaError(delta, \"delta.start/end must be an present\");\n var start = delta.start;\n if (!positionInDocument(docLines, delta.start))\n throwDeltaError(delta, \"delta.start must be contained in document\");\n var end = delta.end;\n if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n var numRangeRows = end.row - start.row;\n var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n \n var row = delta.start.row;\n var startColumn = delta.start.column;\n var line = docLines[row] || \"\";\n switch (delta.action) {\n case \"insert\":\n var lines = delta.lines;\n if (lines.length === 1) {\n docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n } else {\n var args = [row, 1].concat(delta.lines);\n docLines.splice.apply(docLines, args);\n docLines[row] = line.substring(0, startColumn) + docLines[row];\n docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n }\n break;\n case \"remove\":\n var endColumn = delta.end.column;\n var endRow = delta.end.row;\n if (row === endRow) {\n docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n } else {\n docLines.splice(\n row, endRow - row + 1,\n line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n );\n }\n break;\n }\n};\n});\n\nace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n this.$onChange = this.onChange.bind(this);\n this.attach(doc);\n \n if (typeof column == \"undefined\")\n this.setPosition(row.row, row.column);\n else\n this.setPosition(row, column);\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.getPosition = function() {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n this.getDocument = function() {\n return this.document;\n };\n this.$insertRight = false;\n this.onChange = function(delta) {\n if (delta.start.row == delta.end.row && delta.start.row != this.row)\n return;\n\n if (delta.start.row > this.row)\n return;\n \n var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n this.setPosition(point.row, point.column, true);\n };\n \n function $pointsInOrder(point1, point2, equalPointsInOrder) {\n var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n }\n \n function $getTransformedPoint(delta, point, moveIfEqual) {\n var deltaIsInsert = delta.action == \"insert\";\n var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n var deltaStart = delta.start;\n var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n return {\n row: point.row,\n column: point.column\n };\n }\n if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n return {\n row: point.row + deltaRowShift,\n column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n };\n }\n \n return {\n row: deltaStart.row,\n column: deltaStart.column\n };\n }\n this.setPosition = function(row, column, noClip) {\n var pos;\n if (noClip) {\n pos = {\n row: row,\n column: column\n };\n } else {\n pos = this.$clipPositionToDocument(row, column);\n }\n\n if (this.row == pos.row && this.column == pos.column)\n return;\n\n var old = {\n row: this.row,\n column: this.column\n };\n\n this.row = pos.row;\n this.column = pos.column;\n this._signal(\"change\", {\n old: old,\n value: pos\n });\n };\n this.detach = function() {\n this.document.off(\"change\", this.$onChange);\n };\n this.attach = function(doc) {\n this.document = doc || this.document;\n this.document.on(\"change\", this.$onChange);\n };\n this.$clipPositionToDocument = function(row, column) {\n var pos = {};\n\n if (row >= this.document.getLength()) {\n pos.row = Math.max(0, this.document.getLength() - 1);\n pos.column = this.document.getLine(pos.row).length;\n }\n else if (row < 0) {\n pos.row = 0;\n pos.column = 0;\n }\n else {\n pos.row = row;\n pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n }\n\n if (column < 0)\n pos.column = 0;\n\n return pos;\n };\n\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n this.$lines = [\"\"];\n if (textOrLines.length === 0) {\n this.$lines = [\"\"];\n } else if (Array.isArray(textOrLines)) {\n this.insertMergedLines({row: 0, column: 0}, textOrLines);\n } else {\n this.insert({row: 0, column:0}, textOrLines);\n }\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.setValue = function(text) {\n var len = this.getLength() - 1;\n this.remove(new Range(0, 0, len, this.getLine(len).length));\n this.insert({row: 0, column: 0}, text);\n };\n this.getValue = function() {\n return this.getAllLines().join(this.getNewLineCharacter());\n };\n this.createAnchor = function(row, column) {\n return new Anchor(this, row, column);\n };\n if (\"aaa\".split(/a/).length === 0) {\n this.$split = function(text) {\n return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n };\n } else {\n this.$split = function(text) {\n return text.split(/\\r\\n|\\r|\\n/);\n };\n }\n\n\n this.$detectNewLine = function(text) {\n var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n this.$autoNewLine = match ? match[1] : \"\\n\";\n this._signal(\"changeNewLineMode\");\n };\n this.getNewLineCharacter = function() {\n switch (this.$newLineMode) {\n case \"windows\":\n return \"\\r\\n\";\n case \"unix\":\n return \"\\n\";\n default:\n return this.$autoNewLine || \"\\n\";\n }\n };\n\n this.$autoNewLine = \"\";\n this.$newLineMode = \"auto\";\n this.setNewLineMode = function(newLineMode) {\n if (this.$newLineMode === newLineMode)\n return;\n\n this.$newLineMode = newLineMode;\n this._signal(\"changeNewLineMode\");\n };\n this.getNewLineMode = function() {\n return this.$newLineMode;\n };\n this.isNewLine = function(text) {\n return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n };\n this.getLine = function(row) {\n return this.$lines[row] || \"\";\n };\n this.getLines = function(firstRow, lastRow) {\n return this.$lines.slice(firstRow, lastRow + 1);\n };\n this.getAllLines = function() {\n return this.getLines(0, this.getLength());\n };\n this.getLength = function() {\n return this.$lines.length;\n };\n this.getTextRange = function(range) {\n return this.getLinesForRange(range).join(this.getNewLineCharacter());\n };\n this.getLinesForRange = function(range) {\n var lines;\n if (range.start.row === range.end.row) {\n lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n } else {\n lines = this.getLines(range.start.row, range.end.row);\n lines[0] = (lines[0] || \"\").substring(range.start.column);\n var l = lines.length - 1;\n if (range.end.row - range.start.row == l)\n lines[l] = lines[l].substring(0, range.end.column);\n }\n return lines;\n };\n this.insertLines = function(row, lines) {\n console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n return this.insertFullLines(row, lines);\n };\n this.removeLines = function(firstRow, lastRow) {\n console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n return this.removeFullLines(firstRow, lastRow);\n };\n this.insertNewLine = function(position) {\n console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n return this.insertMergedLines(position, [\"\", \"\"]);\n };\n this.insert = function(position, text) {\n if (this.getLength() <= 1)\n this.$detectNewLine(text);\n \n return this.insertMergedLines(position, this.$split(text));\n };\n this.insertInLine = function(position, text) {\n var start = this.clippedPos(position.row, position.column);\n var end = this.pos(position.row, position.column + text.length);\n \n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: [text]\n }, true);\n \n return this.clonePos(end);\n };\n \n this.clippedPos = function(row, column) {\n var length = this.getLength();\n if (row === undefined) {\n row = length;\n } else if (row < 0) {\n row = 0;\n } else if (row >= length) {\n row = length - 1;\n column = undefined;\n }\n var line = this.getLine(row);\n if (column == undefined)\n column = line.length;\n column = Math.min(Math.max(column, 0), line.length);\n return {row: row, column: column};\n };\n \n this.clonePos = function(pos) {\n return {row: pos.row, column: pos.column};\n };\n \n this.pos = function(row, column) {\n return {row: row, column: column};\n };\n \n this.$clipPosition = function(position) {\n var length = this.getLength();\n if (position.row >= length) {\n position.row = Math.max(0, length - 1);\n position.column = this.getLine(length - 1).length;\n } else {\n position.row = Math.max(0, position.row);\n position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n }\n return position;\n };\n this.insertFullLines = function(row, lines) {\n row = Math.min(Math.max(row, 0), this.getLength());\n var column = 0;\n if (row < this.getLength()) {\n lines = lines.concat([\"\"]);\n column = 0;\n } else {\n lines = [\"\"].concat(lines);\n row--;\n column = this.$lines[row].length;\n }\n this.insertMergedLines({row: row, column: column}, lines);\n }; \n this.insertMergedLines = function(position, lines) {\n var start = this.clippedPos(position.row, position.column);\n var end = {\n row: start.row + lines.length - 1,\n column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n };\n \n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: lines\n });\n \n return this.clonePos(end);\n };\n this.remove = function(range) {\n var start = this.clippedPos(range.start.row, range.start.column);\n var end = this.clippedPos(range.end.row, range.end.column);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({start: start, end: end})\n });\n return this.clonePos(start);\n };\n this.removeInLine = function(row, startColumn, endColumn) {\n var start = this.clippedPos(row, startColumn);\n var end = this.clippedPos(row, endColumn);\n \n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({start: start, end: end})\n }, true);\n \n return this.clonePos(start);\n };\n this.removeFullLines = function(firstRow, lastRow) {\n firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n var deleteLastNewLine = lastRow < this.getLength() - 1;\n var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow );\n var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 );\n var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow );\n var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length ); \n var range = new Range(startRow, startCol, endRow, endCol);\n var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n \n this.applyDelta({\n start: range.start,\n end: range.end,\n action: \"remove\",\n lines: this.getLinesForRange(range)\n });\n return deletedLines;\n };\n this.removeNewLine = function(row) {\n if (row < this.getLength() - 1 && row >= 0) {\n this.applyDelta({\n start: this.pos(row, this.getLine(row).length),\n end: this.pos(row + 1, 0),\n action: \"remove\",\n lines: [\"\", \"\"]\n });\n }\n };\n this.replace = function(range, text) {\n if (!(range instanceof Range))\n range = Range.fromPoints(range.start, range.end);\n if (text.length === 0 && range.isEmpty())\n return range.start;\n if (text == this.getTextRange(range))\n return range.end;\n\n this.remove(range);\n var end;\n if (text) {\n end = this.insert(range.start, text);\n }\n else {\n end = range.start;\n }\n \n return end;\n };\n this.applyDeltas = function(deltas) {\n for (var i=0; i<deltas.length; i++) {\n this.applyDelta(deltas[i]);\n }\n };\n this.revertDeltas = function(deltas) {\n for (var i=deltas.length-1; i>=0; i--) {\n this.revertDelta(deltas[i]);\n }\n };\n this.applyDelta = function(delta, doNotValidate) {\n var isInsert = delta.action == \"insert\";\n if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n : !Range.comparePoints(delta.start, delta.end)) {\n return;\n }\n \n if (isInsert && delta.lines.length > 20000) {\n this.$splitAndapplyLargeDelta(delta, 20000);\n }\n else {\n applyDelta(this.$lines, delta, doNotValidate);\n this._signal(\"change\", delta);\n }\n };\n \n this.$safeApplyDelta = function(delta) {\n var docLength = this.$lines.length;\n if (\n delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength\n || delta.action == \"insert\" && delta.start.row <= docLength\n ) {\n this.applyDelta(delta);\n }\n };\n \n this.$splitAndapplyLargeDelta = function(delta, MAX) {\n var lines = delta.lines;\n var l = lines.length - MAX + 1;\n var row = delta.start.row; \n var column = delta.start.column;\n for (var from = 0, to = 0; from < l; from = to) {\n to += MAX - 1;\n var chunk = lines.slice(from, to);\n chunk.push(\"\");\n this.applyDelta({\n start: this.pos(row + from, column),\n end: this.pos(row + to, column = 0),\n action: delta.action,\n lines: chunk\n }, true);\n }\n delta.lines = lines.slice(from);\n delta.start.row = row + from;\n delta.start.column = column;\n this.applyDelta(delta, true);\n };\n this.revertDelta = function(delta) {\n this.$safeApplyDelta({\n start: this.clonePos(delta.start),\n end: this.clonePos(delta.end),\n action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n lines: delta.lines.slice()\n });\n };\n this.indexToPosition = function(index, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n for (var i = startRow || 0, l = lines.length; i < l; i++) {\n index -= lines[i].length + newlineLength;\n if (index < 0)\n return {row: i, column: index + lines[i].length + newlineLength};\n }\n return {row: l-1, column: index + lines[l-1].length + newlineLength};\n };\n this.positionToIndex = function(pos, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n var index = 0;\n var row = Math.min(pos.row, lines.length);\n for (var i = startRow || 0; i < row; ++i)\n index += lines[i].length + newlineLength;\n\n return index + pos.column;\n };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\nace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar BackgroundTokenizer = function(tokenizer, editor) {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.tokenizer = tokenizer;\n\n var self = this;\n\n this.$worker = function() {\n if (!self.running) { return; }\n\n var workerStart = new Date();\n var currentLine = self.currentLine;\n var endLine = -1;\n var doc = self.doc;\n\n var startLine = currentLine;\n while (self.lines[currentLine])\n currentLine++;\n \n var len = doc.getLength();\n var processedLines = 0;\n self.running = false;\n while (currentLine < len) {\n self.$tokenizeRow(currentLine);\n endLine = currentLine;\n do {\n currentLine++;\n } while (self.lines[currentLine]);\n processedLines ++;\n if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) {\n self.running = setTimeout(self.$worker, 20);\n break;\n }\n }\n self.currentLine = currentLine;\n \n if (endLine == -1)\n endLine = currentLine;\n \n if (startLine <= endLine)\n self.fireUpdateEvent(startLine, endLine);\n };\n};\n\n(function(){\n\n oop.implement(this, EventEmitter);\n this.setTokenizer = function(tokenizer) {\n this.tokenizer = tokenizer;\n this.lines = [];\n this.states = [];\n\n this.start(0);\n };\n this.setDocument = function(doc) {\n this.doc = doc;\n this.lines = [];\n this.states = [];\n\n this.stop();\n };\n this.fireUpdateEvent = function(firstRow, lastRow) {\n var data = {\n first: firstRow,\n last: lastRow\n };\n this._signal(\"update\", {data: data});\n };\n this.start = function(startRow) {\n this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\n this.lines.splice(this.currentLine, this.lines.length);\n this.states.splice(this.currentLine, this.states.length);\n\n this.stop();\n this.running = setTimeout(this.$worker, 700);\n };\n \n this.scheduleStart = function() {\n if (!this.running)\n this.running = setTimeout(this.$worker, 700);\n };\n\n this.$updateOnChange = function(delta) {\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n\n if (len === 0) {\n this.lines[startRow] = null;\n } else if (delta.action == \"remove\") {\n this.lines.splice(startRow, len + 1, null);\n this.states.splice(startRow, len + 1, null);\n } else {\n var args = Array(len + 1);\n args.unshift(startRow, 1);\n this.lines.splice.apply(this.lines, args);\n this.states.splice.apply(this.states, args);\n }\n\n this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n\n this.stop();\n };\n this.stop = function() {\n if (this.running)\n clearTimeout(this.running);\n this.running = false;\n };\n this.getTokens = function(row) {\n return this.lines[row] || this.$tokenizeRow(row);\n };\n this.getState = function(row) {\n if (this.currentLine == row)\n this.$tokenizeRow(row);\n return this.states[row] || \"start\";\n };\n\n this.$tokenizeRow = function(row) {\n var line = this.doc.getLine(row);\n var state = this.states[row - 1];\n\n var data = this.tokenizer.getLineTokens(line, state, row);\n\n if (this.states[row] + \"\" !== data.state + \"\") {\n this.states[row] = data.state;\n this.lines[row + 1] = null;\n if (this.currentLine > row + 1)\n this.currentLine = row + 1;\n } else if (this.currentLine == row) {\n this.currentLine = row + 1;\n }\n\n return this.lines[row] = data.tokens;\n };\n\n}).call(BackgroundTokenizer.prototype);\n\nexports.BackgroundTokenizer = BackgroundTokenizer;\n});\n\nace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\n\nvar SearchHighlight = function(regExp, clazz, type) {\n this.setRegexp(regExp);\n this.clazz = clazz;\n this.type = type || \"text\";\n};\n\n(function() {\n this.MAX_RANGES = 500;\n \n this.setRegexp = function(regExp) {\n if (this.regExp+\"\" == regExp+\"\")\n return;\n this.regExp = regExp;\n this.cache = [];\n };\n\n this.update = function(html, markerLayer, session, config) {\n if (!this.regExp)\n return;\n var start = config.firstRow, end = config.lastRow;\n\n for (var i = start; i <= end; i++) {\n var ranges = this.cache[i];\n if (ranges == null) {\n ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\n if (ranges.length > this.MAX_RANGES)\n ranges = ranges.slice(0, this.MAX_RANGES);\n ranges = ranges.map(function(match) {\n return new Range(i, match.offset, i, match.offset + match.length);\n });\n this.cache[i] = ranges.length ? ranges : \"\";\n }\n\n for (var j = ranges.length; j --; ) {\n markerLayer.drawSingleLineMarker(\n html, ranges[j].toScreenRange(session), this.clazz, config);\n }\n }\n };\n\n}).call(SearchHighlight.prototype);\n\nexports.SearchHighlight = SearchHighlight;\n});\n\nace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nfunction FoldLine(foldData, folds) {\n this.foldData = foldData;\n if (Array.isArray(folds)) {\n this.folds = folds;\n } else {\n folds = this.folds = [ folds ];\n }\n\n var last = folds[folds.length - 1];\n this.range = new Range(folds[0].start.row, folds[0].start.column,\n last.end.row, last.end.column);\n this.start = this.range.start;\n this.end = this.range.end;\n\n this.folds.forEach(function(fold) {\n fold.setFoldLine(this);\n }, this);\n}\n\n(function() {\n this.shiftRow = function(shift) {\n this.start.row += shift;\n this.end.row += shift;\n this.folds.forEach(function(fold) {\n fold.start.row += shift;\n fold.end.row += shift;\n });\n };\n\n this.addFold = function(fold) {\n if (fold.sameRow) {\n if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n }\n this.folds.push(fold);\n this.folds.sort(function(a, b) {\n return -a.range.compareEnd(b.start.row, b.start.column);\n });\n if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n } else if (fold.start.row == this.end.row) {\n this.folds.push(fold);\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n } else if (fold.end.row == this.start.row) {\n this.folds.unshift(fold);\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n } else {\n throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n }\n fold.foldLine = this;\n };\n\n this.containsRow = function(row) {\n return row >= this.start.row && row <= this.end.row;\n };\n\n this.walk = function(callback, endRow, endColumn) {\n var lastEnd = 0,\n folds = this.folds,\n fold,\n cmp, stop, isNewRow = true;\n\n if (endRow == null) {\n endRow = this.end.row;\n endColumn = this.end.column;\n }\n\n for (var i = 0; i < folds.length; i++) {\n fold = folds[i];\n\n cmp = fold.range.compareStart(endRow, endColumn);\n if (cmp == -1) {\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n return;\n }\n\n stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\n stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\n if (stop || cmp === 0) {\n return;\n }\n isNewRow = !fold.sameRow;\n lastEnd = fold.end.column;\n }\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n };\n\n this.getNextFoldTo = function(row, column) {\n var fold, cmp;\n for (var i = 0; i < this.folds.length; i++) {\n fold = this.folds[i];\n cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n return {\n fold: fold,\n kind: \"after\"\n };\n } else if (cmp === 0) {\n return {\n fold: fold,\n kind: \"inside\"\n };\n }\n }\n return null;\n };\n\n this.addRemoveChars = function(row, column, len) {\n var ret = this.getNextFoldTo(row, column),\n fold, folds;\n if (ret) {\n fold = ret.fold;\n if (ret.kind == \"inside\"\n && fold.start.column != column\n && fold.start.row != row)\n {\n window.console && window.console.log(row, column, fold);\n } else if (fold.start.row == row) {\n folds = this.folds;\n var i = folds.indexOf(fold);\n if (i === 0) {\n this.start.column += len;\n }\n for (i; i < folds.length; i++) {\n fold = folds[i];\n fold.start.column += len;\n if (!fold.sameRow) {\n return;\n }\n fold.end.column += len;\n }\n this.end.column += len;\n }\n }\n };\n\n this.split = function(row, column) {\n var pos = this.getNextFoldTo(row, column);\n \n if (!pos || pos.kind == \"inside\")\n return null;\n \n var fold = pos.fold;\n var folds = this.folds;\n var foldData = this.foldData;\n \n var i = folds.indexOf(fold);\n var foldBefore = folds[i - 1];\n this.end.row = foldBefore.end.row;\n this.end.column = foldBefore.end.column;\n folds = folds.splice(i, folds.length - i);\n\n var newFoldLine = new FoldLine(foldData, folds);\n foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n return newFoldLine;\n };\n\n this.merge = function(foldLineNext) {\n var folds = foldLineNext.folds;\n for (var i = 0; i < folds.length; i++) {\n this.addFold(folds[i]);\n }\n var foldData = this.foldData;\n foldData.splice(foldData.indexOf(foldLineNext), 1);\n };\n\n this.toString = function() {\n var ret = [this.range.toString() + \": [\" ];\n\n this.folds.forEach(function(fold) {\n ret.push(\" \" + fold.toString());\n });\n ret.push(\"]\");\n return ret.join(\"\\n\");\n };\n\n this.idxToPosition = function(idx) {\n var lastFoldEndColumn = 0;\n\n for (var i = 0; i < this.folds.length; i++) {\n var fold = this.folds[i];\n\n idx -= fold.start.column - lastFoldEndColumn;\n if (idx < 0) {\n return {\n row: fold.start.row,\n column: fold.start.column + idx\n };\n }\n\n idx -= fold.placeholder.length;\n if (idx < 0) {\n return fold.start;\n }\n\n lastFoldEndColumn = fold.end.column;\n }\n\n return {\n row: this.end.row,\n column: this.end.column + idx\n };\n };\n}).call(FoldLine.prototype);\n\nexports.FoldLine = FoldLine;\n});\n\nace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\nvar Range = require(\"./range\").Range;\nvar comparePoints = Range.comparePoints;\n\nvar RangeList = function() {\n this.ranges = [];\n this.$bias = 1;\n};\n\n(function() {\n this.comparePoints = comparePoints;\n\n this.pointIndex = function(pos, excludeEdges, startIndex) {\n var list = this.ranges;\n\n for (var i = startIndex || 0; i < list.length; i++) {\n var range = list[i];\n var cmpEnd = comparePoints(pos, range.end);\n if (cmpEnd > 0)\n continue;\n var cmpStart = comparePoints(pos, range.start);\n if (cmpEnd === 0)\n return excludeEdges && cmpStart !== 0 ? -i-2 : i;\n if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))\n return i;\n\n return -i-1;\n }\n return -i - 1;\n };\n\n this.add = function(range) {\n var excludeEdges = !range.isEmpty();\n var startIndex = this.pointIndex(range.start, excludeEdges);\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n\n var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n else\n endIndex++;\n return this.ranges.splice(startIndex, endIndex - startIndex, range);\n };\n\n this.addList = function(list) {\n var removed = [];\n for (var i = list.length; i--; ) {\n removed.push.apply(removed, this.add(list[i]));\n }\n return removed;\n };\n\n this.substractPoint = function(pos) {\n var i = this.pointIndex(pos);\n\n if (i >= 0)\n return this.ranges.splice(i, 1);\n };\n this.merge = function() {\n var removed = [];\n var list = this.ranges;\n \n list = list.sort(function(a, b) {\n return comparePoints(a.start, b.start);\n });\n \n var next = list[0], range;\n for (var i = 1; i < list.length; i++) {\n range = next;\n next = list[i];\n var cmp = comparePoints(range.end, next.start);\n if (cmp < 0)\n continue;\n\n if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\n continue;\n\n if (comparePoints(range.end, next.end) < 0) {\n range.end.row = next.end.row;\n range.end.column = next.end.column;\n }\n\n list.splice(i, 1);\n removed.push(next);\n next = range;\n i--;\n }\n \n this.ranges = list;\n\n return removed;\n };\n\n this.contains = function(row, column) {\n return this.pointIndex({row: row, column: column}) >= 0;\n };\n\n this.containsPoint = function(pos) {\n return this.pointIndex(pos) >= 0;\n };\n\n this.rangeAtPoint = function(pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges[i];\n };\n\n\n this.clipRows = function(startRow, endRow) {\n var list = this.ranges;\n if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)\n return [];\n\n var startIndex = this.pointIndex({row: startRow, column: 0});\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n var endIndex = this.pointIndex({row: endRow, column: 0}, startIndex);\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n\n var clipped = [];\n for (var i = startIndex; i < endIndex; i++) {\n clipped.push(list[i]);\n }\n return clipped;\n };\n\n this.removeAll = function() {\n return this.ranges.splice(0, this.ranges.length);\n };\n\n this.attach = function(session) {\n if (this.session)\n this.detach();\n\n this.session = session;\n this.onChange = this.$onChange.bind(this);\n\n this.session.on('change', this.onChange);\n };\n\n this.detach = function() {\n if (!this.session)\n return;\n this.session.removeListener('change', this.onChange);\n this.session = null;\n };\n\n this.$onChange = function(delta) {\n var start = delta.start;\n var end = delta.end;\n var startRow = start.row;\n var endRow = end.row;\n var ranges = this.ranges;\n for (var i = 0, n = ranges.length; i < n; i++) {\n var r = ranges[i];\n if (r.end.row >= startRow)\n break;\n }\n \n if (delta.action == \"insert\") {\n var lineDif = endRow - startRow;\n var colDiff = -start.column + end.column;\n for (; i < n; i++) {\n var r = ranges[i];\n if (r.start.row > startRow)\n break;\n \n if (r.start.row == startRow && r.start.column >= start.column) {\n if (r.start.column == start.column && this.$bias <= 0) {\n } else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n if (r.end.row == startRow && r.end.column >= start.column) {\n if (r.end.column == start.column && this.$bias < 0) {\n continue;\n }\n if (r.end.column == start.column && colDiff > 0 && i < n - 1) {\n if (r.end.column > r.start.column && r.end.column == ranges[i+1].start.column)\n r.end.column -= colDiff;\n }\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n } else {\n var lineDif = startRow - endRow;\n var colDiff = start.column - end.column;\n for (; i < n; i++) {\n var r = ranges[i];\n \n if (r.start.row > endRow)\n break;\n \n if (r.end.row < endRow\n && (\n startRow < r.end.row \n || startRow == r.end.row && start.column < r.end.column\n )\n ) {\n r.end.row = startRow;\n r.end.column = start.column;\n }\n else if (r.end.row == endRow) {\n if (r.end.column <= end.column) {\n if (lineDif || r.end.column > start.column) {\n r.end.column = start.column;\n r.end.row = start.row;\n }\n }\n else {\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n else if (r.end.row > endRow) {\n r.end.row += lineDif;\n }\n \n if (r.start.row < endRow\n && (\n startRow < r.start.row \n || startRow == r.start.row && start.column < r.start.column\n )\n ) {\n r.start.row = startRow;\n r.start.column = start.column;\n }\n else if (r.start.row == endRow) {\n if (r.start.column <= end.column) {\n if (lineDif || r.start.column > start.column) {\n r.start.column = start.column;\n r.start.row = start.row;\n }\n }\n else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n else if (r.start.row > endRow) {\n r.start.row += lineDif;\n }\n }\n }\n\n if (lineDif != 0 && i < n) {\n for (; i < n; i++) {\n var r = ranges[i];\n r.start.row += lineDif;\n r.end.row += lineDif;\n }\n }\n };\n\n}).call(RangeList.prototype);\n\nexports.RangeList = RangeList;\n});\n\nace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/lib/oop\"], function(require, exports, module) {\n\"use strict\";\n\nvar RangeList = require(\"../range_list\").RangeList;\nvar oop = require(\"../lib/oop\");\nvar Fold = exports.Fold = function(range, placeholder) {\n this.foldLine = null;\n this.placeholder = placeholder;\n this.range = range;\n this.start = range.start;\n this.end = range.end;\n\n this.sameRow = range.start.row == range.end.row;\n this.subFolds = this.ranges = [];\n};\n\noop.inherits(Fold, RangeList);\n\n(function() {\n\n this.toString = function() {\n return '\"' + this.placeholder + '\" ' + this.range.toString();\n };\n\n this.setFoldLine = function(foldLine) {\n this.foldLine = foldLine;\n this.subFolds.forEach(function(fold) {\n fold.setFoldLine(foldLine);\n });\n };\n\n this.clone = function() {\n var range = this.range.clone();\n var fold = new Fold(range, this.placeholder);\n this.subFolds.forEach(function(subFold) {\n fold.subFolds.push(subFold.clone());\n });\n fold.collapseChildren = this.collapseChildren;\n return fold;\n };\n\n this.addSubFold = function(fold) {\n if (this.range.isEqual(fold))\n return;\n consumeRange(fold, this.start);\n\n var row = fold.start.row, column = fold.start.column;\n for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\n cmp = this.subFolds[i].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n var afterStart = this.subFolds[i];\n var firstConsumed = 0;\n\n if (cmp == 0) {\n if (afterStart.range.containsRange(fold))\n return afterStart.addSubFold(fold);\n else\n firstConsumed = 1;\n }\n var row = fold.range.end.row, column = fold.range.end.column;\n for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\n cmp = this.subFolds[j].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n if (cmp == 0) j++;\n var consumedFolds = this.subFolds.splice(i, j - i, fold);\n var last = cmp == 0 ? consumedFolds.length - 1 : consumedFolds.length;\n for (var k = firstConsumed; k < last; k++) {\n fold.addSubFold(consumedFolds[k]);\n }\n fold.setFoldLine(this.foldLine);\n\n return fold;\n };\n \n this.restoreRange = function(range) {\n return restoreRange(range, this.start);\n };\n\n}).call(Fold.prototype);\n\nfunction consumePoint(point, anchor) {\n point.row -= anchor.row;\n if (point.row == 0)\n point.column -= anchor.column;\n}\nfunction consumeRange(range, anchor) {\n consumePoint(range.start, anchor);\n consumePoint(range.end, anchor);\n}\nfunction restorePoint(point, anchor) {\n if (point.row == 0)\n point.column += anchor.column;\n point.row += anchor.row;\n}\nfunction restoreRange(range, anchor) {\n restorePoint(range.start, anchor);\n restorePoint(range.end, anchor);\n}\n\n});\n\nace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar FoldLine = require(\"./fold_line\").FoldLine;\nvar Fold = require(\"./fold\").Fold;\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nfunction Folding() {\n this.getFoldAt = function(row, column, side) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine)\n return null;\n\n var folds = foldLine.folds;\n for (var i = 0; i < folds.length; i++) {\n var range = folds[i].range;\n if (range.contains(row, column)) {\n if (side == 1 && range.isEnd(row, column) && !range.isEmpty()) {\n continue;\n } else if (side == -1 && range.isStart(row, column) && !range.isEmpty()) {\n continue;\n }\n return folds[i];\n }\n }\n };\n this.getFoldsInRange = function(range) {\n var start = range.start;\n var end = range.end;\n var foldLines = this.$foldData;\n var foundFolds = [];\n\n start.column += 1;\n end.column -= 1;\n\n for (var i = 0; i < foldLines.length; i++) {\n var cmp = foldLines[i].range.compareRange(range);\n if (cmp == 2) {\n continue;\n }\n else if (cmp == -2) {\n break;\n }\n\n var folds = foldLines[i].folds;\n for (var j = 0; j < folds.length; j++) {\n var fold = folds[j];\n cmp = fold.range.compareRange(range);\n if (cmp == -2) {\n break;\n } else if (cmp == 2) {\n continue;\n } else\n if (cmp == 42) {\n break;\n }\n foundFolds.push(fold);\n }\n }\n start.column -= 1;\n end.column += 1;\n\n return foundFolds;\n };\n\n this.getFoldsInRangeList = function(ranges) {\n if (Array.isArray(ranges)) {\n var folds = [];\n ranges.forEach(function(range) {\n folds = folds.concat(this.getFoldsInRange(range));\n }, this);\n } else {\n var folds = this.getFoldsInRange(ranges);\n }\n return folds;\n };\n this.getAllFolds = function() {\n var folds = [];\n var foldLines = this.$foldData;\n \n for (var i = 0; i < foldLines.length; i++)\n for (var j = 0; j < foldLines[i].folds.length; j++)\n folds.push(foldLines[i].folds[j]);\n\n return folds;\n };\n this.getFoldStringAt = function(row, column, trim, foldLine) {\n foldLine = foldLine || this.getFoldLine(row);\n if (!foldLine)\n return null;\n\n var lastFold = {\n end: { column: 0 }\n };\n var str, fold;\n for (var i = 0; i < foldLine.folds.length; i++) {\n fold = foldLine.folds[i];\n var cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n str = this\n .getLine(fold.start.row)\n .substring(lastFold.end.column, fold.start.column);\n break;\n }\n else if (cmp === 0) {\n return null;\n }\n lastFold = fold;\n }\n if (!str)\n str = this.getLine(fold.start.row).substring(lastFold.end.column);\n\n if (trim == -1)\n return str.substring(0, column - lastFold.end.column);\n else if (trim == 1)\n return str.substring(column - lastFold.end.column);\n else\n return str;\n };\n\n this.getFoldLine = function(docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\n return foldLine;\n } else if (foldLine.end.row > docRow) {\n return null;\n }\n }\n return null;\n };\n this.getNextFoldLine = function(docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.end.row >= docRow) {\n return foldLine;\n }\n }\n return null;\n };\n\n this.getFoldedRowCount = function(first, last) {\n var foldData = this.$foldData, rowCount = last-first+1;\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i],\n end = foldLine.end.row,\n start = foldLine.start.row;\n if (end >= last) {\n if (start < last) {\n if (start >= first)\n rowCount -= last-start;\n else\n rowCount = 0; // in one fold\n }\n break;\n } else if (end >= first){\n if (start >= first) // fold inside range\n rowCount -= end-start;\n else\n rowCount -= end-first+1;\n }\n }\n return rowCount;\n };\n\n this.$addFoldLine = function(foldLine) {\n this.$foldData.push(foldLine);\n this.$foldData.sort(function(a, b) {\n return a.start.row - b.start.row;\n });\n return foldLine;\n };\n this.addFold = function(placeholder, range) {\n var foldData = this.$foldData;\n var added = false;\n var fold;\n \n if (placeholder instanceof Fold)\n fold = placeholder;\n else {\n fold = new Fold(range, placeholder);\n fold.collapseChildren = range.collapseChildren;\n }\n this.$clipRangeToDocument(fold.range);\n\n var startRow = fold.start.row;\n var startColumn = fold.start.column;\n var endRow = fold.end.row;\n var endColumn = fold.end.column;\n\n var startFold = this.getFoldAt(startRow, startColumn, 1);\n var endFold = this.getFoldAt(endRow, endColumn, -1);\n if (startFold && endFold == startFold)\n return startFold.addSubFold(fold);\n\n if (startFold && !startFold.range.isStart(startRow, startColumn))\n this.removeFold(startFold);\n \n if (endFold && !endFold.range.isEnd(endRow, endColumn))\n this.removeFold(endFold);\n var folds = this.getFoldsInRange(fold.range);\n if (folds.length > 0) {\n this.removeFolds(folds);\n if (!fold.collapseChildren) {\n folds.forEach(function(subFold) {\n fold.addSubFold(subFold);\n });\n }\n }\n\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (endRow == foldLine.start.row) {\n foldLine.addFold(fold);\n added = true;\n break;\n } else if (startRow == foldLine.end.row) {\n foldLine.addFold(fold);\n added = true;\n if (!fold.sameRow) {\n var foldLineNext = foldData[i + 1];\n if (foldLineNext && foldLineNext.start.row == endRow) {\n foldLine.merge(foldLineNext);\n break;\n }\n }\n break;\n } else if (endRow <= foldLine.start.row) {\n break;\n }\n }\n\n if (!added)\n foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n\n if (this.$useWrapMode)\n this.$updateWrapData(foldLine.start.row, foldLine.start.row);\n else\n this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"add\" });\n\n return fold;\n };\n\n this.addFolds = function(folds) {\n folds.forEach(function(fold) {\n this.addFold(fold);\n }, this);\n };\n\n this.removeFold = function(fold) {\n var foldLine = fold.foldLine;\n var startRow = foldLine.start.row;\n var endRow = foldLine.end.row;\n\n var foldLines = this.$foldData;\n var folds = foldLine.folds;\n if (folds.length == 1) {\n foldLines.splice(foldLines.indexOf(foldLine), 1);\n } else\n if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\n folds.pop();\n foldLine.end.row = folds[folds.length - 1].end.row;\n foldLine.end.column = folds[folds.length - 1].end.column;\n } else\n if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\n folds.shift();\n foldLine.start.row = folds[0].start.row;\n foldLine.start.column = folds[0].start.column;\n } else\n if (fold.sameRow) {\n folds.splice(folds.indexOf(fold), 1);\n } else\n {\n var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\n folds = newFoldLine.folds;\n folds.shift();\n newFoldLine.start.row = folds[0].start.row;\n newFoldLine.start.column = folds[0].start.column;\n }\n\n if (!this.$updating) {\n if (this.$useWrapMode)\n this.$updateWrapData(startRow, endRow);\n else\n this.$updateRowLengthCache(startRow, endRow);\n }\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"remove\" });\n };\n\n this.removeFolds = function(folds) {\n var cloneFolds = [];\n for (var i = 0; i < folds.length; i++) {\n cloneFolds.push(folds[i]);\n }\n\n cloneFolds.forEach(function(fold) {\n this.removeFold(fold);\n }, this);\n this.$modified = true;\n };\n\n this.expandFold = function(fold) {\n this.removeFold(fold);\n fold.subFolds.forEach(function(subFold) {\n fold.restoreRange(subFold);\n this.addFold(subFold);\n }, this);\n if (fold.collapseChildren > 0) {\n this.foldAll(fold.start.row+1, fold.end.row, fold.collapseChildren-1);\n }\n fold.subFolds = [];\n };\n\n this.expandFolds = function(folds) {\n folds.forEach(function(fold) {\n this.expandFold(fold);\n }, this);\n };\n\n this.unfold = function(location, expandInner) {\n var range, folds;\n if (location == null) {\n range = new Range(0, 0, this.getLength(), 0);\n if (expandInner == null) expandInner = true;\n } else if (typeof location == \"number\") {\n range = new Range(location, 0, location, this.getLine(location).length);\n } else if (\"row\" in location) {\n range = Range.fromPoints(location, location);\n } else if (Array.isArray(location)) {\n folds = [];\n location.forEach(function(range) {\n folds = folds.concat(this.unfold(range));\n }, this);\n return folds;\n } else {\n range = location;\n }\n \n folds = this.getFoldsInRangeList(range);\n var outermostFolds = folds;\n while (\n folds.length == 1\n && Range.comparePoints(folds[0].start, range.start) < 0 \n && Range.comparePoints(folds[0].end, range.end) > 0\n ) {\n this.expandFolds(folds);\n folds = this.getFoldsInRangeList(range);\n }\n \n if (expandInner != false) {\n this.removeFolds(folds);\n } else {\n this.expandFolds(folds);\n }\n if (outermostFolds.length)\n return outermostFolds;\n };\n this.isRowFolded = function(docRow, startFoldRow) {\n return !!this.getFoldLine(docRow, startFoldRow);\n };\n\n this.getRowFoldEnd = function(docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.end.row : docRow;\n };\n\n this.getRowFoldStart = function(docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.start.row : docRow;\n };\n\n this.getFoldDisplayLine = function(foldLine, endRow, endColumn, startRow, startColumn) {\n if (startRow == null)\n startRow = foldLine.start.row;\n if (startColumn == null)\n startColumn = 0;\n if (endRow == null)\n endRow = foldLine.end.row;\n if (endColumn == null)\n endColumn = this.getLine(endRow).length;\n var doc = this.doc;\n var textLine = \"\";\n\n foldLine.walk(function(placeholder, row, column, lastColumn) {\n if (row < startRow)\n return;\n if (row == startRow) {\n if (column < startColumn)\n return;\n lastColumn = Math.max(startColumn, lastColumn);\n }\n\n if (placeholder != null) {\n textLine += placeholder;\n } else {\n textLine += doc.getLine(row).substring(lastColumn, column);\n }\n }, endRow, endColumn);\n return textLine;\n };\n\n this.getDisplayLine = function(row, endColumn, startRow, startColumn) {\n var foldLine = this.getFoldLine(row);\n\n if (!foldLine) {\n var line;\n line = this.doc.getLine(row);\n return line.substring(startColumn || 0, endColumn || line.length);\n } else {\n return this.getFoldDisplayLine(\n foldLine, row, endColumn, startRow, startColumn);\n }\n };\n\n this.$cloneFoldData = function() {\n var fd = [];\n fd = this.$foldData.map(function(foldLine) {\n var folds = foldLine.folds.map(function(fold) {\n return fold.clone();\n });\n return new FoldLine(fd, folds);\n });\n\n return fd;\n };\n\n this.toggleFold = function(tryToUnfold) {\n var selection = this.selection;\n var range = selection.getRange();\n var fold;\n var bracketPos;\n\n if (range.isEmpty()) {\n var cursor = range.start;\n fold = this.getFoldAt(cursor.row, cursor.column);\n\n if (fold) {\n this.expandFold(fold);\n return;\n } else if (bracketPos = this.findMatchingBracket(cursor)) {\n if (range.comparePoint(bracketPos) == 1) {\n range.end = bracketPos;\n } else {\n range.start = bracketPos;\n range.start.column++;\n range.end.column--;\n }\n } else if (bracketPos = this.findMatchingBracket({row: cursor.row, column: cursor.column + 1})) {\n if (range.comparePoint(bracketPos) == 1)\n range.end = bracketPos;\n else\n range.start = bracketPos;\n\n range.start.column++;\n } else {\n range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n }\n } else {\n var folds = this.getFoldsInRange(range);\n if (tryToUnfold && folds.length) {\n this.expandFolds(folds);\n return;\n } else if (folds.length == 1 ) {\n fold = folds[0];\n }\n }\n\n if (!fold)\n fold = this.getFoldAt(range.start.row, range.start.column);\n\n if (fold && fold.range.toString() == range.toString()) {\n this.expandFold(fold);\n return;\n }\n\n var placeholder = \"...\";\n if (!range.isMultiLine()) {\n placeholder = this.getTextRange(range);\n if (placeholder.length < 4)\n return;\n placeholder = placeholder.trim().substring(0, 2) + \"..\";\n }\n\n this.addFold(placeholder, range);\n };\n\n this.getCommentFoldRange = function(row, column, dir) {\n var iterator = new TokenIterator(this, row, column);\n var token = iterator.getCurrentToken();\n var type = token && token.type;\n if (token && /^comment|string/.test(type)) {\n type = type.match(/comment|string/)[0];\n if (type == \"comment\")\n type += \"|doc-start\";\n var re = new RegExp(type);\n var range = new Range();\n if (dir != 1) {\n do {\n token = iterator.stepBackward();\n } while (token && re.test(token.type));\n iterator.stepForward();\n }\n \n range.start.row = iterator.getCurrentTokenRow();\n range.start.column = iterator.getCurrentTokenColumn() + 2;\n\n iterator = new TokenIterator(this, row, column);\n \n if (dir != -1) {\n var lastRow = -1;\n do {\n token = iterator.stepForward();\n if (lastRow == -1) {\n var state = this.getState(iterator.$row);\n if (!re.test(state))\n lastRow = iterator.$row;\n } else if (iterator.$row > lastRow) {\n break;\n }\n } while (token && re.test(token.type));\n token = iterator.stepBackward();\n } else\n token = iterator.getCurrentToken();\n\n range.end.row = iterator.getCurrentTokenRow();\n range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2;\n return range;\n }\n };\n\n this.foldAll = function(startRow, endRow, depth, test) {\n if (depth == undefined)\n depth = 100000; // JSON.stringify doesn't hanle Infinity\n var foldWidgets = this.foldWidgets;\n if (!foldWidgets)\n return; // mode doesn't support folding\n endRow = endRow || this.getLength();\n startRow = startRow || 0;\n for (var row = startRow; row < endRow; row++) {\n if (foldWidgets[row] == null)\n foldWidgets[row] = this.getFoldWidget(row);\n if (foldWidgets[row] != \"start\")\n continue;\n \n if (test && !test(row)) continue;\n\n var range = this.getFoldWidgetRange(row);\n if (range && range.isMultiLine()\n && range.end.row <= endRow\n && range.start.row >= startRow\n ) {\n row = range.end.row;\n range.collapseChildren = depth;\n this.addFold(\"...\", range);\n }\n }\n };\n \n this.foldToLevel = function(level) {\n this.foldAll();\n while (level-- > 0)\n this.unfold(null, false);\n };\n \n this.foldAllComments = function() {\n var session = this;\n this.foldAll(null, null, null, function(row) {\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token.type == \"text\" && /^\\s+$/.test(token.value))\n continue;\n if (/comment/.test(token.type))\n return true;\n return false;\n }\n });\n };\n this.$foldStyles = {\n \"manual\": 1,\n \"markbegin\": 1,\n \"markbeginend\": 1\n };\n this.$foldStyle = \"markbegin\";\n this.setFoldStyle = function(style) {\n if (!this.$foldStyles[style])\n throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n \n if (this.$foldStyle == style)\n return;\n\n this.$foldStyle = style;\n \n if (style == \"manual\")\n this.unfold();\n var mode = this.$foldMode;\n this.$setFolding(null);\n this.$setFolding(mode);\n };\n\n this.$setFolding = function(foldMode) {\n if (this.$foldMode == foldMode)\n return;\n \n this.$foldMode = foldMode;\n \n this.off('change', this.$updateFoldWidgets);\n this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n this._signal(\"changeAnnotation\");\n \n if (!foldMode || this.$foldStyle == \"manual\") {\n this.foldWidgets = null;\n return;\n }\n \n this.foldWidgets = [];\n this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\n this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\n \n this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\n this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\n this.on('change', this.$updateFoldWidgets);\n this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n };\n\n this.getParentFoldRangeData = function (row, ignoreCurrent) {\n var fw = this.foldWidgets;\n if (!fw || (ignoreCurrent && fw[row]))\n return {};\n\n var i = row - 1, firstRange;\n while (i >= 0) {\n var c = fw[i];\n if (c == null)\n c = fw[i] = this.getFoldWidget(i);\n\n if (c == \"start\") {\n var range = this.getFoldWidgetRange(i);\n if (!firstRange)\n firstRange = range;\n if (range && range.end.row >= row)\n break;\n }\n i--;\n }\n\n return {\n range: i !== -1 && range,\n firstRange: firstRange\n };\n };\n\n this.onFoldWidgetClick = function(row, e) {\n e = e.domEvent;\n var options = {\n children: e.shiftKey,\n all: e.ctrlKey || e.metaKey,\n siblings: e.altKey\n };\n \n var range = this.$toggleFoldWidget(row, options);\n if (!range) {\n var el = (e.target || e.srcElement);\n if (el && /ace_fold-widget/.test(el.className))\n el.className += \" ace_invalid\";\n }\n };\n \n this.$toggleFoldWidget = function(row, options) {\n if (!this.getFoldWidget)\n return;\n var type = this.getFoldWidget(row);\n var line = this.getLine(row);\n\n var dir = type === \"end\" ? -1 : 1;\n var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n\n if (fold) {\n if (options.children || options.all)\n this.removeFold(fold);\n else\n this.expandFold(fold);\n return fold;\n }\n\n var range = this.getFoldWidgetRange(row, true);\n if (range && !range.isMultiLine()) {\n fold = this.getFoldAt(range.start.row, range.start.column, 1);\n if (fold && range.isEqual(fold.range)) {\n this.removeFold(fold);\n return fold;\n }\n }\n \n if (options.siblings) {\n var data = this.getParentFoldRangeData(row);\n if (data.range) {\n var startRow = data.range.start.row + 1;\n var endRow = data.range.end.row;\n }\n this.foldAll(startRow, endRow, options.all ? 10000 : 0);\n } else if (options.children) {\n endRow = range ? range.end.row : this.getLength();\n this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n } else if (range) {\n if (options.all) \n range.collapseChildren = 10000;\n this.addFold(\"...\", range);\n }\n \n return range;\n };\n \n \n \n this.toggleFoldWidget = function(toggleParent) {\n var row = this.selection.getCursor().row;\n row = this.getRowFoldStart(row);\n var range = this.$toggleFoldWidget(row, {});\n \n if (range)\n return;\n var data = this.getParentFoldRangeData(row, true);\n range = data.range || data.firstRange;\n \n if (range) {\n row = range.start.row;\n var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n\n if (fold) {\n this.removeFold(fold);\n } else {\n this.addFold(\"...\", range);\n }\n }\n };\n\n this.updateFoldWidgets = function(delta) {\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n\n if (len === 0) {\n this.foldWidgets[firstRow] = null;\n } else if (delta.action == 'remove') {\n this.foldWidgets.splice(firstRow, len + 1, null);\n } else {\n var args = Array(len + 1);\n args.unshift(firstRow, 1);\n this.foldWidgets.splice.apply(this.foldWidgets, args);\n }\n };\n this.tokenizerUpdateFoldWidgets = function(e) {\n var rows = e.data;\n if (rows.first != rows.last) {\n if (this.foldWidgets.length > rows.first)\n this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n }\n };\n}\n\nexports.Folding = Folding;\n\n});\n\nace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\n\n\nfunction BracketMatch() {\n\n this.findMatchingBracket = function(position, chr) {\n if (position.column == 0) return null;\n\n var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column-1);\n if (charBeforeCursor == \"\") return null;\n\n var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match)\n return null;\n\n if (match[1])\n return this.$findClosingBracket(match[1], position);\n else\n return this.$findOpeningBracket(match[2], position);\n };\n \n this.getBracketRange = function(pos) {\n var line = this.getLine(pos.row);\n var before = true, range;\n\n var chr = line.charAt(pos.column - 1);\n var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match) {\n chr = line.charAt(pos.column);\n pos = {row: pos.row, column: pos.column + 1};\n match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n before = false;\n }\n if (!match)\n return null;\n\n if (match[1]) {\n var bracketPos = this.$findClosingBracket(match[1], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(pos, bracketPos);\n if (!before) {\n range.end.column++;\n range.start.column--;\n }\n range.cursor = range.end;\n } else {\n var bracketPos = this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(bracketPos, pos);\n if (!before) {\n range.start.column++;\n range.end.column--;\n }\n range.cursor = range.start;\n }\n \n return range;\n };\n this.getMatchingBracketRanges = function(pos) {\n var line = this.getLine(pos.row);\n\n var chr = line.charAt(pos.column - 1);\n var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match) {\n chr = line.charAt(pos.column);\n pos = {row: pos.row, column: pos.column + 1};\n match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n }\n\n if (!match)\n return null;\n\n var startRange = new Range(pos.row, pos.column - 1, pos.row, pos.column);\n var bracketPos = match[1] ? this.$findClosingBracket(match[1], pos)\n : this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return [startRange];\n var endRange = new Range(bracketPos.row, bracketPos.column, bracketPos.row, bracketPos.column + 1);\n\n return [startRange, endRange];\n };\n\n this.$brackets = {\n \")\": \"(\",\n \"(\": \")\",\n \"]\": \"[\",\n \"[\": \"]\",\n \"{\": \"}\",\n \"}\": \"{\",\n \"<\": \">\",\n \">\": \"<\"\n };\n\n this.$findOpeningBracket = function(bracket, position, typeRe) {\n var openBracket = this.$brackets[bracket];\n var depth = 1;\n\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n \n if (!typeRe){\n typeRe = new RegExp(\n \"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\n .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\n + \")+\"\n );\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n var value = token.value;\n \n while (true) {\n \n while (valueIndex >= 0) {\n var chr = value.charAt(valueIndex);\n if (chr == openBracket) {\n depth -= 1;\n if (depth == 0) {\n return {row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn()};\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex -= 1;\n }\n do {\n token = iterator.stepBackward();\n } while (token && !typeRe.test(token.type));\n\n if (token == null)\n break;\n \n value = token.value;\n valueIndex = value.length - 1;\n }\n \n return null;\n };\n\n this.$findClosingBracket = function(bracket, position, typeRe) {\n var closingBracket = this.$brackets[bracket];\n var depth = 1;\n\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n\n if (!typeRe){\n typeRe = new RegExp(\n \"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\n .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\n + \")+\"\n );\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn();\n\n while (true) {\n\n var value = token.value;\n var valueLength = value.length;\n while (valueIndex < valueLength) {\n var chr = value.charAt(valueIndex);\n if (chr == closingBracket) {\n depth -= 1;\n if (depth == 0) {\n return {row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn()};\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex += 1;\n }\n do {\n token = iterator.stepForward();\n } while (token && !typeRe.test(token.type));\n\n if (token == null)\n break;\n\n valueIndex = 0;\n }\n \n return null;\n };\n}\nexports.BracketMatch = BracketMatch;\n\n});\n\nace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/bidihandler\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar BidiHandler = require(\"./bidihandler\").BidiHandler;\nvar config = require(\"./config\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Selection = require(\"./selection\").Selection;\nvar TextMode = require(\"./mode/text\").Mode;\nvar Range = require(\"./range\").Range;\nvar Document = require(\"./document\").Document;\nvar BackgroundTokenizer = require(\"./background_tokenizer\").BackgroundTokenizer;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\n\nvar EditSession = function(text, mode) {\n this.$breakpoints = [];\n this.$decorations = [];\n this.$frontMarkers = {};\n this.$backMarkers = {};\n this.$markerId = 1;\n this.$undoSelect = true;\n\n this.$foldData = [];\n this.id = \"session\" + (++EditSession.$uid);\n this.$foldData.toString = function() {\n return this.join(\"\\n\");\n };\n this.on(\"changeFold\", this.onChangeFold.bind(this));\n this.$onChange = this.onChange.bind(this);\n\n if (typeof text != \"object\" || !text.getLine)\n text = new Document(text);\n\n this.setDocument(text);\n this.selection = new Selection(this);\n this.$bidiHandler = new BidiHandler(this);\n\n config.resetOptions(this);\n this.setMode(mode);\n config._signal(\"session\", this);\n};\n\n\nEditSession.$uid = 0;\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.setDocument = function(doc) {\n if (this.doc)\n this.doc.off(\"change\", this.$onChange);\n\n this.doc = doc;\n doc.on(\"change\", this.$onChange);\n\n if (this.bgTokenizer)\n this.bgTokenizer.setDocument(this.getDocument());\n\n this.resetCaches();\n };\n this.getDocument = function() {\n return this.doc;\n };\n this.$resetRowCache = function(docRow) {\n if (!docRow) {\n this.$docRowCache = [];\n this.$screenRowCache = [];\n return;\n }\n var l = this.$docRowCache.length;\n var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\n if (l > i) {\n this.$docRowCache.splice(i, l);\n this.$screenRowCache.splice(i, l);\n }\n };\n\n this.$getRowCacheIndex = function(cacheArray, val) {\n var low = 0;\n var hi = cacheArray.length - 1;\n\n while (low <= hi) {\n var mid = (low + hi) >> 1;\n var c = cacheArray[mid];\n\n if (val > c)\n low = mid + 1;\n else if (val < c)\n hi = mid - 1;\n else\n return mid;\n }\n\n return low -1;\n };\n\n this.resetCaches = function() {\n this.$modified = true;\n this.$wrapData = [];\n this.$rowLengthCache = [];\n this.$resetRowCache(0);\n if (this.bgTokenizer)\n this.bgTokenizer.start(0);\n };\n\n this.onChangeFold = function(e) {\n var fold = e.data;\n this.$resetRowCache(fold.start.row);\n };\n\n this.onChange = function(delta) {\n this.$modified = true;\n this.$bidiHandler.onChange(delta);\n this.$resetRowCache(delta.start.row);\n\n var removedFolds = this.$updateInternalDataOnChange(delta);\n if (!this.$fromUndo && this.$undoManager) {\n if (removedFolds && removedFolds.length) {\n this.$undoManager.add({\n action: \"removeFolds\",\n folds: removedFolds\n }, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n }\n this.$undoManager.add(delta, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n \n this.$informUndoManager.schedule();\n }\n\n this.bgTokenizer && this.bgTokenizer.$updateOnChange(delta);\n this._signal(\"change\", delta);\n };\n this.setValue = function(text) {\n this.doc.setValue(text);\n this.selection.moveTo(0, 0);\n\n this.$resetRowCache(0);\n this.setUndoManager(this.$undoManager);\n this.getUndoManager().reset();\n };\n this.getValue =\n this.toString = function() {\n return this.doc.getValue();\n };\n this.getSelection = function() {\n return this.selection;\n };\n this.getState = function(row) {\n return this.bgTokenizer.getState(row);\n };\n this.getTokens = function(row) {\n return this.bgTokenizer.getTokens(row);\n };\n this.getTokenAt = function(row, column) {\n var tokens = this.bgTokenizer.getTokens(row);\n var token, c = 0;\n if (column == null) {\n var i = tokens.length - 1;\n c = this.getLine(row).length;\n } else {\n for (var i = 0; i < tokens.length; i++) {\n c += tokens[i].value.length;\n if (c >= column)\n break;\n }\n }\n token = tokens[i];\n if (!token)\n return null;\n token.index = i;\n token.start = c - token.value.length;\n return token;\n };\n this.setUndoManager = function(undoManager) {\n this.$undoManager = undoManager;\n \n if (this.$informUndoManager)\n this.$informUndoManager.cancel();\n \n if (undoManager) {\n var self = this;\n undoManager.addSession(this);\n this.$syncInformUndoManager = function() {\n self.$informUndoManager.cancel();\n self.mergeUndoDeltas = false;\n };\n this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n } else {\n this.$syncInformUndoManager = function() {};\n }\n };\n this.markUndoGroup = function() {\n if (this.$syncInformUndoManager)\n this.$syncInformUndoManager();\n };\n \n this.$defaultUndoManager = {\n undo: function() {},\n redo: function() {},\n hasUndo: function() {},\n hasRedo: function() {},\n reset: function() {},\n add: function() {},\n addSelection: function() {},\n startNewGroup: function() {},\n addSession: function() {}\n };\n this.getUndoManager = function() {\n return this.$undoManager || this.$defaultUndoManager;\n };\n this.getTabString = function() {\n if (this.getUseSoftTabs()) {\n return lang.stringRepeat(\" \", this.getTabSize());\n } else {\n return \"\\t\";\n }\n };\n this.setUseSoftTabs = function(val) {\n this.setOption(\"useSoftTabs\", val);\n };\n this.getUseSoftTabs = function() {\n return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n };\n this.setTabSize = function(tabSize) {\n this.setOption(\"tabSize\", tabSize);\n };\n this.getTabSize = function() {\n return this.$tabSize;\n };\n this.isTabStop = function(position) {\n return this.$useSoftTabs && (position.column % this.$tabSize === 0);\n };\n this.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) {\n this.setOption(\"navigateWithinSoftTabs\", navigateWithinSoftTabs);\n };\n this.getNavigateWithinSoftTabs = function() {\n return this.$navigateWithinSoftTabs;\n };\n\n this.$overwrite = false;\n this.setOverwrite = function(overwrite) {\n this.setOption(\"overwrite\", overwrite);\n };\n this.getOverwrite = function() {\n return this.$overwrite;\n };\n this.toggleOverwrite = function() {\n this.setOverwrite(!this.$overwrite);\n };\n this.addGutterDecoration = function(row, className) {\n if (!this.$decorations[row])\n this.$decorations[row] = \"\";\n this.$decorations[row] += \" \" + className;\n this._signal(\"changeBreakpoint\", {});\n };\n this.removeGutterDecoration = function(row, className) {\n this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n this._signal(\"changeBreakpoint\", {});\n };\n this.getBreakpoints = function() {\n return this.$breakpoints;\n };\n this.setBreakpoints = function(rows) {\n this.$breakpoints = [];\n for (var i=0; i<rows.length; i++) {\n this.$breakpoints[rows[i]] = \"ace_breakpoint\";\n }\n this._signal(\"changeBreakpoint\", {});\n };\n this.clearBreakpoints = function() {\n this.$breakpoints = [];\n this._signal(\"changeBreakpoint\", {});\n };\n this.setBreakpoint = function(row, className) {\n if (className === undefined)\n className = \"ace_breakpoint\";\n if (className)\n this.$breakpoints[row] = className;\n else\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n this.clearBreakpoint = function(row) {\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n this.addMarker = function(range, clazz, type, inFront) {\n var id = this.$markerId++;\n\n var marker = {\n range : range,\n type : type || \"line\",\n renderer: typeof type == \"function\" ? type : null,\n clazz : clazz,\n inFront: !!inFront,\n id: id\n };\n\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n } else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n\n return id;\n };\n this.addDynamicMarker = function(marker, inFront) {\n if (!marker.update)\n return;\n var id = this.$markerId++;\n marker.id = id;\n marker.inFront = !!inFront;\n\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n } else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n\n return marker;\n };\n this.removeMarker = function(markerId) {\n var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];\n if (!marker)\n return;\n\n var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;\n delete (markers[markerId]);\n this._signal(marker.inFront ? \"changeFrontMarker\" : \"changeBackMarker\");\n };\n this.getMarkers = function(inFront) {\n return inFront ? this.$frontMarkers : this.$backMarkers;\n };\n\n this.highlight = function(re) {\n if (!this.$searchHighlight) {\n var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\n this.$searchHighlight = this.addDynamicMarker(highlight);\n }\n this.$searchHighlight.setRegexp(re);\n };\n this.highlightLines = function(startRow, endRow, clazz, inFront) {\n if (typeof endRow != \"number\") {\n clazz = endRow;\n endRow = startRow;\n }\n if (!clazz)\n clazz = \"ace_step\";\n\n var range = new Range(startRow, 0, endRow, Infinity);\n range.id = this.addMarker(range, clazz, \"fullLine\", inFront);\n return range;\n };\n this.setAnnotations = function(annotations) {\n this.$annotations = annotations;\n this._signal(\"changeAnnotation\", {});\n };\n this.getAnnotations = function() {\n return this.$annotations || [];\n };\n this.clearAnnotations = function() {\n this.setAnnotations([]);\n };\n this.$detectNewLine = function(text) {\n var match = text.match(/^.*?(\\r?\\n)/m);\n if (match) {\n this.$autoNewLine = match[1];\n } else {\n this.$autoNewLine = \"\\n\";\n }\n };\n this.getWordRange = function(row, column) {\n var line = this.getLine(row);\n\n var inToken = false;\n if (column > 0)\n inToken = !!line.charAt(column - 1).match(this.tokenRe);\n\n if (!inToken)\n inToken = !!line.charAt(column).match(this.tokenRe);\n\n if (inToken)\n var re = this.tokenRe;\n else if (/^\\s+$/.test(line.slice(column-1, column+1)))\n var re = /\\s/;\n else\n var re = this.nonTokenRe;\n\n var start = column;\n if (start > 0) {\n do {\n start--;\n }\n while (start >= 0 && line.charAt(start).match(re));\n start++;\n }\n\n var end = column;\n while (end < line.length && line.charAt(end).match(re)) {\n end++;\n }\n\n return new Range(row, start, row, end);\n };\n this.getAWordRange = function(row, column) {\n var wordRange = this.getWordRange(row, column);\n var line = this.getLine(wordRange.end.row);\n\n while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n wordRange.end.column += 1;\n }\n return wordRange;\n };\n this.setNewLineMode = function(newLineMode) {\n this.doc.setNewLineMode(newLineMode);\n };\n this.getNewLineMode = function() {\n return this.doc.getNewLineMode();\n };\n this.setUseWorker = function(useWorker) { this.setOption(\"useWorker\", useWorker); };\n this.getUseWorker = function() { return this.$useWorker; };\n this.onReloadTokenizer = function(e) {\n var rows = e.data;\n this.bgTokenizer.start(rows.first);\n this._signal(\"tokenizerUpdate\", e);\n };\n\n this.$modes = config.$modes;\n this.$mode = null;\n this.$modeId = null;\n this.setMode = function(mode, cb) {\n if (mode && typeof mode === \"object\") {\n if (mode.getTokenizer)\n return this.$onChangeMode(mode);\n var options = mode;\n var path = options.path;\n } else {\n path = mode || \"ace/mode/text\";\n }\n if (!this.$modes[\"ace/mode/text\"])\n this.$modes[\"ace/mode/text\"] = new TextMode();\n\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n cb && cb();\n return;\n }\n this.$modeId = path;\n config.loadModule([\"mode\", path], function(m) {\n if (this.$modeId !== path)\n return cb && cb();\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n } else if (m && m.Mode) {\n m = new m.Mode(options);\n if (!options) {\n this.$modes[path] = m;\n m.$id = path;\n }\n this.$onChangeMode(m);\n }\n cb && cb();\n }.bind(this));\n if (!this.$mode)\n this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n };\n\n this.$onChangeMode = function(mode, $isPlaceholder) {\n if (!$isPlaceholder)\n this.$modeId = mode.$id;\n if (this.$mode === mode) \n return;\n \n var oldMode = this.$mode;\n this.$mode = mode;\n\n this.$stopWorker();\n\n if (this.$useWorker)\n this.$startWorker();\n\n var tokenizer = mode.getTokenizer();\n\n if(tokenizer.on !== undefined) {\n var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n tokenizer.on(\"update\", onReloadTokenizer);\n }\n\n if (!this.bgTokenizer) {\n this.bgTokenizer = new BackgroundTokenizer(tokenizer);\n var _self = this;\n this.bgTokenizer.on(\"update\", function(e) {\n _self._signal(\"tokenizerUpdate\", e);\n });\n } else {\n this.bgTokenizer.setTokenizer(tokenizer);\n }\n\n this.bgTokenizer.setDocument(this.getDocument());\n\n this.tokenRe = mode.tokenRe;\n this.nonTokenRe = mode.nonTokenRe;\n\n \n if (!$isPlaceholder) {\n if (mode.attachToSession)\n mode.attachToSession(this);\n this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n this.$setFolding(mode.foldingRules);\n this.bgTokenizer.start(0);\n this._emit(\"changeMode\", {oldMode: oldMode, mode: mode});\n }\n };\n\n this.$stopWorker = function() {\n if (this.$worker) {\n this.$worker.terminate();\n this.$worker = null;\n }\n };\n\n this.$startWorker = function() {\n try {\n this.$worker = this.$mode.createWorker(this);\n } catch (e) {\n config.warn(\"Could not load worker\", e);\n this.$worker = null;\n }\n };\n this.getMode = function() {\n return this.$mode;\n };\n\n this.$scrollTop = 0;\n this.setScrollTop = function(scrollTop) {\n if (this.$scrollTop === scrollTop || isNaN(scrollTop))\n return;\n\n this.$scrollTop = scrollTop;\n this._signal(\"changeScrollTop\", scrollTop);\n };\n this.getScrollTop = function() {\n return this.$scrollTop;\n };\n\n this.$scrollLeft = 0;\n this.setScrollLeft = function(scrollLeft) {\n if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\n return;\n\n this.$scrollLeft = scrollLeft;\n this._signal(\"changeScrollLeft\", scrollLeft);\n };\n this.getScrollLeft = function() {\n return this.$scrollLeft;\n };\n this.getScreenWidth = function() {\n this.$computeWidth();\n if (this.lineWidgets) \n return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n return this.screenWidth;\n };\n \n this.getLineWidgetMaxWidth = function() {\n if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth;\n var width = 0;\n this.lineWidgets.forEach(function(w) {\n if (w && w.screenWidth > width)\n width = w.screenWidth;\n });\n return this.lineWidgetWidth = width;\n };\n\n this.$computeWidth = function(force) {\n if (this.$modified || force) {\n this.$modified = false;\n\n if (this.$useWrapMode)\n return this.screenWidth = this.$wrapLimit;\n\n var lines = this.doc.getAllLines();\n var cache = this.$rowLengthCache;\n var longestScreenLine = 0;\n var foldIndex = 0;\n var foldLine = this.$foldData[foldIndex];\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n var len = lines.length;\n\n for (var i = 0; i < len; i++) {\n if (i > foldStart) {\n i = foldLine.end.row + 1;\n if (i >= len)\n break;\n foldLine = this.$foldData[foldIndex++];\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n\n if (cache[i] == null)\n cache[i] = this.$getStringScreenWidth(lines[i])[0];\n\n if (cache[i] > longestScreenLine)\n longestScreenLine = cache[i];\n }\n this.screenWidth = longestScreenLine;\n }\n };\n this.getLine = function(row) {\n return this.doc.getLine(row);\n };\n this.getLines = function(firstRow, lastRow) {\n return this.doc.getLines(firstRow, lastRow);\n };\n this.getLength = function() {\n return this.doc.getLength();\n };\n this.getTextRange = function(range) {\n return this.doc.getTextRange(range || this.selection.getRange());\n };\n this.insert = function(position, text) {\n return this.doc.insert(position, text);\n };\n this.remove = function(range) {\n return this.doc.remove(range);\n };\n this.removeFullLines = function(firstRow, lastRow){\n return this.doc.removeFullLines(firstRow, lastRow);\n };\n this.undoChanges = function(deltas, dontSelect) {\n if (!deltas.length)\n return;\n\n this.$fromUndo = true;\n for (var i = deltas.length - 1; i != -1; i--) {\n var delta = deltas[i];\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.revertDelta(delta);\n } else if (delta.folds) {\n this.addFolds(delta.folds);\n }\n }\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionBefore)\n this.selection.fromJSON(deltas.selectionBefore);\n else\n this.selection.setRange(this.$getUndoSelection(deltas, true));\n }\n this.$fromUndo = false;\n };\n this.redoChanges = function(deltas, dontSelect) {\n if (!deltas.length)\n return;\n\n this.$fromUndo = true;\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.$safeApplyDelta(delta);\n }\n }\n\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionAfter)\n this.selection.fromJSON(deltas.selectionAfter);\n else\n this.selection.setRange(this.$getUndoSelection(deltas, false));\n }\n this.$fromUndo = false;\n };\n this.setUndoSelect = function(enable) {\n this.$undoSelect = enable;\n };\n\n this.$getUndoSelection = function(deltas, isUndo) {\n function isInsert(delta) {\n return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n }\n\n var range, point;\n\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (!delta.start) continue; // skip folds\n if (!range) {\n if (isInsert(delta)) {\n range = Range.fromPoints(delta.start, delta.end);\n } else {\n range = Range.fromPoints(delta.start, delta.start);\n }\n continue;\n }\n \n if (isInsert(delta)) {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range.setStart(point);\n }\n point = delta.end;\n if (range.compare(point.row, point.column) == 1) {\n range.setEnd(point);\n }\n } else {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range = Range.fromPoints(delta.start, delta.start);\n }\n }\n }\n return range;\n };\n this.replace = function(range, text) {\n return this.doc.replace(range, text);\n };\n this.moveText = function(fromRange, toPosition, copy) {\n var text = this.getTextRange(fromRange);\n var folds = this.getFoldsInRange(fromRange);\n\n var toRange = Range.fromPoints(toPosition, toPosition);\n if (!copy) {\n this.remove(fromRange);\n var rowDiff = fromRange.start.row - fromRange.end.row;\n var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\n if (collDiff) {\n if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)\n toRange.start.column += collDiff;\n if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)\n toRange.end.column += collDiff;\n }\n if (rowDiff && toRange.start.row >= fromRange.end.row) {\n toRange.start.row += rowDiff;\n toRange.end.row += rowDiff;\n }\n }\n\n toRange.end = this.insert(toRange.start, text);\n if (folds.length) {\n var oldStart = fromRange.start;\n var newStart = toRange.start;\n var rowDiff = newStart.row - oldStart.row;\n var collDiff = newStart.column - oldStart.column;\n this.addFolds(folds.map(function(x) {\n x = x.clone();\n if (x.start.row == oldStart.row)\n x.start.column += collDiff;\n if (x.end.row == oldStart.row)\n x.end.column += collDiff;\n x.start.row += rowDiff;\n x.end.row += rowDiff;\n return x;\n }));\n }\n\n return toRange;\n };\n this.indentRows = function(startRow, endRow, indentString) {\n indentString = indentString.replace(/\\t/g, this.getTabString());\n for (var row=startRow; row<=endRow; row++)\n this.doc.insertInLine({row: row, column: 0}, indentString);\n };\n this.outdentRows = function (range) {\n var rowRange = range.collapseRows();\n var deleteRange = new Range(0, 0, 0, 0);\n var size = this.getTabSize();\n\n for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n var line = this.getLine(i);\n\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n for (var j = 0; j < size; ++j)\n if (line.charAt(j) != ' ')\n break;\n if (j < size && line.charAt(j) == '\\t') {\n deleteRange.start.column = j;\n deleteRange.end.column = j + 1;\n } else {\n deleteRange.start.column = 0;\n deleteRange.end.column = j;\n }\n this.remove(deleteRange);\n }\n };\n\n this.$moveLines = function(firstRow, lastRow, dir) {\n firstRow = this.getRowFoldStart(firstRow);\n lastRow = this.getRowFoldEnd(lastRow);\n if (dir < 0) {\n var row = this.getRowFoldStart(firstRow + dir);\n if (row < 0) return 0;\n var diff = row-firstRow;\n } else if (dir > 0) {\n var row = this.getRowFoldEnd(lastRow + dir);\n if (row > this.doc.getLength()-1) return 0;\n var diff = row-lastRow;\n } else {\n firstRow = this.$clipRowToDocument(firstRow);\n lastRow = this.$clipRowToDocument(lastRow);\n var diff = lastRow - firstRow + 1;\n }\n\n var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\n var folds = this.getFoldsInRange(range).map(function(x){\n x = x.clone();\n x.start.row += diff;\n x.end.row += diff;\n return x;\n });\n \n var lines = dir == 0\n ? this.doc.getLines(firstRow, lastRow)\n : this.doc.removeFullLines(firstRow, lastRow);\n this.doc.insertFullLines(firstRow+diff, lines);\n folds.length && this.addFolds(folds);\n return diff;\n };\n this.moveLinesUp = function(firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, -1);\n };\n this.moveLinesDown = function(firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 1);\n };\n this.duplicateLines = function(firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 0);\n };\n\n\n this.$clipRowToDocument = function(row) {\n return Math.max(0, Math.min(row, this.doc.getLength()-1));\n };\n\n this.$clipColumnToRow = function(row, column) {\n if (column < 0)\n return 0;\n return Math.min(this.doc.getLine(row).length, column);\n };\n\n\n this.$clipPositionToDocument = function(row, column) {\n column = Math.max(0, column);\n\n if (row < 0) {\n row = 0;\n column = 0;\n } else {\n var len = this.doc.getLength();\n if (row >= len) {\n row = len - 1;\n column = this.doc.getLine(len-1).length;\n } else {\n column = Math.min(this.doc.getLine(row).length, column);\n }\n }\n\n return {\n row: row,\n column: column\n };\n };\n\n this.$clipRangeToDocument = function(range) {\n if (range.start.row < 0) {\n range.start.row = 0;\n range.start.column = 0;\n } else {\n range.start.column = this.$clipColumnToRow(\n range.start.row,\n range.start.column\n );\n }\n\n var len = this.doc.getLength() - 1;\n if (range.end.row > len) {\n range.end.row = len;\n range.end.column = this.doc.getLine(len).length;\n } else {\n range.end.column = this.$clipColumnToRow(\n range.end.row,\n range.end.column\n );\n }\n return range;\n };\n this.$wrapLimit = 80;\n this.$useWrapMode = false;\n this.$wrapLimitRange = {\n min : null,\n max : null\n };\n this.setUseWrapMode = function(useWrapMode) {\n if (useWrapMode != this.$useWrapMode) {\n this.$useWrapMode = useWrapMode;\n this.$modified = true;\n this.$resetRowCache(0);\n if (useWrapMode) {\n var len = this.getLength();\n this.$wrapData = Array(len);\n this.$updateWrapData(0, len - 1);\n }\n\n this._signal(\"changeWrapMode\");\n }\n };\n this.getUseWrapMode = function() {\n return this.$useWrapMode;\n };\n this.setWrapLimitRange = function(min, max) {\n if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n this.$wrapLimitRange = { min: min, max: max };\n this.$modified = true;\n this.$bidiHandler.markAsDirty();\n if (this.$useWrapMode)\n this._signal(\"changeWrapMode\");\n }\n };\n this.adjustWrapLimit = function(desiredLimit, $printMargin) {\n var limits = this.$wrapLimitRange;\n if (limits.max < 0)\n limits = {min: $printMargin, max: $printMargin};\n var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\n if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\n this.$wrapLimit = wrapLimit;\n this.$modified = true;\n if (this.$useWrapMode) {\n this.$updateWrapData(0, this.getLength() - 1);\n this.$resetRowCache(0);\n this._signal(\"changeWrapLimit\");\n }\n return true;\n }\n return false;\n };\n\n this.$constrainWrapLimit = function(wrapLimit, min, max) {\n if (min)\n wrapLimit = Math.max(min, wrapLimit);\n\n if (max)\n wrapLimit = Math.min(max, wrapLimit);\n\n return wrapLimit;\n };\n this.getWrapLimit = function() {\n return this.$wrapLimit;\n };\n this.setWrapLimit = function (limit) {\n this.setWrapLimitRange(limit, limit);\n };\n this.getWrapLimitRange = function() {\n return {\n min : this.$wrapLimitRange.min,\n max : this.$wrapLimitRange.max\n };\n };\n\n this.$updateInternalDataOnChange = function(delta) {\n var useWrapMode = this.$useWrapMode;\n var action = delta.action;\n var start = delta.start;\n var end = delta.end;\n var firstRow = start.row;\n var lastRow = end.row;\n var len = lastRow - firstRow;\n var removedFolds = null;\n \n this.$updating = true;\n if (len != 0) {\n if (action === \"remove\") {\n this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n\n var foldLines = this.$foldData;\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n\n var foldLine = this.getFoldLine(end.row);\n var idx = 0;\n if (foldLine) {\n foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\n foldLine.shiftRow(-len);\n\n var foldLineBefore = this.getFoldLine(firstRow);\n if (foldLineBefore && foldLineBefore !== foldLine) {\n foldLineBefore.merge(foldLine);\n foldLine = foldLineBefore;\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= end.row) {\n foldLine.shiftRow(-len);\n }\n }\n\n lastRow = firstRow;\n } else {\n var args = Array(len);\n args.unshift(firstRow, 0);\n var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache;\n arr.splice.apply(arr, args);\n var foldLines = this.$foldData;\n var foldLine = this.getFoldLine(firstRow);\n var idx = 0;\n if (foldLine) {\n var cmp = foldLine.range.compareInside(start.row, start.column);\n if (cmp == 0) {\n foldLine = foldLine.split(start.row, start.column);\n if (foldLine) {\n foldLine.shiftRow(len);\n foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\n }\n } else\n if (cmp == -1) {\n foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\n foldLine.shiftRow(len);\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= firstRow) {\n foldLine.shiftRow(len);\n }\n }\n }\n } else {\n len = Math.abs(delta.start.column - delta.end.column);\n if (action === \"remove\") {\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n\n len = -len;\n }\n var foldLine = this.getFoldLine(firstRow);\n if (foldLine) {\n foldLine.addRemoveChars(firstRow, start.column, len);\n }\n }\n\n if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\n console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\n }\n this.$updating = false;\n\n if (useWrapMode)\n this.$updateWrapData(firstRow, lastRow);\n else\n this.$updateRowLengthCache(firstRow, lastRow);\n\n return removedFolds;\n };\n\n this.$updateRowLengthCache = function(firstRow, lastRow, b) {\n this.$rowLengthCache[firstRow] = null;\n this.$rowLengthCache[lastRow] = null;\n };\n\n this.$updateWrapData = function(firstRow, lastRow) {\n var lines = this.doc.getAllLines();\n var tabSize = this.getTabSize();\n var wrapData = this.$wrapData;\n var wrapLimit = this.$wrapLimit;\n var tokens;\n var foldLine;\n\n var row = firstRow;\n lastRow = Math.min(lastRow, lines.length - 1);\n while (row <= lastRow) {\n foldLine = this.getFoldLine(row, foldLine);\n if (!foldLine) {\n tokens = this.$getDisplayTokens(lines[row]);\n wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row ++;\n } else {\n tokens = [];\n foldLine.walk(function(placeholder, row, column, lastColumn) {\n var walkTokens;\n if (placeholder != null) {\n walkTokens = this.$getDisplayTokens(\n placeholder, tokens.length);\n walkTokens[0] = PLACEHOLDER_START;\n for (var i = 1; i < walkTokens.length; i++) {\n walkTokens[i] = PLACEHOLDER_BODY;\n }\n } else {\n walkTokens = this.$getDisplayTokens(\n lines[row].substring(lastColumn, column),\n tokens.length);\n }\n tokens = tokens.concat(walkTokens);\n }.bind(this),\n foldLine.end.row,\n lines[foldLine.end.row].length + 1\n );\n\n wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row = foldLine.end.row + 1;\n }\n }\n };\n var CHAR = 1,\n CHAR_EXT = 2,\n PLACEHOLDER_START = 3,\n PLACEHOLDER_BODY = 4,\n PUNCTUATION = 9,\n SPACE = 10,\n TAB = 11,\n TAB_SPACE = 12;\n\n\n this.$computeWrapSplits = function(tokens, wrapLimit, tabSize) {\n if (tokens.length == 0) {\n return [];\n }\n\n var splits = [];\n var displayLength = tokens.length;\n var lastSplit = 0, lastDocSplit = 0;\n\n var isCode = this.$wrapAsCode;\n\n var indentedSoftWrap = this.$indentedSoftWrap;\n var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\n || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n\n function getWrapIndent() {\n var indentation = 0;\n if (maxIndent === 0)\n return indentation;\n if (indentedSoftWrap) {\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token == SPACE)\n indentation += 1;\n else if (token == TAB)\n indentation += tabSize;\n else if (token == TAB_SPACE)\n continue;\n else\n break;\n }\n }\n if (isCode && indentedSoftWrap !== false)\n indentation += tabSize;\n return Math.min(indentation, maxIndent);\n }\n function addSplit(screenPos) {\n var len = screenPos - lastSplit;\n for (var i = lastSplit; i < screenPos; i++) {\n var ch = tokens[i];\n if (ch === 12 || ch === 2) len -= 1;\n }\n\n if (!splits.length) {\n indent = getWrapIndent();\n splits.indent = indent;\n }\n lastDocSplit += len;\n splits.push(lastDocSplit);\n lastSplit = screenPos;\n }\n var indent = 0;\n while (displayLength - lastSplit > wrapLimit - indent) {\n var split = lastSplit + wrapLimit - indent;\n if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n addSplit(split);\n continue;\n }\n if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n for (split; split != lastSplit - 1; split--) {\n if (tokens[split] == PLACEHOLDER_START) {\n break;\n }\n }\n if (split > lastSplit) {\n addSplit(split);\n continue;\n }\n split = lastSplit + wrapLimit;\n for (split; split < tokens.length; split++) {\n if (tokens[split] != PLACEHOLDER_BODY) {\n break;\n }\n }\n if (split == tokens.length) {\n break; // Breaks the while-loop.\n }\n addSplit(split);\n continue;\n }\n var minSplit = Math.max(split - (wrapLimit -(wrapLimit>>2)), lastSplit - 1);\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split --;\n }\n if (isCode) {\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split --;\n }\n while (split > minSplit && tokens[split] == PUNCTUATION) {\n split --;\n }\n } else {\n while (split > minSplit && tokens[split] < SPACE) {\n split --;\n }\n }\n if (split > minSplit) {\n addSplit(++split);\n continue;\n }\n split = lastSplit + wrapLimit;\n if (tokens[split] == CHAR_EXT)\n split--;\n addSplit(split - indent);\n }\n return splits;\n };\n this.$getDisplayTokens = function(str, offset) {\n var arr = [];\n var tabSize;\n offset = offset || 0;\n\n for (var i = 0; i < str.length; i++) {\n var c = str.charCodeAt(i);\n if (c == 9) {\n tabSize = this.getScreenTabSize(arr.length + offset);\n arr.push(TAB);\n for (var n = 1; n < tabSize; n++) {\n arr.push(TAB_SPACE);\n }\n }\n else if (c == 32) {\n arr.push(SPACE);\n } else if((c > 39 && c < 48) || (c > 57 && c < 64)) {\n arr.push(PUNCTUATION);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n arr.push(CHAR, CHAR_EXT);\n } else {\n arr.push(CHAR);\n }\n }\n return arr;\n };\n this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn == 0)\n return [0, 0];\n if (maxScreenColumn == null)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n\n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charCodeAt(column);\n if (c == 9) {\n screenColumn += this.getScreenTabSize(screenColumn);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n screenColumn += 2;\n } else {\n screenColumn += 1;\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n\n return [screenColumn, column];\n };\n\n this.lineWidgets = null;\n this.getRowLength = function(row) {\n var h = 1;\n if (this.lineWidgets)\n h += this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n \n if (!this.$useWrapMode || !this.$wrapData[row])\n return h;\n else\n return this.$wrapData[row].length + h;\n };\n this.getRowLineCount = function(row) {\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1;\n } else {\n return this.$wrapData[row].length + 1;\n }\n };\n\n this.getRowWrapIndent = function(screenRow) {\n if (this.$useWrapMode) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n var splits = this.$wrapData[pos.row];\n return splits.length && splits[0] < pos.column ? splits.indent : 0;\n } else {\n return 0;\n }\n };\n this.getScreenLastRowColumn = function(screenRow) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n return this.documentToScreenColumn(pos.row, pos.column);\n };\n this.getDocumentLastRowColumn = function(docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.getScreenLastRowColumn(screenRow);\n };\n this.getDocumentLastRowColumnPosition = function(docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n };\n this.getRowSplitData = function(row) {\n if (!this.$useWrapMode) {\n return undefined;\n } else {\n return this.$wrapData[row];\n }\n };\n this.getScreenTabSize = function(screenColumn) {\n return this.$tabSize - (screenColumn % this.$tabSize | 0);\n };\n\n\n this.screenToDocumentRow = function(screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).row;\n };\n\n\n this.screenToDocumentColumn = function(screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).column;\n };\n this.screenToDocumentPosition = function(screenRow, screenColumn, offsetX) {\n if (screenRow < 0)\n return {row: 0, column: 0};\n\n var line;\n var docRow = 0;\n var docColumn = 0;\n var column;\n var row = 0;\n var rowLength = 0;\n\n var rowCache = this.$screenRowCache;\n var i = this.$getRowCacheIndex(rowCache, screenRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var docRow = this.$docRowCache[i];\n var doCache = screenRow > rowCache[l - 1];\n } else {\n var doCache = !l;\n }\n\n var maxRow = this.getLength() - 1;\n var foldLine = this.getNextFoldLine(docRow);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (row <= screenRow) {\n rowLength = this.getRowLength(docRow);\n if (row + rowLength > screenRow || docRow >= maxRow) {\n break;\n } else {\n row += rowLength;\n docRow++;\n if (docRow > foldStart) {\n docRow = foldLine.end.row+1;\n foldLine = this.getNextFoldLine(docRow, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n }\n\n if (doCache) {\n this.$docRowCache.push(docRow);\n this.$screenRowCache.push(row);\n }\n }\n\n if (foldLine && foldLine.start.row <= docRow) {\n line = this.getFoldDisplayLine(foldLine);\n docRow = foldLine.start.row;\n } else if (row + rowLength <= screenRow || docRow > maxRow) {\n return {\n row: maxRow,\n column: this.getLine(maxRow).length\n };\n } else {\n line = this.getLine(docRow);\n foldLine = null;\n }\n var wrapIndent = 0, splitIndex = Math.floor(screenRow - row);\n if (this.$useWrapMode) {\n var splits = this.$wrapData[docRow];\n if (splits) {\n column = splits[splitIndex];\n if(splitIndex > 0 && splits.length) {\n wrapIndent = splits.indent;\n docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\n line = line.substring(docColumn);\n }\n }\n }\n\n if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex))\n screenColumn = this.$bidiHandler.offsetToCol(offsetX);\n\n docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n if (this.$useWrapMode && docColumn >= column)\n docColumn = column - 1;\n\n if (foldLine)\n return foldLine.idxToPosition(docColumn);\n\n return {row: docRow, column: docColumn};\n };\n this.documentToScreenPosition = function(docRow, docColumn) {\n if (typeof docColumn === \"undefined\")\n var pos = this.$clipPositionToDocument(docRow.row, docRow.column);\n else\n pos = this.$clipPositionToDocument(docRow, docColumn);\n\n docRow = pos.row;\n docColumn = pos.column;\n\n var screenRow = 0;\n var foldStartRow = null;\n var fold = null;\n fold = this.getFoldAt(docRow, docColumn, 1);\n if (fold) {\n docRow = fold.start.row;\n docColumn = fold.start.column;\n }\n\n var rowEnd, row = 0;\n\n\n var rowCache = this.$docRowCache;\n var i = this.$getRowCacheIndex(rowCache, docRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var screenRow = this.$screenRowCache[i];\n var doCache = docRow > rowCache[l - 1];\n } else {\n var doCache = !l;\n }\n\n var foldLine = this.getNextFoldLine(row);\n var foldStart = foldLine ?foldLine.start.row :Infinity;\n\n while (row < docRow) {\n if (row >= foldStart) {\n rowEnd = foldLine.end.row + 1;\n if (rowEnd > docRow)\n break;\n foldLine = this.getNextFoldLine(rowEnd, foldLine);\n foldStart = foldLine ?foldLine.start.row :Infinity;\n }\n else {\n rowEnd = row + 1;\n }\n\n screenRow += this.getRowLength(row);\n row = rowEnd;\n\n if (doCache) {\n this.$docRowCache.push(row);\n this.$screenRowCache.push(screenRow);\n }\n }\n var textLine = \"\";\n if (foldLine && row >= foldStart) {\n textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\n foldStartRow = foldLine.start.row;\n } else {\n textLine = this.getLine(docRow).substring(0, docColumn);\n foldStartRow = docRow;\n }\n var wrapIndent = 0;\n if (this.$useWrapMode) {\n var wrapRow = this.$wrapData[foldStartRow];\n if (wrapRow) {\n var screenRowOffset = 0;\n while (textLine.length >= wrapRow[screenRowOffset]) {\n screenRow ++;\n screenRowOffset++;\n }\n textLine = textLine.substring(\n wrapRow[screenRowOffset - 1] || 0, textLine.length\n );\n wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n }\n }\n \n if (this.lineWidgets && this.lineWidgets[row] && this.lineWidgets[row].rowsAbove)\n screenRow += this.lineWidgets[row].rowsAbove;\n\n return {\n row: screenRow,\n column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n };\n };\n this.documentToScreenColumn = function(row, docColumn) {\n return this.documentToScreenPosition(row, docColumn).column;\n };\n this.documentToScreenRow = function(docRow, docColumn) {\n return this.documentToScreenPosition(docRow, docColumn).row;\n };\n this.getScreenLength = function() {\n var screenRows = 0;\n var fold = null;\n if (!this.$useWrapMode) {\n screenRows = this.getLength();\n var foldData = this.$foldData;\n for (var i = 0; i < foldData.length; i++) {\n fold = foldData[i];\n screenRows -= fold.end.row - fold.start.row;\n }\n } else {\n var lastRow = this.$wrapData.length;\n var row = 0, i = 0;\n var fold = this.$foldData[i++];\n var foldStart = fold ? fold.start.row :Infinity;\n\n while (row < lastRow) {\n var splits = this.$wrapData[row];\n screenRows += splits ? splits.length + 1 : 1;\n row ++;\n if (row > foldStart) {\n row = fold.end.row+1;\n fold = this.$foldData[i++];\n foldStart = fold ?fold.start.row :Infinity;\n }\n }\n }\n if (this.lineWidgets)\n screenRows += this.$getWidgetScreenLength();\n\n return screenRows;\n };\n this.$setFontMetrics = function(fm) {\n if (!this.$enableVarChar) return;\n this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn === 0)\n return [0, 0];\n if (!maxScreenColumn)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n \n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charAt(column);\n if (c === \"\\t\") {\n screenColumn += this.getScreenTabSize(screenColumn);\n } else {\n screenColumn += fm.getCharacterWidth(c);\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n \n return [screenColumn, column];\n };\n };\n \n this.destroy = function() {\n if (this.bgTokenizer) {\n this.bgTokenizer.setDocument(null);\n this.bgTokenizer = null;\n }\n this.$stopWorker();\n this.removeAllListeners();\n if (this.doc) {\n this.doc.off(\"change\", this.$onChange);\n }\n this.selection.detach();\n };\n\n this.isFullWidth = isFullWidth;\n function isFullWidth(c) {\n if (c < 0x1100)\n return false;\n return c >= 0x1100 && c <= 0x115F ||\n c >= 0x11A3 && c <= 0x11A7 ||\n c >= 0x11FA && c <= 0x11FF ||\n c >= 0x2329 && c <= 0x232A ||\n c >= 0x2E80 && c <= 0x2E99 ||\n c >= 0x2E9B && c <= 0x2EF3 ||\n c >= 0x2F00 && c <= 0x2FD5 ||\n c >= 0x2FF0 && c <= 0x2FFB ||\n c >= 0x3000 && c <= 0x303E ||\n c >= 0x3041 && c <= 0x3096 ||\n c >= 0x3099 && c <= 0x30FF ||\n c >= 0x3105 && c <= 0x312D ||\n c >= 0x3131 && c <= 0x318E ||\n c >= 0x3190 && c <= 0x31BA ||\n c >= 0x31C0 && c <= 0x31E3 ||\n c >= 0x31F0 && c <= 0x321E ||\n c >= 0x3220 && c <= 0x3247 ||\n c >= 0x3250 && c <= 0x32FE ||\n c >= 0x3300 && c <= 0x4DBF ||\n c >= 0x4E00 && c <= 0xA48C ||\n c >= 0xA490 && c <= 0xA4C6 ||\n c >= 0xA960 && c <= 0xA97C ||\n c >= 0xAC00 && c <= 0xD7A3 ||\n c >= 0xD7B0 && c <= 0xD7C6 ||\n c >= 0xD7CB && c <= 0xD7FB ||\n c >= 0xF900 && c <= 0xFAFF ||\n c >= 0xFE10 && c <= 0xFE19 ||\n c >= 0xFE30 && c <= 0xFE52 ||\n c >= 0xFE54 && c <= 0xFE66 ||\n c >= 0xFE68 && c <= 0xFE6B ||\n c >= 0xFF01 && c <= 0xFF60 ||\n c >= 0xFFE0 && c <= 0xFFE6;\n }\n\n}).call(EditSession.prototype);\n\nrequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\nrequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\n\n\nconfig.defineOptions(EditSession.prototype, \"session\", {\n wrap: {\n set: function(value) {\n if (!value || value == \"off\")\n value = false;\n else if (value == \"free\")\n value = true;\n else if (value == \"printMargin\")\n value = -1;\n else if (typeof value == \"string\")\n value = parseInt(value, 10) || false;\n\n if (this.$wrap == value)\n return;\n this.$wrap = value;\n if (!value) {\n this.setUseWrapMode(false);\n } else {\n var col = typeof value == \"number\" ? value : null;\n this.setWrapLimitRange(col, col);\n this.setUseWrapMode(true);\n }\n },\n get: function() {\n if (this.getUseWrapMode()) {\n if (this.$wrap == -1)\n return \"printMargin\";\n if (!this.getWrapLimitRange().min)\n return \"free\";\n return this.$wrap;\n }\n return \"off\";\n },\n handlesSet: true\n }, \n wrapMethod: {\n set: function(val) {\n val = val == \"auto\"\n ? this.$mode.type != \"text\"\n : val != \"text\";\n if (val != this.$wrapAsCode) {\n this.$wrapAsCode = val;\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n }\n },\n initialValue: \"auto\"\n },\n indentedSoftWrap: {\n set: function() {\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n },\n initialValue: true \n },\n firstLineNumber: {\n set: function() {this._signal(\"changeBreakpoint\");},\n initialValue: 1\n },\n useWorker: {\n set: function(useWorker) {\n this.$useWorker = useWorker;\n\n this.$stopWorker();\n if (useWorker)\n this.$startWorker();\n },\n initialValue: true\n },\n useSoftTabs: {initialValue: true},\n tabSize: {\n set: function(tabSize) {\n tabSize = parseInt(tabSize);\n if (tabSize > 0 && this.$tabSize !== tabSize) {\n this.$modified = true;\n this.$rowLengthCache = [];\n this.$tabSize = tabSize;\n this._signal(\"changeTabSize\");\n }\n },\n initialValue: 4,\n handlesSet: true\n },\n navigateWithinSoftTabs: {initialValue: false},\n foldStyle: {\n set: function(val) {this.setFoldStyle(val);},\n handlesSet: true\n },\n overwrite: {\n set: function(val) {this._signal(\"changeOverwrite\");},\n initialValue: false\n },\n newLineMode: {\n set: function(val) {this.doc.setNewLineMode(val);},\n get: function() {return this.doc.getNewLineMode();},\n handlesSet: true\n },\n mode: {\n set: function(val) { this.setMode(val); },\n get: function() { return this.$modeId; },\n handlesSet: true\n }\n});\n\nexports.EditSession = EditSession;\n});\n\nace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\n\nvar Search = function() {\n this.$options = {};\n};\n\n(function() {\n this.set = function(options) {\n oop.mixin(this.$options, options);\n return this;\n };\n this.getOptions = function() {\n return lang.copyObject(this.$options);\n };\n this.setOptions = function(options) {\n this.$options = options;\n };\n this.find = function(session) {\n var options = this.$options;\n var iterator = this.$matchIterator(session, options);\n if (!iterator)\n return false;\n\n var firstRange = null;\n iterator.forEach(function(sr, sc, er, ec) {\n firstRange = new Range(sr, sc, er, ec);\n if (sc == ec && options.start && options.start.start\n && options.skipCurrent != false && firstRange.isEqual(options.start)\n ) {\n firstRange = null;\n return false;\n }\n \n return true;\n });\n\n return firstRange;\n };\n this.findAll = function(session) {\n var options = this.$options;\n if (!options.needle)\n return [];\n this.$assembleRegExp(options);\n\n var range = options.range;\n var lines = range\n ? session.getLines(range.start.row, range.end.row)\n : session.doc.getAllLines();\n\n var ranges = [];\n var re = options.re;\n if (options.$isMultiLine) {\n var len = re.length;\n var maxRow = lines.length - len;\n var prevRange;\n outer: for (var row = re.offset || 0; row <= maxRow; row++) {\n for (var j = 0; j < len; j++)\n if (lines[row + j].search(re[j]) == -1)\n continue outer;\n \n var startLine = lines[row];\n var line = lines[row + len - 1];\n var startIndex = startLine.length - startLine.match(re[0])[0].length;\n var endIndex = line.match(re[len - 1])[0].length;\n \n if (prevRange && prevRange.end.row === row &&\n prevRange.end.column > startIndex\n ) {\n continue;\n }\n ranges.push(prevRange = new Range(\n row, startIndex, row + len - 1, endIndex\n ));\n if (len > 2)\n row = row + len - 2;\n }\n } else {\n for (var i = 0; i < lines.length; i++) {\n var matches = lang.getMatchOffsets(lines[i], re);\n for (var j = 0; j < matches.length; j++) {\n var match = matches[j];\n ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n }\n }\n }\n\n if (range) {\n var startColumn = range.start.column;\n var endColumn = range.start.column;\n var i = 0, j = ranges.length - 1;\n while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row)\n i++;\n\n while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row)\n j--;\n \n ranges = ranges.slice(i, j + 1);\n for (i = 0, j = ranges.length; i < j; i++) {\n ranges[i].start.row += range.start.row;\n ranges[i].end.row += range.start.row;\n }\n }\n\n return ranges;\n };\n this.replace = function(input, replacement) {\n var options = this.$options;\n\n var re = this.$assembleRegExp(options);\n if (options.$isMultiLine)\n return replacement;\n\n if (!re)\n return;\n\n var match = re.exec(input);\n if (!match || match[0].length != input.length)\n return null;\n \n replacement = input.replace(re, replacement);\n if (options.preserveCase) {\n replacement = replacement.split(\"\");\n for (var i = Math.min(input.length, input.length); i--; ) {\n var ch = input[i];\n if (ch && ch.toLowerCase() != ch)\n replacement[i] = replacement[i].toUpperCase();\n else\n replacement[i] = replacement[i].toLowerCase();\n }\n replacement = replacement.join(\"\");\n }\n \n return replacement;\n };\n\n this.$assembleRegExp = function(options, $disableFakeMultiline) {\n if (options.needle instanceof RegExp)\n return options.re = options.needle;\n\n var needle = options.needle;\n\n if (!options.needle)\n return options.re = false;\n\n if (!options.regExp)\n needle = lang.escapeRegExp(needle);\n\n if (options.wholeWord)\n needle = addWordBoundary(needle, options);\n\n var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n\n options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n if (options.$isMultiLine)\n return options.re = this.$assembleMultilineRegExp(needle, modifier);\n\n try {\n var re = new RegExp(needle, modifier);\n } catch(e) {\n re = false;\n }\n return options.re = re;\n };\n\n this.$assembleMultilineRegExp = function(needle, modifier) {\n var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\n var re = [];\n for (var i = 0; i < parts.length; i++) try {\n re.push(new RegExp(parts[i], modifier));\n } catch(e) {\n return false;\n }\n return re;\n };\n\n this.$matchIterator = function(session, options) {\n var re = this.$assembleRegExp(options);\n if (!re)\n return false;\n var backwards = options.backwards == true;\n var skipCurrent = options.skipCurrent != false;\n\n var range = options.range;\n var start = options.start;\n if (!start)\n start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n \n if (start.start)\n start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n\n var firstRow = range ? range.start.row : 0;\n var lastRow = range ? range.end.row : session.getLength() - 1;\n \n if (backwards) {\n var forEach = function(callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row--; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = lastRow, firstRow = start.row; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n };\n }\n else {\n var forEach = function(callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row = row + 1; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = firstRow, lastRow = start.row; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n };\n }\n \n if (options.$isMultiLine) {\n var len = re.length;\n var forEachInLine = function(row, offset, callback) {\n var startRow = backwards ? row - len + 1 : row;\n if (startRow < 0 || startRow + len > session.getLength()) return;\n var line = session.getLine(startRow);\n var startIndex = line.search(re[0]);\n if (!backwards && startIndex < offset || startIndex === -1) return;\n for (var i = 1; i < len; i++) {\n line = session.getLine(startRow + i);\n if (line.search(re[i]) == -1)\n return;\n }\n var endIndex = line.match(re[len - 1])[0].length;\n if (backwards && endIndex > offset) return;\n if (callback(startRow, startIndex, startRow + len - 1, endIndex))\n return true;\n };\n }\n else if (backwards) {\n var forEachInLine = function(row, endIndex, callback) {\n var line = session.getLine(row);\n var matches = [];\n var m, last = 0;\n re.lastIndex = 0;\n while((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (!length) {\n if (last >= line.length) break;\n re.lastIndex = last += 1;\n }\n if (m.index + length > endIndex)\n break;\n matches.push(m.index, length);\n }\n for (var i = matches.length - 1; i >= 0; i -= 2) {\n var column = matches[i - 1];\n var length = matches[i];\n if (callback(row, column, row, column + length))\n return true;\n }\n };\n }\n else {\n var forEachInLine = function(row, startIndex, callback) {\n var line = session.getLine(row);\n var last;\n var m;\n re.lastIndex = startIndex;\n while((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (callback(row, last, row,last + length))\n return true;\n if (!length) {\n re.lastIndex = last += 1;\n if (last >= line.length) return false;\n }\n }\n };\n }\n return {forEach: forEach};\n };\n\n}).call(Search.prototype);\n\nfunction addWordBoundary(needle, options) {\n function wordBoundary(c) {\n if (/\\w/.test(c) || options.regExp) return \"\\\\b\";\n return \"\";\n }\n return wordBoundary(needle[0]) + needle\n + wordBoundary(needle[needle.length - 1]);\n}\n\nexports.Search = Search;\n});\n\nace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar keyUtil = require(\"../lib/keys\");\nvar useragent = require(\"../lib/useragent\");\nvar KEY_MODS = keyUtil.KEY_MODS;\n\nfunction HashHandler(config, platform) {\n this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n this.commands = {};\n this.commandKeyBinding = {};\n this.addCommands(config);\n this.$singleCommand = true;\n}\n\nfunction MultiHashHandler(config, platform) {\n HashHandler.call(this, config, platform);\n this.$singleCommand = false;\n}\n\nMultiHashHandler.prototype = HashHandler.prototype;\n\n(function() {\n \n\n this.addCommand = function(command) {\n if (this.commands[command.name])\n this.removeCommand(command);\n\n this.commands[command.name] = command;\n\n if (command.bindKey)\n this._buildKeyHash(command);\n };\n\n this.removeCommand = function(command, keepCommand) {\n var name = command && (typeof command === 'string' ? command : command.name);\n command = this.commands[name];\n if (!keepCommand)\n delete this.commands[name];\n var ckb = this.commandKeyBinding;\n for (var keyId in ckb) {\n var cmdGroup = ckb[keyId];\n if (cmdGroup == command) {\n delete ckb[keyId];\n } else if (Array.isArray(cmdGroup)) {\n var i = cmdGroup.indexOf(command);\n if (i != -1) {\n cmdGroup.splice(i, 1);\n if (cmdGroup.length == 1)\n ckb[keyId] = cmdGroup[0];\n }\n }\n }\n };\n\n this.bindKey = function(key, command, position) {\n if (typeof key == \"object\" && key) {\n if (position == undefined)\n position = key.position;\n key = key[this.platform];\n }\n if (!key)\n return;\n if (typeof command == \"function\")\n return this.addCommand({exec: command, bindKey: key, name: command.name || key});\n \n key.split(\"|\").forEach(function(keyPart) {\n var chain = \"\";\n if (keyPart.indexOf(\" \") != -1) {\n var parts = keyPart.split(/\\s+/);\n keyPart = parts.pop();\n parts.forEach(function(keyPart) {\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n chain += (chain ? \" \" : \"\") + id;\n this._addCommandToBinding(chain, \"chainKeys\");\n }, this);\n chain += \" \";\n }\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n this._addCommandToBinding(chain + id, command, position);\n }, this);\n };\n \n function getPosition(command) {\n return typeof command == \"object\" && command.bindKey\n && command.bindKey.position \n || (command.isDefault ? -100 : 0);\n }\n this._addCommandToBinding = function(keyId, command, position) {\n var ckb = this.commandKeyBinding, i;\n if (!command) {\n delete ckb[keyId];\n } else if (!ckb[keyId] || this.$singleCommand) {\n ckb[keyId] = command;\n } else {\n if (!Array.isArray(ckb[keyId])) {\n ckb[keyId] = [ckb[keyId]];\n } else if ((i = ckb[keyId].indexOf(command)) != -1) {\n ckb[keyId].splice(i, 1);\n }\n \n if (typeof position != \"number\") {\n position = getPosition(command);\n }\n\n var commands = ckb[keyId];\n for (i = 0; i < commands.length; i++) {\n var other = commands[i];\n var otherPos = getPosition(other);\n if (otherPos > position)\n break;\n }\n commands.splice(i, 0, command);\n }\n };\n\n this.addCommands = function(commands) {\n commands && Object.keys(commands).forEach(function(name) {\n var command = commands[name];\n if (!command)\n return;\n \n if (typeof command === \"string\")\n return this.bindKey(command, name);\n\n if (typeof command === \"function\")\n command = { exec: command };\n\n if (typeof command !== \"object\")\n return;\n\n if (!command.name)\n command.name = name;\n\n this.addCommand(command);\n }, this);\n };\n\n this.removeCommands = function(commands) {\n Object.keys(commands).forEach(function(name) {\n this.removeCommand(commands[name]);\n }, this);\n };\n\n this.bindKeys = function(keyList) {\n Object.keys(keyList).forEach(function(key) {\n this.bindKey(key, keyList[key]);\n }, this);\n };\n\n this._buildKeyHash = function(command) {\n this.bindKey(command.bindKey, command);\n };\n this.parseKeys = function(keys) {\n var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function(x){return x;});\n var key = parts.pop();\n\n var keyCode = keyUtil[key];\n if (keyUtil.FUNCTION_KEYS[keyCode])\n key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();\n else if (!parts.length)\n return {key: key, hashId: -1};\n else if (parts.length == 1 && parts[0] == \"shift\")\n return {key: key.toUpperCase(), hashId: -1};\n\n var hashId = 0;\n for (var i = parts.length; i--;) {\n var modifier = keyUtil.KEY_MODS[parts[i]];\n if (modifier == null) {\n if (typeof console != \"undefined\")\n console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n return false;\n }\n hashId |= modifier;\n }\n return {key: key, hashId: hashId};\n };\n\n this.findKeyCommand = function findKeyCommand(hashId, keyString) {\n var key = KEY_MODS[hashId] + keyString;\n return this.commandKeyBinding[key];\n };\n\n this.handleKeyboard = function(data, hashId, keyString, keyCode) {\n if (keyCode < 0) return;\n var key = KEY_MODS[hashId] + keyString;\n var command = this.commandKeyBinding[key];\n if (data.$keyChain) {\n data.$keyChain += \" \" + key;\n command = this.commandKeyBinding[data.$keyChain] || command;\n }\n \n if (command) {\n if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n data.$keyChain = data.$keyChain || key;\n return {command: \"null\"};\n }\n }\n \n if (data.$keyChain) {\n if ((!hashId || hashId == 4) && keyString.length == 1)\n data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n else if (hashId == -1 || keyCode > 0)\n data.$keyChain = \"\"; // reset keyChain\n }\n return {command: command};\n };\n \n this.getStatusText = function(editor, data) {\n return data.$keyChain || \"\";\n };\n\n}).call(HashHandler.prototype);\n\nexports.HashHandler = HashHandler;\nexports.MultiHashHandler = MultiHashHandler;\n});\n\nace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar MultiHashHandler = require(\"../keyboard/hash_handler\").MultiHashHandler;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\nvar CommandManager = function(platform, commands) {\n MultiHashHandler.call(this, commands, platform);\n this.byName = this.commands;\n this.setDefaultHandler(\"exec\", function(e) {\n return e.command.exec(e.editor, e.args || {});\n });\n};\n\noop.inherits(CommandManager, MultiHashHandler);\n\n(function() {\n\n oop.implement(this, EventEmitter);\n\n this.exec = function(command, editor, args) {\n if (Array.isArray(command)) {\n for (var i = command.length; i--; ) {\n if (this.exec(command[i], editor, args)) return true;\n }\n return false;\n }\n\n if (typeof command === \"string\")\n command = this.commands[command];\n\n if (!command)\n return false;\n\n if (editor && editor.$readOnly && !command.readOnly)\n return false;\n\n if (this.$checkCommandState != false && command.isAvailable && !command.isAvailable(editor))\n return false;\n\n var e = {editor: editor, command: command, args: args};\n e.returnValue = this._emit(\"exec\", e);\n this._signal(\"afterExec\", e);\n\n return e.returnValue === false ? false : true;\n };\n\n this.toggleRecording = function(editor) {\n if (this.$inReplay)\n return;\n\n editor && editor._emit(\"changeStatus\");\n if (this.recording) {\n this.macro.pop();\n this.off(\"exec\", this.$addCommandToMacro);\n\n if (!this.macro.length)\n this.macro = this.oldMacro;\n\n return this.recording = false;\n }\n if (!this.$addCommandToMacro) {\n this.$addCommandToMacro = function(e) {\n this.macro.push([e.command, e.args]);\n }.bind(this);\n }\n\n this.oldMacro = this.macro;\n this.macro = [];\n this.on(\"exec\", this.$addCommandToMacro);\n return this.recording = true;\n };\n\n this.replay = function(editor) {\n if (this.$inReplay || !this.macro)\n return;\n\n if (this.recording)\n return this.toggleRecording(editor);\n\n try {\n this.$inReplay = true;\n this.macro.forEach(function(x) {\n if (typeof x == \"string\")\n this.exec(x, editor);\n else\n this.exec(x[0], editor, x[1]);\n }, this);\n } finally {\n this.$inReplay = false;\n }\n };\n\n this.trimMacro = function(m) {\n return m.map(function(x){\n if (typeof x[0] != \"string\")\n x[0] = x[0].name;\n if (!x[1])\n x = x[0];\n return x;\n });\n };\n\n}).call(CommandManager.prototype);\n\nexports.CommandManager = CommandManager;\n\n});\n\nace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"../lib/lang\");\nvar config = require(\"../config\");\nvar Range = require(\"../range\").Range;\n\nfunction bindKey(win, mac) {\n return {win: win, mac: mac};\n}\nexports.commands = [{\n name: \"showSettingsMenu\",\n description: \"Show settings menu\",\n bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/settings_menu\", function(module) {\n module.init(editor);\n editor.showSettingsMenu();\n });\n },\n readOnly: true\n}, {\n name: \"goToNextError\",\n description: \"Go to next error\",\n bindKey: bindKey(\"Alt-E\", \"F4\"),\n exec: function(editor) {\n config.loadModule(\"./ext/error_marker\", function(module) {\n module.showErrorMarker(editor, 1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"goToPreviousError\",\n description: \"Go to previous error\",\n bindKey: bindKey(\"Alt-Shift-E\", \"Shift-F4\"),\n exec: function(editor) {\n config.loadModule(\"./ext/error_marker\", function(module) {\n module.showErrorMarker(editor, -1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"selectall\",\n description: \"Select all\",\n bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\n exec: function(editor) { editor.selectAll(); },\n readOnly: true\n}, {\n name: \"centerselection\",\n description: \"Center selection\",\n bindKey: bindKey(null, \"Ctrl-L\"),\n exec: function(editor) { editor.centerSelection(); },\n readOnly: true\n}, {\n name: \"gotoline\",\n description: \"Go to line...\",\n bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\n exec: function(editor, line) {\n if (typeof line === \"number\" && !isNaN(line))\n editor.gotoLine(line);\n editor.prompt({ $type: \"gotoLine\" });\n },\n readOnly: true\n}, {\n name: \"fold\",\n bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n exec: function(editor) { editor.session.toggleFold(false); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"unfold\",\n bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n exec: function(editor) { editor.session.toggleFold(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"toggleFoldWidget\",\n description: \"Toggle fold widget\",\n bindKey: bindKey(\"F2\", \"F2\"),\n exec: function(editor) { editor.session.toggleFoldWidget(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"toggleParentFoldWidget\",\n description: \"Toggle parent fold widget\",\n bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n exec: function(editor) { editor.session.toggleFoldWidget(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"foldall\",\n description: \"Fold all\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function(editor) { editor.session.foldAll(); },\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"foldAllComments\",\n description: \"Fold all comments\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function(editor) { editor.session.foldAllComments(); },\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"foldOther\",\n description: \"Fold other\",\n bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\n exec: function(editor) { \n editor.session.foldAll();\n editor.session.unfold(editor.selection.getAllRanges());\n },\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"unfoldall\",\n description: \"Unfold all\",\n bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n exec: function(editor) { editor.session.unfold(); },\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"findnext\",\n description: \"Find next\",\n bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n exec: function(editor) { editor.findNext(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"findprevious\",\n description: \"Find previous\",\n bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n exec: function(editor) { editor.findPrevious(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"selectOrFindNext\",\n description: \"Select or find next\",\n bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n exec: function(editor) {\n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findNext(); \n },\n readOnly: true\n}, {\n name: \"selectOrFindPrevious\",\n description: \"Select or find previous\",\n bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n exec: function(editor) { \n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findPrevious();\n },\n readOnly: true\n}, {\n name: \"find\",\n description: \"Find\",\n bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor);});\n },\n readOnly: true\n}, {\n name: \"overwrite\",\n description: \"Overwrite\",\n bindKey: \"Insert\",\n exec: function(editor) { editor.toggleOverwrite(); },\n readOnly: true\n}, {\n name: \"selecttostart\",\n description: \"Select to start\",\n bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n exec: function(editor) { editor.getSelection().selectFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"gotostart\",\n description: \"Go to start\",\n bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n exec: function(editor) { editor.navigateFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"selectup\",\n description: \"Select up\",\n bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n exec: function(editor) { editor.getSelection().selectUp(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"golineup\",\n description: \"Go line up\",\n bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n exec: function(editor, args) { editor.navigateUp(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selecttoend\",\n description: \"Select to end\",\n bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n exec: function(editor) { editor.getSelection().selectFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"gotoend\",\n description: \"Go to end\",\n bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n exec: function(editor) { editor.navigateFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"selectdown\",\n description: \"Select down\",\n bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n exec: function(editor) { editor.getSelection().selectDown(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"golinedown\",\n description: \"Go line down\",\n bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n exec: function(editor, args) { editor.navigateDown(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectwordleft\",\n description: \"Select word left\",\n bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n exec: function(editor) { editor.getSelection().selectWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotowordleft\",\n description: \"Go to word left\",\n bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n exec: function(editor) { editor.navigateWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selecttolinestart\",\n description: \"Select to line start\",\n bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n exec: function(editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotolinestart\",\n description: \"Go to line start\",\n bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n exec: function(editor) { editor.navigateLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectleft\",\n description: \"Select left\",\n bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n exec: function(editor) { editor.getSelection().selectLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotoleft\",\n description: \"Go to left\",\n bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n exec: function(editor, args) { editor.navigateLeft(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectwordright\",\n description: \"Select word right\",\n bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n exec: function(editor) { editor.getSelection().selectWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotowordright\",\n description: \"Go to word right\",\n bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n exec: function(editor) { editor.navigateWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selecttolineend\",\n description: \"Select to line end\",\n bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n exec: function(editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotolineend\",\n description: \"Go to line end\",\n bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n exec: function(editor) { editor.navigateLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectright\",\n description: \"Select right\",\n bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n exec: function(editor) { editor.getSelection().selectRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotoright\",\n description: \"Go to right\",\n bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n exec: function(editor, args) { editor.navigateRight(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectpagedown\",\n description: \"Select page down\",\n bindKey: \"Shift-PageDown\",\n exec: function(editor) { editor.selectPageDown(); },\n readOnly: true\n}, {\n name: \"pagedown\",\n description: \"Page down\",\n bindKey: bindKey(null, \"Option-PageDown\"),\n exec: function(editor) { editor.scrollPageDown(); },\n readOnly: true\n}, {\n name: \"gotopagedown\",\n description: \"Go to page down\",\n bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n exec: function(editor) { editor.gotoPageDown(); },\n readOnly: true\n}, {\n name: \"selectpageup\",\n description: \"Select page up\",\n bindKey: \"Shift-PageUp\",\n exec: function(editor) { editor.selectPageUp(); },\n readOnly: true\n}, {\n name: \"pageup\",\n description: \"Page up\",\n bindKey: bindKey(null, \"Option-PageUp\"),\n exec: function(editor) { editor.scrollPageUp(); },\n readOnly: true\n}, {\n name: \"gotopageup\",\n description: \"Go to page up\",\n bindKey: \"PageUp\",\n exec: function(editor) { editor.gotoPageUp(); },\n readOnly: true\n}, {\n name: \"scrollup\",\n description: \"Scroll up\",\n bindKey: bindKey(\"Ctrl-Up\", null),\n exec: function(e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n}, {\n name: \"scrolldown\",\n description: \"Scroll down\",\n bindKey: bindKey(\"Ctrl-Down\", null),\n exec: function(e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n}, {\n name: \"selectlinestart\",\n description: \"Select line start\",\n bindKey: \"Shift-Home\",\n exec: function(editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectlineend\",\n description: \"Select line end\",\n bindKey: \"Shift-End\",\n exec: function(editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"togglerecording\",\n description: \"Toggle recording\",\n bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n exec: function(editor) { editor.commands.toggleRecording(editor); },\n readOnly: true\n}, {\n name: \"replaymacro\",\n description: \"Replay macro\",\n bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n exec: function(editor) { editor.commands.replay(editor); },\n readOnly: true\n}, {\n name: \"jumptomatching\",\n description: \"Jump to matching\",\n bindKey: bindKey(\"Ctrl-\\\\|Ctrl-P\", \"Command-\\\\\"),\n exec: function(editor) { editor.jumpToMatching(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"selecttomatching\",\n description: \"Select to matching\",\n bindKey: bindKey(\"Ctrl-Shift-\\\\|Ctrl-Shift-P\", \"Command-Shift-\\\\\"),\n exec: function(editor) { editor.jumpToMatching(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"expandToMatching\",\n description: \"Expand to matching\",\n bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n exec: function(editor) { editor.jumpToMatching(true, true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"passKeysToBrowser\",\n description: \"Pass keys to browser\",\n bindKey: bindKey(null, null),\n exec: function() {},\n passEvent: true,\n readOnly: true\n}, {\n name: \"copy\",\n description: \"Copy\",\n exec: function(editor) {\n },\n readOnly: true\n},\n{\n name: \"cut\",\n description: \"Cut\",\n exec: function(editor) {\n var cutLine = editor.$copyWithEmptySelection && editor.selection.isEmpty();\n var range = cutLine ? editor.selection.getLineRange() : editor.selection.getRange();\n editor._emit(\"cut\", range);\n\n if (!range.isEmpty())\n editor.session.remove(range);\n editor.clearSelection();\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"paste\",\n description: \"Paste\",\n exec: function(editor, args) {\n editor.$handlePaste(args);\n },\n scrollIntoView: \"cursor\"\n}, {\n name: \"removeline\",\n description: \"Remove line\",\n bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\n exec: function(editor) { editor.removeLines(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEachLine\"\n}, {\n name: \"duplicateSelection\",\n description: \"Duplicate selection\",\n bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n exec: function(editor) { editor.duplicateSelection(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"sortlines\",\n description: \"Sort lines\",\n bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n exec: function(editor) { editor.sortLines(); },\n scrollIntoView: \"selection\",\n multiSelectAction: \"forEachLine\"\n}, {\n name: \"togglecomment\",\n description: \"Toggle comment\",\n bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n exec: function(editor) { editor.toggleCommentLines(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"toggleBlockComment\",\n description: \"Toggle block comment\",\n bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n exec: function(editor) { editor.toggleBlockComment(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"modifyNumberUp\",\n description: \"Modify number up\",\n bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n exec: function(editor) { editor.modifyNumber(1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"modifyNumberDown\",\n description: \"Modify number down\",\n bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n exec: function(editor) { editor.modifyNumber(-1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"replace\",\n description: \"Replace\",\n bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor, true);});\n }\n}, {\n name: \"undo\",\n description: \"Undo\",\n bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n exec: function(editor) { editor.undo(); }\n}, {\n name: \"redo\",\n description: \"Redo\",\n bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n exec: function(editor) { editor.redo(); }\n}, {\n name: \"copylinesup\",\n description: \"Copy lines up\",\n bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n exec: function(editor) { editor.copyLinesUp(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"movelinesup\",\n description: \"Move lines up\",\n bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n exec: function(editor) { editor.moveLinesUp(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"copylinesdown\",\n description: \"Copy lines down\",\n bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n exec: function(editor) { editor.copyLinesDown(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"movelinesdown\",\n description: \"Move lines down\",\n bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n exec: function(editor) { editor.moveLinesDown(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"del\",\n description: \"Delete\",\n bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n exec: function(editor) { editor.remove(\"right\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"backspace\",\n description: \"Backspace\",\n bindKey: bindKey(\n \"Shift-Backspace|Backspace\",\n \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"\n ),\n exec: function(editor) { editor.remove(\"left\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"cut_or_delete\",\n description: \"Cut or delete\",\n bindKey: bindKey(\"Shift-Delete\", null),\n exec: function(editor) { \n if (editor.selection.isEmpty()) {\n editor.remove(\"left\");\n } else {\n return false;\n }\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removetolinestart\",\n description: \"Remove to line start\",\n bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\n exec: function(editor) { editor.removeToLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removetolineend\",\n description: \"Remove to line end\",\n bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K|Command-Delete\"),\n exec: function(editor) { editor.removeToLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removetolinestarthard\",\n description: \"Remove to line start hard\",\n bindKey: bindKey(\"Ctrl-Shift-Backspace\", null),\n exec: function(editor) {\n var range = editor.selection.getRange();\n range.start.column = 0;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removetolineendhard\",\n description: \"Remove to line end hard\",\n bindKey: bindKey(\"Ctrl-Shift-Delete\", null),\n exec: function(editor) {\n var range = editor.selection.getRange();\n range.end.column = Number.MAX_VALUE;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removewordleft\",\n description: \"Remove word left\",\n bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n exec: function(editor) { editor.removeWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removewordright\",\n description: \"Remove word right\",\n bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n exec: function(editor) { editor.removeWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"outdent\",\n description: \"Outdent\",\n bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n exec: function(editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"indent\",\n description: \"Indent\",\n bindKey: bindKey(\"Tab\", \"Tab\"),\n exec: function(editor) { editor.indent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"blockoutdent\",\n description: \"Block outdent\",\n bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n exec: function(editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"blockindent\",\n description: \"Block indent\",\n bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n exec: function(editor) { editor.blockIndent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"insertstring\",\n description: \"Insert string\",\n exec: function(editor, str) { editor.insert(str); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"inserttext\",\n description: \"Insert text\",\n exec: function(editor, args) {\n editor.insert(lang.stringRepeat(args.text || \"\", args.times || 1));\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"splitline\",\n description: \"Split line\",\n bindKey: bindKey(null, \"Ctrl-O\"),\n exec: function(editor) { editor.splitLine(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"transposeletters\",\n description: \"Transpose letters\",\n bindKey: bindKey(\"Alt-Shift-X\", \"Ctrl-T\"),\n exec: function(editor) { editor.transposeLetters(); },\n multiSelectAction: function(editor) {editor.transposeSelections(1); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"touppercase\",\n description: \"To uppercase\",\n bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n exec: function(editor) { editor.toUpperCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"tolowercase\",\n description: \"To lowercase\",\n bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n exec: function(editor) { editor.toLowerCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"autoindent\",\n description: \"Auto Indent\",\n bindKey: bindKey(null, null),\n exec: function(editor) { editor.autoIndent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"animate\"\n}, {\n name: \"expandtoline\",\n description: \"Expand to line\",\n bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n exec: function(editor) {\n var range = editor.selection.getRange();\n\n range.start.column = range.end.column = 0;\n range.end.row++;\n editor.selection.setRange(range, false);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"joinlines\",\n description: \"Join lines\",\n bindKey: bindKey(null, null),\n exec: function(editor) {\n var isBackwards = editor.selection.isBackwards();\n var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\n var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\n var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\n var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\n var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\n var insertLine = editor.session.doc.getLine(selectionStart.row);\n\n for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\n var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\n if (curLine.length !== 0) {\n curLine = \" \" + curLine;\n }\n insertLine += curLine;\n }\n\n if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\n insertLine += editor.session.doc.getNewLineCharacter();\n }\n\n editor.clearSelection();\n editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n\n if (selectedCount > 0) {\n editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\n } else {\n firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;\n editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\n }\n },\n multiSelectAction: \"forEach\",\n readOnly: true\n}, {\n name: \"invertSelection\",\n description: \"Invert selection\",\n bindKey: bindKey(null, null),\n exec: function(editor) {\n var endRow = editor.session.doc.getLength() - 1;\n var endCol = editor.session.doc.getLine(endRow).length;\n var ranges = editor.selection.rangeList.ranges;\n var newRanges = [];\n if (ranges.length < 1) {\n ranges = [editor.selection.getRange()];\n }\n\n for (var i = 0; i < ranges.length; i++) {\n if (i == (ranges.length - 1)) {\n if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\n newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\n }\n }\n\n if (i === 0) {\n if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\n newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\n }\n } else {\n newRanges.push(new Range(ranges[i-1].end.row, ranges[i-1].end.column, ranges[i].start.row, ranges[i].start.column));\n }\n }\n\n editor.exitMultiSelectMode();\n editor.clearSelection();\n\n for(var i = 0; i < newRanges.length; i++) {\n editor.selection.addRange(newRanges[i], false);\n }\n },\n readOnly: true,\n scrollIntoView: \"none\"\n}, {\n name: \"addLineAfter\",\n description: \"Add new line after the current line\",\n exec: function(editor) {\n editor.selection.clearSelection();\n editor.navigateLineEnd();\n editor.insert(\"\\n\");\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"addLineBefore\",\n description: \"Add new line before the current line\",\n exec: function(editor) {\n editor.selection.clearSelection();\n var cursor = editor.getCursorPosition();\n editor.selection.moveTo(cursor.row - 1, Number.MAX_VALUE);\n editor.insert(\"\\n\");\n if (cursor.row === 0) editor.navigateUp();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"openCommandPallete\",\n description: \"Open command pallete\",\n bindKey: bindKey(\"F1\", \"F1\"),\n exec: function(editor) {\n editor.prompt({ $type: \"commands\" });\n },\n readOnly: true\n}, {\n name: \"modeSelect\",\n description: \"Change language mode...\",\n bindKey: bindKey(null, null),\n exec: function(editor) {\n editor.prompt({ $type: \"modes\" });\n },\n readOnly: true\n}];\n\nfor (var i = 1; i < 9; i++) {\n exports.commands.push({\n name: \"foldToLevel\" + i,\n description: \"Fold To Level \" + i,\n level: i,\n exec: function(editor) { editor.session.foldToLevel(this.level); },\n scrollIntoView: \"center\",\n readOnly: true\n });\n}\n\n});\n\nace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\",\"ace/clipboard\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./lib/fixoldbrowsers\");\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar useragent = require(\"./lib/useragent\");\nvar TextInput = require(\"./keyboard/textinput\").TextInput;\nvar MouseHandler = require(\"./mouse/mouse_handler\").MouseHandler;\nvar FoldHandler = require(\"./mouse/fold_handler\").FoldHandler;\nvar KeyBinding = require(\"./keyboard/keybinding\").KeyBinding;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Search = require(\"./search\").Search;\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar CommandManager = require(\"./commands/command_manager\").CommandManager;\nvar defaultCommands = require(\"./commands/default_commands\").commands;\nvar config = require(\"./config\");\nvar TokenIterator = require(\"./token_iterator\").TokenIterator;\n\nvar clipboard = require(\"./clipboard\");\nvar Editor = function(renderer, session, options) {\n this.$toDestroy = [];\n var container = renderer.getContainerElement();\n this.container = container;\n this.renderer = renderer;\n this.id = \"editor\" + (++Editor.$uid);\n\n this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\n if (typeof document == \"object\") {\n this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\n this.renderer.textarea = this.textInput.getElement();\n this.$mouseHandler = new MouseHandler(this);\n new FoldHandler(this);\n }\n\n this.keyBinding = new KeyBinding(this);\n\n this.$search = new Search().set({\n wrap: true\n });\n\n this.$historyTracker = this.$historyTracker.bind(this);\n this.commands.on(\"exec\", this.$historyTracker);\n\n this.$initOperationListeners();\n \n this._$emitInputEvent = lang.delayedCall(function() {\n this._signal(\"input\", {});\n if (this.session && this.session.bgTokenizer)\n this.session.bgTokenizer.scheduleStart();\n }.bind(this));\n \n this.on(\"change\", function(_, _self) {\n _self._$emitInputEvent.schedule(31);\n });\n\n this.setSession(session || options && options.session || new EditSession(\"\"));\n config.resetOptions(this);\n if (options)\n this.setOptions(options);\n config._signal(\"editor\", this);\n};\n\nEditor.$uid = 0;\n\n(function(){\n\n oop.implement(this, EventEmitter);\n\n this.$initOperationListeners = function() {\n this.commands.on(\"exec\", this.startOperation.bind(this), true);\n this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n\n this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this, true));\n this.on(\"change\", function() {\n if (!this.curOp) {\n this.startOperation();\n this.curOp.selectionBefore = this.$lastSel;\n }\n this.curOp.docChanged = true;\n }.bind(this), true);\n \n this.on(\"changeSelection\", function() {\n if (!this.curOp) {\n this.startOperation();\n this.curOp.selectionBefore = this.$lastSel;\n }\n this.curOp.selectionChanged = true;\n }.bind(this), true);\n };\n\n this.curOp = null;\n this.prevOp = {};\n this.startOperation = function(commandEvent) {\n if (this.curOp) {\n if (!commandEvent || this.curOp.command)\n return;\n this.prevOp = this.curOp;\n }\n if (!commandEvent) {\n this.previousCommand = null;\n commandEvent = {};\n }\n\n this.$opResetTimer.schedule();\n this.curOp = this.session.curOp = {\n command: commandEvent.command || {},\n args: commandEvent.args,\n scrollTop: this.renderer.scrollTop\n };\n this.curOp.selectionBefore = this.selection.toJSON();\n };\n\n this.endOperation = function(e) {\n if (this.curOp && this.session) {\n if (e && e.returnValue === false || !this.session)\n return (this.curOp = null);\n if (e == true && this.curOp.command && this.curOp.command.name == \"mouse\")\n return;\n this._signal(\"beforeEndOperation\");\n if (!this.curOp) return;\n var command = this.curOp.command;\n var scrollIntoView = command && command.scrollIntoView;\n if (scrollIntoView) {\n switch (scrollIntoView) {\n case \"center-animate\":\n scrollIntoView = \"animate\";\n case \"center\":\n this.renderer.scrollCursorIntoView(null, 0.5);\n break;\n case \"animate\":\n case \"cursor\":\n this.renderer.scrollCursorIntoView();\n break;\n case \"selectionPart\":\n var range = this.selection.getRange();\n var config = this.renderer.layerConfig;\n if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\n this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\n }\n break;\n default:\n break;\n }\n if (scrollIntoView == \"animate\")\n this.renderer.animateScrolling(this.curOp.scrollTop);\n }\n var sel = this.selection.toJSON();\n this.curOp.selectionAfter = sel;\n this.$lastSel = this.selection.toJSON();\n this.session.getUndoManager().addSelection(sel);\n this.prevOp = this.curOp;\n this.curOp = null;\n }\n };\n this.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\n this.$historyTracker = function(e) {\n if (!this.$mergeUndoDeltas)\n return;\n\n var prev = this.prevOp;\n var mergeableCommands = this.$mergeableCommands;\n var shouldMerge = prev.command && (e.command.name == prev.command.name);\n if (e.command.name == \"insertstring\") {\n var text = e.args;\n if (this.mergeNextCommand === undefined)\n this.mergeNextCommand = true;\n\n shouldMerge = shouldMerge\n && this.mergeNextCommand // previous command allows to coalesce with\n && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\n\n this.mergeNextCommand = true;\n } else {\n shouldMerge = shouldMerge\n && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n }\n\n if (\n this.$mergeUndoDeltas != \"always\"\n && Date.now() - this.sequenceStartTime > 2000\n ) {\n shouldMerge = false; // the sequence is too long\n }\n\n if (shouldMerge)\n this.session.mergeUndoDeltas = true;\n else if (mergeableCommands.indexOf(e.command.name) !== -1)\n this.sequenceStartTime = Date.now();\n };\n this.setKeyboardHandler = function(keyboardHandler, cb) {\n if (keyboardHandler && typeof keyboardHandler === \"string\" && keyboardHandler != \"ace\") {\n this.$keybindingId = keyboardHandler;\n var _self = this;\n config.loadModule([\"keybinding\", keyboardHandler], function(module) {\n if (_self.$keybindingId == keyboardHandler)\n _self.keyBinding.setKeyboardHandler(module && module.handler);\n cb && cb();\n });\n } else {\n this.$keybindingId = null;\n this.keyBinding.setKeyboardHandler(keyboardHandler);\n cb && cb();\n }\n };\n this.getKeyboardHandler = function() {\n return this.keyBinding.getKeyboardHandler();\n };\n this.setSession = function(session) {\n if (this.session == session)\n return;\n if (this.curOp) this.endOperation();\n this.curOp = {};\n\n var oldSession = this.session;\n if (oldSession) {\n this.session.off(\"change\", this.$onDocumentChange);\n this.session.off(\"changeMode\", this.$onChangeMode);\n this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.session.off(\"changeTabSize\", this.$onChangeTabSize);\n this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\n this.session.off(\"changeFold\", this.$onChangeFold);\n this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\n this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\n this.session.off(\"changeOverwrite\", this.$onCursorChange);\n this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\n this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\n\n var selection = this.session.getSelection();\n selection.off(\"changeCursor\", this.$onCursorChange);\n selection.off(\"changeSelection\", this.$onSelectionChange);\n }\n\n this.session = session;\n if (session) {\n this.$onDocumentChange = this.onDocumentChange.bind(this);\n session.on(\"change\", this.$onDocumentChange);\n this.renderer.setSession(session);\n \n this.$onChangeMode = this.onChangeMode.bind(this);\n session.on(\"changeMode\", this.$onChangeMode);\n \n this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n \n this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n session.on(\"changeTabSize\", this.$onChangeTabSize);\n \n this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n \n this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n \n this.$onChangeFold = this.onChangeFold.bind(this);\n session.on(\"changeFold\", this.$onChangeFold);\n \n this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n \n this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n \n this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n \n this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n \n this.$onCursorChange = this.onCursorChange.bind(this);\n this.session.on(\"changeOverwrite\", this.$onCursorChange);\n \n this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n \n this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n \n this.selection = session.getSelection();\n this.selection.on(\"changeCursor\", this.$onCursorChange);\n \n this.$onSelectionChange = this.onSelectionChange.bind(this);\n this.selection.on(\"changeSelection\", this.$onSelectionChange);\n \n this.onChangeMode();\n \n this.onCursorChange();\n \n this.onScrollTopChange();\n this.onScrollLeftChange();\n this.onSelectionChange();\n this.onChangeFrontMarker();\n this.onChangeBackMarker();\n this.onChangeBreakpoint();\n this.onChangeAnnotation();\n this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\n this.renderer.updateFull();\n } else {\n this.selection = null;\n this.renderer.setSession(session);\n }\n\n this._signal(\"changeSession\", {\n session: session,\n oldSession: oldSession\n });\n \n this.curOp = null;\n \n oldSession && oldSession._signal(\"changeEditor\", {oldEditor: this});\n session && session._signal(\"changeEditor\", {editor: this});\n \n if (session && session.bgTokenizer)\n session.bgTokenizer.scheduleStart();\n };\n this.getSession = function() {\n return this.session;\n };\n this.setValue = function(val, cursorPos) {\n this.session.doc.setValue(val);\n\n if (!cursorPos)\n this.selectAll();\n else if (cursorPos == 1)\n this.navigateFileEnd();\n else if (cursorPos == -1)\n this.navigateFileStart();\n\n return val;\n };\n this.getValue = function() {\n return this.session.getValue();\n };\n this.getSelection = function() {\n return this.selection;\n };\n this.resize = function(force) {\n this.renderer.onResize(force);\n };\n this.setTheme = function(theme, cb) {\n this.renderer.setTheme(theme, cb);\n };\n this.getTheme = function() {\n return this.renderer.getTheme();\n };\n this.setStyle = function(style) {\n this.renderer.setStyle(style);\n };\n this.unsetStyle = function(style) {\n this.renderer.unsetStyle(style);\n };\n this.getFontSize = function () {\n return this.getOption(\"fontSize\") ||\n dom.computedStyle(this.container).fontSize;\n };\n this.setFontSize = function(size) {\n this.setOption(\"fontSize\", size);\n };\n\n this.$highlightBrackets = function() {\n if (this.$highlightPending) {\n return;\n }\n var self = this;\n this.$highlightPending = true;\n setTimeout(function () {\n self.$highlightPending = false;\n var session = self.session;\n if (!session || !session.bgTokenizer) return;\n if (session.$bracketHighlight) {\n session.$bracketHighlight.markerIds.forEach(function(id) {\n session.removeMarker(id);\n });\n session.$bracketHighlight = null;\n }\n var ranges = session.getMatchingBracketRanges(self.getCursorPosition());\n if (!ranges && session.$mode.getMatching) \n ranges = session.$mode.getMatching(self.session);\n if (!ranges)\n return;\n\n var markerType = \"ace_bracket\";\n if (!Array.isArray(ranges)) {\n ranges = [ranges];\n } else if (ranges.length == 1) {\n markerType = \"ace_error_bracket\";\n }\n if (ranges.length == 2) {\n if (Range.comparePoints(ranges[0].end, ranges[1].start) == 0)\n ranges = [Range.fromPoints(ranges[0].start, ranges[1].end)];\n else if (Range.comparePoints(ranges[0].start, ranges[1].end) == 0)\n ranges = [Range.fromPoints(ranges[1].start, ranges[0].end)];\n }\n\n session.$bracketHighlight = {\n ranges: ranges,\n markerIds: ranges.map(function(range) {\n return session.addMarker(range, markerType, \"text\");\n })\n };\n }, 50);\n };\n this.$highlightTags = function() {\n if (this.$highlightTagPending)\n return;\n var self = this;\n this.$highlightTagPending = true;\n setTimeout(function() {\n self.$highlightTagPending = false;\n \n var session = self.session;\n if (!session || !session.bgTokenizer) return;\n \n var pos = self.getCursorPosition();\n var iterator = new TokenIterator(self.session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n \n if (!token || !/\\b(?:tag-open|tag-name)/.test(token.type)) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n return;\n }\n \n if (token.type.indexOf(\"tag-open\") !== -1) {\n token = iterator.stepForward();\n if (!token)\n return;\n }\n \n var tag = token.value;\n var currentTag = token.value;\n var depth = 0;\n var prevToken = iterator.stepBackward();\n \n if (prevToken.value === '<'){\n do {\n prevToken = token;\n token = iterator.stepForward();\n\n if (token) {\n if (token.type.indexOf('tag-name') !== -1) {\n currentTag = token.value;\n if (tag === currentTag) {\n if (prevToken.value === '<') {\n depth++;\n } else if (prevToken.value === '</') {\n depth--;\n }\n }\n } else if (tag === currentTag && token.value === '/>') { // self closing tag\n depth--;\n }\n }\n \n } while (token && depth >= 0);\n } else {\n do {\n token = prevToken;\n prevToken = iterator.stepBackward();\n\n if (token) {\n if (token.type.indexOf('tag-name') !== -1) {\n if (tag === token.value) {\n if (prevToken.value === '<') {\n depth++;\n } else if (prevToken.value === '</') {\n depth--;\n }\n }\n } else if (token.value === '/>') { // self closing tag\n var stepCount = 0;\n var tmpToken = prevToken;\n while (tmpToken) {\n if (tmpToken.type.indexOf('tag-name') !== -1 && tmpToken.value === tag) {\n depth--;\n break;\n } else if (tmpToken.value === '<') {\n break;\n }\n tmpToken = iterator.stepBackward();\n stepCount++;\n }\n for (var i = 0; i < stepCount; i++) {\n iterator.stepForward();\n }\n }\n }\n } while (prevToken && depth <= 0);\n iterator.stepForward();\n }\n \n if (!token) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n return;\n }\n \n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn();\n var range = new Range(row, column, row, column+token.value.length);\n var sbm = session.$backMarkers[session.$tagHighlight];\n if (session.$tagHighlight && sbm != undefined && range.compareRange(sbm.range) !== 0) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n }\n \n if (!session.$tagHighlight)\n session.$tagHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\n }, 50);\n };\n this.focus = function() {\n var _self = this;\n setTimeout(function() {\n if (!_self.isFocused())\n _self.textInput.focus();\n });\n this.textInput.focus();\n };\n this.isFocused = function() {\n return this.textInput.isFocused();\n };\n this.blur = function() {\n this.textInput.blur();\n };\n this.onFocus = function(e) {\n if (this.$isFocused)\n return;\n this.$isFocused = true;\n this.renderer.showCursor();\n this.renderer.visualizeFocus();\n this._emit(\"focus\", e);\n };\n this.onBlur = function(e) {\n if (!this.$isFocused)\n return;\n this.$isFocused = false;\n this.renderer.hideCursor();\n this.renderer.visualizeBlur();\n this._emit(\"blur\", e);\n };\n\n this.$cursorChange = function() {\n this.renderer.updateCursor();\n this.$highlightBrackets();\n this.$highlightTags();\n this.$updateHighlightActiveLine();\n };\n this.onDocumentChange = function(delta) {\n var wrap = this.session.$useWrapMode;\n var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity);\n this.renderer.updateLines(delta.start.row, lastRow, wrap);\n\n this._signal(\"change\", delta);\n this.$cursorChange();\n };\n\n this.onTokenizerUpdate = function(e) {\n var rows = e.data;\n this.renderer.updateLines(rows.first, rows.last);\n };\n\n\n this.onScrollTopChange = function() {\n this.renderer.scrollToY(this.session.getScrollTop());\n };\n\n this.onScrollLeftChange = function() {\n this.renderer.scrollToX(this.session.getScrollLeft());\n };\n this.onCursorChange = function() {\n this.$cursorChange();\n this._signal(\"changeSelection\");\n };\n\n this.$updateHighlightActiveLine = function() {\n var session = this.getSession();\n\n var highlight;\n if (this.$highlightActiveLine) {\n if (this.$selectionStyle != \"line\" || !this.selection.isMultiLine())\n highlight = this.getCursorPosition();\n if (this.renderer.theme && this.renderer.theme.$selectionColorConflict && !this.selection.isEmpty())\n highlight = false;\n if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1))\n highlight = false;\n }\n\n if (session.$highlightLineMarker && !highlight) {\n session.removeMarker(session.$highlightLineMarker.id);\n session.$highlightLineMarker = null;\n } else if (!session.$highlightLineMarker && highlight) {\n var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\n range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\n session.$highlightLineMarker = range;\n } else if (highlight) {\n session.$highlightLineMarker.start.row = highlight.row;\n session.$highlightLineMarker.end.row = highlight.row;\n session.$highlightLineMarker.start.column = highlight.column;\n session._signal(\"changeBackMarker\");\n }\n };\n\n this.onSelectionChange = function(e) {\n var session = this.session;\n\n if (session.$selectionMarker) {\n session.removeMarker(session.$selectionMarker);\n }\n session.$selectionMarker = null;\n\n if (!this.selection.isEmpty()) {\n var range = this.selection.getRange();\n var style = this.getSelectionStyle();\n session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\n } else {\n this.$updateHighlightActiveLine();\n }\n\n var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n this.session.highlight(re);\n\n this._signal(\"changeSelection\");\n };\n\n this.$getSelectionHighLightRegexp = function() {\n var session = this.session;\n\n var selection = this.getSelectionRange();\n if (selection.isEmpty() || selection.isMultiLine())\n return;\n\n var startColumn = selection.start.column;\n var endColumn = selection.end.column;\n var line = session.getLine(selection.start.row);\n \n var needle = line.substring(startColumn, endColumn);\n if (needle.length > 5000 || !/[\\w\\d]/.test(needle))\n return;\n\n var re = this.$search.$assembleRegExp({\n wholeWord: true,\n caseSensitive: true,\n needle: needle\n });\n \n var wordWithBoundary = line.substring(startColumn - 1, endColumn + 1);\n if (!re.test(wordWithBoundary))\n return;\n \n return re;\n };\n\n\n this.onChangeFrontMarker = function() {\n this.renderer.updateFrontMarkers();\n };\n\n this.onChangeBackMarker = function() {\n this.renderer.updateBackMarkers();\n };\n\n\n this.onChangeBreakpoint = function() {\n this.renderer.updateBreakpoints();\n };\n\n this.onChangeAnnotation = function() {\n this.renderer.setAnnotations(this.session.getAnnotations());\n };\n\n\n this.onChangeMode = function(e) {\n this.renderer.updateText();\n this._emit(\"changeMode\", e);\n };\n\n\n this.onChangeWrapLimit = function() {\n this.renderer.updateFull();\n };\n\n this.onChangeWrapMode = function() {\n this.renderer.onResize(true);\n };\n\n\n this.onChangeFold = function() {\n this.$updateHighlightActiveLine();\n this.renderer.updateFull();\n };\n this.getSelectedText = function() {\n return this.session.getTextRange(this.getSelectionRange());\n };\n this.getCopyText = function() {\n var text = this.getSelectedText();\n var nl = this.session.doc.getNewLineCharacter();\n var copyLine= false;\n if (!text && this.$copyWithEmptySelection) {\n copyLine = true;\n var ranges = this.selection.getAllRanges();\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n if (i && ranges[i - 1].start.row == range.start.row)\n continue;\n text += this.session.getLine(range.start.row) + nl;\n }\n }\n var e = {text: text};\n this._signal(\"copy\", e);\n clipboard.lineMode = copyLine ? e.text : false;\n return e.text;\n };\n this.onCopy = function() {\n this.commands.exec(\"copy\", this);\n };\n this.onCut = function() {\n this.commands.exec(\"cut\", this);\n };\n this.onPaste = function(text, event) {\n var e = {text: text, event: event};\n this.commands.exec(\"paste\", this, e);\n };\n \n this.$handlePaste = function(e) {\n if (typeof e == \"string\") \n e = {text: e};\n this._signal(\"paste\", e);\n var text = e.text;\n\n var lineMode = text === clipboard.lineMode;\n var session = this.session;\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\n if (lineMode)\n session.insert({ row: this.selection.lead.row, column: 0 }, text);\n else\n this.insert(text);\n } else if (lineMode) {\n this.selection.rangeList.ranges.forEach(function(range) {\n session.insert({ row: range.start.row, column: 0 }, text);\n });\n } else {\n var lines = text.split(/\\r\\n|\\r|\\n/);\n var ranges = this.selection.rangeList.ranges;\n \n var isFullLine = lines.length == 2 && (!lines[0] || !lines[1]);\n if (lines.length != ranges.length || isFullLine)\n return this.commands.exec(\"insertstring\", this, text);\n \n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.isEmpty())\n session.remove(range);\n \n session.insert(range.start, lines[i]);\n }\n }\n };\n\n this.execCommand = function(command, args) {\n return this.commands.exec(command, this, args);\n };\n this.insert = function(text, pasted) {\n var session = this.session;\n var mode = session.getMode();\n var cursor = this.getCursorPosition();\n\n if (this.getBehavioursEnabled() && !pasted) {\n var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\n if (transform) {\n if (text !== transform.text) {\n if (!this.inVirtualSelectionMode) {\n this.session.mergeUndoDeltas = false;\n this.mergeNextCommand = false;\n }\n }\n text = transform.text;\n\n }\n }\n \n if (text == \"\\t\")\n text = this.session.getTabString();\n if (!this.selection.isEmpty()) {\n var range = this.getSelectionRange();\n cursor = this.session.remove(range);\n this.clearSelection();\n }\n else if (this.session.getOverwrite() && text.indexOf(\"\\n\") == -1) {\n var range = new Range.fromPoints(cursor, cursor);\n range.end.column += text.length;\n this.session.remove(range);\n }\n\n if (text == \"\\n\" || text == \"\\r\\n\") {\n var line = session.getLine(cursor.row);\n if (cursor.column > line.search(/\\S|$/)) {\n var d = line.substr(cursor.column).search(/\\S|$/);\n session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n }\n }\n this.clearSelection();\n\n var start = cursor.column;\n var lineState = session.getState(cursor.row);\n var line = session.getLine(cursor.row);\n var shouldOutdent = mode.checkOutdent(lineState, line, text);\n session.insert(cursor, text);\n\n if (transform && transform.selection) {\n if (transform.selection.length == 2) { // Transform relative to the current column\n this.selection.setSelectionRange(\n new Range(cursor.row, start + transform.selection[0],\n cursor.row, start + transform.selection[1]));\n } else { // Transform relative to the current row.\n this.selection.setSelectionRange(\n new Range(cursor.row + transform.selection[0],\n transform.selection[1],\n cursor.row + transform.selection[2],\n transform.selection[3]));\n }\n }\n if (this.$enableAutoIndent) {\n if (session.getDocument().isNewLine(text)) {\n var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n\n session.insert({row: cursor.row+1, column: 0}, lineIndent);\n }\n if (shouldOutdent)\n mode.autoOutdent(lineState, session, cursor.row);\n }\n };\n\n this.autoIndent = function () {\n var session = this.session;\n var mode = session.getMode();\n\n var startRow, endRow;\n if (this.selection.isEmpty()) {\n startRow = 0;\n endRow = session.doc.getLength() - 1;\n } else {\n var selectedRange = this.getSelectionRange();\n\n startRow = selectedRange.start.row;\n endRow = selectedRange.end.row;\n }\n\n var prevLineState = \"\";\n var prevLine = \"\";\n var lineIndent = \"\";\n var line, currIndent, range;\n var tab = session.getTabString();\n\n for (var row = startRow; row <= endRow; row++) {\n if (row > 0) {\n prevLineState = session.getState(row - 1);\n prevLine = session.getLine(row - 1);\n lineIndent = mode.getNextLineIndent(prevLineState, prevLine, tab);\n }\n\n line = session.getLine(row);\n currIndent = mode.$getIndent(line);\n if (lineIndent !== currIndent) {\n if (currIndent.length > 0) {\n range = new Range(row, 0, row, currIndent.length);\n session.remove(range);\n }\n if (lineIndent.length > 0) {\n session.insert({row: row, column: 0}, lineIndent);\n }\n }\n\n mode.autoOutdent(prevLineState, session, row);\n }\n };\n\n\n this.onTextInput = function(text, composition) {\n if (!composition)\n return this.keyBinding.onTextInput(text);\n \n this.startOperation({command: { name: \"insertstring\" }});\n var applyComposition = this.applyComposition.bind(this, text, composition);\n if (this.selection.rangeCount)\n this.forEachSelection(applyComposition);\n else\n applyComposition();\n this.endOperation();\n };\n \n this.applyComposition = function(text, composition) {\n if (composition.extendLeft || composition.extendRight) {\n var r = this.selection.getRange();\n r.start.column -= composition.extendLeft;\n r.end.column += composition.extendRight;\n if (r.start.column < 0) {\n r.start.row--;\n r.start.column += this.session.getLine(r.start.row).length + 1;\n }\n this.selection.setRange(r);\n if (!text && !r.isEmpty())\n this.remove();\n }\n if (text || !this.selection.isEmpty())\n this.insert(text, true);\n if (composition.restoreStart || composition.restoreEnd) {\n var r = this.selection.getRange();\n r.start.column -= composition.restoreStart;\n r.end.column -= composition.restoreEnd;\n this.selection.setRange(r);\n }\n };\n\n this.onCommandKey = function(e, hashId, keyCode) {\n return this.keyBinding.onCommandKey(e, hashId, keyCode);\n };\n this.setOverwrite = function(overwrite) {\n this.session.setOverwrite(overwrite);\n };\n this.getOverwrite = function() {\n return this.session.getOverwrite();\n };\n this.toggleOverwrite = function() {\n this.session.toggleOverwrite();\n };\n this.setScrollSpeed = function(speed) {\n this.setOption(\"scrollSpeed\", speed);\n };\n this.getScrollSpeed = function() {\n return this.getOption(\"scrollSpeed\");\n };\n this.setDragDelay = function(dragDelay) {\n this.setOption(\"dragDelay\", dragDelay);\n };\n this.getDragDelay = function() {\n return this.getOption(\"dragDelay\");\n };\n this.setSelectionStyle = function(val) {\n this.setOption(\"selectionStyle\", val);\n };\n this.getSelectionStyle = function() {\n return this.getOption(\"selectionStyle\");\n };\n this.setHighlightActiveLine = function(shouldHighlight) {\n this.setOption(\"highlightActiveLine\", shouldHighlight);\n };\n this.getHighlightActiveLine = function() {\n return this.getOption(\"highlightActiveLine\");\n };\n this.setHighlightGutterLine = function(shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n\n this.getHighlightGutterLine = function() {\n return this.getOption(\"highlightGutterLine\");\n };\n this.setHighlightSelectedWord = function(shouldHighlight) {\n this.setOption(\"highlightSelectedWord\", shouldHighlight);\n };\n this.getHighlightSelectedWord = function() {\n return this.$highlightSelectedWord;\n };\n\n this.setAnimatedScroll = function(shouldAnimate){\n this.renderer.setAnimatedScroll(shouldAnimate);\n };\n\n this.getAnimatedScroll = function(){\n return this.renderer.getAnimatedScroll();\n };\n this.setShowInvisibles = function(showInvisibles) {\n this.renderer.setShowInvisibles(showInvisibles);\n };\n this.getShowInvisibles = function() {\n return this.renderer.getShowInvisibles();\n };\n\n this.setDisplayIndentGuides = function(display) {\n this.renderer.setDisplayIndentGuides(display);\n };\n\n this.getDisplayIndentGuides = function() {\n return this.renderer.getDisplayIndentGuides();\n };\n this.setShowPrintMargin = function(showPrintMargin) {\n this.renderer.setShowPrintMargin(showPrintMargin);\n };\n this.getShowPrintMargin = function() {\n return this.renderer.getShowPrintMargin();\n };\n this.setPrintMarginColumn = function(showPrintMargin) {\n this.renderer.setPrintMarginColumn(showPrintMargin);\n };\n this.getPrintMarginColumn = function() {\n return this.renderer.getPrintMarginColumn();\n };\n this.setReadOnly = function(readOnly) {\n this.setOption(\"readOnly\", readOnly);\n };\n this.getReadOnly = function() {\n return this.getOption(\"readOnly\");\n };\n this.setBehavioursEnabled = function (enabled) {\n this.setOption(\"behavioursEnabled\", enabled);\n };\n this.getBehavioursEnabled = function () {\n return this.getOption(\"behavioursEnabled\");\n };\n this.setWrapBehavioursEnabled = function (enabled) {\n this.setOption(\"wrapBehavioursEnabled\", enabled);\n };\n this.getWrapBehavioursEnabled = function () {\n return this.getOption(\"wrapBehavioursEnabled\");\n };\n this.setShowFoldWidgets = function(show) {\n this.setOption(\"showFoldWidgets\", show);\n\n };\n this.getShowFoldWidgets = function() {\n return this.getOption(\"showFoldWidgets\");\n };\n\n this.setFadeFoldWidgets = function(fade) {\n this.setOption(\"fadeFoldWidgets\", fade);\n };\n\n this.getFadeFoldWidgets = function() {\n return this.getOption(\"fadeFoldWidgets\");\n };\n this.remove = function(dir) {\n if (this.selection.isEmpty()){\n if (dir == \"left\")\n this.selection.selectLeft();\n else\n this.selection.selectRight();\n }\n\n var range = this.getSelectionRange();\n if (this.getBehavioursEnabled()) {\n var session = this.session;\n var state = session.getState(range.start.row);\n var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\n\n if (range.end.column === 0) {\n var text = session.getTextRange(range);\n if (text[text.length - 1] == \"\\n\") {\n var line = session.getLine(range.end.row);\n if (/^\\s+$/.test(line)) {\n range.end.column = line.length;\n }\n }\n }\n if (new_range)\n range = new_range;\n }\n\n this.session.remove(range);\n this.clearSelection();\n };\n this.removeWordRight = function() {\n if (this.selection.isEmpty())\n this.selection.selectWordRight();\n\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeWordLeft = function() {\n if (this.selection.isEmpty())\n this.selection.selectWordLeft();\n\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeToLineStart = function() {\n if (this.selection.isEmpty())\n this.selection.selectLineStart();\n if (this.selection.isEmpty())\n this.selection.selectLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeToLineEnd = function() {\n if (this.selection.isEmpty())\n this.selection.selectLineEnd();\n\n var range = this.getSelectionRange();\n if (range.start.column == range.end.column && range.start.row == range.end.row) {\n range.end.column = 0;\n range.end.row++;\n }\n\n this.session.remove(range);\n this.clearSelection();\n };\n this.splitLine = function() {\n if (!this.selection.isEmpty()) {\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n }\n\n var cursor = this.getCursorPosition();\n this.insert(\"\\n\");\n this.moveCursorToPosition(cursor);\n };\n this.transposeLetters = function() {\n if (!this.selection.isEmpty()) {\n return;\n }\n\n var cursor = this.getCursorPosition();\n var column = cursor.column;\n if (column === 0)\n return;\n\n var line = this.session.getLine(cursor.row);\n var swap, range;\n if (column < line.length) {\n swap = line.charAt(column) + line.charAt(column-1);\n range = new Range(cursor.row, column-1, cursor.row, column+1);\n }\n else {\n swap = line.charAt(column-1) + line.charAt(column-2);\n range = new Range(cursor.row, column-2, cursor.row, column);\n }\n this.session.replace(range, swap);\n this.session.selection.moveToPosition(range.end);\n };\n this.toLowerCase = function() {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toLowerCase());\n this.selection.setSelectionRange(originalRange);\n };\n this.toUpperCase = function() {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toUpperCase());\n this.selection.setSelectionRange(originalRange);\n };\n this.indent = function() {\n var session = this.session;\n var range = this.getSelectionRange();\n\n if (range.start.row < range.end.row) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n } else if (range.start.column < range.end.column) {\n var text = session.getTextRange(range);\n if (!/^\\s+$/.test(text)) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n }\n \n var line = session.getLine(range.start.row);\n var position = range.start;\n var size = session.getTabSize();\n var column = session.documentToScreenColumn(position.row, position.column);\n\n if (this.session.getUseSoftTabs()) {\n var count = (size - column % size);\n var indentString = lang.stringRepeat(\" \", count);\n } else {\n var count = column % size;\n while (line[range.start.column - 1] == \" \" && count) {\n range.start.column--;\n count--;\n }\n this.selection.setSelectionRange(range);\n indentString = \"\\t\";\n }\n return this.insert(indentString);\n };\n this.blockIndent = function() {\n var rows = this.$getSelectedRows();\n this.session.indentRows(rows.first, rows.last, \"\\t\");\n };\n this.blockOutdent = function() {\n var selection = this.session.getSelection();\n this.session.outdentRows(selection.getRange());\n };\n this.sortLines = function() {\n var rows = this.$getSelectedRows();\n var session = this.session;\n\n var lines = [];\n for (var i = rows.first; i <= rows.last; i++)\n lines.push(session.getLine(i));\n\n lines.sort(function(a, b) {\n if (a.toLowerCase() < b.toLowerCase()) return -1;\n if (a.toLowerCase() > b.toLowerCase()) return 1;\n return 0;\n });\n\n var deleteRange = new Range(0, 0, 0, 0);\n for (var i = rows.first; i <= rows.last; i++) {\n var line = session.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n deleteRange.end.column = line.length;\n session.replace(deleteRange, lines[i-rows.first]);\n }\n };\n this.toggleCommentLines = function() {\n var state = this.session.getState(this.getCursorPosition().row);\n var rows = this.$getSelectedRows();\n this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\n };\n\n this.toggleBlockComment = function() {\n var cursor = this.getCursorPosition();\n var state = this.session.getState(cursor.row);\n var range = this.getSelectionRange();\n this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\n };\n this.getNumberAt = function(row, column) {\n var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n _numberRx.lastIndex = 0;\n\n var s = this.session.getLine(row);\n while (_numberRx.lastIndex < column) {\n var m = _numberRx.exec(s);\n if(m.index <= column && m.index+m[0].length >= column){\n var number = {\n value: m[0],\n start: m.index,\n end: m.index+m[0].length\n };\n return number;\n }\n }\n return null;\n };\n this.modifyNumber = function(amount) {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n var charRange = new Range(row, column-1, row, column);\n\n var c = this.session.getTextRange(charRange);\n if (!isNaN(parseFloat(c)) && isFinite(c)) {\n var nr = this.getNumberAt(row, column);\n if (nr) {\n var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\n var decimals = nr.start + nr.value.length - fp;\n\n var t = parseFloat(nr.value);\n t *= Math.pow(10, decimals);\n\n\n if(fp !== nr.end && column < fp){\n amount *= Math.pow(10, nr.end - column - 1);\n } else {\n amount *= Math.pow(10, nr.end - column);\n }\n\n t += amount;\n t /= Math.pow(10, decimals);\n var nnr = t.toFixed(decimals);\n var replaceRange = new Range(row, nr.start, row, nr.end);\n this.session.replace(replaceRange, nnr);\n this.moveCursorTo(row, Math.max(nr.start +1, column + nnr.length - nr.value.length));\n\n }\n } else {\n this.toggleWord();\n }\n };\n\n this.$toggleWordPairs = [\n [\"first\", \"last\"],\n [\"true\", \"false\"],\n [\"yes\", \"no\"],\n [\"width\", \"height\"],\n [\"top\", \"bottom\"],\n [\"right\", \"left\"],\n [\"on\", \"off\"],\n [\"x\", \"y\"],\n [\"get\", \"set\"],\n [\"max\", \"min\"],\n [\"horizontal\", \"vertical\"],\n [\"show\", \"hide\"],\n [\"add\", \"remove\"],\n [\"up\", \"down\"],\n [\"before\", \"after\"],\n [\"even\", \"odd\"],\n [\"in\", \"out\"],\n [\"inside\", \"outside\"],\n [\"next\", \"previous\"],\n [\"increase\", \"decrease\"],\n [\"attach\", \"detach\"],\n [\"&&\", \"||\"],\n [\"==\", \"!=\"]\n ];\n\n this.toggleWord = function () {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n this.selection.selectWord();\n var currentState = this.getSelectedText();\n var currWordStart = this.selection.getWordRange().start.column;\n var wordParts = currentState.replace(/([a-z]+|[A-Z]+)(?=[A-Z_]|$)/g, '$1 ').split(/\\s/);\n var delta = column - currWordStart - 1;\n if (delta < 0) delta = 0;\n var curLength = 0, itLength = 0;\n var that = this;\n if (currentState.match(/[A-Za-z0-9_]+/)) {\n wordParts.forEach(function (item, i) {\n itLength = curLength + item.length;\n if (delta >= curLength && delta <= itLength) {\n currentState = item;\n that.selection.clearSelection();\n that.moveCursorTo(row, curLength + currWordStart);\n that.selection.selectTo(row, itLength + currWordStart);\n }\n curLength = itLength;\n });\n }\n\n var wordPairs = this.$toggleWordPairs;\n var reg;\n for (var i = 0; i < wordPairs.length; i++) {\n var item = wordPairs[i];\n for (var j = 0; j <= 1; j++) {\n var negate = +!j;\n var firstCondition = currentState.match(new RegExp('^\\\\s?_?(' + lang.escapeRegExp(item[j]) + ')\\\\s?$', 'i'));\n if (firstCondition) {\n var secondCondition = currentState.match(new RegExp('([_]|^|\\\\s)(' + lang.escapeRegExp(firstCondition[1]) + ')($|\\\\s)', 'g'));\n if (secondCondition) {\n reg = currentState.replace(new RegExp(lang.escapeRegExp(item[j]), 'i'), function (result) {\n var res = item[negate];\n if (result.toUpperCase() == result) {\n res = res.toUpperCase();\n } else if (result.charAt(0).toUpperCase() == result.charAt(0)) {\n res = res.substr(0, 0) + item[negate].charAt(0).toUpperCase() + res.substr(1);\n }\n return res;\n });\n this.insert(reg);\n reg = \"\";\n }\n }\n }\n }\n };\n this.removeLines = function() {\n var rows = this.$getSelectedRows();\n this.session.removeFullLines(rows.first, rows.last);\n this.clearSelection();\n };\n\n this.duplicateSelection = function() {\n var sel = this.selection;\n var doc = this.session;\n var range = sel.getRange();\n var reverse = sel.isBackwards();\n if (range.isEmpty()) {\n var row = range.start.row;\n doc.duplicateLines(row, row);\n } else {\n var point = reverse ? range.start : range.end;\n var endPoint = doc.insert(point, doc.getTextRange(range), false);\n range.start = point;\n range.end = endPoint;\n\n sel.setSelectionRange(range, reverse);\n }\n };\n this.moveLinesDown = function() {\n this.$moveLines(1, false);\n };\n this.moveLinesUp = function() {\n this.$moveLines(-1, false);\n };\n this.moveText = function(range, toPosition, copy) {\n return this.session.moveText(range, toPosition, copy);\n };\n this.copyLinesUp = function() {\n this.$moveLines(-1, true);\n };\n this.copyLinesDown = function() {\n this.$moveLines(1, true);\n };\n this.$moveLines = function(dir, copy) {\n var rows, moved;\n var selection = this.selection;\n if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\n var range = selection.toOrientedRange();\n rows = this.$getSelectedRows(range);\n moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\n if (copy && dir == -1) moved = 0;\n range.moveBy(moved, 0);\n selection.fromOrientedRange(range);\n } else {\n var ranges = selection.rangeList.ranges;\n selection.rangeList.detach(this.session);\n this.inVirtualSelectionMode = true;\n \n var diff = 0;\n var totalDiff = 0;\n var l = ranges.length;\n for (var i = 0; i < l; i++) {\n var rangeIndex = i;\n ranges[i].moveBy(diff, 0);\n rows = this.$getSelectedRows(ranges[i]);\n var first = rows.first;\n var last = rows.last;\n while (++i < l) {\n if (totalDiff) ranges[i].moveBy(totalDiff, 0);\n var subRows = this.$getSelectedRows(ranges[i]);\n if (copy && subRows.first != last)\n break;\n else if (!copy && subRows.first > last + 1)\n break;\n last = subRows.last;\n }\n i--;\n diff = this.session.$moveLines(first, last, copy ? 0 : dir);\n if (copy && dir == -1) rangeIndex = i + 1;\n while (rangeIndex <= i) {\n ranges[rangeIndex].moveBy(diff, 0);\n rangeIndex++;\n }\n if (!copy) diff = 0;\n totalDiff += diff;\n }\n \n selection.fromOrientedRange(selection.ranges[0]);\n selection.rangeList.attach(this.session);\n this.inVirtualSelectionMode = false;\n }\n };\n this.$getSelectedRows = function(range) {\n range = (range || this.getSelectionRange()).collapseRows();\n\n return {\n first: this.session.getRowFoldStart(range.start.row),\n last: this.session.getRowFoldEnd(range.end.row)\n };\n };\n\n this.onCompositionStart = function(compositionState) {\n this.renderer.showComposition(compositionState);\n };\n\n this.onCompositionUpdate = function(text) {\n this.renderer.setCompositionText(text);\n };\n\n this.onCompositionEnd = function() {\n this.renderer.hideComposition();\n };\n this.getFirstVisibleRow = function() {\n return this.renderer.getFirstVisibleRow();\n };\n this.getLastVisibleRow = function() {\n return this.renderer.getLastVisibleRow();\n };\n this.isRowVisible = function(row) {\n return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\n };\n this.isRowFullyVisible = function(row) {\n return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\n };\n this.$getVisibleRowCount = function() {\n return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n };\n\n this.$moveByPage = function(dir, select) {\n var renderer = this.renderer;\n var config = this.renderer.layerConfig;\n var rows = dir * Math.floor(config.height / config.lineHeight);\n\n if (select === true) {\n this.selection.$moveSelection(function(){\n this.moveCursorBy(rows, 0);\n });\n } else if (select === false) {\n this.selection.moveCursorBy(rows, 0);\n this.selection.clearSelection();\n }\n\n var scrollTop = renderer.scrollTop;\n\n renderer.scrollBy(0, rows * config.lineHeight);\n if (select != null)\n renderer.scrollCursorIntoView(null, 0.5);\n\n renderer.animateScrolling(scrollTop);\n };\n this.selectPageDown = function() {\n this.$moveByPage(1, true);\n };\n this.selectPageUp = function() {\n this.$moveByPage(-1, true);\n };\n this.gotoPageDown = function() {\n this.$moveByPage(1, false);\n };\n this.gotoPageUp = function() {\n this.$moveByPage(-1, false);\n };\n this.scrollPageDown = function() {\n this.$moveByPage(1);\n };\n this.scrollPageUp = function() {\n this.$moveByPage(-1);\n };\n this.scrollToRow = function(row) {\n this.renderer.scrollToRow(row);\n };\n this.scrollToLine = function(line, center, animate, callback) {\n this.renderer.scrollToLine(line, center, animate, callback);\n };\n this.centerSelection = function() {\n var range = this.getSelectionRange();\n var pos = {\n row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\n column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\n };\n this.renderer.alignCursor(pos, 0.5);\n };\n this.getCursorPosition = function() {\n return this.selection.getCursor();\n };\n this.getCursorPositionScreen = function() {\n return this.session.documentToScreenPosition(this.getCursorPosition());\n };\n this.getSelectionRange = function() {\n return this.selection.getRange();\n };\n this.selectAll = function() {\n this.selection.selectAll();\n };\n this.clearSelection = function() {\n this.selection.clearSelection();\n };\n this.moveCursorTo = function(row, column) {\n this.selection.moveCursorTo(row, column);\n };\n this.moveCursorToPosition = function(pos) {\n this.selection.moveCursorToPosition(pos);\n };\n this.jumpToMatching = function(select, expand) {\n var cursor = this.getCursorPosition();\n var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\n var prevToken = iterator.getCurrentToken();\n var token = prevToken || iterator.stepForward();\n\n if (!token) return;\n var matchType;\n var found = false;\n var depth = {};\n var i = cursor.column - token.start;\n var bracketType;\n var brackets = {\n \")\": \"(\",\n \"(\": \"(\",\n \"]\": \"[\",\n \"[\": \"[\",\n \"{\": \"{\",\n \"}\": \"{\"\n };\n \n do {\n if (token.value.match(/[{}()\\[\\]]/g)) {\n for (; i < token.value.length && !found; i++) {\n if (!brackets[token.value[i]]) {\n continue;\n }\n\n bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n\n if (isNaN(depth[bracketType])) {\n depth[bracketType] = 0;\n }\n\n switch (token.value[i]) {\n case '(':\n case '[':\n case '{':\n depth[bracketType]++;\n break;\n case ')':\n case ']':\n case '}':\n depth[bracketType]--;\n\n if (depth[bracketType] === -1) {\n matchType = 'bracket';\n found = true;\n }\n break;\n }\n }\n }\n else if (token.type.indexOf('tag-name') !== -1) {\n if (isNaN(depth[token.value])) {\n depth[token.value] = 0;\n }\n \n if (prevToken.value === '<') {\n depth[token.value]++;\n }\n else if (prevToken.value === '</') {\n depth[token.value]--;\n }\n \n if (depth[token.value] === -1) {\n matchType = 'tag';\n found = true;\n }\n }\n\n if (!found) {\n prevToken = token;\n token = iterator.stepForward();\n i = 0;\n }\n } while (token && !found);\n if (!matchType)\n return;\n\n var range, pos;\n if (matchType === 'bracket') {\n range = this.session.getBracketRange(cursor);\n if (!range) {\n range = new Range(\n iterator.getCurrentTokenRow(),\n iterator.getCurrentTokenColumn() + i - 1,\n iterator.getCurrentTokenRow(),\n iterator.getCurrentTokenColumn() + i - 1\n );\n pos = range.start;\n if (expand || pos.row === cursor.row && Math.abs(pos.column - cursor.column) < 2)\n range = this.session.getBracketRange(pos);\n }\n }\n else if (matchType === 'tag') {\n if (token && token.type.indexOf('tag-name') !== -1) \n var tag = token.value;\n else\n return;\n\n range = new Range(\n iterator.getCurrentTokenRow(),\n iterator.getCurrentTokenColumn() - 2,\n iterator.getCurrentTokenRow(),\n iterator.getCurrentTokenColumn() - 2\n );\n if (range.compare(cursor.row, cursor.column) === 0) {\n found = false;\n do {\n token = prevToken;\n prevToken = iterator.stepBackward();\n \n if (prevToken) {\n if (prevToken.type.indexOf('tag-close') !== -1) {\n range.setEnd(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1);\n }\n\n if (token.value === tag && token.type.indexOf('tag-name') !== -1) {\n if (prevToken.value === '<') {\n depth[tag]++;\n }\n else if (prevToken.value === '</') {\n depth[tag]--;\n }\n \n if (depth[tag] === 0)\n found = true;\n }\n }\n } while (prevToken && !found);\n }\n if (token && token.type.indexOf('tag-name')) {\n pos = range.start;\n if (pos.row == cursor.row && Math.abs(pos.column - cursor.column) < 2)\n pos = range.end;\n }\n }\n\n pos = range && range.cursor || pos;\n if (pos) {\n if (select) {\n if (range && expand) {\n this.selection.setRange(range);\n } else if (range && range.isEqual(this.getSelectionRange())) {\n this.clearSelection();\n } else {\n this.selection.selectTo(pos.row, pos.column);\n }\n } else {\n this.selection.moveTo(pos.row, pos.column);\n }\n }\n };\n this.gotoLine = function(lineNumber, column, animate) {\n this.selection.clearSelection();\n this.session.unfold({row: lineNumber - 1, column: column || 0});\n this.exitMultiSelectMode && this.exitMultiSelectMode();\n this.moveCursorTo(lineNumber - 1, column || 0);\n\n if (!this.isRowFullyVisible(lineNumber - 1))\n this.scrollToLine(lineNumber - 1, true, animate);\n };\n this.navigateTo = function(row, column) {\n this.selection.moveTo(row, column);\n };\n this.navigateUp = function(times) {\n if (this.selection.isMultiLine() && !this.selection.isBackwards()) {\n var selectionStart = this.selection.anchor.getPosition();\n return this.moveCursorToPosition(selectionStart);\n }\n this.selection.clearSelection();\n this.selection.moveCursorBy(-times || -1, 0);\n };\n this.navigateDown = function(times) {\n if (this.selection.isMultiLine() && this.selection.isBackwards()) {\n var selectionEnd = this.selection.anchor.getPosition();\n return this.moveCursorToPosition(selectionEnd);\n }\n this.selection.clearSelection();\n this.selection.moveCursorBy(times || 1, 0);\n };\n this.navigateLeft = function(times) {\n if (!this.selection.isEmpty()) {\n var selectionStart = this.getSelectionRange().start;\n this.moveCursorToPosition(selectionStart);\n }\n else {\n times = times || 1;\n while (times--) {\n this.selection.moveCursorLeft();\n }\n }\n this.clearSelection();\n };\n this.navigateRight = function(times) {\n if (!this.selection.isEmpty()) {\n var selectionEnd = this.getSelectionRange().end;\n this.moveCursorToPosition(selectionEnd);\n }\n else {\n times = times || 1;\n while (times--) {\n this.selection.moveCursorRight();\n }\n }\n this.clearSelection();\n };\n this.navigateLineStart = function() {\n this.selection.moveCursorLineStart();\n this.clearSelection();\n };\n this.navigateLineEnd = function() {\n this.selection.moveCursorLineEnd();\n this.clearSelection();\n };\n this.navigateFileEnd = function() {\n this.selection.moveCursorFileEnd();\n this.clearSelection();\n };\n this.navigateFileStart = function() {\n this.selection.moveCursorFileStart();\n this.clearSelection();\n };\n this.navigateWordRight = function() {\n this.selection.moveCursorWordRight();\n this.clearSelection();\n };\n this.navigateWordLeft = function() {\n this.selection.moveCursorWordLeft();\n this.clearSelection();\n };\n this.replace = function(replacement, options) {\n if (options)\n this.$search.set(options);\n\n var range = this.$search.find(this.session);\n var replaced = 0;\n if (!range)\n return replaced;\n\n if (this.$tryReplace(range, replacement)) {\n replaced = 1;\n }\n\n this.selection.setSelectionRange(range);\n this.renderer.scrollSelectionIntoView(range.start, range.end);\n\n return replaced;\n };\n this.replaceAll = function(replacement, options) {\n if (options) {\n this.$search.set(options);\n }\n\n var ranges = this.$search.findAll(this.session);\n var replaced = 0;\n if (!ranges.length)\n return replaced;\n\n var selection = this.getSelectionRange();\n this.selection.moveTo(0, 0);\n\n for (var i = ranges.length - 1; i >= 0; --i) {\n if(this.$tryReplace(ranges[i], replacement)) {\n replaced++;\n }\n }\n\n this.selection.setSelectionRange(selection);\n\n return replaced;\n };\n\n this.$tryReplace = function(range, replacement) {\n var input = this.session.getTextRange(range);\n replacement = this.$search.replace(input, replacement);\n if (replacement !== null) {\n range.end = this.session.replace(range, replacement);\n return range;\n } else {\n return null;\n }\n };\n this.getLastSearchOptions = function() {\n return this.$search.getOptions();\n };\n this.find = function(needle, options, animate) {\n if (!options)\n options = {};\n\n if (typeof needle == \"string\" || needle instanceof RegExp)\n options.needle = needle;\n else if (typeof needle == \"object\")\n oop.mixin(options, needle);\n\n var range = this.selection.getRange();\n if (options.needle == null) {\n needle = this.session.getTextRange(range)\n || this.$search.$options.needle;\n if (!needle) {\n range = this.session.getWordRange(range.start.row, range.start.column);\n needle = this.session.getTextRange(range);\n }\n this.$search.set({needle: needle});\n }\n\n this.$search.set(options);\n if (!options.start)\n this.$search.set({start: range});\n\n var newRange = this.$search.find(this.session);\n if (options.preventScroll)\n return newRange;\n if (newRange) {\n this.revealRange(newRange, animate);\n return newRange;\n }\n if (options.backwards)\n range.start = range.end;\n else\n range.end = range.start;\n this.selection.setRange(range);\n };\n this.findNext = function(options, animate) {\n this.find({skipCurrent: true, backwards: false}, options, animate);\n };\n this.findPrevious = function(options, animate) {\n this.find(options, {skipCurrent: true, backwards: true}, animate);\n };\n\n this.revealRange = function(range, animate) {\n this.session.unfold(range);\n this.selection.setSelectionRange(range);\n\n var scrollTop = this.renderer.scrollTop;\n this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n if (animate !== false)\n this.renderer.animateScrolling(scrollTop);\n };\n this.undo = function() {\n this.session.getUndoManager().undo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n this.redo = function() {\n this.session.getUndoManager().redo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n this.destroy = function() {\n if (this.$toDestroy) {\n this.$toDestroy.forEach(function(el) {\n el.destroy();\n });\n this.$toDestroy = null;\n }\n if (this.$mouseHandler)\n this.$mouseHandler.destroy();\n this.renderer.destroy();\n this._signal(\"destroy\", this);\n if (this.session)\n this.session.destroy();\n if (this._$emitInputEvent)\n this._$emitInputEvent.cancel();\n this.removeAllListeners();\n };\n this.setAutoScrollEditorIntoView = function(enable) {\n if (!enable)\n return;\n var rect;\n var self = this;\n var shouldScroll = false;\n if (!this.$scrollAnchor)\n this.$scrollAnchor = document.createElement(\"div\");\n var scrollAnchor = this.$scrollAnchor;\n scrollAnchor.style.cssText = \"position:absolute\";\n this.container.insertBefore(scrollAnchor, this.container.firstChild);\n var onChangeSelection = this.on(\"changeSelection\", function() {\n shouldScroll = true;\n });\n var onBeforeRender = this.renderer.on(\"beforeRender\", function() {\n if (shouldScroll)\n rect = self.renderer.container.getBoundingClientRect();\n });\n var onAfterRender = this.renderer.on(\"afterRender\", function() {\n if (shouldScroll && rect && (self.isFocused()\n || self.searchBox && self.searchBox.isFocused())\n ) {\n var renderer = self.renderer;\n var pos = renderer.$cursorLayer.$pixelPos;\n var config = renderer.layerConfig;\n var top = pos.top - config.offset;\n if (pos.top >= 0 && top + rect.top < 0) {\n shouldScroll = true;\n } else if (pos.top < config.height &&\n pos.top + rect.top + config.lineHeight > window.innerHeight) {\n shouldScroll = false;\n } else {\n shouldScroll = null;\n }\n if (shouldScroll != null) {\n scrollAnchor.style.top = top + \"px\";\n scrollAnchor.style.left = pos.left + \"px\";\n scrollAnchor.style.height = config.lineHeight + \"px\";\n scrollAnchor.scrollIntoView(shouldScroll);\n }\n shouldScroll = rect = null;\n }\n });\n this.setAutoScrollEditorIntoView = function(enable) {\n if (enable)\n return;\n delete this.setAutoScrollEditorIntoView;\n this.off(\"changeSelection\", onChangeSelection);\n this.renderer.off(\"afterRender\", onAfterRender);\n this.renderer.off(\"beforeRender\", onBeforeRender);\n };\n };\n\n\n this.$resetCursorStyle = function() {\n var style = this.$cursorStyle || \"ace\";\n var cursorLayer = this.renderer.$cursorLayer;\n if (!cursorLayer)\n return;\n cursorLayer.setSmoothBlinking(/smooth/.test(style));\n cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\n dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\n };\n this.prompt = function(message, options, callback) {\n var editor = this;\n config.loadModule(\"./ext/prompt\", function (module) {\n module.prompt(editor, message, options, callback);\n });\n };\n\n}).call(Editor.prototype);\n\n\n\nconfig.defineOptions(Editor.prototype, \"editor\", {\n selectionStyle: {\n set: function(style) {\n this.onSelectionChange();\n this._signal(\"changeSelectionStyle\", {data: style});\n },\n initialValue: \"line\"\n },\n highlightActiveLine: {\n set: function() {this.$updateHighlightActiveLine();},\n initialValue: true\n },\n highlightSelectedWord: {\n set: function(shouldHighlight) {this.$onSelectionChange();},\n initialValue: true\n },\n readOnly: {\n set: function(readOnly) {\n this.textInput.setReadOnly(readOnly);\n this.$resetCursorStyle(); \n },\n initialValue: false\n },\n copyWithEmptySelection: {\n set: function(value) {\n this.textInput.setCopyWithEmptySelection(value);\n },\n initialValue: false\n },\n cursorStyle: {\n set: function(val) { this.$resetCursorStyle(); },\n values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n initialValue: \"ace\"\n },\n mergeUndoDeltas: {\n values: [false, true, \"always\"],\n initialValue: true\n },\n behavioursEnabled: {initialValue: true},\n wrapBehavioursEnabled: {initialValue: true},\n enableAutoIndent: {initialValue: true},\n autoScrollEditorIntoView: {\n set: function(val) {this.setAutoScrollEditorIntoView(val);}\n },\n keyboardHandler: {\n set: function(val) { this.setKeyboardHandler(val); },\n get: function() { return this.$keybindingId; },\n handlesSet: true\n },\n value: {\n set: function(val) { this.session.setValue(val); },\n get: function() { return this.getValue(); },\n handlesSet: true,\n hidden: true\n },\n session: {\n set: function(val) { this.setSession(val); },\n get: function() { return this.session; },\n handlesSet: true,\n hidden: true\n },\n \n showLineNumbers: {\n set: function(show) {\n this.renderer.$gutterLayer.setShowLineNumbers(show);\n this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER);\n if (show && this.$relativeLineNumbers)\n relativeNumberRenderer.attach(this);\n else\n relativeNumberRenderer.detach(this);\n },\n initialValue: true\n },\n relativeLineNumbers: {\n set: function(value) {\n if (this.$showLineNumbers && value)\n relativeNumberRenderer.attach(this);\n else\n relativeNumberRenderer.detach(this);\n }\n },\n placeholder: {\n set: function(message) {\n if (!this.$updatePlaceholder) {\n this.$updatePlaceholder = function() {\n var value = this.session && (this.renderer.$composition || this.getValue());\n if (value && this.renderer.placeholderNode) {\n this.renderer.off(\"afterRender\", this.$updatePlaceholder);\n dom.removeCssClass(this.container, \"ace_hasPlaceholder\");\n this.renderer.placeholderNode.remove();\n this.renderer.placeholderNode = null;\n } else if (!value && !this.renderer.placeholderNode) {\n this.renderer.on(\"afterRender\", this.$updatePlaceholder);\n dom.addCssClass(this.container, \"ace_hasPlaceholder\");\n var el = dom.createElement(\"div\");\n el.className = \"ace_placeholder\";\n el.textContent = this.$placeholder || \"\";\n this.renderer.placeholderNode = el;\n this.renderer.content.appendChild(this.renderer.placeholderNode);\n } else if (!value && this.renderer.placeholderNode) {\n this.renderer.placeholderNode.textContent = this.$placeholder || \"\";\n }\n }.bind(this);\n this.on(\"input\", this.$updatePlaceholder);\n }\n this.$updatePlaceholder();\n }\n },\n\n hScrollBarAlwaysVisible: \"renderer\",\n vScrollBarAlwaysVisible: \"renderer\",\n highlightGutterLine: \"renderer\",\n animatedScroll: \"renderer\",\n showInvisibles: \"renderer\",\n showPrintMargin: \"renderer\",\n printMarginColumn: \"renderer\",\n printMargin: \"renderer\",\n fadeFoldWidgets: \"renderer\",\n showFoldWidgets: \"renderer\",\n displayIndentGuides: \"renderer\",\n showGutter: \"renderer\",\n fontSize: \"renderer\",\n fontFamily: \"renderer\",\n maxLines: \"renderer\",\n minLines: \"renderer\",\n scrollPastEnd: \"renderer\",\n fixedWidthGutter: \"renderer\",\n theme: \"renderer\",\n hasCssTransforms: \"renderer\",\n maxPixelHeight: \"renderer\",\n useTextareaForIME: \"renderer\",\n\n scrollSpeed: \"$mouseHandler\",\n dragDelay: \"$mouseHandler\",\n dragEnabled: \"$mouseHandler\",\n focusTimeout: \"$mouseHandler\",\n tooltipFollowsMouse: \"$mouseHandler\",\n\n firstLineNumber: \"session\",\n overwrite: \"session\",\n newLineMode: \"session\",\n useWorker: \"session\",\n useSoftTabs: \"session\",\n navigateWithinSoftTabs: \"session\",\n tabSize: \"session\",\n wrap: \"session\",\n indentedSoftWrap: \"session\",\n foldStyle: \"session\",\n mode: \"session\"\n});\n\n\nvar relativeNumberRenderer = {\n getText: function(session, row) {\n return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9 ? \"\\xb7\" : \"\"))) + \"\";\n },\n getWidth: function(session, lastLineNumber, config) {\n return Math.max(\n lastLineNumber.toString().length,\n (config.lastRow + 1).toString().length,\n 2\n ) * config.characterWidth;\n },\n update: function(e, editor) {\n editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER);\n },\n attach: function(editor) {\n editor.renderer.$gutterLayer.$renderer = this;\n editor.on(\"changeSelection\", this.update);\n this.update(null, editor);\n },\n detach: function(editor) {\n if (editor.renderer.$gutterLayer.$renderer == this)\n editor.renderer.$gutterLayer.$renderer = null;\n editor.off(\"changeSelection\", this.update);\n this.update(null, editor);\n }\n};\n\nexports.Editor = Editor;\n});\n\nace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\nvar UndoManager = function() {\n this.$maxRev = 0;\n this.$fromUndo = false;\n this.reset();\n};\n\n(function() {\n \n this.addSession = function(session) {\n this.$session = session;\n };\n this.add = function(delta, allowMerge, session) {\n if (this.$fromUndo) return;\n if (delta == this.$lastDelta) return;\n if (!this.$keepRedoStack) this.$redoStack.length = 0;\n if (allowMerge === false || !this.lastDeltas) {\n this.lastDeltas = [];\n this.$undoStack.push(this.lastDeltas);\n delta.id = this.$rev = ++this.$maxRev;\n }\n if (delta.action == \"remove\" || delta.action == \"insert\")\n this.$lastDelta = delta;\n this.lastDeltas.push(delta);\n };\n \n this.addSelection = function(selection, rev) {\n this.selections.push({\n value: selection,\n rev: rev || this.$rev\n });\n };\n \n this.startNewGroup = function() {\n this.lastDeltas = null;\n return this.$rev;\n };\n \n this.markIgnored = function(from, to) {\n if (to == null) to = this.$rev + 1;\n var stack = this.$undoStack;\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id <= from)\n break;\n if (delta.id < to)\n delta.ignore = true;\n }\n this.lastDeltas = null;\n };\n \n this.getSelection = function(rev, after) {\n var stack = this.selections;\n for (var i = stack.length; i--;) {\n var selection = stack[i];\n if (selection.rev < rev) {\n if (after)\n selection = stack[i + 1];\n return selection;\n }\n }\n };\n \n this.getRevision = function() {\n return this.$rev;\n };\n \n this.getDeltas = function(from, to) {\n if (to == null) to = this.$rev + 1;\n var stack = this.$undoStack;\n var end = null, start = 0;\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id < to && !end)\n end = i+1;\n if (delta.id <= from) {\n start = i + 1;\n break;\n }\n }\n return stack.slice(start, end);\n };\n \n this.getChangedRanges = function(from, to) {\n if (to == null) to = this.$rev + 1;\n \n };\n \n this.getChangedLines = function(from, to) {\n if (to == null) to = this.$rev + 1;\n \n };\n this.undo = function(session, dontSelect) {\n this.lastDeltas = null;\n var stack = this.$undoStack;\n \n if (!rearrangeUndoStack(stack, stack.length))\n return;\n \n if (!session)\n session = this.$session;\n \n if (this.$redoStackBaseRev !== this.$rev && this.$redoStack.length)\n this.$redoStack = [];\n \n this.$fromUndo = true;\n \n var deltaSet = stack.pop();\n var undoSelectionRange = null;\n if (deltaSet) {\n undoSelectionRange = session.undoChanges(deltaSet, dontSelect);\n this.$redoStack.push(deltaSet);\n this.$syncRev();\n }\n \n this.$fromUndo = false;\n\n return undoSelectionRange;\n };\n this.redo = function(session, dontSelect) {\n this.lastDeltas = null;\n \n if (!session)\n session = this.$session;\n \n this.$fromUndo = true;\n if (this.$redoStackBaseRev != this.$rev) {\n var diff = this.getDeltas(this.$redoStackBaseRev, this.$rev + 1);\n rebaseRedoStack(this.$redoStack, diff);\n this.$redoStackBaseRev = this.$rev;\n this.$redoStack.forEach(function(x) {\n x[0].id = ++this.$maxRev;\n }, this);\n }\n var deltaSet = this.$redoStack.pop();\n var redoSelectionRange = null;\n \n if (deltaSet) {\n redoSelectionRange = session.redoChanges(deltaSet, dontSelect);\n this.$undoStack.push(deltaSet);\n this.$syncRev();\n }\n this.$fromUndo = false;\n \n return redoSelectionRange;\n };\n \n this.$syncRev = function() {\n var stack = this.$undoStack;\n var nextDelta = stack[stack.length - 1];\n var id = nextDelta && nextDelta[0].id || 0;\n this.$redoStackBaseRev = id;\n this.$rev = id;\n };\n this.reset = function() {\n this.lastDeltas = null;\n this.$lastDelta = null;\n this.$undoStack = [];\n this.$redoStack = [];\n this.$rev = 0;\n this.mark = 0;\n this.$redoStackBaseRev = this.$rev;\n this.selections = [];\n };\n this.canUndo = function() {\n return this.$undoStack.length > 0;\n };\n this.canRedo = function() {\n return this.$redoStack.length > 0;\n };\n this.bookmark = function(rev) {\n if (rev == undefined)\n rev = this.$rev;\n this.mark = rev;\n };\n this.isAtBookmark = function() {\n return this.$rev === this.mark;\n };\n \n this.toJSON = function() {\n \n };\n \n this.fromJSON = function() {\n \n };\n \n this.hasUndo = this.canUndo;\n this.hasRedo = this.canRedo;\n this.isClean = this.isAtBookmark;\n this.markClean = this.bookmark;\n \n this.$prettyPrint = function(delta) {\n if (delta) return stringifyDelta(delta);\n return stringifyDelta(this.$undoStack) + \"\\n---\\n\" + stringifyDelta(this.$redoStack);\n };\n}).call(UndoManager.prototype);\n\nfunction rearrangeUndoStack(stack, pos) {\n for (var i = pos; i--; ) {\n var deltaSet = stack[i];\n if (deltaSet && !deltaSet[0].ignore) {\n while(i < pos - 1) {\n var swapped = swapGroups(stack[i], stack[i + 1]);\n stack[i] = swapped[0];\n stack[i + 1] = swapped[1];\n i++;\n }\n return true;\n }\n }\n}\n\nvar Range = require(\"./range\").Range;\nvar cmp = Range.comparePoints;\nvar comparePoints = Range.comparePoints;\n\nfunction $updateMarkers(delta) {\n var isInsert = delta.action == \"insert\";\n var start = delta.start;\n var end = delta.end;\n var rowShift = (end.row - start.row) * (isInsert ? 1 : -1);\n var colShift = (end.column - start.column) * (isInsert ? 1 : -1);\n if (isInsert) end = start;\n\n for (var i in this.marks) {\n var point = this.marks[i];\n var cmp = comparePoints(point, start);\n if (cmp < 0) {\n continue; // delta starts after the range\n }\n if (cmp === 0) {\n if (isInsert) {\n if (point.bias == 1) {\n cmp = 1;\n }\n else {\n point.bias == -1;\n continue;\n }\n }\n }\n var cmp2 = isInsert ? cmp : comparePoints(point, end);\n if (cmp2 > 0) {\n point.row += rowShift;\n point.column += point.row == end.row ? colShift : 0;\n continue;\n }\n if (!isInsert && cmp2 <= 0) {\n point.row = start.row;\n point.column = start.column;\n if (cmp2 === 0)\n point.bias = 1;\n }\n }\n}\n\n\n\nfunction clonePos(pos) {\n return {row: pos.row,column: pos.column};\n}\nfunction cloneDelta(d) {\n return {\n start: clonePos(d.start),\n end: clonePos(d.end),\n action: d.action,\n lines: d.lines.slice()\n };\n}\nfunction stringifyDelta(d) {\n d = d || this;\n if (Array.isArray(d)) {\n return d.map(stringifyDelta).join(\"\\n\");\n }\n var type = \"\";\n if (d.action) {\n type = d.action == \"insert\" ? \"+\" : \"-\";\n type += \"[\" + d.lines + \"]\";\n } else if (d.value) {\n if (Array.isArray(d.value)) {\n type = d.value.map(stringifyRange).join(\"\\n\");\n } else {\n type = stringifyRange(d.value);\n }\n }\n if (d.start) {\n type += stringifyRange(d);\n }\n if (d.id || d.rev) {\n type += \"\\t(\" + (d.id || d.rev) + \")\";\n }\n return type;\n}\nfunction stringifyRange(r) {\n return r.start.row + \":\" + r.start.column \n + \"=>\" + r.end.row + \":\" + r.end.column;\n}\n\nfunction swap(d1, d2) {\n var i1 = d1.action == \"insert\";\n var i2 = d2.action == \"insert\";\n \n if (i1 && i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n } else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n } else {\n return null;\n }\n } else if (i1 && !i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n } else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n } else {\n return null;\n }\n } else if (!i1 && i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n } else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n } else {\n return null;\n }\n } else if (!i1 && !i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n } else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n } else {\n return null;\n }\n }\n return [d2, d1];\n}\nfunction swapGroups(ds1, ds2) {\n for (var i = ds1.length; i--; ) {\n for (var j = 0; j < ds2.length; j++) {\n if (!swap(ds1[i], ds2[j])) {\n while (i < ds1.length) {\n while (j--) {\n swap(ds2[j], ds1[i]);\n }\n j = ds2.length;\n i++;\n } \n return [ds1, ds2];\n }\n }\n }\n ds1.selectionBefore = ds2.selectionBefore = \n ds1.selectionAfter = ds2.selectionAfter = null;\n return [ds2, ds1];\n}\nfunction xform(d1, c1) {\n var i1 = d1.action == \"insert\";\n var i2 = c1.action == \"insert\";\n \n if (i1 && i2) {\n if (cmp(d1.start, c1.start) < 0) {\n shift(c1, d1, 1);\n } else {\n shift(d1, c1, 1);\n }\n } else if (i1 && !i2) {\n if (cmp(d1.start, c1.end) >= 0) {\n shift(d1, c1, -1);\n } else if (cmp(d1.start, c1.start) <= 0) {\n shift(c1, d1, +1);\n } else {\n shift(d1, Range.fromPoints(c1.start, d1.start), -1);\n shift(c1, d1, +1);\n }\n } else if (!i1 && i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n } else if (cmp(c1.start, d1.start) <= 0) {\n shift(d1, c1, +1);\n } else {\n shift(c1, Range.fromPoints(d1.start, c1.start), -1);\n shift(d1, c1, +1);\n }\n } else if (!i1 && !i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n } else if (cmp(c1.end, d1.start) <= 0) {\n shift(d1, c1, -1);\n } else {\n var before, after;\n if (cmp(d1.start, c1.start) < 0) {\n before = d1;\n d1 = splitDelta(d1, c1.start);\n }\n if (cmp(d1.end, c1.end) > 0) {\n after = splitDelta(d1, c1.end);\n }\n\n shiftPos(c1.end, d1.start, d1.end, -1);\n if (after && !before) {\n d1.lines = after.lines;\n d1.start = after.start;\n d1.end = after.end;\n after = d1;\n }\n\n return [c1, before, after].filter(Boolean);\n }\n }\n return [c1, d1];\n}\n \nfunction shift(d1, d2, dir) {\n shiftPos(d1.start, d2.start, d2.end, dir);\n shiftPos(d1.end, d2.start, d2.end, dir);\n}\nfunction shiftPos(pos, start, end, dir) {\n if (pos.row == (dir == 1 ? start : end).row) {\n pos.column += dir * (end.column - start.column);\n }\n pos.row += dir * (end.row - start.row);\n}\nfunction splitDelta(c, pos) {\n var lines = c.lines;\n var end = c.end;\n c.end = clonePos(pos); \n var rowsBefore = c.end.row - c.start.row;\n var otherLines = lines.splice(rowsBefore, lines.length);\n \n var col = rowsBefore ? pos.column : pos.column - c.start.column;\n lines.push(otherLines[0].substring(0, col));\n otherLines[0] = otherLines[0].substr(col) ; \n var rest = {\n start: clonePos(pos),\n end: end,\n lines: otherLines,\n action: c.action\n };\n return rest;\n}\n\nfunction moveDeltasByOne(redoStack, d) {\n d = cloneDelta(d);\n for (var j = redoStack.length; j--;) {\n var deltaSet = redoStack[j];\n for (var i = 0; i < deltaSet.length; i++) {\n var x = deltaSet[i];\n var xformed = xform(x, d);\n d = xformed[0];\n if (xformed.length != 2) {\n if (xformed[2]) {\n deltaSet.splice(i + 1, 1, xformed[1], xformed[2]);\n i++;\n } else if (!xformed[1]) {\n deltaSet.splice(i, 1);\n i--;\n }\n }\n }\n if (!deltaSet.length) {\n redoStack.splice(j, 1); \n }\n }\n return redoStack;\n}\nfunction rebaseRedoStack(redoStack, deltaSets) {\n for (var i = 0; i < deltaSets.length; i++) {\n var deltas = deltaSets[i];\n for (var j = 0; j < deltas.length; j++) {\n moveDeltasByOne(redoStack, deltas[j]);\n }\n }\n}\n\nexports.UndoManager = UndoManager;\n\n});\n\nace.define(\"ace/layer/lines\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\n\nvar Lines = function(element, canvasHeight) {\n this.element = element;\n this.canvasHeight = canvasHeight || 500000;\n this.element.style.height = (this.canvasHeight * 2) + \"px\";\n \n this.cells = [];\n this.cellCache = [];\n this.$offsetCoefficient = 0;\n};\n\n(function() {\n \n this.moveContainer = function(config) {\n dom.translate(this.element, 0, -((config.firstRowScreen * config.lineHeight) % this.canvasHeight) - config.offset * this.$offsetCoefficient);\n }; \n \n this.pageChanged = function(oldConfig, newConfig) {\n return (\n Math.floor((oldConfig.firstRowScreen * oldConfig.lineHeight) / this.canvasHeight) !==\n Math.floor((newConfig.firstRowScreen * newConfig.lineHeight) / this.canvasHeight)\n );\n };\n \n this.computeLineTop = function(row, config, session) {\n var screenTop = config.firstRowScreen * config.lineHeight;\n var screenPage = Math.floor(screenTop / this.canvasHeight);\n var lineTop = session.documentToScreenRow(row, 0) * config.lineHeight;\n return lineTop - (screenPage * this.canvasHeight);\n };\n \n this.computeLineHeight = function(row, config, session) {\n return config.lineHeight * session.getRowLineCount(row);\n };\n \n this.getLength = function() {\n return this.cells.length;\n };\n \n this.get = function(index) {\n return this.cells[index];\n };\n \n this.shift = function() {\n this.$cacheCell(this.cells.shift());\n };\n \n this.pop = function() {\n this.$cacheCell(this.cells.pop());\n };\n \n this.push = function(cell) {\n if (Array.isArray(cell)) {\n this.cells.push.apply(this.cells, cell);\n var fragment = dom.createFragment(this.element);\n for (var i=0; i<cell.length; i++) {\n fragment.appendChild(cell[i].element);\n }\n this.element.appendChild(fragment);\n } else {\n this.cells.push(cell);\n this.element.appendChild(cell.element);\n }\n };\n \n this.unshift = function(cell) {\n if (Array.isArray(cell)) {\n this.cells.unshift.apply(this.cells, cell);\n var fragment = dom.createFragment(this.element);\n for (var i=0; i<cell.length; i++) {\n fragment.appendChild(cell[i].element);\n }\n if (this.element.firstChild)\n this.element.insertBefore(fragment, this.element.firstChild);\n else\n this.element.appendChild(fragment);\n } else {\n this.cells.unshift(cell);\n this.element.insertAdjacentElement(\"afterbegin\", cell.element);\n }\n };\n \n this.last = function() {\n if (this.cells.length)\n return this.cells[this.cells.length-1];\n else\n return null;\n };\n \n this.$cacheCell = function(cell) {\n if (!cell)\n return;\n \n cell.element.remove();\n this.cellCache.push(cell);\n };\n \n this.createCell = function(row, config, session, initElement) {\n var cell = this.cellCache.pop();\n if (!cell) {\n var element = dom.createElement(\"div\");\n if (initElement)\n initElement(element);\n \n this.element.appendChild(element);\n \n cell = {\n element: element,\n text: \"\",\n row: row\n };\n }\n cell.row = row;\n \n return cell;\n };\n \n}).call(Lines.prototype);\n\nexports.Lines = Lines;\n\n});\n\nace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/layer/lines\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Lines = require(\"./lines\").Lines;\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.$lines = new Lines(this.element);\n this.$lines.$offsetCoefficient = 1;\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n\n this.setSession = function(session) {\n if (this.session)\n this.session.off(\"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 this.config = config;\n \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 \n this.oldLastRow = lastRow;\n this.config = config;\n \n this.$lines.moveContainer(config);\n this.$updateCursorRow();\n \n var fold = session.getNextFoldLine(firstRow);\n var foldStart = fold ? fold.start.row : Infinity;\n\n var cell = null;\n var index = -1;\n var row = firstRow;\n \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.$lines.getLength() > index + 1)\n this.$lines.pop();\n \n break;\n }\n\n cell = this.$lines.get(++index);\n if (cell) {\n cell.row = row;\n } else {\n cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$lines.push(cell);\n }\n\n this.$renderCell(cell, config, fold, row);\n row++;\n }\n \n this._signal(\"afterRender\");\n this.$updateGutterWidth(config);\n };\n\n this.$updateGutterWidth = function(config) {\n var session = this.session;\n \n var gutterRenderer = session.gutterRenderer || this.$renderer;\n \n var firstLineNumber = session.$firstLineNumber;\n var lastLineText = this.$lines.last() ? this.$lines.last().text : \"\";\n \n if (this.$fixedWidth || session.$useWrapMode)\n lastLineText = session.getLength() + firstLineNumber - 1;\n\n var gutterWidth = gutterRenderer \n ? gutterRenderer.getWidth(session, lastLineText, config)\n : lastLineText.toString().length * config.characterWidth;\n \n var padding = this.$padding || this.$computePadding();\n gutterWidth += padding.left + padding.right;\n if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n this.gutterWidth = gutterWidth;\n this.element.parentNode.style.width = \n this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n this._signal(\"changeGutterWidth\", gutterWidth);\n }\n };\n \n this.$updateCursorRow = function() {\n if (!this.$highlightGutterLine)\n return;\n \n var position = this.session.selection.getCursor();\n if (this.$cursorRow === position.row)\n return;\n \n this.$cursorRow = position.row;\n };\n \n this.updateLineHighlight = function() {\n if (!this.$highlightGutterLine)\n return;\n var row = this.session.selection.cursor.row;\n this.$cursorRow = row;\n\n if (this.$cursorCell && this.$cursorCell.row == row)\n return;\n if (this.$cursorCell)\n this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n var cells = this.$lines.cells;\n this.$cursorCell = null;\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (cell.row >= this.$cursorRow) {\n if (cell.row > this.$cursorRow) {\n var fold = this.session.getFoldLine(this.$cursorRow);\n if (i > 0 && fold && fold.start.row == cells[i - 1].row)\n cell = cells[i - 1];\n else\n break;\n }\n cell.element.className = \"ace_gutter-active-line \" + cell.element.className;\n this.$cursorCell = cell;\n break;\n }\n }\n };\n \n this.scrollLines = function(config) {\n var oldConfig = this.config;\n this.config = config;\n \n this.$updateCursorRow();\n if (this.$lines.pageChanged(oldConfig, config))\n return this.update(config);\n \n this.$lines.moveContainer(config);\n\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n this.session.getLength() - 1);\n var oldLastRow = this.oldLastRow;\n this.oldLastRow = lastRow;\n \n if (!oldConfig || oldLastRow < config.firstRow)\n return this.update(config);\n\n if (lastRow < oldConfig.firstRow)\n return this.update(config);\n\n if (oldConfig.firstRow < config.firstRow)\n for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--)\n this.$lines.shift();\n\n if (oldLastRow > lastRow)\n for (var row=this.session.getFoldedRowCount(lastRow + 1, oldLastRow); row>0; row--)\n this.$lines.pop();\n\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLines(config, config.firstRow, oldConfig.firstRow - 1));\n }\n\n if (lastRow > oldLastRow) {\n this.$lines.push(this.$renderLines(config, oldLastRow + 1, lastRow));\n }\n \n this.updateLineHighlight();\n \n this._signal(\"afterRender\");\n this.$updateGutterWidth(config);\n };\n\n this.$renderLines = function(config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row+1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n\n var cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$renderCell(cell, config, foldLine, row);\n fragment.push(cell);\n\n row++;\n }\n return fragment;\n };\n \n this.$renderCell = function(cell, config, fold, row) {\n var element = cell.element;\n \n var session = this.session;\n \n var textNode = element.childNodes[0];\n var foldWidget = element.childNodes[1];\n\n var firstLineNumber = session.$firstLineNumber;\n \n var breakpoints = session.$breakpoints;\n var decorations = session.$decorations;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\n var foldStart = fold ? fold.start.row : Number.MAX_VALUE;\n \n var className = \"ace_gutter-cell \";\n if (this.$highlightGutterLine) {\n if (row == this.$cursorRow || (fold && row < this.$cursorRow && row >= foldStart && this.$cursorRow <= fold.end.row)) {\n className += \"ace_gutter-active-line \";\n if (this.$cursorCell != cell) {\n if (this.$cursorCell)\n this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n this.$cursorCell = cell;\n }\n }\n }\n \n if (breakpoints[row])\n className += breakpoints[row];\n if (decorations[row])\n className += decorations[row];\n if (this.$annotations[row])\n className += this.$annotations[row].className;\n if (element.className != className)\n element.className = className;\n\n if (foldWidgets) {\n var c = foldWidgets[row];\n if (c == null)\n c = foldWidgets[row] = session.getFoldWidget(row);\n }\n\n if (c) {\n var className = \"ace_fold-widget ace_\" + c;\n if (c == \"start\" && row == foldStart && row < fold.end.row)\n className += \" ace_closed\";\n else\n className += \" ace_open\";\n if (foldWidget.className != className)\n foldWidget.className = className;\n\n var foldHeight = config.lineHeight + \"px\";\n dom.setStyle(foldWidget.style, \"height\", foldHeight);\n dom.setStyle(foldWidget.style, \"display\", \"inline-block\");\n } else {\n if (foldWidget) {\n dom.setStyle(foldWidget.style, \"display\", \"none\");\n }\n }\n \n var text = (gutterRenderer\n ? gutterRenderer.getText(session, row)\n : row + firstLineNumber).toString();\n \n if (text !== textNode.data) {\n textNode.data = text;\n }\n \n dom.setStyle(cell.element.style, \"height\", this.$lines.computeLineHeight(row, config, session) + \"px\");\n dom.setStyle(cell.element.style, \"top\", this.$lines.computeLineTop(row, config, session) + \"px\");\n \n cell.text = text;\n return cell;\n };\n\n this.$fixedWidth = false;\n \n this.$highlightGutterLine = true;\n this.$renderer = \"\";\n this.setHighlightGutterLine = function(highlightGutterLine) {\n this.$highlightGutterLine = highlightGutterLine;\n };\n \n this.$showLineNumbers = true;\n this.$renderer = \"\";\n this.setShowLineNumbers = function(show) {\n this.$renderer = !show && {\n getWidth: function() {return 0;},\n getText: function() {return \"\";}\n };\n };\n \n this.getShowLineNumbers = function() {\n return this.$showLineNumbers;\n };\n \n this.$showFoldWidgets = true;\n this.setShowFoldWidgets = function(show) {\n if (show)\n dom.addCssClass(this.element, \"ace_folding-enabled\");\n else\n dom.removeCssClass(this.element, \"ace_folding-enabled\");\n\n this.$showFoldWidgets = show;\n this.$padding = null;\n };\n \n this.getShowFoldWidgets = function() {\n return this.$showFoldWidgets;\n };\n\n this.$computePadding = function() {\n if (!this.element.firstChild)\n return {left: 0, right: 0};\n var style = dom.computedStyle(this.element.firstChild);\n this.$padding = {};\n this.$padding.left = (parseInt(style.borderLeftWidth) || 0)\n + (parseInt(style.paddingLeft) || 0) + 1;\n this.$padding.right = (parseInt(style.borderRightWidth) || 0)\n + (parseInt(style.paddingRight) || 0);\n return this.$padding;\n };\n\n this.getRegion = function(point) {\n var padding = this.$padding || this.$computePadding();\n var rect = this.element.getBoundingClientRect();\n if (point.x < padding.left + rect.left)\n return \"markers\";\n if (this.$showFoldWidgets && point.x > rect.right - padding.right)\n return \"foldWidgets\";\n };\n\n}).call(Gutter.prototype);\n\nfunction onCreateCell(element) {\n var textNode = document.createTextNode('');\n element.appendChild(textNode);\n \n var foldWidget = dom.createElement(\"span\");\n element.appendChild(foldWidget);\n \n return element;\n}\n\nexports.Gutter = Gutter;\n\n});\n\nace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar dom = require(\"../lib/dom\");\n\nvar Marker = function(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_marker-layer\";\n parentEl.appendChild(this.element);\n};\n\n(function() {\n\n this.$padding = 0;\n\n this.setPadding = function(padding) {\n this.$padding = padding;\n };\n this.setSession = function(session) {\n this.session = session;\n };\n \n this.setMarkers = function(markers) {\n this.markers = markers;\n };\n \n this.elt = function(className, css) {\n var x = this.i != -1 && this.element.childNodes[this.i];\n if (!x) {\n x = document.createElement(\"div\");\n this.element.appendChild(x);\n this.i = -1;\n } else {\n this.i++;\n }\n x.style.cssText = css;\n x.className = className;\n };\n\n this.update = function(config) {\n if (!config) return;\n\n this.config = config;\n\n this.i = 0;\n var html;\n for (var key in this.markers) {\n var marker = this.markers[key];\n\n if (!marker.range) {\n marker.update(html, this, this.session, config);\n continue;\n }\n\n var range = marker.range.clipRows(config.firstRow, config.lastRow);\n if (range.isEmpty()) continue;\n\n range = range.toScreenRange(this.session);\n if (marker.renderer) {\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n marker.renderer(html, range, left, top, config);\n } else if (marker.type == \"fullLine\") {\n this.drawFullLineMarker(html, range, marker.clazz, config);\n } else if (marker.type == \"screenLine\") {\n this.drawScreenLineMarker(html, range, marker.clazz, config);\n } else if (range.isMultiLine()) {\n if (marker.type == \"text\")\n this.drawTextMarker(html, range, marker.clazz, config);\n else\n this.drawMultiLineMarker(html, range, marker.clazz, config);\n } else {\n this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n }\n }\n if (this.i !=-1) {\n while (this.i < this.element.childElementCount)\n this.element.removeChild(this.element.lastChild);\n }\n };\n\n this.$getTop = function(row, layerConfig) {\n return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n };\n\n function getBorderClass(tl, tr, br, bl) {\n return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n }\n this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig, extraStyle) {\n var session = this.session;\n var start = range.start.row;\n var end = range.end.row;\n var row = start;\n var prev = 0; \n var curr = 0;\n var next = session.getScreenLastRowColumn(row);\n var lineRange = new Range(row, range.start.column, row, curr);\n for (; row <= end; row++) {\n lineRange.start.row = lineRange.end.row = row;\n lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\n lineRange.end.column = next;\n prev = curr;\n curr = next;\n next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\n this.drawSingleLineMarker(stringBuilder, lineRange, \n clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\"\n + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end),\n layerConfig, row == end ? 0 : 1, extraStyle);\n }\n };\n this.drawMultiLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n var padding = this.$padding;\n var height = config.lineHeight;\n var top = this.$getTop(range.start.row, config);\n var left = padding + range.start.column * config.characterWidth;\n extraStyle = extraStyle || \"\";\n\n if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n var range1 = range.clone();\n range1.end.row = range1.start.row;\n range1.end.column = this.session.getLine(range1.start.row).length;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br1 ace_start\", config, null, extraStyle);\n } else {\n this.elt(\n clazz + \" ace_br1 ace_start\",\n \"height:\"+ height+ \"px;\"+ \"right:0;\"+ \"top:\"+top+ \"px;left:\"+ left+ \"px;\" + (extraStyle || \"\")\n );\n }\n if (this.session.$bidiHandler.isBidiRow(range.end.row)) {\n var range1 = range.clone();\n range1.start.row = range1.end.row;\n range1.start.column = 0;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br12\", config, null, extraStyle);\n } else {\n top = this.$getTop(range.end.row, config);\n var width = range.end.column * config.characterWidth;\n\n this.elt(\n clazz + \" ace_br12\",\n \"height:\"+ height+ \"px;\"+\n \"width:\"+ width+ \"px;\"+\n \"top:\"+ top+ \"px;\"+\n \"left:\"+ padding+ \"px;\"+ (extraStyle || \"\")\n );\n }\n height = (range.end.row - range.start.row - 1) * config.lineHeight;\n if (height <= 0)\n return;\n top = this.$getTop(range.start.row + 1, config);\n \n var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\n\n this.elt(\n clazz + (radiusClass ? \" ace_br\" + radiusClass : \"\"),\n \"height:\"+ height+ \"px;\"+\n \"right:0;\"+\n \"top:\"+ top+ \"px;\"+\n \"left:\"+ padding+ \"px;\"+ (extraStyle || \"\")\n );\n };\n this.drawSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) {\n if (this.session.$bidiHandler.isBidiRow(range.start.row))\n return this.drawBidiSingleLineMarker(stringBuilder, range, clazz, config, extraLength, extraStyle);\n var height = config.lineHeight;\n var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\n\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n\n this.elt(\n clazz,\n \"height:\"+ height+ \"px;\"+\n \"width:\"+ width+ \"px;\"+\n \"top:\"+ top+ \"px;\"+\n \"left:\"+ left+ \"px;\"+ (extraStyle || \"\")\n );\n };\n this.drawBidiSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) {\n var height = config.lineHeight, top = this.$getTop(range.start.row, config), padding = this.$padding;\n var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column);\n\n selections.forEach(function(selection) {\n this.elt(\n clazz,\n \"height:\" + height + \"px;\" +\n \"width:\" + selection.width + (extraLength || 0) + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + (padding + selection.left) + \"px;\" + (extraStyle || \"\")\n );\n }, this);\n };\n\n this.drawFullLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n if (range.start.row != range.end.row)\n height += this.$getTop(range.end.row, config) - top;\n\n this.elt(\n clazz,\n \"height:\"+ height+ \"px;\"+\n \"top:\"+ top+ \"px;\"+\n \"left:0;right:0;\"+ (extraStyle || \"\")\n );\n };\n \n this.drawScreenLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n\n this.elt(\n clazz,\n \"height:\"+ height+ \"px;\"+\n \"top:\"+ top+ \"px;\"+\n \"left:0;right:0;\"+ (extraStyle || \"\")\n );\n };\n\n}).call(Marker.prototype);\n\nexports.Marker = Marker;\n\n});\n\nace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/layer/lines\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar Lines = require(\"./lines\").Lines;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\nvar Text = function(parentEl) {\n this.dom = dom; \n this.element = this.dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_text-layer\";\n parentEl.appendChild(this.element);\n this.$updateEolChar = this.$updateEolChar.bind(this);\n this.$lines = new Lines(this.element);\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n\n this.EOF_CHAR = \"\\xB6\";\n this.EOL_CHAR_LF = \"\\xAC\";\n this.EOL_CHAR_CRLF = \"\\xa4\";\n this.EOL_CHAR = this.EOL_CHAR_LF;\n this.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\n this.SPACE_CHAR = \"\\xB7\";\n this.$padding = 0;\n this.MAX_LINE_LENGTH = 10000;\n\n this.$updateEolChar = function() {\n var doc = this.session.doc;\n var unixMode = doc.getNewLineCharacter() == \"\\n\" && doc.getNewLineMode() != \"windows\";\n var EOL_CHAR = unixMode ? this.EOL_CHAR_LF : this.EOL_CHAR_CRLF;\n if (this.EOL_CHAR != EOL_CHAR) {\n this.EOL_CHAR = EOL_CHAR;\n return true;\n }\n };\n\n this.setPadding = function(padding) {\n this.$padding = padding;\n this.element.style.margin = \"0 \" + padding + \"px\";\n };\n\n this.getLineHeight = function() {\n return this.$fontMetrics.$characterSize.height || 0;\n };\n\n this.getCharacterWidth = function() {\n return this.$fontMetrics.$characterSize.width || 0;\n };\n \n this.$setFontMetrics = function(measure) {\n this.$fontMetrics = measure;\n this.$fontMetrics.on(\"changeCharacterSize\", function(e) {\n this._signal(\"changeCharacterSize\", e);\n }.bind(this));\n this.$pollSizeChanges();\n };\n\n this.checkForSizeChanges = function() {\n this.$fontMetrics.checkForSizeChanges();\n };\n this.$pollSizeChanges = function() {\n return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n };\n this.setSession = function(session) {\n this.session = session;\n if (session)\n this.$computeTabString();\n };\n\n this.showInvisibles = false;\n this.showSpaces = false;\n this.showTabs = false;\n this.showEOL = false;\n this.setShowInvisibles = function(showInvisibles) {\n if (this.showInvisibles == showInvisibles)\n return false;\n\n this.showInvisibles = showInvisibles;\n if (typeof showInvisibles == \"string\") {\n this.showSpaces = /tab/i.test(showInvisibles);\n this.showTabs = /space/i.test(showInvisibles);\n this.showEOL = /eol/i.test(showInvisibles);\n } else {\n this.showSpaces = this.showTabs = this.showEOL = showInvisibles;\n }\n this.$computeTabString();\n return true;\n };\n\n this.displayIndentGuides = true;\n this.setDisplayIndentGuides = function(display) {\n if (this.displayIndentGuides == display)\n return false;\n\n this.displayIndentGuides = display;\n this.$computeTabString();\n return true;\n };\n\n this.$tabStrings = [];\n this.onChangeTabSize =\n this.$computeTabString = function() {\n var tabSize = this.session.getTabSize();\n this.tabSize = tabSize;\n var tabStr = this.$tabStrings = [0];\n for (var i = 1; i < tabSize + 1; i++) {\n if (this.showTabs) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_tab\";\n span.textContent = lang.stringRepeat(this.TAB_CHAR, i);\n tabStr.push(span);\n } else {\n tabStr.push(this.dom.createTextNode(lang.stringRepeat(\" \", i), this.element));\n }\n }\n if (this.displayIndentGuides) {\n this.$indentGuideRe = /\\s\\S| \\t|\\t |\\s$/;\n var className = \"ace_indent-guide\";\n var spaceClass = this.showSpaces ? \" ace_invisible ace_invisible_space\" : \"\";\n var spaceContent = this.showSpaces\n ? lang.stringRepeat(this.SPACE_CHAR, this.tabSize)\n : lang.stringRepeat(\" \", this.tabSize);\n\n var tabClass = this.showTabs ? \" ace_invisible ace_invisible_tab\" : \"\";\n var tabContent = this.showTabs \n ? lang.stringRepeat(this.TAB_CHAR, this.tabSize)\n : spaceContent;\n\n var span = this.dom.createElement(\"span\");\n span.className = className + spaceClass;\n span.textContent = spaceContent;\n this.$tabStrings[\" \"] = span;\n \n var span = this.dom.createElement(\"span\");\n span.className = className + tabClass;\n span.textContent = tabContent;\n this.$tabStrings[\"\\t\"] = span;\n }\n };\n\n this.updateLines = function(config, firstRow, lastRow) {\n if (this.config.lastRow != config.lastRow ||\n this.config.firstRow != config.firstRow) {\n return this.update(config);\n }\n \n this.config = config;\n\n var first = Math.max(firstRow, config.firstRow);\n var last = Math.min(lastRow, config.lastRow);\n\n var lineElements = this.element.childNodes;\n var lineElementsIdx = 0;\n\n for (var row = config.firstRow; row < first; row++) {\n var foldLine = this.session.getFoldLine(row);\n if (foldLine) {\n if (foldLine.containsRow(first)) {\n first = foldLine.start.row;\n break;\n } else {\n row = foldLine.end.row;\n }\n }\n lineElementsIdx ++;\n }\n\n var heightChanged = false;\n var row = first;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row+1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row :Infinity;\n }\n if (row > last)\n break;\n\n var lineElement = lineElements[lineElementsIdx++];\n if (lineElement) {\n this.dom.removeChildren(lineElement);\n this.$renderLine(\n lineElement, row, row == foldStart ? foldLine : false\n );\n\n if (heightChanged)\n lineElement.style.top = this.$lines.computeLineTop(row, config, this.session) + \"px\";\n\n var height = (config.lineHeight * this.session.getRowLength(row)) + \"px\";\n if (lineElement.style.height != height) {\n heightChanged = true;\n lineElement.style.height = height;\n }\n }\n row++;\n }\n if (heightChanged) {\n while (lineElementsIdx < this.$lines.cells.length) {\n var cell = this.$lines.cells[lineElementsIdx++];\n cell.element.style.top = this.$lines.computeLineTop(cell.row, config, this.session) + \"px\";\n }\n }\n };\n\n this.scrollLines = function(config) {\n var oldConfig = this.config;\n this.config = config;\n\n if (this.$lines.pageChanged(oldConfig, config))\n return this.update(config);\n \n this.$lines.moveContainer(config);\n \n var lastRow = config.lastRow;\n var oldLastRow = oldConfig ? oldConfig.lastRow : -1;\n\n if (!oldConfig || oldLastRow < config.firstRow)\n return this.update(config);\n\n if (lastRow < oldConfig.firstRow)\n return this.update(config);\n\n if (!oldConfig || oldConfig.lastRow < config.firstRow)\n return this.update(config);\n\n if (config.lastRow < oldConfig.firstRow)\n return this.update(config);\n\n if (oldConfig.firstRow < config.firstRow)\n for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--)\n this.$lines.shift();\n\n if (oldConfig.lastRow > config.lastRow)\n for (var row=this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row>0; row--)\n this.$lines.pop();\n\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1));\n }\n\n if (config.lastRow > oldConfig.lastRow) {\n this.$lines.push(this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow));\n }\n };\n\n this.$renderLinesFragment = function(config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row+1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n\n var line = this.$lines.createCell(row, config, this.session);\n \n var lineEl = line.element;\n this.dom.removeChildren(lineEl);\n dom.setStyle(lineEl.style, \"height\", this.$lines.computeLineHeight(row, config, this.session) + \"px\");\n dom.setStyle(lineEl.style, \"top\", this.$lines.computeLineTop(row, config, this.session) + \"px\");\n this.$renderLine(lineEl, row, row == foldStart ? foldLine : false);\n\n if (this.$useLineGroups()) {\n lineEl.className = \"ace_line_group\";\n } else {\n lineEl.className = \"ace_line\";\n }\n fragment.push(line);\n\n row++;\n }\n return fragment;\n };\n\n this.update = function(config) {\n this.$lines.moveContainer(config);\n \n this.config = config;\n\n var firstRow = config.firstRow;\n var lastRow = config.lastRow;\n\n var lines = this.$lines;\n while (lines.getLength())\n lines.pop();\n \n lines.push(this.$renderLinesFragment(config, firstRow, lastRow));\n };\n\n this.$textToken = {\n \"text\": true,\n \"rparen\": true,\n \"lparen\": true\n };\n\n this.$renderToken = function(parent, screenColumn, token, value) {\n var self = this;\n var re = /(\\t)|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\uFEFF\\uFFF9-\\uFFFC]+)|(\\u3000)|([\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3001-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g;\n \n var valueFragment = this.dom.createFragment(this.element);\n\n var m;\n var i = 0;\n while (m = re.exec(value)) {\n var tab = m[1];\n var simpleSpace = m[2];\n var controlCharacter = m[3];\n var cjkSpace = m[4];\n var cjk = m[5];\n \n if (!self.showSpaces && simpleSpace)\n continue;\n\n var before = i != m.index ? value.slice(i, m.index) : \"\";\n\n i = m.index + m[0].length;\n \n if (before) {\n valueFragment.appendChild(this.dom.createTextNode(before, this.element));\n }\n \n if (tab) {\n var tabSize = self.session.getScreenTabSize(screenColumn + m.index);\n valueFragment.appendChild(self.$tabStrings[tabSize].cloneNode(true));\n screenColumn += tabSize - 1;\n } else if (simpleSpace) {\n if (self.showSpaces) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, simpleSpace.length);\n valueFragment.appendChild(span);\n } else {\n valueFragment.appendChild(this.com.createTextNode(simpleSpace, this.element));\n }\n } else if (controlCharacter) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space ace_invalid\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, controlCharacter.length);\n valueFragment.appendChild(span);\n } else if (cjkSpace) {\n screenColumn += 1;\n \n var span = this.dom.createElement(\"span\");\n span.style.width = (self.config.characterWidth * 2) + \"px\";\n span.className = self.showSpaces ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\n span.textContent = self.showSpaces ? self.SPACE_CHAR : cjkSpace;\n valueFragment.appendChild(span);\n } else if (cjk) {\n screenColumn += 1;\n var span = this.dom.createElement(\"span\");\n span.style.width = (self.config.characterWidth * 2) + \"px\";\n span.className = \"ace_cjk\";\n span.textContent = cjk;\n valueFragment.appendChild(span);\n }\n }\n \n valueFragment.appendChild(this.dom.createTextNode(i ? value.slice(i) : value, this.element));\n\n if (!this.$textToken[token.type]) {\n var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n var span = this.dom.createElement(\"span\");\n if (token.type == \"fold\")\n span.style.width = (token.value.length * this.config.characterWidth) + \"px\";\n \n span.className = classes;\n span.appendChild(valueFragment);\n \n parent.appendChild(span);\n }\n else {\n parent.appendChild(valueFragment);\n }\n \n return screenColumn + value.length;\n };\n\n this.renderIndentGuide = function(parent, value, max) {\n var cols = value.search(this.$indentGuideRe);\n if (cols <= 0 || cols >= max)\n return value;\n if (value[0] == \" \") {\n cols -= cols % this.tabSize;\n var count = cols/this.tabSize;\n for (var i=0; i<count; i++) {\n parent.appendChild(this.$tabStrings[\" \"].cloneNode(true));\n }\n return value.substr(cols);\n } else if (value[0] == \"\\t\") {\n for (var i=0; i<cols; i++) {\n parent.appendChild(this.$tabStrings[\"\\t\"].cloneNode(true));\n }\n return value.substr(cols);\n }\n return value;\n };\n\n this.$createLineElement = function(parent) {\n var lineEl = this.dom.createElement(\"div\");\n lineEl.className = \"ace_line\";\n lineEl.style.height = this.config.lineHeight + \"px\";\n \n return lineEl;\n };\n\n this.$renderWrappedLine = function(parent, tokens, splits) {\n var chars = 0;\n var split = 0;\n var splitChars = splits[0];\n var screenColumn = 0;\n\n var lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\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(lineEl, value, splitChars);\n if (!value)\n continue;\n chars -= value.length;\n }\n\n if (chars + value.length < splitChars) {\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n chars += value.length;\n } else {\n while (chars + value.length >= splitChars) {\n screenColumn = this.$renderToken(\n lineEl, screenColumn,\n token, value.substring(0, splitChars - chars)\n );\n value = value.substring(splitChars - chars);\n chars = splitChars;\n\n lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\n\n lineEl.appendChild(this.dom.createTextNode(lang.stringRepeat(\"\\xa0\", splits.indent), this.element));\n\n split ++;\n screenColumn = 0;\n splitChars = splits[split] || Number.MAX_VALUE;\n }\n if (value.length != 0) {\n chars += value.length;\n screenColumn = this.$renderToken(\n lineEl, screenColumn, token, value\n );\n }\n }\n }\n \n if (splits[splits.length - 1] > this.MAX_LINE_LENGTH)\n this.$renderOverflowMessage(lineEl, screenColumn, null, \"\", true);\n };\n\n this.$renderSimpleLine = function(parent, tokens) {\n var screenColumn = 0;\n var token = tokens[0];\n var value = token.value;\n if (this.displayIndentGuides)\n value = this.renderIndentGuide(parent, value);\n if (value)\n screenColumn = this.$renderToken(parent, screenColumn, token, value);\n for (var i = 1; i < tokens.length; i++) {\n token = tokens[i];\n value = token.value;\n if (screenColumn + value.length > this.MAX_LINE_LENGTH)\n return this.$renderOverflowMessage(parent, screenColumn, token, value);\n screenColumn = this.$renderToken(parent, screenColumn, token, value);\n }\n };\n \n this.$renderOverflowMessage = function(parent, screenColumn, token, value, hide) {\n token && this.$renderToken(parent, screenColumn, token,\n value.slice(0, this.MAX_LINE_LENGTH - screenColumn));\n \n var overflowEl = this.dom.createElement(\"span\");\n overflowEl.className = \"ace_inline_button ace_keyword ace_toggle_wrap\";\n overflowEl.textContent = hide ? \"<hide>\" : \"<click to see more...>\";\n \n parent.appendChild(overflowEl); \n };\n this.$renderLine = function(parent, row, foldLine) {\n if (!foldLine && foldLine != false)\n foldLine = this.session.getFoldLine(row);\n\n if (foldLine)\n var tokens = this.$getFoldLineTokens(row, foldLine);\n else\n var tokens = this.session.getTokens(row);\n\n var lastLineEl = parent;\n if (tokens.length) {\n var splits = this.session.getRowSplitData(row);\n if (splits && splits.length) {\n this.$renderWrappedLine(parent, tokens, splits);\n var lastLineEl = parent.lastChild;\n } else {\n var lastLineEl = parent;\n if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n this.$renderSimpleLine(lastLineEl, tokens);\n }\n } else if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n\n if (this.showEOL && lastLineEl) {\n if (foldLine)\n row = foldLine.end.row;\n\n var invisibleEl = this.dom.createElement(\"span\");\n invisibleEl.className = \"ace_invisible ace_invisible_eol\";\n invisibleEl.textContent = row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR;\n \n lastLineEl.appendChild(invisibleEl);\n }\n };\n\n this.$getFoldLineTokens = function(row, foldLine) {\n var session = this.session;\n var renderTokens = [];\n\n function addTokens(tokens, from, to) {\n var idx = 0, col = 0;\n while ((col + tokens[idx].value.length) < from) {\n col += tokens[idx].value.length;\n idx++;\n\n if (idx == tokens.length)\n return;\n }\n if (col != from) {\n var value = tokens[idx].value.substring(from - col);\n if (value.length > (to - from))\n value = value.substring(0, to - from);\n\n renderTokens.push({\n type: tokens[idx].type,\n value: value\n });\n\n col = from + value.length;\n idx += 1;\n }\n\n while (col < to && idx < tokens.length) {\n var value = tokens[idx].value;\n if (value.length + col > to) {\n renderTokens.push({\n type: tokens[idx].type,\n value: value.substring(0, to - col)\n });\n } else\n renderTokens.push(tokens[idx]);\n col += value.length;\n idx += 1;\n }\n }\n\n var tokens = session.getTokens(row);\n foldLine.walk(function(placeholder, row, column, lastColumn, isNewRow) {\n if (placeholder != null) {\n renderTokens.push({\n type: \"fold\",\n value: placeholder\n });\n } else {\n if (isNewRow)\n tokens = session.getTokens(row);\n\n if (tokens.length)\n addTokens(tokens, lastColumn, column);\n }\n }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\n\n return renderTokens;\n };\n\n this.$useLineGroups = function() {\n return this.session.getUseWrapMode();\n };\n\n this.destroy = function() {};\n}).call(Text.prototype);\n\nexports.Text = Text;\n\n});\n\nace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\n\nvar Cursor = function(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_cursor-layer\";\n parentEl.appendChild(this.element);\n \n this.isVisible = false;\n this.isBlinking = true;\n this.blinkInterval = 1000;\n this.smoothBlinking = false;\n\n this.cursors = [];\n this.cursor = this.addCursor();\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.$updateCursors = this.$updateOpacity.bind(this);\n};\n\n(function() {\n \n this.$updateOpacity = function(val) {\n var cursors = this.cursors;\n for (var i = cursors.length; i--; )\n dom.setStyle(cursors[i].style, \"opacity\", val ? \"\" : \"0\");\n };\n\n this.$startCssAnimation = function() {\n var cursors = this.cursors;\n for (var i = cursors.length; i--; )\n cursors[i].style.animationDuration = this.blinkInterval + \"ms\";\n\n this.$isAnimating = true;\n setTimeout(function() {\n if (this.$isAnimating) {\n dom.addCssClass(this.element, \"ace_animate-blinking\");\n }\n }.bind(this));\n };\n \n this.$stopCssAnimation = function() {\n this.$isAnimating = false;\n dom.removeCssClass(this.element, \"ace_animate-blinking\");\n };\n\n this.$padding = 0;\n this.setPadding = function(padding) {\n this.$padding = padding;\n };\n\n this.setSession = function(session) {\n this.session = session;\n };\n\n this.setBlinking = function(blinking) {\n if (blinking != this.isBlinking) {\n this.isBlinking = blinking;\n this.restartTimer();\n }\n };\n\n this.setBlinkInterval = function(blinkInterval) {\n if (blinkInterval != this.blinkInterval) {\n this.blinkInterval = blinkInterval;\n this.restartTimer();\n }\n };\n\n this.setSmoothBlinking = function(smoothBlinking) {\n if (smoothBlinking != this.smoothBlinking) {\n this.smoothBlinking = smoothBlinking;\n dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\n this.$updateCursors(true);\n this.restartTimer();\n }\n };\n\n this.addCursor = function() {\n var el = dom.createElement(\"div\");\n el.className = \"ace_cursor\";\n this.element.appendChild(el);\n this.cursors.push(el);\n return el;\n };\n\n this.removeCursor = function() {\n if (this.cursors.length > 1) {\n var el = this.cursors.pop();\n el.parentNode.removeChild(el);\n return el;\n }\n };\n\n this.hideCursor = function() {\n this.isVisible = false;\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n\n this.showCursor = function() {\n this.isVisible = true;\n dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n\n this.restartTimer = function() {\n var update = this.$updateCursors;\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n this.$stopCssAnimation();\n\n if (this.smoothBlinking) {\n this.$isSmoothBlinking = false;\n dom.removeCssClass(this.element, \"ace_smooth-blinking\");\n }\n \n update(true);\n\n if (!this.isBlinking || !this.blinkInterval || !this.isVisible) {\n this.$stopCssAnimation();\n return;\n }\n\n if (this.smoothBlinking) {\n this.$isSmoothBlinking = true;\n setTimeout(function() {\n if (this.$isSmoothBlinking) {\n dom.addCssClass(this.element, \"ace_smooth-blinking\");\n }\n }.bind(this));\n }\n \n if (dom.HAS_CSS_ANIMATION) {\n this.$startCssAnimation();\n } else {\n var blink = function(){\n this.timeoutId = setTimeout(function() {\n update(false);\n }, 0.6 * this.blinkInterval);\n }.bind(this);\n \n this.intervalId = setInterval(function() {\n update(true);\n blink();\n }, this.blinkInterval);\n blink();\n }\n };\n\n this.getPixelPosition = function(position, onScreen) {\n if (!this.config || !this.session)\n return {left : 0, top : 0};\n\n if (!position)\n position = this.session.selection.getCursor();\n var pos = this.session.documentToScreenPosition(position);\n var cursorLeft = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, position.row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : pos.column * this.config.characterWidth);\n\n var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\n this.config.lineHeight;\n\n return {left : cursorLeft, top : cursorTop};\n };\n\n this.isCursorInView = function(pixelPos, config) {\n return pixelPos.top >= 0 && pixelPos.top < config.maxHeight;\n };\n\n this.update = function(config) {\n this.config = config;\n\n var selections = this.session.$selectionMarkers;\n var i = 0, cursorIndex = 0;\n\n if (selections === undefined || selections.length === 0){\n selections = [{cursor: null}];\n }\n\n for (var i = 0, n = selections.length; i < n; i++) {\n var pixelPos = this.getPixelPosition(selections[i].cursor, true);\n if ((pixelPos.top > config.height + config.offset ||\n pixelPos.top < 0) && i > 1) {\n continue;\n }\n\n var element = this.cursors[cursorIndex++] || this.addCursor();\n var style = element.style;\n \n if (!this.drawCursor) {\n if (!this.isCursorInView(pixelPos, config)) {\n dom.setStyle(style, \"display\", \"none\");\n } else {\n dom.setStyle(style, \"display\", \"block\");\n dom.translate(element, pixelPos.left, pixelPos.top);\n dom.setStyle(style, \"width\", Math.round(config.characterWidth) + \"px\");\n dom.setStyle(style, \"height\", config.lineHeight + \"px\");\n }\n } else {\n this.drawCursor(element, pixelPos, config, selections[i], this.session);\n }\n }\n while (this.cursors.length > cursorIndex)\n this.removeCursor();\n\n var overwrite = this.session.getOverwrite();\n this.$setOverwrite(overwrite);\n this.$pixelPos = pixelPos;\n this.restartTimer();\n };\n \n this.drawCursor = null;\n\n this.$setOverwrite = function(overwrite) {\n if (overwrite != this.overwrite) {\n this.overwrite = overwrite;\n if (overwrite)\n dom.addCssClass(this.element, \"ace_overwrite-cursors\");\n else\n dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\n }\n };\n\n this.destroy = function() {\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n };\n\n}).call(Cursor.prototype);\n\nexports.Cursor = Cursor;\n\n});\n\nace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar MAX_SCROLL_H = 0x8000;\nvar ScrollBar = function(parent) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_scrollbar ace_scrollbar\" + this.classSuffix;\n\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"ace_scrollbar-inner\";\n this.inner.textContent = \"\\xa0\";\n this.element.appendChild(this.inner);\n\n parent.appendChild(this.element);\n\n this.setVisible(false);\n this.skipEvent = false;\n\n event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\n event.addListener(this.element, \"mousedown\", event.preventDefault);\n};\n\n(function() {\n oop.implement(this, EventEmitter);\n\n this.setVisible = function(isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n}).call(ScrollBar.prototype);\nvar VScrollBar = function(parent, renderer) {\n ScrollBar.call(this, parent);\n this.scrollTop = 0;\n this.scrollHeight = 0;\n renderer.$scrollbarWidth = \n this.width = dom.scrollbarWidth(parent.ownerDocument);\n this.inner.style.width =\n this.element.style.width = (this.width || 15) + 5 + \"px\";\n this.$minWidth = 0;\n};\n\noop.inherits(VScrollBar, ScrollBar);\n\n(function() {\n\n this.classSuffix = '-v';\n this.onScroll = function() {\n if (!this.skipEvent) {\n this.scrollTop = this.element.scrollTop;\n if (this.coeff != 1) {\n var h = this.element.clientHeight / this.scrollHeight;\n this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h);\n }\n this._emit(\"scroll\", {data: this.scrollTop});\n }\n this.skipEvent = false;\n };\n this.getWidth = function() {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n this.setHeight = function(height) {\n this.element.style.height = height + \"px\";\n };\n this.setInnerHeight = \n this.setScrollHeight = function(height) {\n this.scrollHeight = height;\n if (height > MAX_SCROLL_H) {\n this.coeff = MAX_SCROLL_H / height;\n height = MAX_SCROLL_H;\n } else if (this.coeff != 1) {\n this.coeff = 1;\n }\n this.inner.style.height = height + \"px\";\n };\n this.setScrollTop = function(scrollTop) {\n if (this.scrollTop != scrollTop) {\n this.skipEvent = true;\n this.scrollTop = scrollTop;\n this.element.scrollTop = scrollTop * this.coeff;\n }\n };\n\n}).call(VScrollBar.prototype);\nvar HScrollBar = function(parent, renderer) {\n ScrollBar.call(this, parent);\n this.scrollLeft = 0;\n this.height = renderer.$scrollbarWidth;\n this.inner.style.height =\n this.element.style.height = (this.height || 15) + 5 + \"px\";\n};\n\noop.inherits(HScrollBar, ScrollBar);\n\n(function() {\n\n this.classSuffix = '-h';\n this.onScroll = function() {\n if (!this.skipEvent) {\n this.scrollLeft = this.element.scrollLeft;\n this._emit(\"scroll\", {data: this.scrollLeft});\n }\n this.skipEvent = false;\n };\n this.getHeight = function() {\n return this.isVisible ? this.height : 0;\n };\n this.setWidth = function(width) {\n this.element.style.width = width + \"px\";\n };\n this.setInnerWidth = function(width) {\n this.inner.style.width = width + \"px\";\n };\n this.setScrollWidth = function(width) {\n this.inner.style.width = width + \"px\";\n };\n this.setScrollLeft = function(scrollLeft) {\n if (this.scrollLeft != scrollLeft) {\n this.skipEvent = true;\n this.scrollLeft = this.element.scrollLeft = scrollLeft;\n }\n };\n\n}).call(HScrollBar.prototype);\n\n\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\n\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n});\n\nace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"], function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"./lib/event\");\n\n\nvar RenderLoop = function(onRender, win) {\n this.onRender = onRender;\n this.pending = false;\n this.changes = 0;\n this.$recursionLimit = 2;\n this.window = win || window;\n var _self = this;\n this._flush = function(ts) {\n _self.pending = false;\n var changes = _self.changes;\n\n if (changes) {\n event.blockIdle(100);\n _self.changes = 0;\n _self.onRender(changes);\n }\n \n if (_self.changes) {\n if (_self.$recursionLimit-- < 0) return;\n _self.schedule();\n } else {\n _self.$recursionLimit = 2;\n }\n };\n};\n\n(function() {\n\n this.schedule = function(change) {\n this.changes = this.changes | change;\n if (this.changes && !this.pending) {\n event.nextFrame(this._flush);\n this.pending = true;\n }\n };\n\n this.clear = function(change) {\n var changes = this.changes;\n this.changes = 0;\n return changes;\n };\n\n}).call(RenderLoop.prototype);\n\nexports.RenderLoop = RenderLoop;\n});\n\nace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\nvar CHAR_COUNT = 256;\nvar USE_OBSERVER = typeof ResizeObserver == \"function\";\nvar L = 200;\n\nvar FontMetrics = exports.FontMetrics = function(parentEl) {\n this.el = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.el.style, true);\n \n this.$main = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$main.style);\n \n this.$measureNode = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$measureNode.style);\n \n \n this.el.appendChild(this.$main);\n this.el.appendChild(this.$measureNode);\n parentEl.appendChild(this.el);\n \n this.$measureNode.textContent = lang.stringRepeat(\"X\", CHAR_COUNT);\n \n this.$characterSize = {width: 0, height: 0};\n \n \n if (USE_OBSERVER)\n this.$addObserver();\n else\n this.checkForSizeChanges();\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n \n this.$characterSize = {width: 0, height: 0};\n \n this.$setMeasureNodeStyles = function(style, isRoot) {\n style.width = style.height = \"auto\";\n style.left = style.top = \"0px\";\n style.visibility = \"hidden\";\n style.position = \"absolute\";\n style.whiteSpace = \"pre\";\n\n if (useragent.isIE < 8) {\n style[\"font-family\"] = \"inherit\";\n } else {\n style.font = \"inherit\";\n }\n style.overflow = isRoot ? \"hidden\" : \"visible\";\n };\n\n this.checkForSizeChanges = function(size) {\n if (size === undefined)\n size = this.$measureSizes();\n if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\n this.$measureNode.style.fontWeight = \"bold\";\n var boldSize = this.$measureSizes();\n this.$measureNode.style.fontWeight = \"\";\n this.$characterSize = size;\n this.charSizes = Object.create(null);\n this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\n this._emit(\"changeCharacterSize\", {data: size});\n }\n };\n \n this.$addObserver = function() {\n var self = this;\n this.$observer = new window.ResizeObserver(function(e) {\n self.checkForSizeChanges();\n });\n this.$observer.observe(this.$measureNode);\n };\n\n this.$pollSizeChanges = function() {\n if (this.$pollSizeChangesTimer || this.$observer)\n return this.$pollSizeChangesTimer;\n var self = this;\n \n return this.$pollSizeChangesTimer = event.onIdle(function cb() {\n self.checkForSizeChanges();\n event.onIdle(cb, 500);\n }, 500);\n };\n \n this.setPolling = function(val) {\n if (val) {\n this.$pollSizeChanges();\n } else if (this.$pollSizeChangesTimer) {\n clearInterval(this.$pollSizeChangesTimer);\n this.$pollSizeChangesTimer = 0;\n }\n };\n\n this.$measureSizes = function(node) {\n var size = {\n height: (node || this.$measureNode).clientHeight,\n width: (node || this.$measureNode).clientWidth / CHAR_COUNT\n };\n if (size.width === 0 || size.height === 0)\n return null;\n return size;\n };\n\n this.$measureCharWidth = function(ch) {\n this.$main.textContent = lang.stringRepeat(ch, CHAR_COUNT);\n var rect = this.$main.getBoundingClientRect();\n return rect.width / CHAR_COUNT;\n };\n \n this.getCharacterWidth = function(ch) {\n var w = this.charSizes[ch];\n if (w === undefined) {\n w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\n }\n return w;\n };\n\n this.destroy = function() {\n clearInterval(this.$pollSizeChangesTimer);\n if (this.$observer)\n this.$observer.disconnect();\n if (this.el && this.el.parentNode)\n this.el.parentNode.removeChild(this.el);\n };\n\n \n this.$getZoom = function getZoom(element) {\n if (!element || !element.parentElement) return 1;\n return (window.getComputedStyle(element).zoom || 1) * getZoom(element.parentElement);\n };\n this.$initTransformMeasureNodes = function() {\n var t = function(t, l) {\n return [\"div\", {\n style: \"position: absolute;top:\" + t + \"px;left:\" + l + \"px;\"\n }];\n };\n this.els = dom.buildDom([t(0, 0), t(L, 0), t(0, L), t(L, L)], this.el);\n };\n this.transformCoordinates = function(clientPos, elPos) {\n if (clientPos) {\n var zoom = this.$getZoom(this.el);\n clientPos = mul(1 / zoom, clientPos);\n }\n function solve(l1, l2, r) {\n var det = l1[1] * l2[0] - l1[0] * l2[1];\n return [\n (-l2[1] * r[0] + l2[0] * r[1]) / det,\n (+l1[1] * r[0] - l1[0] * r[1]) / det\n ];\n }\n function sub(a, b) { return [a[0] - b[0], a[1] - b[1]]; }\n function add(a, b) { return [a[0] + b[0], a[1] + b[1]]; }\n function mul(a, b) { return [a * b[0], a * b[1]]; }\n\n if (!this.els)\n this.$initTransformMeasureNodes();\n \n function p(el) {\n var r = el.getBoundingClientRect();\n return [r.left, r.top];\n }\n\n var a = p(this.els[0]);\n var b = p(this.els[1]);\n var c = p(this.els[2]);\n var d = p(this.els[3]);\n\n var h = solve(sub(d, b), sub(d, c), sub(add(b, c), add(d, a)));\n\n var m1 = mul(1 + h[0], sub(b, a));\n var m2 = mul(1 + h[1], sub(c, a));\n \n if (elPos) {\n var x = elPos;\n var k = h[0] * x[0] / L + h[1] * x[1] / L + 1;\n var ut = add(mul(x[0], m1), mul(x[1], m2));\n return add(mul(1 / k / L, ut), a);\n }\n var u = sub(clientPos, a);\n var f = solve(sub(m1, mul(h[0], u)), sub(m2, mul(h[1], u)), u);\n return mul(L, f);\n };\n \n}).call(FontMetrics.prototype);\n\n});\n\nace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/config\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar config = require(\"./config\");\nvar GutterLayer = require(\"./layer/gutter\").Gutter;\nvar MarkerLayer = require(\"./layer/marker\").Marker;\nvar TextLayer = require(\"./layer/text\").Text;\nvar CursorLayer = require(\"./layer/cursor\").Cursor;\nvar HScrollBar = require(\"./scrollbar\").HScrollBar;\nvar VScrollBar = require(\"./scrollbar\").VScrollBar;\nvar RenderLoop = require(\"./renderloop\").RenderLoop;\nvar FontMetrics = require(\"./layer/font_metrics\").FontMetrics;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar editorCss = \"\\\n.ace_br1 {border-top-left-radius : 3px;}\\\n.ace_br2 {border-top-right-radius : 3px;}\\\n.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\\\n.ace_br4 {border-bottom-right-radius: 3px;}\\\n.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\\\n.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\\\n.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\\\n.ace_br8 {border-bottom-left-radius : 3px;}\\\n.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\\\n.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\\\n.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_editor {\\\nposition: relative;\\\noverflow: hidden;\\\npadding: 0;\\\nfont: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\\\ndirection: ltr;\\\ntext-align: left;\\\n-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\\n}\\\n.ace_scroller {\\\nposition: absolute;\\\noverflow: hidden;\\\ntop: 0;\\\nbottom: 0;\\\nbackground-color: inherit;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\ncursor: text;\\\n}\\\n.ace_content {\\\nposition: absolute;\\\nbox-sizing: border-box;\\\nmin-width: 100%;\\\ncontain: style size layout;\\\nfont-variant-ligatures: no-common-ligatures;\\\n}\\\n.ace_dragging .ace_scroller:before{\\\nposition: absolute;\\\ntop: 0;\\\nleft: 0;\\\nright: 0;\\\nbottom: 0;\\\ncontent: '';\\\nbackground: rgba(250, 250, 250, 0.01);\\\nz-index: 1000;\\\n}\\\n.ace_dragging.ace_dark .ace_scroller:before{\\\nbackground: rgba(0, 0, 0, 0.01);\\\n}\\\n.ace_selecting, .ace_selecting * {\\\ncursor: text !important;\\\n}\\\n.ace_gutter {\\\nposition: absolute;\\\noverflow : hidden;\\\nwidth: auto;\\\ntop: 0;\\\nbottom: 0;\\\nleft: 0;\\\ncursor: default;\\\nz-index: 4;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\ncontain: style size layout;\\\n}\\\n.ace_gutter-active-line {\\\nposition: absolute;\\\nleft: 0;\\\nright: 0;\\\n}\\\n.ace_scroller.ace_scroll-left {\\\nbox-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\\\n}\\\n.ace_gutter-cell {\\\nposition: absolute;\\\ntop: 0;\\\nleft: 0;\\\nright: 0;\\\npadding-left: 19px;\\\npadding-right: 6px;\\\nbackground-repeat: no-repeat;\\\n}\\\n.ace_gutter-cell.ace_error {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\\\");\\\nbackground-repeat: no-repeat;\\\nbackground-position: 2px center;\\\n}\\\n.ace_gutter-cell.ace_warning {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\\\");\\\nbackground-position: 2px center;\\\n}\\\n.ace_gutter-cell.ace_info {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\\\");\\\nbackground-position: 2px center;\\\n}\\\n.ace_dark .ace_gutter-cell.ace_info {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_scrollbar {\\\ncontain: strict;\\\nposition: absolute;\\\nright: 0;\\\nbottom: 0;\\\nz-index: 6;\\\n}\\\n.ace_scrollbar-inner {\\\nposition: absolute;\\\ncursor: text;\\\nleft: 0;\\\ntop: 0;\\\n}\\\n.ace_scrollbar-v{\\\noverflow-x: hidden;\\\noverflow-y: scroll;\\\ntop: 0;\\\n}\\\n.ace_scrollbar-h {\\\noverflow-x: scroll;\\\noverflow-y: hidden;\\\nleft: 0;\\\n}\\\n.ace_print-margin {\\\nposition: absolute;\\\nheight: 100%;\\\n}\\\n.ace_text-input {\\\nposition: absolute;\\\nz-index: 0;\\\nwidth: 0.5em;\\\nheight: 1em;\\\nopacity: 0;\\\nbackground: transparent;\\\n-moz-appearance: none;\\\nappearance: none;\\\nborder: none;\\\nresize: none;\\\noutline: none;\\\noverflow: hidden;\\\nfont: inherit;\\\npadding: 0 1px;\\\nmargin: 0 -1px;\\\ncontain: strict;\\\n-ms-user-select: text;\\\n-moz-user-select: text;\\\n-webkit-user-select: text;\\\nuser-select: text;\\\nwhite-space: pre!important;\\\n}\\\n.ace_text-input.ace_composition {\\\nbackground: transparent;\\\ncolor: inherit;\\\nz-index: 1000;\\\nopacity: 1;\\\n}\\\n.ace_composition_placeholder { color: transparent }\\\n.ace_composition_marker { \\\nborder-bottom: 1px solid;\\\nposition: absolute;\\\nborder-radius: 0;\\\nmargin-top: 1px;\\\n}\\\n[ace_nocontext=true] {\\\ntransform: none!important;\\\nfilter: none!important;\\\nclip-path: none!important;\\\nmask : none!important;\\\ncontain: none!important;\\\nperspective: none!important;\\\nmix-blend-mode: initial!important;\\\nz-index: auto;\\\n}\\\n.ace_layer {\\\nz-index: 1;\\\nposition: absolute;\\\noverflow: hidden;\\\nword-wrap: normal;\\\nwhite-space: pre;\\\nheight: 100%;\\\nwidth: 100%;\\\nbox-sizing: border-box;\\\npointer-events: none;\\\n}\\\n.ace_gutter-layer {\\\nposition: relative;\\\nwidth: auto;\\\ntext-align: right;\\\npointer-events: auto;\\\nheight: 1000000px;\\\ncontain: style size layout;\\\n}\\\n.ace_text-layer {\\\nfont: inherit !important;\\\nposition: absolute;\\\nheight: 1000000px;\\\nwidth: 1000000px;\\\ncontain: style size layout;\\\n}\\\n.ace_text-layer > .ace_line, .ace_text-layer > .ace_line_group {\\\ncontain: style size layout;\\\nposition: absolute;\\\ntop: 0;\\\nleft: 0;\\\nright: 0;\\\n}\\\n.ace_hidpi .ace_text-layer,\\\n.ace_hidpi .ace_gutter-layer,\\\n.ace_hidpi .ace_content,\\\n.ace_hidpi .ace_gutter {\\\ncontain: strict;\\\nwill-change: transform;\\\n}\\\n.ace_hidpi .ace_text-layer > .ace_line, \\\n.ace_hidpi .ace_text-layer > .ace_line_group {\\\ncontain: strict;\\\n}\\\n.ace_cjk {\\\ndisplay: inline-block;\\\ntext-align: center;\\\n}\\\n.ace_cursor-layer {\\\nz-index: 4;\\\n}\\\n.ace_cursor {\\\nz-index: 4;\\\nposition: absolute;\\\nbox-sizing: border-box;\\\nborder-left: 2px solid;\\\ntransform: translatez(0);\\\n}\\\n.ace_multiselect .ace_cursor {\\\nborder-left-width: 1px;\\\n}\\\n.ace_slim-cursors .ace_cursor {\\\nborder-left-width: 1px;\\\n}\\\n.ace_overwrite-cursors .ace_cursor {\\\nborder-left-width: 0;\\\nborder-bottom: 1px solid;\\\n}\\\n.ace_hidden-cursors .ace_cursor {\\\nopacity: 0.2;\\\n}\\\n.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor {\\\nopacity: 0;\\\n}\\\n.ace_smooth-blinking .ace_cursor {\\\ntransition: opacity 0.18s;\\\n}\\\n.ace_animate-blinking .ace_cursor {\\\nanimation-duration: 1000ms;\\\nanimation-timing-function: step-end;\\\nanimation-name: blink-ace-animate;\\\nanimation-iteration-count: infinite;\\\n}\\\n.ace_animate-blinking.ace_smooth-blinking .ace_cursor {\\\nanimation-duration: 1000ms;\\\nanimation-timing-function: ease-in-out;\\\nanimation-name: blink-ace-animate-smooth;\\\n}\\\n@keyframes blink-ace-animate {\\\nfrom, to { opacity: 1; }\\\n60% { opacity: 0; }\\\n}\\\n@keyframes blink-ace-animate-smooth {\\\nfrom, to { opacity: 1; }\\\n45% { opacity: 1; }\\\n60% { opacity: 0; }\\\n85% { opacity: 0; }\\\n}\\\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\\nposition: absolute;\\\nz-index: 3;\\\n}\\\n.ace_marker-layer .ace_selection {\\\nposition: absolute;\\\nz-index: 5;\\\n}\\\n.ace_marker-layer .ace_bracket {\\\nposition: absolute;\\\nz-index: 6;\\\n}\\\n.ace_marker-layer .ace_error_bracket {\\\nposition: absolute;\\\nborder-bottom: 1px solid #DE5555;\\\nborder-radius: 0;\\\n}\\\n.ace_marker-layer .ace_active-line {\\\nposition: absolute;\\\nz-index: 2;\\\n}\\\n.ace_marker-layer .ace_selected-word {\\\nposition: absolute;\\\nz-index: 4;\\\nbox-sizing: border-box;\\\n}\\\n.ace_line .ace_fold {\\\nbox-sizing: border-box;\\\ndisplay: inline-block;\\\nheight: 11px;\\\nmargin-top: -2px;\\\nvertical-align: middle;\\\nbackground-image:\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\\nbackground-repeat: no-repeat, repeat-x;\\\nbackground-position: center center, top left;\\\ncolor: transparent;\\\nborder: 1px solid black;\\\nborder-radius: 2px;\\\ncursor: pointer;\\\npointer-events: auto;\\\n}\\\n.ace_dark .ace_fold {\\\n}\\\n.ace_fold:hover{\\\nbackground-image:\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_tooltip {\\\nbackground-color: #FFF;\\\nbackground-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\\\nborder: 1px solid gray;\\\nborder-radius: 1px;\\\nbox-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\\ncolor: black;\\\nmax-width: 100%;\\\npadding: 3px 4px;\\\nposition: fixed;\\\nz-index: 999999;\\\nbox-sizing: border-box;\\\ncursor: default;\\\nwhite-space: pre;\\\nword-wrap: break-word;\\\nline-height: normal;\\\nfont-style: normal;\\\nfont-weight: normal;\\\nletter-spacing: normal;\\\npointer-events: none;\\\n}\\\n.ace_folding-enabled > .ace_gutter-cell {\\\npadding-right: 13px;\\\n}\\\n.ace_fold-widget {\\\nbox-sizing: border-box;\\\nmargin: 0 -12px 0 1px;\\\ndisplay: none;\\\nwidth: 11px;\\\nvertical-align: top;\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\\nbackground-repeat: no-repeat;\\\nbackground-position: center;\\\nborder-radius: 3px;\\\nborder: 1px solid transparent;\\\ncursor: pointer;\\\n}\\\n.ace_folding-enabled .ace_fold-widget {\\\ndisplay: inline-block; \\\n}\\\n.ace_fold-widget.ace_end {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_fold-widget.ace_closed {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\\n}\\\n.ace_fold-widget:hover {\\\nborder: 1px solid rgba(0, 0, 0, 0.3);\\\nbackground-color: rgba(255, 255, 255, 0.2);\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\\n}\\\n.ace_fold-widget:active {\\\nborder: 1px solid rgba(0, 0, 0, 0.4);\\\nbackground-color: rgba(0, 0, 0, 0.05);\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\\n}\\\n.ace_dark .ace_fold-widget {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_dark .ace_fold-widget.ace_end {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_dark .ace_fold-widget.ace_closed {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_dark .ace_fold-widget:hover {\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\nbackground-color: rgba(255, 255, 255, 0.1);\\\n}\\\n.ace_dark .ace_fold-widget:active {\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\n}\\\n.ace_inline_button {\\\nborder: 1px solid lightgray;\\\ndisplay: inline-block;\\\nmargin: -1px 8px;\\\npadding: 0 5px;\\\npointer-events: auto;\\\ncursor: pointer;\\\n}\\\n.ace_inline_button:hover {\\\nborder-color: gray;\\\nbackground: rgba(200,200,200,0.2);\\\ndisplay: inline-block;\\\npointer-events: auto;\\\n}\\\n.ace_fold-widget.ace_invalid {\\\nbackground-color: #FFB4B4;\\\nborder-color: #DE5555;\\\n}\\\n.ace_fade-fold-widgets .ace_fold-widget {\\\ntransition: opacity 0.4s ease 0.05s;\\\nopacity: 0;\\\n}\\\n.ace_fade-fold-widgets:hover .ace_fold-widget {\\\ntransition: opacity 0.05s ease 0.05s;\\\nopacity:1;\\\n}\\\n.ace_underline {\\\ntext-decoration: underline;\\\n}\\\n.ace_bold {\\\nfont-weight: bold;\\\n}\\\n.ace_nobold .ace_bold {\\\nfont-weight: normal;\\\n}\\\n.ace_italic {\\\nfont-style: italic;\\\n}\\\n.ace_error-marker {\\\nbackground-color: rgba(255, 0, 0,0.2);\\\nposition: absolute;\\\nz-index: 9;\\\n}\\\n.ace_highlight-marker {\\\nbackground-color: rgba(255, 255, 0,0.2);\\\nposition: absolute;\\\nz-index: 8;\\\n}\\\n.ace_mobile-menu {\\\nposition: absolute;\\\nline-height: 1.5;\\\nborder-radius: 4px;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\nbackground: white;\\\nbox-shadow: 1px 3px 2px grey;\\\nborder: 1px solid #dcdcdc;\\\ncolor: black;\\\n}\\\n.ace_dark > .ace_mobile-menu {\\\nbackground: #333;\\\ncolor: #ccc;\\\nbox-shadow: 1px 3px 2px grey;\\\nborder: 1px solid #444;\\\n}\\\n.ace_mobile-button {\\\npadding: 2px;\\\ncursor: pointer;\\\noverflow: hidden;\\\n}\\\n.ace_mobile-button:hover {\\\nbackground-color: #eee;\\\nopacity:1;\\\n}\\\n.ace_mobile-button:active {\\\nbackground-color: #ddd;\\\n}\\\n.ace_placeholder {\\\nfont-family: arial;\\\ntransform: scale(0.9);\\\ntransform-origin: left;\\\nwhite-space: pre;\\\nopacity: 0.7;\\\nmargin: 0 10px;\\\n}\";\n\nvar useragent = require(\"./lib/useragent\");\nvar HIDE_TEXTAREA = useragent.isIE;\n\ndom.importCssString(editorCss, \"ace_editor.css\", false);\n\nvar VirtualRenderer = function(container, theme) {\n var _self = this;\n\n this.container = container || dom.createElement(\"div\");\n\n dom.addCssClass(this.container, \"ace_editor\");\n if (dom.HI_DPI) dom.addCssClass(this.container, \"ace_hidpi\");\n\n this.setTheme(theme);\n if (config.get(\"useStrictCSP\") == null) \n config.set(\"useStrictCSP\", false);\n\n this.$gutter = dom.createElement(\"div\");\n this.$gutter.className = \"ace_gutter\";\n this.container.appendChild(this.$gutter);\n this.$gutter.setAttribute(\"aria-hidden\", true);\n\n this.scroller = dom.createElement(\"div\");\n this.scroller.className = \"ace_scroller\";\n \n this.container.appendChild(this.scroller);\n\n this.content = dom.createElement(\"div\");\n this.content.className = \"ace_content\";\n this.scroller.appendChild(this.content);\n\n this.$gutterLayer = new GutterLayer(this.$gutter);\n this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\n\n this.$markerBack = new MarkerLayer(this.content);\n\n var textLayer = this.$textLayer = new TextLayer(this.content);\n this.canvas = textLayer.element;\n\n this.$markerFront = new MarkerLayer(this.content);\n\n this.$cursorLayer = new CursorLayer(this.content);\n this.$horizScroll = false;\n this.$vScroll = false;\n\n this.scrollBar = \n this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.on(\"scroll\", function(e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.on(\"scroll\", function(e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n\n this.scrollTop = 0;\n this.scrollLeft = 0;\n\n this.cursorPos = {\n row : 0,\n column : 0\n };\n\n this.$fontMetrics = new FontMetrics(this.container);\n this.$textLayer.$setFontMetrics(this.$fontMetrics);\n this.$textLayer.on(\"changeCharacterSize\", function(e) {\n _self.updateCharacterSize();\n _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\n _self._signal(\"changeCharacterSize\", e);\n });\n\n this.$size = {\n width: 0,\n height: 0,\n scrollerHeight: 0,\n scrollerWidth: 0,\n $dirty: true\n };\n\n this.layerConfig = {\n width : 1,\n padding : 0,\n firstRow : 0,\n firstRowScreen: 0,\n lastRow : 0,\n lineHeight : 0,\n characterWidth : 0,\n minHeight : 1,\n maxHeight : 1,\n offset : 0,\n height : 1,\n gutterOffset: 1\n };\n \n this.scrollMargin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n \n this.margin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n \n this.$keepTextAreaAtCursor = !useragent.isIOS;\n\n this.$loop = new RenderLoop(\n this.$renderChanges.bind(this),\n this.container.ownerDocument.defaultView\n );\n this.$loop.schedule(this.CHANGE_FULL);\n\n this.updateCharacterSize();\n this.setPadding(4);\n config.resetOptions(this);\n config._signal(\"renderer\", this);\n};\n\n(function() {\n\n this.CHANGE_CURSOR = 1;\n this.CHANGE_MARKER = 2;\n this.CHANGE_GUTTER = 4;\n this.CHANGE_SCROLL = 8;\n this.CHANGE_LINES = 16;\n this.CHANGE_TEXT = 32;\n this.CHANGE_SIZE = 64;\n this.CHANGE_MARKER_BACK = 128;\n this.CHANGE_MARKER_FRONT = 256;\n this.CHANGE_FULL = 512;\n this.CHANGE_H_SCROLL = 1024;\n\n oop.implement(this, EventEmitter);\n\n this.updateCharacterSize = function() {\n if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\n this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\n this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\n }\n\n this.layerConfig.characterWidth =\n this.characterWidth = this.$textLayer.getCharacterWidth();\n this.layerConfig.lineHeight =\n this.lineHeight = this.$textLayer.getLineHeight();\n this.$updatePrintMargin();\n dom.setStyle(this.scroller.style, \"line-height\", this.lineHeight + \"px\");\n };\n this.setSession = function(session) {\n if (this.session)\n this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\n \n this.session = session;\n if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\n session.setScrollTop(-this.scrollMargin.top);\n\n this.$cursorLayer.setSession(session);\n this.$markerBack.setSession(session);\n this.$markerFront.setSession(session);\n this.$gutterLayer.setSession(session);\n this.$textLayer.setSession(session);\n if (!session)\n return;\n \n this.$loop.schedule(this.CHANGE_FULL);\n this.session.$setFontMetrics(this.$fontMetrics);\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n \n this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\n this.onChangeNewLineMode();\n this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\n };\n this.updateLines = function(firstRow, lastRow, force) {\n if (lastRow === undefined)\n lastRow = Infinity;\n\n if (!this.$changedLines) {\n this.$changedLines = {\n firstRow: firstRow,\n lastRow: lastRow\n };\n }\n else {\n if (this.$changedLines.firstRow > firstRow)\n this.$changedLines.firstRow = firstRow;\n\n if (this.$changedLines.lastRow < lastRow)\n this.$changedLines.lastRow = lastRow;\n }\n if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\n if (force)\n this.$changedLines.lastRow = this.layerConfig.lastRow;\n else\n return;\n }\n if (this.$changedLines.firstRow > this.layerConfig.lastRow)\n return;\n this.$loop.schedule(this.CHANGE_LINES);\n };\n\n this.onChangeNewLineMode = function() {\n this.$loop.schedule(this.CHANGE_TEXT);\n this.$textLayer.$updateEolChar();\n this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR);\n };\n \n this.onChangeTabSize = function() {\n this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\n this.$textLayer.onChangeTabSize();\n };\n this.updateText = function() {\n this.$loop.schedule(this.CHANGE_TEXT);\n };\n this.updateFull = function(force) {\n if (force)\n this.$renderChanges(this.CHANGE_FULL, true);\n else\n this.$loop.schedule(this.CHANGE_FULL);\n };\n this.updateFontSize = function() {\n this.$textLayer.checkForSizeChanges();\n };\n\n this.$changes = 0;\n this.$updateSizeAsync = function() {\n if (this.$loop.pending)\n this.$size.$dirty = true;\n else\n this.onResize();\n };\n this.onResize = function(force, gutterWidth, width, height) {\n if (this.resizing > 2)\n return;\n else if (this.resizing > 0)\n this.resizing++;\n else\n this.resizing = force ? 1 : 0;\n var el = this.container;\n if (!height)\n height = el.clientHeight || el.scrollHeight;\n if (!width)\n width = el.clientWidth || el.scrollWidth;\n var changes = this.$updateCachedSize(force, gutterWidth, width, height);\n\n \n if (!this.$size.scrollerHeight || (!width && !height))\n return this.resizing = 0;\n\n if (force)\n this.$gutterLayer.$padding = null;\n\n if (force)\n this.$renderChanges(changes | this.$changes, true);\n else\n this.$loop.schedule(changes | this.$changes);\n\n if (this.resizing)\n this.resizing = 0;\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n };\n \n this.$updateCachedSize = function(force, gutterWidth, width, height) {\n height -= (this.$extraHeight || 0);\n var changes = 0;\n var size = this.$size;\n var oldSize = {\n width: size.width,\n height: size.height,\n scrollerHeight: size.scrollerHeight,\n scrollerWidth: size.scrollerWidth\n };\n if (height && (force || size.height != height)) {\n size.height = height;\n changes |= this.CHANGE_SIZE;\n\n size.scrollerHeight = size.height;\n if (this.$horizScroll)\n size.scrollerHeight -= this.scrollBarH.getHeight();\n this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\n\n changes = changes | this.CHANGE_SCROLL;\n }\n\n if (width && (force || size.width != width)) {\n changes |= this.CHANGE_SIZE;\n size.width = width;\n \n if (gutterWidth == null)\n gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n \n this.gutterWidth = gutterWidth;\n \n dom.setStyle(this.scrollBarH.element.style, \"left\", gutterWidth + \"px\");\n dom.setStyle(this.scroller.style, \"left\", gutterWidth + this.margin.left + \"px\");\n size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth() - this.margin.h);\n dom.setStyle(this.$gutter.style, \"left\", this.margin.left + \"px\");\n \n var right = this.scrollBarV.getWidth() + \"px\";\n dom.setStyle(this.scrollBarH.element.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"bottom\", this.scrollBarH.getHeight());\n\n if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) {\n changes |= this.CHANGE_FULL;\n }\n }\n \n size.$dirty = !width || !height;\n\n if (changes)\n this._signal(\"resize\", oldSize);\n\n return changes;\n };\n\n this.onGutterResize = function(width) {\n var gutterWidth = this.$showGutter ? width : 0;\n if (gutterWidth != this.gutterWidth)\n this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\n\n if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\n this.$loop.schedule(this.CHANGE_FULL);\n } else if (this.$size.$dirty) {\n this.$loop.schedule(this.CHANGE_FULL);\n } else {\n this.$computeLayerConfig();\n }\n };\n this.adjustWrapLimit = function() {\n var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n var limit = Math.floor(availableWidth / this.characterWidth);\n return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\n };\n this.setAnimatedScroll = function(shouldAnimate){\n this.setOption(\"animatedScroll\", shouldAnimate);\n };\n this.getAnimatedScroll = function() {\n return this.$animatedScroll;\n };\n this.setShowInvisibles = function(showInvisibles) {\n this.setOption(\"showInvisibles\", showInvisibles);\n this.session.$bidiHandler.setShowInvisibles(showInvisibles);\n };\n this.getShowInvisibles = function() {\n return this.getOption(\"showInvisibles\");\n };\n this.getDisplayIndentGuides = function() {\n return this.getOption(\"displayIndentGuides\");\n };\n\n this.setDisplayIndentGuides = function(display) {\n this.setOption(\"displayIndentGuides\", display);\n };\n this.setShowPrintMargin = function(showPrintMargin) {\n this.setOption(\"showPrintMargin\", showPrintMargin);\n };\n this.getShowPrintMargin = function() {\n return this.getOption(\"showPrintMargin\");\n };\n this.setPrintMarginColumn = function(showPrintMargin) {\n this.setOption(\"printMarginColumn\", showPrintMargin);\n };\n this.getPrintMarginColumn = function() {\n return this.getOption(\"printMarginColumn\");\n };\n this.getShowGutter = function(){\n return this.getOption(\"showGutter\");\n };\n this.setShowGutter = function(show){\n return this.setOption(\"showGutter\", show);\n };\n\n this.getFadeFoldWidgets = function(){\n return this.getOption(\"fadeFoldWidgets\");\n };\n\n this.setFadeFoldWidgets = function(show) {\n this.setOption(\"fadeFoldWidgets\", show);\n };\n\n this.setHighlightGutterLine = function(shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n\n this.getHighlightGutterLine = function() {\n return this.getOption(\"highlightGutterLine\");\n };\n\n this.$updatePrintMargin = function() {\n if (!this.$showPrintMargin && !this.$printMarginEl)\n return;\n\n if (!this.$printMarginEl) {\n var containerEl = dom.createElement(\"div\");\n containerEl.className = \"ace_layer ace_print-margin-layer\";\n this.$printMarginEl = dom.createElement(\"div\");\n this.$printMarginEl.className = \"ace_print-margin\";\n containerEl.appendChild(this.$printMarginEl);\n this.content.insertBefore(containerEl, this.content.firstChild);\n }\n\n var style = this.$printMarginEl.style;\n style.left = Math.round(this.characterWidth * this.$printMarginColumn + this.$padding) + \"px\";\n style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\n \n if (this.session && this.session.$wrap == -1)\n this.adjustWrapLimit();\n };\n this.getContainerElement = function() {\n return this.container;\n };\n this.getMouseEventTarget = function() {\n return this.scroller;\n };\n this.getTextAreaContainer = function() {\n return this.container;\n };\n this.$moveTextAreaToCursor = function() {\n if (this.$isMousePressed) return;\n var style = this.textarea.style;\n var composition = this.$composition;\n if (!this.$keepTextAreaAtCursor && !composition) {\n dom.translate(this.textarea, -100, 0);\n return;\n }\n var pixelPos = this.$cursorLayer.$pixelPos;\n if (!pixelPos)\n return;\n if (composition && composition.markerRange)\n pixelPos = this.$cursorLayer.getPixelPosition(composition.markerRange.start, true);\n \n var config = this.layerConfig;\n var posTop = pixelPos.top;\n var posLeft = pixelPos.left;\n posTop -= config.offset;\n\n var h = composition && composition.useTextareaForIME ? this.lineHeight : HIDE_TEXTAREA ? 0 : 1;\n if (posTop < 0 || posTop > config.height - h) {\n dom.translate(this.textarea, 0, 0);\n return;\n }\n\n var w = 1;\n var maxTop = this.$size.height - h;\n if (!composition) {\n posTop += this.lineHeight;\n }\n else {\n if (composition.useTextareaForIME) {\n var val = this.textarea.value;\n w = this.characterWidth * (this.session.$getStringScreenWidth(val)[0]);\n }\n else {\n posTop += this.lineHeight + 2;\n }\n }\n \n posLeft -= this.scrollLeft;\n if (posLeft > this.$size.scrollerWidth - w)\n posLeft = this.$size.scrollerWidth - w;\n\n posLeft += this.gutterWidth + this.margin.left;\n\n dom.setStyle(style, \"height\", h + \"px\");\n dom.setStyle(style, \"width\", w + \"px\");\n dom.translate(this.textarea, Math.min(posLeft, this.$size.scrollerWidth - w), Math.min(posTop, maxTop));\n };\n this.getFirstVisibleRow = function() {\n return this.layerConfig.firstRow;\n };\n this.getFirstFullyVisibleRow = function() {\n return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\n };\n this.getLastFullyVisibleRow = function() {\n var config = this.layerConfig;\n var lastRow = config.lastRow;\n var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\n if (top - this.session.getScrollTop() > config.height - config.lineHeight)\n return lastRow - 1;\n return lastRow;\n };\n this.getLastVisibleRow = function() {\n return this.layerConfig.lastRow;\n };\n\n this.$padding = null;\n this.setPadding = function(padding) {\n this.$padding = padding;\n this.$textLayer.setPadding(padding);\n this.$cursorLayer.setPadding(padding);\n this.$markerFront.setPadding(padding);\n this.$markerBack.setPadding(padding);\n this.$loop.schedule(this.CHANGE_FULL);\n this.$updatePrintMargin();\n };\n \n this.setScrollMargin = function(top, bottom, left, right) {\n var sm = this.scrollMargin;\n sm.top = top|0;\n sm.bottom = bottom|0;\n sm.right = right|0;\n sm.left = left|0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n if (sm.top && this.scrollTop <= 0 && this.session)\n this.session.setScrollTop(-sm.top);\n this.updateFull();\n };\n \n this.setMargin = function(top, bottom, left, right) {\n var sm = this.margin;\n sm.top = top|0;\n sm.bottom = bottom|0;\n sm.right = right|0;\n sm.left = left|0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n this.$updateCachedSize(true, this.gutterWidth, this.$size.width, this.$size.height);\n this.updateFull();\n };\n this.getHScrollBarAlwaysVisible = function() {\n return this.$hScrollBarAlwaysVisible;\n };\n this.setHScrollBarAlwaysVisible = function(alwaysVisible) {\n this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\n };\n this.getVScrollBarAlwaysVisible = function() {\n return this.$vScrollBarAlwaysVisible;\n };\n this.setVScrollBarAlwaysVisible = function(alwaysVisible) {\n this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\n };\n\n this.$updateScrollBarV = function() {\n var scrollHeight = this.layerConfig.maxHeight;\n var scrollerHeight = this.$size.scrollerHeight;\n if (!this.$maxLines && this.$scrollPastEnd) {\n scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\n if (this.scrollTop > scrollHeight - scrollerHeight) {\n scrollHeight = this.scrollTop + scrollerHeight;\n this.scrollBarV.scrollTop = null;\n }\n }\n this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\n this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\n };\n this.$updateScrollBarH = function() {\n this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\n this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\n };\n \n this.$frozen = false;\n this.freeze = function() {\n this.$frozen = true;\n };\n \n this.unfreeze = function() {\n this.$frozen = false;\n };\n\n this.$renderChanges = function(changes, force) {\n if (this.$changes) {\n changes |= this.$changes;\n this.$changes = 0;\n }\n if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {\n this.$changes |= changes;\n return; \n } \n if (this.$size.$dirty) {\n this.$changes |= changes;\n return this.onResize(true);\n }\n if (!this.lineHeight) {\n this.$textLayer.checkForSizeChanges();\n }\n \n this._signal(\"beforeRender\", changes);\n \n if (this.session && this.session.$bidiHandler)\n this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);\n\n var config = this.layerConfig;\n if (changes & this.CHANGE_FULL ||\n changes & this.CHANGE_SIZE ||\n changes & this.CHANGE_TEXT ||\n changes & this.CHANGE_LINES ||\n changes & this.CHANGE_SCROLL ||\n changes & this.CHANGE_H_SCROLL\n ) {\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\n var st = this.scrollTop + (config.firstRow - this.layerConfig.firstRow) * this.lineHeight;\n if (st > 0) {\n this.scrollTop = st;\n changes = changes | this.CHANGE_SCROLL;\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n }\n }\n config = this.layerConfig;\n this.$updateScrollBarV();\n if (changes & this.CHANGE_H_SCROLL)\n this.$updateScrollBarH();\n \n dom.translate(this.content, -this.scrollLeft, -config.offset);\n \n var width = config.width + 2 * this.$padding + \"px\";\n var height = config.minHeight + \"px\";\n \n dom.setStyle(this.content.style, \"width\", width);\n dom.setStyle(this.content.style, \"height\", height);\n }\n if (changes & this.CHANGE_H_SCROLL) {\n dom.translate(this.content, -this.scrollLeft, -config.offset);\n this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller\" : \"ace_scroller ace_scroll-left\";\n }\n if (changes & this.CHANGE_FULL) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\", changes);\n return;\n }\n if (changes & this.CHANGE_SCROLL) {\n this.$changedLines = null;\n if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)\n this.$textLayer.update(config);\n else\n this.$textLayer.scrollLines(config);\n\n if (this.$showGutter) {\n if (changes & this.CHANGE_GUTTER || changes & this.CHANGE_LINES)\n this.$gutterLayer.update(config);\n else\n this.$gutterLayer.scrollLines(config);\n }\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\", changes);\n return;\n }\n\n if (changes & this.CHANGE_TEXT) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n }\n else if (changes & this.CHANGE_LINES) {\n if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\n this.$gutterLayer.update(config);\n }\n else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n }\n else if (changes & this.CHANGE_CURSOR) {\n if (this.$highlightGutterLine)\n this.$gutterLayer.updateLineHighlight(config);\n }\n\n if (changes & this.CHANGE_CURSOR) {\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n }\n\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\n this.$markerFront.update(config);\n }\n\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\n this.$markerBack.update(config);\n }\n\n this._signal(\"afterRender\", changes);\n };\n\n \n this.$autosize = function() {\n var height = this.session.getScreenLength() * this.lineHeight;\n var maxHeight = this.$maxLines * this.lineHeight;\n var desiredHeight = Math.min(maxHeight, \n Math.max((this.$minLines || 1) * this.lineHeight, height)\n ) + this.scrollMargin.v + (this.$extraHeight || 0);\n if (this.$horizScroll)\n desiredHeight += this.scrollBarH.getHeight();\n if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight)\n desiredHeight = this.$maxPixelHeight;\n \n var hideScrollbars = desiredHeight <= 2 * this.lineHeight;\n var vScroll = !hideScrollbars && height > maxHeight;\n \n if (desiredHeight != this.desiredHeight ||\n this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\n if (vScroll != this.$vScroll) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n \n var w = this.container.clientWidth;\n this.container.style.height = desiredHeight + \"px\";\n this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\n this.desiredHeight = desiredHeight;\n \n this._signal(\"autosize\");\n }\n };\n \n this.$computeLayerConfig = function() {\n var session = this.session;\n var size = this.$size;\n \n var hideScrollbars = size.height <= 2 * this.lineHeight;\n var screenLines = this.session.getScreenLength();\n var maxHeight = screenLines * this.lineHeight;\n\n var longestLine = this.$getLongestLine();\n \n var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\n size.scrollerWidth - longestLine - 2 * this.$padding < 0);\n\n var hScrollChanged = this.$horizScroll !== horizScroll;\n if (hScrollChanged) {\n this.$horizScroll = horizScroll;\n this.scrollBarH.setVisible(horizScroll);\n }\n var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\n if (this.$maxLines && this.lineHeight > 1)\n this.$autosize();\n\n var minHeight = size.scrollerHeight + this.lineHeight;\n \n var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\n ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\n : 0;\n maxHeight += scrollPastEnd;\n \n var sm = this.scrollMargin;\n this.session.setScrollTop(Math.max(-sm.top,\n Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\n\n this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, \n longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\n \n var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\n size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\n var vScrollChanged = vScrollBefore !== vScroll;\n if (vScrollChanged) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n\n var offset = this.scrollTop % this.lineHeight;\n var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\n var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\n var lastRow = firstRow + lineCount;\n var firstRowScreen, firstRowHeight;\n var lineHeight = this.lineHeight;\n firstRow = session.screenToDocumentRow(firstRow, 0);\n var foldLine = session.getFoldLine(firstRow);\n if (foldLine) {\n firstRow = foldLine.start.row;\n }\n\n firstRowScreen = session.documentToScreenRow(firstRow, 0);\n firstRowHeight = session.getRowLength(firstRow) * lineHeight;\n\n lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\n minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\n firstRowHeight;\n\n offset = this.scrollTop - firstRowScreen * lineHeight;\n\n var changes = 0;\n if (this.layerConfig.width != longestLine || hScrollChanged) \n changes = this.CHANGE_H_SCROLL;\n if (hScrollChanged || vScrollChanged) {\n changes |= this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\n this._signal(\"scrollbarVisibilityChanged\");\n if (vScrollChanged)\n longestLine = this.$getLongestLine();\n }\n \n this.layerConfig = {\n width : longestLine,\n padding : this.$padding,\n firstRow : firstRow,\n firstRowScreen: firstRowScreen,\n lastRow : lastRow,\n lineHeight : lineHeight,\n characterWidth : this.characterWidth,\n minHeight : minHeight,\n maxHeight : maxHeight,\n offset : offset,\n gutterOffset : lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0,\n height : this.$size.scrollerHeight\n };\n\n if (this.session.$bidiHandler)\n this.session.$bidiHandler.setContentWidth(longestLine - this.$padding);\n\n return changes;\n };\n\n this.$updateLines = function() {\n if (!this.$changedLines) return;\n var firstRow = this.$changedLines.firstRow;\n var lastRow = this.$changedLines.lastRow;\n this.$changedLines = null;\n\n var layerConfig = this.layerConfig;\n\n if (firstRow > layerConfig.lastRow + 1) { return; }\n if (lastRow < layerConfig.firstRow) { return; }\n if (lastRow === Infinity) {\n if (this.$showGutter)\n this.$gutterLayer.update(layerConfig);\n this.$textLayer.update(layerConfig);\n return;\n }\n this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\n return true;\n };\n\n this.$getLongestLine = function() {\n var charCount = this.session.getScreenWidth();\n if (this.showInvisibles && !this.session.$useWrapMode)\n charCount += 1;\n \n if (this.$textLayer && charCount > this.$textLayer.MAX_LINE_LENGTH)\n charCount = this.$textLayer.MAX_LINE_LENGTH + 30;\n\n return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\n };\n this.updateFrontMarkers = function() {\n this.$markerFront.setMarkers(this.session.getMarkers(true));\n this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n };\n this.updateBackMarkers = function() {\n this.$markerBack.setMarkers(this.session.getMarkers());\n this.$loop.schedule(this.CHANGE_MARKER_BACK);\n };\n this.addGutterDecoration = function(row, className){\n this.$gutterLayer.addGutterDecoration(row, className);\n };\n this.removeGutterDecoration = function(row, className){\n this.$gutterLayer.removeGutterDecoration(row, className);\n };\n this.updateBreakpoints = function(rows) {\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n this.setAnnotations = function(annotations) {\n this.$gutterLayer.setAnnotations(annotations);\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n this.updateCursor = function() {\n this.$loop.schedule(this.CHANGE_CURSOR);\n };\n this.hideCursor = function() {\n this.$cursorLayer.hideCursor();\n };\n this.showCursor = function() {\n this.$cursorLayer.showCursor();\n };\n\n this.scrollSelectionIntoView = function(anchor, lead, offset) {\n this.scrollCursorIntoView(anchor, offset);\n this.scrollCursorIntoView(lead, offset);\n };\n this.scrollCursorIntoView = function(cursor, offset, $viewMargin) {\n if (this.$size.scrollerHeight === 0)\n return;\n\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n\n var left = pos.left;\n var top = pos.top;\n \n var topMargin = $viewMargin && $viewMargin.top || 0;\n var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\n \n var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n \n if (scrollTop + topMargin > top) {\n if (offset && scrollTop + topMargin > top + this.lineHeight)\n top -= offset * this.$size.scrollerHeight;\n if (top === 0)\n top = -this.scrollMargin.top;\n this.session.setScrollTop(top);\n } else if (scrollTop + this.$size.scrollerHeight - bottomMargin < top + this.lineHeight) {\n if (offset && scrollTop + this.$size.scrollerHeight - bottomMargin < top - this.lineHeight)\n top += offset * this.$size.scrollerHeight;\n this.session.setScrollTop(top + this.lineHeight + bottomMargin - this.$size.scrollerHeight);\n }\n\n var scrollLeft = this.scrollLeft;\n\n if (scrollLeft > left) {\n if (left < this.$padding + 2 * this.layerConfig.characterWidth)\n left = -this.scrollMargin.left;\n this.session.setScrollLeft(left);\n } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) {\n this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth));\n } else if (scrollLeft <= this.$padding && left - scrollLeft < this.characterWidth) {\n this.session.setScrollLeft(0);\n }\n };\n this.getScrollTop = function() {\n return this.session.getScrollTop();\n };\n this.getScrollLeft = function() {\n return this.session.getScrollLeft();\n };\n this.getScrollTopRow = function() {\n return this.scrollTop / this.lineHeight;\n };\n this.getScrollBottomRow = function() {\n return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n };\n this.scrollToRow = function(row) {\n this.session.setScrollTop(row * this.lineHeight);\n };\n\n this.alignCursor = function(cursor, alignment) {\n if (typeof cursor == \"number\")\n cursor = {row: cursor, column: 0};\n\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var h = this.$size.scrollerHeight - this.lineHeight;\n var offset = pos.top - h * (alignment || 0);\n\n this.session.setScrollTop(offset);\n return offset;\n };\n\n this.STEPS = 8;\n this.$calcSteps = function(fromValue, toValue){\n var i = 0;\n var l = this.STEPS;\n var steps = [];\n\n var func = function(t, x_min, dx) {\n return dx * (Math.pow(t - 1, 3) + 1) + x_min;\n };\n\n for (i = 0; i < l; ++i)\n steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\n\n return steps;\n };\n this.scrollToLine = function(line, center, animate, callback) {\n var pos = this.$cursorLayer.getPixelPosition({row: line, column: 0});\n var offset = pos.top;\n if (center)\n offset -= this.$size.scrollerHeight / 2;\n\n var initialScroll = this.scrollTop;\n this.session.setScrollTop(offset);\n if (animate !== false)\n this.animateScrolling(initialScroll, callback);\n };\n\n this.animateScrolling = function(fromValue, callback) {\n var toValue = this.scrollTop;\n if (!this.$animatedScroll)\n return;\n var _self = this;\n \n if (fromValue == toValue)\n return;\n \n if (this.$scrollAnimation) {\n var oldSteps = this.$scrollAnimation.steps;\n if (oldSteps.length) {\n fromValue = oldSteps[0];\n if (fromValue == toValue)\n return;\n }\n }\n \n var steps = _self.$calcSteps(fromValue, toValue);\n this.$scrollAnimation = {from: fromValue, to: toValue, steps: steps};\n\n clearInterval(this.$timer);\n\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n this.$timer = setInterval(function() {\n if (!_self.session) \n return clearInterval(_self.$timer);\n if (steps.length) {\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n } else if (toValue != null) {\n _self.session.$scrollTop = -1;\n _self.session.setScrollTop(toValue);\n toValue = null;\n } else {\n _self.$timer = clearInterval(_self.$timer);\n _self.$scrollAnimation = null;\n callback && callback();\n }\n }, 10);\n };\n this.scrollToY = function(scrollTop) {\n if (this.scrollTop !== scrollTop) {\n this.$loop.schedule(this.CHANGE_SCROLL);\n this.scrollTop = scrollTop;\n }\n };\n this.scrollToX = function(scrollLeft) {\n if (this.scrollLeft !== scrollLeft)\n this.scrollLeft = scrollLeft;\n this.$loop.schedule(this.CHANGE_H_SCROLL);\n };\n this.scrollTo = function(x, y) {\n this.session.setScrollTop(y);\n this.session.setScrollLeft(x);\n };\n this.scrollBy = function(deltaX, deltaY) {\n deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\n deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\n };\n this.isScrollableBy = function(deltaX, deltaY) {\n if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)\n return true;\n if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\n - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)\n return true;\n if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\n return true;\n if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\n - this.layerConfig.width < -1 + this.scrollMargin.right)\n return true;\n };\n\n this.pixelToScreenCoordinates = function(x, y) {\n var canvasPos;\n if (this.$hasCssTransforms) {\n canvasPos = {top:0, left: 0};\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n } else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n \n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n\n return {row: row, column: col, side: offset - col > 0 ? 1 : -1, offsetX: offsetX};\n };\n\n this.screenToTextCoordinates = function(x, y) {\n var canvasPos;\n if (this.$hasCssTransforms) {\n canvasPos = {top:0, left: 0};\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n } else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n\n return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX);\n };\n this.textToScreenCoordinates = function(row, column) {\n var canvasPos = this.scroller.getBoundingClientRect();\n var pos = this.session.documentToScreenPosition(row, column);\n\n var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : Math.round(pos.column * this.characterWidth));\n \n var y = pos.row * this.lineHeight;\n\n return {\n pageX: canvasPos.left + x - this.scrollLeft,\n pageY: canvasPos.top + y - this.scrollTop\n };\n };\n this.visualizeFocus = function() {\n dom.addCssClass(this.container, \"ace_focus\");\n };\n this.visualizeBlur = function() {\n dom.removeCssClass(this.container, \"ace_focus\");\n };\n this.showComposition = function(composition) {\n this.$composition = composition;\n if (!composition.cssText) {\n composition.cssText = this.textarea.style.cssText;\n }\n if (composition.useTextareaForIME == undefined)\n composition.useTextareaForIME = this.$useTextareaForIME;\n \n if (this.$useTextareaForIME) {\n dom.addCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = \"\";\n this.$moveTextAreaToCursor();\n this.$cursorLayer.element.style.display = \"none\";\n }\n else {\n composition.markerId = this.session.addMarker(composition.markerRange, \"ace_composition_marker\", \"text\");\n }\n };\n this.setCompositionText = function(text) {\n var cursor = this.session.selection.cursor;\n this.addToken(text, \"composition_placeholder\", cursor.row, cursor.column);\n this.$moveTextAreaToCursor();\n };\n this.hideComposition = function() {\n if (!this.$composition)\n return;\n \n if (this.$composition.markerId)\n this.session.removeMarker(this.$composition.markerId);\n\n dom.removeCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = this.$composition.cssText;\n var cursor = this.session.selection.cursor;\n this.removeExtraToken(cursor.row, cursor.column);\n this.$composition = null;\n this.$cursorLayer.element.style.display = \"\";\n };\n \n this.addToken = function(text, type, row, column) {\n var session = this.session;\n session.bgTokenizer.lines[row] = null;\n var newToken = {type: type, value: text};\n var tokens = session.getTokens(row);\n if (column == null) {\n tokens.push(newToken);\n } else {\n var l = 0;\n for (var i =0; i < tokens.length; i++) {\n var token = tokens[i];\n l += token.value.length;\n if (column <= l) {\n var diff = token.value.length - (l - column);\n var before = token.value.slice(0, diff);\n var after = token.value.slice(diff);\n \n tokens.splice(i, 1, {type: token.type, value: before}, newToken, {type: token.type, value: after});\n break;\n }\n }\n }\n this.updateLines(row, row);\n };\n\n this.removeExtraToken = function(row, column) {\n this.updateLines(row, row);\n };\n this.setTheme = function(theme, cb) {\n var _self = this;\n this.$themeId = theme;\n _self._dispatchEvent('themeChange',{theme:theme});\n\n if (!theme || typeof theme == \"string\") {\n var moduleName = theme || this.$options.theme.initialValue;\n config.loadModule([\"theme\", moduleName], afterLoad);\n } else {\n afterLoad(theme);\n }\n\n function afterLoad(module) {\n if (_self.$themeId != theme)\n return cb && cb();\n if (!module || !module.cssClass)\n throw new Error(\"couldn't load module \" + theme + \" or it didn't call define\");\n if (module.$id)\n _self.$themeId = module.$id;\n dom.importCssString(\n module.cssText,\n module.cssClass,\n _self.container\n );\n\n if (_self.theme)\n dom.removeCssClass(_self.container, _self.theme.cssClass);\n\n var padding = \"padding\" in module ? module.padding \n : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\n if (_self.$padding && padding != _self.$padding)\n _self.setPadding(padding);\n _self.$theme = module.cssClass;\n\n _self.theme = module;\n dom.addCssClass(_self.container, module.cssClass);\n dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\n if (_self.$size) {\n _self.$size.width = 0;\n _self.$updateSizeAsync();\n }\n\n _self._dispatchEvent('themeLoaded', {theme:module});\n cb && cb();\n }\n };\n this.getTheme = function() {\n return this.$themeId;\n };\n this.setStyle = function(style, include) {\n dom.setCssClass(this.container, style, include !== false);\n };\n this.unsetStyle = function(style) {\n dom.removeCssClass(this.container, style);\n };\n \n this.setCursorStyle = function(style) {\n dom.setStyle(this.scroller.style, \"cursor\", style);\n };\n this.setMouseCursor = function(cursorStyle) {\n dom.setStyle(this.scroller.style, \"cursor\", cursorStyle);\n };\n \n this.attachToShadowRoot = function() {\n dom.importCssString(editorCss, \"ace_editor.css\", this.container);\n };\n this.destroy = function() {\n this.freeze();\n this.$fontMetrics.destroy();\n this.$cursorLayer.destroy();\n this.removeAllListeners();\n this.container.textContent = \"\";\n };\n\n}).call(VirtualRenderer.prototype);\n\n\nconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\n animatedScroll: {initialValue: false},\n showInvisibles: {\n set: function(value) {\n if (this.$textLayer.setShowInvisibles(value))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: false\n },\n showPrintMargin: {\n set: function() { this.$updatePrintMargin(); },\n initialValue: true\n },\n printMarginColumn: {\n set: function() { this.$updatePrintMargin(); },\n initialValue: 80\n },\n printMargin: {\n set: function(val) {\n if (typeof val == \"number\")\n this.$printMarginColumn = val;\n this.$showPrintMargin = !!val;\n this.$updatePrintMargin();\n },\n get: function() {\n return this.$showPrintMargin && this.$printMarginColumn; \n }\n },\n showGutter: {\n set: function(show){\n this.$gutter.style.display = show ? \"block\" : \"none\";\n this.$loop.schedule(this.CHANGE_FULL);\n this.onGutterResize();\n },\n initialValue: true\n },\n fadeFoldWidgets: {\n set: function(show) {\n dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\n },\n initialValue: false\n },\n showFoldWidgets: {\n set: function(show) {\n this.$gutterLayer.setShowFoldWidgets(show);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n displayIndentGuides: {\n set: function(show) {\n if (this.$textLayer.setDisplayIndentGuides(show))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: true\n },\n highlightGutterLine: {\n set: function(shouldHighlight) {\n this.$gutterLayer.setHighlightGutterLine(shouldHighlight);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n hScrollBarAlwaysVisible: {\n set: function(val) {\n if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n vScrollBarAlwaysVisible: {\n set: function(val) {\n if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n fontSize: {\n set: function(size) {\n if (typeof size == \"number\")\n size = size + \"px\";\n this.container.style.fontSize = size;\n this.updateFontSize();\n },\n initialValue: 12\n },\n fontFamily: {\n set: function(name) {\n this.container.style.fontFamily = name;\n this.updateFontSize();\n }\n },\n maxLines: {\n set: function(val) {\n this.updateFull();\n }\n },\n minLines: {\n set: function(val) {\n if (!(this.$minLines < 0x1ffffffffffff))\n this.$minLines = 0;\n this.updateFull();\n }\n },\n maxPixelHeight: {\n set: function(val) {\n this.updateFull();\n },\n initialValue: 0\n },\n scrollPastEnd: {\n set: function(val) {\n val = +val || 0;\n if (this.$scrollPastEnd == val)\n return;\n this.$scrollPastEnd = val;\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: 0,\n handlesSet: true\n },\n fixedWidthGutter: {\n set: function(val) {\n this.$gutterLayer.$fixedWidth = !!val;\n this.$loop.schedule(this.CHANGE_GUTTER);\n }\n },\n theme: {\n set: function(val) { this.setTheme(val); },\n get: function() { return this.$themeId || this.theme; },\n initialValue: \"./theme/textmate\",\n handlesSet: true\n },\n hasCssTransforms: {\n },\n useTextareaForIME: {\n initialValue: !useragent.isMobile && !useragent.isIE\n }\n});\n\nexports.VirtualRenderer = VirtualRenderer;\n});\n\nace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar net = require(\"../lib/net\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar config = require(\"../config\");\n\nfunction $workerBlob(workerUrl) {\n var script = \"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\n try {\n return new Blob([script], {\"type\": \"application/javascript\"});\n } catch (e) { // Backwards-compatibility\n var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\n var blobBuilder = new BlobBuilder();\n blobBuilder.append(script);\n return blobBuilder.getBlob(\"application/javascript\");\n }\n}\n\nfunction createWorker(workerUrl) {\n if (typeof Worker == \"undefined\")\n return { postMessage: function() {}, terminate: function() {} };\n if (config.get(\"loadWorkerFromBlob\")) {\n var blob = $workerBlob(workerUrl);\n var URL = window.URL || window.webkitURL;\n var blobURL = URL.createObjectURL(blob);\n return new Worker(blobURL);\n }\n return new Worker(workerUrl);\n}\n\nvar WorkerClient = function(worker) {\n if (!worker.postMessage)\n worker = this.$createWorkerFromOldConfig.apply(this, arguments);\n\n this.$worker = worker;\n this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.onMessage = this.onMessage.bind(this);\n\n this.callbackId = 1;\n this.callbacks = {};\n\n this.$worker.onmessage = this.onMessage;\n};\n\n(function(){\n\n oop.implement(this, EventEmitter);\n\n this.$createWorkerFromOldConfig = function(topLevelNamespaces, mod, classname, workerUrl, importScripts) {\n if (require.nameToUrl && !require.toUrl)\n require.toUrl = require.nameToUrl;\n\n if (config.get(\"packaged\") || !require.toUrl) {\n workerUrl = workerUrl || config.moduleUrl(mod, \"worker\");\n } else {\n var normalizePath = this.$normalizePath;\n workerUrl = workerUrl || normalizePath(require.toUrl(\"ace/worker/worker.js\", null, \"_\"));\n\n var tlns = {};\n topLevelNamespaces.forEach(function(ns) {\n tlns[ns] = normalizePath(require.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\n });\n }\n\n this.$worker = createWorker(workerUrl);\n if (importScripts) {\n this.send(\"importScripts\", importScripts);\n }\n this.$worker.postMessage({\n init : true,\n tlns : tlns,\n module : mod,\n classname : classname\n });\n return this.$worker;\n };\n\n this.onMessage = function(e) {\n var msg = e.data;\n switch (msg.type) {\n case \"event\":\n this._signal(msg.name, {data: msg.data});\n break;\n case \"call\":\n var callback = this.callbacks[msg.id];\n if (callback) {\n callback(msg.data);\n delete this.callbacks[msg.id];\n }\n break;\n case \"error\":\n this.reportError(msg.data);\n break;\n case \"log\":\n window.console && console.log && console.log.apply(console, msg.data);\n break;\n }\n };\n \n this.reportError = function(err) {\n window.console && console.error && console.error(err);\n };\n\n this.$normalizePath = function(path) {\n return net.qualifyURL(path);\n };\n\n this.terminate = function() {\n this._signal(\"terminate\", {});\n this.deltaQueue = null;\n this.$worker.terminate();\n this.$worker = null;\n if (this.$doc)\n this.$doc.off(\"change\", this.changeListener);\n this.$doc = null;\n };\n\n this.send = function(cmd, args) {\n this.$worker.postMessage({command: cmd, args: args});\n };\n\n this.call = function(cmd, args, callback) {\n if (callback) {\n var id = this.callbackId++;\n this.callbacks[id] = callback;\n args.push(id);\n }\n this.send(cmd, args);\n };\n\n this.emit = function(event, data) {\n try {\n if (data.data && data.data.err)\n data.data.err = {message: data.data.err.message, stack: data.data.err.stack, code: data.data.err.code};\n this.$worker.postMessage({event: event, data: {data: data.data}});\n }\n catch(ex) {\n console.error(ex.stack);\n }\n };\n\n this.attachToDocument = function(doc) {\n if (this.$doc)\n this.terminate();\n\n this.$doc = doc;\n this.call(\"setValue\", [doc.getValue()]);\n doc.on(\"change\", this.changeListener);\n };\n\n this.changeListener = function(delta) {\n if (!this.deltaQueue) {\n this.deltaQueue = [];\n setTimeout(this.$sendDeltaQueue, 0);\n }\n if (delta.action == \"insert\")\n this.deltaQueue.push(delta.start, delta.lines);\n else\n this.deltaQueue.push(delta.start, delta.end);\n };\n\n this.$sendDeltaQueue = function() {\n var q = this.deltaQueue;\n if (!q) return;\n this.deltaQueue = null;\n if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\n this.call(\"setValue\", [this.$doc.getValue()]);\n } else\n this.emit(\"change\", {data: q});\n };\n\n}).call(WorkerClient.prototype);\n\n\nvar UIWorkerClient = function(topLevelNamespaces, mod, classname) {\n var main = null;\n var emitSync = false;\n var sender = Object.create(EventEmitter);\n\n var messageBuffer = [];\n var workerClient = new WorkerClient({\n messageBuffer: messageBuffer,\n terminate: function() {},\n postMessage: function(e) {\n messageBuffer.push(e);\n if (!main) return;\n if (emitSync)\n setTimeout(processNext);\n else\n processNext();\n }\n });\n\n workerClient.setEmitSync = function(val) { emitSync = val; };\n\n var processNext = function() {\n var msg = messageBuffer.shift();\n if (msg.command)\n main[msg.command].apply(main, msg.args);\n else if (msg.event)\n sender._signal(msg.event, msg.data);\n };\n\n sender.postMessage = function(msg) {\n workerClient.onMessage({data: msg});\n };\n sender.callback = function(data, callbackId) {\n this.postMessage({type: \"call\", id: callbackId, data: data});\n };\n sender.emit = function(name, data) {\n this.postMessage({type: \"event\", name: name, data: data});\n };\n\n config.loadModule([\"worker\", mod], function(Main) {\n main = new Main[classname](sender);\n while (messageBuffer.length)\n processNext();\n });\n\n return workerClient;\n};\n\nexports.UIWorkerClient = UIWorkerClient;\nexports.WorkerClient = WorkerClient;\nexports.createWorker = createWorker;\n\n\n});\n\nace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar oop = require(\"./lib/oop\");\n\nvar PlaceHolder = function(session, length, pos, others, mainClass, othersClass) {\n var _self = this;\n this.length = length;\n this.session = session;\n this.doc = session.getDocument();\n this.mainClass = mainClass;\n this.othersClass = othersClass;\n this.$onUpdate = this.onUpdate.bind(this);\n this.doc.on(\"change\", this.$onUpdate);\n this.$others = others;\n \n this.$onCursorChange = function() {\n setTimeout(function() {\n _self.onCursorChange();\n });\n };\n \n this.$pos = pos;\n var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || {length: -1};\n this.$undoStackDepth = undoStack.length;\n this.setup();\n\n session.selection.on(\"changeCursor\", this.$onCursorChange);\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.setup = function() {\n var _self = this;\n var doc = this.doc;\n var session = this.session;\n \n this.selectionBefore = session.selection.toJSON();\n if (session.selection.inMultiSelectMode)\n session.selection.toSingleRange();\n\n this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\n var pos = this.pos;\n pos.$insertRight = true;\n pos.detach();\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\n this.others = [];\n this.$others.forEach(function(other) {\n var anchor = doc.createAnchor(other.row, other.column);\n anchor.$insertRight = true;\n anchor.detach();\n _self.others.push(anchor);\n });\n session.setUndoSelect(false);\n };\n this.showOtherMarkers = function() {\n if (this.othersActive) return;\n var session = this.session;\n var _self = this;\n this.othersActive = true;\n this.others.forEach(function(anchor) {\n anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column+_self.length), _self.othersClass, null, false);\n });\n };\n this.hideOtherMarkers = function() {\n if (!this.othersActive) return;\n this.othersActive = false;\n for (var i = 0; i < this.others.length; i++) {\n this.session.removeMarker(this.others[i].markerId);\n }\n };\n this.onUpdate = function(delta) {\n if (this.$updating)\n return this.updateAnchors(delta);\n \n var range = delta;\n if (range.start.row !== range.end.row) return;\n if (range.start.row !== this.pos.row) return;\n this.$updating = true;\n var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\n var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\n var distanceFromStart = range.start.column - this.pos.column;\n \n this.updateAnchors(delta);\n \n if (inMainRange)\n this.length += lengthDiff;\n\n if (inMainRange && !this.session.$fromUndo) {\n if (delta.action === 'insert') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\n this.doc.insertMergedLines(newPos, delta.lines);\n }\n } else if (delta.action === 'remove') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\n this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\n }\n }\n }\n \n this.$updating = false;\n this.updateMarkers();\n };\n \n this.updateAnchors = function(delta) {\n this.pos.onChange(delta);\n for (var i = this.others.length; i--;)\n this.others[i].onChange(delta);\n this.updateMarkers();\n };\n \n this.updateMarkers = function() {\n if (this.$updating)\n return;\n var _self = this;\n var session = this.session;\n var updateMarker = function(pos, className) {\n session.removeMarker(pos.markerId);\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column+_self.length), className, null, false);\n };\n updateMarker(this.pos, this.mainClass);\n for (var i = this.others.length; i--;)\n updateMarker(this.others[i], this.othersClass);\n };\n\n this.onCursorChange = function(event) {\n if (this.$updating || !this.session) return;\n var pos = this.session.selection.getCursor();\n if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\n this.showOtherMarkers();\n this._emit(\"cursorEnter\", event);\n } else {\n this.hideOtherMarkers();\n this._emit(\"cursorLeave\", event);\n }\n }; \n this.detach = function() {\n this.session.removeMarker(this.pos && this.pos.markerId);\n this.hideOtherMarkers();\n this.doc.off(\"change\", this.$onUpdate);\n this.session.selection.off(\"changeCursor\", this.$onCursorChange);\n this.session.setUndoSelect(true);\n this.session = null;\n };\n this.cancel = function() {\n if (this.$undoStackDepth === -1)\n return;\n var undoManager = this.session.getUndoManager();\n var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth;\n for (var i = 0; i < undosRequired; i++) {\n undoManager.undo(this.session, true);\n }\n if (this.selectionBefore)\n this.session.selection.fromJSON(this.selectionBefore);\n };\n}).call(PlaceHolder.prototype);\n\n\nexports.PlaceHolder = PlaceHolder;\n});\n\nace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module) {\n\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\n\nfunction onMouseDown(e) {\n var ev = e.domEvent;\n var alt = ev.altKey;\n var shift = ev.shiftKey;\n var ctrl = ev.ctrlKey;\n var accel = e.getAccelKey();\n var button = e.getButton();\n \n if (ctrl && useragent.isMac)\n button = ev.button;\n\n if (e.editor.inMultiSelectMode && button == 2) {\n e.editor.textInput.onContextMenu(e.domEvent);\n return;\n }\n \n if (!ctrl && !alt && !accel) {\n if (button === 0 && e.editor.inMultiSelectMode)\n e.editor.exitMultiSelectMode();\n return;\n }\n \n if (button !== 0)\n return;\n\n var editor = e.editor;\n var selection = editor.selection;\n var isMultiSelect = editor.inMultiSelectMode;\n var pos = e.getDocumentPosition();\n var cursor = selection.getCursor();\n var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));\n\n var mouseX = e.x, mouseY = e.y;\n var onMouseSelection = function(e) {\n mouseX = e.clientX;\n mouseY = e.clientY;\n };\n \n var session = editor.session;\n var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var screenCursor = screenAnchor;\n \n var selectionMode;\n if (editor.$mouseHandler.$enableJumpToDef) {\n if (ctrl && alt || accel && alt)\n selectionMode = shift ? \"block\" : \"add\";\n else if (alt && editor.$blockSelectEnabled)\n selectionMode = \"block\";\n } else {\n if (accel && !alt) {\n selectionMode = \"add\";\n if (!isMultiSelect && shift)\n return;\n } else if (alt && editor.$blockSelectEnabled) {\n selectionMode = \"block\";\n }\n }\n \n if (selectionMode && useragent.isMac && ev.ctrlKey) {\n editor.$mouseHandler.cancelContextMenu();\n }\n\n if (selectionMode == \"add\") {\n if (!isMultiSelect && inSelection)\n return; // dragging\n\n if (!isMultiSelect) {\n var range = selection.toOrientedRange();\n editor.addSelectionMarker(range);\n }\n\n var oldRange = selection.rangeList.rangeAtPoint(pos);\n \n editor.inVirtualSelectionMode = true;\n \n if (shift) {\n oldRange = null;\n range = selection.ranges[0] || range;\n editor.removeSelectionMarker(range);\n }\n editor.once(\"mouseup\", function() {\n var tmpSel = selection.toOrientedRange();\n\n if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))\n selection.substractPoint(tmpSel.cursor);\n else {\n if (shift) {\n selection.substractPoint(range.cursor);\n } else if (range) {\n editor.removeSelectionMarker(range);\n selection.addRange(range);\n }\n selection.addRange(tmpSel);\n }\n editor.inVirtualSelectionMode = false;\n });\n\n } else if (selectionMode == \"block\") {\n e.stop();\n editor.inVirtualSelectionMode = true; \n var initialRange;\n var rectSel = [];\n var blockSelect = function() {\n var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column, newCursor.offsetX);\n\n if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\n return;\n screenCursor = newCursor;\n \n editor.selection.moveToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n\n editor.removeSelectionMarkers(rectSel);\n rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\n if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())\n rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\n rectSel.forEach(editor.addSelectionMarker, editor);\n editor.updateSelectionMarkers();\n };\n if (isMultiSelect && !accel) {\n selection.toSingleRange();\n } else if (!isMultiSelect && accel) {\n initialRange = selection.toOrientedRange();\n editor.addSelectionMarker(initialRange);\n }\n \n if (shift)\n screenAnchor = session.documentToScreenPosition(selection.lead); \n else\n selection.moveToPosition(pos);\n \n screenCursor = {row: -1, column: -1};\n\n var onMouseSelectionEnd = function(e) {\n blockSelect();\n clearInterval(timerId);\n editor.removeSelectionMarkers(rectSel);\n if (!rectSel.length)\n rectSel = [selection.toOrientedRange()];\n if (initialRange) {\n editor.removeSelectionMarker(initialRange);\n selection.toSingleRange(initialRange);\n }\n for (var i = 0; i < rectSel.length; i++)\n selection.addRange(rectSel[i]);\n editor.inVirtualSelectionMode = false;\n editor.$mouseHandler.$clickSelection = null;\n };\n\n var onSelectionInterval = blockSelect;\n\n event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\n var timerId = setInterval(function() {onSelectionInterval();}, 20);\n\n return e.preventDefault();\n }\n}\n\n\nexports.onMouseDown = onMouseDown;\n\n});\n\nace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"], function(require, exports, module) {\nexports.defaultCommands = [{\n name: \"addCursorAbove\",\n description: \"Add cursor above\",\n exec: function(editor) { editor.selectMoreLines(-1); },\n bindKey: {win: \"Ctrl-Alt-Up\", mac: \"Ctrl-Alt-Up\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"addCursorBelow\",\n description: \"Add cursor below\",\n exec: function(editor) { editor.selectMoreLines(1); },\n bindKey: {win: \"Ctrl-Alt-Down\", mac: \"Ctrl-Alt-Down\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"addCursorAboveSkipCurrent\",\n description: \"Add cursor above (skip current)\",\n exec: function(editor) { editor.selectMoreLines(-1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Up\", mac: \"Ctrl-Alt-Shift-Up\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"addCursorBelowSkipCurrent\",\n description: \"Add cursor below (skip current)\",\n exec: function(editor) { editor.selectMoreLines(1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Down\", mac: \"Ctrl-Alt-Shift-Down\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectMoreBefore\",\n description: \"Select more before\",\n exec: function(editor) { editor.selectMore(-1); },\n bindKey: {win: \"Ctrl-Alt-Left\", mac: \"Ctrl-Alt-Left\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectMoreAfter\",\n description: \"Select more after\",\n exec: function(editor) { editor.selectMore(1); },\n bindKey: {win: \"Ctrl-Alt-Right\", mac: \"Ctrl-Alt-Right\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectNextBefore\",\n description: \"Select next before\",\n exec: function(editor) { editor.selectMore(-1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Left\", mac: \"Ctrl-Alt-Shift-Left\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectNextAfter\",\n description: \"Select next after\",\n exec: function(editor) { editor.selectMore(1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Right\", mac: \"Ctrl-Alt-Shift-Right\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"toggleSplitSelectionIntoLines\",\n description: \"Split into lines\",\n exec: function(editor) {\n if (editor.multiSelect.rangeCount > 1)\n editor.multiSelect.joinSelections();\n else\n editor.multiSelect.splitIntoLines();\n },\n bindKey: {win: \"Ctrl-Alt-L\", mac: \"Ctrl-Alt-L\"},\n readOnly: true\n}, {\n name: \"splitSelectionIntoLines\",\n description: \"Split into lines\",\n exec: function(editor) { editor.multiSelect.splitIntoLines(); },\n readOnly: true\n}, {\n name: \"alignCursors\",\n description: \"Align cursors\",\n exec: function(editor) { editor.alignCursors(); },\n bindKey: {win: \"Ctrl-Alt-A\", mac: \"Ctrl-Alt-A\"},\n scrollIntoView: \"cursor\"\n}, {\n name: \"findAll\",\n description: \"Find all\",\n exec: function(editor) { editor.findAll(); },\n bindKey: {win: \"Ctrl-Alt-K\", mac: \"Ctrl-Alt-G\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}];\nexports.multiSelectCommands = [{\n name: \"singleSelection\",\n description: \"Single selection\",\n bindKey: \"esc\",\n exec: function(editor) { editor.exitMultiSelectMode(); },\n scrollIntoView: \"cursor\",\n readOnly: true,\n isAvailable: function(editor) {return editor && editor.inMultiSelectMode;}\n}];\n\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nexports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\n\n});\n\nace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"], function(require, exports, module) {\n\nvar RangeList = require(\"./range_list\").RangeList;\nvar Range = require(\"./range\").Range;\nvar Selection = require(\"./selection\").Selection;\nvar onMouseDown = require(\"./mouse/multi_select_handler\").onMouseDown;\nvar event = require(\"./lib/event\");\nvar lang = require(\"./lib/lang\");\nvar commands = require(\"./commands/multi_select_commands\");\nexports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\nvar Search = require(\"./search\").Search;\nvar search = new Search();\n\nfunction find(session, needle, dir) {\n search.$options.wrap = true;\n search.$options.needle = needle;\n search.$options.backwards = dir == -1;\n return search.find(session);\n}\nvar EditSession = require(\"./edit_session\").EditSession;\n(function() {\n this.getSelectionMarkers = function() {\n return this.$selectionMarkers;\n };\n}).call(EditSession.prototype);\n(function() {\n this.ranges = null;\n this.rangeList = null;\n this.addRange = function(range, $blockChangeEvents) {\n if (!range)\n return;\n\n if (!this.inMultiSelectMode && this.rangeCount === 0) {\n var oldRange = this.toOrientedRange();\n this.rangeList.add(oldRange);\n this.rangeList.add(range);\n if (this.rangeList.ranges.length != 2) {\n this.rangeList.removeAll();\n return $blockChangeEvents || this.fromOrientedRange(range);\n }\n this.rangeList.removeAll();\n this.rangeList.add(oldRange);\n this.$onAddRange(oldRange);\n }\n\n if (!range.cursor)\n range.cursor = range.end;\n\n var removed = this.rangeList.add(range);\n\n this.$onAddRange(range);\n\n if (removed.length)\n this.$onRemoveRange(removed);\n\n if (this.rangeCount > 1 && !this.inMultiSelectMode) {\n this._signal(\"multiSelect\");\n this.inMultiSelectMode = true;\n this.session.$undoSelect = false;\n this.rangeList.attach(this.session);\n }\n\n return $blockChangeEvents || this.fromOrientedRange(range);\n };\n this.toSingleRange = function(range) {\n range = range || this.ranges[0];\n var removed = this.rangeList.removeAll();\n if (removed.length)\n this.$onRemoveRange(removed);\n\n range && this.fromOrientedRange(range);\n };\n this.substractPoint = function(pos) {\n var removed = this.rangeList.substractPoint(pos);\n if (removed) {\n this.$onRemoveRange(removed);\n return removed[0];\n }\n };\n this.mergeOverlappingRanges = function() {\n var removed = this.rangeList.merge();\n if (removed.length)\n this.$onRemoveRange(removed);\n };\n\n this.$onAddRange = function(range) {\n this.rangeCount = this.rangeList.ranges.length;\n this.ranges.unshift(range);\n this._signal(\"addRange\", {range: range});\n };\n\n this.$onRemoveRange = function(removed) {\n this.rangeCount = this.rangeList.ranges.length;\n if (this.rangeCount == 1 && this.inMultiSelectMode) {\n var lastRange = this.rangeList.ranges.pop();\n removed.push(lastRange);\n this.rangeCount = 0;\n }\n\n for (var i = removed.length; i--; ) {\n var index = this.ranges.indexOf(removed[i]);\n this.ranges.splice(index, 1);\n }\n\n this._signal(\"removeRange\", {ranges: removed});\n\n if (this.rangeCount === 0 && this.inMultiSelectMode) {\n this.inMultiSelectMode = false;\n this._signal(\"singleSelect\");\n this.session.$undoSelect = true;\n this.rangeList.detach(this.session);\n }\n\n lastRange = lastRange || this.ranges[0];\n if (lastRange && !lastRange.isEqual(this.getRange()))\n this.fromOrientedRange(lastRange);\n };\n this.$initRangeList = function() {\n if (this.rangeList)\n return;\n\n this.rangeList = new RangeList();\n this.ranges = [];\n this.rangeCount = 0;\n };\n this.getAllRanges = function() {\n return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\n };\n this.splitIntoLines = function () {\n var ranges = this.ranges.length ? this.ranges : [this.getRange()];\n var newRanges = [];\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n var row = range.start.row;\n var endRow = range.end.row;\n if (row === endRow) {\n newRanges.push(range.clone());\n } else {\n newRanges.push(new Range(row, range.start.column, row, this.session.getLine(row).length));\n while (++row < endRow)\n newRanges.push(this.getLineRange(row, true));\n newRanges.push(new Range(endRow, 0, endRow, range.end.column));\n }\n if (i == 0 && !this.isBackwards())\n newRanges = newRanges.reverse();\n }\n this.toSingleRange();\n for (var i = newRanges.length; i--;)\n this.addRange(newRanges[i]);\n };\n \n this.joinSelections = function () {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n };\n this.toggleBlockSelection = function () {\n if (this.rangeCount > 1) {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n } else {\n var cursor = this.session.documentToScreenPosition(this.cursor);\n var anchor = this.session.documentToScreenPosition(this.anchor);\n\n var rectSel = this.rectangularRangeBlock(cursor, anchor);\n rectSel.forEach(this.addRange, this);\n }\n };\n this.rectangularRangeBlock = function(screenCursor, screenAnchor, includeEmptyLines) {\n var rectSel = [];\n\n var xBackwards = screenCursor.column < screenAnchor.column;\n if (xBackwards) {\n var startColumn = screenCursor.column;\n var endColumn = screenAnchor.column;\n var startOffsetX = screenCursor.offsetX;\n var endOffsetX = screenAnchor.offsetX;\n } else {\n var startColumn = screenAnchor.column;\n var endColumn = screenCursor.column;\n var startOffsetX = screenAnchor.offsetX;\n var endOffsetX = screenCursor.offsetX;\n }\n\n var yBackwards = screenCursor.row < screenAnchor.row;\n if (yBackwards) {\n var startRow = screenCursor.row;\n var endRow = screenAnchor.row;\n } else {\n var startRow = screenAnchor.row;\n var endRow = screenCursor.row;\n }\n\n if (startColumn < 0)\n startColumn = 0;\n if (startRow < 0)\n startRow = 0;\n\n if (startRow == endRow)\n includeEmptyLines = true;\n\n var docEnd;\n for (var row = startRow; row <= endRow; row++) {\n var range = Range.fromPoints(\n this.session.screenToDocumentPosition(row, startColumn, startOffsetX),\n this.session.screenToDocumentPosition(row, endColumn, endOffsetX)\n );\n if (range.isEmpty()) {\n if (docEnd && isSamePoint(range.end, docEnd))\n break;\n docEnd = range.end;\n }\n range.cursor = xBackwards ? range.start : range.end;\n rectSel.push(range);\n }\n\n if (yBackwards)\n rectSel.reverse();\n\n if (!includeEmptyLines) {\n var end = rectSel.length - 1;\n while (rectSel[end].isEmpty() && end > 0)\n end--;\n if (end > 0) {\n var start = 0;\n while (rectSel[start].isEmpty())\n start++;\n }\n for (var i = end; i >= start; i--) {\n if (rectSel[i].isEmpty())\n rectSel.splice(i, 1);\n }\n }\n\n return rectSel;\n };\n}).call(Selection.prototype);\nvar Editor = require(\"./editor\").Editor;\n(function() {\n this.updateSelectionMarkers = function() {\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.addSelectionMarker = function(orientedRange) {\n if (!orientedRange.cursor)\n orientedRange.cursor = orientedRange.end;\n\n var style = this.getSelectionStyle();\n orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\n\n this.session.$selectionMarkers.push(orientedRange);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n return orientedRange;\n };\n this.removeSelectionMarker = function(range) {\n if (!range.marker)\n return;\n this.session.removeMarker(range.marker);\n var index = this.session.$selectionMarkers.indexOf(range);\n if (index != -1)\n this.session.$selectionMarkers.splice(index, 1);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n };\n\n this.removeSelectionMarkers = function(ranges) {\n var markerList = this.session.$selectionMarkers;\n for (var i = ranges.length; i--; ) {\n var range = ranges[i];\n if (!range.marker)\n continue;\n this.session.removeMarker(range.marker);\n var index = markerList.indexOf(range);\n if (index != -1)\n markerList.splice(index, 1);\n }\n this.session.selectionMarkerCount = markerList.length;\n };\n\n this.$onAddRange = function(e) {\n this.addSelectionMarker(e.range);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onRemoveRange = function(e) {\n this.removeSelectionMarkers(e.ranges);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onMultiSelect = function(e) {\n if (this.inMultiSelectMode)\n return;\n this.inMultiSelectMode = true;\n\n this.setStyle(\"ace_multiselect\");\n this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\n this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\n\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onSingleSelect = function(e) {\n if (this.session.multiSelect.inVirtualMode)\n return;\n this.inMultiSelectMode = false;\n\n this.unsetStyle(\"ace_multiselect\");\n this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\n\n this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n this._emit(\"changeSelection\");\n };\n\n this.$onMultiSelectExec = function(e) {\n var command = e.command;\n var editor = e.editor;\n if (!editor.multiSelect)\n return;\n if (!command.multiSelectAction) {\n var result = command.exec(editor, e.args || {});\n editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\n editor.multiSelect.mergeOverlappingRanges();\n } else if (command.multiSelectAction == \"forEach\") {\n result = editor.forEachSelection(command, e.args);\n } else if (command.multiSelectAction == \"forEachLine\") {\n result = editor.forEachSelection(command, e.args, true);\n } else if (command.multiSelectAction == \"single\") {\n editor.exitMultiSelectMode();\n result = command.exec(editor, e.args || {});\n } else {\n result = command.multiSelectAction(editor, e.args || {});\n }\n return result;\n }; \n this.forEachSelection = function(cmd, args, options) {\n if (this.inVirtualSelectionMode)\n return;\n var keepOrder = options && options.keepOrder;\n var $byLines = options == true || options && options.$byLines;\n var session = this.session;\n var selection = this.selection;\n var rangeList = selection.rangeList;\n var ranges = (keepOrder ? selection : rangeList).ranges;\n var result;\n \n if (!ranges.length)\n return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n \n var reg = selection._eventRegistry;\n selection._eventRegistry = {};\n\n var tmpSel = new Selection(session);\n this.inVirtualSelectionMode = true;\n for (var i = ranges.length; i--;) {\n if ($byLines) {\n while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)\n i--;\n }\n tmpSel.fromOrientedRange(ranges[i]);\n tmpSel.index = i;\n this.selection = session.selection = tmpSel;\n var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n if (!result && cmdResult !== undefined)\n result = cmdResult;\n tmpSel.toOrientedRange(ranges[i]);\n }\n tmpSel.detach();\n\n this.selection = session.selection = selection;\n this.inVirtualSelectionMode = false;\n selection._eventRegistry = reg;\n selection.mergeOverlappingRanges();\n if (selection.ranges[0])\n selection.fromOrientedRange(selection.ranges[0]);\n \n var anim = this.renderer.$scrollAnimation;\n this.onCursorChange();\n this.onSelectionChange();\n if (anim && anim.from == anim.to)\n this.renderer.animateScrolling(anim.from);\n \n return result;\n };\n this.exitMultiSelectMode = function() {\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\n return;\n this.multiSelect.toSingleRange();\n };\n\n this.getSelectedText = function() {\n var text = \"\";\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var ranges = this.multiSelect.rangeList.ranges;\n var buf = [];\n for (var i = 0; i < ranges.length; i++) {\n buf.push(this.session.getTextRange(ranges[i]));\n }\n var nl = this.session.getDocument().getNewLineCharacter();\n text = buf.join(nl);\n if (text.length == (buf.length - 1) * nl.length)\n text = \"\";\n } else if (!this.selection.isEmpty()) {\n text = this.session.getTextRange(this.getSelectionRange());\n }\n return text;\n };\n \n this.$checkMultiselectChange = function(e, anchor) {\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var range = this.multiSelect.ranges[0];\n if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)\n return;\n var pos = anchor == this.multiSelect.anchor\n ? range.cursor == range.start ? range.end : range.start\n : range.cursor;\n if (pos.row != anchor.row \n || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)\n this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\n else\n this.multiSelect.mergeOverlappingRanges();\n }\n };\n this.findAll = function(needle, options, additive) {\n options = options || {};\n options.needle = needle || options.needle;\n if (options.needle == undefined) {\n var range = this.selection.isEmpty()\n ? this.selection.getWordRange()\n : this.selection.getRange();\n options.needle = this.session.getTextRange(range);\n } \n this.$search.set(options);\n \n var ranges = this.$search.findAll(this.session);\n if (!ranges.length)\n return 0;\n\n var selection = this.multiSelect;\n\n if (!additive)\n selection.toSingleRange(ranges[0]);\n\n for (var i = ranges.length; i--; )\n selection.addRange(ranges[i], true);\n if (range && selection.rangeList.rangeAtPoint(range.start))\n selection.addRange(range, true);\n \n return ranges.length;\n };\n this.selectMoreLines = function(dir, skip) {\n var range = this.selection.toOrientedRange();\n var isBackwards = range.cursor == range.end;\n\n var screenLead = this.session.documentToScreenPosition(range.cursor);\n if (this.selection.$desiredColumn)\n screenLead.column = this.selection.$desiredColumn;\n\n var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\n\n if (!range.isEmpty()) {\n var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\n var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\n } else {\n var anchor = lead;\n }\n\n if (isBackwards) {\n var newRange = Range.fromPoints(lead, anchor);\n newRange.cursor = newRange.start;\n } else {\n var newRange = Range.fromPoints(anchor, lead);\n newRange.cursor = newRange.end;\n }\n\n newRange.desiredColumn = screenLead.column;\n if (!this.selection.inMultiSelectMode) {\n this.selection.addRange(range);\n } else {\n if (skip)\n var toRemove = range.cursor;\n }\n\n this.selection.addRange(newRange);\n if (toRemove)\n this.selection.substractPoint(toRemove);\n };\n this.transposeSelections = function(dir) {\n var session = this.session;\n var sel = session.multiSelect;\n var all = sel.ranges;\n\n for (var i = all.length; i--; ) {\n var range = all[i];\n if (range.isEmpty()) {\n var tmp = session.getWordRange(range.start.row, range.start.column);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n range.end.row = tmp.end.row;\n range.end.column = tmp.end.column;\n }\n }\n sel.mergeOverlappingRanges();\n\n var words = [];\n for (var i = all.length; i--; ) {\n var range = all[i];\n words.unshift(session.getTextRange(range));\n }\n\n if (dir < 0)\n words.unshift(words.pop());\n else\n words.push(words.shift());\n\n for (var i = all.length; i--; ) {\n var range = all[i];\n var tmp = range.clone();\n session.replace(range, words[i]);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n }\n sel.fromOrientedRange(sel.ranges[0]);\n };\n this.selectMore = function(dir, skip, stopAtFirst) {\n var session = this.session;\n var sel = session.multiSelect;\n\n var range = sel.toOrientedRange();\n if (range.isEmpty()) {\n range = session.getWordRange(range.start.row, range.start.column);\n range.cursor = dir == -1 ? range.start : range.end;\n this.multiSelect.addRange(range);\n if (stopAtFirst)\n return;\n }\n var needle = session.getTextRange(range);\n\n var newRange = find(session, needle, dir);\n if (newRange) {\n newRange.cursor = dir == -1 ? newRange.start : newRange.end;\n this.session.unfold(newRange);\n this.multiSelect.addRange(newRange);\n this.renderer.scrollCursorIntoView(null, 0.5);\n }\n if (skip)\n this.multiSelect.substractPoint(range.cursor);\n };\n this.alignCursors = function() {\n var session = this.session;\n var sel = session.multiSelect;\n var ranges = sel.ranges;\n var row = -1;\n var sameRowRanges = ranges.filter(function(r) {\n if (r.cursor.row == row)\n return true;\n row = r.cursor.row;\n });\n \n if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\n var range = this.selection.getRange();\n var fr = range.start.row, lr = range.end.row;\n var guessRange = fr == lr;\n if (guessRange) {\n var max = this.session.getLength();\n var line;\n do {\n line = this.session.getLine(lr);\n } while (/[=:]/.test(line) && ++lr < max);\n do {\n line = this.session.getLine(fr);\n } while (/[=:]/.test(line) && --fr > 0);\n \n if (fr < 0) fr = 0;\n if (lr >= max) lr = max - 1;\n }\n var lines = this.session.removeFullLines(fr, lr);\n lines = this.$reAlignText(lines, guessRange);\n this.session.insert({row: fr, column: 0}, lines.join(\"\\n\") + \"\\n\");\n if (!guessRange) {\n range.start.column = 0;\n range.end.column = lines[lines.length - 1].length;\n }\n this.selection.setRange(range);\n } else {\n sameRowRanges.forEach(function(r) {\n sel.substractPoint(r.cursor);\n });\n\n var maxCol = 0;\n var minSpace = Infinity;\n var spaceOffsets = ranges.map(function(r) {\n var p = r.cursor;\n var line = session.getLine(p.row);\n var spaceOffset = line.substr(p.column).search(/\\S/g);\n if (spaceOffset == -1)\n spaceOffset = 0;\n\n if (p.column > maxCol)\n maxCol = p.column;\n if (spaceOffset < minSpace)\n minSpace = spaceOffset;\n return spaceOffset;\n });\n ranges.forEach(function(r, i) {\n var p = r.cursor;\n var l = maxCol - p.column;\n var d = spaceOffsets[i] - minSpace;\n if (l > d)\n session.insert(p, lang.stringRepeat(\" \", l - d));\n else\n session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\n\n r.start.column = r.end.column = maxCol;\n r.start.row = r.end.row = p.row;\n r.cursor = r.end;\n });\n sel.fromOrientedRange(ranges[0]);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n }\n };\n\n this.$reAlignText = function(lines, forceLeft) {\n var isLeftAligned = true, isRightAligned = true;\n var startW, textW, endW;\n\n return lines.map(function(line) {\n var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n if (!m)\n return [line];\n\n if (startW == null) {\n startW = m[1].length;\n textW = m[2].length;\n endW = m[3].length;\n return m;\n }\n\n if (startW + textW + endW != m[1].length + m[2].length + m[3].length)\n isRightAligned = false;\n if (startW != m[1].length)\n isLeftAligned = false;\n\n if (startW > m[1].length)\n startW = m[1].length;\n if (textW < m[2].length)\n textW = m[2].length;\n if (endW > m[3].length)\n endW = m[3].length;\n\n return m;\n }).map(forceLeft ? alignLeft :\n isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\n\n function spaces(n) {\n return lang.stringRepeat(\" \", n);\n }\n\n function alignLeft(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(textW - m[2].length + endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function alignRight(m) {\n return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function unAlign(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n };\n}).call(Editor.prototype);\n\n\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\nexports.onSessionChange = function(e) {\n var session = e.session;\n if (session && !session.multiSelect) {\n session.$selectionMarkers = [];\n session.selection.$initRangeList();\n session.multiSelect = session.selection;\n }\n this.multiSelect = session && session.multiSelect;\n\n var oldSession = e.oldSession;\n if (oldSession) {\n oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\n oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\n oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\n oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\n oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\n oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\n }\n\n if (session) {\n session.multiSelect.on(\"addRange\", this.$onAddRange);\n session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\n session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\n session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\n session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\n session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\n }\n\n if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\n if (session.selection.inMultiSelectMode)\n this.$onMultiSelect();\n else\n this.$onSingleSelect();\n }\n};\nfunction MultiSelect(editor) {\n if (editor.$multiselectOnSessionChange)\n return;\n editor.$onAddRange = editor.$onAddRange.bind(editor);\n editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\n editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\n editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\n editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\n editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\n\n editor.$multiselectOnSessionChange(editor);\n editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\n\n editor.on(\"mousedown\", onMouseDown);\n editor.commands.addCommands(commands.defaultCommands);\n\n addAltCursorListeners(editor);\n}\n\nfunction addAltCursorListeners(editor){\n if (!editor.textInput) return;\n var el = editor.textInput.getElement();\n var altCursor = false;\n event.addListener(el, \"keydown\", function(e) {\n var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\n if (editor.$blockSelectEnabled && altDown) {\n if (!altCursor) {\n editor.renderer.setMouseCursor(\"crosshair\");\n altCursor = true;\n }\n } else if (altCursor) {\n reset();\n }\n }, editor);\n\n event.addListener(el, \"keyup\", reset, editor);\n event.addListener(el, \"blur\", reset, editor);\n function reset(e) {\n if (altCursor) {\n editor.renderer.setMouseCursor(\"\");\n altCursor = false;\n }\n }\n}\n\nexports.MultiSelect = MultiSelect;\n\n\nrequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n enableMultiselect: {\n set: function(val) {\n MultiSelect(this);\n if (val) {\n this.on(\"changeSession\", this.$multiselectOnSessionChange);\n this.on(\"mousedown\", onMouseDown);\n } else {\n this.off(\"changeSession\", this.$multiselectOnSessionChange);\n this.off(\"mousedown\", onMouseDown);\n }\n },\n value: true\n },\n enableBlockSelect: {\n set: function(val) {\n this.$blockSelectEnabled = val;\n },\n value: true\n }\n});\n\n\n\n});\n\nace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\n\n(function() {\n\n this.foldingStartMarker = null;\n this.foldingStopMarker = null;\n this.getFoldWidget = function(session, foldStyle, row) {\n var line = session.getLine(row);\n if (this.foldingStartMarker.test(line))\n return \"start\";\n if (foldStyle == \"markbeginend\"\n && this.foldingStopMarker\n && this.foldingStopMarker.test(line))\n return \"end\";\n return \"\";\n };\n\n this.getFoldWidgetRange = function(session, foldStyle, row) {\n return null;\n };\n\n this.indentationBlock = function(session, row, column) {\n var re = /\\S/;\n var line = session.getLine(row);\n var startLevel = line.search(re);\n if (startLevel == -1)\n return;\n\n var startColumn = column || line.length;\n var maxRow = session.getLength();\n var startRow = row;\n var endRow = row;\n\n while (++row < maxRow) {\n var level = session.getLine(row).search(re);\n\n if (level == -1)\n continue;\n\n if (level <= startLevel) {\n var token = session.getTokenAt(row, 0);\n if (!token || token.type !== \"string\")\n break;\n }\n\n endRow = row;\n }\n\n if (endRow > startRow) {\n var endColumn = session.getLine(endRow).length;\n return new Range(startRow, startColumn, endRow, endColumn);\n }\n };\n\n this.openingBracketBlock = function(session, bracket, row, column, typeRe) {\n var start = {row: row, column: column + 1};\n var end = session.$findClosingBracket(bracket, start, typeRe);\n if (!end)\n return;\n\n var fw = session.foldWidgets[end.row];\n if (fw == null)\n fw = session.getFoldWidget(end.row);\n\n if (fw == \"start\" && end.row > start.row) {\n end.row --;\n end.column = session.getLine(end.row).length;\n }\n return Range.fromPoints(start, end);\n };\n\n this.closingBracketBlock = function(session, bracket, row, column, typeRe) {\n var end = {row: row, column: column};\n var start = session.$findOpeningBracket(bracket, end);\n\n if (!start)\n return;\n\n start.column++;\n end.column--;\n\n return Range.fromPoints(start, end);\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = \".ace-tm .ace_gutter {\\\nbackground: #f0f0f0;\\\ncolor: #333;\\\n}\\\n.ace-tm .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-tm .ace_fold {\\\nbackground-color: #6B72E6;\\\n}\\\n.ace-tm {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-tm .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-tm .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-tm .ace_storage,\\\n.ace-tm .ace_keyword {\\\ncolor: blue;\\\n}\\\n.ace-tm .ace_constant {\\\ncolor: rgb(197, 6, 11);\\\n}\\\n.ace-tm .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-tm .ace_constant.ace_language {\\\ncolor: rgb(88, 92, 246);\\\n}\\\n.ace-tm .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_invalid {\\\nbackground-color: rgba(255, 0, 0, 0.1);\\\ncolor: red;\\\n}\\\n.ace-tm .ace_support.ace_function {\\\ncolor: rgb(60, 76, 114);\\\n}\\\n.ace-tm .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_support.ace_type,\\\n.ace-tm .ace_support.ace_class {\\\ncolor: rgb(109, 121, 222);\\\n}\\\n.ace-tm .ace_keyword.ace_operator {\\\ncolor: rgb(104, 118, 135);\\\n}\\\n.ace-tm .ace_string {\\\ncolor: rgb(3, 106, 7);\\\n}\\\n.ace-tm .ace_comment {\\\ncolor: rgb(76, 136, 107);\\\n}\\\n.ace-tm .ace_comment.ace_doc {\\\ncolor: rgb(0, 102, 255);\\\n}\\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\\ncolor: rgb(128, 159, 191);\\\n}\\\n.ace-tm .ace_constant.ace_numeric {\\\ncolor: rgb(0, 0, 205);\\\n}\\\n.ace-tm .ace_variable {\\\ncolor: rgb(49, 132, 149);\\\n}\\\n.ace-tm .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-tm .ace_entity.ace_name.ace_function {\\\ncolor: #0000A2;\\\n}\\\n.ace-tm .ace_heading {\\\ncolor: rgb(12, 7, 255);\\\n}\\\n.ace-tm .ace_list {\\\ncolor:rgb(185, 6, 144);\\\n}\\\n.ace-tm .ace_meta.ace_tag {\\\ncolor:rgb(0, 22, 142);\\\n}\\\n.ace-tm .ace_string.ace_regex {\\\ncolor: rgb(255, 0, 0)\\\n}\\\n.ace-tm .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px white;\\\n}\\\n.ace-tm .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-tm .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-tm .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-tm .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-tm .ace_gutter-active-line {\\\nbackground-color : #dcdcdc;\\\n}\\\n.ace-tm .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-tm .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\\\n\";\nexports.$id = \"ace/theme/textmate\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n});\n\nace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"./lib/dom\");\n\nfunction LineWidgets(session) {\n this.session = session;\n this.session.widgetManager = this;\n this.session.getRowLength = this.getRowLength;\n this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\n this.updateOnChange = this.updateOnChange.bind(this);\n this.renderWidgets = this.renderWidgets.bind(this);\n this.measureWidgets = this.measureWidgets.bind(this);\n this.session._changedWidgets = [];\n this.$onChangeEditor = this.$onChangeEditor.bind(this);\n \n this.session.on(\"change\", this.updateOnChange);\n this.session.on(\"changeFold\", this.updateOnFold);\n this.session.on(\"changeEditor\", this.$onChangeEditor);\n}\n\n(function() {\n this.getRowLength = function(row) {\n var h;\n if (this.lineWidgets)\n h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n else \n h = 0;\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1 + h;\n } else {\n return this.$wrapData[row].length + 1 + h;\n }\n };\n\n this.$getWidgetScreenLength = function() {\n var screenRows = 0;\n this.lineWidgets.forEach(function(w){\n if (w && w.rowCount && !w.hidden)\n screenRows += w.rowCount;\n });\n return screenRows;\n }; \n \n this.$onChangeEditor = function(e) {\n this.attach(e.editor);\n };\n \n this.attach = function(editor) {\n if (editor && editor.widgetManager && editor.widgetManager != this)\n editor.widgetManager.detach();\n\n if (this.editor == editor)\n return;\n\n this.detach();\n this.editor = editor;\n \n if (editor) {\n editor.widgetManager = this;\n editor.renderer.on(\"beforeRender\", this.measureWidgets);\n editor.renderer.on(\"afterRender\", this.renderWidgets);\n }\n };\n this.detach = function(e) {\n var editor = this.editor;\n if (!editor)\n return;\n \n this.editor = null;\n editor.widgetManager = null;\n \n editor.renderer.off(\"beforeRender\", this.measureWidgets);\n editor.renderer.off(\"afterRender\", this.renderWidgets);\n var lineWidgets = this.session.lineWidgets;\n lineWidgets && lineWidgets.forEach(function(w) {\n if (w && w.el && w.el.parentNode) {\n w._inDocument = false;\n w.el.parentNode.removeChild(w.el);\n }\n });\n };\n\n this.updateOnFold = function(e, session) {\n var lineWidgets = session.lineWidgets;\n if (!lineWidgets || !e.action)\n return;\n var fold = e.data;\n var start = fold.start.row;\n var end = fold.end.row;\n var hide = e.action == \"add\";\n for (var i = start + 1; i < end; i++) {\n if (lineWidgets[i])\n lineWidgets[i].hidden = hide;\n }\n if (lineWidgets[end]) {\n if (hide) {\n if (!lineWidgets[start])\n lineWidgets[start] = lineWidgets[end];\n else\n lineWidgets[end].hidden = hide;\n } else {\n if (lineWidgets[start] == lineWidgets[end])\n lineWidgets[start] = undefined;\n lineWidgets[end].hidden = hide;\n }\n }\n };\n \n this.updateOnChange = function(delta) {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets) return;\n \n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n\n if (len === 0) {\n } else if (delta.action == \"remove\") {\n var removed = lineWidgets.splice(startRow + 1, len);\n if (!lineWidgets[startRow] && removed[removed.length - 1]) {\n lineWidgets[startRow] = removed.pop();\n }\n removed.forEach(function(w) {\n w && this.removeLineWidget(w);\n }, this);\n this.$updateRows();\n } else {\n var args = new Array(len);\n if (lineWidgets[startRow] && lineWidgets[startRow].column != null) {\n if (delta.start.column > lineWidgets[startRow].column)\n startRow++;\n }\n args.unshift(startRow, 0);\n lineWidgets.splice.apply(lineWidgets, args);\n this.$updateRows();\n }\n };\n \n this.$updateRows = function() {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets) return;\n var noWidgets = true;\n lineWidgets.forEach(function(w, i) {\n if (w) {\n noWidgets = false;\n w.row = i;\n while (w.$oldWidget) {\n w.$oldWidget.row = i;\n w = w.$oldWidget;\n }\n }\n });\n if (noWidgets)\n this.session.lineWidgets = null;\n };\n\n this.$registerLineWidget = function(w) {\n if (!this.session.lineWidgets)\n this.session.lineWidgets = new Array(this.session.getLength());\n \n var old = this.session.lineWidgets[w.row];\n if (old) {\n w.$oldWidget = old;\n if (old.el && old.el.parentNode) {\n old.el.parentNode.removeChild(old.el);\n old._inDocument = false;\n }\n }\n \n this.session.lineWidgets[w.row] = w;\n return w;\n };\n \n this.addLineWidget = function(w) {\n this.$registerLineWidget(w);\n w.session = this.session;\n \n if (!this.editor) return w;\n \n var renderer = this.editor.renderer;\n if (w.html && !w.el) {\n w.el = dom.createElement(\"div\");\n w.el.innerHTML = w.html;\n }\n if (w.el) {\n dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\n w.el.style.position = \"absolute\";\n w.el.style.zIndex = 5;\n renderer.container.appendChild(w.el);\n w._inDocument = true;\n \n if (!w.coverGutter) {\n w.el.style.zIndex = 3;\n }\n if (w.pixelHeight == null) {\n w.pixelHeight = w.el.offsetHeight;\n }\n }\n if (w.rowCount == null) {\n w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\n }\n \n var fold = this.session.getFoldAt(w.row, 0);\n w.$fold = fold;\n if (fold) {\n var lineWidgets = this.session.lineWidgets;\n if (w.row == fold.end.row && !lineWidgets[fold.start.row])\n lineWidgets[fold.start.row] = w;\n else\n w.hidden = true;\n }\n \n this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\n \n this.$updateRows();\n this.renderWidgets(null, renderer);\n this.onWidgetChanged(w);\n return w;\n };\n \n this.removeLineWidget = function(w) {\n w._inDocument = false;\n w.session = null;\n if (w.el && w.el.parentNode)\n w.el.parentNode.removeChild(w.el);\n if (w.editor && w.editor.destroy) try {\n w.editor.destroy();\n } catch(e){}\n if (this.session.lineWidgets) {\n var w1 = this.session.lineWidgets[w.row];\n if (w1 == w) {\n this.session.lineWidgets[w.row] = w.$oldWidget;\n if (w.$oldWidget)\n this.onWidgetChanged(w.$oldWidget);\n } else {\n while (w1) {\n if (w1.$oldWidget == w) {\n w1.$oldWidget = w.$oldWidget;\n break;\n }\n w1 = w1.$oldWidget;\n }\n }\n }\n this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\n this.$updateRows();\n };\n \n this.getWidgetsAtRow = function(row) {\n var lineWidgets = this.session.lineWidgets;\n var w = lineWidgets && lineWidgets[row];\n var list = [];\n while (w) {\n list.push(w);\n w = w.$oldWidget;\n }\n return list;\n };\n \n this.onWidgetChanged = function(w) {\n this.session._changedWidgets.push(w);\n this.editor && this.editor.renderer.updateFull();\n };\n \n this.measureWidgets = function(e, renderer) {\n var changedWidgets = this.session._changedWidgets;\n var config = renderer.layerConfig;\n \n if (!changedWidgets || !changedWidgets.length) return;\n var min = Infinity;\n for (var i = 0; i < changedWidgets.length; i++) {\n var w = changedWidgets[i];\n if (!w || !w.el) continue;\n if (w.session != this.session) continue;\n if (!w._inDocument) {\n if (this.session.lineWidgets[w.row] != w)\n continue;\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n \n w.h = w.el.offsetHeight;\n \n if (!w.fixedWidth) {\n w.w = w.el.offsetWidth;\n w.screenWidth = Math.ceil(w.w / config.characterWidth);\n }\n \n var rowCount = w.h / config.lineHeight;\n if (w.coverLine) {\n rowCount -= this.session.getRowLineCount(w.row);\n if (rowCount < 0)\n rowCount = 0;\n }\n if (w.rowCount != rowCount) {\n w.rowCount = rowCount;\n if (w.row < min)\n min = w.row;\n }\n }\n if (min != Infinity) {\n this.session._emit(\"changeFold\", {data:{start:{row: min}}});\n this.session.lineWidgetWidth = null;\n }\n this.session._changedWidgets = [];\n };\n \n this.renderWidgets = function(e, renderer) {\n var config = renderer.layerConfig;\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var first = Math.min(this.firstRow, config.firstRow);\n var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\n \n while (first > 0 && !lineWidgets[first])\n first--;\n \n this.firstRow = config.firstRow;\n this.lastRow = config.lastRow;\n\n renderer.$cursorLayer.config = config;\n for (var i = first; i <= last; i++) {\n var w = lineWidgets[i];\n if (!w || !w.el) continue;\n if (w.hidden) {\n w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\n continue;\n }\n if (!w._inDocument) {\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n var top = renderer.$cursorLayer.getPixelPosition({row: i, column:0}, true).top;\n if (!w.coverLine)\n top += config.lineHeight * this.session.getRowLineCount(w.row);\n w.el.style.top = top - config.offset + \"px\";\n \n var left = w.coverGutter ? 0 : renderer.gutterWidth;\n if (!w.fixedWidth)\n left -= renderer.scrollLeft;\n w.el.style.left = left + \"px\";\n \n if (w.fullWidth && w.screenWidth) {\n w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\n }\n \n if (w.fixedWidth) {\n w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\n } else {\n w.el.style.right = \"\";\n }\n }\n };\n \n}).call(LineWidgets.prototype);\n\n\nexports.LineWidgets = LineWidgets;\n\n});\n\nace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\nvar LineWidgets = require(\"../line_widgets\").LineWidgets;\nvar dom = require(\"../lib/dom\");\nvar Range = require(\"../range\").Range;\n\nfunction binarySearch(array, needle, comparator) {\n var first = 0;\n var last = array.length - 1;\n\n while (first <= last) {\n var mid = (first + last) >> 1;\n var c = comparator(needle, array[mid]);\n if (c > 0)\n first = mid + 1;\n else if (c < 0)\n last = mid - 1;\n else\n return mid;\n }\n return -(first + 1);\n}\n\nfunction findAnnotations(session, row, dir) {\n var annotations = session.getAnnotations().sort(Range.comparePoints);\n if (!annotations.length)\n return;\n \n var i = binarySearch(annotations, {row: row, column: -1}, Range.comparePoints);\n if (i < 0)\n i = -i - 1;\n \n if (i >= annotations.length)\n i = dir > 0 ? 0 : annotations.length - 1;\n else if (i === 0 && dir < 0)\n i = annotations.length - 1;\n \n var annotation = annotations[i];\n if (!annotation || !dir)\n return;\n\n if (annotation.row === row) {\n do {\n annotation = annotations[i += dir];\n } while (annotation && annotation.row === row);\n if (!annotation)\n return annotations.slice();\n }\n \n \n var matched = [];\n row = annotation.row;\n do {\n matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\n annotation = annotations[i += dir];\n } while (annotation && annotation.row == row);\n return matched.length && matched;\n}\n\nexports.showErrorMarker = function(editor, dir) {\n var session = editor.session;\n if (!session.widgetManager) {\n session.widgetManager = new LineWidgets(session);\n session.widgetManager.attach(editor);\n }\n \n var pos = editor.getCursorPosition();\n var row = pos.row;\n var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function(w) {\n return w.type == \"errorMarker\";\n })[0];\n if (oldWidget) {\n oldWidget.destroy();\n } else {\n row -= dir;\n }\n var annotations = findAnnotations(session, row, dir);\n var gutterAnno;\n if (annotations) {\n var annotation = annotations[0];\n pos.column = (annotation.pos && typeof annotation.column != \"number\"\n ? annotation.pos.sc\n : annotation.column) || 0;\n pos.row = annotation.row;\n gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\n } else if (oldWidget) {\n return;\n } else {\n gutterAnno = {\n text: [\"Looks good!\"],\n className: \"ace_ok\"\n };\n }\n editor.session.unfold(pos.row);\n editor.selection.moveToPosition(pos);\n \n var w = {\n row: pos.row, \n fixedWidth: true,\n coverGutter: true,\n el: dom.createElement(\"div\"),\n type: \"errorMarker\"\n };\n var el = w.el.appendChild(dom.createElement(\"div\"));\n var arrow = w.el.appendChild(dom.createElement(\"div\"));\n arrow.className = \"error_widget_arrow \" + gutterAnno.className;\n \n var left = editor.renderer.$cursorLayer\n .getPixelPosition(pos).left;\n arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\n \n w.el.className = \"error_widget_wrapper\";\n el.className = \"error_widget \" + gutterAnno.className;\n el.innerHTML = gutterAnno.text.join(\"<br>\");\n \n el.appendChild(dom.createElement(\"div\"));\n \n var kb = function(_, hashId, keyString) {\n if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\n w.destroy();\n return {command: \"null\"};\n }\n };\n \n w.destroy = function() {\n if (editor.$mouseHandler.isMousePressed)\n return;\n editor.keyBinding.removeKeyboardHandler(kb);\n session.widgetManager.removeLineWidget(w);\n editor.off(\"changeSelection\", w.destroy);\n editor.off(\"changeSession\", w.destroy);\n editor.off(\"mouseup\", w.destroy);\n editor.off(\"change\", w.destroy);\n };\n \n editor.keyBinding.addKeyboardHandler(kb);\n editor.on(\"changeSelection\", w.destroy);\n editor.on(\"changeSession\", w.destroy);\n editor.on(\"mouseup\", w.destroy);\n editor.on(\"change\", w.destroy);\n \n editor.session.widgetManager.addLineWidget(w);\n \n w.el.onmousedown = editor.focus.bind(editor);\n \n editor.renderer.scrollCursorIntoView(null, 0.5, {bottom: w.el.offsetHeight});\n};\n\n\ndom.importCssString(\"\\\n .error_widget_wrapper {\\\n background: inherit;\\\n color: inherit;\\\n border:none\\\n }\\\n .error_widget {\\\n border-top: solid 2px;\\\n border-bottom: solid 2px;\\\n margin: 5px 0;\\\n padding: 10px 40px;\\\n white-space: pre-wrap;\\\n }\\\n .error_widget.ace_error, .error_widget_arrow.ace_error{\\\n border-color: #ff5a5a\\\n }\\\n .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\\n border-color: #F1D817\\\n }\\\n .error_widget.ace_info, .error_widget_arrow.ace_info{\\\n border-color: #5a5a5a\\\n }\\\n .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\\n border-color: #5aaa5a\\\n }\\\n .error_widget_arrow {\\\n position: absolute;\\\n border: solid 5px;\\\n border-top-color: transparent!important;\\\n border-right-color: transparent!important;\\\n border-left-color: transparent!important;\\\n top: -5px;\\\n }\\\n\", \"error_marker.css\", false);\n\n});\n\nace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/range\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./lib/fixoldbrowsers\");\n\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\n\nvar Range = require(\"./range\").Range;\nvar Editor = require(\"./editor\").Editor;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar Renderer = require(\"./virtual_renderer\").VirtualRenderer;\nrequire(\"./worker/worker_client\");\nrequire(\"./keyboard/hash_handler\");\nrequire(\"./placeholder\");\nrequire(\"./multi_select\");\nrequire(\"./mode/folding/fold_mode\");\nrequire(\"./theme/textmate\");\nrequire(\"./ext/error_marker\");\n\nexports.config = require(\"./config\");\nexports.require = require;\n\nif (typeof define === \"function\")\n exports.define = define;\nexports.edit = function(el, options) {\n if (typeof el == \"string\") {\n var _id = el;\n el = document.getElementById(_id);\n if (!el)\n throw new Error(\"ace.edit can't find div #\" + _id);\n }\n\n if (el && el.env && el.env.editor instanceof Editor)\n return el.env.editor;\n\n var value = \"\";\n if (el && /input|textarea/i.test(el.tagName)) {\n var oldNode = el;\n value = oldNode.value;\n el = dom.createElement(\"pre\");\n oldNode.parentNode.replaceChild(el, oldNode);\n } else if (el) {\n value = el.textContent;\n el.innerHTML = \"\";\n }\n\n var doc = exports.createEditSession(value);\n\n var editor = new Editor(new Renderer(el), doc, options);\n\n var env = {\n document: doc,\n editor: editor,\n onResize: editor.resize.bind(editor, null)\n };\n if (oldNode) env.textarea = oldNode;\n event.addListener(window, \"resize\", env.onResize);\n editor.on(\"destroy\", function() {\n event.removeListener(window, \"resize\", env.onResize);\n env.editor.container.env = null; // prevent memory leak on old ie\n });\n editor.container.env = editor.env = env;\n return editor;\n};\nexports.createEditSession = function(text, mode) {\n var doc = new EditSession(text, mode);\n doc.setUndoManager(new UndoManager());\n return doc;\n};\nexports.Range = Range;\nexports.Editor = Editor;\nexports.EditSession = EditSession;\nexports.UndoManager = UndoManager;\nexports.VirtualRenderer = Renderer;\nexports.version = exports.config.version;\n}); (function() {\n ace.require([\"ace/ace\"], function(a) {\n if (a) {\n a.config.init(true);\n a.define = ace.define;\n }\n if (!window.ace)\n window.ace = a;\n for (var key in a) if (a.hasOwnProperty(key))\n window.ace[key] = a[key];\n window.ace[\"default\"] = window.ace;\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = window.ace;\n }\n });\n })();\n ","module.exports = require('./lib/axios');","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\nvar defaults = require('../defaults');\nvar Cancel = require('../cancel/Cancel');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n var responseType = config.responseType;\n var onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';\n var transitional = config.transitional || defaults.transitional;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(createError(\n timeoutErrorMessage,\n config,\n transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = function(cancel) {\n if (!request) {\n return;\n }\n reject(!cancel || (cancel && cancel.type) ? new Cancel('canceled') : cancel);\n request.abort();\n request = null;\n };\n\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\naxios.VERSION = require('./env/data').version;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(function(cancel) {\n if (!token._listeners) return;\n\n var i;\n var l = token._listeners.length;\n\n for (i = 0; i < l; i++) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = function(onfulfilled) {\n var _resolve;\n // eslint-disable-next-line func-names\n var promise = new Promise(function(resolve) {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Subscribe to the cancel signal\n */\n\nCancelToken.prototype.subscribe = function subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n};\n\n/**\n * Unsubscribe from the cancel signal\n */\n\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n var index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\nvar validator = require('../helpers/validator');\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n var transitional = config.transitional;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n // filter out skipped interceptors\n var requestInterceptorChain = [];\n var synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n var responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n var promise;\n\n if (!synchronousRequestInterceptors) {\n var chain = [dispatchRequest, undefined];\n\n Array.prototype.unshift.apply(chain, requestInterceptorChain);\n chain = chain.concat(responseInterceptorChain);\n\n promise = Promise.resolve(config);\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n }\n\n\n var newConfig = config;\n while (requestInterceptorChain.length) {\n var onFulfilled = requestInterceptorChain.shift();\n var onRejected = requestInterceptorChain.shift();\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected(error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest(newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n while (responseInterceptorChain.length) {\n promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar Cancel = require('../cancel/Cancel');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new Cancel('canceled');\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n };\n return error;\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(prop) {\n if (prop in config2) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n var mergeMap = {\n 'url': valueFromConfig2,\n 'method': valueFromConfig2,\n 'data': valueFromConfig2,\n 'baseURL': defaultToConfig2,\n 'transformRequest': defaultToConfig2,\n 'transformResponse': defaultToConfig2,\n 'paramsSerializer': defaultToConfig2,\n 'timeout': defaultToConfig2,\n 'timeoutMessage': defaultToConfig2,\n 'withCredentials': defaultToConfig2,\n 'adapter': defaultToConfig2,\n 'responseType': defaultToConfig2,\n 'xsrfCookieName': defaultToConfig2,\n 'xsrfHeaderName': defaultToConfig2,\n 'onUploadProgress': defaultToConfig2,\n 'onDownloadProgress': defaultToConfig2,\n 'decompress': defaultToConfig2,\n 'maxContentLength': defaultToConfig2,\n 'maxBodyLength': defaultToConfig2,\n 'transport': defaultToConfig2,\n 'httpAgent': defaultToConfig2,\n 'httpsAgent': defaultToConfig2,\n 'cancelToken': defaultToConfig2,\n 'socketPath': defaultToConfig2,\n 'responseEncoding': defaultToConfig2,\n 'validateStatus': mergeDirectKeys\n };\n\n utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\n var merge = mergeMap[prop] || mergeDeepProperties;\n var configValue = merge(prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n};\n","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar defaults = require('./../defaults');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n var context = this || defaults;\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn.call(context, data, headers);\n });\n\n return data;\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\nvar enhanceError = require('./core/enhanceError');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n }\n return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n transitional: {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n },\n\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data) || (headers && headers['Content-Type'] === 'application/json')) {\n setContentTypeIfUnset(headers, 'application/json');\n return stringifySafely(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n var transitional = this.transitional || defaults.transitional;\n var silentJSONParsing = transitional && transitional.silentJSONParsing;\n var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw enhanceError(e, this, 'E_JSON_PARSE');\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","module.exports = {\n \"version\": \"0.22.0\"\n};","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n return (typeof payload === 'object') && (payload.isAxiosError === true);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","'use strict';\n\nvar VERSION = require('../env/data').version;\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nvar deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return function(value, opt, opts) {\n if (validator === false) {\n throw new Error(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')));\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n var keys = Object.keys(options);\n var i = keys.length;\n while (i-- > 0) {\n var opt = keys[i];\n var validator = schema[opt];\n if (validator) {\n var value = options[opt];\n var result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new TypeError('option ' + opt + ' must be ' + result);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw Error('Unknown option ' + opt);\n }\n }\n}\n\nmodule.exports = {\n assertOptions: assertOptions,\n validators: validators\n};\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (toString.call(val) !== '[object Object]') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM\n};\n","// eslint-disable-next-line es-x/no-typed-arrays -- safe\nmodule.exports = typeof ArrayBuffer != 'undefined' && typeof DataView != 'undefined';\n","'use strict';\nvar NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-native');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar classof = require('../internals/classof');\nvar tryToString = require('../internals/try-to-string');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineProperty = require('../internals/object-define-property').f;\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar uid = require('../internals/uid');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar Int8Array = global.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar Uint8ClampedArray = global.Uint8ClampedArray;\nvar Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype;\nvar TypedArray = Int8Array && getPrototypeOf(Int8Array);\nvar TypedArrayPrototype = Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype);\nvar ObjectPrototype = Object.prototype;\nvar TypeError = global.TypeError;\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');\nvar TYPED_ARRAY_CONSTRUCTOR = 'TypedArrayConstructor';\n// Fixing native typed arrays in Opera Presto crashes the browser, see #595\nvar NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(global.opera) !== 'Opera';\nvar TYPED_ARRAY_TAG_REQUIRED = false;\nvar NAME, Constructor, Prototype;\n\nvar TypedArrayConstructorsList = {\n Int8Array: 1,\n Uint8Array: 1,\n Uint8ClampedArray: 1,\n Int16Array: 2,\n Uint16Array: 2,\n Int32Array: 4,\n Uint32Array: 4,\n Float32Array: 4,\n Float64Array: 8\n};\n\nvar BigIntArrayConstructorsList = {\n BigInt64Array: 8,\n BigUint64Array: 8\n};\n\nvar isView = function isView(it) {\n if (!isObject(it)) return false;\n var klass = classof(it);\n return klass === 'DataView'\n || hasOwn(TypedArrayConstructorsList, klass)\n || hasOwn(BigIntArrayConstructorsList, klass);\n};\n\nvar getTypedArrayConstructor = function (it) {\n var proto = getPrototypeOf(it);\n if (!isObject(proto)) return;\n var state = getInternalState(proto);\n return (state && hasOwn(state, TYPED_ARRAY_CONSTRUCTOR)) ? state[TYPED_ARRAY_CONSTRUCTOR] : getTypedArrayConstructor(proto);\n};\n\nvar isTypedArray = function (it) {\n if (!isObject(it)) return false;\n var klass = classof(it);\n return hasOwn(TypedArrayConstructorsList, klass)\n || hasOwn(BigIntArrayConstructorsList, klass);\n};\n\nvar aTypedArray = function (it) {\n if (isTypedArray(it)) return it;\n throw TypeError('Target is not a typed array');\n};\n\nvar aTypedArrayConstructor = function (C) {\n if (isCallable(C) && (!setPrototypeOf || isPrototypeOf(TypedArray, C))) return C;\n throw TypeError(tryToString(C) + ' is not a typed array constructor');\n};\n\nvar exportTypedArrayMethod = function (KEY, property, forced, options) {\n if (!DESCRIPTORS) return;\n if (forced) for (var ARRAY in TypedArrayConstructorsList) {\n var TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && hasOwn(TypedArrayConstructor.prototype, KEY)) try {\n delete TypedArrayConstructor.prototype[KEY];\n } catch (error) {\n // old WebKit bug - some methods are non-configurable\n try {\n TypedArrayConstructor.prototype[KEY] = property;\n } catch (error2) { /* empty */ }\n }\n }\n if (!TypedArrayPrototype[KEY] || forced) {\n defineBuiltIn(TypedArrayPrototype, KEY, forced ? property\n : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property, options);\n }\n};\n\nvar exportTypedArrayStaticMethod = function (KEY, property, forced) {\n var ARRAY, TypedArrayConstructor;\n if (!DESCRIPTORS) return;\n if (setPrototypeOf) {\n if (forced) for (ARRAY in TypedArrayConstructorsList) {\n TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && hasOwn(TypedArrayConstructor, KEY)) try {\n delete TypedArrayConstructor[KEY];\n } catch (error) { /* empty */ }\n }\n if (!TypedArray[KEY] || forced) {\n // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable\n try {\n return defineBuiltIn(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && TypedArray[KEY] || property);\n } catch (error) { /* empty */ }\n } else return;\n }\n for (ARRAY in TypedArrayConstructorsList) {\n TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {\n defineBuiltIn(TypedArrayConstructor, KEY, property);\n }\n }\n};\n\nfor (NAME in TypedArrayConstructorsList) {\n Constructor = global[NAME];\n Prototype = Constructor && Constructor.prototype;\n if (Prototype) enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;\n else NATIVE_ARRAY_BUFFER_VIEWS = false;\n}\n\nfor (NAME in BigIntArrayConstructorsList) {\n Constructor = global[NAME];\n Prototype = Constructor && Constructor.prototype;\n if (Prototype) enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;\n}\n\n// WebKit bug - typed arrays constructors prototype is Object.prototype\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !isCallable(TypedArray) || TypedArray === Function.prototype) {\n // eslint-disable-next-line no-shadow -- safe\n TypedArray = function TypedArray() {\n throw TypeError('Incorrect invocation');\n };\n if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n if (global[NAME]) setPrototypeOf(global[NAME], TypedArray);\n }\n}\n\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype) {\n TypedArrayPrototype = TypedArray.prototype;\n if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n if (global[NAME]) setPrototypeOf(global[NAME].prototype, TypedArrayPrototype);\n }\n}\n\n// WebKit bug - one more object in Uint8ClampedArray prototype chain\nif (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype) {\n setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);\n}\n\nif (DESCRIPTORS && !hasOwn(TypedArrayPrototype, TO_STRING_TAG)) {\n TYPED_ARRAY_TAG_REQUIRED = true;\n defineProperty(TypedArrayPrototype, TO_STRING_TAG, { get: function () {\n return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;\n } });\n for (NAME in TypedArrayConstructorsList) if (global[NAME]) {\n createNonEnumerableProperty(global[NAME], TYPED_ARRAY_TAG, NAME);\n }\n}\n\nmodule.exports = {\n NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS,\n TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQUIRED && TYPED_ARRAY_TAG,\n aTypedArray: aTypedArray,\n aTypedArrayConstructor: aTypedArrayConstructor,\n exportTypedArrayMethod: exportTypedArrayMethod,\n exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,\n getTypedArrayConstructor: getTypedArrayConstructor,\n isView: isView,\n isTypedArray: isTypedArray,\n TypedArray: TypedArray,\n TypedArrayPrototype: TypedArrayPrototype\n};\n","'use strict';\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-native');\nvar FunctionName = require('../internals/function-name');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar fails = require('../internals/fails');\nvar anInstance = require('../internals/an-instance');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toLength = require('../internals/to-length');\nvar toIndex = require('../internals/to-index');\nvar IEEE754 = require('../internals/ieee754');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar defineProperty = require('../internals/object-define-property').f;\nvar arrayFill = require('../internals/array-fill');\nvar arraySlice = require('../internals/array-slice-simple');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length';\nvar WRONG_INDEX = 'Wrong index';\nvar NativeArrayBuffer = global[ARRAY_BUFFER];\nvar $ArrayBuffer = NativeArrayBuffer;\nvar ArrayBufferPrototype = $ArrayBuffer && $ArrayBuffer[PROTOTYPE];\nvar $DataView = global[DATA_VIEW];\nvar DataViewPrototype = $DataView && $DataView[PROTOTYPE];\nvar ObjectPrototype = Object.prototype;\nvar Array = global.Array;\nvar RangeError = global.RangeError;\nvar fill = uncurryThis(arrayFill);\nvar reverse = uncurryThis([].reverse);\n\nvar packIEEE754 = IEEE754.pack;\nvar unpackIEEE754 = IEEE754.unpack;\n\nvar packInt8 = function (number) {\n return [number & 0xFF];\n};\n\nvar packInt16 = function (number) {\n return [number & 0xFF, number >> 8 & 0xFF];\n};\n\nvar packInt32 = function (number) {\n return [number & 0xFF, number >> 8 & 0xFF, number >> 16 & 0xFF, number >> 24 & 0xFF];\n};\n\nvar unpackInt32 = function (buffer) {\n return buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0];\n};\n\nvar packFloat32 = function (number) {\n return packIEEE754(number, 23, 4);\n};\n\nvar packFloat64 = function (number) {\n return packIEEE754(number, 52, 8);\n};\n\nvar addGetter = function (Constructor, key) {\n defineProperty(Constructor[PROTOTYPE], key, { get: function () { return getInternalState(this)[key]; } });\n};\n\nvar get = function (view, count, index, isLittleEndian) {\n var intIndex = toIndex(index);\n var store = getInternalState(view);\n if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\n var bytes = getInternalState(store.buffer).bytes;\n var start = intIndex + store.byteOffset;\n var pack = arraySlice(bytes, start, start + count);\n return isLittleEndian ? pack : reverse(pack);\n};\n\nvar set = function (view, count, index, conversion, value, isLittleEndian) {\n var intIndex = toIndex(index);\n var store = getInternalState(view);\n if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\n var bytes = getInternalState(store.buffer).bytes;\n var start = intIndex + store.byteOffset;\n var pack = conversion(+value);\n for (var i = 0; i < count; i++) bytes[start + i] = pack[isLittleEndian ? i : count - i - 1];\n};\n\nif (!NATIVE_ARRAY_BUFFER) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, ArrayBufferPrototype);\n var byteLength = toIndex(length);\n setInternalState(this, {\n bytes: fill(Array(byteLength), 0),\n byteLength: byteLength\n });\n if (!DESCRIPTORS) this.byteLength = byteLength;\n };\n\n ArrayBufferPrototype = $ArrayBuffer[PROTOTYPE];\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, DataViewPrototype);\n anInstance(buffer, ArrayBufferPrototype);\n var bufferLength = getInternalState(buffer).byteLength;\n var offset = toIntegerOrInfinity(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n setInternalState(this, {\n buffer: buffer,\n byteLength: byteLength,\n byteOffset: offset\n });\n if (!DESCRIPTORS) {\n this.buffer = buffer;\n this.byteLength = byteLength;\n this.byteOffset = offset;\n }\n };\n\n DataViewPrototype = $DataView[PROTOTYPE];\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, 'byteLength');\n addGetter($DataView, 'buffer');\n addGetter($DataView, 'byteLength');\n addGetter($DataView, 'byteOffset');\n }\n\n defineBuiltIns(DataViewPrototype, {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined)) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 23);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 52);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packInt8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packInt8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packFloat32, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packFloat64, value, arguments.length > 2 ? arguments[2] : undefined);\n }\n });\n} else {\n var INCORRECT_ARRAY_BUFFER_NAME = PROPER_FUNCTION_NAME && NativeArrayBuffer.name !== ARRAY_BUFFER;\n /* eslint-disable no-new -- required for testing */\n if (!fails(function () {\n NativeArrayBuffer(1);\n }) || !fails(function () {\n new NativeArrayBuffer(-1);\n }) || fails(function () {\n new NativeArrayBuffer();\n new NativeArrayBuffer(1.5);\n new NativeArrayBuffer(NaN);\n return INCORRECT_ARRAY_BUFFER_NAME && !CONFIGURABLE_FUNCTION_NAME;\n })) {\n /* eslint-enable no-new -- required for testing */\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, ArrayBufferPrototype);\n return new NativeArrayBuffer(toIndex(length));\n };\n\n $ArrayBuffer[PROTOTYPE] = ArrayBufferPrototype;\n\n for (var keys = getOwnPropertyNames(NativeArrayBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) {\n createNonEnumerableProperty($ArrayBuffer, key, NativeArrayBuffer[key]);\n }\n }\n\n ArrayBufferPrototype.constructor = $ArrayBuffer;\n } else if (INCORRECT_ARRAY_BUFFER_NAME && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(NativeArrayBuffer, 'name', ARRAY_BUFFER);\n }\n\n // WebKit bug - the same parent prototype for typed arrays and data view\n if (setPrototypeOf && getPrototypeOf(DataViewPrototype) !== ObjectPrototype) {\n setPrototypeOf(DataViewPrototype, ObjectPrototype);\n }\n\n // iOS Safari 7.x bug\n var testView = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = uncurryThis(DataViewPrototype.setInt8);\n testView.setInt8(0, 2147483648);\n testView.setInt8(1, 2147483649);\n if (testView.getInt8(0) || !testView.getInt8(1)) defineBuiltIns(DataViewPrototype, {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8(this, byteOffset, value << 24 >> 24);\n }\n }, { unsafe: true });\n}\n\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\n\nmodule.exports = {\n ArrayBuffer: $ArrayBuffer,\n DataView: $DataView\n};\n","'use strict';\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar deletePropertyOrThrow = require('../internals/delete-property-or-throw');\n\nvar min = Math.min;\n\n// `Array.prototype.copyWithin` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.copywithin\n// eslint-disable-next-line es-x/no-array-prototype-copywithin -- safe\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = lengthOfArrayLike(O);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else deletePropertyOrThrow(O, to);\n to += inc;\n from += inc;\n } return O;\n};\n","var lengthOfArrayLike = require('../internals/length-of-array-like');\n\nmodule.exports = function (Constructor, list) {\n var index = 0;\n var length = lengthOfArrayLike(list);\n var result = new Constructor(length);\n while (length > index) result[index] = list[index++];\n return result;\n};\n","var bind = require('../internals/function-bind-context');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ findLast, findLastIndex }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_FIND_LAST_INDEX = TYPE == 1;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that);\n var index = lengthOfArrayLike(self);\n var value, result;\n while (index-- > 0) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (result) switch (TYPE) {\n case 0: return value; // findLast\n case 1: return index; // findLastIndex\n }\n }\n return IS_FIND_LAST_INDEX ? -1 : undefined;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.findLast` method\n // https://github.com/tc39/proposal-array-find-from-last\n findLast: createMethod(0),\n // `Array.prototype.findLastIndex` method\n // https://github.com/tc39/proposal-array-find-from-last\n findLastIndex: createMethod(1)\n};\n","'use strict';\n/* eslint-disable es-x/no-array-prototype-lastindexof -- safe */\nvar apply = require('../internals/function-apply');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar min = Math.min;\nvar $lastIndexOf = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$lastIndexOf && 1 / [1].lastIndexOf(1, -0) < 0;\nvar STRICT_METHOD = arrayMethodIsStrict('lastIndexOf');\nvar FORCED = NEGATIVE_ZERO || !STRICT_METHOD;\n\n// `Array.prototype.lastIndexOf` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.lastindexof\nmodule.exports = FORCED ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return apply($lastIndexOf, this, arguments) || 0;\n var O = toIndexedObject(this);\n var length = lengthOfArrayLike(O);\n var index = length - 1;\n if (arguments.length > 1) index = min(index, toIntegerOrInfinity(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O && O[index] === searchElement) return index || 0;\n return -1;\n} : $lastIndexOf;\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar create = require('../internals/object-create');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar bind = require('../internals/function-bind-context');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar defineIterator = require('../internals/define-iterator');\nvar setSpecies = require('../internals/set-species');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fastKey = require('../internals/internal-metadata').fastKey;\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var Constructor = wrapper(function (that, iterable) {\n anInstance(that, Prototype);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n index: create(null),\n first: undefined,\n last: undefined,\n size: 0\n });\n if (!DESCRIPTORS) that.size = 0;\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var Prototype = Constructor.prototype;\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n var previous, index;\n // change existing entry\n if (entry) {\n entry.value = value;\n // create new entry\n } else {\n state.last = entry = {\n index: index = fastKey(key, true),\n key: key,\n value: value,\n previous: previous = state.last,\n next: undefined,\n removed: false\n };\n if (!state.first) state.first = entry;\n if (previous) previous.next = entry;\n if (DESCRIPTORS) state.size++;\n else that.size++;\n // add to index\n if (index !== 'F') state.index[index] = entry;\n } return that;\n };\n\n var getEntry = function (that, key) {\n var state = getInternalState(that);\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return state.index[index];\n // frozen object case\n for (entry = state.first; entry; entry = entry.next) {\n if (entry.key == key) return entry;\n }\n };\n\n defineBuiltIns(Prototype, {\n // `{ Map, Set }.prototype.clear()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.clear\n // https://tc39.es/ecma262/#sec-set.prototype.clear\n clear: function clear() {\n var that = this;\n var state = getInternalState(that);\n var data = state.index;\n var entry = state.first;\n while (entry) {\n entry.removed = true;\n if (entry.previous) entry.previous = entry.previous.next = undefined;\n delete data[entry.index];\n entry = entry.next;\n }\n state.first = state.last = undefined;\n if (DESCRIPTORS) state.size = 0;\n else that.size = 0;\n },\n // `{ Map, Set }.prototype.delete(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.delete\n // https://tc39.es/ecma262/#sec-set.prototype.delete\n 'delete': function (key) {\n var that = this;\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.next;\n var prev = entry.previous;\n delete state.index[entry.index];\n entry.removed = true;\n if (prev) prev.next = next;\n if (next) next.previous = prev;\n if (state.first == entry) state.first = next;\n if (state.last == entry) state.last = prev;\n if (DESCRIPTORS) state.size--;\n else that.size--;\n } return !!entry;\n },\n // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.foreach\n // https://tc39.es/ecma262/#sec-set.prototype.foreach\n forEach: function forEach(callbackfn /* , that = undefined */) {\n var state = getInternalState(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var entry;\n while (entry = entry ? entry.next : state.first) {\n boundFunction(entry.value, entry.key, this);\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n }\n },\n // `{ Map, Set}.prototype.has(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.has\n // https://tc39.es/ecma262/#sec-set.prototype.has\n has: function has(key) {\n return !!getEntry(this, key);\n }\n });\n\n defineBuiltIns(Prototype, IS_MAP ? {\n // `Map.prototype.get(key)` method\n // https://tc39.es/ecma262/#sec-map.prototype.get\n get: function get(key) {\n var entry = getEntry(this, key);\n return entry && entry.value;\n },\n // `Map.prototype.set(key, value)` method\n // https://tc39.es/ecma262/#sec-map.prototype.set\n set: function set(key, value) {\n return define(this, key === 0 ? 0 : key, value);\n }\n } : {\n // `Set.prototype.add(value)` method\n // https://tc39.es/ecma262/#sec-set.prototype.add\n add: function add(value) {\n return define(this, value = value === 0 ? 0 : value, value);\n }\n });\n if (DESCRIPTORS) defineProperty(Prototype, 'size', {\n get: function () {\n return getInternalState(this).size;\n }\n });\n return Constructor;\n },\n setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) {\n var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.entries\n // https://tc39.es/ecma262/#sec-map.prototype.keys\n // https://tc39.es/ecma262/#sec-map.prototype.values\n // https://tc39.es/ecma262/#sec-map.prototype-@@iterator\n // https://tc39.es/ecma262/#sec-set.prototype.entries\n // https://tc39.es/ecma262/#sec-set.prototype.keys\n // https://tc39.es/ecma262/#sec-set.prototype.values\n // https://tc39.es/ecma262/#sec-set.prototype-@@iterator\n defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) {\n setInternalState(this, {\n type: ITERATOR_NAME,\n target: iterated,\n state: getInternalCollectionState(iterated),\n kind: kind,\n last: undefined\n });\n }, function () {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var entry = state.last;\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n // get next entry\n if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n // or finish the iteration\n state.target = undefined;\n return { value: undefined, done: true };\n }\n // return step by kind\n if (kind == 'keys') return { value: entry.key, done: false };\n if (kind == 'values') return { value: entry.value, done: false };\n return { value: [entry.key, entry.value], done: false };\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // `{ Map, Set }.prototype[@@species]` accessors\n // https://tc39.es/ecma262/#sec-get-map-@@species\n // https://tc39.es/ecma262/#sec-get-set-@@species\n setSpecies(CONSTRUCTOR_NAME);\n }\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar getWeakData = require('../internals/internal-metadata').getWeakData;\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar ArrayIterationModule = require('../internals/array-iteration');\nvar hasOwn = require('../internals/has-own-property');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\nvar find = ArrayIterationModule.find;\nvar findIndex = ArrayIterationModule.findIndex;\nvar splice = uncurryThis([].splice);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (store) {\n return store.frozen || (store.frozen = new UncaughtFrozenStore());\n};\n\nvar UncaughtFrozenStore = function () {\n this.entries = [];\n};\n\nvar findUncaughtFrozen = function (store, key) {\n return find(store.entries, function (it) {\n return it[0] === key;\n });\n};\n\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.entries.push([key, value]);\n },\n 'delete': function (key) {\n var index = findIndex(this.entries, function (it) {\n return it[0] === key;\n });\n if (~index) splice(this.entries, index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var Constructor = wrapper(function (that, iterable) {\n anInstance(that, Prototype);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n id: id++,\n frozen: undefined\n });\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var Prototype = Constructor.prototype;\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var data = getWeakData(anObject(key), true);\n if (data === true) uncaughtFrozenStore(state).set(key, value);\n else data[state.id] = value;\n return that;\n };\n\n defineBuiltIns(Prototype, {\n // `{ WeakMap, WeakSet }.prototype.delete(key)` methods\n // https://tc39.es/ecma262/#sec-weakmap.prototype.delete\n // https://tc39.es/ecma262/#sec-weakset.prototype.delete\n 'delete': function (key) {\n var state = getInternalState(this);\n if (!isObject(key)) return false;\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state)['delete'](key);\n return data && hasOwn(data, state.id) && delete data[state.id];\n },\n // `{ WeakMap, WeakSet }.prototype.has(key)` methods\n // https://tc39.es/ecma262/#sec-weakmap.prototype.has\n // https://tc39.es/ecma262/#sec-weakset.prototype.has\n has: function has(key) {\n var state = getInternalState(this);\n if (!isObject(key)) return false;\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state).has(key);\n return data && hasOwn(data, state.id);\n }\n });\n\n defineBuiltIns(Prototype, IS_MAP ? {\n // `WeakMap.prototype.get(key)` method\n // https://tc39.es/ecma262/#sec-weakmap.prototype.get\n get: function get(key) {\n var state = getInternalState(this);\n if (isObject(key)) {\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state).get(key);\n return data ? data[state.id] : undefined;\n }\n },\n // `WeakMap.prototype.set(key, value)` method\n // https://tc39.es/ecma262/#sec-weakmap.prototype.set\n set: function set(key, value) {\n return define(this, key, value);\n }\n } : {\n // `WeakSet.prototype.add(value)` method\n // https://tc39.es/ecma262/#sec-weakset.prototype.add\n add: function add(value) {\n return define(this, value, true);\n }\n });\n\n return Constructor;\n }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isForced = require('../internals/is-forced');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar iterate = require('../internals/iterate');\nvar anInstance = require('../internals/an-instance');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n var ADDER = IS_MAP ? 'set' : 'add';\n var NativeConstructor = global[CONSTRUCTOR_NAME];\n var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n var Constructor = NativeConstructor;\n var exported = {};\n\n var fixMethod = function (KEY) {\n var uncurriedNativeMethod = uncurryThis(NativePrototype[KEY]);\n defineBuiltIn(NativePrototype, KEY,\n KEY == 'add' ? function add(value) {\n uncurriedNativeMethod(this, value === 0 ? 0 : value);\n return this;\n } : KEY == 'delete' ? function (key) {\n return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : KEY == 'get' ? function get(key) {\n return IS_WEAK && !isObject(key) ? undefined : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : KEY == 'has' ? function has(key) {\n return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : function set(key, value) {\n uncurriedNativeMethod(this, key === 0 ? 0 : key, value);\n return this;\n }\n );\n };\n\n var REPLACE = isForced(\n CONSTRUCTOR_NAME,\n !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function () {\n new NativeConstructor().entries().next();\n }))\n );\n\n if (REPLACE) {\n // create collection constructor\n Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n InternalMetadataModule.enable();\n } else if (isForced(CONSTRUCTOR_NAME, true)) {\n var instance = new Constructor();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n // eslint-disable-next-line no-new -- required for testing\n var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new NativeConstructor();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n\n if (!ACCEPT_ITERABLES) {\n Constructor = wrapper(function (dummy, iterable) {\n anInstance(dummy, NativePrototype);\n var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n return that;\n });\n Constructor.prototype = NativePrototype;\n NativePrototype.constructor = Constructor;\n }\n\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n\n // weak collections should not contains .clear method\n if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;\n }\n\n exported[CONSTRUCTOR_NAME] = Constructor;\n $({ global: true, constructor: true, forced: Constructor != NativeConstructor }, exported);\n\n setToStringTag(Constructor, CONSTRUCTOR_NAME);\n\n if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n return Constructor;\n};\n","var makeBuiltIn = require('../internals/make-built-in');\nvar defineProperty = require('../internals/object-define-property');\n\nmodule.exports = function (target, name, descriptor) {\n if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });\n if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });\n return defineProperty.f(target, name, descriptor);\n};\n","var defineBuiltIn = require('../internals/define-built-in');\n\nmodule.exports = function (target, src, options) {\n for (var key in src) defineBuiltIn(target, key, src[key], options);\n return target;\n};\n","// IEEE754 conversions based on https://github.com/feross/ieee754\nvar $Array = Array;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\n\nvar pack = function (number, mantissaLength, bytes) {\n var buffer = $Array(bytes);\n var exponentLength = bytes * 8 - mantissaLength - 1;\n var eMax = (1 << exponentLength) - 1;\n var eBias = eMax >> 1;\n var rt = mantissaLength === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var sign = number < 0 || number === 0 && 1 / number < 0 ? 1 : 0;\n var index = 0;\n var exponent, mantissa, c;\n number = abs(number);\n // eslint-disable-next-line no-self-compare -- NaN check\n if (number != number || number === Infinity) {\n // eslint-disable-next-line no-self-compare -- NaN check\n mantissa = number != number ? 1 : 0;\n exponent = eMax;\n } else {\n exponent = floor(log(number) / LN2);\n c = pow(2, -exponent);\n if (number * c < 1) {\n exponent--;\n c *= 2;\n }\n if (exponent + eBias >= 1) {\n number += rt / c;\n } else {\n number += rt * pow(2, 1 - eBias);\n }\n if (number * c >= 2) {\n exponent++;\n c /= 2;\n }\n if (exponent + eBias >= eMax) {\n mantissa = 0;\n exponent = eMax;\n } else if (exponent + eBias >= 1) {\n mantissa = (number * c - 1) * pow(2, mantissaLength);\n exponent = exponent + eBias;\n } else {\n mantissa = number * pow(2, eBias - 1) * pow(2, mantissaLength);\n exponent = 0;\n }\n }\n while (mantissaLength >= 8) {\n buffer[index++] = mantissa & 255;\n mantissa /= 256;\n mantissaLength -= 8;\n }\n exponent = exponent << mantissaLength | mantissa;\n exponentLength += mantissaLength;\n while (exponentLength > 0) {\n buffer[index++] = exponent & 255;\n exponent /= 256;\n exponentLength -= 8;\n }\n buffer[--index] |= sign * 128;\n return buffer;\n};\n\nvar unpack = function (buffer, mantissaLength) {\n var bytes = buffer.length;\n var exponentLength = bytes * 8 - mantissaLength - 1;\n var eMax = (1 << exponentLength) - 1;\n var eBias = eMax >> 1;\n var nBits = exponentLength - 7;\n var index = bytes - 1;\n var sign = buffer[index--];\n var exponent = sign & 127;\n var mantissa;\n sign >>= 7;\n while (nBits > 0) {\n exponent = exponent * 256 + buffer[index--];\n nBits -= 8;\n }\n mantissa = exponent & (1 << -nBits) - 1;\n exponent >>= -nBits;\n nBits += mantissaLength;\n while (nBits > 0) {\n mantissa = mantissa * 256 + buffer[index--];\n nBits -= 8;\n }\n if (exponent === 0) {\n exponent = 1 - eBias;\n } else if (exponent === eMax) {\n return mantissa ? NaN : sign ? -Infinity : Infinity;\n } else {\n mantissa = mantissa + pow(2, mantissaLength);\n exponent = exponent - eBias;\n } return (sign ? -1 : 1) * mantissa * pow(2, exponent - mantissaLength);\n};\n\nmodule.exports = {\n pack: pack,\n unpack: unpack\n};\n","var isObject = require('../internals/is-object');\n\nvar floor = Math.floor;\n\n// `IsIntegralNumber` abstract operation\n// https://tc39.es/ecma262/#sec-isintegralnumber\n// eslint-disable-next-line es-x/no-number-isinteger -- safe\nmodule.exports = Number.isInteger || function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line unicorn/relative-url-style -- required for testing\n var url = new URL('b?a=1&b=2&c=3', 'http://a');\n var searchParams = url.searchParams;\n var result = '';\n url.pathname = 'c%20d';\n searchParams.forEach(function (value, key) {\n searchParams['delete']('b');\n result += key + value;\n });\n return (IS_PURE && !url.toJSON)\n || !searchParams.sort\n || url.href !== 'http://a/c%20d?a=1&c=3'\n || searchParams.get('c') !== '3'\n || String(new URLSearchParams('?a=1')) !== 'a=1'\n || !searchParams[ITERATOR]\n // throws in Edge\n || new URL('https://a@b').username !== 'a'\n || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'\n // not punycoded in Edge\n || new URL('http://тест').host !== 'xn--e1aybc'\n // not escaped in Chrome 62-\n || new URL('http://a#б').hash !== '#%D0%B1'\n // fails in Chrome 66-\n || result !== 'a1c3'\n // throws in Safari\n || new URL('http://x', undefined).host !== 'x';\n});\n","// https://github.com/zloirock/core-js/issues/280\nvar userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /Version\\/10(?:\\.\\d+){1,2}(?: [\\w./]+)?(?: Mobile\\/\\w+)? Safari\\//.test(userAgent);\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar $repeat = require('../internals/string-repeat');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar repeat = uncurryThis($repeat);\nvar stringSlice = uncurryThis(''.slice);\nvar ceil = Math.ceil;\n\n// `String.prototype.{ padStart, padEnd }` methods implementation\nvar createMethod = function (IS_END) {\n return function ($this, maxLength, fillString) {\n var S = toString(requireObjectCoercible($this));\n var intMaxLength = toLength(maxLength);\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : toString(fillString);\n var fillLen, stringFiller;\n if (intMaxLength <= stringLength || fillStr == '') return S;\n fillLen = intMaxLength - stringLength;\n stringFiller = repeat(fillStr, ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringSlice(stringFiller, 0, fillLen);\n return IS_END ? S + stringFiller : stringFiller + S;\n };\n};\n\nmodule.exports = {\n // `String.prototype.padStart` method\n // https://tc39.es/ecma262/#sec-string.prototype.padstart\n start: createMethod(false),\n // `String.prototype.padEnd` method\n // https://tc39.es/ecma262/#sec-string.prototype.padend\n end: createMethod(true)\n};\n","'use strict';\n// based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\nvar base = 36;\nvar tMin = 1;\nvar tMax = 26;\nvar skew = 38;\nvar damp = 700;\nvar initialBias = 72;\nvar initialN = 128; // 0x80\nvar delimiter = '-'; // '\\x2D'\nvar regexNonASCII = /[^\\0-\\u007E]/; // non-ASCII chars\nvar regexSeparators = /[.\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\nvar OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';\nvar baseMinusTMin = base - tMin;\n\nvar $RangeError = RangeError;\nvar exec = uncurryThis(regexSeparators.exec);\nvar floor = Math.floor;\nvar fromCharCode = String.fromCharCode;\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar join = uncurryThis([].join);\nvar push = uncurryThis([].push);\nvar replace = uncurryThis(''.replace);\nvar split = uncurryThis(''.split);\nvar toLowerCase = uncurryThis(''.toLowerCase);\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n */\nvar ucs2decode = function (string) {\n var output = [];\n var counter = 0;\n var length = string.length;\n while (counter < length) {\n var value = charCodeAt(string, counter++);\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n // It's a high surrogate, and there is a next character.\n var extra = charCodeAt(string, counter++);\n if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n push(output, ((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n } else {\n // It's an unmatched surrogate; only append this code unit, in case the\n // next code unit is the high surrogate of a surrogate pair.\n push(output, value);\n counter--;\n }\n } else {\n push(output, value);\n }\n }\n return output;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n */\nvar digitToBasic = function (digit) {\n // 0..25 map to ASCII a..z or A..Z\n // 26..35 map to ASCII 0..9\n return digit + 22 + 75 * (digit < 26);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n */\nvar adapt = function (delta, numPoints, firstTime) {\n var k = 0;\n delta = firstTime ? floor(delta / damp) : delta >> 1;\n delta += floor(delta / numPoints);\n while (delta > baseMinusTMin * tMax >> 1) {\n delta = floor(delta / baseMinusTMin);\n k += base;\n }\n return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n */\nvar encode = function (input) {\n var output = [];\n\n // Convert the input in UCS-2 to an array of Unicode code points.\n input = ucs2decode(input);\n\n // Cache the length.\n var inputLength = input.length;\n\n // Initialize the state.\n var n = initialN;\n var delta = 0;\n var bias = initialBias;\n var i, currentValue;\n\n // Handle the basic code points.\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < 0x80) {\n push(output, fromCharCode(currentValue));\n }\n }\n\n var basicLength = output.length; // number of basic code points.\n var handledCPCount = basicLength; // number of code points that have been handled;\n\n // Finish the basic string with a delimiter unless it's empty.\n if (basicLength) {\n push(output, delimiter);\n }\n\n // Main encoding loop:\n while (handledCPCount < inputLength) {\n // All non-basic code points < n have been handled already. Find the next larger one:\n var m = maxInt;\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue >= n && currentValue < m) {\n m = currentValue;\n }\n }\n\n // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, but guard against overflow.\n var handledCPCountPlusOne = handledCPCount + 1;\n if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n throw $RangeError(OVERFLOW_ERROR);\n }\n\n delta += (m - n) * handledCPCountPlusOne;\n n = m;\n\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < n && ++delta > maxInt) {\n throw $RangeError(OVERFLOW_ERROR);\n }\n if (currentValue == n) {\n // Represent delta as a generalized variable-length integer.\n var q = delta;\n var k = base;\n while (true) {\n var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n if (q < t) break;\n var qMinusT = q - t;\n var baseMinusT = base - t;\n push(output, fromCharCode(digitToBasic(t + qMinusT % baseMinusT)));\n q = floor(qMinusT / baseMinusT);\n k += base;\n }\n\n push(output, fromCharCode(digitToBasic(q)));\n bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n delta = 0;\n handledCPCount++;\n }\n }\n\n delta++;\n n++;\n }\n return join(output, '');\n};\n\nmodule.exports = function (input) {\n var encoded = [];\n var labels = split(replace(toLowerCase(input), regexSeparators, '\\u002E'), '.');\n var i, label;\n for (i = 0; i < labels.length; i++) {\n label = labels[i];\n push(encoded, exec(regexNonASCII, label) ? 'xn--' + encode(label) : label);\n }\n return join(encoded, '.');\n};\n","var toPrimitive = require('../internals/to-primitive');\n\nvar $TypeError = TypeError;\n\n// `ToBigInt` abstract operation\n// https://tc39.es/ecma262/#sec-tobigint\nmodule.exports = function (argument) {\n var prim = toPrimitive(argument, 'number');\n if (typeof prim == 'number') throw $TypeError(\"Can't convert number to bigint\");\n // eslint-disable-next-line es-x/no-bigint -- safe\n return BigInt(prim);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toLength = require('../internals/to-length');\n\nvar $RangeError = RangeError;\n\n// `ToIndex` abstract operation\n// https://tc39.es/ecma262/#sec-toindex\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toIntegerOrInfinity(it);\n var length = toLength(number);\n if (number !== length) throw $RangeError('Wrong length or index');\n return length;\n};\n","var toPositiveInteger = require('../internals/to-positive-integer');\n\nvar $RangeError = RangeError;\n\nmodule.exports = function (it, BYTES) {\n var offset = toPositiveInteger(it);\n if (offset % BYTES) throw $RangeError('Wrong offset');\n return offset;\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar $RangeError = RangeError;\n\nmodule.exports = function (it) {\n var result = toIntegerOrInfinity(it);\n if (result < 0) throw $RangeError(\"The argument can't be less than 0\");\n return result;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = require('../internals/typed-array-constructors-require-wrappers');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar ArrayBufferModule = require('../internals/array-buffer');\nvar anInstance = require('../internals/an-instance');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar isIntegralNumber = require('../internals/is-integral-number');\nvar toLength = require('../internals/to-length');\nvar toIndex = require('../internals/to-index');\nvar toOffset = require('../internals/to-offset');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar classof = require('../internals/classof');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar create = require('../internals/object-create');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar typedArrayFrom = require('../internals/typed-array-from');\nvar forEach = require('../internals/array-iteration').forEach;\nvar setSpecies = require('../internals/set-species');\nvar definePropertyModule = require('../internals/object-define-property');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar InternalStateModule = require('../internals/internal-state');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar enforceInternalState = InternalStateModule.enforce;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar round = Math.round;\nvar RangeError = global.RangeError;\nvar ArrayBuffer = ArrayBufferModule.ArrayBuffer;\nvar ArrayBufferPrototype = ArrayBuffer.prototype;\nvar DataView = ArrayBufferModule.DataView;\nvar NATIVE_ARRAY_BUFFER_VIEWS = ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS;\nvar TYPED_ARRAY_TAG = ArrayBufferViewCore.TYPED_ARRAY_TAG;\nvar TypedArray = ArrayBufferViewCore.TypedArray;\nvar TypedArrayPrototype = ArrayBufferViewCore.TypedArrayPrototype;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar isTypedArray = ArrayBufferViewCore.isTypedArray;\nvar BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\nvar WRONG_LENGTH = 'Wrong length';\n\nvar fromList = function (C, list) {\n aTypedArrayConstructor(C);\n var index = 0;\n var length = list.length;\n var result = new C(length);\n while (length > index) result[index] = list[index++];\n return result;\n};\n\nvar addGetter = function (it, key) {\n nativeDefineProperty(it, key, { get: function () {\n return getInternalState(this)[key];\n } });\n};\n\nvar isArrayBuffer = function (it) {\n var klass;\n return isPrototypeOf(ArrayBufferPrototype, it) || (klass = classof(it)) == 'ArrayBuffer' || klass == 'SharedArrayBuffer';\n};\n\nvar isTypedArrayIndex = function (target, key) {\n return isTypedArray(target)\n && !isSymbol(key)\n && key in target\n && isIntegralNumber(+key)\n && key >= 0;\n};\n\nvar wrappedGetOwnPropertyDescriptor = function getOwnPropertyDescriptor(target, key) {\n key = toPropertyKey(key);\n return isTypedArrayIndex(target, key)\n ? createPropertyDescriptor(2, target[key])\n : nativeGetOwnPropertyDescriptor(target, key);\n};\n\nvar wrappedDefineProperty = function defineProperty(target, key, descriptor) {\n key = toPropertyKey(key);\n if (isTypedArrayIndex(target, key)\n && isObject(descriptor)\n && hasOwn(descriptor, 'value')\n && !hasOwn(descriptor, 'get')\n && !hasOwn(descriptor, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !descriptor.configurable\n && (!hasOwn(descriptor, 'writable') || descriptor.writable)\n && (!hasOwn(descriptor, 'enumerable') || descriptor.enumerable)\n ) {\n target[key] = descriptor.value;\n return target;\n } return nativeDefineProperty(target, key, descriptor);\n};\n\nif (DESCRIPTORS) {\n if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n getOwnPropertyDescriptorModule.f = wrappedGetOwnPropertyDescriptor;\n definePropertyModule.f = wrappedDefineProperty;\n addGetter(TypedArrayPrototype, 'buffer');\n addGetter(TypedArrayPrototype, 'byteOffset');\n addGetter(TypedArrayPrototype, 'byteLength');\n addGetter(TypedArrayPrototype, 'length');\n }\n\n $({ target: 'Object', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS }, {\n getOwnPropertyDescriptor: wrappedGetOwnPropertyDescriptor,\n defineProperty: wrappedDefineProperty\n });\n\n module.exports = function (TYPE, wrapper, CLAMPED) {\n var BYTES = TYPE.match(/\\d+$/)[0] / 8;\n var CONSTRUCTOR_NAME = TYPE + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + TYPE;\n var SETTER = 'set' + TYPE;\n var NativeTypedArrayConstructor = global[CONSTRUCTOR_NAME];\n var TypedArrayConstructor = NativeTypedArrayConstructor;\n var TypedArrayConstructorPrototype = TypedArrayConstructor && TypedArrayConstructor.prototype;\n var exported = {};\n\n var getter = function (that, index) {\n var data = getInternalState(that);\n return data.view[GETTER](index * BYTES + data.byteOffset, true);\n };\n\n var setter = function (that, index, value) {\n var data = getInternalState(that);\n if (CLAMPED) value = (value = round(value)) < 0 ? 0 : value > 0xFF ? 0xFF : value & 0xFF;\n data.view[SETTER](index * BYTES + data.byteOffset, value, true);\n };\n\n var addElement = function (that, index) {\n nativeDefineProperty(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n\n if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n TypedArrayConstructor = wrapper(function (that, data, offset, $length) {\n anInstance(that, TypedArrayConstructorPrototype);\n var index = 0;\n var byteOffset = 0;\n var buffer, byteLength, length;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new ArrayBuffer(byteLength);\n } else if (isArrayBuffer(data)) {\n buffer = data;\n byteOffset = toOffset(offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - byteOffset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + byteOffset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (isTypedArray(data)) {\n return fromList(TypedArrayConstructor, data);\n } else {\n return call(typedArrayFrom, TypedArrayConstructor, data);\n }\n setInternalState(that, {\n buffer: buffer,\n byteOffset: byteOffset,\n byteLength: byteLength,\n length: length,\n view: new DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n\n if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = create(TypedArrayPrototype);\n } else if (TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS) {\n TypedArrayConstructor = wrapper(function (dummy, data, typedArrayOffset, $length) {\n anInstance(dummy, TypedArrayConstructorPrototype);\n return inheritIfRequired(function () {\n if (!isObject(data)) return new NativeTypedArrayConstructor(toIndex(data));\n if (isArrayBuffer(data)) return $length !== undefined\n ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES), $length)\n : typedArrayOffset !== undefined\n ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES))\n : new NativeTypedArrayConstructor(data);\n if (isTypedArray(data)) return fromList(TypedArrayConstructor, data);\n return call(typedArrayFrom, TypedArrayConstructor, data);\n }(), dummy, TypedArrayConstructor);\n });\n\n if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n forEach(getOwnPropertyNames(NativeTypedArrayConstructor), function (key) {\n if (!(key in TypedArrayConstructor)) {\n createNonEnumerableProperty(TypedArrayConstructor, key, NativeTypedArrayConstructor[key]);\n }\n });\n TypedArrayConstructor.prototype = TypedArrayConstructorPrototype;\n }\n\n if (TypedArrayConstructorPrototype.constructor !== TypedArrayConstructor) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, 'constructor', TypedArrayConstructor);\n }\n\n enforceInternalState(TypedArrayConstructorPrototype).TypedArrayConstructor = TypedArrayConstructor;\n\n if (TYPED_ARRAY_TAG) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, TYPED_ARRAY_TAG, CONSTRUCTOR_NAME);\n }\n\n var FORCED = TypedArrayConstructor != NativeTypedArrayConstructor;\n\n exported[CONSTRUCTOR_NAME] = TypedArrayConstructor;\n\n $({ global: true, constructor: true, forced: FORCED, sham: !NATIVE_ARRAY_BUFFER_VIEWS }, exported);\n\n if (!(BYTES_PER_ELEMENT in TypedArrayConstructor)) {\n createNonEnumerableProperty(TypedArrayConstructor, BYTES_PER_ELEMENT, BYTES);\n }\n\n if (!(BYTES_PER_ELEMENT in TypedArrayConstructorPrototype)) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, BYTES_PER_ELEMENT, BYTES);\n }\n\n setSpecies(CONSTRUCTOR_NAME);\n };\n} else module.exports = function () { /* empty */ };\n","/* eslint-disable no-new -- required for testing */\nvar global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar NATIVE_ARRAY_BUFFER_VIEWS = require('../internals/array-buffer-view-core').NATIVE_ARRAY_BUFFER_VIEWS;\n\nvar ArrayBuffer = global.ArrayBuffer;\nvar Int8Array = global.Int8Array;\n\nmodule.exports = !NATIVE_ARRAY_BUFFER_VIEWS || !fails(function () {\n Int8Array(1);\n}) || !fails(function () {\n new Int8Array(-1);\n}) || !checkCorrectnessOfIteration(function (iterable) {\n new Int8Array();\n new Int8Array(null);\n new Int8Array(1.5);\n new Int8Array(iterable);\n}, true) || fails(function () {\n // Safari (11+) bug - a reason why even Safari 13 should load a typed array polyfill\n return new Int8Array(new ArrayBuffer(2), 1, undefined).length !== 1;\n});\n","var arrayFromConstructorAndList = require('../internals/array-from-constructor-and-list');\nvar typedArraySpeciesConstructor = require('../internals/typed-array-species-constructor');\n\nmodule.exports = function (instance, list) {\n return arrayFromConstructorAndList(typedArraySpeciesConstructor(instance), list);\n};\n","var bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar aConstructor = require('../internals/a-constructor');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar aTypedArrayConstructor = require('../internals/array-buffer-view-core').aTypedArrayConstructor;\n\nmodule.exports = function from(source /* , mapfn, thisArg */) {\n var C = aConstructor(this);\n var O = toObject(source);\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iteratorMethod = getIteratorMethod(O);\n var i, length, result, step, iterator, next;\n if (iteratorMethod && !isArrayIteratorMethod(iteratorMethod)) {\n iterator = getIterator(O, iteratorMethod);\n next = iterator.next;\n O = [];\n while (!(step = call(next, iterator)).done) {\n O.push(step.value);\n }\n }\n if (mapping && argumentsLength > 2) {\n mapfn = bind(mapfn, arguments[2]);\n }\n length = lengthOfArrayLike(O);\n result = new (aTypedArrayConstructor(C))(length);\n for (i = 0; length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n};\n","var ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar speciesConstructor = require('../internals/species-constructor');\n\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor;\n\n// a part of `TypedArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#typedarray-species-create\nmodule.exports = function (originalArray) {\n return aTypedArrayConstructor(speciesConstructor(originalArray, getTypedArrayConstructor(originalArray)));\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $findIndex = require('../internals/array-iteration').findIndex;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar FIND_INDEX = 'findIndex';\nvar SKIPS_HOLES = true;\n\n// Shouldn't skip holes\nif (FIND_INDEX in []) Array(1)[FIND_INDEX](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.findIndex` method\n// https://tc39.es/ecma262/#sec-array.prototype.findindex\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $findIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND_INDEX);\n","var global = require('../internals/global');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// JSON[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-json-@@tostringtag\nsetToStringTag(global.JSON, 'JSON', true);\n","var setToStringTag = require('../internals/set-to-string-tag');\n\n// Math[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-math-@@tostringtag\nsetToStringTag(Math, 'Math', true);\n","var $ = require('../internals/export');\nvar isIntegralNumber = require('../internals/is-integral-number');\n\n// `Number.isInteger` method\n// https://tc39.es/ecma262/#sec-number.isinteger\n$({ target: 'Number', stat: true }, {\n isInteger: isIntegralNumber\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isForced = require('../internals/is-forced');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar isRegExp = require('../internals/is-regexp');\nvar toString = require('../internals/to-string');\nvar getRegExpFlags = require('../internals/regexp-get-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar proxyAccessor = require('../internals/proxy-accessor');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar fails = require('../internals/fails');\nvar hasOwn = require('../internals/has-own-property');\nvar enforceInternalState = require('../internals/internal-state').enforce;\nvar setSpecies = require('../internals/set-species');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar MATCH = wellKnownSymbol('match');\nvar NativeRegExp = global.RegExp;\nvar RegExpPrototype = NativeRegExp.prototype;\nvar SyntaxError = global.SyntaxError;\nvar exec = uncurryThis(RegExpPrototype.exec);\nvar charAt = uncurryThis(''.charAt);\nvar replace = uncurryThis(''.replace);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar stringSlice = uncurryThis(''.slice);\n// TODO: Use only proper RegExpIdentifierName\nvar IS_NCG = /^\\?<[^\\s\\d!#%&*+<=>@^][^\\s!#%&*+<=>@^]*>/;\nvar re1 = /a/g;\nvar re2 = /a/g;\n\n// \"new\" should create a new object, old webkit bug\nvar CORRECT_NEW = new NativeRegExp(re1) !== re1;\n\nvar MISSED_STICKY = stickyHelpers.MISSED_STICKY;\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\n\nvar BASE_FORCED = DESCRIPTORS &&\n (!CORRECT_NEW || MISSED_STICKY || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG || fails(function () {\n re2[MATCH] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return NativeRegExp(re1) != re1 || NativeRegExp(re2) == re2 || NativeRegExp(re1, 'i') != '/a/i';\n }));\n\nvar handleDotAll = function (string) {\n var length = string.length;\n var index = 0;\n var result = '';\n var brackets = false;\n var chr;\n for (; index <= length; index++) {\n chr = charAt(string, index);\n if (chr === '\\\\') {\n result += chr + charAt(string, ++index);\n continue;\n }\n if (!brackets && chr === '.') {\n result += '[\\\\s\\\\S]';\n } else {\n if (chr === '[') {\n brackets = true;\n } else if (chr === ']') {\n brackets = false;\n } result += chr;\n }\n } return result;\n};\n\nvar handleNCG = function (string) {\n var length = string.length;\n var index = 0;\n var result = '';\n var named = [];\n var names = {};\n var brackets = false;\n var ncg = false;\n var groupid = 0;\n var groupname = '';\n var chr;\n for (; index <= length; index++) {\n chr = charAt(string, index);\n if (chr === '\\\\') {\n chr = chr + charAt(string, ++index);\n } else if (chr === ']') {\n brackets = false;\n } else if (!brackets) switch (true) {\n case chr === '[':\n brackets = true;\n break;\n case chr === '(':\n if (exec(IS_NCG, stringSlice(string, index + 1))) {\n index += 2;\n ncg = true;\n }\n result += chr;\n groupid++;\n continue;\n case chr === '>' && ncg:\n if (groupname === '' || hasOwn(names, groupname)) {\n throw new SyntaxError('Invalid capture group name');\n }\n names[groupname] = true;\n named[named.length] = [groupname, groupid];\n ncg = false;\n groupname = '';\n continue;\n }\n if (ncg) groupname += chr;\n else result += chr;\n } return [result, named];\n};\n\n// `RegExp` constructor\n// https://tc39.es/ecma262/#sec-regexp-constructor\nif (isForced('RegExp', BASE_FORCED)) {\n var RegExpWrapper = function RegExp(pattern, flags) {\n var thisIsRegExp = isPrototypeOf(RegExpPrototype, this);\n var patternIsRegExp = isRegExp(pattern);\n var flagsAreUndefined = flags === undefined;\n var groups = [];\n var rawPattern = pattern;\n var rawFlags, dotAll, sticky, handled, result, state;\n\n if (!thisIsRegExp && patternIsRegExp && flagsAreUndefined && pattern.constructor === RegExpWrapper) {\n return pattern;\n }\n\n if (patternIsRegExp || isPrototypeOf(RegExpPrototype, pattern)) {\n pattern = pattern.source;\n if (flagsAreUndefined) flags = getRegExpFlags(rawPattern);\n }\n\n pattern = pattern === undefined ? '' : toString(pattern);\n flags = flags === undefined ? '' : toString(flags);\n rawPattern = pattern;\n\n if (UNSUPPORTED_DOT_ALL && 'dotAll' in re1) {\n dotAll = !!flags && stringIndexOf(flags, 's') > -1;\n if (dotAll) flags = replace(flags, /s/g, '');\n }\n\n rawFlags = flags;\n\n if (MISSED_STICKY && 'sticky' in re1) {\n sticky = !!flags && stringIndexOf(flags, 'y') > -1;\n if (sticky && UNSUPPORTED_Y) flags = replace(flags, /y/g, '');\n }\n\n if (UNSUPPORTED_NCG) {\n handled = handleNCG(pattern);\n pattern = handled[0];\n groups = handled[1];\n }\n\n result = inheritIfRequired(NativeRegExp(pattern, flags), thisIsRegExp ? this : RegExpPrototype, RegExpWrapper);\n\n if (dotAll || sticky || groups.length) {\n state = enforceInternalState(result);\n if (dotAll) {\n state.dotAll = true;\n state.raw = RegExpWrapper(handleDotAll(pattern), rawFlags);\n }\n if (sticky) state.sticky = true;\n if (groups.length) state.groups = groups;\n }\n\n if (pattern !== rawPattern) try {\n // fails in old engines, but we have no alternatives for unsupported regex syntax\n createNonEnumerableProperty(result, 'source', rawPattern === '' ? '(?:)' : rawPattern);\n } catch (error) { /* empty */ }\n\n return result;\n };\n\n for (var keys = getOwnPropertyNames(NativeRegExp), index = 0; keys.length > index;) {\n proxyAccessor(RegExpWrapper, NativeRegExp, keys[index++]);\n }\n\n RegExpPrototype.constructor = RegExpWrapper;\n RegExpWrapper.prototype = RegExpPrototype;\n defineBuiltIn(global, 'RegExp', RegExpWrapper, { constructor: true });\n}\n\n// https://tc39.es/ecma262/#sec-get-regexp-@@species\nsetSpecies('RegExp');\n","var DESCRIPTORS = require('../internals/descriptors');\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar classof = require('../internals/classof-raw');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar getInternalState = require('../internals/internal-state').get;\n\nvar RegExpPrototype = RegExp.prototype;\nvar $TypeError = TypeError;\n\n// `RegExp.prototype.dotAll` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.dotall\nif (DESCRIPTORS && UNSUPPORTED_DOT_ALL) {\n defineBuiltInAccessor(RegExpPrototype, 'dotAll', {\n configurable: true,\n get: function dotAll() {\n if (this === RegExpPrototype) return undefined;\n // We can't use InternalStateModule.getterFor because\n // we don't add metadata for regexps created by a literal.\n if (classof(this) === 'RegExp') {\n return !!getInternalState(this).dotAll;\n }\n throw $TypeError('Incompatible receiver, RegExp required');\n }\n });\n}\n","var DESCRIPTORS = require('../internals/descriptors');\nvar MISSED_STICKY = require('../internals/regexp-sticky-helpers').MISSED_STICKY;\nvar classof = require('../internals/classof-raw');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar getInternalState = require('../internals/internal-state').get;\n\nvar RegExpPrototype = RegExp.prototype;\nvar $TypeError = TypeError;\n\n// `RegExp.prototype.sticky` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.sticky\nif (DESCRIPTORS && MISSED_STICKY) {\n defineBuiltInAccessor(RegExpPrototype, 'sticky', {\n configurable: true,\n get: function sticky() {\n if (this === RegExpPrototype) return undefined;\n // We can't use InternalStateModule.getterFor because\n // we don't add metadata for regexps created by a literal.\n if (classof(this) === 'RegExp') {\n return !!getInternalState(this).sticky;\n }\n throw $TypeError('Incompatible receiver, RegExp required');\n }\n });\n}\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Set` constructor\n// https://tc39.es/ecma262/#sec-set-objects\ncollection('Set', function (init) {\n return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/es.set.constructor');\n","'use strict';\nvar $ = require('../internals/export');\nvar $padStart = require('../internals/string-pad').start;\nvar WEBKIT_BUG = require('../internals/string-pad-webkit-bug');\n\n// `String.prototype.padStart` method\n// https://tc39.es/ecma262/#sec-string.prototype.padstart\n$({ target: 'String', proto: true, forced: WEBKIT_BUG }, {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $padStart(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar isCallable = require('../internals/is-callable');\nvar isRegExp = require('../internals/is-regexp');\nvar toString = require('../internals/to-string');\nvar getMethod = require('../internals/get-method');\nvar getRegExpFlags = require('../internals/regexp-get-flags');\nvar getSubstitution = require('../internals/get-substitution');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar REPLACE = wellKnownSymbol('replace');\nvar $TypeError = TypeError;\nvar indexOf = uncurryThis(''.indexOf);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\nvar max = Math.max;\n\nvar stringIndexOf = function (string, searchValue, fromIndex) {\n if (fromIndex > string.length) return -1;\n if (searchValue === '') return fromIndex;\n return indexOf(string, searchValue, fromIndex);\n};\n\n// `String.prototype.replaceAll` method\n// https://tc39.es/ecma262/#sec-string.prototype.replaceall\n$({ target: 'String', proto: true }, {\n replaceAll: function replaceAll(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var IS_REG_EXP, flags, replacer, string, searchString, functionalReplace, searchLength, advanceBy, replacement;\n var position = 0;\n var endOfLastMatch = 0;\n var result = '';\n if (searchValue != null) {\n IS_REG_EXP = isRegExp(searchValue);\n if (IS_REG_EXP) {\n flags = toString(requireObjectCoercible(getRegExpFlags(searchValue)));\n if (!~indexOf(flags, 'g')) throw $TypeError('`.replaceAll` does not allow non-global regexes');\n }\n replacer = getMethod(searchValue, REPLACE);\n if (replacer) {\n return call(replacer, searchValue, O, replaceValue);\n } else if (IS_PURE && IS_REG_EXP) {\n return replace(toString(O), searchValue, replaceValue);\n }\n }\n string = toString(O);\n searchString = toString(searchValue);\n functionalReplace = isCallable(replaceValue);\n if (!functionalReplace) replaceValue = toString(replaceValue);\n searchLength = searchString.length;\n advanceBy = max(1, searchLength);\n position = stringIndexOf(string, searchString, 0);\n while (position !== -1) {\n replacement = functionalReplace\n ? toString(replaceValue(searchString, position, string))\n : getSubstitution(searchString, string, position, [], undefined, replaceValue);\n result += stringSlice(string, endOfLastMatch, position) + replacement;\n endOfLastMatch = position + searchLength;\n position = stringIndexOf(string, searchString, position + advanceBy);\n }\n if (endOfLastMatch < string.length) {\n result += stringSlice(string, endOfLastMatch);\n }\n return result;\n }\n});\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.asyncIterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.asynciterator\ndefineWellKnownSymbol('asyncIterator');\n","var getBuiltIn = require('../internals/get-built-in');\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// `Symbol.toStringTag` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.tostringtag\ndefineWellKnownSymbol('toStringTag');\n\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag(getBuiltIn('Symbol'), 'Symbol');\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.at` method\n// https://github.com/tc39/proposal-relative-indexing-method\nexportTypedArrayMethod('at', function at(index) {\n var O = aTypedArray(this);\n var len = lengthOfArrayLike(O);\n var relativeIndex = toIntegerOrInfinity(index);\n var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;\n return (k < 0 || k >= len) ? undefined : O[k];\n});\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $ArrayCopyWithin = require('../internals/array-copy-within');\n\nvar u$ArrayCopyWithin = uncurryThis($ArrayCopyWithin);\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.copyWithin` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.copywithin\nexportTypedArrayMethod('copyWithin', function copyWithin(target, start /* , end */) {\n return u$ArrayCopyWithin(aTypedArray(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $every = require('../internals/array-iteration').every;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.every` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.every\nexportTypedArrayMethod('every', function every(callbackfn /* , thisArg */) {\n return $every(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $fill = require('../internals/array-fill');\nvar toBigInt = require('../internals/to-big-int');\nvar classof = require('../internals/classof');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar slice = uncurryThis(''.slice);\n\n// V8 ~ Chrome < 59, Safari < 14.1, FF < 55, Edge <=18\nvar CONVERSION_BUG = fails(function () {\n var count = 0;\n // eslint-disable-next-line es-x/no-typed-arrays -- safe\n new Int8Array(2).fill({ valueOf: function () { return count++; } });\n return count !== 1;\n});\n\n// `%TypedArray%.prototype.fill` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.fill\nexportTypedArrayMethod('fill', function fill(value /* , start, end */) {\n var length = arguments.length;\n aTypedArray(this);\n var actualValue = slice(classof(this), 0, 3) === 'Big' ? toBigInt(value) : +value;\n return call($fill, this, actualValue, length > 1 ? arguments[1] : undefined, length > 2 ? arguments[2] : undefined);\n}, CONVERSION_BUG);\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $filter = require('../internals/array-iteration').filter;\nvar fromSpeciesAndList = require('../internals/typed-array-from-species-and-list');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.filter` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.filter\nexportTypedArrayMethod('filter', function filter(callbackfn /* , thisArg */) {\n var list = $filter(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n return fromSpeciesAndList(this, list);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $findIndex = require('../internals/array-iteration').findIndex;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.findIndex` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.findindex\nexportTypedArrayMethod('findIndex', function findIndex(predicate /* , thisArg */) {\n return $findIndex(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $findLastIndex = require('../internals/array-iteration-from-last').findLastIndex;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.findLastIndex` method\n// https://github.com/tc39/proposal-array-find-from-last\nexportTypedArrayMethod('findLastIndex', function findLastIndex(predicate /* , thisArg */) {\n return $findLastIndex(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $findLast = require('../internals/array-iteration-from-last').findLast;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.findLast` method\n// https://github.com/tc39/proposal-array-find-from-last\nexportTypedArrayMethod('findLast', function findLast(predicate /* , thisArg */) {\n return $findLast(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $find = require('../internals/array-iteration').find;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.find` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.find\nexportTypedArrayMethod('find', function find(predicate /* , thisArg */) {\n return $find(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.forEach` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.foreach\nexportTypedArrayMethod('forEach', function forEach(callbackfn /* , thisArg */) {\n $forEach(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $includes = require('../internals/array-includes').includes;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.includes` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.includes\nexportTypedArrayMethod('includes', function includes(searchElement /* , fromIndex */) {\n return $includes(aTypedArray(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $indexOf = require('../internals/array-includes').indexOf;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.indexOf` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.indexof\nexportTypedArrayMethod('indexOf', function indexOf(searchElement /* , fromIndex */) {\n return $indexOf(aTypedArray(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar ArrayIterators = require('../modules/es.array.iterator');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar Uint8Array = global.Uint8Array;\nvar arrayValues = uncurryThis(ArrayIterators.values);\nvar arrayKeys = uncurryThis(ArrayIterators.keys);\nvar arrayEntries = uncurryThis(ArrayIterators.entries);\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar TypedArrayPrototype = Uint8Array && Uint8Array.prototype;\n\nvar GENERIC = !fails(function () {\n TypedArrayPrototype[ITERATOR].call([1]);\n});\n\nvar ITERATOR_IS_VALUES = !!TypedArrayPrototype\n && TypedArrayPrototype.values\n && TypedArrayPrototype[ITERATOR] === TypedArrayPrototype.values\n && TypedArrayPrototype.values.name === 'values';\n\nvar typedArrayValues = function values() {\n return arrayValues(aTypedArray(this));\n};\n\n// `%TypedArray%.prototype.entries` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.entries\nexportTypedArrayMethod('entries', function entries() {\n return arrayEntries(aTypedArray(this));\n}, GENERIC);\n// `%TypedArray%.prototype.keys` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.keys\nexportTypedArrayMethod('keys', function keys() {\n return arrayKeys(aTypedArray(this));\n}, GENERIC);\n// `%TypedArray%.prototype.values` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.values\nexportTypedArrayMethod('values', typedArrayValues, GENERIC || !ITERATOR_IS_VALUES, { name: 'values' });\n// `%TypedArray%.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype-@@iterator\nexportTypedArrayMethod(ITERATOR, typedArrayValues, GENERIC || !ITERATOR_IS_VALUES, { name: 'values' });\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $join = uncurryThis([].join);\n\n// `%TypedArray%.prototype.join` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.join\nexportTypedArrayMethod('join', function join(separator) {\n return $join(aTypedArray(this), separator);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar apply = require('../internals/function-apply');\nvar $lastIndexOf = require('../internals/array-last-index-of');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.lastIndexOf` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.lastindexof\nexportTypedArrayMethod('lastIndexOf', function lastIndexOf(searchElement /* , fromIndex */) {\n var length = arguments.length;\n return apply($lastIndexOf, aTypedArray(this), length > 1 ? [searchElement, arguments[1]] : [searchElement]);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $map = require('../internals/array-iteration').map;\nvar typedArraySpeciesConstructor = require('../internals/typed-array-species-constructor');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.map` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.map\nexportTypedArrayMethod('map', function map(mapfn /* , thisArg */) {\n return $map(aTypedArray(this), mapfn, arguments.length > 1 ? arguments[1] : undefined, function (O, length) {\n return new (typedArraySpeciesConstructor(O))(length);\n });\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $reduceRight = require('../internals/array-reduce').right;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.reduceRight` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduceright\nexportTypedArrayMethod('reduceRight', function reduceRight(callbackfn /* , initialValue */) {\n var length = arguments.length;\n return $reduceRight(aTypedArray(this), callbackfn, length, length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $reduce = require('../internals/array-reduce').left;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.reduce` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduce\nexportTypedArrayMethod('reduce', function reduce(callbackfn /* , initialValue */) {\n var length = arguments.length;\n return $reduce(aTypedArray(this), callbackfn, length, length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar floor = Math.floor;\n\n// `%TypedArray%.prototype.reverse` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reverse\nexportTypedArrayMethod('reverse', function reverse() {\n var that = this;\n var length = aTypedArray(that).length;\n var middle = floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n});\n","'use strict';\nvar global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toOffset = require('../internals/to-offset');\nvar toIndexedObject = require('../internals/to-object');\nvar fails = require('../internals/fails');\n\nvar RangeError = global.RangeError;\nvar Int8Array = global.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar $set = Int8ArrayPrototype && Int8ArrayPrototype.set;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS = !fails(function () {\n // eslint-disable-next-line es-x/no-typed-arrays -- required for testing\n var array = new Uint8ClampedArray(2);\n call($set, array, { length: 1, 0: 3 }, 1);\n return array[1] !== 3;\n});\n\n// https://bugs.chromium.org/p/v8/issues/detail?id=11294 and other\nvar TO_OBJECT_BUG = WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS && ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS && fails(function () {\n var array = new Int8Array(2);\n array.set(1);\n array.set('2', 1);\n return array[0] !== 0 || array[1] !== 2;\n});\n\n// `%TypedArray%.prototype.set` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.set\nexportTypedArrayMethod('set', function set(arrayLike /* , offset */) {\n aTypedArray(this);\n var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1);\n var src = toIndexedObject(arrayLike);\n if (WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS) return call($set, this, src, offset);\n var length = this.length;\n var len = lengthOfArrayLike(src);\n var index = 0;\n if (len + offset > length) throw RangeError('Wrong length');\n while (index < len) this[offset + index] = src[index++];\n}, !WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS || TO_OBJECT_BUG);\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar typedArraySpeciesConstructor = require('../internals/typed-array-species-constructor');\nvar fails = require('../internals/fails');\nvar arraySlice = require('../internals/array-slice');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar FORCED = fails(function () {\n // eslint-disable-next-line es-x/no-typed-arrays -- required for testing\n new Int8Array(1).slice();\n});\n\n// `%TypedArray%.prototype.slice` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.slice\nexportTypedArrayMethod('slice', function slice(start, end) {\n var list = arraySlice(aTypedArray(this), start, end);\n var C = typedArraySpeciesConstructor(this);\n var index = 0;\n var length = list.length;\n var result = new C(length);\n while (length > index) result[index] = list[index++];\n return result;\n}, FORCED);\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $some = require('../internals/array-iteration').some;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.some` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.some\nexportTypedArrayMethod('some', function some(callbackfn /* , thisArg */) {\n return $some(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar aCallable = require('../internals/a-callable');\nvar internalSort = require('../internals/array-sort');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar FF = require('../internals/engine-ff-version');\nvar IE_OR_EDGE = require('../internals/engine-is-ie-or-edge');\nvar V8 = require('../internals/engine-v8-version');\nvar WEBKIT = require('../internals/engine-webkit-version');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar Uint16Array = global.Uint16Array;\nvar un$Sort = Uint16Array && uncurryThis(Uint16Array.prototype.sort);\n\n// WebKit\nvar ACCEPT_INCORRECT_ARGUMENTS = !!un$Sort && !(fails(function () {\n un$Sort(new Uint16Array(2), null);\n}) && fails(function () {\n un$Sort(new Uint16Array(2), {});\n}));\n\nvar STABLE_SORT = !!un$Sort && !fails(function () {\n // feature detection can be too slow, so check engines versions\n if (V8) return V8 < 74;\n if (FF) return FF < 67;\n if (IE_OR_EDGE) return true;\n if (WEBKIT) return WEBKIT < 602;\n\n var array = new Uint16Array(516);\n var expected = Array(516);\n var index, mod;\n\n for (index = 0; index < 516; index++) {\n mod = index % 4;\n array[index] = 515 - index;\n expected[index] = index - 2 * mod + 3;\n }\n\n un$Sort(array, function (a, b) {\n return (a / 4 | 0) - (b / 4 | 0);\n });\n\n for (index = 0; index < 516; index++) {\n if (array[index] !== expected[index]) return true;\n }\n});\n\nvar getSortCompare = function (comparefn) {\n return function (x, y) {\n if (comparefn !== undefined) return +comparefn(x, y) || 0;\n // eslint-disable-next-line no-self-compare -- NaN check\n if (y !== y) return -1;\n // eslint-disable-next-line no-self-compare -- NaN check\n if (x !== x) return 1;\n if (x === 0 && y === 0) return 1 / x > 0 && 1 / y < 0 ? 1 : -1;\n return x > y;\n };\n};\n\n// `%TypedArray%.prototype.sort` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.sort\nexportTypedArrayMethod('sort', function sort(comparefn) {\n if (comparefn !== undefined) aCallable(comparefn);\n if (STABLE_SORT) return un$Sort(this, comparefn);\n\n return internalSort(aTypedArray(this), getSortCompare(comparefn));\n}, !STABLE_SORT || ACCEPT_INCORRECT_ARGUMENTS);\n","'use strict';\nvar global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar fails = require('../internals/fails');\nvar arraySlice = require('../internals/array-slice');\n\nvar Int8Array = global.Int8Array;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $toLocaleString = [].toLocaleString;\n\n// iOS Safari 6.x fails here\nvar TO_LOCALE_STRING_BUG = !!Int8Array && fails(function () {\n $toLocaleString.call(new Int8Array(1));\n});\n\nvar FORCED = fails(function () {\n return [1, 2].toLocaleString() != new Int8Array([1, 2]).toLocaleString();\n}) || !fails(function () {\n Int8Array.prototype.toLocaleString.call([1, 2]);\n});\n\n// `%TypedArray%.prototype.toLocaleString` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tolocalestring\nexportTypedArrayMethod('toLocaleString', function toLocaleString() {\n return apply(\n $toLocaleString,\n TO_LOCALE_STRING_BUG ? arraySlice(aTypedArray(this)) : aTypedArray(this),\n arraySlice(arguments)\n );\n}, FORCED);\n","'use strict';\nvar exportTypedArrayMethod = require('../internals/array-buffer-view-core').exportTypedArrayMethod;\nvar fails = require('../internals/fails');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar Uint8Array = global.Uint8Array;\nvar Uint8ArrayPrototype = Uint8Array && Uint8Array.prototype || {};\nvar arrayToString = [].toString;\nvar join = uncurryThis([].join);\n\nif (fails(function () { arrayToString.call({}); })) {\n arrayToString = function toString() {\n return join(this);\n };\n}\n\nvar IS_NOT_ARRAY_METHOD = Uint8ArrayPrototype.toString != arrayToString;\n\n// `%TypedArray%.prototype.toString` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tostring\nexportTypedArrayMethod('toString', arrayToString, IS_NOT_ARRAY_METHOD);\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Uint8Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint8', function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","'use strict';\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar collection = require('../internals/collection');\nvar collectionWeak = require('../internals/collection-weak');\nvar isObject = require('../internals/is-object');\nvar isExtensible = require('../internals/object-is-extensible');\nvar enforceInternalState = require('../internals/internal-state').enforce;\nvar NATIVE_WEAK_MAP = require('../internals/native-weak-map');\n\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar InternalWeakMap;\n\nvar wrapper = function (init) {\n return function WeakMap() {\n return init(this, arguments.length ? arguments[0] : undefined);\n };\n};\n\n// `WeakMap` constructor\n// https://tc39.es/ecma262/#sec-weakmap-constructor\nvar $WeakMap = collection('WeakMap', wrapper, collectionWeak);\n\n// IE11 WeakMap frozen keys fix\n// We can't use feature detection because it crash some old IE builds\n// https://github.com/zloirock/core-js/issues/485\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalWeakMap = collectionWeak.getConstructor(wrapper, 'WeakMap', true);\n InternalMetadataModule.enable();\n var WeakMapPrototype = $WeakMap.prototype;\n var nativeDelete = uncurryThis(WeakMapPrototype['delete']);\n var nativeHas = uncurryThis(WeakMapPrototype.has);\n var nativeGet = uncurryThis(WeakMapPrototype.get);\n var nativeSet = uncurryThis(WeakMapPrototype.set);\n defineBuiltIns(WeakMapPrototype, {\n 'delete': function (key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeDelete(this, key) || state.frozen['delete'](key);\n } return nativeDelete(this, key);\n },\n has: function has(key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeHas(this, key) || state.frozen.has(key);\n } return nativeHas(this, key);\n },\n get: function get(key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeHas(this, key) ? nativeGet(this, key) : state.frozen.get(key);\n } return nativeGet(this, key);\n },\n set: function set(key, value) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n nativeHas(this, key) ? nativeSet(this, key, value) : state.frozen.set(key, value);\n } else nativeSet(this, key, value);\n return this;\n }\n });\n}\n","// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/es.weak-map.constructor');\n","// TODO: Remove from `core-js@4`\nrequire('../modules/es.typed-array.find-last-index');\n","// TODO: Remove from `core-js@4`\nrequire('../modules/es.typed-array.find-last');\n","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.array.iterator');\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar USE_NATIVE_URL = require('../internals/native-url');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar InternalStateModule = require('../internals/internal-state');\nvar anInstance = require('../internals/an-instance');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar bind = require('../internals/function-bind-context');\nvar classof = require('../internals/classof');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar $toString = require('../internals/to-string');\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arraySort = require('../internals/array-sort');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar URL_SEARCH_PARAMS = 'URLSearchParams';\nvar URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS);\nvar getInternalIteratorState = InternalStateModule.getterFor(URL_SEARCH_PARAMS_ITERATOR);\n// eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Avoid NodeJS experimental warning\nvar safeGetBuiltIn = function (name) {\n if (!DESCRIPTORS) return global[name];\n var descriptor = getOwnPropertyDescriptor(global, name);\n return descriptor && descriptor.value;\n};\n\nvar nativeFetch = safeGetBuiltIn('fetch');\nvar NativeRequest = safeGetBuiltIn('Request');\nvar Headers = safeGetBuiltIn('Headers');\nvar RequestPrototype = NativeRequest && NativeRequest.prototype;\nvar HeadersPrototype = Headers && Headers.prototype;\nvar RegExp = global.RegExp;\nvar TypeError = global.TypeError;\nvar decodeURIComponent = global.decodeURIComponent;\nvar encodeURIComponent = global.encodeURIComponent;\nvar charAt = uncurryThis(''.charAt);\nvar join = uncurryThis([].join);\nvar push = uncurryThis([].push);\nvar replace = uncurryThis(''.replace);\nvar shift = uncurryThis([].shift);\nvar splice = uncurryThis([].splice);\nvar split = uncurryThis(''.split);\nvar stringSlice = uncurryThis(''.slice);\n\nvar plus = /\\+/g;\nvar sequences = Array(4);\n\nvar percentSequence = function (bytes) {\n return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp('((?:%[\\\\da-f]{2}){' + bytes + '})', 'gi'));\n};\n\nvar percentDecode = function (sequence) {\n try {\n return decodeURIComponent(sequence);\n } catch (error) {\n return sequence;\n }\n};\n\nvar deserialize = function (it) {\n var result = replace(it, plus, ' ');\n var bytes = 4;\n try {\n return decodeURIComponent(result);\n } catch (error) {\n while (bytes) {\n result = replace(result, percentSequence(bytes--), percentDecode);\n }\n return result;\n }\n};\n\nvar find = /[!'()~]|%20/g;\n\nvar replacements = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+'\n};\n\nvar replacer = function (match) {\n return replacements[match];\n};\n\nvar serialize = function (it) {\n return replace(encodeURIComponent(it), find, replacer);\n};\n\nvar URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) {\n setInternalState(this, {\n type: URL_SEARCH_PARAMS_ITERATOR,\n iterator: getIterator(getInternalParamsState(params).entries),\n kind: kind\n });\n}, 'Iterator', function next() {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var step = state.iterator.next();\n var entry = step.value;\n if (!step.done) {\n step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [entry.key, entry.value];\n } return step;\n}, true);\n\nvar URLSearchParamsState = function (init) {\n this.entries = [];\n this.url = null;\n\n if (init !== undefined) {\n if (isObject(init)) this.parseObject(init);\n else this.parseQuery(typeof init == 'string' ? charAt(init, 0) === '?' ? stringSlice(init, 1) : init : $toString(init));\n }\n};\n\nURLSearchParamsState.prototype = {\n type: URL_SEARCH_PARAMS,\n bindURL: function (url) {\n this.url = url;\n this.update();\n },\n parseObject: function (object) {\n var iteratorMethod = getIteratorMethod(object);\n var iterator, next, step, entryIterator, entryNext, first, second;\n\n if (iteratorMethod) {\n iterator = getIterator(object, iteratorMethod);\n next = iterator.next;\n while (!(step = call(next, iterator)).done) {\n entryIterator = getIterator(anObject(step.value));\n entryNext = entryIterator.next;\n if (\n (first = call(entryNext, entryIterator)).done ||\n (second = call(entryNext, entryIterator)).done ||\n !call(entryNext, entryIterator).done\n ) throw TypeError('Expected sequence with length 2');\n push(this.entries, { key: $toString(first.value), value: $toString(second.value) });\n }\n } else for (var key in object) if (hasOwn(object, key)) {\n push(this.entries, { key: key, value: $toString(object[key]) });\n }\n },\n parseQuery: function (query) {\n if (query) {\n var attributes = split(query, '&');\n var index = 0;\n var attribute, entry;\n while (index < attributes.length) {\n attribute = attributes[index++];\n if (attribute.length) {\n entry = split(attribute, '=');\n push(this.entries, {\n key: deserialize(shift(entry)),\n value: deserialize(join(entry, '='))\n });\n }\n }\n }\n },\n serialize: function () {\n var entries = this.entries;\n var result = [];\n var index = 0;\n var entry;\n while (index < entries.length) {\n entry = entries[index++];\n push(result, serialize(entry.key) + '=' + serialize(entry.value));\n } return join(result, '&');\n },\n update: function () {\n this.entries.length = 0;\n this.parseQuery(this.url.query);\n },\n updateURL: function () {\n if (this.url) this.url.update();\n }\n};\n\n// `URLSearchParams` constructor\n// https://url.spec.whatwg.org/#interface-urlsearchparams\nvar URLSearchParamsConstructor = function URLSearchParams(/* init */) {\n anInstance(this, URLSearchParamsPrototype);\n var init = arguments.length > 0 ? arguments[0] : undefined;\n setInternalState(this, new URLSearchParamsState(init));\n};\n\nvar URLSearchParamsPrototype = URLSearchParamsConstructor.prototype;\n\ndefineBuiltIns(URLSearchParamsPrototype, {\n // `URLSearchParams.prototype.append` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-append\n append: function append(name, value) {\n validateArgumentsLength(arguments.length, 2);\n var state = getInternalParamsState(this);\n push(state.entries, { key: $toString(name), value: $toString(value) });\n state.updateURL();\n },\n // `URLSearchParams.prototype.delete` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-delete\n 'delete': function (name) {\n validateArgumentsLength(arguments.length, 1);\n var state = getInternalParamsState(this);\n var entries = state.entries;\n var key = $toString(name);\n var index = 0;\n while (index < entries.length) {\n if (entries[index].key === key) splice(entries, index, 1);\n else index++;\n }\n state.updateURL();\n },\n // `URLSearchParams.prototype.get` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-get\n get: function get(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = $toString(name);\n var index = 0;\n for (; index < entries.length; index++) {\n if (entries[index].key === key) return entries[index].value;\n }\n return null;\n },\n // `URLSearchParams.prototype.getAll` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-getall\n getAll: function getAll(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = $toString(name);\n var result = [];\n var index = 0;\n for (; index < entries.length; index++) {\n if (entries[index].key === key) push(result, entries[index].value);\n }\n return result;\n },\n // `URLSearchParams.prototype.has` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-has\n has: function has(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = $toString(name);\n var index = 0;\n while (index < entries.length) {\n if (entries[index++].key === key) return true;\n }\n return false;\n },\n // `URLSearchParams.prototype.set` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-set\n set: function set(name, value) {\n validateArgumentsLength(arguments.length, 1);\n var state = getInternalParamsState(this);\n var entries = state.entries;\n var found = false;\n var key = $toString(name);\n var val = $toString(value);\n var index = 0;\n var entry;\n for (; index < entries.length; index++) {\n entry = entries[index];\n if (entry.key === key) {\n if (found) splice(entries, index--, 1);\n else {\n found = true;\n entry.value = val;\n }\n }\n }\n if (!found) push(entries, { key: key, value: val });\n state.updateURL();\n },\n // `URLSearchParams.prototype.sort` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-sort\n sort: function sort() {\n var state = getInternalParamsState(this);\n arraySort(state.entries, function (a, b) {\n return a.key > b.key ? 1 : -1;\n });\n state.updateURL();\n },\n // `URLSearchParams.prototype.forEach` method\n forEach: function forEach(callback /* , thisArg */) {\n var entries = getInternalParamsState(this).entries;\n var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined);\n var index = 0;\n var entry;\n while (index < entries.length) {\n entry = entries[index++];\n boundFunction(entry.value, entry.key, this);\n }\n },\n // `URLSearchParams.prototype.keys` method\n keys: function keys() {\n return new URLSearchParamsIterator(this, 'keys');\n },\n // `URLSearchParams.prototype.values` method\n values: function values() {\n return new URLSearchParamsIterator(this, 'values');\n },\n // `URLSearchParams.prototype.entries` method\n entries: function entries() {\n return new URLSearchParamsIterator(this, 'entries');\n }\n}, { enumerable: true });\n\n// `URLSearchParams.prototype[@@iterator]` method\ndefineBuiltIn(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries, { name: 'entries' });\n\n// `URLSearchParams.prototype.toString` method\n// https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior\ndefineBuiltIn(URLSearchParamsPrototype, 'toString', function toString() {\n return getInternalParamsState(this).serialize();\n}, { enumerable: true });\n\nsetToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS);\n\n$({ global: true, constructor: true, forced: !USE_NATIVE_URL }, {\n URLSearchParams: URLSearchParamsConstructor\n});\n\n// Wrap `fetch` and `Request` for correct work with polyfilled `URLSearchParams`\nif (!USE_NATIVE_URL && isCallable(Headers)) {\n var headersHas = uncurryThis(HeadersPrototype.has);\n var headersSet = uncurryThis(HeadersPrototype.set);\n\n var wrapRequestOptions = function (init) {\n if (isObject(init)) {\n var body = init.body;\n var headers;\n if (classof(body) === URL_SEARCH_PARAMS) {\n headers = init.headers ? new Headers(init.headers) : new Headers();\n if (!headersHas(headers, 'content-type')) {\n headersSet(headers, 'content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n return create(init, {\n body: createPropertyDescriptor(0, $toString(body)),\n headers: createPropertyDescriptor(0, headers)\n });\n }\n } return init;\n };\n\n if (isCallable(nativeFetch)) {\n $({ global: true, enumerable: true, dontCallGetSet: true, forced: true }, {\n fetch: function fetch(input /* , init */) {\n return nativeFetch(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});\n }\n });\n }\n\n if (isCallable(NativeRequest)) {\n var RequestConstructor = function Request(input /* , init */) {\n anInstance(this, RequestPrototype);\n return new NativeRequest(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});\n };\n\n RequestPrototype.constructor = RequestConstructor;\n RequestConstructor.prototype = RequestPrototype;\n\n $({ global: true, constructor: true, dontCallGetSet: true, forced: true }, {\n Request: RequestConstructor\n });\n }\n}\n\nmodule.exports = {\n URLSearchParams: URLSearchParamsConstructor,\n getState: getInternalParamsState\n};\n","// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/web.url-search-params.constructor');\n","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.string.iterator');\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar USE_NATIVE_URL = require('../internals/native-url');\nvar global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar anInstance = require('../internals/an-instance');\nvar hasOwn = require('../internals/has-own-property');\nvar assign = require('../internals/object-assign');\nvar arrayFrom = require('../internals/array-from');\nvar arraySlice = require('../internals/array-slice-simple');\nvar codeAt = require('../internals/string-multibyte').codeAt;\nvar toASCII = require('../internals/string-punycode-to-ascii');\nvar $toString = require('../internals/to-string');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\nvar URLSearchParamsModule = require('../modules/web.url-search-params.constructor');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar getInternalURLState = InternalStateModule.getterFor('URL');\nvar URLSearchParams = URLSearchParamsModule.URLSearchParams;\nvar getInternalSearchParamsState = URLSearchParamsModule.getState;\n\nvar NativeURL = global.URL;\nvar TypeError = global.TypeError;\nvar parseInt = global.parseInt;\nvar floor = Math.floor;\nvar pow = Math.pow;\nvar charAt = uncurryThis(''.charAt);\nvar exec = uncurryThis(/./.exec);\nvar join = uncurryThis([].join);\nvar numberToString = uncurryThis(1.0.toString);\nvar pop = uncurryThis([].pop);\nvar push = uncurryThis([].push);\nvar replace = uncurryThis(''.replace);\nvar shift = uncurryThis([].shift);\nvar split = uncurryThis(''.split);\nvar stringSlice = uncurryThis(''.slice);\nvar toLowerCase = uncurryThis(''.toLowerCase);\nvar unshift = uncurryThis([].unshift);\n\nvar INVALID_AUTHORITY = 'Invalid authority';\nvar INVALID_SCHEME = 'Invalid scheme';\nvar INVALID_HOST = 'Invalid host';\nvar INVALID_PORT = 'Invalid port';\n\nvar ALPHA = /[a-z]/i;\n// eslint-disable-next-line regexp/no-obscure-range -- safe\nvar ALPHANUMERIC = /[\\d+-.a-z]/i;\nvar DIGIT = /\\d/;\nvar HEX_START = /^0x/i;\nvar OCT = /^[0-7]+$/;\nvar DEC = /^\\d+$/;\nvar HEX = /^[\\da-f]+$/i;\n/* eslint-disable regexp/no-control-character -- safe */\nvar FORBIDDEN_HOST_CODE_POINT = /[\\0\\t\\n\\r #%/:<>?@[\\\\\\]^|]/;\nvar FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\\0\\t\\n\\r #/:<>?@[\\\\\\]^|]/;\nvar LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\\u0000-\\u0020]+|[\\u0000-\\u0020]+$/g;\nvar TAB_AND_NEW_LINE = /[\\t\\n\\r]/g;\n/* eslint-enable regexp/no-control-character -- safe */\nvar EOF;\n\n// https://url.spec.whatwg.org/#ipv4-number-parser\nvar parseIPv4 = function (input) {\n var parts = split(input, '.');\n var partsLength, numbers, index, part, radix, number, ipv4;\n if (parts.length && parts[parts.length - 1] == '') {\n parts.length--;\n }\n partsLength = parts.length;\n if (partsLength > 4) return input;\n numbers = [];\n for (index = 0; index < partsLength; index++) {\n part = parts[index];\n if (part == '') return input;\n radix = 10;\n if (part.length > 1 && charAt(part, 0) == '0') {\n radix = exec(HEX_START, part) ? 16 : 8;\n part = stringSlice(part, radix == 8 ? 1 : 2);\n }\n if (part === '') {\n number = 0;\n } else {\n if (!exec(radix == 10 ? DEC : radix == 8 ? OCT : HEX, part)) return input;\n number = parseInt(part, radix);\n }\n push(numbers, number);\n }\n for (index = 0; index < partsLength; index++) {\n number = numbers[index];\n if (index == partsLength - 1) {\n if (number >= pow(256, 5 - partsLength)) return null;\n } else if (number > 255) return null;\n }\n ipv4 = pop(numbers);\n for (index = 0; index < numbers.length; index++) {\n ipv4 += numbers[index] * pow(256, 3 - index);\n }\n return ipv4;\n};\n\n// https://url.spec.whatwg.org/#concept-ipv6-parser\n// eslint-disable-next-line max-statements -- TODO\nvar parseIPv6 = function (input) {\n var address = [0, 0, 0, 0, 0, 0, 0, 0];\n var pieceIndex = 0;\n var compress = null;\n var pointer = 0;\n var value, length, numbersSeen, ipv4Piece, number, swaps, swap;\n\n var chr = function () {\n return charAt(input, pointer);\n };\n\n if (chr() == ':') {\n if (charAt(input, 1) != ':') return;\n pointer += 2;\n pieceIndex++;\n compress = pieceIndex;\n }\n while (chr()) {\n if (pieceIndex == 8) return;\n if (chr() == ':') {\n if (compress !== null) return;\n pointer++;\n pieceIndex++;\n compress = pieceIndex;\n continue;\n }\n value = length = 0;\n while (length < 4 && exec(HEX, chr())) {\n value = value * 16 + parseInt(chr(), 16);\n pointer++;\n length++;\n }\n if (chr() == '.') {\n if (length == 0) return;\n pointer -= length;\n if (pieceIndex > 6) return;\n numbersSeen = 0;\n while (chr()) {\n ipv4Piece = null;\n if (numbersSeen > 0) {\n if (chr() == '.' && numbersSeen < 4) pointer++;\n else return;\n }\n if (!exec(DIGIT, chr())) return;\n while (exec(DIGIT, chr())) {\n number = parseInt(chr(), 10);\n if (ipv4Piece === null) ipv4Piece = number;\n else if (ipv4Piece == 0) return;\n else ipv4Piece = ipv4Piece * 10 + number;\n if (ipv4Piece > 255) return;\n pointer++;\n }\n address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;\n numbersSeen++;\n if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;\n }\n if (numbersSeen != 4) return;\n break;\n } else if (chr() == ':') {\n pointer++;\n if (!chr()) return;\n } else if (chr()) return;\n address[pieceIndex++] = value;\n }\n if (compress !== null) {\n swaps = pieceIndex - compress;\n pieceIndex = 7;\n while (pieceIndex != 0 && swaps > 0) {\n swap = address[pieceIndex];\n address[pieceIndex--] = address[compress + swaps - 1];\n address[compress + --swaps] = swap;\n }\n } else if (pieceIndex != 8) return;\n return address;\n};\n\nvar findLongestZeroSequence = function (ipv6) {\n var maxIndex = null;\n var maxLength = 1;\n var currStart = null;\n var currLength = 0;\n var index = 0;\n for (; index < 8; index++) {\n if (ipv6[index] !== 0) {\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n currStart = null;\n currLength = 0;\n } else {\n if (currStart === null) currStart = index;\n ++currLength;\n }\n }\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n return maxIndex;\n};\n\n// https://url.spec.whatwg.org/#host-serializing\nvar serializeHost = function (host) {\n var result, index, compress, ignore0;\n // ipv4\n if (typeof host == 'number') {\n result = [];\n for (index = 0; index < 4; index++) {\n unshift(result, host % 256);\n host = floor(host / 256);\n } return join(result, '.');\n // ipv6\n } else if (typeof host == 'object') {\n result = '';\n compress = findLongestZeroSequence(host);\n for (index = 0; index < 8; index++) {\n if (ignore0 && host[index] === 0) continue;\n if (ignore0) ignore0 = false;\n if (compress === index) {\n result += index ? ':' : '::';\n ignore0 = true;\n } else {\n result += numberToString(host[index], 16);\n if (index < 7) result += ':';\n }\n }\n return '[' + result + ']';\n } return host;\n};\n\nvar C0ControlPercentEncodeSet = {};\nvar fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {\n ' ': 1, '\"': 1, '<': 1, '>': 1, '`': 1\n});\nvar pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {\n '#': 1, '?': 1, '{': 1, '}': 1\n});\nvar userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {\n '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\\\': 1, ']': 1, '^': 1, '|': 1\n});\n\nvar percentEncode = function (chr, set) {\n var code = codeAt(chr, 0);\n return code > 0x20 && code < 0x7F && !hasOwn(set, chr) ? chr : encodeURIComponent(chr);\n};\n\n// https://url.spec.whatwg.org/#special-scheme\nvar specialSchemes = {\n ftp: 21,\n file: null,\n http: 80,\n https: 443,\n ws: 80,\n wss: 443\n};\n\n// https://url.spec.whatwg.org/#windows-drive-letter\nvar isWindowsDriveLetter = function (string, normalized) {\n var second;\n return string.length == 2 && exec(ALPHA, charAt(string, 0))\n && ((second = charAt(string, 1)) == ':' || (!normalized && second == '|'));\n};\n\n// https://url.spec.whatwg.org/#start-with-a-windows-drive-letter\nvar startsWithWindowsDriveLetter = function (string) {\n var third;\n return string.length > 1 && isWindowsDriveLetter(stringSlice(string, 0, 2)) && (\n string.length == 2 ||\n ((third = charAt(string, 2)) === '/' || third === '\\\\' || third === '?' || third === '#')\n );\n};\n\n// https://url.spec.whatwg.org/#single-dot-path-segment\nvar isSingleDot = function (segment) {\n return segment === '.' || toLowerCase(segment) === '%2e';\n};\n\n// https://url.spec.whatwg.org/#double-dot-path-segment\nvar isDoubleDot = function (segment) {\n segment = toLowerCase(segment);\n return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';\n};\n\n// States:\nvar SCHEME_START = {};\nvar SCHEME = {};\nvar NO_SCHEME = {};\nvar SPECIAL_RELATIVE_OR_AUTHORITY = {};\nvar PATH_OR_AUTHORITY = {};\nvar RELATIVE = {};\nvar RELATIVE_SLASH = {};\nvar SPECIAL_AUTHORITY_SLASHES = {};\nvar SPECIAL_AUTHORITY_IGNORE_SLASHES = {};\nvar AUTHORITY = {};\nvar HOST = {};\nvar HOSTNAME = {};\nvar PORT = {};\nvar FILE = {};\nvar FILE_SLASH = {};\nvar FILE_HOST = {};\nvar PATH_START = {};\nvar PATH = {};\nvar CANNOT_BE_A_BASE_URL_PATH = {};\nvar QUERY = {};\nvar FRAGMENT = {};\n\nvar URLState = function (url, isBase, base) {\n var urlString = $toString(url);\n var baseState, failure, searchParams;\n if (isBase) {\n failure = this.parse(urlString);\n if (failure) throw TypeError(failure);\n this.searchParams = null;\n } else {\n if (base !== undefined) baseState = new URLState(base, true);\n failure = this.parse(urlString, null, baseState);\n if (failure) throw TypeError(failure);\n searchParams = getInternalSearchParamsState(new URLSearchParams());\n searchParams.bindURL(this);\n this.searchParams = searchParams;\n }\n};\n\nURLState.prototype = {\n type: 'URL',\n // https://url.spec.whatwg.org/#url-parsing\n // eslint-disable-next-line max-statements -- TODO\n parse: function (input, stateOverride, base) {\n var url = this;\n var state = stateOverride || SCHEME_START;\n var pointer = 0;\n var buffer = '';\n var seenAt = false;\n var seenBracket = false;\n var seenPasswordToken = false;\n var codePoints, chr, bufferCodePoints, failure;\n\n input = $toString(input);\n\n if (!stateOverride) {\n url.scheme = '';\n url.username = '';\n url.password = '';\n url.host = null;\n url.port = null;\n url.path = [];\n url.query = null;\n url.fragment = null;\n url.cannotBeABaseURL = false;\n input = replace(input, LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');\n }\n\n input = replace(input, TAB_AND_NEW_LINE, '');\n\n codePoints = arrayFrom(input);\n\n while (pointer <= codePoints.length) {\n chr = codePoints[pointer];\n switch (state) {\n case SCHEME_START:\n if (chr && exec(ALPHA, chr)) {\n buffer += toLowerCase(chr);\n state = SCHEME;\n } else if (!stateOverride) {\n state = NO_SCHEME;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case SCHEME:\n if (chr && (exec(ALPHANUMERIC, chr) || chr == '+' || chr == '-' || chr == '.')) {\n buffer += toLowerCase(chr);\n } else if (chr == ':') {\n if (stateOverride && (\n (url.isSpecial() != hasOwn(specialSchemes, buffer)) ||\n (buffer == 'file' && (url.includesCredentials() || url.port !== null)) ||\n (url.scheme == 'file' && !url.host)\n )) return;\n url.scheme = buffer;\n if (stateOverride) {\n if (url.isSpecial() && specialSchemes[url.scheme] == url.port) url.port = null;\n return;\n }\n buffer = '';\n if (url.scheme == 'file') {\n state = FILE;\n } else if (url.isSpecial() && base && base.scheme == url.scheme) {\n state = SPECIAL_RELATIVE_OR_AUTHORITY;\n } else if (url.isSpecial()) {\n state = SPECIAL_AUTHORITY_SLASHES;\n } else if (codePoints[pointer + 1] == '/') {\n state = PATH_OR_AUTHORITY;\n pointer++;\n } else {\n url.cannotBeABaseURL = true;\n push(url.path, '');\n state = CANNOT_BE_A_BASE_URL_PATH;\n }\n } else if (!stateOverride) {\n buffer = '';\n state = NO_SCHEME;\n pointer = 0;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case NO_SCHEME:\n if (!base || (base.cannotBeABaseURL && chr != '#')) return INVALID_SCHEME;\n if (base.cannotBeABaseURL && chr == '#') {\n url.scheme = base.scheme;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n url.cannotBeABaseURL = true;\n state = FRAGMENT;\n break;\n }\n state = base.scheme == 'file' ? FILE : RELATIVE;\n continue;\n\n case SPECIAL_RELATIVE_OR_AUTHORITY:\n if (chr == '/' && codePoints[pointer + 1] == '/') {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n pointer++;\n } else {\n state = RELATIVE;\n continue;\n } break;\n\n case PATH_OR_AUTHORITY:\n if (chr == '/') {\n state = AUTHORITY;\n break;\n } else {\n state = PATH;\n continue;\n }\n\n case RELATIVE:\n url.scheme = base.scheme;\n if (chr == EOF) {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = base.query;\n } else if (chr == '/' || (chr == '\\\\' && url.isSpecial())) {\n state = RELATIVE_SLASH;\n } else if (chr == '?') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.path.length--;\n state = PATH;\n continue;\n } break;\n\n case RELATIVE_SLASH:\n if (url.isSpecial() && (chr == '/' || chr == '\\\\')) {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n } else if (chr == '/') {\n state = AUTHORITY;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n state = PATH;\n continue;\n } break;\n\n case SPECIAL_AUTHORITY_SLASHES:\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n if (chr != '/' || charAt(buffer, pointer + 1) != '/') continue;\n pointer++;\n break;\n\n case SPECIAL_AUTHORITY_IGNORE_SLASHES:\n if (chr != '/' && chr != '\\\\') {\n state = AUTHORITY;\n continue;\n } break;\n\n case AUTHORITY:\n if (chr == '@') {\n if (seenAt) buffer = '%40' + buffer;\n seenAt = true;\n bufferCodePoints = arrayFrom(buffer);\n for (var i = 0; i < bufferCodePoints.length; i++) {\n var codePoint = bufferCodePoints[i];\n if (codePoint == ':' && !seenPasswordToken) {\n seenPasswordToken = true;\n continue;\n }\n var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);\n if (seenPasswordToken) url.password += encodedCodePoints;\n else url.username += encodedCodePoints;\n }\n buffer = '';\n } else if (\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial())\n ) {\n if (seenAt && buffer == '') return INVALID_AUTHORITY;\n pointer -= arrayFrom(buffer).length + 1;\n buffer = '';\n state = HOST;\n } else buffer += chr;\n break;\n\n case HOST:\n case HOSTNAME:\n if (stateOverride && url.scheme == 'file') {\n state = FILE_HOST;\n continue;\n } else if (chr == ':' && !seenBracket) {\n if (buffer == '') return INVALID_HOST;\n failure = url.parseHost(buffer);\n if (failure) return failure;\n buffer = '';\n state = PORT;\n if (stateOverride == HOSTNAME) return;\n } else if (\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial())\n ) {\n if (url.isSpecial() && buffer == '') return INVALID_HOST;\n if (stateOverride && buffer == '' && (url.includesCredentials() || url.port !== null)) return;\n failure = url.parseHost(buffer);\n if (failure) return failure;\n buffer = '';\n state = PATH_START;\n if (stateOverride) return;\n continue;\n } else {\n if (chr == '[') seenBracket = true;\n else if (chr == ']') seenBracket = false;\n buffer += chr;\n } break;\n\n case PORT:\n if (exec(DIGIT, chr)) {\n buffer += chr;\n } else if (\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial()) ||\n stateOverride\n ) {\n if (buffer != '') {\n var port = parseInt(buffer, 10);\n if (port > 0xFFFF) return INVALID_PORT;\n url.port = (url.isSpecial() && port === specialSchemes[url.scheme]) ? null : port;\n buffer = '';\n }\n if (stateOverride) return;\n state = PATH_START;\n continue;\n } else return INVALID_PORT;\n break;\n\n case FILE:\n url.scheme = 'file';\n if (chr == '/' || chr == '\\\\') state = FILE_SLASH;\n else if (base && base.scheme == 'file') {\n if (chr == EOF) {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = base.query;\n } else if (chr == '?') {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n if (!startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.shortenPath();\n }\n state = PATH;\n continue;\n }\n } else {\n state = PATH;\n continue;\n } break;\n\n case FILE_SLASH:\n if (chr == '/' || chr == '\\\\') {\n state = FILE_HOST;\n break;\n }\n if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {\n if (isWindowsDriveLetter(base.path[0], true)) push(url.path, base.path[0]);\n else url.host = base.host;\n }\n state = PATH;\n continue;\n\n case FILE_HOST:\n if (chr == EOF || chr == '/' || chr == '\\\\' || chr == '?' || chr == '#') {\n if (!stateOverride && isWindowsDriveLetter(buffer)) {\n state = PATH;\n } else if (buffer == '') {\n url.host = '';\n if (stateOverride) return;\n state = PATH_START;\n } else {\n failure = url.parseHost(buffer);\n if (failure) return failure;\n if (url.host == 'localhost') url.host = '';\n if (stateOverride) return;\n buffer = '';\n state = PATH_START;\n } continue;\n } else buffer += chr;\n break;\n\n case PATH_START:\n if (url.isSpecial()) {\n state = PATH;\n if (chr != '/' && chr != '\\\\') continue;\n } else if (!stateOverride && chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (!stateOverride && chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n state = PATH;\n if (chr != '/') continue;\n } break;\n\n case PATH:\n if (\n chr == EOF || chr == '/' ||\n (chr == '\\\\' && url.isSpecial()) ||\n (!stateOverride && (chr == '?' || chr == '#'))\n ) {\n if (isDoubleDot(buffer)) {\n url.shortenPath();\n if (chr != '/' && !(chr == '\\\\' && url.isSpecial())) {\n push(url.path, '');\n }\n } else if (isSingleDot(buffer)) {\n if (chr != '/' && !(chr == '\\\\' && url.isSpecial())) {\n push(url.path, '');\n }\n } else {\n if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {\n if (url.host) url.host = '';\n buffer = charAt(buffer, 0) + ':'; // normalize windows drive letter\n }\n push(url.path, buffer);\n }\n buffer = '';\n if (url.scheme == 'file' && (chr == EOF || chr == '?' || chr == '#')) {\n while (url.path.length > 1 && url.path[0] === '') {\n shift(url.path);\n }\n }\n if (chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n }\n } else {\n buffer += percentEncode(chr, pathPercentEncodeSet);\n } break;\n\n case CANNOT_BE_A_BASE_URL_PATH:\n if (chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n url.path[0] += percentEncode(chr, C0ControlPercentEncodeSet);\n } break;\n\n case QUERY:\n if (!stateOverride && chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n if (chr == \"'\" && url.isSpecial()) url.query += '%27';\n else if (chr == '#') url.query += '%23';\n else url.query += percentEncode(chr, C0ControlPercentEncodeSet);\n } break;\n\n case FRAGMENT:\n if (chr != EOF) url.fragment += percentEncode(chr, fragmentPercentEncodeSet);\n break;\n }\n\n pointer++;\n }\n },\n // https://url.spec.whatwg.org/#host-parsing\n parseHost: function (input) {\n var result, codePoints, index;\n if (charAt(input, 0) == '[') {\n if (charAt(input, input.length - 1) != ']') return INVALID_HOST;\n result = parseIPv6(stringSlice(input, 1, -1));\n if (!result) return INVALID_HOST;\n this.host = result;\n // opaque host\n } else if (!this.isSpecial()) {\n if (exec(FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT, input)) return INVALID_HOST;\n result = '';\n codePoints = arrayFrom(input);\n for (index = 0; index < codePoints.length; index++) {\n result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);\n }\n this.host = result;\n } else {\n input = toASCII(input);\n if (exec(FORBIDDEN_HOST_CODE_POINT, input)) return INVALID_HOST;\n result = parseIPv4(input);\n if (result === null) return INVALID_HOST;\n this.host = result;\n }\n },\n // https://url.spec.whatwg.org/#cannot-have-a-username-password-port\n cannotHaveUsernamePasswordPort: function () {\n return !this.host || this.cannotBeABaseURL || this.scheme == 'file';\n },\n // https://url.spec.whatwg.org/#include-credentials\n includesCredentials: function () {\n return this.username != '' || this.password != '';\n },\n // https://url.spec.whatwg.org/#is-special\n isSpecial: function () {\n return hasOwn(specialSchemes, this.scheme);\n },\n // https://url.spec.whatwg.org/#shorten-a-urls-path\n shortenPath: function () {\n var path = this.path;\n var pathSize = path.length;\n if (pathSize && (this.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {\n path.length--;\n }\n },\n // https://url.spec.whatwg.org/#concept-url-serializer\n serialize: function () {\n var url = this;\n var scheme = url.scheme;\n var username = url.username;\n var password = url.password;\n var host = url.host;\n var port = url.port;\n var path = url.path;\n var query = url.query;\n var fragment = url.fragment;\n var output = scheme + ':';\n if (host !== null) {\n output += '//';\n if (url.includesCredentials()) {\n output += username + (password ? ':' + password : '') + '@';\n }\n output += serializeHost(host);\n if (port !== null) output += ':' + port;\n } else if (scheme == 'file') output += '//';\n output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : '';\n if (query !== null) output += '?' + query;\n if (fragment !== null) output += '#' + fragment;\n return output;\n },\n // https://url.spec.whatwg.org/#dom-url-href\n setHref: function (href) {\n var failure = this.parse(href);\n if (failure) throw TypeError(failure);\n this.searchParams.update();\n },\n // https://url.spec.whatwg.org/#dom-url-origin\n getOrigin: function () {\n var scheme = this.scheme;\n var port = this.port;\n if (scheme == 'blob') try {\n return new URLConstructor(scheme.path[0]).origin;\n } catch (error) {\n return 'null';\n }\n if (scheme == 'file' || !this.isSpecial()) return 'null';\n return scheme + '://' + serializeHost(this.host) + (port !== null ? ':' + port : '');\n },\n // https://url.spec.whatwg.org/#dom-url-protocol\n getProtocol: function () {\n return this.scheme + ':';\n },\n setProtocol: function (protocol) {\n this.parse($toString(protocol) + ':', SCHEME_START);\n },\n // https://url.spec.whatwg.org/#dom-url-username\n getUsername: function () {\n return this.username;\n },\n setUsername: function (username) {\n var codePoints = arrayFrom($toString(username));\n if (this.cannotHaveUsernamePasswordPort()) return;\n this.username = '';\n for (var i = 0; i < codePoints.length; i++) {\n this.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n },\n // https://url.spec.whatwg.org/#dom-url-password\n getPassword: function () {\n return this.password;\n },\n setPassword: function (password) {\n var codePoints = arrayFrom($toString(password));\n if (this.cannotHaveUsernamePasswordPort()) return;\n this.password = '';\n for (var i = 0; i < codePoints.length; i++) {\n this.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n },\n // https://url.spec.whatwg.org/#dom-url-host\n getHost: function () {\n var host = this.host;\n var port = this.port;\n return host === null ? ''\n : port === null ? serializeHost(host)\n : serializeHost(host) + ':' + port;\n },\n setHost: function (host) {\n if (this.cannotBeABaseURL) return;\n this.parse(host, HOST);\n },\n // https://url.spec.whatwg.org/#dom-url-hostname\n getHostname: function () {\n var host = this.host;\n return host === null ? '' : serializeHost(host);\n },\n setHostname: function (hostname) {\n if (this.cannotBeABaseURL) return;\n this.parse(hostname, HOSTNAME);\n },\n // https://url.spec.whatwg.org/#dom-url-port\n getPort: function () {\n var port = this.port;\n return port === null ? '' : $toString(port);\n },\n setPort: function (port) {\n if (this.cannotHaveUsernamePasswordPort()) return;\n port = $toString(port);\n if (port == '') this.port = null;\n else this.parse(port, PORT);\n },\n // https://url.spec.whatwg.org/#dom-url-pathname\n getPathname: function () {\n var path = this.path;\n return this.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : '';\n },\n setPathname: function (pathname) {\n if (this.cannotBeABaseURL) return;\n this.path = [];\n this.parse(pathname, PATH_START);\n },\n // https://url.spec.whatwg.org/#dom-url-search\n getSearch: function () {\n var query = this.query;\n return query ? '?' + query : '';\n },\n setSearch: function (search) {\n search = $toString(search);\n if (search == '') {\n this.query = null;\n } else {\n if ('?' == charAt(search, 0)) search = stringSlice(search, 1);\n this.query = '';\n this.parse(search, QUERY);\n }\n this.searchParams.update();\n },\n // https://url.spec.whatwg.org/#dom-url-searchparams\n getSearchParams: function () {\n return this.searchParams.facade;\n },\n // https://url.spec.whatwg.org/#dom-url-hash\n getHash: function () {\n var fragment = this.fragment;\n return fragment ? '#' + fragment : '';\n },\n setHash: function (hash) {\n hash = $toString(hash);\n if (hash == '') {\n this.fragment = null;\n return;\n }\n if ('#' == charAt(hash, 0)) hash = stringSlice(hash, 1);\n this.fragment = '';\n this.parse(hash, FRAGMENT);\n },\n update: function () {\n this.query = this.searchParams.serialize() || null;\n }\n};\n\n// `URL` constructor\n// https://url.spec.whatwg.org/#url-class\nvar URLConstructor = function URL(url /* , base */) {\n var that = anInstance(this, URLPrototype);\n var base = validateArgumentsLength(arguments.length, 1) > 1 ? arguments[1] : undefined;\n var state = setInternalState(that, new URLState(url, false, base));\n if (!DESCRIPTORS) {\n that.href = state.serialize();\n that.origin = state.getOrigin();\n that.protocol = state.getProtocol();\n that.username = state.getUsername();\n that.password = state.getPassword();\n that.host = state.getHost();\n that.hostname = state.getHostname();\n that.port = state.getPort();\n that.pathname = state.getPathname();\n that.search = state.getSearch();\n that.searchParams = state.getSearchParams();\n that.hash = state.getHash();\n }\n};\n\nvar URLPrototype = URLConstructor.prototype;\n\nvar accessorDescriptor = function (getter, setter) {\n return {\n get: function () {\n return getInternalURLState(this)[getter]();\n },\n set: setter && function (value) {\n return getInternalURLState(this)[setter](value);\n },\n configurable: true,\n enumerable: true\n };\n};\n\nif (DESCRIPTORS) {\n // `URL.prototype.href` accessors pair\n // https://url.spec.whatwg.org/#dom-url-href\n defineBuiltInAccessor(URLPrototype, 'href', accessorDescriptor('serialize', 'setHref'));\n // `URL.prototype.origin` getter\n // https://url.spec.whatwg.org/#dom-url-origin\n defineBuiltInAccessor(URLPrototype, 'origin', accessorDescriptor('getOrigin'));\n // `URL.prototype.protocol` accessors pair\n // https://url.spec.whatwg.org/#dom-url-protocol\n defineBuiltInAccessor(URLPrototype, 'protocol', accessorDescriptor('getProtocol', 'setProtocol'));\n // `URL.prototype.username` accessors pair\n // https://url.spec.whatwg.org/#dom-url-username\n defineBuiltInAccessor(URLPrototype, 'username', accessorDescriptor('getUsername', 'setUsername'));\n // `URL.prototype.password` accessors pair\n // https://url.spec.whatwg.org/#dom-url-password\n defineBuiltInAccessor(URLPrototype, 'password', accessorDescriptor('getPassword', 'setPassword'));\n // `URL.prototype.host` accessors pair\n // https://url.spec.whatwg.org/#dom-url-host\n defineBuiltInAccessor(URLPrototype, 'host', accessorDescriptor('getHost', 'setHost'));\n // `URL.prototype.hostname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hostname\n defineBuiltInAccessor(URLPrototype, 'hostname', accessorDescriptor('getHostname', 'setHostname'));\n // `URL.prototype.port` accessors pair\n // https://url.spec.whatwg.org/#dom-url-port\n defineBuiltInAccessor(URLPrototype, 'port', accessorDescriptor('getPort', 'setPort'));\n // `URL.prototype.pathname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-pathname\n defineBuiltInAccessor(URLPrototype, 'pathname', accessorDescriptor('getPathname', 'setPathname'));\n // `URL.prototype.search` accessors pair\n // https://url.spec.whatwg.org/#dom-url-search\n defineBuiltInAccessor(URLPrototype, 'search', accessorDescriptor('getSearch', 'setSearch'));\n // `URL.prototype.searchParams` getter\n // https://url.spec.whatwg.org/#dom-url-searchparams\n defineBuiltInAccessor(URLPrototype, 'searchParams', accessorDescriptor('getSearchParams'));\n // `URL.prototype.hash` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hash\n defineBuiltInAccessor(URLPrototype, 'hash', accessorDescriptor('getHash', 'setHash'));\n}\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\ndefineBuiltIn(URLPrototype, 'toJSON', function toJSON() {\n return getInternalURLState(this).serialize();\n}, { enumerable: true });\n\n// `URL.prototype.toString` method\n// https://url.spec.whatwg.org/#URL-stringification-behavior\ndefineBuiltIn(URLPrototype, 'toString', function toString() {\n return getInternalURLState(this).serialize();\n}, { enumerable: true });\n\nif (NativeURL) {\n var nativeCreateObjectURL = NativeURL.createObjectURL;\n var nativeRevokeObjectURL = NativeURL.revokeObjectURL;\n // `URL.createObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL\n if (nativeCreateObjectURL) defineBuiltIn(URLConstructor, 'createObjectURL', bind(nativeCreateObjectURL, NativeURL));\n // `URL.revokeObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL\n if (nativeRevokeObjectURL) defineBuiltIn(URLConstructor, 'revokeObjectURL', bind(nativeRevokeObjectURL, NativeURL));\n}\n\nsetToStringTag(URLConstructor, 'URL');\n\n$({ global: true, constructor: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, {\n URL: URLConstructor\n});\n","// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/web.url.constructor');\n","export default function requiredArgs(required, args) {\n if (args.length < required) {\n throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present');\n }\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {*} value - the value to check\n * @returns {boolean} true if the given value is a date\n * @throws {TypeError} 1 arguments required\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\n\nexport default function isDate(value) {\n requiredArgs(1, arguments);\n return value instanceof Date || typeof value === 'object' && Object.prototype.toString.call(value) === '[object Date]';\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\n\nexport default function toDate(argument) {\n requiredArgs(1, arguments);\n var argStr = Object.prototype.toString.call(argument); // Clone the date\n\n if (argument instanceof Date || typeof argument === 'object' && argStr === '[object Date]') {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new Date(argument.getTime());\n } else if (typeof argument === 'number' || argStr === '[object Number]') {\n return new Date(argument);\n } else {\n if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') {\n // eslint-disable-next-line no-console\n console.warn(\"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule\"); // eslint-disable-next-line no-console\n\n console.warn(new Error().stack);\n }\n\n return new Date(NaN);\n }\n}","import isDate from \"../isDate/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Now `isValid` doesn't throw an exception\n * if the first argument is not an instance of Date.\n * Instead, argument is converted beforehand using `toDate`.\n *\n * Examples:\n *\n * | `isValid` argument | Before v2.0.0 | v2.0.0 onward |\n * |---------------------------|---------------|---------------|\n * | `new Date()` | `true` | `true` |\n * | `new Date('2016-01-01')` | `true` | `true` |\n * | `new Date('')` | `false` | `false` |\n * | `new Date(1488370835081)` | `true` | `true` |\n * | `new Date(NaN)` | `false` | `false` |\n * | `'2016-01-01'` | `TypeError` | `false` |\n * | `''` | `TypeError` | `false` |\n * | `1488370835081` | `TypeError` | `true` |\n * | `NaN` | `TypeError` | `false` |\n *\n * We introduce this change to make *date-fns* consistent with ECMAScript behavior\n * that try to coerce arguments to the expected type\n * (which is also the case with other *date-fns* functions).\n *\n * @param {*} date - the date to check\n * @returns {Boolean} the date is valid\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\n\nexport default function isValid(dirtyDate) {\n requiredArgs(1, arguments);\n\n if (!isDate(dirtyDate) && typeof dirtyDate !== 'number') {\n return false;\n }\n\n var date = toDate(dirtyDate);\n return !isNaN(Number(date));\n}","var formatDistanceLocale = {\n lessThanXSeconds: {\n one: 'less than a second',\n other: 'less than {{count}} seconds'\n },\n xSeconds: {\n one: '1 second',\n other: '{{count}} seconds'\n },\n halfAMinute: 'half a minute',\n lessThanXMinutes: {\n one: 'less than a minute',\n other: 'less than {{count}} minutes'\n },\n xMinutes: {\n one: '1 minute',\n other: '{{count}} minutes'\n },\n aboutXHours: {\n one: 'about 1 hour',\n other: 'about {{count}} hours'\n },\n xHours: {\n one: '1 hour',\n other: '{{count}} hours'\n },\n xDays: {\n one: '1 day',\n other: '{{count}} days'\n },\n aboutXWeeks: {\n one: 'about 1 week',\n other: 'about {{count}} weeks'\n },\n xWeeks: {\n one: '1 week',\n other: '{{count}} weeks'\n },\n aboutXMonths: {\n one: 'about 1 month',\n other: 'about {{count}} months'\n },\n xMonths: {\n one: '1 month',\n other: '{{count}} months'\n },\n aboutXYears: {\n one: 'about 1 year',\n other: 'about {{count}} years'\n },\n xYears: {\n one: '1 year',\n other: '{{count}} years'\n },\n overXYears: {\n one: 'over 1 year',\n other: 'over {{count}} years'\n },\n almostXYears: {\n one: 'almost 1 year',\n other: 'almost {{count}} years'\n }\n};\n\nvar formatDistance = function (token, count, options) {\n var result;\n var tokenValue = formatDistanceLocale[token];\n\n if (typeof tokenValue === 'string') {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace('{{count}}', count.toString());\n }\n\n if (options !== null && options !== void 0 && options.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return 'in ' + result;\n } else {\n return result + ' ago';\n }\n }\n\n return result;\n};\n\nexport default formatDistance;","export default function buildFormatLongFn(args) {\n return function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // TODO: Remove String()\n var width = options.width ? String(options.width) : args.defaultWidth;\n var format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: 'EEEE, MMMM do, y',\n long: 'MMMM do, y',\n medium: 'MMM d, y',\n short: 'MM/dd/yyyy'\n};\nvar timeFormats = {\n full: 'h:mm:ss a zzzz',\n long: 'h:mm:ss a z',\n medium: 'h:mm:ss a',\n short: 'h:mm a'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: '{{date}}, {{time}}',\n short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: 'full'\n }),\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: 'full'\n }),\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: 'full'\n })\n};\nexport default formatLong;","var formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: 'P'\n};\n\nvar formatRelative = function (token, _date, _baseDate, _options) {\n return formatRelativeLocale[token];\n};\n\nexport default formatRelative;","export default function buildLocalizeFn(args) {\n return function (dirtyIndex, dirtyOptions) {\n var options = dirtyOptions || {};\n var context = options.context ? String(options.context) : 'standalone';\n var valuesArray;\n\n if (context === 'formatting' && args.formattingValues) {\n var defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n var width = options.width ? String(options.width) : defaultWidth;\n valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n var _defaultWidth = args.defaultWidth;\n\n var _width = options.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[_width] || args.values[_defaultWidth];\n }\n\n var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex; // @ts-ignore: For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n\n return valuesArray[index];\n };\n}","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['B', 'A'],\n abbreviated: ['BC', 'AD'],\n wide: ['Before Christ', 'Anno Domini']\n};\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']\n}; // Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\n\nvar monthValues = {\n narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n};\nvar dayValues = {\n narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n};\nvar dayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n }\n};\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n }\n};\n\nvar ordinalNumber = function (dirtyNumber, _options) {\n var number = Number(dirtyNumber); // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n var rem100 = number % 100;\n\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + 'st';\n\n case 2:\n return number + 'nd';\n\n case 3:\n return number + 'rd';\n }\n }\n\n return number + 'th';\n};\n\nvar localize = {\n ordinalNumber: ordinalNumber,\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: 'wide'\n }),\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: 'wide',\n argumentCallback: function (quarter) {\n return quarter - 1;\n }\n }),\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: 'wide'\n }),\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: 'wide'\n }),\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: 'wide',\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: 'wide'\n })\n};\nexport default localize;","export default function buildMatchFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var width = options.width;\n var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];\n var matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n\n var matchedString = matchResult[0];\n var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];\n var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n }) : findKey(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n });\n var value;\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}\n\nfunction findKey(object, predicate) {\n for (var key in object) {\n if (object.hasOwnProperty(key) && predicate(object[key])) {\n return key;\n }\n }\n\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (var key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n\n return undefined;\n}","export default function buildMatchPatternFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n var matchedString = matchResult[0];\n var parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i\n};\nvar parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i\n};\nvar parseMonthPatterns = {\n narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i\n};\nvar parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i\n }\n};\nvar match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function (value) {\n return parseInt(value, 10);\n }\n }),\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseEraPatterns,\n defaultParseWidth: 'any'\n }),\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: 'any',\n valueCallback: function (index) {\n return index + 1;\n }\n }),\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: 'any'\n }),\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseDayPatterns,\n defaultParseWidth: 'any'\n }),\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: 'any',\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: 'any'\n })\n};\nexport default match;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}\n * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}\n */\nvar locale = {\n code: 'en-US',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0\n /* Sunday */\n ,\n firstWeekContainsDate: 1\n }\n};\nexport default locale;","export default function toInteger(dirtyNumber) {\n if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {\n return NaN;\n }\n\n var number = Number(dirtyNumber);\n\n if (isNaN(number)) {\n return number;\n }\n\n return number < 0 ? Math.ceil(number) : Math.floor(number);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\n\nexport default function addMilliseconds(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var timestamp = toDate(dirtyDate).getTime();\n var amount = toInteger(dirtyAmount);\n return new Date(timestamp + amount);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subMilliseconds\n * @category Millisecond Helpers\n * @summary Subtract the specified number of milliseconds from the given date.\n *\n * @description\n * Subtract the specified number of milliseconds from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 750 milliseconds from 10 July 2014 12:45:30.000:\n * const result = subMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:29.250\n */\n\nexport default function subMilliseconds(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMilliseconds(dirtyDate, -amount);\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_DAY = 86400000; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCDayOfYear(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var timestamp = date.getTime();\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n var startOfYearTimestamp = date.getTime();\n var difference = timestamp - startOfYearTimestamp;\n return Math.floor(difference / MILLISECONDS_IN_DAY) + 1;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCISOWeek(dirtyDate) {\n requiredArgs(1, arguments);\n var weekStartsOn = 1;\n var date = toDate(dirtyDate);\n var day = date.getUTCDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setUTCDate(date.getUTCDate() - diff);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCISOWeekYear(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var year = date.getUTCFullYear();\n var fourthOfJanuaryOfNextYear = new Date(0);\n fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4);\n fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0);\n var startOfNextYear = startOfUTCISOWeek(fourthOfJanuaryOfNextYear);\n var fourthOfJanuaryOfThisYear = new Date(0);\n fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4);\n fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0);\n var startOfThisYear = startOfUTCISOWeek(fourthOfJanuaryOfThisYear);\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}","import getUTCISOWeekYear from \"../getUTCISOWeekYear/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCISOWeekYear(dirtyDate) {\n requiredArgs(1, arguments);\n var year = getUTCISOWeekYear(dirtyDate);\n var fourthOfJanuary = new Date(0);\n fourthOfJanuary.setUTCFullYear(year, 0, 4);\n fourthOfJanuary.setUTCHours(0, 0, 0, 0);\n var date = startOfUTCISOWeek(fourthOfJanuary);\n return date;\n}","import toDate from \"../../toDate/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport startOfUTCISOWeekYear from \"../startOfUTCISOWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCISOWeek(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var diff = startOfUTCISOWeek(date).getTime() - startOfUTCISOWeekYear(date).getTime(); // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCWeek(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn;\n var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n var date = toDate(dirtyDate);\n var day = date.getUTCDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setUTCDate(date.getUTCDate() - diff);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport toInteger from \"../toInteger/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCWeekYear(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var year = date.getUTCFullYear();\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeFirstWeekContainsDate = locale && locale.options && locale.options.firstWeekContainsDate;\n var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n\n var firstWeekOfNextYear = new Date(0);\n firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate);\n firstWeekOfNextYear.setUTCHours(0, 0, 0, 0);\n var startOfNextYear = startOfUTCWeek(firstWeekOfNextYear, dirtyOptions);\n var firstWeekOfThisYear = new Date(0);\n firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate);\n firstWeekOfThisYear.setUTCHours(0, 0, 0, 0);\n var startOfThisYear = startOfUTCWeek(firstWeekOfThisYear, dirtyOptions);\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}","import getUTCWeekYear from \"../getUTCWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport toInteger from \"../toInteger/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCWeekYear(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeFirstWeekContainsDate = locale && locale.options && locale.options.firstWeekContainsDate;\n var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate);\n var year = getUTCWeekYear(dirtyDate, dirtyOptions);\n var firstWeek = new Date(0);\n firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setUTCHours(0, 0, 0, 0);\n var date = startOfUTCWeek(firstWeek, dirtyOptions);\n return date;\n}","import toDate from \"../../toDate/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport startOfUTCWeekYear from \"../startOfUTCWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCWeek(dirtyDate, options) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var diff = startOfUTCWeek(date, options).getTime() - startOfUTCWeekYear(date, options).getTime(); // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","export default function addLeadingZeros(number, targetLength) {\n var sign = number < 0 ? '-' : '';\n var output = Math.abs(number).toString();\n\n while (output.length < targetLength) {\n output = '0' + output;\n }\n\n return sign + output;\n}","import addLeadingZeros from \"../../addLeadingZeros/index.js\";\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | |\n * | d | Day of month | D | |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | m | Minute | M | Month |\n * | s | Second | S | Fraction of second |\n * | y | Year (abs) | Y | |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nvar formatters = {\n // Year\n y: function (date, token) {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var year = signedYear > 0 ? signedYear : 1 - signedYear;\n return addLeadingZeros(token === 'yy' ? year % 100 : year, token.length);\n },\n // Month\n M: function (date, token) {\n var month = date.getUTCMonth();\n return token === 'M' ? String(month + 1) : addLeadingZeros(month + 1, 2);\n },\n // Day of the month\n d: function (date, token) {\n return addLeadingZeros(date.getUTCDate(), token.length);\n },\n // AM or PM\n a: function (date, token) {\n var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? 'pm' : 'am';\n\n switch (token) {\n case 'a':\n case 'aa':\n return dayPeriodEnumValue.toUpperCase();\n\n case 'aaa':\n return dayPeriodEnumValue;\n\n case 'aaaaa':\n return dayPeriodEnumValue[0];\n\n case 'aaaa':\n default:\n return dayPeriodEnumValue === 'am' ? 'a.m.' : 'p.m.';\n }\n },\n // Hour [1-12]\n h: function (date, token) {\n return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length);\n },\n // Hour [0-23]\n H: function (date, token) {\n return addLeadingZeros(date.getUTCHours(), token.length);\n },\n // Minute\n m: function (date, token) {\n return addLeadingZeros(date.getUTCMinutes(), token.length);\n },\n // Second\n s: function (date, token) {\n return addLeadingZeros(date.getUTCSeconds(), token.length);\n },\n // Fraction of second\n S: function (date, token) {\n var numberOfDigits = token.length;\n var milliseconds = date.getUTCMilliseconds();\n var fractionalSeconds = Math.floor(milliseconds * Math.pow(10, numberOfDigits - 3));\n return addLeadingZeros(fractionalSeconds, token.length);\n }\n};\nexport default formatters;","import getUTCDayOfYear from \"../../../_lib/getUTCDayOfYear/index.js\";\nimport getUTCISOWeek from \"../../../_lib/getUTCISOWeek/index.js\";\nimport getUTCISOWeekYear from \"../../../_lib/getUTCISOWeekYear/index.js\";\nimport getUTCWeek from \"../../../_lib/getUTCWeek/index.js\";\nimport getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport addLeadingZeros from \"../../addLeadingZeros/index.js\";\nimport lightFormatters from \"../lightFormatters/index.js\";\nvar dayPeriodEnum = {\n am: 'am',\n pm: 'pm',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n};\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nvar formatters = {\n // Era\n G: function (date, token, localize) {\n var era = date.getUTCFullYear() > 0 ? 1 : 0;\n\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return localize.era(era, {\n width: 'abbreviated'\n });\n // A, B\n\n case 'GGGGG':\n return localize.era(era, {\n width: 'narrow'\n });\n // Anno Domini, Before Christ\n\n case 'GGGG':\n default:\n return localize.era(era, {\n width: 'wide'\n });\n }\n },\n // Year\n y: function (date, token, localize) {\n // Ordinal number\n if (token === 'yo') {\n var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var year = signedYear > 0 ? signedYear : 1 - signedYear;\n return localize.ordinalNumber(year, {\n unit: 'year'\n });\n }\n\n return lightFormatters.y(date, token);\n },\n // Local week-numbering year\n Y: function (date, token, localize, options) {\n var signedWeekYear = getUTCWeekYear(date, options); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear; // Two digit year\n\n if (token === 'YY') {\n var twoDigitYear = weekYear % 100;\n return addLeadingZeros(twoDigitYear, 2);\n } // Ordinal number\n\n\n if (token === 'Yo') {\n return localize.ordinalNumber(weekYear, {\n unit: 'year'\n });\n } // Padding\n\n\n return addLeadingZeros(weekYear, token.length);\n },\n // ISO week-numbering year\n R: function (date, token) {\n var isoWeekYear = getUTCISOWeekYear(date); // Padding\n\n return addLeadingZeros(isoWeekYear, token.length);\n },\n // Extended year. This is a single number designating the year of this calendar system.\n // The main difference between `y` and `u` localizers are B.C. years:\n // | Year | `y` | `u` |\n // |------|-----|-----|\n // | AC 1 | 1 | 1 |\n // | BC 1 | 1 | 0 |\n // | BC 2 | 2 | -1 |\n // Also `yy` always returns the last two digits of a year,\n // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n u: function (date, token) {\n var year = date.getUTCFullYear();\n return addLeadingZeros(year, token.length);\n },\n // Quarter\n Q: function (date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n return String(quarter);\n // 01, 02, 03, 04\n\n case 'QQ':\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n\n case 'Qo':\n return localize.ordinalNumber(quarter, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'QQQ':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'QQQQQ':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'QQQQ':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone quarter\n q: function (date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n return String(quarter);\n // 01, 02, 03, 04\n\n case 'qq':\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n\n case 'qo':\n return localize.ordinalNumber(quarter, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'qqq':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'qqqqq':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'qqqq':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // Month\n M: function (date, token, localize) {\n var month = date.getUTCMonth();\n\n switch (token) {\n case 'M':\n case 'MM':\n return lightFormatters.M(date, token);\n // 1st, 2nd, ..., 12th\n\n case 'Mo':\n return localize.ordinalNumber(month + 1, {\n unit: 'month'\n });\n // Jan, Feb, ..., Dec\n\n case 'MMM':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // J, F, ..., D\n\n case 'MMMMM':\n return localize.month(month, {\n width: 'narrow',\n context: 'formatting'\n });\n // January, February, ..., December\n\n case 'MMMM':\n default:\n return localize.month(month, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone month\n L: function (date, token, localize) {\n var month = date.getUTCMonth();\n\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return String(month + 1);\n // 01, 02, ..., 12\n\n case 'LL':\n return addLeadingZeros(month + 1, 2);\n // 1st, 2nd, ..., 12th\n\n case 'Lo':\n return localize.ordinalNumber(month + 1, {\n unit: 'month'\n });\n // Jan, Feb, ..., Dec\n\n case 'LLL':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // J, F, ..., D\n\n case 'LLLLL':\n return localize.month(month, {\n width: 'narrow',\n context: 'standalone'\n });\n // January, February, ..., December\n\n case 'LLLL':\n default:\n return localize.month(month, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // Local week of year\n w: function (date, token, localize, options) {\n var week = getUTCWeek(date, options);\n\n if (token === 'wo') {\n return localize.ordinalNumber(week, {\n unit: 'week'\n });\n }\n\n return addLeadingZeros(week, token.length);\n },\n // ISO week of year\n I: function (date, token, localize) {\n var isoWeek = getUTCISOWeek(date);\n\n if (token === 'Io') {\n return localize.ordinalNumber(isoWeek, {\n unit: 'week'\n });\n }\n\n return addLeadingZeros(isoWeek, token.length);\n },\n // Day of the month\n d: function (date, token, localize) {\n if (token === 'do') {\n return localize.ordinalNumber(date.getUTCDate(), {\n unit: 'date'\n });\n }\n\n return lightFormatters.d(date, token);\n },\n // Day of year\n D: function (date, token, localize) {\n var dayOfYear = getUTCDayOfYear(date);\n\n if (token === 'Do') {\n return localize.ordinalNumber(dayOfYear, {\n unit: 'dayOfYear'\n });\n }\n\n return addLeadingZeros(dayOfYear, token.length);\n },\n // Day of week\n E: function (date, token, localize) {\n var dayOfWeek = date.getUTCDay();\n\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'EEEEE':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'EEEEEE':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'EEEE':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Local day of week\n e: function (date, token, localize, options) {\n var dayOfWeek = date.getUTCDay();\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n\n switch (token) {\n // Numerical value (Nth day of week with current locale or weekStartsOn)\n case 'e':\n return String(localDayOfWeek);\n // Padded numerical value\n\n case 'ee':\n return addLeadingZeros(localDayOfWeek, 2);\n // 1st, 2nd, ..., 7th\n\n case 'eo':\n return localize.ordinalNumber(localDayOfWeek, {\n unit: 'day'\n });\n\n case 'eee':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'eeeee':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'eeeeee':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'eeee':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone local day of week\n c: function (date, token, localize, options) {\n var dayOfWeek = date.getUTCDay();\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n\n switch (token) {\n // Numerical value (same as in `e`)\n case 'c':\n return String(localDayOfWeek);\n // Padded numerical value\n\n case 'cc':\n return addLeadingZeros(localDayOfWeek, token.length);\n // 1st, 2nd, ..., 7th\n\n case 'co':\n return localize.ordinalNumber(localDayOfWeek, {\n unit: 'day'\n });\n\n case 'ccc':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // T\n\n case 'ccccc':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tu\n\n case 'cccccc':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'standalone'\n });\n // Tuesday\n\n case 'cccc':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // ISO day of week\n i: function (date, token, localize) {\n var dayOfWeek = date.getUTCDay();\n var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n\n switch (token) {\n // 2\n case 'i':\n return String(isoDayOfWeek);\n // 02\n\n case 'ii':\n return addLeadingZeros(isoDayOfWeek, token.length);\n // 2nd\n\n case 'io':\n return localize.ordinalNumber(isoDayOfWeek, {\n unit: 'day'\n });\n // Tue\n\n case 'iii':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'iiiii':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'iiiiii':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'iiii':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // AM or PM\n a: function (date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n\n switch (token) {\n case 'a':\n case 'aa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'aaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n }).toLowerCase();\n\n case 'aaaaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaa':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // AM, PM, midnight, noon\n b: function (date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue;\n\n if (hours === 12) {\n dayPeriodEnumValue = dayPeriodEnum.noon;\n } else if (hours === 0) {\n dayPeriodEnumValue = dayPeriodEnum.midnight;\n } else {\n dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n }\n\n switch (token) {\n case 'b':\n case 'bb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'bbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n }).toLowerCase();\n\n case 'bbbbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbb':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // in the morning, in the afternoon, in the evening, at night\n B: function (date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue;\n\n if (hours >= 17) {\n dayPeriodEnumValue = dayPeriodEnum.evening;\n } else if (hours >= 12) {\n dayPeriodEnumValue = dayPeriodEnum.afternoon;\n } else if (hours >= 4) {\n dayPeriodEnumValue = dayPeriodEnum.morning;\n } else {\n dayPeriodEnumValue = dayPeriodEnum.night;\n }\n\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'BBBBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBB':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Hour [1-12]\n h: function (date, token, localize) {\n if (token === 'ho') {\n var hours = date.getUTCHours() % 12;\n if (hours === 0) hours = 12;\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return lightFormatters.h(date, token);\n },\n // Hour [0-23]\n H: function (date, token, localize) {\n if (token === 'Ho') {\n return localize.ordinalNumber(date.getUTCHours(), {\n unit: 'hour'\n });\n }\n\n return lightFormatters.H(date, token);\n },\n // Hour [0-11]\n K: function (date, token, localize) {\n var hours = date.getUTCHours() % 12;\n\n if (token === 'Ko') {\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n // Hour [1-24]\n k: function (date, token, localize) {\n var hours = date.getUTCHours();\n if (hours === 0) hours = 24;\n\n if (token === 'ko') {\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n // Minute\n m: function (date, token, localize) {\n if (token === 'mo') {\n return localize.ordinalNumber(date.getUTCMinutes(), {\n unit: 'minute'\n });\n }\n\n return lightFormatters.m(date, token);\n },\n // Second\n s: function (date, token, localize) {\n if (token === 'so') {\n return localize.ordinalNumber(date.getUTCSeconds(), {\n unit: 'second'\n });\n }\n\n return lightFormatters.s(date, token);\n },\n // Fraction of second\n S: function (date, token) {\n return lightFormatters.S(date, token);\n },\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n if (timezoneOffset === 0) {\n return 'Z';\n }\n\n switch (token) {\n // Hours and optional minutes\n case 'X':\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n\n case 'XXXX':\n case 'XX':\n // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n\n case 'XXXXX':\n case 'XXX': // Hours and minutes with `:` delimiter\n\n default:\n return formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Hours and optional minutes\n case 'x':\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n\n case 'xxxx':\n case 'xx':\n // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n\n case 'xxxxx':\n case 'xxx': // Hours and minutes with `:` delimiter\n\n default:\n return formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (GMT)\n O: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Short\n case 'O':\n case 'OO':\n case 'OOO':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n // Long\n\n case 'OOOO':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (specific non-location)\n z: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Short\n case 'z':\n case 'zz':\n case 'zzz':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n // Long\n\n case 'zzzz':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':');\n }\n },\n // Seconds timestamp\n t: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timestamp = Math.floor(originalDate.getTime() / 1000);\n return addLeadingZeros(timestamp, token.length);\n },\n // Milliseconds timestamp\n T: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timestamp = originalDate.getTime();\n return addLeadingZeros(timestamp, token.length);\n }\n};\n\nfunction formatTimezoneShort(offset, dirtyDelimiter) {\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = Math.floor(absOffset / 60);\n var minutes = absOffset % 60;\n\n if (minutes === 0) {\n return sign + String(hours);\n }\n\n var delimiter = dirtyDelimiter || '';\n return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) {\n if (offset % 60 === 0) {\n var sign = offset > 0 ? '-' : '+';\n return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n }\n\n return formatTimezone(offset, dirtyDelimiter);\n}\n\nfunction formatTimezone(offset, dirtyDelimiter) {\n var delimiter = dirtyDelimiter || '';\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = addLeadingZeros(Math.floor(absOffset / 60), 2);\n var minutes = addLeadingZeros(absOffset % 60, 2);\n return sign + hours + delimiter + minutes;\n}\n\nexport default formatters;","function dateLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'P':\n return formatLong.date({\n width: 'short'\n });\n\n case 'PP':\n return formatLong.date({\n width: 'medium'\n });\n\n case 'PPP':\n return formatLong.date({\n width: 'long'\n });\n\n case 'PPPP':\n default:\n return formatLong.date({\n width: 'full'\n });\n }\n}\n\nfunction timeLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'p':\n return formatLong.time({\n width: 'short'\n });\n\n case 'pp':\n return formatLong.time({\n width: 'medium'\n });\n\n case 'ppp':\n return formatLong.time({\n width: 'long'\n });\n\n case 'pppp':\n default:\n return formatLong.time({\n width: 'full'\n });\n }\n}\n\nfunction dateTimeLongFormatter(pattern, formatLong) {\n var matchResult = pattern.match(/(P+)(p+)?/) || [];\n var datePattern = matchResult[1];\n var timePattern = matchResult[2];\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n\n var dateTimeFormat;\n\n switch (datePattern) {\n case 'P':\n dateTimeFormat = formatLong.dateTime({\n width: 'short'\n });\n break;\n\n case 'PP':\n dateTimeFormat = formatLong.dateTime({\n width: 'medium'\n });\n break;\n\n case 'PPP':\n dateTimeFormat = formatLong.dateTime({\n width: 'long'\n });\n break;\n\n case 'PPPP':\n default:\n dateTimeFormat = formatLong.dateTime({\n width: 'full'\n });\n break;\n }\n\n return dateTimeFormat.replace('{{date}}', dateLongFormatter(datePattern, formatLong)).replace('{{time}}', timeLongFormatter(timePattern, formatLong));\n}\n\nvar longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter\n};\nexport default longFormatters;","/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport default function getTimezoneOffsetInMilliseconds(date) {\n var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n utcDate.setUTCFullYear(date.getFullYear());\n return date.getTime() - utcDate.getTime();\n}","var protectedDayOfYearTokens = ['D', 'DD'];\nvar protectedWeekYearTokens = ['YY', 'YYYY'];\nexport function isProtectedDayOfYearToken(token) {\n return protectedDayOfYearTokens.indexOf(token) !== -1;\n}\nexport function isProtectedWeekYearToken(token) {\n return protectedWeekYearTokens.indexOf(token) !== -1;\n}\nexport function throwProtectedError(token, format, input) {\n if (token === 'YYYY') {\n throw new RangeError(\"Use `yyyy` instead of `YYYY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n } else if (token === 'YY') {\n throw new RangeError(\"Use `yy` instead of `YY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n } else if (token === 'D') {\n throw new RangeError(\"Use `d` instead of `D` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n } else if (token === 'DD') {\n throw new RangeError(\"Use `dd` instead of `DD` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n }\n}","import isValid from \"../isValid/index.js\";\nimport defaultLocale from \"../locale/en-US/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport formatters from \"../_lib/format/formatters/index.js\";\nimport longFormatters from \"../_lib/format/longFormatters/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport { isProtectedDayOfYearToken, isProtectedWeekYearToken, throwProtectedError } from \"../_lib/protectedTokens/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\"; // This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\n\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g; // This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\n\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n/**\n * @name format\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://git.io/fxCyr\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 9 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 9 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Sun | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | a..aa | AM, PM | |\n * | | aaa | am, pm | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | |\n * | | bbb | am, pm, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 |\n * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 04/29/1453 | 7 |\n * | | PP | Apr 29, 1453 | 7 |\n * | | PPP | April 29th, 1453 | 7 |\n * | | PPPP | Friday, April 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 |\n * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | April 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear}\n * and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n * so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://git.io/fxCyr\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://git.io/fxCyr\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The second argument is now required for the sake of explicitness.\n *\n * ```javascript\n * // Before v2.0.0\n * format(new Date(2016, 0, 1))\n *\n * // v2.0.0 onward\n * format(new Date(2016, 0, 1), \"yyyy-MM-dd'T'HH:mm:ss.SSSxxx\")\n * ```\n *\n * - New format string API for `format` function\n * which is based on [Unicode Technical Standard #35](https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table).\n * See [this post](https://blog.date-fns.org/post/unicode-tokens-in-date-fns-v2-sreatyki91jg) for more details.\n *\n * - Characters are now escaped using single quote symbols (`'`) instead of square brackets.\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n * see: https://git.io/fxCyr\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n * see: https://git.io/fxCyr\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * var result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * var result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * var result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\n\nexport default function format(dirtyDate, dirtyFormatStr, dirtyOptions) {\n requiredArgs(2, arguments);\n var formatStr = String(dirtyFormatStr);\n var options = dirtyOptions || {};\n var locale = options.locale || defaultLocale;\n var localeFirstWeekContainsDate = locale.options && locale.options.firstWeekContainsDate;\n var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n\n var localeWeekStartsOn = locale.options && locale.options.weekStartsOn;\n var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n if (!locale.localize) {\n throw new RangeError('locale must contain localize property');\n }\n\n if (!locale.formatLong) {\n throw new RangeError('locale must contain formatLong property');\n }\n\n var originalDate = toDate(dirtyDate);\n\n if (!isValid(originalDate)) {\n throw new RangeError('Invalid time value');\n } // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376\n\n\n var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate);\n var utcDate = subMilliseconds(originalDate, timezoneOffset);\n var formatterOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale,\n _originalDate: originalDate\n };\n var result = formatStr.match(longFormattingTokensRegExp).map(function (substring) {\n var firstCharacter = substring[0];\n\n if (firstCharacter === 'p' || firstCharacter === 'P') {\n var longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong, formatterOptions);\n }\n\n return substring;\n }).join('').match(formattingTokensRegExp).map(function (substring) {\n // Replace two single quote characters with one single quote character\n if (substring === \"''\") {\n return \"'\";\n }\n\n var firstCharacter = substring[0];\n\n if (firstCharacter === \"'\") {\n return cleanEscapedString(substring);\n }\n\n var formatter = formatters[firstCharacter];\n\n if (formatter) {\n if (!options.useAdditionalWeekYearTokens && isProtectedWeekYearToken(substring)) {\n throwProtectedError(substring, dirtyFormatStr, dirtyDate);\n }\n\n if (!options.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(substring)) {\n throwProtectedError(substring, dirtyFormatStr, dirtyDate);\n }\n\n return formatter(utcDate, substring, locale.localize, formatterOptions);\n }\n\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n }\n\n return substring;\n }).join('');\n return result;\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}","var LAYOUT_HORIZONTAL=\"horizontal\",LAYOUT_VERTICAL=\"vertical\",__vue_module__={name:\"multipane\",props:{layout:{type:String,default:LAYOUT_VERTICAL}},data:function(){return{isResizing:!1}},computed:{classnames:function(){return[\"multipane\",\"layout-\"+this.layout.slice(0,1),this.isResizing?\"is-resizing\":\"\"]},cursor:function(){return this.isResizing?this.layout==LAYOUT_VERTICAL?\"col-resize\":\"row-resize\":\"\"},userSelect:function(){return this.isResizing?\"none\":\"\"}},methods:{onMouseDown:function(e){var t=e.target,i=e.pageX,n=e.pageY;if(t.className&&t.className.match(\"multipane-resizer\")){var s=this,o=s.$el,a=s.layout,u=t.previousElementSibling,r=u.offsetWidth,l=u.offsetHeight,d=!!(u.style.width+\"\").match(\"%\"),c=window.addEventListener,p=window.removeEventListener,m=function(e,t){if(void 0===t&&(t=0),a==LAYOUT_VERTICAL){var i=o.clientWidth,n=e+t;return u.style.width=d?n/i*100+\"%\":n+\"px\"}if(a==LAYOUT_HORIZONTAL){var s=o.clientHeight,r=e+t;return u.style.height=d?r/s*100+\"%\":r+\"px\"}};s.isResizing=!0;var _=m();s.$emit(\"paneResizeStart\",u,t,_);var h=function(e){var o=e.pageX,d=e.pageY;_=a==LAYOUT_VERTICAL?m(r,o-i):m(l,d-n),s.$emit(\"paneResize\",u,t,_)},f=function(){_=m(a==LAYOUT_VERTICAL?u.clientWidth:u.clientHeight),s.isResizing=!1,p(\"mousemove\",h),p(\"mouseup\",f),s.$emit(\"paneResizeStop\",u,t,_)};c(\"mousemove\",h),c(\"mouseup\",f)}}}};!function(){if(\"undefined\"!=typeof document){var e=document.head||document.getElementsByTagName(\"head\")[0],t=document.createElement(\"style\"),i=\".multipane { display: flex; } .multipane.layout-h { flex-direction: column; } .multipane.layout-v { flex-direction: row; } .multipane > div { position: relative; z-index: 1; } .multipane-resizer { display: block; position: relative; z-index: 2; } .layout-h > .multipane-resizer { width: 100%; height: 10px; margin-top: -10px; top: 5px; cursor: row-resize; } .layout-v > .multipane-resizer { width: 10px; height: 100%; margin-left: -10px; left: 5px; cursor: col-resize; } \";t.type=\"text/css\",t.styleSheet?t.styleSheet.cssText=i:t.appendChild(document.createTextNode(i)),e.appendChild(t)}}();var __$__vue_module__=Object.assign(__vue_module__,{render:function(){var e=this,t=e.$createElement;return(e._self._c||t)(\"div\",{class:e.classnames,style:{cursor:e.cursor,userSelect:e.userSelect},on:{mousedown:e.onMouseDown}},[e._t(\"default\")],2)},staticRenderFns:[]});__$__vue_module__.prototype=__vue_module__.prototype,function(){if(\"undefined\"!=typeof document){var e=document.head||document.getElementsByTagName(\"head\")[0],t=document.createElement(\"style\");t.type=\"text/css\",t.styleSheet?t.styleSheet.cssText=\"\":t.appendChild(document.createTextNode(\"\")),e.appendChild(t)}}();var MultipaneResizer={render:function(){var e=this,t=e.$createElement;return(e._self._c||t)(\"div\",{staticClass:\"multipane-resizer\"},[e._t(\"default\")],2)},staticRenderFns:[]};\"undefined\"!=typeof window&&window.Vue&&(window.Vue.component(\"multipane\",__$__vue_module__),window.Vue.component(\"multipane-resizer\",MultipaneResizer));export{__$__vue_module__ as Multipane,MultipaneResizer};\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","export default function _classExtractFieldDescriptor(receiver, privateMap, action) {\n if (!privateMap.has(receiver)) {\n throw new TypeError(\"attempted to \" + action + \" private field on non-instance\");\n }\n\n return privateMap.get(receiver);\n}","export default function _classApplyDescriptorGet(receiver, descriptor) {\n if (descriptor.get) {\n return descriptor.get.call(receiver);\n }\n\n return descriptor.value;\n}","import classApplyDescriptorGet from \"./classApplyDescriptorGet.js\";\nimport classExtractFieldDescriptor from \"./classExtractFieldDescriptor.js\";\nexport default function _classPrivateFieldGet(receiver, privateMap) {\n var descriptor = classExtractFieldDescriptor(receiver, privateMap, \"get\");\n return classApplyDescriptorGet(receiver, descriptor);\n}","export default function _checkPrivateRedeclaration(obj, privateCollection) {\n if (privateCollection.has(obj)) {\n throw new TypeError(\"Cannot initialize the same private elements twice on an object\");\n }\n}","import checkPrivateRedeclaration from \"./checkPrivateRedeclaration.js\";\nexport default function _classPrivateFieldInitSpec(obj, privateMap, value) {\n checkPrivateRedeclaration(obj, privateMap);\n privateMap.set(obj, value);\n}","export default function _classApplyDescriptorSet(receiver, descriptor, value) {\n if (descriptor.set) {\n descriptor.set.call(receiver, value);\n } else {\n if (!descriptor.writable) {\n throw new TypeError(\"attempted to set read only private field\");\n }\n\n descriptor.value = value;\n }\n}","import classApplyDescriptorSet from \"./classApplyDescriptorSet.js\";\nimport classExtractFieldDescriptor from \"./classExtractFieldDescriptor.js\";\nexport default function _classPrivateFieldSet(receiver, privateMap, value) {\n var descriptor = classExtractFieldDescriptor(receiver, privateMap, \"set\");\n classApplyDescriptorSet(receiver, descriptor, value);\n return value;\n}","import unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nexport default function _createForOfIteratorHelper(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (!it) {\n if (Array.isArray(o) || (it = unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n\n var F = function F() {};\n\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = it.call(o);\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it[\"return\"] != null) it[\"return\"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}","export default function _readOnlyError(name) {\n throw new TypeError(\"\\\"\" + name + \"\\\" is read-only\");\n}","import _typeof from \"./typeof.js\";\nexport default function _regeneratorRuntime() {\n \"use strict\";\n /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n\n _regeneratorRuntime = function _regeneratorRuntime() {\n return exports;\n };\n\n var exports = {},\n Op = Object.prototype,\n hasOwn = Op.hasOwnProperty,\n $Symbol = \"function\" == typeof Symbol ? Symbol : {},\n iteratorSymbol = $Symbol.iterator || \"@@iterator\",\n asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\",\n toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n return Object.defineProperty(obj, key, {\n value: value,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }), obj[key];\n }\n\n try {\n define({}, \"\");\n } catch (err) {\n define = function define(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator,\n generator = Object.create(protoGenerator.prototype),\n context = new Context(tryLocsList || []);\n return generator._invoke = function (innerFn, self, context) {\n var state = \"suspendedStart\";\n return function (method, arg) {\n if (\"executing\" === state) throw new Error(\"Generator is already running\");\n\n if (\"completed\" === state) {\n if (\"throw\" === method) throw arg;\n return doneResult();\n }\n\n for (context.method = method, context.arg = arg;;) {\n var delegate = context.delegate;\n\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (\"next\" === context.method) context.sent = context._sent = context.arg;else if (\"throw\" === context.method) {\n if (\"suspendedStart\" === state) throw state = \"completed\", context.arg;\n context.dispatchException(context.arg);\n } else \"return\" === context.method && context.abrupt(\"return\", context.arg);\n state = \"executing\";\n var record = tryCatch(innerFn, self, context);\n\n if (\"normal\" === record.type) {\n if (state = context.done ? \"completed\" : \"suspendedYield\", record.arg === ContinueSentinel) continue;\n return {\n value: record.arg,\n done: context.done\n };\n }\n\n \"throw\" === record.type && (state = \"completed\", context.method = \"throw\", context.arg = record.arg);\n }\n };\n }(innerFn, self, context), generator;\n }\n\n function tryCatch(fn, obj, arg) {\n try {\n return {\n type: \"normal\",\n arg: fn.call(obj, arg)\n };\n } catch (err) {\n return {\n type: \"throw\",\n arg: err\n };\n }\n }\n\n exports.wrap = wrap;\n var ContinueSentinel = {};\n\n function Generator() {}\n\n function GeneratorFunction() {}\n\n function GeneratorFunctionPrototype() {}\n\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n var getProto = Object.getPrototypeOf,\n NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype);\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\n\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function (method) {\n define(prototype, method, function (arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n\n if (\"throw\" !== record.type) {\n var result = record.arg,\n value = result.value;\n return value && \"object\" == _typeof(value) && hasOwn.call(value, \"__await\") ? PromiseImpl.resolve(value.__await).then(function (value) {\n invoke(\"next\", value, resolve, reject);\n }, function (err) {\n invoke(\"throw\", err, resolve, reject);\n }) : PromiseImpl.resolve(value).then(function (unwrapped) {\n result.value = unwrapped, resolve(result);\n }, function (error) {\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n\n reject(record.arg);\n }\n\n var previousPromise;\n\n this._invoke = function (method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function (resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n };\n }\n\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n\n if (undefined === method) {\n if (context.delegate = null, \"throw\" === context.method) {\n if (delegate.iterator[\"return\"] && (context.method = \"return\", context.arg = undefined, maybeInvokeDelegate(delegate, context), \"throw\" === context.method)) return ContinueSentinel;\n context.method = \"throw\", context.arg = new TypeError(\"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n if (\"throw\" === record.type) return context.method = \"throw\", context.arg = record.arg, context.delegate = null, ContinueSentinel;\n var info = record.arg;\n return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, \"return\" !== context.method && (context.method = \"next\", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = \"throw\", context.arg = new TypeError(\"iterator result is not an object\"), context.delegate = null, ContinueSentinel);\n }\n\n function pushTryEntry(locs) {\n var entry = {\n tryLoc: locs[0]\n };\n 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\", delete record.arg, entry.completion = record;\n }\n\n function Context(tryLocsList) {\n this.tryEntries = [{\n tryLoc: \"root\"\n }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0);\n }\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) return iteratorMethod.call(iterable);\n if (\"function\" == typeof iterable.next) return iterable;\n\n if (!isNaN(iterable.length)) {\n var i = -1,\n next = function next() {\n for (; ++i < iterable.length;) {\n if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next;\n }\n\n return next.value = undefined, next.done = !0, next;\n };\n\n return next.next = next;\n }\n }\n\n return {\n next: doneResult\n };\n }\n\n function doneResult() {\n return {\n value: undefined,\n done: !0\n };\n }\n\n return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, \"constructor\", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \"GeneratorFunction\"), exports.isGeneratorFunction = function (genFun) {\n var ctor = \"function\" == typeof genFun && genFun.constructor;\n return !!ctor && (ctor === GeneratorFunction || \"GeneratorFunction\" === (ctor.displayName || ctor.name));\n }, exports.mark = function (genFun) {\n return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, \"GeneratorFunction\")), genFun.prototype = Object.create(Gp), genFun;\n }, exports.awrap = function (arg) {\n return {\n __await: arg\n };\n }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n void 0 === PromiseImpl && (PromiseImpl = Promise);\n var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);\n return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {\n return result.done ? result.value : iter.next();\n });\n }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, \"Generator\"), define(Gp, iteratorSymbol, function () {\n return this;\n }), define(Gp, \"toString\", function () {\n return \"[object Generator]\";\n }), exports.keys = function (object) {\n var keys = [];\n\n for (var key in object) {\n keys.push(key);\n }\n\n return keys.reverse(), function next() {\n for (; keys.length;) {\n var key = keys.pop();\n if (key in object) return next.value = key, next.done = !1, next;\n }\n\n return next.done = !0, next;\n };\n }, exports.values = values, Context.prototype = {\n constructor: Context,\n reset: function reset(skipTempReset) {\n if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) {\n \"t\" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined);\n }\n },\n stop: function stop() {\n this.done = !0;\n var rootRecord = this.tryEntries[0].completion;\n if (\"throw\" === rootRecord.type) throw rootRecord.arg;\n return this.rval;\n },\n dispatchException: function dispatchException(exception) {\n if (this.done) throw exception;\n var context = this;\n\n function handle(loc, caught) {\n return record.type = \"throw\", record.arg = exception, context.next = loc, caught && (context.method = \"next\", context.arg = undefined), !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i],\n record = entry.completion;\n if (\"root\" === entry.tryLoc) return handle(\"end\");\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\"),\n hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n } else {\n if (!hasFinally) throw new Error(\"try statement without catch or finally\");\n if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n }\n }\n }\n },\n abrupt: function abrupt(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n finallyEntry && (\"break\" === type || \"continue\" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null);\n var record = finallyEntry ? finallyEntry.completion : {};\n return record.type = type, record.arg = arg, finallyEntry ? (this.method = \"next\", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record);\n },\n complete: function complete(record, afterLoc) {\n if (\"throw\" === record.type) throw record.arg;\n return \"break\" === record.type || \"continue\" === record.type ? this.next = record.arg : \"return\" === record.type ? (this.rval = this.arg = record.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel;\n },\n finish: function finish(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel;\n }\n },\n \"catch\": function _catch(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n\n if (\"throw\" === record.type) {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n\n return thrown;\n }\n }\n\n throw new Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(iterable, resultName, nextLoc) {\n return this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n }, \"next\" === this.method && (this.arg = undefined), ContinueSentinel;\n }\n }, exports;\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}"],"names":["global","factory","exports","this","adapters","logger","self","console","WebSocket","log","enabled","_adapters$logger","_len","arguments","length","messages","Array","_key","push","Date","now","apply","concat","_typeof","Symbol","iterator","obj","constructor","prototype","classCallCheck","instance","Constructor","TypeError","createClass","defineProperties","target","props","i","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","getTime","secondsSince","time","clamp","number","min","max","Math","ConnectionMonitor","connection","visibilityDidChange","bind","reconnectAttempts","start","isRunning","startedAt","stoppedAt","startPolling","addEventListener","getPollInterval","stop","stopPolling","removeEventListener","recordPing","pingedAt","recordConnect","disconnectedAt","recordDisconnect","poll","clearTimeout","pollTimeout","_this","setTimeout","reconnectIfStale","_constructor$pollInte","pollInterval","multiplier","interval","round","connectionIsStale","staleThreshold","disconnectedRecently","reopen","_this2","document","visibilityState","isOpen","INTERNAL","message_types","welcome","disconnect","ping","confirmation","rejection","disconnect_reasons","unauthorized","invalid_request","server_restart","default_mount_path","protocols","supportedProtocols","slice","indexOf","Connection","consumer","open","subscriptions","monitor","disconnected","send","data","webSocket","JSON","stringify","isActive","getState","uninstallEventHandlers","url","installEventHandlers","close","_ref","undefined","allowReconnect","error","reopenDelay","getProtocol","protocol","isState","isProtocolSupported","call","states","state","readyState","toLowerCase","eventName","events","handler","message","event","_JSON$parse","parse","identifier","reason","reconnect","type","reload","confirmSubscription","notify","reject","notifyAll","willAttemptReconnect","extend","object","properties","value","Subscription","params","mixin","perform","action","command","unsubscribe","remove","SubscriptionGuarantor","pendingSubscriptions","guarantee","subscription","startGuaranteeing","forget","filter","s","stopGuaranteeing","retrySubscribing","retryTimeout","subscribe","map","Subscriptions","guarantor","create","channelName","channel","add","ensureActiveConnection","findAll","sendCommand","callbackName","_this3","args","_len2","_key2","_this4","Consumer","_url","connect","get","createWebSocketURL","test","a","createElement","href","replace","createConsumer","getConfig","name","element","head","querySelector","getAttribute","ace","define","e","t","n","p","toLocaleString","r","EventEmitter","o","u","Range","RangeList","f","HashHandler","l","Tokenizer","c","h","CURRENT_WORD","session","getTextRange","getWordRange","SELECTION","CURRENT_LINE","getLine","getCursorPosition","row","PREV_LINE","LINE_INDEX","LINE_NUMBER","SOFT_TABS","getUseSoftTabs","TAB_SIZE","getTabSize","CLIPBOARD","getText","FILENAME","exec","FILEPATH","FILENAME_BASE","DIRECTORY","WORKSPACE_NAME","FULLNAME","BLOCK_COMMENT_START","$mode","blockComment","BLOCK_COMMENT_END","end","LINE_COMMENT","lineCommentStart","CURRENT_YEAR","year","CURRENT_YEAR_SHORT","CURRENT_MONTH","month","CURRENT_MONTH_NAME","CURRENT_MONTH_NAME_SHORT","CURRENT_DATE","day","CURRENT_DAY_NAME","weekday","CURRENT_DAY_NAME_SHORT","CURRENT_HOUR","hour","hour12","CURRENT_MINUTE","minute","CURRENT_SECOND","second","SELECTED_TEXT","d","snippetMap","snippetNameMap","implement","getTokenizer","$tokenizer","createTokenizer","substr","tabstopId","parseInt","text","regex","onMatch","fmtString","guard","flag","next","shift","unshift","token","merge","snippetVar","split","choices","formatString","expectElse","ifEnd","elseEnd","changeCase","local","formatStringVar","formatFunction","tokenizeTmSnippet","getLineTokens","tokens","getVariableValue","variables","__","hasOwnProperty","tmStrFormat","fmt","RegExp","resolveVariables","toUpperCase","join","tmFormatFunction","insertSnippetForSelection","lastIndexOf","getTabString","match","column","forEach","index","parents","some","keys","m","splice","g","y","b","w","getSelectionRange","E","S","v","x","inVirtualSelectionMode","selection","addTabstops","insertSnippet","forEachSelection","keepOrder","tabstopManager","tabNext","$getScope","$id","pop","inlinePhp","substring","getActiveScopes","includeScopes","expandWithTab","expandSnippetForSelection","findMatchingSnippet","dryRun","doc","removeInLine","replaceBefore","replaceAfter","M__","matchBefore","T__","matchAfter","content","startRe","endRe","triggerRe","endTriggerRe","register","scope","unregister","prefix","tabTrigger","body","isArray","trigger","escapeRegExp","endTrigger","endGuard","_signal","parseSnippetFile","getSnippetByName","$onChange","onChange","$onChangeSelection","delayedCall","onChangeSelection","schedule","$onChangeSession","onChangeSession","$onAfterExec","onAfterExec","attach","ranges","tabstops","$openTabstops","selectedTabstop","editor","on","commands","keyBinding","addKeyboardHandler","keyboardHandler","detach","removeTabstopMarkers","removeListener","removeKeyboardHandler","rangeList","$bias","pointIndex","removeRange","$inChange","getLength","getValue","updateLinkedFields","hasLinkedRanges","firstNonLinked","linked","original","snippetManager","readOnly","lead","anchor","isEmpty","contains","selectTabstop","addTabstopMarkers","cursor","fromOrientedRange","multiSelect","toSingleRange","addRange","clone","execCommand","matches","useLink","getOption","fromPoints","tabstop","addList","markerId","addMarker","removeMarker","bindKeys","Tab","renderer","scrollCursorIntoView","Esc","importCssString","Editor","expandSnippet","VirtualRenderer","$maxLines","setHighlightActiveLine","setShowPrintMargin","setShowGutter","setHighlightGutterLine","$mouseHandler","$focusTimeout","$highlightTagPending","appendChild","style","display","setStyle","setOption","focus","$isFocused","$cursorLayer","restartTimer","opacity","$keepTextAreaAtCursor","highlight","$searchHighlight","clazz","getDocumentPosition","moveToPosition","Infinity","id","setSelectOnHover","scrollTop","setRow","$pos","getRow","$textLayer","childNodes","config","firstRow","selectedNode","removeCssClass","addCssClass","_emit","getHoveredRow","addListener","container","bgTokenizer","$tokenizeRow","className","caption","filterText","matchMask","meta","$updateOnChange","$computeWidth","screenWidth","isTopdown","autoSelect","setData","setValue","stringRepeat","getData","clearSelection","moveCursorTo","hide","show","window","innerHeight","innerWidth","top","$borderSize","$maxPixelHeight","bottom","left","offsetWidth","goTo","getTextLeftOffset","$padding","$imageSize","AcePopup","$singleLineEditor","parForEach","retrievePrecedingIdentifier","reverse","retrieveFollowingIdentifier","getCompletionPrefix","completers","identifierRegexps","autoInsert","exactMatch","gatherCompletionsId","blurListener","changeListener","mousedownListener","mousewheelListener","changeTimer","updateCompletions","tooltipTimer","updateDocTooltip","$init","popup","documentElement","insertMatch","getPopup","openPopup","completions","filtered","setTheme","getTheme","setFontSize","getFontSize","layerConfig","lineHeight","getPixelPosition","base","getBoundingClientRect","offset","scrollLeft","gutterWidth","cancel","off","hideDocTooltip","activated","activeElement","textInput","getElement","relatedTarget","tooltipNode","parentNode","startOperation","completer","getAllRanges","snippet","endOperation","Up","Down","Return","deleteSuffix","PageUp","gotoPageUp","PageDown","gotoPageDown","gatherCompletions","getSession","createAnchor","$insertRight","getCompletions","finished","showPopup","setFilter","cancelContextMenu","getDocTooltip","docText","docHTML","showDocTooltip","margin","pointerEvents","tabIndex","onblur","onclick","onTooltipClick","innerHTML","textContent","right","offsetTop","offsetHeight","isFocused","removeChild","nodeName","rel","destroy","for","$shared","$sharedInstance","once","startCommand","bindKey","all","filterCompletions","sort","$score","localeCompare","score","Autocomplete","FilteredList","abs","getTokenAt","escapeHTML","setCompleters","addCompleter","textCompleter","keyWordCompleter","snippetCompleter","$modes","files","snippetFileId","modes","loadModule","snippets","snippetText","defineOptions","enableBasicAutocompletion","set","addCommand","removeCommand","enableLiveAutocompletion","enableSnippets","require","module","buildDom","placeholder","spellcheck","title","firstChild","setSession","setEditor","searchBox","scroller","searchRange","$syncOptions","$initElements","replaceBox","searchOption","replaceOption","regExpOption","caseSensitiveOption","wholeWordOption","searchInput","replaceInput","searchCounter","activeInput","stopPropagation","srcElement","$searchBarKb","addCommandKeyListener","keyCodeToString","findKeyCommand","stopEvent","find","$closeSearchBarKb","isReplace","checked","getReadOnly","findNext","findPrev","esc","replaceAll","addCommands","win","mac","setSearchRange","searchRangeMarker","setCssClass","$search","$options","re","updateBackMarkers","skipCurrent","backwards","wrap","regExp","caseSensitive","wholeWord","preventScroll","range","updateCounter","positionToIndex","lastIndex","replaceAndFindNext","active","select","SearchBox","Search","TextHighlightRules","constantOtherSymbol","qString","qqString","tString","constantNumericHex","constantNumericBinary","constantNumericDecimal","constantNumericRational","constantNumericComplex","constantNumericFloat","instanceVariable","$keywords","createKeywordMapper","keyword","$rules","defaultToken","stateName","splitRegex","rules","heredoc","indentedHeredoc","comment","qStateWithInterpolation","qStateWithoutInterpolation","sStateWithoutInterpolation","sStateWithInterpolation","rState","include","regex_character_class","normalizeRules","inherits","RubyHighlightRules","checkOutdent","autoOutdent","findMatchingBracket","$getIndent","MatchingBraceOutdent","FoldMode","TokenIterator","indentKeywords","def","unless","until","begin","elsif","rescue","ensure","when","foldingStartMarker","foldingStopMarker","getFoldWidget","getFoldWidgetRange","rubyBlock","openingBracketBlock","closingBracketBlock","getCurrentToken","getCurrentTokenRange","step","stepBackward","stepForward","getCurrentTokenRow","$tokenIndex","$rowTokens","Mode","CstyleBehaviour","HighlightRules","$outdent","$behaviour","foldingRules","getNextLineIndent","getMatching","isDark","cssClass","cssText","ACE_NAMESPACE","requirejs","deps","payload","modules","payloads","trace","_require","parentId","callback","lookup","toString","dep","packagedModule","normalizeModule","moduleName","chunks","charAt","previous","mod","uri","packaged","req","returnValue","exportAce","ns","root","Element","OS","LINUX","MAC","WINDOWS","getOS","isMac","isLinux","_navigator","navigator","os","platform","ua","userAgent","appName","isWin","isIE","parseFloat","isOldIE","isGecko","isMozilla","isOpera","opera","isWebKit","isChrome","isEdge","isAIR","isAndroid","isChromeOS","isIOS","MSStream","isMobile","strictCSP","useragent","XHTML_NS","arr","parent","refs","txt","createTextNode","els","ch","el","options","childIndex","val","setAttribute","getDocumentHead","getElementsByTagName","tag","createElementNS","removeChildren","ownerDocument","createFragment","createDocumentFragment","hasCssClass","classes","toggleCssClass","node","hasCssString","sheets","querySelectorAll","cssCache","insertPendingStyles","cache","item","getRootNode","insertBefore","useStrictCSP","importCssStylsheet","scrollbarWidth","inner","width","minWidth","height","outer","position","overflow","noScrollbar","withScrollbar","clientWidth","computedStyle","getComputedStyle","styles","property","HAS_CSS_ANIMATION","HAS_CSS_TRANSFORMS","HI_DPI","devicePixelRatio","div","transform","animationName","translate","tx","ty","ctor","superCtor","super_","proto","oop","Keys","ret","MODIFIER_KEYS","KEY_MODS","FUNCTION_KEYS","PRINTABLE_KEYS","enter","escape","del","mods","pow","keyCode","keyString","String","fromCharCode","activeListenerOptions","pressedKeys","ts","detectListenerOptionsSupport","createComment","passive","getListenerOptions","EventListener","elem","destroyer","$toDestroy","preventDefault","getButton","ctrlKey","altKey","shiftKey","button","capture","eventHandler","releaseCaptureHandler","onMouseUp","addMouseWheelListener","factor","wheelDeltaX","wheelX","wheelY","wheelDeltaY","wheelDelta","deltaMode","DOM_DELTA_PIXEL","deltaX","deltaY","DOM_DELTA_LINE","DOM_DELTA_PAGE","axis","HORIZONTAL_AXIS","detail","addMultiMouseDownListener","elements","timeouts","startX","startY","timer","clicks","eventNames","onMousedown","isNewClick","clientX","clientY","_clicks","getModifierHash","metaKey","normalizeCommandKeys","hashId","getModifierState","altGr","location","keyLocation","timeStamp","dt","defaultPrevented","resetPressedKeys","getModifierString","isOldGecko","lastKeyDownKeyCode","lastDefaultPrevented","result","postMessage","postMessageId","nextTick","messageName","listener","$idleBlocked","onIdle","cb","timeout","$idleBlockId","blockIdle","delay","nextFrame","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","oRequestAnimationFrame","comparePoints","p1","p2","startRow","startColumn","endRow","endColumn","isEqual","compare","compareRange","cmp","comparePoint","containsRange","intersects","isEnd","isStart","setStart","setEnd","inside","insideStart","insideEnd","isMultiLine","compareStart","compareEnd","compareInside","clipRows","lastRow","collapseRows","toScreenRange","screenPosStart","documentToScreenPosition","screenPosEnd","moveBy","last","stringReverse","string","count","trimBeginRegexp","trimEndRegexp","stringTrimLeft","stringTrimRight","copyObject","copy","copyArray","array","deepCopy","arrayToMap","createMap","arrayRemove","str","getMatchOffsets","deferredCall","fcn","deferred","isPending","defaultTimeout","_self","$cancelT","lineMode","pasteCancelled","dom","lang","clipboard","BROKEN_SETDATA","USE_IE_MIME_TYPE","HAS_FOCUS_ARGS","MAX_LINE_LENGTH","KEYS","MODS","valueResetRegex","TextInput","host","copied","pasted","inComposition","sendingText","tempStyle","fontSize","commandMode","ignoreFocusEvents","lastValue","lastSelectionStart","lastSelectionEnd","lastRestoreEnd","onBlur","hasFocus","onFocus","resetSelection","$focusScroll","isTransformed","ancestors","parentElement","nodeType","removeAttribute","blur","curOp","commandName","isUserAction","docChanged","selectionChanged","onCompositionEnd","newValue","selectionStart","selectionEnd","setSelectionRange","afterContextMenu","line","getRange","prevLine","nextLine","isAllSelected","onSelect","selectAll","inputHandler","setInputHandler","getInputHandler","sendText","fromInput","onPaste","extendLeft","extendRight","inserted","restoreStart","restoreEnd","endIndex","shouldReset","onTextInput","onInput","onCompositionUpdate","inputType","handleClipboardData","forceIEMime","clipboardData","mime","doCopy","isCut","getCopyText","onCut","onCopy","onCommandKey","onCompositionStart","$readOnly","useTextareaForIME","cancelComposition","markerRange","msGetInputContext","context","getInputContext","compositionStartOffset","closeTimeout","syncComposition","onKeyup","onContextMenuClose","$isMousePressed","$moveTextAreaToCursor","setCommandMode","setReadOnly","setCopyWithEmptySelection","onContextMenu","domEvent","moveToMouse","bringToFront","characterWidth","rect","borderTopWidth","borderLeftWidth","maxTop","clientHeight","move","addIosSelectionHandler","typingResetTimeout","typing","detectArrowKeys","isMousePressed","modifier","up","home","option","down","$setUserAgentForTests","_isMobile","_isIOS","DRAG_OFFSET","SCROLL_COOLDOWN_T","DefaultHandlers","mouseHandler","$clickSelection","setDefaultHandler","onMouseDown","onDoubleClick","onTripleClick","onQuadClick","onMouseWheel","selectByLines","extendSelectionBy","selectByWords","calcDistance","ax","ay","bx","by","sqrt","calcRangeOrientation","ev","inSelection","pos","mousedownEvent","selectionRange","selectionEmpty","inMultiSelectMode","captureMouse","startSelect","setState","waitForClickSelection","screenToTextCoordinates","getShiftKey","selectToPosition","setCapture","orientedRange","setSelectionAnchor","unitName","cmpStart","cmpEnd","selectEnd","selectAllEnd","selectByWordsEnd","selectByLinesEnd","unsetStyle","releaseCapture","focusWait","distance","getBracketRange","getLineRange","getAccelKey","$lastScroll","vx","vy","allowed","prevScroll","direction","canScroll","isScrollableBy","speed","isSlower","scrollBy","Tooltip","$element","$parentNode","setText","setHtml","html","setPosition","setClassName","getHeight","getWidth","GutterHandler","tooltipTimeout","mouseEvent","tooltipAnnotation","gutter","$gutterLayer","tooltip","GutterTooltip","showTooltip","annotation","$annotations","hideTooltip","maxRow","screenRow","pixelToScreenCoordinates","documentToScreenRow","$tooltipFollowsMouse","moveTooltip","gutterElement","gutterRegion","getRegion","selectTo","$gutter","windowWidth","windowHeight","MouseEvent","$inSelection","propagationStopped","AUTOSCROLL_DELAY","SCROLL_CURSOR_DELAY","SCROLL_CURSOR_HYSTERESIS","DragdropHandler","dragImage","dragSelectionMarker","timerId","dragCursor","dragOperation","isInternal","autoScrollStartTime","cursorMovedTime","cursorPointOnCaretMoved","mouseTarget","counter","prevCursor","vMovement","hMovement","moveCursorToPosition","autoScroll","editorRect","offsets","nearestXOffset","nearestYOffset","scrollCursor","vScroll","hScroll","onDragInterval","addDragMarker","toOrientedRange","getSelectionStyle","setBlinking","clearInterval","setInterval","onMouseMove","clearDragMarker","$resetCursorStyle","onDragStart","cancelDrag","draggable","dataTransfer","effectAllowed","setDragImage","clearData","onDragEnd","dropEffect","setCursorStyle","onDragEnter","canAccept","getDropEffect","onDragOver","onMouseMoveTimer","onDragLeave","onDrop","moveText","dropData","insert","types","copyAllowed","moveAllowed","copyModifierState","dragWait","getDragDelay","startDrag","dragWaitEnd","dragReadyEnd","cursorStyle","onMouseDrag","dragDrop","$dragEnabled","clickCount","eventTarget","unselectable","addTouchListeners","touchStartT","lastT","longTouchTimer","animationTimer","pressed","contextMenu","mode","animationSteps","vX","vY","createContextMenu","updateMenu","selected","hasUndo","getUndoManager","replaceChild","class","handleClick","readText","then","writeText","ontouchstart","ontouchend","showContextMenu","pagePos","textToScreenCoordinates","leftOffset","pageX","pageY","hideContextMenu","handleLongTap","selectWord","switchToSelectionMode","setRange","animate","oldScrollTop","getScrollTop","textarea","touches","touchObj","cursorPos","anchorPos","offsetLeft","weightedDistance","diff1","diff2","xhr","XMLHttpRequest","onreadystatechange","responseText","loadScript","path","src","onload","_","isAbort","qualifyURL","_dispatchEvent","_eventRegistry","_defaultHandlers","listeners","defaultHandler","newCallback","Promise","resolve","handlers","_disabled_","old","disabled","removeDefaultHandler","capturing","removeAllListeners","optionsProvider","setOptions","optList","getOptions","optionNames","hidden","opt","warn","forwardTo","handlesSet","reportError","msg","Error","AppConfig","$defaultOptions","initialValue","resetOptions","setDefaultValue","opts","setDefaultValues","optionHash","net","workerPath","modePath","themePath","basePath","suffix","$moduleUrls","loadWorkerFromBlob","sharedPopups","moduleUrl","component","parts","sep","setModuleUrl","subst","$loading","onLoad","moduleType","afterLoad","reportErrorIfPathIsNotConfigured","init","scriptOptions","scriptUrl","currentScript","_currentScript","currentDocument","scripts","script","attributes","j","attr","deHyphenate","m1","version","DefaultGutterHandler","MouseHandler","focusEditor","windowBlurred","getMouseEventTarget","onMouseEvent","scrollBarV","scrollBarH","Boolean","gutterEl","$dragDelay","character","mousemove","$scrollSpeed","mouseMoveHandler","which","releaseMouse","$mouseMoved","onCaptureEnd","onOperationEnd","onCaptureInterval","$onCaptureMouseMove","scrollSpeed","dragDelay","dragEnabled","focusTimeout","tooltipFollowsMouse","FoldHandler","fold","getFoldAt","removeFold","expandFold","getUseWrapMode","foldWidgets","onFoldWidgetClick","getParentFoldRangeData","firstRange","addFold","keyUtil","KeyBinding","$editor","$data","$handlers","kb","$defaultHandler","setKeyboardHandler","handleKeyboard","getKeyboardHandler","getStatusText","$callKeyboardHandlers","toExecute","success","passEvent","dir","hiLevel","lastArabic","hasUBAT_B","hasUBAT_S","impTab_LTR","impTab_RTL","LTR","RTL","L","R","EN","AN","ON","B","AL","WS","CS","ES","ET","NSM","LRE","RLE","PDF","LRO","RLO","BN","UnicodeTBL00","UnicodeTBL20","_computeLevels","chars","levels","len","charTypes","impTab","prevState","newClass","newLevel","newState","cond","condPos","ix","_getCharacterType","_getCharClass","_invertLevel","lev","_array","lo","hi","tmp","wType","nType","cType","rtlCandidate","uc","charCodeAt","ON_R","R_H","DOT","doBidiReorder","textCharTypes","isRtl","logicalFromVisual","bidiLevels","hasBidiCharacters","getVisualFromLogicalIdx","logIdx","rowMap","bidiUtil","bidiRE","BidiHandler","bidiMap","currentRow","charWidths","EOL","showInvisibles","isRtlDir","$isRtl","wrapIndent","EOF","contentWidth","fontMetrics","rtlLineOffset","wrapOffset","isMoveLeftOperation","seenBidi","isBidiRow","docRow","splitIndex","updateRowLine","updateBidiMap","delta","lines","getDocumentRow","rowCache","$screenRowCache","$getRowCacheIndex","$docRowCache","getSplitIndex","currentIndex","prevIndex","isLastRow","endOfLine","$useWrapMode","splits","$wrapData","indent","size","isFullWidth","getScreenTabSize","$main","markAsDirty","updateCharacterWidths","$characterSize","bidiCharWidth","$measureCharWidth","setShowInvisibles","setEolChar","eolChar","setContentWidth","isRtlLine","setRtlDirection","getSelectionAnchor","$bidiHandler","getPosLeft","col","leftBoundary","logicalIdx","getOverwrite","visualIdx","getSelections","startCol","endCol","level","selections","selColMin","selColMax","isSelected","isSelectedPrev","visIdx","offsetToCol","posX","charWidth","Selection","getDocument","$silent","$cursorChanged","$isEmpty","$keepDesiredColumnOnChange","$desiredColumn","$anchorChanged","getCursor","getPosition","getAnchor","getSelectionLead","isBackwards","$setSelection","Number","MAX_VALUE","anchorRow","anchorColumn","cursorRow","cursorColumn","wasEmpty","wasMultiselect","$moveSelection","mover","moveTo","selectUp","moveCursorUp","selectDown","moveCursorDown","selectRight","moveCursorRight","selectLeft","moveCursorLeft","selectLineStart","moveCursorLineStart","selectLineEnd","moveCursorLineEnd","selectFileEnd","moveCursorFileEnd","selectFileStart","moveCursorFileStart","selectWordRight","moveCursorWordRight","selectWordLeft","moveCursorWordLeft","selectAWord","getAWordRange","excludeLastChar","rowEnd","rowStart","foldLine","getFoldLine","selectLine","moveCursorBy","wouldMoveIntoSoftTab","tabSize","isTabStop","getNavigateWithinSoftTabs","firstColumnPosition","screenToDocumentPosition","beforeCursor","getDisplayLine","leadingSpace","$useEmacsStyleLineStart","lineEnd","getDocumentLastRowColumnPosition","textEnd","search","moveCursorLongWordRight","rightOfCursor","nonTokenRe","tokenRe","moveCursorLongWordLeft","getFoldStringAt","leftOfCursor","$shortWordEndIndex","whitespaceRe","moveCursorShortWordRight","moveCursorShortWordLeft","$selectLongWords","rows","offsetX","screenPos","lineWidgets","widget","rowsAbove","rowCount","docPos","keepDesiredColumn","moveCursorToScreen","desiredColumn","getRangeOfMovements","func","toJSON","rangeCount","r1","fromJSON","MAX_TOKEN_COUNT","regExps","matchMappings","ruleRegExps","matchTotal","mapping","splitterRurles","rule","caseInsensitive","adjustedregex","matchcount","groupCount","tokenArray","$arrayTokens","$applyToken","digit","removeCapturingGroups","createSplitterRegexp","$setMaxTokenCount","values","stack","inChClass","lastCapture","parenOpen","parenClose","square","startState","currentState","matchAttempts","skipped","consumeLineEnd","addRules","nextState","getRules","embedRules","escapeRules","append","$embeds","getEmbeds","pushState","popState","processState","processed","toInsert","includeName","noEscape","keywordMap","ignoreCase","splitChar","keywords","$keywordList","list","word","getKeywords","Behaviour","$behaviours","addBehaviours","behaviours","inherit","getBehaviours","initialRow","initialColumn","$session","$row","getTokens","getCurrentTokenColumn","rowTokens","tokenIndex","getCurrentTokenPosition","SAFE_INSERT_IN_TOKENS","SAFE_INSERT_BEFORE_TOKENS","contextCache","defaultQuotes","initContext","autoInsertedBrackets","autoInsertedRow","autoInsertedLineEnd","maybeInsertedBrackets","maybeInsertedRow","maybeInsertedLineStart","maybeInsertedLineEnd","getWrapped","opening","closing","rowDiff","getWrapBehavioursEnabled","isSaneInsertion","braces","recordAutoInsert","recordMaybeInsert","rightChar","matching","$findOpeningBracket","isAutoInsertedClosing","popAutoInsertedClosing","isMaybeInsertedClosing","clearMaybeInsertedClosing","openBracePos","next_indent","quotes","$quotes","quote","leftChar","rightToken","pair","stringBefore","stringAfter","wordRe","isWordBefore","isWordAfter","charBefore","$matchTokenType","iterator2","bracket","wordChars","code","unicode","$defaultBehaviour","$highlightRules","$highlightRuleConfig","toggleCommentLines","ignoreBlankLines","shouldRemove","minIndent","insertAtTabStop","regexpStart","uncomment","shouldInsertSpace","commentWithSpace","insertInLine","testRemove","before","after","spaces","lineCommentEnd","regexpEnd","iter","fun","minEmptyLength","floor","toggleBlockComment","colDiff","initialRange","startRange","endRange","tab","input","createWorker","createModeDelegates","delegations","functionName","$delegator","method","language","transformAction","param","completionKeywords","ruleItr","aLength","$createKeywordList","applyDelta","docLines","doNotValidate","Anchor","$pointsInOrder","point1","point2","equalPointsInOrder","bColIsAfter","$getTransformedPoint","point","moveIfEqual","deltaIsInsert","deltaRowShift","deltaColShift","deltaStart","deltaEnd","$clipPositionToDocument","noClip","Document","textOrLines","$lines","insertMergedLines","getAllLines","getNewLineCharacter","$split","$detectNewLine","$autoNewLine","$newLineMode","setNewLineMode","newLineMode","getNewLineMode","isNewLine","getLines","getLinesForRange","insertLines","insertFullLines","removeLines","removeFullLines","insertNewLine","clippedPos","clonePos","$clipPosition","deleteFirstNewLine","deleteLastNewLine","deletedLines","removeNewLine","applyDeltas","deltas","revertDeltas","revertDelta","isInsert","$splitAndapplyLargeDelta","$safeApplyDelta","docLength","MAX","from","to","chunk","indexToPosition","newlineLength","BackgroundTokenizer","tokenizer","running","currentLine","$worker","workerStart","endLine","startLine","processedLines","fireUpdateEvent","setTokenizer","setDocument","first","scheduleStart","SearchHighlight","setRegexp","MAX_RANGES","update","markerLayer","drawSingleLineMarker","FoldLine","foldData","folds","setFoldLine","shiftRow","sameRow","containsRow","walk","lastEnd","isNewRow","getNextFoldTo","kind","addRemoveChars","foldBefore","newFoldLine","foldLineNext","idxToPosition","idx","lastFoldEndColumn","excludeEdges","startIndex","removed","substractPoint","containsPoint","rangeAtPoint","clipped","removeAll","lineDif","Fold","subFolds","consumePoint","consumeRange","restorePoint","restoreRange","subFold","collapseChildren","addSubFold","afterStart","firstConsumed","consumedFolds","k","Folding","side","getFoldsInRange","foldLines","$foldData","foundFolds","getFoldsInRangeList","getAllFolds","trim","lastFold","startFoldLine","getNextFoldLine","getFoldedRowCount","$addFoldLine","added","$clipRangeToDocument","startFold","endFold","removeFolds","$updateWrapData","$updateRowLengthCache","$modified","addFolds","$updating","cloneFolds","foldAll","expandFolds","unfold","expandInner","outermostFolds","isRowFolded","startFoldRow","getRowFoldEnd","getRowFoldStart","getFoldDisplayLine","textLine","lastColumn","$cloneFoldData","fd","toggleFold","tryToUnfold","bracketPos","getCommentFoldRange","depth","foldToLevel","foldAllComments","$foldStyles","$foldStyle","setFoldStyle","$foldMode","$setFolding","foldMode","$updateFoldWidgets","$tokenizerUpdateFoldWidgets","updateFoldWidgets","tokenizerUpdateFoldWidgets","ignoreCurrent","fw","children","siblings","$toggleFoldWidget","toggleFoldWidget","toggleParent","BracketMatch","chr","charBeforeCursor","$findClosingBracket","getMatchingBracketRanges","$brackets","typeRe","openBracket","valueIndex","closingBracket","valueLength","TextMode","EditSession","$breakpoints","$decorations","$frontMarkers","$backMarkers","$markerId","$undoSelect","$uid","onChangeFold","setMode","resetCaches","$resetRowCache","cacheArray","low","mid","$rowLengthCache","removedFolds","$updateInternalDataOnChange","$fromUndo","$undoManager","mergeUndoDeltas","$informUndoManager","setUndoManager","reset","getSelection","undoManager","addSession","$syncInformUndoManager","markUndoGroup","$defaultUndoManager","undo","redo","hasRedo","addSelection","startNewGroup","setUseSoftTabs","$useSoftTabs","$indentWithTabs","setTabSize","$tabSize","setNavigateWithinSoftTabs","navigateWithinSoftTabs","$navigateWithinSoftTabs","$overwrite","setOverwrite","overwrite","toggleOverwrite","addGutterDecoration","removeGutterDecoration","getBreakpoints","setBreakpoints","clearBreakpoints","setBreakpoint","clearBreakpoint","inFront","marker","addDynamicMarker","markers","getMarkers","highlightLines","setAnnotations","annotations","getAnnotations","clearAnnotations","inToken","wordRange","setUseWorker","useWorker","getUseWorker","$useWorker","onReloadTokenizer","$modeId","$onChangeMode","$isPlaceholder","oldMode","$stopWorker","$startWorker","attachToSession","wrapMethod","$wrapMethod","terminate","getMode","$scrollTop","setScrollTop","isNaN","$scrollLeft","setScrollLeft","getScrollLeft","getScreenWidth","getLineWidgetMaxWidth","lineWidgetsWidth","lineWidgetWidth","force","$wrapLimit","longestScreenLine","foldIndex","foldStart","$getStringScreenWidth","undoChanges","dontSelect","selectionBefore","$getUndoSelection","redoChanges","selectionAfter","setUndoSelect","enable","isUndo","fromRange","toPosition","toRange","collDiff","oldStart","newStart","indentRows","indentString","outdentRows","rowRange","deleteRange","$moveLines","diff","$clipRowToDocument","moveLinesUp","moveLinesDown","duplicateLines","$clipColumnToRow","$wrapLimitRange","setUseWrapMode","useWrapMode","setWrapLimitRange","adjustWrapLimit","desiredLimit","$printMargin","limits","wrapLimit","$constrainWrapLimit","getWrapLimit","setWrapLimit","limit","getWrapLimitRange","foldLineBefore","wrapData","walkTokens","$getDisplayTokens","PLACEHOLDER_START","PLACEHOLDER_BODY","$computeWrapSplits","CHAR","CHAR_EXT","PUNCTUATION","SPACE","TAB","TAB_SPACE","displayLength","lastSplit","lastDocSplit","isCode","$wrapAsCode","indentedSoftWrap","$indentedSoftWrap","maxIndent","getWrapIndent","indentation","addSplit","minSplit","maxScreenColumn","screenColumn","getRowLength","getRowLineCount","getRowWrapIndent","getScreenLastRowColumn","documentToScreenColumn","getDocumentLastRowColumn","docColumn","getRowSplitData","screenToDocumentRow","screenToDocumentColumn","rowLength","doCache","foldStartRow","wrapRow","screenRowOffset","getScreenLength","screenRows","$getWidgetScreenLength","$setFontMetrics","fm","$enableVarChar","getCharacterWidth","$wrap","firstLineNumber","useSoftTabs","foldStyle","addWordBoundary","needle","wordBoundary","$matchIterator","sr","sc","er","ec","$assembleRegExp","$isMultiLine","prevRange","replacement","preserveCase","$disableFakeMultiline","$assembleMultilineRegExp","forEachInLine","commandKeyBinding","$singleCommand","MultiHashHandler","isDefault","_buildKeyHash","keepCommand","ckb","keyId","cmdGroup","keyPart","chain","binding","parseKeys","_addCommandToBinding","other","otherPos","removeCommands","keyList","$keyChain","CommandManager","byName","$checkCommandState","isAvailable","toggleRecording","$inReplay","recording","macro","$addCommandToMacro","oldMacro","replay","trimMacro","description","showSettingsMenu","showErrorMarker","scrollIntoView","centerSelection","gotoLine","prompt","$type","multiSelectAction","findPrevious","aceCommandGroup","navigateFileStart","navigateUp","times","navigateFileEnd","navigateDown","navigateWordLeft","navigateLineStart","navigateLeft","navigateWordRight","navigateLineEnd","navigateRight","selectPageDown","scrollPageDown","selectPageUp","scrollPageUp","jumpToMatching","cutLine","$copyWithEmptySelection","$handlePaste","duplicateSelection","sortLines","modifyNumber","copyLinesUp","copyLinesDown","removeToLineStart","removeToLineEnd","removeWordLeft","removeWordRight","blockOutdent","blockIndent","splitLine","transposeLetters","transposeSelections","autoIndent","firstLineEndCol","selectedText","selectedCount","insertLine","curLine","newRanges","exitMultiSelectMode","defaultCommands","getContainerElement","getTextAreaContainer","$historyTracker","$initOperationListeners","_$emitInputEvent","$opResetTimer","$lastSel","prevOp","commandEvent","previousCommand","scrollSelectionIntoView","animateScrolling","sel","$mergeableCommands","$mergeUndoDeltas","prev","mergeableCommands","shouldMerge","mergeNextCommand","sequenceStartTime","$keybindingId","oldSession","$onDocumentChange","$onTokenizerUpdate","$onChangeTabSize","$onChangeWrapLimit","$onChangeWrapMode","$onChangeFold","$onChangeFrontMarker","$onChangeBackMarker","$onChangeBreakpoint","$onChangeAnnotation","$onCursorChange","$onScrollTopChange","$onScrollLeftChange","$onSelectionChange","onDocumentChange","onChangeMode","onTokenizerUpdate","onChangeTabSize","onChangeWrapLimit","onChangeWrapMode","onChangeFrontMarker","onChangeBackMarker","onChangeBreakpoint","onChangeAnnotation","onCursorChange","onScrollTopChange","onScrollLeftChange","onSelectionChange","updateFull","oldEditor","resize","onResize","theme","$highlightBrackets","$highlightPending","$bracketHighlight","markerIds","markerType","$highlightTags","$tagHighlight","currentTag","prevToken","stepCount","tmpToken","sbm","showCursor","visualizeFocus","hideCursor","visualizeBlur","$cursorChange","updateCursor","$updateHighlightActiveLine","updateLines","scrollToY","scrollToX","$highlightActiveLine","$selectionStyle","$selectionColorConflict","$minLines","$highlightLineMarker","$selectionMarker","$highlightSelectedWord","$getSelectionHighLightRegexp","wordWithBoundary","updateFrontMarkers","updateBreakpoints","updateText","getSelectedText","nl","copyLine","isFullLine","getBehavioursEnabled","lineState","shouldOutdent","$enableAutoIndent","lineIndent","selectedRange","currIndent","prevLineState","composition","applyComposition","setScrollSpeed","getScrollSpeed","setDragDelay","setSelectionStyle","shouldHighlight","getHighlightActiveLine","getHighlightGutterLine","setHighlightSelectedWord","getHighlightSelectedWord","setAnimatedScroll","shouldAnimate","getAnimatedScroll","getShowInvisibles","setDisplayIndentGuides","getDisplayIndentGuides","showPrintMargin","getShowPrintMargin","setPrintMarginColumn","getPrintMarginColumn","setBehavioursEnabled","setWrapBehavioursEnabled","setShowFoldWidgets","getShowFoldWidgets","setFadeFoldWidgets","fade","getFadeFoldWidgets","new_range","swap","originalRange","$getSelectedRows","getNumberAt","_numberRx","amount","charRange","isFinite","nr","fp","decimals","nnr","toFixed","replaceRange","toggleWord","$toggleWordPairs","currWordStart","wordParts","curLength","itLength","that","reg","wordPairs","negate","firstCondition","secondCondition","res","endPoint","moved","totalDiff","rangeIndex","subRows","compositionState","showComposition","setCompositionText","hideComposition","getFirstVisibleRow","getLastVisibleRow","isRowVisible","isRowFullyVisible","getFirstFullyVisibleRow","getLastFullyVisibleRow","$getVisibleRowCount","getScrollBottomRow","getScrollTopRow","$moveByPage","scrollToRow","scrollToLine","center","alignCursor","getCursorPositionScreen","expand","matchType","bracketType","found","brackets","lineNumber","navigateTo","replaced","$tryReplace","getLastSearchOptions","newRange","revealRange","setAutoScrollEditorIntoView","shouldScroll","$scrollAnchor","scrollAnchor","onBeforeRender","onAfterRender","$pixelPos","$cursorStyle","cursorLayer","setSmoothBlinking","isBlinking","selectionStyle","highlightActiveLine","highlightSelectedWord","copyWithEmptySelection","behavioursEnabled","wrapBehavioursEnabled","enableAutoIndent","autoScrollEditorIntoView","showLineNumbers","setShowLineNumbers","$loop","CHANGE_GUTTER","$relativeLineNumbers","relativeNumberRenderer","relativeLineNumbers","$showLineNumbers","$updatePlaceholder","$composition","placeholderNode","$placeholder","hScrollBarAlwaysVisible","vScrollBarAlwaysVisible","highlightGutterLine","animatedScroll","printMarginColumn","printMargin","fadeFoldWidgets","showFoldWidgets","displayIndentGuides","showGutter","fontFamily","maxLines","minLines","scrollPastEnd","fixedWidthGutter","hasCssTransforms","maxPixelHeight","lastLineNumber","$renderer","UndoManager","$maxRev","rearrangeUndoStack","deltaSet","ignore","swapped","swapGroups","allowMerge","$lastDelta","$keepRedoStack","$redoStack","lastDeltas","$undoStack","$rev","rev","markIgnored","getRevision","getDeltas","getChangedRanges","getChangedLines","$redoStackBaseRev","undoSelectionRange","$syncRev","rebaseRedoStack","redoSelectionRange","nextDelta","mark","canUndo","canRedo","bookmark","isAtBookmark","isClean","markClean","$prettyPrint","stringifyDelta","cloneDelta","stringifyRange","d1","d2","i1","i2","ds1","ds2","xform","c1","splitDelta","shiftPos","rowsBefore","otherLines","rest","moveDeltasByOne","redoStack","xformed","deltaSets","Lines","canvasHeight","cells","cellCache","$offsetCoefficient","moveContainer","firstRowScreen","pageChanged","oldConfig","newConfig","computeLineTop","screenTop","screenPage","lineTop","computeLineHeight","$cacheCell","cell","fragment","insertAdjacentElement","createCell","initElement","Gutter","parentEl","$showFoldWidgets","$updateAnnotations","onCreateCell","textNode","foldWidget","rowInfo","annoText","gutterOffset","oldLastRow","$updateCursorRow","$renderCell","$updateGutterWidth","gutterRenderer","$firstLineNumber","lastLineText","$fixedWidth","padding","$computePadding","ceil","$highlightGutterLine","$cursorRow","updateLineHighlight","$cursorCell","scrollLines","$renderLines","breakpoints","decorations","foldHeight","getShowLineNumbers","paddingLeft","borderRightWidth","paddingRight","Marker","getBorderClass","tl","tr","br","bl","setPadding","setMarkers","elt","css","$getTop","drawFullLineMarker","drawScreenLineMarker","drawTextMarker","drawMultiLineMarker","childElementCount","lastChild","stringBuilder","extraStyle","curr","lineRange","range1","drawBidiSingleLineMarker","radiusClass","extraLength","Text","$updateEolChar","EOF_CHAR","EOL_CHAR_LF","EOL_CHAR_CRLF","EOL_CHAR","TAB_CHAR","SPACE_CHAR","unixMode","getLineHeight","$fontMetrics","measure","$pollSizeChanges","checkForSizeChanges","$pollSizeChangesTimer","$computeTabString","showSpaces","showTabs","showEOL","$tabStrings","tabStr","span","$indentGuideRe","spaceClass","spaceContent","tabClass","tabContent","lineElements","lineElementsIdx","heightChanged","lineElement","$renderLine","$renderLinesFragment","lineEl","$useLineGroups","$textToken","$renderToken","valueFragment","simpleSpace","controlCharacter","cjkSpace","cjk","cloneNode","com","renderIndentGuide","cols","$createLineElement","$renderWrappedLine","splitChars","$renderOverflowMessage","$renderSimpleLine","overflowEl","$getFoldLineTokens","lastLineEl","invisibleEl","renderTokens","addTokens","Cursor","isVisible","blinkInterval","smoothBlinking","cursors","addCursor","$updateCursors","$updateOpacity","$startCssAnimation","animationDuration","$isAnimating","$stopCssAnimation","blinking","setBlinkInterval","removeCursor","intervalId","timeoutId","$isSmoothBlinking","blink","onScreen","cursorLeft","cursorTop","isCursorInView","pixelPos","maxHeight","$selectionMarkers","cursorIndex","drawCursor","$setOverwrite","MAX_SCROLL_H","ScrollBar","classSuffix","setVisible","skipEvent","onScroll","coeff","VScrollBar","scrollHeight","$scrollbarWidth","$minWidth","setHeight","setInnerHeight","setScrollHeight","HScrollBar","setWidth","setInnerWidth","setScrollWidth","ScrollBarV","ScrollBarH","RenderLoop","onRender","pending","changes","$recursionLimit","_flush","change","clear","CHAR_COUNT","USE_OBSERVER","ResizeObserver","FontMetrics","$setMeasureNodeStyles","$measureNode","$addObserver","isRoot","visibility","whiteSpace","font","$measureSizes","fontWeight","boldSize","charSizes","allowBoldFonts","$observer","observe","setPolling","$getZoom","getZoom","zoom","$initTransformMeasureNodes","transformCoordinates","clientPos","elPos","mul","solve","l1","l2","det","sub","m2","ut","GutterLayer","MarkerLayer","TextLayer","CursorLayer","editorCss","HIDE_TEXTAREA","onGutterResize","$markerBack","textLayer","canvas","$markerFront","$horizScroll","$vScroll","scrollBar","$scrollAnimation","scrollMargin","updateCharacterSize","$size","scrollerHeight","scrollerWidth","$dirty","minHeight","$renderChanges","defaultView","CHANGE_FULL","CHANGE_CURSOR","CHANGE_MARKER","CHANGE_SCROLL","CHANGE_LINES","CHANGE_TEXT","CHANGE_SIZE","CHANGE_MARKER_BACK","CHANGE_MARKER_FRONT","CHANGE_H_SCROLL","$allowBoldFonts","$updatePrintMargin","onChangeNewLineMode","$changedLines","updateFontSize","$changes","$updateSizeAsync","resizing","scrollWidth","$updateCachedSize","$extraHeight","oldSize","$showGutter","$computeLayerConfig","availableWidth","$showPrintMargin","$printMarginColumn","$animatedScroll","getShowGutter","$printMarginEl","containerEl","posTop","posLeft","setScrollMargin","sm","setMargin","getHScrollBarAlwaysVisible","$hScrollBarAlwaysVisible","setHScrollBarAlwaysVisible","alwaysVisible","getVScrollBarAlwaysVisible","$vScrollBarAlwaysVisible","setVScrollBarAlwaysVisible","$updateScrollBarV","$scrollPastEnd","$updateScrollBarH","$frozen","freeze","unfreeze","st","$updateLines","$autosize","desiredHeight","hideScrollbars","$gutterWidth","screenLines","longestLine","$getLongestLine","horizScroll","hScrollChanged","vScrollBefore","vScrollChanged","firstRowHeight","lineCount","charCount","$viewMargin","topMargin","bottomMargin","alignment","STEPS","$calcSteps","fromValue","toValue","steps","x_min","dx","initialScroll","oldSteps","$timer","scrollTo","canvasPos","$hasCssTransforms","$blockCursor","$useTextareaForIME","addToken","removeExtraToken","newToken","$themeId","$theme","setMouseCursor","attachToShadowRoot","$workerBlob","workerUrl","Blob","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","blobBuilder","getBlob","Worker","blob","URL","webkitURL","blobURL","createObjectURL","WorkerClient","worker","$createWorkerFromOldConfig","$sendDeltaQueue","onMessage","callbackId","callbacks","onmessage","topLevelNamespaces","classname","importScripts","nameToUrl","toUrl","normalizePath","$normalizePath","tlns","err","deltaQueue","$doc","cmd","emit","ex","attachToDocument","q","UIWorkerClient","main","emitSync","sender","messageBuffer","workerClient","processNext","setEmitSync","Main","PlaceHolder","others","mainClass","othersClass","$onUpdate","onUpdate","$others","undoStack","$undostack","$undoStackDepth","setup","showOtherMarkers","othersActive","hideOtherMarkers","updateAnchors","lengthDiff","inMainRange","distanceFromStart","newPos","updateMarkers","updateMarker","undosRequired","isSamePoint","alt","ctrl","accel","selectionMode","isMultiSelect","mouseX","mouseY","onMouseSelection","screenAnchor","screenCursor","$enableJumpToDef","$blockSelectEnabled","addSelectionMarker","oldRange","removeSelectionMarker","tmpSel","rectSel","blockSelect","newCursor","removeSelectionMarkers","rectangularRangeBlock","updateSelectionMarkers","onMouseSelectionEnd","onSelectionInterval","selectMoreLines","selectMore","joinSelections","splitIntoLines","alignCursors","multiSelectCommands","getSelectionMarkers","$blockChangeEvents","$onAddRange","$onRemoveRange","mergeOverlappingRanges","lastRange","$initRangeList","toggleBlockSelection","includeEmptyLines","xBackwards","startOffsetX","endOffsetX","docEnd","yBackwards","MultiSelect","$multiselectOnSessionChange","$onMultiSelect","$onSingleSelect","onSessionChange","$checkMultiselectChange","addAltCursorListeners","altCursor","altDown","selectionMarkerCount","markerList","$onMultiSelectExec","inVirtualMode","$byLines","cmdResult","anim","buf","additive","skip","screenLead","toRemove","words","stopAtFirst","sameRowRanges","maxCol","minSpace","spaceOffsets","spaceOffset","fr","lr","guessRange","$reAlignText","forceLeft","startW","textW","endW","isLeftAligned","isRightAligned","alignLeft","alignRight","unAlign","enableMultiselect","enableBlockSelect","indentationBlock","startLevel","LineWidgets","widgetManager","updateOnChange","renderWidgets","measureWidgets","_changedWidgets","$onChangeEditor","updateOnFold","_inDocument","removeLineWidget","$updateRows","noWidgets","$oldWidget","$registerLineWidget","addLineWidget","zIndex","coverGutter","pixelHeight","$fold","onWidgetChanged","w1","getWidgetsAtRow","changedWidgets","fixedWidth","coverLine","fullWidth","binarySearch","comparator","findAnnotations","matched","oldWidget","gutterAnno","arrow","onmousedown","Renderer","edit","_id","getElementById","env","tagName","oldNode","createEditSession","utils","settle","cookies","buildURL","buildFullPath","parseHeaders","isURLSameOrigin","createError","defaults","Cancel","onCanceled","requestData","requestHeaders","headers","responseType","done","cancelToken","signal","isFormData","request","auth","username","password","unescape","encodeURIComponent","Authorization","btoa","fullPath","baseURL","onloadend","responseHeaders","getAllResponseHeaders","responseData","response","status","statusText","paramsSerializer","responseURL","onabort","onerror","ontimeout","timeoutErrorMessage","transitional","clarifyTimeoutError","isStandardBrowserEnv","xsrfValue","withCredentials","xsrfCookieName","read","xsrfHeaderName","setRequestHeader","isUndefined","onDownloadProgress","onUploadProgress","upload","abort","aborted","Axios","mergeConfig","createInstance","defaultConfig","instanceConfig","axios","CancelToken","isCancel","VERSION","promises","spread","isAxiosError","__CANCEL__","executor","resolvePromise","promise","_listeners","onfulfilled","_resolve","throwIfRequested","source","InterceptorManager","dispatchRequest","validator","validators","interceptors","assertOptions","silentJSONParsing","boolean","forcedJSONParsing","requestInterceptorChain","synchronousRequestInterceptors","interceptor","runWhen","synchronous","fulfilled","rejected","responseInterceptorChain","onFulfilled","onRejected","getUri","use","eject","fn","isAbsoluteURL","combineURLs","requestedURL","enhanceError","transformData","throwIfCancellationRequested","transformRequest","common","adapter","transformResponse","fileName","columnNumber","config1","config2","getMergedValue","isPlainObject","mergeDeepProperties","prop","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","configValue","validateStatus","fns","normalizeHeaderName","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","getDefaultAdapter","process","stringifySafely","rawValue","parser","encoder","isString","isArrayBuffer","isBuffer","isStream","isFile","isBlob","isArrayBufferView","buffer","isURLSearchParams","isObject","strictJSONParsing","maxContentLength","maxBodyLength","thisArg","encode","serializedParams","isDate","toISOString","hashmarkIndex","relativeURL","write","expires","domain","secure","cookie","isNumber","toGMTString","decodeURIComponent","originURL","msie","urlParsingNode","resolveURL","hash","hostname","port","pathname","requestURL","parsed","normalizedName","ignoreDuplicateOf","thing","deprecatedWarnings","schema","allowUnknown","formatMessage","desc","FormData","ArrayBuffer","isView","getPrototypeOf","isFunction","pipe","URLSearchParams","product","assignValue","stripBOM","DataView","NAME","Prototype","NATIVE_ARRAY_BUFFER","DESCRIPTORS","isCallable","hasOwn","classof","tryToString","createNonEnumerableProperty","defineBuiltIn","isPrototypeOf","setPrototypeOf","wellKnownSymbol","uid","InternalStateModule","enforceInternalState","enforce","getInternalState","Int8Array","Int8ArrayPrototype","Uint8ClampedArray","Uint8ClampedArrayPrototype","TypedArray","TypedArrayPrototype","ObjectPrototype","TO_STRING_TAG","TYPED_ARRAY_TAG","TYPED_ARRAY_CONSTRUCTOR","NATIVE_ARRAY_BUFFER_VIEWS","TYPED_ARRAY_TAG_REQUIRED","TypedArrayConstructorsList","Uint8Array","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigIntArrayConstructorsList","BigInt64Array","BigUint64Array","it","klass","getTypedArrayConstructor","isTypedArray","aTypedArray","aTypedArrayConstructor","C","exportTypedArrayMethod","KEY","forced","ARRAY","TypedArrayConstructor","error2","exportTypedArrayStaticMethod","Function","uncurryThis","FunctionName","defineBuiltIns","fails","anInstance","toIntegerOrInfinity","toLength","toIndex","IEEE754","getOwnPropertyNames","arrayFill","arraySlice","setToStringTag","PROPER_FUNCTION_NAME","PROPER","CONFIGURABLE_FUNCTION_NAME","CONFIGURABLE","setInternalState","ARRAY_BUFFER","DATA_VIEW","PROTOTYPE","WRONG_LENGTH","WRONG_INDEX","NativeArrayBuffer","$ArrayBuffer","ArrayBufferPrototype","$DataView","DataViewPrototype","RangeError","fill","packIEEE754","pack","unpackIEEE754","unpack","packInt8","packInt16","packInt32","unpackInt32","packFloat32","packFloat64","addGetter","view","isLittleEndian","intIndex","store","byteLength","bytes","byteOffset","conversion","INCORRECT_ARRAY_BUFFER_NAME","NaN","testView","$setInt8","setInt8","getInt8","setUint8","unsafe","bufferLength","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","toObject","toAbsoluteIndex","lengthOfArrayLike","deletePropertyOrThrow","copyWithin","O","inc","IndexedObject","createMethod","TYPE","IS_FIND_LAST_INDEX","$this","callbackfn","boundFunction","findLast","findLastIndex","toIndexedObject","arrayMethodIsStrict","$lastIndexOf","NEGATIVE_ZERO","STRICT_METHOD","FORCED","searchElement","iterate","defineIterator","setSpecies","fastKey","internalStateGetterFor","getterFor","getConstructor","wrapper","CONSTRUCTOR_NAME","IS_MAP","ADDER","iterable","AS_ENTRIES","entry","getEntry","has","setStrong","ITERATOR_NAME","getInternalCollectionState","getInternalIteratorState","iterated","getWeakData","anObject","ArrayIterationModule","findIndex","uncaughtFrozenStore","frozen","UncaughtFrozenStore","entries","findUncaughtFrozen","$","isForced","InternalMetadataModule","checkCorrectnessOfIteration","inheritIfRequired","IS_WEAK","NativeConstructor","NativePrototype","exported","fixMethod","uncurriedNativeMethod","REPLACE","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","dummy","makeBuiltIn","getter","setter","$Array","LN2","mantissaLength","exponent","mantissa","exponentLength","eMax","eBias","rt","sign","nBits","isInteger","IS_PURE","ITERATOR","searchParams","$repeat","requireObjectCoercible","repeat","stringSlice","IS_END","maxLength","fillString","fillLen","stringFiller","intMaxLength","stringLength","fillStr","maxInt","tMin","tMax","skew","damp","initialBias","initialN","delimiter","regexNonASCII","regexSeparators","OVERFLOW_ERROR","baseMinusTMin","$RangeError","ucs2decode","output","extra","digitToBasic","adapt","numPoints","firstTime","currentValue","inputLength","bias","basicLength","handledCPCount","handledCPCountPlusOne","qMinusT","baseMinusT","label","encoded","labels","toPrimitive","$TypeError","argument","prim","BigInt","toPositiveInteger","BYTES","TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS","ArrayBufferViewCore","ArrayBufferModule","createPropertyDescriptor","isIntegralNumber","toOffset","toPropertyKey","isSymbol","typedArrayFrom","definePropertyModule","getOwnPropertyDescriptorModule","nativeDefineProperty","nativeGetOwnPropertyDescriptor","BYTES_PER_ELEMENT","fromList","isTypedArrayIndex","wrappedGetOwnPropertyDescriptor","wrappedDefineProperty","stat","getOwnPropertyDescriptor","CLAMPED","GETTER","SETTER","NativeTypedArrayConstructor","TypedArrayConstructorPrototype","addElement","typedArrayOffset","$length","$len","sham","arrayFromConstructorAndList","typedArraySpeciesConstructor","aConstructor","getIterator","getIteratorMethod","isArrayIteratorMethod","argumentsLength","mapfn","iteratorMethod","speciesConstructor","originalArray","$findIndex","addToUnscopables","FIND_INDEX","SKIPS_HOLES","isRegExp","getRegExpFlags","stickyHelpers","proxyAccessor","UNSUPPORTED_DOT_ALL","UNSUPPORTED_NCG","MATCH","NativeRegExp","RegExpPrototype","SyntaxError","stringIndexOf","IS_NCG","re1","re2","CORRECT_NEW","MISSED_STICKY","UNSUPPORTED_Y","BASE_FORCED","handleDotAll","handleNCG","named","names","ncg","groupid","groupname","RegExpWrapper","pattern","flags","rawFlags","dotAll","sticky","handled","thisIsRegExp","patternIsRegExp","flagsAreUndefined","groups","rawPattern","raw","defineBuiltInAccessor","collection","collectionStrong","$padStart","WEBKIT_BUG","padStart","getMethod","getSubstitution","searchValue","fromIndex","replaceValue","IS_REG_EXP","replacer","searchString","functionalReplace","searchLength","advanceBy","endOfLastMatch","defineWellKnownSymbol","getBuiltIn","relativeIndex","$ArrayCopyWithin","u$ArrayCopyWithin","$every","$fill","toBigInt","CONVERSION_BUG","valueOf","actualValue","$filter","fromSpeciesAndList","predicate","$findLastIndex","$findLast","$find","$forEach","$includes","$indexOf","ArrayIterators","arrayValues","arrayKeys","arrayEntries","GENERIC","ITERATOR_IS_VALUES","typedArrayValues","$join","separator","$map","$reduceRight","$reduce","middle","$set","WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS","TO_OBJECT_BUG","arrayLike","$some","aCallable","internalSort","FF","IE_OR_EDGE","V8","WEBKIT","un$Sort","ACCEPT_INCORRECT_ARGUMENTS","STABLE_SORT","expected","getSortCompare","comparefn","$toLocaleString","TO_LOCALE_STRING_BUG","Uint8ArrayPrototype","arrayToString","IS_NOT_ARRAY_METHOD","createTypedArrayConstructor","InternalWeakMap","collectionWeak","isExtensible","NATIVE_WEAK_MAP","IS_IE11","ActiveXObject","$WeakMap","WeakMapPrototype","nativeDelete","nativeHas","nativeGet","nativeSet","USE_NATIVE_URL","createIteratorConstructor","$toString","validateArgumentsLength","arraySort","URL_SEARCH_PARAMS","URL_SEARCH_PARAMS_ITERATOR","getInternalParamsState","safeGetBuiltIn","nativeFetch","NativeRequest","Headers","RequestPrototype","HeadersPrototype","plus","sequences","percentSequence","percentDecode","sequence","deserialize","replacements","serialize","URLSearchParamsIterator","URLSearchParamsState","parseObject","parseQuery","bindURL","entryIterator","entryNext","query","attribute","updateURL","URLSearchParamsConstructor","URLSearchParamsPrototype","getAll","headersHas","headersSet","wrapRequestOptions","dontCallGetSet","fetch","RequestConstructor","Request","assign","arrayFrom","codeAt","toASCII","URLSearchParamsModule","getInternalURLState","getInternalSearchParamsState","NativeURL","numberToString","INVALID_AUTHORITY","INVALID_SCHEME","INVALID_HOST","INVALID_PORT","ALPHA","ALPHANUMERIC","DIGIT","HEX_START","OCT","DEC","HEX","FORBIDDEN_HOST_CODE_POINT","FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT","LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE","TAB_AND_NEW_LINE","parseIPv4","partsLength","numbers","part","radix","ipv4","parseIPv6","numbersSeen","ipv4Piece","swaps","address","pieceIndex","compress","pointer","findLongestZeroSequence","ipv6","maxIndex","currStart","currLength","serializeHost","ignore0","C0ControlPercentEncodeSet","fragmentPercentEncodeSet","pathPercentEncodeSet","userinfoPercentEncodeSet","percentEncode","specialSchemes","ftp","file","http","https","ws","wss","isWindowsDriveLetter","normalized","startsWithWindowsDriveLetter","third","isSingleDot","segment","isDoubleDot","SCHEME_START","SCHEME","NO_SCHEME","SPECIAL_RELATIVE_OR_AUTHORITY","PATH_OR_AUTHORITY","RELATIVE","RELATIVE_SLASH","SPECIAL_AUTHORITY_SLASHES","SPECIAL_AUTHORITY_IGNORE_SLASHES","AUTHORITY","HOST","HOSTNAME","PORT","FILE","FILE_SLASH","FILE_HOST","PATH_START","PATH","CANNOT_BE_A_BASE_URL_PATH","QUERY","FRAGMENT","URLState","isBase","baseState","failure","urlString","stateOverride","codePoints","bufferCodePoints","seenAt","seenBracket","seenPasswordToken","scheme","cannotBeABaseURL","isSpecial","includesCredentials","codePoint","encodedCodePoints","parseHost","shortenPath","cannotHaveUsernamePasswordPort","pathSize","setHref","getOrigin","URLConstructor","origin","setProtocol","getUsername","setUsername","getPassword","setPassword","getHost","setHost","getHostname","setHostname","getPort","setPort","getPathname","setPathname","getSearch","setSearch","getSearchParams","facade","getHash","setHash","URLPrototype","accessorDescriptor","nativeCreateObjectURL","nativeRevokeObjectURL","revokeObjectURL","requiredArgs","required","toDate","argStr","isValid","dirtyDate","date","formatDistanceLocale","lessThanXSeconds","one","xSeconds","halfAMinute","lessThanXMinutes","xMinutes","aboutXHours","xHours","xDays","aboutXWeeks","xWeeks","aboutXMonths","xMonths","aboutXYears","xYears","overXYears","almostXYears","formatDistance","tokenValue","addSuffix","comparison","buildFormatLongFn","defaultWidth","format","formats","dateFormats","full","long","medium","short","timeFormats","dateTimeFormats","formatLong","dateTime","formatRelativeLocale","lastWeek","yesterday","today","tomorrow","nextWeek","formatRelative","_date","_baseDate","_options","buildLocalizeFn","dirtyIndex","dirtyOptions","valuesArray","formattingValues","defaultFormattingWidth","_defaultWidth","_width","argumentCallback","eraValues","narrow","abbreviated","wide","quarterValues","monthValues","dayValues","dayPeriodValues","am","pm","midnight","noon","morning","afternoon","evening","night","formattingDayPeriodValues","ordinalNumber","dirtyNumber","rem100","localize","era","quarter","dayPeriod","buildMatchFn","matchPattern","matchPatterns","defaultMatchWidth","matchResult","matchedString","parsePatterns","defaultParseWidth","findKey","valueCallback","buildMatchPatternFn","parseResult","parsePattern","matchOrdinalNumberPattern","parseOrdinalNumberPattern","matchEraPatterns","parseEraPatterns","any","matchQuarterPatterns","parseQuarterPatterns","matchMonthPatterns","parseMonthPatterns","matchDayPatterns","parseDayPatterns","matchDayPeriodPatterns","parseDayPeriodPatterns","locale","weekStartsOn","firstWeekContainsDate","toInteger","addMilliseconds","dirtyAmount","timestamp","subMilliseconds","MILLISECONDS_IN_DAY","getUTCDayOfYear","setUTCMonth","setUTCHours","startOfYearTimestamp","difference","startOfUTCISOWeek","getUTCDay","setUTCDate","getUTCDate","getUTCISOWeekYear","getUTCFullYear","fourthOfJanuaryOfNextYear","setUTCFullYear","startOfNextYear","fourthOfJanuaryOfThisYear","startOfThisYear","startOfUTCISOWeekYear","fourthOfJanuary","MILLISECONDS_IN_WEEK","getUTCISOWeek","startOfUTCWeek","localeWeekStartsOn","defaultWeekStartsOn","getUTCWeekYear","localeFirstWeekContainsDate","defaultFirstWeekContainsDate","firstWeekOfNextYear","firstWeekOfThisYear","startOfUTCWeekYear","firstWeek","getUTCWeek","addLeadingZeros","targetLength","formatters","signedYear","M","getUTCMonth","dayPeriodEnumValue","getUTCHours","H","getUTCMinutes","getUTCSeconds","numberOfDigits","milliseconds","getUTCMilliseconds","fractionalSeconds","dayPeriodEnum","G","unit","lightFormatters","Y","signedWeekYear","weekYear","twoDigitYear","isoWeekYear","Q","week","I","isoWeek","D","dayOfYear","dayOfWeek","localDayOfWeek","isoDayOfWeek","hours","K","X","_localize","originalDate","_originalDate","timezoneOffset","getTimezoneOffset","formatTimezoneWithOptionalMinutes","formatTimezone","formatTimezoneShort","z","T","dirtyDelimiter","absOffset","minutes","dateLongFormatter","timeLongFormatter","dateTimeLongFormatter","dateTimeFormat","datePattern","timePattern","longFormatters","P","getTimezoneOffsetInMilliseconds","utcDate","UTC","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","protectedDayOfYearTokens","protectedWeekYearTokens","isProtectedDayOfYearToken","isProtectedWeekYearToken","throwProtectedError","formattingTokensRegExp","longFormattingTokensRegExp","escapedStringRegExp","doubleQuoteRegExp","unescapedLatinCharacterRegExp","dirtyFormatStr","formatStr","formatterOptions","firstCharacter","longFormatter","cleanEscapedString","formatter","useAdditionalWeekYearTokens","useAdditionalDayOfYearTokens","LAYOUT_HORIZONTAL","LAYOUT_VERTICAL","__vue_module__","layout","default","isResizing","computed","classnames","userSelect","methods","$el","previousElementSibling","$emit","styleSheet","__$__vue_module__","render","$createElement","_c","mousedown","_t","staticRenderFns","MultipaneResizer","staticClass","Vue","asyncGeneratorStep","gen","_next","_throw","arg","info","_asyncToGenerator","_classExtractFieldDescriptor","receiver","privateMap","_classApplyDescriptorGet","_classPrivateFieldGet","classExtractFieldDescriptor","classApplyDescriptorGet","_checkPrivateRedeclaration","privateCollection","_classPrivateFieldInitSpec","checkPrivateRedeclaration","_classApplyDescriptorSet","_classPrivateFieldSet","classApplyDescriptorSet","_createForOfIteratorHelper","allowArrayLike","unsupportedIterableToArray","F","_e","normalCompletion","didErr","_e2","_readOnlyError","_regeneratorRuntime","Op","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","invoke","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","displayName","isGeneratorFunction","genFun","__proto__","awrap","async","skipTempReset","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","_arrayWithoutHoles","arrayLikeToArray","_iterableToArray","_nonIterableSpread","_toConsumableArray","arrayWithoutHoles","iterableToArray","nonIterableSpread"],"sourceRoot":""}