Files
ZERO_CODE/ZeroCodeProject/main/client/node_modules/.cache/babel-loader/1a48028b952abb687da9c920188d96597f1fad5e8b280e0bcc285afde76644d6.json
vermouth789 fe39320977 123
123
2026-01-11 00:11:34 +08:00

1 line
3.4 MiB
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"ast":null,"code":"require(\"core-js/modules/es.array.push.js\");require(\"core-js/modules/web.dom-exception.stack.js\");require(\"core-js/modules/web.url-search-params.delete.js\");require(\"core-js/modules/web.url-search-params.has.js\");require(\"core-js/modules/web.url-search-params.size.js\");/*!\r\n * jsoneditor.js\r\n *\r\n * @brief\r\n * JSONEditor is a web-based tool to view, edit, format, and validate JSON.\r\n * It has various modes such as a tree editor, a code editor, and a plain text\r\n * editor.\r\n *\r\n * Supported browsers: Chrome, Firefox, Safari, Opera, Internet Explorer 8+\r\n *\r\n * @license\r\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\r\n * use this file except in compliance with the License. You may obtain a copy\r\n * of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\r\n * License for the specific language governing permissions and limitations under\r\n * the License.\r\n *\r\n * Copyright (c) 2011-2017 Jos de Jong, http://jsoneditoronline.org\r\n *\r\n * @author Jos de Jong, <wjosdejong@gmail.com>\r\n * @version 5.5.11\r\n * @date 2017-01-06\r\n */(function webpackUniversalModuleDefinition(root,factory){if(typeof exports==='object'&&typeof module==='object')module.exports=factory();else if(typeof define==='function'&&define.amd)define([],factory);else if(typeof exports==='object')exports[\"JSONEditor\"]=factory();else root[\"JSONEditor\"]=factory();})(this,function(){return/******/function(modules){// webpackBootstrap\n/******/ // The module cache\n/******/var installedModules={};/******/ // The require function\n/******/function __webpack_require__(moduleId){/******/ // Check if module is in cache\n/******/if(installedModules[moduleId])/******/return installedModules[moduleId].exports;/******/ // Create a new module (and put it into the cache)\n/******/var module=installedModules[moduleId]={/******/exports:{},/******/id:moduleId,/******/loaded:false/******/};/******/ // Execute the module function\n/******/modules[moduleId].call(module.exports,module,module.exports,__webpack_require__);/******/ // Flag the module as loaded\n/******/module.loaded=true;/******/ // Return the exports of the module\n/******/return module.exports;/******/}/******/ // expose the modules object (__webpack_modules__)\n/******/__webpack_require__.m=modules;/******/ // expose the module cache\n/******/__webpack_require__.c=installedModules;/******/ // __webpack_public_path__\n/******/__webpack_require__.p=\"\";/******/ // Load entry module and return exports\n/******/return __webpack_require__(0);/******/}/************************************************************************/ /******/([/* 0 */ /***/function(module,exports,__webpack_require__){'use strict';var Ajv;try{Ajv=__webpack_require__(1);}catch(err){// no problem... when we need Ajv we will throw a neat exception\n}var treemode=__webpack_require__(51);var textmode=__webpack_require__(62);var util=__webpack_require__(54);/**\r\n\t * @constructor JSONEditor\r\n\t * @param {Element} container Container element\r\n\t * @param {Object} [options] Object with options. available options:\r\n\t * {String} mode Editor mode. Available values:\r\n\t * 'tree' (default), 'view',\r\n\t * 'form', 'text', and 'code'.\r\n\t * {function} onChange Callback method, triggered\r\n\t * on change of contents\r\n\t * {function} onError Callback method, triggered\r\n\t * when an error occurs\r\n\t * {Boolean} search Enable search box.\r\n\t * True by default\r\n\t * Only applicable for modes\r\n\t * 'tree', 'view', and 'form'\r\n\t * {Boolean} history Enable history (undo/redo).\r\n\t * True by default\r\n\t * Only applicable for modes\r\n\t * 'tree', 'view', and 'form'\r\n\t * {String} name Field name for the root node.\r\n\t * Only applicable for modes\r\n\t * 'tree', 'view', and 'form'\r\n\t * {Number} indentation Number of indentation\r\n\t * spaces. 4 by default.\r\n\t * Only applicable for\r\n\t * modes 'text' and 'code'\r\n\t * {boolean} escapeUnicode If true, unicode\r\n\t * characters are escaped.\r\n\t * false by default.\r\n\t * {boolean} sortObjectKeys If true, object keys are\r\n\t * sorted before display.\r\n\t * false by default.\r\n\t * @param {Object | undefined} json JSON object\r\n\t */function JSONEditor(container,options,json){if(!(this instanceof JSONEditor)){throw new Error('JSONEditor constructor called without \"new\".');}// check for unsupported browser (IE8 and older)\nvar ieVersion=util.getInternetExplorerVersion();if(ieVersion!=-1&&ieVersion<9){throw new Error('Unsupported browser, IE9 or newer required. '+'Please install the newest version of your browser.');}if(options){// check for deprecated options\nif(options.error){console.warn('Option \"error\" has been renamed to \"onError\"');options.onError=options.error;delete options.error;}if(options.change){console.warn('Option \"change\" has been renamed to \"onChange\"');options.onChange=options.change;delete options.change;}if(options.editable){console.warn('Option \"editable\" has been renamed to \"onEditable\"');options.onEditable=options.editable;delete options.editable;}// validate options\nif(options){var VALID_OPTIONS=['ace','theme','ajv','schema','onChange','onEditable','onError','onModeChange','escapeUnicode','history','search','mode','modes','name','indentation','sortObjectKeys'];Object.keys(options).forEach(function(option){if(VALID_OPTIONS.indexOf(option)===-1){console.warn('Unknown option \"'+option+'\". This option will be ignored');}});}}if(arguments.length){this._create(container,options,json);}}/**\r\n\t * Configuration for all registered modes. Example:\r\n\t * {\r\n\t * tree: {\r\n\t * mixin: TreeEditor,\r\n\t * data: 'json'\r\n\t * },\r\n\t * text: {\r\n\t * mixin: TextEditor,\r\n\t * data: 'text'\r\n\t * }\r\n\t * }\r\n\t *\r\n\t * @type { Object.<String, {mixin: Object, data: String} > }\r\n\t */JSONEditor.modes={};// debounce interval for JSON schema vaidation in milliseconds\nJSONEditor.prototype.DEBOUNCE_INTERVAL=150;/**\r\n\t * Create the JSONEditor\r\n\t * @param {Element} container Container element\r\n\t * @param {Object} [options] See description in constructor\r\n\t * @param {Object | undefined} json JSON object\r\n\t * @private\r\n\t */JSONEditor.prototype._create=function(container,options,json){this.container=container;this.options=options||{};this.json=json||{};var mode=this.options.mode||'tree';this.setMode(mode);};/**\r\n\t * Destroy the editor. Clean up DOM, event listeners, and web workers.\r\n\t */JSONEditor.prototype.destroy=function(){};/**\r\n\t * Set JSON object in editor\r\n\t * @param {Object | undefined} json JSON data\r\n\t */JSONEditor.prototype.set=function(json){this.json=json;};/**\r\n\t * Get JSON from the editor\r\n\t * @returns {Object} json\r\n\t */JSONEditor.prototype.get=function(){return this.json;};/**\r\n\t * Set string containing JSON for the editor\r\n\t * @param {String | undefined} jsonText\r\n\t */JSONEditor.prototype.setText=function(jsonText){this.json=util.parse(jsonText);};/**\r\n\t * Get stringified JSON contents from the editor\r\n\t * @returns {String} jsonText\r\n\t */JSONEditor.prototype.getText=function(){return JSON.stringify(this.json);};/**\r\n\t * Set a field name for the root node.\r\n\t * @param {String | undefined} name\r\n\t */JSONEditor.prototype.setName=function(name){if(!this.options){this.options={};}this.options.name=name;};/**\r\n\t * Get the field name for the root node.\r\n\t * @return {String | undefined} name\r\n\t */JSONEditor.prototype.getName=function(){return this.options&&this.options.name;};/**\r\n\t * Change the mode of the editor.\r\n\t * JSONEditor will be extended with all methods needed for the chosen mode.\r\n\t * @param {String} mode Available modes: 'tree' (default), 'view', 'form',\r\n\t * 'text', and 'code'.\r\n\t */JSONEditor.prototype.setMode=function(mode){var container=this.container;var options=util.extend({},this.options);var oldMode=options.mode;var data;var name;options.mode=mode;var config=JSONEditor.modes[mode];if(config){try{var asText=config.data=='text';name=this.getName();data=this[asText?'getText':'get']();// get text or json\nthis.destroy();util.clear(this);util.extend(this,config.mixin);this.create(container,options);this.setName(name);this[asText?'setText':'set'](data);// set text or json\nif(typeof config.load==='function'){try{config.load.call(this);}catch(err){console.error(err);}}if(typeof options.onModeChange==='function'&&mode!==oldMode){try{options.onModeChange(mode,oldMode);}catch(err){console.error(err);}}}catch(err){this._onError(err);}}else{throw new Error('Unknown mode \"'+options.mode+'\"');}};/**\r\n\t * Get the current mode\r\n\t * @return {string}\r\n\t */JSONEditor.prototype.getMode=function(){return this.options.mode;};/**\r\n\t * Throw an error. If an error callback is configured in options.error, this\r\n\t * callback will be invoked. Else, a regular error is thrown.\r\n\t * @param {Error} err\r\n\t * @private\r\n\t */JSONEditor.prototype._onError=function(err){if(this.options&&typeof this.options.onError==='function'){this.options.onError(err);}else{throw err;}};/**\r\n\t * Set a JSON schema for validation of the JSON object.\r\n\t * To remove the schema, call JSONEditor.setSchema(null)\r\n\t * @param {Object | null} schema\r\n\t */JSONEditor.prototype.setSchema=function(schema){// compile a JSON schema validator if a JSON schema is provided\nif(schema){var ajv;try{// grab ajv from options if provided, else create a new instance\najv=this.options.ajv||Ajv({allErrors:true,verbose:true});}catch(err){console.warn('Failed to create an instance of Ajv, JSON Schema validation is not available. Please use a JSONEditor bundle including Ajv, or pass an instance of Ajv as via the configuration option `ajv`.');}if(ajv){this.validateSchema=ajv.compile(schema);// add schema to the options, so that when switching to an other mode,\n// the set schema is not lost\nthis.options.schema=schema;// validate now\nthis.validate();}this.refresh();// update DOM\n}else{// remove current schema\nthis.validateSchema=null;this.options.schema=null;this.validate();// to clear current error messages\nthis.refresh();// update DOM\n}};/**\r\n\t * Validate current JSON object against the configured JSON schema\r\n\t * Throws an exception when no JSON schema is configured\r\n\t */JSONEditor.prototype.validate=function(){// must be implemented by treemode and textmode\n};/**\r\n\t * Refresh the rendered contents\r\n\t */JSONEditor.prototype.refresh=function(){// can be implemented by treemode and textmode\n};/**\r\n\t * Register a plugin with one ore multiple modes for the JSON Editor.\r\n\t *\r\n\t * A mode is described as an object with properties:\r\n\t *\r\n\t * - `mode: String` The name of the mode.\r\n\t * - `mixin: Object` An object containing the mixin functions which\r\n\t * will be added to the JSONEditor. Must contain functions\r\n\t * create, get, getText, set, and setText. May have\r\n\t * additional functions.\r\n\t * When the JSONEditor switches to a mixin, all mixin\r\n\t * functions are added to the JSONEditor, and then\r\n\t * the function `create(container, options)` is executed.\r\n\t * - `data: 'text' | 'json'` The type of data that will be used to load the mixin.\r\n\t * - `[load: function]` An optional function called after the mixin\r\n\t * has been loaded.\r\n\t *\r\n\t * @param {Object | Array} mode A mode object or an array with multiple mode objects.\r\n\t */JSONEditor.registerMode=function(mode){var i,prop;if(util.isArray(mode)){// multiple modes\nfor(i=0;i<mode.length;i++){JSONEditor.registerMode(mode[i]);}}else{// validate the new mode\nif(!('mode'in mode))throw new Error('Property \"mode\" missing');if(!('mixin'in mode))throw new Error('Property \"mixin\" missing');if(!('data'in mode))throw new Error('Property \"data\" missing');var name=mode.mode;if(name in JSONEditor.modes){throw new Error('Mode \"'+name+'\" already registered');}// validate the mixin\nif(typeof mode.mixin.create!=='function'){throw new Error('Required function \"create\" missing on mixin');}var reserved=['setMode','registerMode','modes'];for(i=0;i<reserved.length;i++){prop=reserved[i];if(prop in mode.mixin){throw new Error('Reserved property \"'+prop+'\" not allowed in mixin');}}JSONEditor.modes[name]=mode;}};// register tree and text modes\nJSONEditor.registerMode(treemode);JSONEditor.registerMode(textmode);module.exports=JSONEditor;/***/},/* 1 */ /***/function(module,exports,__webpack_require__){'use strict';var compileSchema=__webpack_require__(2),resolve=__webpack_require__(3),Cache=__webpack_require__(21),SchemaObject=__webpack_require__(16),stableStringify=__webpack_require__(12),formats=__webpack_require__(22),rules=__webpack_require__(23),v5=__webpack_require__(43),util=__webpack_require__(11),async=__webpack_require__(17),co=__webpack_require__(19);module.exports=Ajv;Ajv.prototype.compileAsync=async.compile;Ajv.prototype.addKeyword=__webpack_require__(49);Ajv.ValidationError=__webpack_require__(20);var META_SCHEMA_ID='http://json-schema.org/draft-04/schema';var SCHEMA_URI_FORMAT=/^(?:(?:[a-z][a-z0-9+-.]*:)?\\/\\/)?[^\\s]*$/i;function SCHEMA_URI_FORMAT_FUNC(str){return SCHEMA_URI_FORMAT.test(str);}var META_IGNORE_OPTIONS=['removeAdditional','useDefaults','coerceTypes'];/**\r\n\t * Creates validator instance.\r\n\t * Usage: `Ajv(opts)`\r\n\t * @param {Object} opts optional options\r\n\t * @return {Object} ajv instance\r\n\t */function Ajv(opts){if(!(this instanceof Ajv))return new Ajv(opts);var self=this;opts=this._opts=util.copy(opts)||{};this._schemas={};this._refs={};this._formats=formats(opts.format);this._cache=opts.cache||new Cache();this._loadingSchemas={};this.RULES=rules();// this is done on purpose, so that methods are bound to the instance\n// (without using bind) so that they can be used without the instance\nthis.validate=validate;this.compile=compile;this.addSchema=addSchema;this.addMetaSchema=addMetaSchema;this.validateSchema=validateSchema;this.getSchema=getSchema;this.removeSchema=removeSchema;this.addFormat=addFormat;this.errorsText=errorsText;this._addSchema=_addSchema;this._compile=_compile;opts.loopRequired=opts.loopRequired||Infinity;if(opts.async||opts.transpile)async.setup(opts);if(opts.beautify===true)opts.beautify={indent_size:2};if(opts.errorDataPath=='property')opts._errorDataPathProperty=true;this._metaOpts=getMetaSchemaOptions();addInitialSchemas();if(opts.formats)addInitialFormats();if(opts.v5)v5.enable(this);if(typeof opts.meta=='object')addMetaSchema(opts.meta);/**\r\n\t * Validate data using schema\r\n\t * Schema will be compiled and cached (using serialized JSON as key. [json-stable-stringify](https://github.com/substack/json-stable-stringify) is used to serialize.\r\n\t * @param {String|Object} schemaKeyRef key, ref or schema object\r\n\t * @param {Any} data to be validated\r\n\t * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`).\r\n\t */function validate(schemaKeyRef,data){var v;if(typeof schemaKeyRef=='string'){v=getSchema(schemaKeyRef);if(!v)throw new Error('no schema with key or ref \"'+schemaKeyRef+'\"');}else{var schemaObj=_addSchema(schemaKeyRef);v=schemaObj.validate||_compile(schemaObj);}var valid=v(data);if(v.async)return self._opts.async=='*'?co(valid):valid;self.errors=v.errors;return valid;}/**\r\n\t * Create validating function for passed schema.\r\n\t * @param {Object} schema schema object\r\n\t * @return {Function} validating function\r\n\t */function compile(schema){var schemaObj=_addSchema(schema);return schemaObj.validate||_compile(schemaObj);}/**\r\n\t * Adds schema to the instance.\r\n\t * @param {Object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored.\r\n\t * @param {String} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\r\n\t * @param {Boolean} _skipValidation true to skip schema validation. Used internally, option validateSchema should be used instead.\r\n\t * @param {Boolean} _meta true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\r\n\t */function addSchema(schema,key,_skipValidation,_meta){if(Array.isArray(schema)){for(var i=0;i<schema.length;i++)addSchema(schema[i],undefined,_skipValidation,_meta);return;}// can key/id have # inside?\nkey=resolve.normalizeId(key||schema.id);checkUnique(key);var schemaObj=self._schemas[key]=_addSchema(schema,_skipValidation,true);schemaObj.meta=_meta;}/**\r\n\t * Add schema that will be used to validate other schemas\r\n\t * options in META_IGNORE_OPTIONS are alway set to false\r\n\t * @param {Object} schema schema object\r\n\t * @param {String} key optional schema key\r\n\t * @param {Boolean} skipValidation true to skip schema validation, can be used to override validateSchema option for meta-schema\r\n\t */function addMetaSchema(schema,key,skipValidation){addSchema(schema,key,skipValidation,true);}/**\r\n\t * Validate schema\r\n\t * @param {Object} schema schema to validate\r\n\t * @param {Boolean} throwOrLogError pass true to throw (or log) an error if invalid\r\n\t * @return {Boolean} true if schema is valid\r\n\t */function validateSchema(schema,throwOrLogError){var $schema=schema.$schema||self._opts.defaultMeta||defaultMeta();var currentUriFormat=self._formats.uri;self._formats.uri=typeof currentUriFormat=='function'?SCHEMA_URI_FORMAT_FUNC:SCHEMA_URI_FORMAT;var valid=validate($schema,schema);self._formats.uri=currentUriFormat;if(!valid&&throwOrLogError){var message='schema is invalid:'+errorsText();if(self._opts.validateSchema=='log')console.error(message);else throw new Error(message);}return valid;}function defaultMeta(){var meta=self._opts.meta;self._opts.defaultMeta=typeof meta=='object'?meta.id||meta:self._opts.v5?v5.META_SCHEMA_ID:META_SCHEMA_ID;return self._opts.defaultMeta;}/**\r\n\t * Get compiled schema from the instance by `key` or `ref`.\r\n\t * @param {String} keyRef `key` that was passed to `addSchema` or full schema reference (`schema.id` or resolved id).\r\n\t * @return {Function} schema validating function (with property `schema`).\r\n\t */function getSchema(keyRef){var schemaObj=_getSchemaObj(keyRef);switch(typeof schemaObj){case'object':return schemaObj.validate||_compile(schemaObj);case'string':return getSchema(schemaObj);}}function _getSchemaObj(keyRef){keyRef=resolve.normalizeId(keyRef);return self._schemas[keyRef]||self._refs[keyRef];}/**\r\n\t * Remove cached schema(s).\r\n\t * If no parameter is passed all schemas but meta-schemas are removed.\r\n\t * If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.\r\n\t * Even if schema is referenced by other schemas it still can be removed as other schemas have local references.\r\n\t * @param {String|Object|RegExp} schemaKeyRef key, ref, pattern to match key/ref or schema object\r\n\t */function removeSchema(schemaKeyRef){switch(typeof schemaKeyRef){case'undefined':_removeAllSchemas(self._schemas);_removeAllSchemas(self._refs);self._cache.clear();return;case'string':var schemaObj=_getSchemaObj(schemaKeyRef);if(schemaObj)self._cache.del(schemaObj.jsonStr);delete self._schemas[schemaKeyRef];delete self._refs[schemaKeyRef];return;case'object':if(schemaKeyRef instanceof RegExp){_removeAllSchemas(self._schemas,schemaKeyRef);_removeAllSchemas(self._refs,schemaKeyRef);return;}var jsonStr=stableStringify(schemaKeyRef);self._cache.del(jsonStr);var id=schemaKeyRef.id;if(id){id=resolve.normalizeId(id);delete self._schemas[id];delete self._refs[id];}}}function _removeAllSchemas(schemas,regex){for(var keyRef in schemas){var schemaObj=schemas[keyRef];if(!schemaObj.meta&&(!regex||regex.test(keyRef))){self._cache.del(schemaObj.jsonStr);delete schemas[keyRef];}}}function _addSchema(schema,skipValidation,shouldAddSchema){if(typeof schema!='object')throw new Error('schema should be object');var jsonStr=stableStringify(schema);var cached=self._cache.get(jsonStr);if(cached)return cached;shouldAddSchema=shouldAddSchema||self._opts.addUsedSchema!==false;var id=resolve.normalizeId(schema.id);if(id&&shouldAddSchema)checkUnique(id);if(self._opts.validateSchema!==false&&!skipValidation)validateSchema(schema,true);var localRefs=resolve.ids.call(self,schema);var schemaObj=new SchemaObject({id:id,schema:schema,localRefs:localRefs,jsonStr:jsonStr});if(id[0]!='#'&&shouldAddSchema)self._refs[id]=schemaObj;self._cache.put(jsonStr,schemaObj);return schemaObj;}function _compile(schemaObj,root){if(schemaObj.compiling){schemaObj.validate=callValidate;callValidate.schema=schemaObj.schema;callValidate.errors=null;callValidate.root=root?root:callValidate;if(schemaObj.schema.$async===true)callValidate.async=true;return callValidate;}schemaObj.compiling=true;var currentOpts;if(schemaObj.meta){currentOpts=self._opts;self._opts=self._metaOpts;}var v;try{v=compileSchema.call(self,schemaObj.schema,root,schemaObj.localRefs);}finally{schemaObj.compiling=false;if(schemaObj.meta)self._opts=currentOpts;}schemaObj.validate=v;schemaObj.refs=v.refs;schemaObj.refVal=v.refVal;schemaObj.root=v.root;return v;function callValidate(){var _validate=schemaObj.validate;var result=_validate.apply(null,arguments);callValidate.errors=_validate.errors;return result;}}/**\r\n\t * Convert array of error message objects to string\r\n\t * @param {Array<Object>} errors optional array of validation errors, if not passed errors from the instance are used.\r\n\t * @param {Object} options optional options with properties `separator` and `dataVar`.\r\n\t * @return {String} human readable string with all errors descriptions\r\n\t */function errorsText(errors,options){errors=errors||self.errors;if(!errors)return'No errors';options=options||{};var separator=options.separator===undefined?', ':options.separator;var dataVar=options.dataVar===undefined?'data':options.dataVar;var text='';for(var i=0;i<errors.length;i++){var e=errors[i];if(e)text+=dataVar+e.dataPath+' '+e.message+separator;}return text.slice(0,-separator.length);}/**\r\n\t * Add custom format\r\n\t * @param {String} name format name\r\n\t * @param {String|RegExp|Function} format string is converted to RegExp; function should return boolean (true when valid)\r\n\t */function addFormat(name,format){if(typeof format=='string')format=new RegExp(format);self._formats[name]=format;}function addInitialSchemas(){if(self._opts.meta!==false){var metaSchema=__webpack_require__(50);addMetaSchema(metaSchema,META_SCHEMA_ID,true);self._refs['http://json-schema.org/schema']=META_SCHEMA_ID;}var optsSchemas=self._opts.schemas;if(!optsSchemas)return;if(Array.isArray(optsSchemas))addSchema(optsSchemas);else for(var key in optsSchemas)addSchema(optsSchemas[key],key);}function addInitialFormats(){for(var name in self._opts.formats){var format=self._opts.formats[name];addFormat(name,format);}}function checkUnique(id){if(self._schemas[id]||self._refs[id])throw new Error('schema with key or id \"'+id+'\" already exists');}function getMetaSchemaOptions(){var metaOpts=util.copy(self._opts);for(var i=0;i<META_IGNORE_OPTIONS.length;i++)delete metaOpts[META_IGNORE_OPTIONS[i]];return metaOpts;}}/***/},/* 2 */ /***/function(module,exports,__webpack_require__){'use strict';var resolve=__webpack_require__(3),util=__webpack_require__(11),stableStringify=__webpack_require__(12),async=__webpack_require__(17);var beautify=function(){try{return __webpack_require__(!function webpackMissingModule(){var e=new Error(\"Cannot find module \\\"js-beautify\\\"\");e.code='MODULE_NOT_FOUND';throw e;}()).js_beautify;}catch(e){/*empty*/}}();var validateGenerator=__webpack_require__(18);module.exports=compile;/**\r\n\t * Compiles schema to validation function\r\n\t * @this Ajv\r\n\t * @param {Object} schema schema object\r\n\t * @param {Object} root object with information about the root schema for this schema\r\n\t * @param {Object} localRefs the hash of local references inside the schema (created by resolve.id), used for inline resolution\r\n\t * @param {String} baseId base ID for IDs in the schema\r\n\t * @return {Function} validation function\r\n\t */function compile(schema,root,localRefs,baseId){/* jshint validthis: true, evil: true */ /* eslint no-shadow: 0 */var self=this,opts=this._opts,refVal=[undefined],refs={},patterns=[],patternsHash={},defaults=[],defaultsHash={},customRules=[];root=root||{schema:schema,refVal:refVal,refs:refs};var formats=this._formats;var RULES=this.RULES;return localCompile(schema,root,localRefs,baseId);function localCompile(_schema,_root,localRefs,baseId){var isRoot=!_root||_root&&_root.schema==_schema;if(_root.schema!=root.schema)return compile.call(self,_schema,_root,localRefs,baseId);var $async=_schema.$async===true;if($async&&!opts.transpile)async.setup(opts);var sourceCode=validateGenerator({isTop:true,schema:_schema,isRoot:isRoot,baseId:baseId,root:_root,schemaPath:'',errSchemaPath:'#',errorPath:'\"\"',RULES:RULES,validate:validateGenerator,util:util,resolve:resolve,resolveRef:resolveRef,usePattern:usePattern,useDefault:useDefault,useCustomRule:useCustomRule,opts:opts,formats:formats,self:self});sourceCode=vars(refVal,refValCode)+vars(patterns,patternCode)+vars(defaults,defaultCode)+vars(customRules,customRuleCode)+sourceCode;if(opts.beautify){/* istanbul ignore else */if(beautify)sourceCode=beautify(sourceCode,opts.beautify);else console.error('\"npm install js-beautify\" to use beautify option');}// console.log('\\n\\n\\n *** \\n', sourceCode);\nvar validate,validateCode,transpile=opts._transpileFunc;try{validateCode=$async&&transpile?transpile(sourceCode):sourceCode;eval(validateCode);refVal[0]=validate;}catch(e){console.error('Error compiling schema, function code:',validateCode);throw e;}validate.schema=_schema;validate.errors=null;validate.refs=refs;validate.refVal=refVal;validate.root=isRoot?validate:_root;if($async)validate.async=true;validate.sourceCode=sourceCode;return validate;}function resolveRef(baseId,ref,isRoot){ref=resolve.url(baseId,ref);var refIndex=refs[ref];var _refVal,refCode;if(refIndex!==undefined){_refVal=refVal[refIndex];refCode='refVal['+refIndex+']';return resolvedRef(_refVal,refCode);}if(!isRoot){var rootRefId=root.refs[ref];if(rootRefId!==undefined){_refVal=root.refVal[rootRefId];refCode=addLocalRef(ref,_refVal);return resolvedRef(_refVal,refCode);}}refCode=addLocalRef(ref);var v=resolve.call(self,localCompile,root,ref);if(!v){var localSchema=localRefs&&localRefs[ref];if(localSchema){v=resolve.inlineRef(localSchema,opts.inlineRefs)?localSchema:compile.call(self,localSchema,root,localRefs,baseId);}}if(v){replaceLocalRef(ref,v);return resolvedRef(v,refCode);}}function addLocalRef(ref,v){var refId=refVal.length;refVal[refId]=v;refs[ref]=refId;return'refVal'+refId;}function replaceLocalRef(ref,v){var refId=refs[ref];refVal[refId]=v;}function resolvedRef(refVal,code){return typeof refVal=='object'?{code:code,schema:refVal,inline:true}:{code:code,async:refVal&&refVal.async};}function usePattern(regexStr){var index=patternsHash[regexStr];if(index===undefined){index=patternsHash[regexStr]=patterns.length;patterns[index]=regexStr;}return'pattern'+index;}function useDefault(value){switch(typeof value){case'boolean':case'number':return''+value;case'string':return util.toQuotedString(value);case'object':if(value===null)return'null';var valueStr=stableStringify(value);var index=defaultsHash[valueStr];if(index===undefined){index=defaultsHash[valueStr]=defaults.length;defaults[index]=value;}return'default'+index;}}function useCustomRule(rule,schema,parentSchema,it){var compile=rule.definition.compile,inline=rule.definition.inline,macro=rule.definition.macro;var validate;if(compile){validate=compile.call(self,schema,parentSchema);}else if(macro){validate=macro.call(self,schema,parentSchema);if(opts.validateSchema!==false)self.validateSchema(validate,true);}else if(inline){validate=inline.call(self,it,rule.keyword,schema,parentSchema);}else{validate=rule.definition.validate;}var index=customRules.length;customRules[index]=validate;return{code:'customRule'+index,validate:validate};}}function patternCode(i,patterns){return'var pattern'+i+' = new RegExp('+util.toQuotedString(patterns[i])+');';}function defaultCode(i){return'var default'+i+' = defaults['+i+'];';}function refValCode(i,refVal){return refVal[i]?'var refVal'+i+' = refVal['+i+'];':'';}function customRuleCode(i){return'var customRule'+i+' = customRules['+i+'];';}function vars(arr,statement){if(!arr.length)return'';var code='';for(var i=0;i<arr.length;i++)code+=statement(i,arr);return code;}/*eslint-disable no-unused-vars */ /**\r\n\t * Functions below are used inside compiled validations function\r\n\t */var co=__webpack_require__(19);var ucs2length=util.ucs2length;var equal=__webpack_require__(10);// this error is thrown by async schemas to return validation errors via exception\nvar ValidationError=__webpack_require__(20);/*eslint-enable no-unused-vars */ /***/},/* 3 */ /***/function(module,exports,__webpack_require__){'use strict';var url=__webpack_require__(4),equal=__webpack_require__(10),util=__webpack_require__(11),SchemaObject=__webpack_require__(16);module.exports=resolve;resolve.normalizeId=normalizeId;resolve.fullPath=getFullPath;resolve.url=resolveUrl;resolve.ids=resolveIds;resolve.inlineRef=inlineRef;/**\r\n\t * [resolve and compile the references ($ref)]\r\n\t * @this Ajv\r\n\t * @param {Function} compile reference to schema compilation funciton (localCompile)\r\n\t * @param {Object} root object with information about the root schema for the current schema\r\n\t * @param {String} ref reference to resolve\r\n\t * @return {Object|Function} schema object (if the schema can be inlined) or validation function\r\n\t */function resolve(compile,root,ref){/* jshint validthis: true */var refVal=this._refs[ref];if(typeof refVal=='string'){if(this._refs[refVal])refVal=this._refs[refVal];else return resolve.call(this,compile,root,refVal);}refVal=refVal||this._schemas[ref];if(refVal instanceof SchemaObject){return inlineRef(refVal.schema,this._opts.inlineRefs)?refVal.schema:refVal.validate||this._compile(refVal);}var res=_resolve.call(this,root,ref);var schema,v,baseId;if(res){schema=res.schema;root=res.root;baseId=res.baseId;}if(schema instanceof SchemaObject){v=schema.validate||compile.call(this,schema.schema,root,undefined,baseId);}else if(schema){v=inlineRef(schema,this._opts.inlineRefs)?schema:compile.call(this,schema,root,undefined,baseId);}return v;}/* @this Ajv */function _resolve(root,ref){/* jshint validthis: true */var p=url.parse(ref,false,true),refPath=_getFullPath(p),baseId=getFullPath(root.schema.id);if(refPath!==baseId){var id=normalizeId(refPath);var refVal=this._refs[id];if(typeof refVal=='string'){return resolveRecursive.call(this,root,refVal,p);}else if(refVal instanceof SchemaObject){if(!refVal.validate)this._compile(refVal);root=refVal;}else{refVal=this._schemas[id];if(refVal instanceof SchemaObject){if(!refVal.validate)this._compile(refVal);if(id==normalizeId(ref))return{schema:refVal,root:root,baseId:baseId};root=refVal;}}if(!root.schema)return;baseId=getFullPath(root.schema.id);}return getJsonPointer.call(this,p,baseId,root.schema,root);}/* @this Ajv */function resolveRecursive(root,ref,parsedRef){/* jshint validthis: true */var res=_resolve.call(this,root,ref);if(res){var schema=res.schema;var baseId=res.baseId;root=res.root;if(schema.id)baseId=resolveUrl(baseId,schema.id);return getJsonPointer.call(this,parsedRef,baseId,schema,root);}}var PREVENT_SCOPE_CHANGE=util.toHash(['properties','patternProperties','enum','dependencies','definitions']);/* @this Ajv */function getJsonPointer(parsedRef,baseId,schema,root){/* jshint validthis: true */parsedRef.hash=parsedRef.hash||'';if(parsedRef.hash.slice(0,2)!='#/')return;var parts=parsedRef.hash.split('/');for(var i=1;i<parts.length;i++){var part=parts[i];if(part){part=util.unescapeFragment(part);schema=schema[part];if(!schema)break;if(schema.id&&!PREVENT_SCOPE_CHANGE[part])baseId=resolveUrl(baseId,schema.id);if(schema.$ref){var $ref=resolveUrl(baseId,schema.$ref);var res=_resolve.call(this,root,$ref);if(res){schema=res.schema;root=res.root;baseId=res.baseId;}}}}if(schema&&schema!=root.schema)return{schema:schema,root:root,baseId:baseId};}var SIMPLE_INLINED=util.toHash(['type','format','pattern','maxLength','minLength','maxProperties','minProperties','maxItems','minItems','maximum','minimum','uniqueItems','multipleOf','required','enum']);function inlineRef(schema,limit){if(limit===false)return false;if(limit===undefined||limit===true)return checkNoRef(schema);else if(limit)return countKeys(schema)<=limit;}function checkNoRef(schema){var item;if(Array.isArray(schema)){for(var i=0;i<schema.length;i++){item=schema[i];if(typeof item=='object'&&!checkNoRef(item))return false;}}else{for(var key in schema){if(key=='$ref')return false;item=schema[key];if(typeof item=='object'&&!checkNoRef(item))return false;}}return true;}function countKeys(schema){var count=0,item;if(Array.isArray(schema)){for(var i=0;i<schema.length;i++){item=schema[i];if(typeof item=='object')count+=countKeys(item);if(count==Infinity)return Infinity;}}else{for(var key in schema){if(key=='$ref')return Infinity;if(SIMPLE_INLINED[key]){count++;}else{item=schema[key];if(typeof item=='object')count+=countKeys(item)+1;if(count==Infinity)return Infinity;}}}return count;}function getFullPath(id,normalize){if(normalize!==false)id=normalizeId(id);var p=url.parse(id,false,true);return _getFullPath(p);}function _getFullPath(p){return(p.protocol||'')+(p.protocol?'//':'')+(p.host||'')+(p.path||'')+'#';}var TRAILING_SLASH_HASH=/#\\/?$/;function normalizeId(id){return id?id.replace(TRAILING_SLASH_HASH,''):'';}function resolveUrl(baseId,id){id=normalizeId(id);return url.resolve(baseId,id);}/* @this Ajv */function resolveIds(schema){/* eslint no-shadow: 0 */ /* jshint validthis: true */var id=normalizeId(schema.id);var localRefs={};_resolveIds.call(this,schema,getFullPath(id,false),id);return localRefs;function _resolveIds(schema,fullPath,baseId){/* jshint validthis: true */if(Array.isArray(schema)){for(var i=0;i<schema.length;i++)_resolveIds.call(this,schema[i],fullPath+'/'+i,baseId);}else if(schema&&typeof schema=='object'){if(typeof schema.id=='string'){var id=baseId=baseId?url.resolve(baseId,schema.id):schema.id;id=normalizeId(id);var refVal=this._refs[id];if(typeof refVal=='string')refVal=this._refs[refVal];if(refVal&&refVal.schema){if(!equal(schema,refVal.schema))throw new Error('id \"'+id+'\" resolves to more than one schema');}else if(id!=normalizeId(fullPath)){if(id[0]=='#'){if(localRefs[id]&&!equal(schema,localRefs[id]))throw new Error('id \"'+id+'\" resolves to more than one schema');localRefs[id]=schema;}else{this._refs[id]=fullPath;}}}for(var key in schema)_resolveIds.call(this,schema[key],fullPath+'/'+util.escapeFragment(key),baseId);}}}/***/},/* 4 */ /***/function(module,exports,__webpack_require__){// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\nvar punycode=__webpack_require__(5);exports.parse=urlParse;exports.resolve=urlResolve;exports.resolveObject=urlResolveObject;exports.format=urlFormat;exports.Url=Url;function Url(){this.protocol=null;this.slashes=null;this.auth=null;this.host=null;this.port=null;this.hostname=null;this.hash=null;this.search=null;this.query=null;this.pathname=null;this.path=null;this.href=null;}// Reference: RFC 3986, RFC 1808, RFC 2396\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern=/^([a-z0-9.+-]+:)/i,portPattern=/:[0-9]*$/,// RFC 2396: characters reserved for delimiting URLs.\n// We actually just auto-escape these.\ndelims=['<','>','\"','`',' ','\\r','\\n','\\t'],// RFC 2396: characters not allowed for various reasons.\nunwise=['{','}','|','\\\\','^','`'].concat(delims),// Allowed by RFCs, but cause of XSS attacks. Always escape these.\nautoEscape=['\\''].concat(unwise),// Characters that are never ever allowed in a hostname.\n// Note that any invalid chars are also handled, but these\n// are the ones that are *expected* to be seen, so we fast-path\n// them.\nnonHostChars=['%','/','?',';','#'].concat(autoEscape),hostEndingChars=['/','?','#'],hostnameMaxLen=255,hostnamePartPattern=/^[a-z0-9A-Z_-]{0,63}$/,hostnamePartStart=/^([a-z0-9A-Z_-]{0,63})(.*)$/,// protocols that can allow \"unsafe\" and \"unwise\" chars.\nunsafeProtocol={'javascript':true,'javascript:':true},// protocols that never have a hostname.\nhostlessProtocol={'javascript':true,'javascript:':true},// protocols that always contain a // bit.\nslashedProtocol={'http':true,'https':true,'ftp':true,'gopher':true,'file':true,'http:':true,'https:':true,'ftp:':true,'gopher:':true,'file:':true},querystring=__webpack_require__(7);function urlParse(url,parseQueryString,slashesDenoteHost){if(url&&isObject(url)&&url instanceof Url)return url;var u=new Url();u.parse(url,parseQueryString,slashesDenoteHost);return u;}Url.prototype.parse=function(url,parseQueryString,slashesDenoteHost){if(!isString(url)){throw new TypeError(\"Parameter 'url' must be a string, not \"+typeof url);}var rest=url;// trim before proceeding.\n// This is to support parse stuff like \" http://foo.com \\n\"\nrest=rest.trim();var proto=protocolPattern.exec(rest);if(proto){proto=proto[0];var lowerProto=proto.toLowerCase();this.protocol=lowerProto;rest=rest.substr(proto.length);}// figure out if it's got a host\n// user@server is *always* interpreted as a hostname, and url\n// resolution will treat //foo/bar as host=foo,path=bar because that's\n// how the browser resolves relative URLs.\nif(slashesDenoteHost||proto||rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)){var slashes=rest.substr(0,2)==='//';if(slashes&&!(proto&&hostlessProtocol[proto])){rest=rest.substr(2);this.slashes=true;}}if(!hostlessProtocol[proto]&&(slashes||proto&&!slashedProtocol[proto])){// there's a hostname.\n// the first instance of /, ?, ;, or # ends the host.\n//\n// If there is an @ in the hostname, then non-host chars *are* allowed\n// to the left of the last @ sign, unless some host-ending character\n// comes *before* the @-sign.\n// URLs are obnoxious.\n//\n// ex:\n// http://a@b@c/ => user:a@b host:c\n// http://a@b?@c => user:a host:c path:/?@c\n// v0.12 TODO(isaacs): This is not quite how Chrome does things.\n// Review our test case against browsers more comprehensively.\n// find the first instance of any hostEndingChars\nvar hostEnd=-1;for(var i=0;i<hostEndingChars.length;i++){var hec=rest.indexOf(hostEndingChars[i]);if(hec!==-1&&(hostEnd===-1||hec<hostEnd))hostEnd=hec;}// at this point, either we have an explicit point where the\n// auth portion cannot go past, or the last @ char is the decider.\nvar auth,atSign;if(hostEnd===-1){// atSign can be anywhere.\natSign=rest.lastIndexOf('@');}else{// atSign must be in auth portion.\n// http://a@b/c@d => host:b auth:a path:/c@d\natSign=rest.lastIndexOf('@',hostEnd);}// Now we have a portion which is definitely the auth.\n// Pull that off.\nif(atSign!==-1){auth=rest.slice(0,atSign);rest=rest.slice(atSign+1);this.auth=decodeURIComponent(auth);}// the host is the remaining to the left of the first non-host char\nhostEnd=-1;for(var i=0;i<nonHostChars.length;i++){var hec=rest.indexOf(nonHostChars[i]);if(hec!==-1&&(hostEnd===-1||hec<hostEnd))hostEnd=hec;}// if we still have not hit it, then the entire thing is a host.\nif(hostEnd===-1)hostEnd=rest.length;this.host=rest.slice(0,hostEnd);rest=rest.slice(hostEnd);// pull out port.\nthis.parseHost();// we've indicated that there is a hostname,\n// so even if it's empty, it has to be present.\nthis.hostname=this.hostname||'';// if hostname begins with [ and ends with ]\n// assume that it's an IPv6 address.\nvar ipv6Hostname=this.hostname[0]==='['&&this.hostname[this.hostname.length-1]===']';// validate a little.\nif(!ipv6Hostname){var hostparts=this.hostname.split(/\\./);for(var i=0,l=hostparts.length;i<l;i++){var part=hostparts[i];if(!part)continue;if(!part.match(hostnamePartPattern)){var newpart='';for(var j=0,k=part.length;j<k;j++){if(part.charCodeAt(j)>127){// we replace non-ASCII char with a temporary placeholder\n// we need this to make sure size of hostname is not\n// broken by replacing non-ASCII by nothing\nnewpart+='x';}else{newpart+=part[j];}}// we test again with ASCII char only\nif(!newpart.match(hostnamePartPattern)){var validParts=hostparts.slice(0,i);var notHost=hostparts.slice(i+1);var bit=part.match(hostnamePartStart);if(bit){validParts.push(bit[1]);notHost.unshift(bit[2]);}if(notHost.length){rest='/'+notHost.join('.')+rest;}this.hostname=validParts.join('.');break;}}}}if(this.hostname.length>hostnameMaxLen){this.hostname='';}else{// hostnames are always lower case.\nthis.hostname=this.hostname.toLowerCase();}if(!ipv6Hostname){// IDNA Support: Returns a puny coded representation of \"domain\".\n// It only converts the part of the domain name that\n// has non ASCII characters. I.e. it dosent matter if\n// you call it with a domain that already is in ASCII.\nvar domainArray=this.hostname.split('.');var newOut=[];for(var i=0;i<domainArray.length;++i){var s=domainArray[i];newOut.push(s.match(/[^A-Za-z0-9_-]/)?'xn--'+punycode.encode(s):s);}this.hostname=newOut.join('.');}var p=this.port?':'+this.port:'';var h=this.hostname||'';this.host=h+p;this.href+=this.host;// strip [ and ] from the hostname\n// the host field still retains them, though\nif(ipv6Hostname){this.hostname=this.hostname.substr(1,this.hostname.length-2);if(rest[0]!=='/'){rest='/'+rest;}}}// now rest is set to the post-host stuff.\n// chop off any delim chars.\nif(!unsafeProtocol[lowerProto]){// First, make 100% sure that any \"autoEscape\" chars get\n// escaped, even if encodeURIComponent doesn't think they\n// need to be.\nfor(var i=0,l=autoEscape.length;i<l;i++){var ae=autoEscape[i];var esc=encodeURIComponent(ae);if(esc===ae){esc=escape(ae);}rest=rest.split(ae).join(esc);}}// chop off from the tail first.\nvar hash=rest.indexOf('#');if(hash!==-1){// got a fragment string.\nthis.hash=rest.substr(hash);rest=rest.slice(0,hash);}var qm=rest.indexOf('?');if(qm!==-1){this.search=rest.substr(qm);this.query=rest.substr(qm+1);if(parseQueryString){this.query=querystring.parse(this.query);}rest=rest.slice(0,qm);}else if(parseQueryString){// no query string, but parseQueryString still requested\nthis.search='';this.query={};}if(rest)this.pathname=rest;if(slashedProtocol[lowerProto]&&this.hostname&&!this.pathname){this.pathname='/';}//to support http.request\nif(this.pathname||this.search){var p=this.pathname||'';var s=this.search||'';this.path=p+s;}// finally, reconstruct the href based on what has been validated.\nthis.href=this.format();return this;};// format a parsed object into a url string\nfunction urlFormat(obj){// ensure it's an object, and not a string url.\n// If it's an obj, this is a no-op.\n// this way, you can call url_format() on strings\n// to clean up potentially wonky urls.\nif(isString(obj))obj=urlParse(obj);if(!(obj instanceof Url))return Url.prototype.format.call(obj);return obj.format();}Url.prototype.format=function(){var auth=this.auth||'';if(auth){auth=encodeURIComponent(auth);auth=auth.replace(/%3A/i,':');auth+='@';}var protocol=this.protocol||'',pathname=this.pathname||'',hash=this.hash||'',host=false,query='';if(this.host){host=auth+this.host;}else if(this.hostname){host=auth+(this.hostname.indexOf(':')===-1?this.hostname:'['+this.hostname+']');if(this.port){host+=':'+this.port;}}if(this.query&&isObject(this.query)&&Object.keys(this.query).length){query=querystring.stringify(this.query);}var search=this.search||query&&'?'+query||'';if(protocol&&protocol.substr(-1)!==':')protocol+=':';// only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\n// unless they had them to begin with.\nif(this.slashes||(!protocol||slashedProtocol[protocol])&&host!==false){host='//'+(host||'');if(pathname&&pathname.charAt(0)!=='/')pathname='/'+pathname;}else if(!host){host='';}if(hash&&hash.charAt(0)!=='#')hash='#'+hash;if(search&&search.charAt(0)!=='?')search='?'+search;pathname=pathname.replace(/[?#]/g,function(match){return encodeURIComponent(match);});search=search.replace('#','%23');return protocol+host+pathname+search+hash;};function urlResolve(source,relative){return urlParse(source,false,true).resolve(relative);}Url.prototype.resolve=function(relative){return this.resolveObject(urlParse(relative,false,true)).format();};function urlResolveObject(source,relative){if(!source)return relative;return urlParse(source,false,true).resolveObject(relative);}Url.prototype.resolveObject=function(relative){if(isString(relative)){var rel=new Url();rel.parse(relative,false,true);relative=rel;}var result=new Url();Object.keys(this).forEach(function(k){result[k]=this[k];},this);// hash is always overridden, no matter what.\n// even href=\"\" will remove it.\nresult.hash=relative.hash;// if the relative url is empty, then there's nothing left to do here.\nif(relative.href===''){result.href=result.format();return result;}// hrefs like //foo/bar always cut to the protocol.\nif(relative.slashes&&!relative.protocol){// take everything except the protocol from relative\nObject.keys(relative).forEach(function(k){if(k!=='protocol')result[k]=relative[k];});//urlParse appends trailing / to urls like http://www.example.com\nif(slashedProtocol[result.protocol]&&result.hostname&&!result.pathname){result.path=result.pathname='/';}result.href=result.format();return result;}if(relative.protocol&&relative.protocol!==result.protocol){// if it's a known url protocol, then changing\n// the protocol does weird things\n// first, if it's not file:, then we MUST have a host,\n// and if there was a path\n// to begin with, then we MUST have a path.\n// if it is file:, then the host is dropped,\n// because that's known to be hostless.\n// anything else is assumed to be absolute.\nif(!slashedProtocol[relative.protocol]){Object.keys(relative).forEach(function(k){result[k]=relative[k];});result.href=result.format();return result;}result.protocol=relative.protocol;if(!relative.host&&!hostlessProtocol[relative.protocol]){var relPath=(relative.pathname||'').split('/');while(relPath.length&&!(relative.host=relPath.shift()));if(!relative.host)relative.host='';if(!relative.hostname)relative.hostname='';if(relPath[0]!=='')relPath.unshift('');if(relPath.length<2)relPath.unshift('');result.pathname=relPath.join('/');}else{result.pathname=relative.pathname;}result.search=relative.search;result.query=relative.query;result.host=relative.host||'';result.auth=relative.auth;result.hostname=relative.hostname||relative.host;result.port=relative.port;// to support http.request\nif(result.pathname||result.search){var p=result.pathname||'';var s=result.search||'';result.path=p+s;}result.slashes=result.slashes||relative.slashes;result.href=result.format();return result;}var isSourceAbs=result.pathname&&result.pathname.charAt(0)==='/',isRelAbs=relative.host||relative.pathname&&relative.pathname.charAt(0)==='/',mustEndAbs=isRelAbs||isSourceAbs||result.host&&relative.pathname,removeAllDots=mustEndAbs,srcPath=result.pathname&&result.pathname.split('/')||[],relPath=relative.pathname&&relative.pathname.split('/')||[],psychotic=result.protocol&&!slashedProtocol[result.protocol];// if the url is a non-slashed url, then relative\n// links like ../.. should be able\n// to crawl up to the hostname, as well. This is strange.\n// result.protocol has already been set by now.\n// Later on, put the first path part into the host field.\nif(psychotic){result.hostname='';result.port=null;if(result.host){if(srcPath[0]==='')srcPath[0]=result.host;else srcPath.unshift(result.host);}result.host='';if(relative.protocol){relative.hostname=null;relative.port=null;if(relative.host){if(relPath[0]==='')relPath[0]=relative.host;else relPath.unshift(relative.host);}relative.host=null;}mustEndAbs=mustEndAbs&&(relPath[0]===''||srcPath[0]==='');}if(isRelAbs){// it's absolute.\nresult.host=relative.host||relative.host===''?relative.host:result.host;result.hostname=relative.hostname||relative.hostname===''?relative.hostname:result.hostname;result.search=relative.search;result.query=relative.query;srcPath=relPath;// fall through to the dot-handling below.\n}else if(relPath.length){// it's relative\n// throw away the existing file, and take the new path instead.\nif(!srcPath)srcPath=[];srcPath.pop();srcPath=srcPath.concat(relPath);result.search=relative.search;result.query=relative.query;}else if(!isNullOrUndefined(relative.search)){// just pull out the search.\n// like href='?foo'.\n// Put this after the other two cases because it simplifies the booleans\nif(psychotic){result.hostname=result.host=srcPath.shift();//occationaly the auth can get stuck only in host\n//this especialy happens in cases like\n//url.resolveObject('mailto:local1@domain1', 'local2@domain2')\nvar authInHost=result.host&&result.host.indexOf('@')>0?result.host.split('@'):false;if(authInHost){result.auth=authInHost.shift();result.host=result.hostname=authInHost.shift();}}result.search=relative.search;result.query=relative.query;//to support http.request\nif(!isNull(result.pathname)||!isNull(result.search)){result.path=(result.pathname?result.pathname:'')+(result.search?result.search:'');}result.href=result.format();return result;}if(!srcPath.length){// no path at all. easy.\n// we've already handled the other stuff above.\nresult.pathname=null;//to support http.request\nif(result.search){result.path='/'+result.search;}else{result.path=null;}result.href=result.format();return result;}// if a url ENDs in . or .., then it must get a trailing slash.\n// however, if it ends in anything else non-slashy,\n// then it must NOT get a trailing slash.\nvar last=srcPath.slice(-1)[0];var hasTrailingSlash=(result.host||relative.host)&&(last==='.'||last==='..')||last==='';// strip single dots, resolve double dots to parent dir\n// if the path tries to go above the root, `up` ends up > 0\nvar up=0;for(var i=srcPath.length;i>=0;i--){last=srcPath[i];if(last=='.'){srcPath.splice(i,1);}else if(last==='..'){srcPath.splice(i,1);up++;}else if(up){srcPath.splice(i,1);up--;}}// if the path is allowed to go above the root, restore leading ..s\nif(!mustEndAbs&&!removeAllDots){for(;up--;up){srcPath.unshift('..');}}if(mustEndAbs&&srcPath[0]!==''&&(!srcPath[0]||srcPath[0].charAt(0)!=='/')){srcPath.unshift('');}if(hasTrailingSlash&&srcPath.join('/').substr(-1)!=='/'){srcPath.push('');}var isAbsolute=srcPath[0]===''||srcPath[0]&&srcPath[0].charAt(0)==='/';// put the host back\nif(psychotic){result.hostname=result.host=isAbsolute?'':srcPath.length?srcPath.shift():'';//occationaly the auth can get stuck only in host\n//this especialy happens in cases like\n//url.resolveObject('mailto:local1@domain1', 'local2@domain2')\nvar authInHost=result.host&&result.host.indexOf('@')>0?result.host.split('@'):false;if(authInHost){result.auth=authInHost.shift();result.host=result.hostname=authInHost.shift();}}mustEndAbs=mustEndAbs||result.host&&srcPath.length;if(mustEndAbs&&!isAbsolute){srcPath.unshift('');}if(!srcPath.length){result.pathname=null;result.path=null;}else{result.pathname=srcPath.join('/');}//to support request.http\nif(!isNull(result.pathname)||!isNull(result.search)){result.path=(result.pathname?result.pathname:'')+(result.search?result.search:'');}result.auth=relative.auth||result.auth;result.slashes=result.slashes||relative.slashes;result.href=result.format();return result;};Url.prototype.parseHost=function(){var host=this.host;var port=portPattern.exec(host);if(port){port=port[0];if(port!==':'){this.port=port.substr(1);}host=host.substr(0,host.length-port.length);}if(host)this.hostname=host;};function isString(arg){return typeof arg===\"string\";}function isObject(arg){return typeof arg==='object'&&arg!==null;}function isNull(arg){return arg===null;}function isNullOrUndefined(arg){return arg==null;}/***/},/* 5 */ /***/function(module,exports,__webpack_require__){var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(module,global){/*! https://mths.be/punycode v1.3.2 by @mathias */;(function(root){/** Detect free variables */var freeExports=typeof exports=='object'&&exports&&!exports.nodeType&&exports;var freeModule=typeof module=='object'&&module&&!module.nodeType&&module;var freeGlobal=typeof global=='object'&&global;if(freeGlobal.global===freeGlobal||freeGlobal.window===freeGlobal||freeGlobal.self===freeGlobal){root=freeGlobal;}/**\r\n\t\t * The `punycode` object.\r\n\t\t * @name punycode\r\n\t\t * @type Object\r\n\t\t */var punycode,/** Highest positive signed 32-bit float value */maxInt=2147483647,// aka. 0x7FFFFFFF or 2^31-1\n/** Bootstring parameters */base=36,tMin=1,tMax=26,skew=38,damp=700,initialBias=72,initialN=128,// 0x80\ndelimiter='-',// '\\x2D'\n/** Regular expressions */regexPunycode=/^xn--/,regexNonASCII=/[^\\x20-\\x7E]/,// unprintable ASCII chars + non-ASCII chars\nregexSeparators=/[\\x2E\\u3002\\uFF0E\\uFF61]/g,// RFC 3490 separators\n/** Error messages */errors={'overflow':'Overflow: input needs wider integers to process','not-basic':'Illegal input >= 0x80 (not a basic code point)','invalid-input':'Invalid input'},/** Convenience shortcuts */baseMinusTMin=base-tMin,floor=Math.floor,stringFromCharCode=String.fromCharCode,/** Temporary variable */key;/*--------------------------------------------------------------------------*/ /**\r\n\t\t * A generic error utility function.\r\n\t\t * @private\r\n\t\t * @param {String} type The error type.\r\n\t\t * @returns {Error} Throws a `RangeError` with the applicable error message.\r\n\t\t */function error(type){throw RangeError(errors[type]);}/**\r\n\t\t * A generic `Array#map` utility function.\r\n\t\t * @private\r\n\t\t * @param {Array} array The array to iterate over.\r\n\t\t * @param {Function} callback The function that gets called for every array\r\n\t\t * item.\r\n\t\t * @returns {Array} A new array of values returned by the callback function.\r\n\t\t */function map(array,fn){var length=array.length;var result=[];while(length--){result[length]=fn(array[length]);}return result;}/**\r\n\t\t * A simple `Array#map`-like wrapper to work with domain name strings or email\r\n\t\t * addresses.\r\n\t\t * @private\r\n\t\t * @param {String} domain The domain name or email address.\r\n\t\t * @param {Function} callback The function that gets called for every\r\n\t\t * character.\r\n\t\t * @returns {Array} A new string of characters returned by the callback\r\n\t\t * function.\r\n\t\t */function mapDomain(string,fn){var parts=string.split('@');var result='';if(parts.length>1){// In email addresses, only the domain name should be punycoded. Leave\n// the local part (i.e. everything up to `@`) intact.\nresult=parts[0]+'@';string=parts[1];}// Avoid `split(regex)` for IE8 compatibility. See #17.\nstring=string.replace(regexSeparators,'\\x2E');var labels=string.split('.');var encoded=map(labels,fn).join('.');return result+encoded;}/**\r\n\t\t * Creates an array containing the numeric code points of each Unicode\r\n\t\t * character in the string. While JavaScript uses UCS-2 internally,\r\n\t\t * this function will convert a pair of surrogate halves (each of which\r\n\t\t * UCS-2 exposes as separate characters) into a single code point,\r\n\t\t * matching UTF-16.\r\n\t\t * @see `punycode.ucs2.encode`\r\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\r\n\t\t * @memberOf punycode.ucs2\r\n\t\t * @name decode\r\n\t\t * @param {String} string The Unicode input string (UCS-2).\r\n\t\t * @returns {Array} The new array of code points.\r\n\t\t */function ucs2decode(string){var output=[],counter=0,length=string.length,value,extra;while(counter<length){value=string.charCodeAt(counter++);if(value>=0xD800&&value<=0xDBFF&&counter<length){// high surrogate, and there is a next character\nextra=string.charCodeAt(counter++);if((extra&0xFC00)==0xDC00){// low surrogate\noutput.push(((value&0x3FF)<<10)+(extra&0x3FF)+0x10000);}else{// unmatched surrogate; only append this code unit, in case the next\n// code unit is the high surrogate of a surrogate pair\noutput.push(value);counter--;}}else{output.push(value);}}return output;}/**\r\n\t\t * Creates a string based on an array of numeric code points.\r\n\t\t * @see `punycode.ucs2.decode`\r\n\t\t * @memberOf punycode.ucs2\r\n\t\t * @name encode\r\n\t\t * @param {Array} codePoints The array of numeric code points.\r\n\t\t * @returns {String} The new Unicode string (UCS-2).\r\n\t\t */function ucs2encode(array){return map(array,function(value){var output='';if(value>0xFFFF){value-=0x10000;output+=stringFromCharCode(value>>>10&0x3FF|0xD800);value=0xDC00|value&0x3FF;}output+=stringFromCharCode(value);return output;}).join('');}/**\r\n\t\t * Converts a basic code point into a digit/integer.\r\n\t\t * @see `digitToBasic()`\r\n\t\t * @private\r\n\t\t * @param {Number} codePoint The basic numeric code point value.\r\n\t\t * @returns {Number} The numeric value of a basic code point (for use in\r\n\t\t * representing integers) in the range `0` to `base - 1`, or `base` if\r\n\t\t * the code point does not represent a value.\r\n\t\t */function basicToDigit(codePoint){if(codePoint-48<10){return codePoint-22;}if(codePoint-65<26){return codePoint-65;}if(codePoint-97<26){return codePoint-97;}return base;}/**\r\n\t\t * Converts a digit/integer into a basic code point.\r\n\t\t * @see `basicToDigit()`\r\n\t\t * @private\r\n\t\t * @param {Number} digit The numeric value of a basic code point.\r\n\t\t * @returns {Number} The basic code point whose value (when used for\r\n\t\t * representing integers) is `digit`, which needs to be in the range\r\n\t\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\r\n\t\t * used; else, the lowercase form is used. The behavior is undefined\r\n\t\t * if `flag` is non-zero and `digit` has no uppercase form.\r\n\t\t */function digitToBasic(digit,flag){// 0..25 map to ASCII a..z or A..Z\n// 26..35 map to ASCII 0..9\nreturn digit+22+75*(digit<26)-((flag!=0)<<5);}/**\r\n\t\t * Bias adaptation function as per section 3.4 of RFC 3492.\r\n\t\t * http://tools.ietf.org/html/rfc3492#section-3.4\r\n\t\t * @private\r\n\t\t */function adapt(delta,numPoints,firstTime){var k=0;delta=firstTime?floor(delta/damp):delta>>1;delta+=floor(delta/numPoints);for/* no initialization */(;delta>baseMinusTMin*tMax>>1;k+=base){delta=floor(delta/baseMinusTMin);}return floor(k+(baseMinusTMin+1)*delta/(delta+skew));}/**\r\n\t\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\r\n\t\t * symbols.\r\n\t\t * @memberOf punycode\r\n\t\t * @param {String} input The Punycode string of ASCII-only symbols.\r\n\t\t * @returns {String} The resulting string of Unicode symbols.\r\n\t\t */function decode(input){// Don't use UCS-2\nvar output=[],inputLength=input.length,out,i=0,n=initialN,bias=initialBias,basic,j,index,oldi,w,k,digit,t,/** Cached calculation results */baseMinusT;// Handle the basic code points: let `basic` be the number of input code\n// points before the last delimiter, or `0` if there is none, then copy\n// the first basic code points to the output.\nbasic=input.lastIndexOf(delimiter);if(basic<0){basic=0;}for(j=0;j<basic;++j){// if it's not a basic code point\nif(input.charCodeAt(j)>=0x80){error('not-basic');}output.push(input.charCodeAt(j));}// Main decoding loop: start just after the last delimiter if any basic code\n// points were copied; start at the beginning otherwise.\nfor/* no final expression */(index=basic>0?basic+1:0;index<inputLength;){// `index` is the index of the next character to be consumed.\n// Decode a generalized variable-length integer into `delta`,\n// which gets added to `i`. The overflow checking is easier\n// if we increase `i` as we go, then subtract off its starting\n// value at the end to obtain `delta`.\nfor/* no condition */(oldi=i,w=1,k=base;;k+=base){if(index>=inputLength){error('invalid-input');}digit=basicToDigit(input.charCodeAt(index++));if(digit>=base||digit>floor((maxInt-i)/w)){error('overflow');}i+=digit*w;t=k<=bias?tMin:k>=bias+tMax?tMax:k-bias;if(digit<t){break;}baseMinusT=base-t;if(w>floor(maxInt/baseMinusT)){error('overflow');}w*=baseMinusT;}out=output.length+1;bias=adapt(i-oldi,out,oldi==0);// `i` was supposed to wrap around from `out` to `0`,\n// incrementing `n` each time, so we'll fix that now:\nif(floor(i/out)>maxInt-n){error('overflow');}n+=floor(i/out);i%=out;// Insert `n` at position `i` of the output\noutput.splice(i++,0,n);}return ucs2encode(output);}/**\r\n\t\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\r\n\t\t * Punycode string of ASCII-only symbols.\r\n\t\t * @memberOf punycode\r\n\t\t * @param {String} input The string of Unicode symbols.\r\n\t\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\r\n\t\t */function encode(input){var n,delta,handledCPCount,basicLength,bias,j,m,q,k,t,currentValue,output=[],/** `inputLength` will hold the number of code points in `input`. */inputLength,/** Cached calculation results */handledCPCountPlusOne,baseMinusT,qMinusT;// Convert the input in UCS-2 to Unicode\ninput=ucs2decode(input);// Cache the length\ninputLength=input.length;// Initialize the state\nn=initialN;delta=0;bias=initialBias;// Handle the basic code points\nfor(j=0;j<inputLength;++j){currentValue=input[j];if(currentValue<0x80){output.push(stringFromCharCode(currentValue));}}handledCPCount=basicLength=output.length;// `handledCPCount` is the number of code points that have been handled;\n// `basicLength` is the number of basic code points.\n// Finish the basic string - if it is not empty - with a delimiter\nif(basicLength){output.push(delimiter);}// Main encoding loop:\nwhile(handledCPCount<inputLength){// All non-basic code points < n have been handled already. Find the next\n// larger one:\nfor(m=maxInt,j=0;j<inputLength;++j){currentValue=input[j];if(currentValue>=n&&currentValue<m){m=currentValue;}}// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n// but guard against overflow\nhandledCPCountPlusOne=handledCPCount+1;if(m-n>floor((maxInt-delta)/handledCPCountPlusOne)){error('overflow');}delta+=(m-n)*handledCPCountPlusOne;n=m;for(j=0;j<inputLength;++j){currentValue=input[j];if(currentValue<n&&++delta>maxInt){error('overflow');}if(currentValue==n){// Represent delta as a generalized variable-length integer\nfor/* no condition */(q=delta,k=base;;k+=base){t=k<=bias?tMin:k>=bias+tMax?tMax:k-bias;if(q<t){break;}qMinusT=q-t;baseMinusT=base-t;output.push(stringFromCharCode(digitToBasic(t+qMinusT%baseMinusT,0)));q=floor(qMinusT/baseMinusT);}output.push(stringFromCharCode(digitToBasic(q,0)));bias=adapt(delta,handledCPCountPlusOne,handledCPCount==basicLength);delta=0;++handledCPCount;}}++delta;++n;}return output.join('');}/**\r\n\t\t * Converts a Punycode string representing a domain name or an email address\r\n\t\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\r\n\t\t * it doesn't matter if you call it on a string that has already been\r\n\t\t * converted to Unicode.\r\n\t\t * @memberOf punycode\r\n\t\t * @param {String} input The Punycoded domain name or email address to\r\n\t\t * convert to Unicode.\r\n\t\t * @returns {String} The Unicode representation of the given Punycode\r\n\t\t * string.\r\n\t\t */function toUnicode(input){return mapDomain(input,function(string){return regexPunycode.test(string)?decode(string.slice(4).toLowerCase()):string;});}/**\r\n\t\t * Converts a Unicode string representing a domain name or an email address to\r\n\t\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\r\n\t\t * i.e. it doesn't matter if you call it with a domain that's already in\r\n\t\t * ASCII.\r\n\t\t * @memberOf punycode\r\n\t\t * @param {String} input The domain name or email address to convert, as a\r\n\t\t * Unicode string.\r\n\t\t * @returns {String} The Punycode representation of the given domain name or\r\n\t\t * email address.\r\n\t\t */function toASCII(input){return mapDomain(input,function(string){return regexNonASCII.test(string)?'xn--'+encode(string):string;});}/*--------------------------------------------------------------------------*/ /** Define the public API */punycode={/**\r\n\t\t\t * A string representing the current Punycode.js version number.\r\n\t\t\t * @memberOf punycode\r\n\t\t\t * @type String\r\n\t\t\t */'version':'1.3.2',/**\r\n\t\t\t * An object of methods to convert from JavaScript's internal character\r\n\t\t\t * representation (UCS-2) to Unicode code points, and back.\r\n\t\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\r\n\t\t\t * @memberOf punycode\r\n\t\t\t * @type Object\r\n\t\t\t */'ucs2':{'decode':ucs2decode,'encode':ucs2encode},'decode':decode,'encode':encode,'toASCII':toASCII,'toUnicode':toUnicode};/** Expose `punycode` */ // Some AMD build optimizers, like r.js, check for specific condition patterns\n// like the following:\nif(true){!(__WEBPACK_AMD_DEFINE_RESULT__=function(){return punycode;}.call(exports,__webpack_require__,exports,module),__WEBPACK_AMD_DEFINE_RESULT__!==undefined&&(module.exports=__WEBPACK_AMD_DEFINE_RESULT__));}else if(freeExports&&freeModule){if(module.exports==freeExports){// in Node.js or RingoJS v0.8.0+\nfreeModule.exports=punycode;}else{// in Narwhal or RingoJS v0.7.0-\nfor(key in punycode){punycode.hasOwnProperty(key)&&(freeExports[key]=punycode[key]);}}}else{// in Rhino or a web browser\nroot.punycode=punycode;}})(this);/* WEBPACK VAR INJECTION */}).call(exports,__webpack_require__(6)(module),function(){return this;}());/***/},/* 6 */ /***/function(module,exports){module.exports=function(module){if(!module.webpackPolyfill){module.deprecate=function(){};module.paths=[];// module.parent = undefined by default\nmodule.children=[];module.webpackPolyfill=1;}return module;};/***/},/* 7 */ /***/function(module,exports,__webpack_require__){'use strict';exports.decode=exports.parse=__webpack_require__(8);exports.encode=exports.stringify=__webpack_require__(9);/***/},/* 8 */ /***/function(module,exports){// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj,prop){return Object.prototype.hasOwnProperty.call(obj,prop);}module.exports=function(qs,sep,eq,options){sep=sep||'&';eq=eq||'=';var obj={};if(typeof qs!=='string'||qs.length===0){return obj;}var regexp=/\\+/g;qs=qs.split(sep);var maxKeys=1000;if(options&&typeof options.maxKeys==='number'){maxKeys=options.maxKeys;}var len=qs.length;// maxKeys <= 0 means that we should not limit keys count\nif(maxKeys>0&&len>maxKeys){len=maxKeys;}for(var i=0;i<len;++i){var x=qs[i].replace(regexp,'%20'),idx=x.indexOf(eq),kstr,vstr,k,v;if(idx>=0){kstr=x.substr(0,idx);vstr=x.substr(idx+1);}else{kstr=x;vstr='';}k=decodeURIComponent(kstr);v=decodeURIComponent(vstr);if(!hasOwnProperty(obj,k)){obj[k]=v;}else if(Array.isArray(obj[k])){obj[k].push(v);}else{obj[k]=[obj[k],v];}}return obj;};/***/},/* 9 */ /***/function(module,exports){// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';var stringifyPrimitive=function(v){switch(typeof v){case'string':return v;case'boolean':return v?'true':'false';case'number':return isFinite(v)?v:'';default:return'';}};module.exports=function(obj,sep,eq,name){sep=sep||'&';eq=eq||'=';if(obj===null){obj=undefined;}if(typeof obj==='object'){return Object.keys(obj).map(function(k){var ks=encodeURIComponent(stringifyPrimitive(k))+eq;if(Array.isArray(obj[k])){return obj[k].map(function(v){return ks+encodeURIComponent(stringifyPrimitive(v));}).join(sep);}else{return ks+encodeURIComponent(stringifyPrimitive(obj[k]));}}).join(sep);}if(!name)return'';return encodeURIComponent(stringifyPrimitive(name))+eq+encodeURIComponent(stringifyPrimitive(obj));};/***/},/* 10 */ /***/function(module,exports){'use strict';module.exports=function equal(a,b){if(a===b)return true;var arrA=Array.isArray(a),arrB=Array.isArray(b),i;if(arrA&&arrB){if(a.length!=b.length)return false;for(i=0;i<a.length;i++)if(!equal(a[i],b[i]))return false;return true;}if(arrA!=arrB)return false;if(a&&b&&typeof a==='object'&&typeof b==='object'){var keys=Object.keys(a);if(keys.length!==Object.keys(b).length)return false;for(i=0;i<keys.length;i++)if(b[keys[i]]===undefined)return false;for(i=0;i<keys.length;i++)if(!equal(a[keys[i]],b[keys[i]]))return false;return true;}return false;};/***/},/* 11 */ /***/function(module,exports,__webpack_require__){'use strict';module.exports={copy:copy,checkDataType:checkDataType,checkDataTypes:checkDataTypes,coerceToTypes:coerceToTypes,toHash:toHash,getProperty:getProperty,escapeQuotes:escapeQuotes,ucs2length:ucs2length,varOccurences:varOccurences,varReplace:varReplace,cleanUpCode:cleanUpCode,cleanUpVarErrors:cleanUpVarErrors,schemaHasRules:schemaHasRules,stableStringify:__webpack_require__(12),toQuotedString:toQuotedString,getPathExpr:getPathExpr,getPath:getPath,getData:getData,unescapeFragment:unescapeFragment,escapeFragment:escapeFragment,escapeJsonPointer:escapeJsonPointer};function copy(o,to){to=to||{};for(var key in o)to[key]=o[key];return to;}function checkDataType(dataType,data,negate){var EQUAL=negate?' !== ':' === ',AND=negate?' || ':' && ',OK=negate?'!':'',NOT=negate?'':'!';switch(dataType){case'null':return data+EQUAL+'null';case'array':return OK+'Array.isArray('+data+')';case'object':return'('+OK+data+AND+'typeof '+data+EQUAL+'\"object\"'+AND+NOT+'Array.isArray('+data+'))';case'integer':return'(typeof '+data+EQUAL+'\"number\"'+AND+NOT+'('+data+' % 1))';default:return'typeof '+data+EQUAL+'\"'+dataType+'\"';}}function checkDataTypes(dataTypes,data){switch(dataTypes.length){case 1:return checkDataType(dataTypes[0],data,true);default:var code='';var types=toHash(dataTypes);if(types.array&&types.object){code=types.null?'(':'(!'+data+' || ';code+='typeof '+data+' !== \"object\")';delete types.null;delete types.array;delete types.object;}if(types.number)delete types.integer;for(var t in types)code+=(code?' && ':'')+checkDataType(t,data,true);return code;}}var COERCE_TO_TYPES=toHash(['string','number','integer','boolean','null']);function coerceToTypes(dataTypes){if(Array.isArray(dataTypes)){var types=[];for(var i=0;i<dataTypes.length;i++){var t=dataTypes[i];if(COERCE_TO_TYPES[t])types[types.length]=t;}if(types.length)return types;}else if(COERCE_TO_TYPES[dataTypes]){return[dataTypes];}}function toHash(arr){var hash={};for(var i=0;i<arr.length;i++)hash[arr[i]]=true;return hash;}var IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;var SINGLE_QUOTE=/'|\\\\/g;function getProperty(key){return typeof key=='number'?'['+key+']':IDENTIFIER.test(key)?'.'+key:\"['\"+key.replace(SINGLE_QUOTE,'\\\\$&')+\"']\";}function escapeQuotes(str){return str.replace(SINGLE_QUOTE,'\\\\$&');}// https://mathiasbynens.be/notes/javascript-encoding\n// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode\nfunction ucs2length(str){var length=0,len=str.length,pos=0,value;while(pos<len){length++;value=str.charCodeAt(pos++);if(value>=0xD800&&value<=0xDBFF&&pos<len){// high surrogate, and there is a next character\nvalue=str.charCodeAt(pos);if((value&0xFC00)==0xDC00)pos++;// low surrogate\n}}return length;}function varOccurences(str,dataVar){dataVar+='[^0-9]';var matches=str.match(new RegExp(dataVar,'g'));return matches?matches.length:0;}function varReplace(str,dataVar,expr){dataVar+='([^0-9])';expr=expr.replace(/\\$/g,'$$$$');return str.replace(new RegExp(dataVar,'g'),expr+'$1');}var EMPTY_ELSE=/else\\s*{\\s*}/g,EMPTY_IF_NO_ELSE=/if\\s*\\([^)]+\\)\\s*\\{\\s*\\}(?!\\s*else)/g,EMPTY_IF_WITH_ELSE=/if\\s*\\(([^)]+)\\)\\s*\\{\\s*\\}\\s*else(?!\\s*if)/g;function cleanUpCode(out){return out.replace(EMPTY_ELSE,'').replace(EMPTY_IF_NO_ELSE,'').replace(EMPTY_IF_WITH_ELSE,'if (!($1))');}var ERRORS_REGEXP=/[^v\\.]errors/g,REMOVE_ERRORS=/var errors = 0;|var vErrors = null;|validate.errors = vErrors;/g,REMOVE_ERRORS_ASYNC=/var errors = 0;|var vErrors = null;/g,RETURN_VALID='return errors === 0;',RETURN_TRUE='validate.errors = null; return true;',RETURN_ASYNC=/if \\(errors === 0\\) return true;\\s*else throw new ValidationError\\(vErrors\\);/,RETURN_TRUE_ASYNC='return true;';function cleanUpVarErrors(out,async){var matches=out.match(ERRORS_REGEXP);if(!matches||matches.length!==2)return out;return async?out.replace(REMOVE_ERRORS_ASYNC,'').replace(RETURN_ASYNC,RETURN_TRUE_ASYNC):out.replace(REMOVE_ERRORS,'').replace(RETURN_VALID,RETURN_TRUE);}function schemaHasRules(schema,rules){for(var key in schema)if(rules[key])return true;}function toQuotedString(str){return'\\''+escapeQuotes(str)+'\\'';}function getPathExpr(currentPath,expr,jsonPointers,isNumber){var path=jsonPointers// false by default\n?'\\'/\\' + '+expr+(isNumber?'':'.replace(/~/g, \\'~0\\').replace(/\\\\//g, \\'~1\\')'):isNumber?'\\'[\\' + '+expr+' + \\']\\'':'\\'[\\\\\\'\\' + '+expr+' + \\'\\\\\\']\\'';return joinPaths(currentPath,path);}function getPath(currentPath,prop,jsonPointers){var path=jsonPointers// false by default\n?toQuotedString('/'+escapeJsonPointer(prop)):toQuotedString(getProperty(prop));return joinPaths(currentPath,path);}var RELATIVE_JSON_POINTER=/^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/;function getData($data,lvl,paths){var matches=$data.match(RELATIVE_JSON_POINTER);if(!matches)throw new Error('Invalid relative JSON-pointer: '+$data);var up=+matches[1];var jsonPointer=matches[2];if(jsonPointer=='#'){if(up>=lvl)throw new Error('Cannot access property/index '+up+' levels up, current level is '+lvl);return paths[lvl-up];}if(up>lvl)throw new Error('Cannot access data '+up+' levels up, current level is '+lvl);var data='data'+(lvl-up||'');if(!jsonPointer)return data;var expr=data;var segments=jsonPointer.split('/');for(var i=0;i<segments.length;i++){var segment=segments[i];if(segment){data+=getProperty(unescapeJsonPointer(segment));expr+=' && '+data;}}return expr;}function joinPaths(a,b){if(a=='\"\"')return b;return(a+' + '+b).replace(/' \\+ '/g,'');}function unescapeFragment(str){return unescapeJsonPointer(decodeURIComponent(str));}function escapeFragment(str){return encodeURIComponent(escapeJsonPointer(str));}function escapeJsonPointer(str){return str.replace(/~/g,'~0').replace(/\\//g,'~1');}function unescapeJsonPointer(str){return str.replace(/~1/g,'/').replace(/~0/g,'~');}/***/},/* 12 */ /***/function(module,exports,__webpack_require__){var json=typeof JSON!=='undefined'?JSON:__webpack_require__(13);module.exports=function(obj,opts){if(!opts)opts={};if(typeof opts==='function')opts={cmp:opts};var space=opts.space||'';if(typeof space==='number')space=Array(space+1).join(' ');var cycles=typeof opts.cycles==='boolean'?opts.cycles:false;var replacer=opts.replacer||function(key,value){return value;};var cmp=opts.cmp&&function(f){return function(node){return function(a,b){var aobj={key:a,value:node[a]};var bobj={key:b,value:node[b]};return f(aobj,bobj);};};}(opts.cmp);var seen=[];return function stringify(parent,key,node,level){var indent=space?'\\n'+new Array(level+1).join(space):'';var colonSeparator=space?': ':':';if(node&&node.toJSON&&typeof node.toJSON==='function'){node=node.toJSON();}node=replacer.call(parent,key,node);if(node===undefined){return;}if(typeof node!=='object'||node===null){return json.stringify(node);}if(isArray(node)){var out=[];for(var i=0;i<node.length;i++){var item=stringify(node,i,node[i],level+1)||json.stringify(null);out.push(indent+space+item);}return'['+out.join(',')+indent+']';}else{if(seen.indexOf(node)!==-1){if(cycles)return json.stringify('__cycle__');throw new TypeError('Converting circular structure to JSON');}else seen.push(node);var keys=objectKeys(node).sort(cmp&&cmp(node));var out=[];for(var i=0;i<keys.length;i++){var key=keys[i];var value=stringify(node,key,node[key],level+1);if(!value)continue;var keyValue=json.stringify(key)+colonSeparator+value;;out.push(indent+space+keyValue);}seen.splice(seen.indexOf(node),1);return'{'+out.join(',')+indent+'}';}}({'':obj},'',obj,0);};var isArray=Array.isArray||function(x){return{}.toString.call(x)==='[object Array]';};var objectKeys=Object.keys||function(obj){var has=Object.prototype.hasOwnProperty||function(){return true;};var keys=[];for(var key in obj){if(has.call(obj,key))keys.push(key);}return keys;};/***/},/* 13 */ /***/function(module,exports,__webpack_require__){exports.parse=__webpack_require__(14);exports.stringify=__webpack_require__(15);/***/},/* 14 */ /***/function(module,exports){var at,// The index of the current character\nch,// The current character\nescapee={'\"':'\"','\\\\':'\\\\','/':'/',b:'\\b',f:'\\f',n:'\\n',r:'\\r',t:'\\t'},text,error=function(m){// Call error when something is wrong.\nthrow{name:'SyntaxError',message:m,at:at,text:text};},next=function(c){// If a c parameter is provided, verify that it matches the current character.\nif(c&&c!==ch){error(\"Expected '\"+c+\"' instead of '\"+ch+\"'\");}// Get the next character. When there are no more characters,\n// return the empty string.\nch=text.charAt(at);at+=1;return ch;},number=function(){// Parse a number value.\nvar number,string='';if(ch==='-'){string='-';next('-');}while(ch>='0'&&ch<='9'){string+=ch;next();}if(ch==='.'){string+='.';while(next()&&ch>='0'&&ch<='9'){string+=ch;}}if(ch==='e'||ch==='E'){string+=ch;next();if(ch==='-'||ch==='+'){string+=ch;next();}while(ch>='0'&&ch<='9'){string+=ch;next();}}number=+string;if(!isFinite(number)){error(\"Bad number\");}else{return number;}},string=function(){// Parse a string value.\nvar hex,i,string='',uffff;// When parsing for string values, we must look for \" and \\ characters.\nif(ch==='\"'){while(next()){if(ch==='\"'){next();return string;}else if(ch==='\\\\'){next();if(ch==='u'){uffff=0;for(i=0;i<4;i+=1){hex=parseInt(next(),16);if(!isFinite(hex)){break;}uffff=uffff*16+hex;}string+=String.fromCharCode(uffff);}else if(typeof escapee[ch]==='string'){string+=escapee[ch];}else{break;}}else{string+=ch;}}}error(\"Bad string\");},white=function(){// Skip whitespace.\nwhile(ch&&ch<=' '){next();}},word=function(){// true, false, or null.\nswitch(ch){case't':next('t');next('r');next('u');next('e');return true;case'f':next('f');next('a');next('l');next('s');next('e');return false;case'n':next('n');next('u');next('l');next('l');return null;}error(\"Unexpected '\"+ch+\"'\");},value,// Place holder for the value function.\narray=function(){// Parse an array value.\nvar array=[];if(ch==='['){next('[');white();if(ch===']'){next(']');return array;// empty array\n}while(ch){array.push(value());white();if(ch===']'){next(']');return array;}next(',');white();}}error(\"Bad array\");},object=function(){// Parse an object value.\nvar key,object={};if(ch==='{'){next('{');white();if(ch==='}'){next('}');return object;// empty object\n}while(ch){key=string();white();next(':');if(Object.hasOwnProperty.call(object,key)){error('Duplicate key \"'+key+'\"');}object[key]=value();white();if(ch==='}'){next('}');return object;}next(',');white();}}error(\"Bad object\");};value=function(){// Parse a JSON value. It could be an object, an array, a string, a number,\n// or a word.\nwhite();switch(ch){case'{':return object();case'[':return array();case'\"':return string();case'-':return number();default:return ch>='0'&&ch<='9'?number():word();}};// Return the json_parse function. It will have access to all of the above\n// functions and variables.\nmodule.exports=function(source,reviver){var result;text=source;at=0;ch=' ';result=value();white();if(ch){error(\"Syntax error\");}// If there is a reviver function, we recursively walk the new structure,\n// passing each name/value pair to the reviver function for possible\n// transformation, starting with a temporary root object that holds the result\n// in an empty key. If there is not a reviver function, we simply return the\n// result.\nreturn typeof reviver==='function'?function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==='object'){for(k in value){if(Object.prototype.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v;}else{delete value[k];}}}}return reviver.call(holder,key,value);}({'':result},''):result;};/***/},/* 15 */ /***/function(module,exports){var cx=/[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,escapable=/[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,gap,indent,meta={// table of character substitutions\n'\\b':'\\\\b','\\t':'\\\\t','\\n':'\\\\n','\\f':'\\\\f','\\r':'\\\\r','\"':'\\\\\"','\\\\':'\\\\\\\\'},rep;function quote(string){// If the string contains no control characters, no quote characters, and no\n// backslash characters, then we can safely slap some quotes around it.\n// Otherwise we must also replace the offending characters with safe escape\n// sequences.\nescapable.lastIndex=0;return escapable.test(string)?'\"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==='string'?c:'\\\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4);})+'\"':'\"'+string+'\"';}function str(key,holder){// Produce a string from holder[key].\nvar i,// The loop counter.\nk,// The member key.\nv,// The member value.\nlength,mind=gap,partial,value=holder[key];// If the value has a toJSON method, call it to obtain a replacement value.\nif(value&&typeof value==='object'&&typeof value.toJSON==='function'){value=value.toJSON(key);}// If we were called with a replacer function, then call the replacer to\n// obtain a replacement value.\nif(typeof rep==='function'){value=rep.call(holder,key,value);}// What happens next depends on the value's type.\nswitch(typeof value){case'string':return quote(value);case'number':// JSON numbers must be finite. Encode non-finite numbers as null.\nreturn isFinite(value)?String(value):'null';case'boolean':case'null':// If the value is a boolean or null, convert it to a string. Note:\n// typeof null does not produce 'null'. The case is included here in\n// the remote chance that this gets fixed someday.\nreturn String(value);case'object':if(!value)return'null';gap+=indent;partial=[];// Array.isArray\nif(Object.prototype.toString.apply(value)==='[object Array]'){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||'null';}// Join all of the elements together, separated with commas, and\n// wrap them in brackets.\nv=partial.length===0?'[]':gap?'[\\n'+gap+partial.join(',\\n'+gap)+'\\n'+mind+']':'['+partial.join(',')+']';gap=mind;return v;}// If the replacer is an array, use it to select the members to be\n// stringified.\nif(rep&&typeof rep==='object'){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==='string'){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}else{// Otherwise, iterate through all of the keys in the object.\nfor(k in value){if(Object.prototype.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}// Join all of the member texts together, separated with commas,\n// and wrap them in braces.\nv=partial.length===0?'{}':gap?'{\\n'+gap+partial.join(',\\n'+gap)+'\\n'+mind+'}':'{'+partial.join(',')+'}';gap=mind;return v;}}module.exports=function(value,replacer,space){var i;gap='';indent='';// If the space parameter is a number, make an indent string containing that\n// many spaces.\nif(typeof space==='number'){for(i=0;i<space;i+=1){indent+=' ';}}// If the space parameter is a string, it will be used as the indent string.\nelse if(typeof space==='string'){indent=space;}// If there is a replacer, it must be a function or an array.\n// Otherwise, throw an error.\nrep=replacer;if(replacer&&typeof replacer!=='function'&&(typeof replacer!=='object'||typeof replacer.length!=='number')){throw new Error('JSON.stringify');}// Make a fake root object containing our value under the key of ''.\n// Return the result of stringifying the value.\nreturn str('',{'':value});};/***/},/* 16 */ /***/function(module,exports,__webpack_require__){'use strict';var util=__webpack_require__(11);module.exports=SchemaObject;function SchemaObject(obj){util.copy(obj,this);}/***/},/* 17 */ /***/function(module,exports,__webpack_require__){'use strict';module.exports={setup:setupAsync,compile:compileAsync};var util=__webpack_require__(11);var ASYNC={'*':checkGenerators,'co*':checkGenerators,'es7':checkAsyncFunction};var TRANSPILE={'nodent':getNodent,'regenerator':getRegenerator};var MODES=[{async:'co*'},{async:'es7',transpile:'nodent'},{async:'co*',transpile:'regenerator'}];var regenerator,nodent;function setupAsync(opts,required){if(required!==false)required=true;var async=opts.async,transpile=opts.transpile,check;switch(typeof transpile){case'string':var get=TRANSPILE[transpile];if(!get)throw new Error('bad transpiler: '+transpile);return opts._transpileFunc=get(opts,required);case'undefined':case'boolean':if(typeof async=='string'){check=ASYNC[async];if(!check)throw new Error('bad async mode: '+async);return opts.transpile=check(opts,required);}for(var i=0;i<MODES.length;i++){var _opts=MODES[i];if(setupAsync(_opts,false)){util.copy(_opts,opts);return opts.transpile;}}/* istanbul ignore next */throw new Error('generators, nodent and regenerator are not available');case'function':return opts._transpileFunc=opts.transpile;default:throw new Error('bad transpiler: '+transpile);}}function checkGenerators(opts,required){/* jshint evil: true */try{eval('(function*(){})()');return true;}catch(e){/* istanbul ignore next */if(required)throw new Error('generators not supported');}}function checkAsyncFunction(opts,required){/* jshint evil: true */try{eval('(async function(){})()');/* istanbul ignore next */return true;}catch(e){if(required)throw new Error('es7 async functions not supported');}}function getRegenerator(opts,required){try{if(!regenerator){regenerator=__webpack_require__(!function webpackMissingModule(){var e=new Error(\"Cannot find module \\\"regenerator\\\"\");e.code='MODULE_NOT_FOUND';throw e;}());regenerator.runtime();}if(!opts.async||opts.async===true)opts.async='es7';return regeneratorTranspile;}catch(e){/* istanbul ignore next */if(required)throw new Error('regenerator not available');}}function regeneratorTranspile(code){return regenerator.compile(code).code;}function getNodent(opts,required){/* jshint evil: true */try{if(!nodent)nodent=__webpack_require__(!function webpackMissingModule(){var e=new Error(\"Cannot find module \\\"nodent\\\"\");e.code='MODULE_NOT_FOUND';throw e;}())({log:false,dontInstallRequireHook:true});if(opts.async!='es7'){if(opts.async&&opts.async!==true)console.warn('nodent transpiles only es7 async functions');opts.async='es7';}return nodentTranspile;}catch(e){/* istanbul ignore next */if(required)throw new Error('nodent not available');}}function nodentTranspile(code){return nodent.compile(code,'',{promises:true,sourcemap:false}).code;}/**\r\n\t * Creates validating function for passed schema with asynchronous loading of missing schemas.\r\n\t * `loadSchema` option should be a function that accepts schema uri and node-style callback.\r\n\t * @this Ajv\r\n\t * @param {Object} schema schema object\r\n\t * @param {Function} callback node-style callback, it is always called with 2 parameters: error (or null) and validating function.\r\n\t */function compileAsync(schema,callback){/* eslint no-shadow: 0 */ /* jshint validthis: true */var schemaObj;var self=this;try{schemaObj=this._addSchema(schema);}catch(e){setTimeout(function(){callback(e);});return;}if(schemaObj.validate){setTimeout(function(){callback(null,schemaObj.validate);});}else{if(typeof this._opts.loadSchema!='function')throw new Error('options.loadSchema should be a function');_compileAsync(schema,callback,true);}function _compileAsync(schema,callback,firstCall){var validate;try{validate=self.compile(schema);}catch(e){if(e.missingSchema)loadMissingSchema(e);else deferCallback(e);return;}deferCallback(null,validate);function loadMissingSchema(e){var ref=e.missingSchema;if(self._refs[ref]||self._schemas[ref])return callback(new Error('Schema '+ref+' is loaded but'+e.missingRef+'cannot be resolved'));var _callbacks=self._loadingSchemas[ref];if(_callbacks){if(typeof _callbacks=='function')self._loadingSchemas[ref]=[_callbacks,schemaLoaded];else _callbacks[_callbacks.length]=schemaLoaded;}else{self._loadingSchemas[ref]=schemaLoaded;self._opts.loadSchema(ref,function(err,sch){var _callbacks=self._loadingSchemas[ref];delete self._loadingSchemas[ref];if(typeof _callbacks=='function'){_callbacks(err,sch);}else{for(var i=0;i<_callbacks.length;i++)_callbacks[i](err,sch);}});}function schemaLoaded(err,sch){if(err)return callback(err);if(!(self._refs[ref]||self._schemas[ref])){try{self.addSchema(sch,ref);}catch(e){callback(e);return;}}_compileAsync(schema,callback);}}function deferCallback(err,validate){if(firstCall)setTimeout(function(){callback(err,validate);});else return callback(err,validate);}}}/***/},/* 18 */ /***/function(module,exports){'use strict';module.exports=function generate_validate(it,$keyword){var out='';var $async=it.schema.$async===true;if(it.isTop){var $top=it.isTop,$lvl=it.level=0,$dataLvl=it.dataLevel=0,$data='data';it.rootId=it.resolve.fullPath(it.root.schema.id);it.baseId=it.baseId||it.rootId;if($async){it.async=true;var $es7=it.opts.async=='es7';it.yieldAwait=$es7?'await':'yield';}delete it.isTop;it.dataPathArr=[undefined];out+=' validate = ';if($async){if($es7){out+=' (async function ';}else{if(it.opts.async=='co*'){out+='co.wrap';}out+='(function* ';}}else{out+=' (function ';}out+=' (data, dataPath, parentData, parentDataProperty) { \\'use strict\\'; var vErrors = null; ';out+=' var errors = 0; ';}else{var $lvl=it.level,$dataLvl=it.dataLevel,$data='data'+($dataLvl||'');if(it.schema.id)it.baseId=it.resolve.url(it.baseId,it.schema.id);if($async&&!it.async)throw new Error('async schema in sync schema');out+=' var errs_'+$lvl+' = errors;';}var $valid='valid'+$lvl,$breakOnError=!it.opts.allErrors,$closingBraces1='',$closingBraces2='',$errorKeyword;var $typeSchema=it.schema.type,$typeIsArray=Array.isArray($typeSchema);if($typeSchema&&it.opts.coerceTypes){var $coerceToTypes=it.util.coerceToTypes($typeSchema);if($coerceToTypes){var $schemaPath=it.schemaPath+'.type',$errSchemaPath=it.errSchemaPath+'/type',$method=$typeIsArray?'checkDataTypes':'checkDataType';out+=' if ('+it.util[$method]($typeSchema,$data,true)+') { ';var $dataType='dataType'+$lvl,$coerced='coerced'+$lvl;out+=' var '+$dataType+' = typeof '+$data+'; var '+$coerced+' = undefined; ';var $bracesCoercion='';var arr1=$coerceToTypes;if(arr1){var $type,$i=-1,l1=arr1.length-1;while($i<l1){$type=arr1[$i+=1];if($i){out+=' if ('+$coerced+' === undefined) { ';$bracesCoercion+='}';}if($type=='string'){out+=' if ('+$dataType+' == \\'number\\' || '+$dataType+' == \\'boolean\\') '+$coerced+' = \\'\\' + '+$data+'; else if ('+$data+' === null) '+$coerced+' = \\'\\'; ';}else if($type=='number'||$type=='integer'){out+=' if ('+$dataType+' == \\'boolean\\' || '+$data+' === null || ('+$dataType+' == \\'string\\' && '+$data+' && '+$data+' == +'+$data+' ';if($type=='integer'){out+=' && !('+$data+' % 1)';}out+=')) '+$coerced+' = +'+$data+'; ';}else if($type=='boolean'){out+=' if ('+$data+' === \\'false\\' || '+$data+' === 0 || '+$data+' === null) '+$coerced+' = false; else if ('+$data+' === \\'true\\' || '+$data+' === 1) '+$coerced+' = true; ';}else if($type=='null'){out+=' if ('+$data+' === \\'\\' || '+$data+' === 0 || '+$data+' === false) '+$coerced+' = null; ';}}}out+=' '+$bracesCoercion+' if ('+$coerced+' === undefined) { ';var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'type')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: { type: \\'';if($typeIsArray){out+=''+$typeSchema.join(\",\");}else{out+=''+$typeSchema;}out+='\\' } ';if(it.opts.messages!==false){out+=' , message: \\'should be ';if($typeIsArray){out+=''+$typeSchema.join(\",\");}else{out+=''+$typeSchema;}out+='\\' ';}if(it.opts.verbose){out+=' , schema: validate.schema'+$schemaPath+' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}out+=' } else { ';if($dataLvl){var $parentData='data'+($dataLvl-1||''),$dataProperty=it.dataPathArr[$dataLvl];out+=' '+$data+' = '+$parentData+'['+$dataProperty+'] = '+$coerced+'; ';}else{out+=' data = '+$coerced+'; if (parentData !== undefined) parentData[parentDataProperty] = '+$coerced+'; ';}out+=' } } ';}}var arr2=it.RULES;if(arr2){var $rulesGroup,i2=-1,l2=arr2.length-1;while(i2<l2){$rulesGroup=arr2[i2+=1];if($shouldUseGroup($rulesGroup)){if($rulesGroup.type){out+=' if ('+it.util.checkDataType($rulesGroup.type,$data)+') { ';}if(it.opts.useDefaults&&!it.compositeRule){if($rulesGroup.type=='object'&&it.schema.properties){var $schema=it.schema.properties,$schemaKeys=Object.keys($schema);var arr3=$schemaKeys;if(arr3){var $propertyKey,i3=-1,l3=arr3.length-1;while(i3<l3){$propertyKey=arr3[i3+=1];var $sch=$schema[$propertyKey];if($sch.default!==undefined){var $passData=$data+it.util.getProperty($propertyKey);out+=' if ('+$passData+' === undefined) '+$passData+' = ';if(it.opts.useDefaults=='clone'){out+=' '+JSON.stringify($sch.default)+' ';}else{out+=' '+it.useDefault($sch.default)+' ';}out+='; ';}}}}else if($rulesGroup.type=='array'&&Array.isArray(it.schema.items)){var arr4=it.schema.items;if(arr4){var $sch,$i=-1,l4=arr4.length-1;while($i<l4){$sch=arr4[$i+=1];if($sch.default!==undefined){var $passData=$data+'['+$i+']';out+=' if ('+$passData+' === undefined) '+$passData+' = ';if(it.opts.useDefaults=='clone'){out+=' '+JSON.stringify($sch.default)+' ';}else{out+=' '+it.useDefault($sch.default)+' ';}out+='; ';}}}}}var arr5=$rulesGroup.rules;if(arr5){var $rule,i5=-1,l5=arr5.length-1;while(i5<l5){$rule=arr5[i5+=1];if($shouldUseRule($rule)){if($rule.custom){var $schema=it.schema[$rule.keyword],$ruleValidate=it.useCustomRule($rule,$schema,it.schema,it),$ruleErrs=$ruleValidate.code+'.errors',$schemaPath=it.schemaPath+'.'+$rule.keyword,$errSchemaPath=it.errSchemaPath+'/'+$rule.keyword,$errs='errs'+$lvl,$i='i'+$lvl,$ruleErr='ruleErr'+$lvl,$rDef=$rule.definition,$asyncKeyword=$rDef.async,$inline=$rDef.inline,$macro=$rDef.macro;if($asyncKeyword&&!it.async)throw new Error('async keyword in sync schema');if(!($inline||$macro)){out+=''+$ruleErrs+' = null;';}out+='var '+$errs+' = errors;var valid'+$lvl+';';if($inline&&$rDef.statements){out+=' '+$ruleValidate.validate;}else if($macro){var $it=it.util.copy(it);$it.level++;$it.schema=$ruleValidate.validate;$it.schemaPath='';var $wasComposite=it.compositeRule;it.compositeRule=$it.compositeRule=true;var $code=it.validate($it).replace(/validate\\.schema/g,$ruleValidate.code);it.compositeRule=$it.compositeRule=$wasComposite;out+=' '+$code;}else if($rDef.compile||$rDef.validate){var $$outStack=$$outStack||[];$$outStack.push(out);out='';out+=' '+$ruleValidate.code+'.call( ';if(it.opts.passContext){out+='this';}else{out+='self';}var $validateArgs=$ruleValidate.validate.length;if($rDef.compile||$rDef.schema===false){out+=' , '+$data+' ';}else{out+=' , validate.schema'+$schemaPath+' , '+$data+' , validate.schema'+it.schemaPath+' ';}out+=' , (dataPath || \\'\\')';if(it.errorPath!='\"\"'){out+=' + '+it.errorPath;}if($dataLvl){out+=' , data'+($dataLvl-1||'')+' , '+it.dataPathArr[$dataLvl]+' ';}else{out+=' , parentData , parentDataProperty ';}out+=' ) ';var def_callRuleValidate=out;out=$$outStack.pop();if($rDef.errors!==false){if($asyncKeyword){$ruleErrs='customErrors'+$lvl;out+=' var '+$ruleErrs+' = null; try { valid'+$lvl+' = '+it.yieldAwait+def_callRuleValidate+'; } catch (e) { valid'+$lvl+' = false; if (e instanceof ValidationError) '+$ruleErrs+' = e.errors; else throw e; } ';}else{out+=' '+$ruleValidate.code+'.errors = null; ';}}}out+='if (! ';if($inline){if($rDef.statements){out+=' valid'+$lvl+' ';}else{out+=' ('+$ruleValidate.validate+') ';}}else if($macro){out+=' valid'+$it.level+' ';}else{if($asyncKeyword){if($rDef.errors===false){out+=' ('+it.yieldAwait+def_callRuleValidate+') ';}else{out+=' valid'+$lvl+' ';}}else{out+=' '+def_callRuleValidate+' ';}}out+=') { ';$errorKeyword=$rule.keyword;var $$outStack=$$outStack||[];$$outStack.push(out);out='';var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'custom')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: { keyword: \\''+$rule.keyword+'\\' } ';if(it.opts.messages!==false){out+=' , message: \\'should pass \"'+$rule.keyword+'\" keyword validation\\' ';}if(it.opts.verbose){out+=' , schema: validate.schema'+$schemaPath+' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}var def_customError=out;out=$$outStack.pop();if($inline){if($rDef.errors){if($rDef.errors!='full'){out+=' for (var '+$i+'='+$errs+'; '+$i+'<errors; '+$i+'++) { var '+$ruleErr+' = vErrors['+$i+']; if ('+$ruleErr+'.dataPath === undefined) { '+$ruleErr+'.dataPath = (dataPath || \\'\\') + '+it.errorPath+'; } if ('+$ruleErr+'.schemaPath === undefined) { '+$ruleErr+'.schemaPath = \"'+$errSchemaPath+'\"; } ';if(it.opts.verbose){out+=' '+$ruleErr+'.schema = validate.schema'+$schemaPath+'; '+$ruleErr+'.data = '+$data+'; ';}out+=' } ';}}else{if($rDef.errors===false){out+=' '+def_customError+' ';}else{out+=' if ('+$errs+' == errors) { '+def_customError+' } else { for (var '+$i+'='+$errs+'; '+$i+'<errors; '+$i+'++) { var '+$ruleErr+' = vErrors['+$i+']; if ('+$ruleErr+'.dataPath === undefined) { '+$ruleErr+'.dataPath = (dataPath || \\'\\') + '+it.errorPath+'; } if ('+$ruleErr+'.schemaPath === undefined) { '+$ruleErr+'.schemaPath = \"'+$errSchemaPath+'\"; } ';if(it.opts.verbose){out+=' '+$ruleErr+'.schema = validate.schema'+$schemaPath+'; '+$ruleErr+'.data = '+$data+'; ';}out+=' } } ';}}}else if($macro){out+=' var err = ';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'custom')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: { keyword: \\''+$rule.keyword+'\\' } ';if(it.opts.messages!==false){out+=' , message: \\'should pass \"'+$rule.keyword+'\" keyword validation\\' ';}if(it.opts.verbose){out+=' , schema: validate.schema'+$schemaPath+' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}out+='; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(vErrors); ';}else{out+=' validate.errors = vErrors; return false ';}}}else{if($rDef.errors===false){out+=' '+def_customError+' ';}else{out+=' if (Array.isArray('+$ruleErrs+')) { if (vErrors === null) vErrors = '+$ruleErrs+'; else vErrors.concat('+$ruleErrs+'); errors = vErrors.length; for (var '+$i+'='+$errs+'; '+$i+'<errors; '+$i+'++) { var '+$ruleErr+' = vErrors['+$i+']; '+$ruleErr+'.dataPath = (dataPath || \\'\\') + '+it.errorPath+'; '+$ruleErr+'.schemaPath = \"'+$errSchemaPath+'\"; ';if(it.opts.verbose){out+=' '+$ruleErr+'.schema = validate.schema'+$schemaPath+'; '+$ruleErr+'.data = '+$data+'; ';}out+=' } } else { '+def_customError+' } ';}}$errorKeyword=undefined;out+=' } ';if($breakOnError){out+=' else { ';}}else{out+=' '+$rule.code(it,$rule.keyword)+' ';}if($breakOnError){$closingBraces1+='}';}}}}if($breakOnError){out+=' '+$closingBraces1+' ';$closingBraces1='';}if($rulesGroup.type){out+=' } ';if($typeSchema&&$typeSchema===$rulesGroup.type){var $typeChecked=true;out+=' else { ';var $schemaPath=it.schemaPath+'.type',$errSchemaPath=it.errSchemaPath+'/type';var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'type')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: { type: \\'';if($typeIsArray){out+=''+$typeSchema.join(\",\");}else{out+=''+$typeSchema;}out+='\\' } ';if(it.opts.messages!==false){out+=' , message: \\'should be ';if($typeIsArray){out+=''+$typeSchema.join(\",\");}else{out+=''+$typeSchema;}out+='\\' ';}if(it.opts.verbose){out+=' , schema: validate.schema'+$schemaPath+' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}out+=' } ';}}if($breakOnError){out+=' if (errors === ';if($top){out+='0';}else{out+='errs_'+$lvl;}out+=') { ';$closingBraces2+='}';}}}}if($typeSchema&&!$typeChecked&&!(it.opts.coerceTypes&&$coerceToTypes)){var $schemaPath=it.schemaPath+'.type',$errSchemaPath=it.errSchemaPath+'/type',$method=$typeIsArray?'checkDataTypes':'checkDataType';out+=' if ('+it.util[$method]($typeSchema,$data,true)+') { ';var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'type')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: { type: \\'';if($typeIsArray){out+=''+$typeSchema.join(\",\");}else{out+=''+$typeSchema;}out+='\\' } ';if(it.opts.messages!==false){out+=' , message: \\'should be ';if($typeIsArray){out+=''+$typeSchema.join(\",\");}else{out+=''+$typeSchema;}out+='\\' ';}if(it.opts.verbose){out+=' , schema: validate.schema'+$schemaPath+' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}out+=' }';}if($breakOnError){out+=' '+$closingBraces2+' ';}if($top){if($async){out+=' if (errors === 0) return true; ';out+=' else throw new ValidationError(vErrors); ';}else{out+=' validate.errors = vErrors; ';out+=' return errors === 0; ';}out+=' });';}else{out+=' var '+$valid+' = errors === errs_'+$lvl+';';}out=it.util.cleanUpCode(out);if($top&&$breakOnError){out=it.util.cleanUpVarErrors(out,$async);}function $shouldUseGroup($rulesGroup){for(var i=0;i<$rulesGroup.rules.length;i++)if($shouldUseRule($rulesGroup.rules[i]))return true;}function $shouldUseRule($rule){return it.schema[$rule.keyword]!==undefined||$rule.keyword=='properties'&&(it.schema.additionalProperties===false||typeof it.schema.additionalProperties=='object'||it.schema.patternProperties&&Object.keys(it.schema.patternProperties).length||it.opts.v5&&it.schema.patternGroups&&Object.keys(it.schema.patternGroups).length);}return out;};/***/},/* 19 */ /***/function(module,exports){/**\r\n\t * slice() reference.\r\n\t */var slice=Array.prototype.slice;/**\r\n\t * Expose `co`.\r\n\t */module.exports=co['default']=co.co=co;/**\r\n\t * Wrap the given generator `fn` into a\r\n\t * function that returns a promise.\r\n\t * This is a separate function so that\r\n\t * every `co()` call doesn't create a new,\r\n\t * unnecessary closure.\r\n\t *\r\n\t * @param {GeneratorFunction} fn\r\n\t * @return {Function}\r\n\t * @api public\r\n\t */co.wrap=function(fn){createPromise.__generatorFunction__=fn;return createPromise;function createPromise(){return co.call(this,fn.apply(this,arguments));}};/**\r\n\t * Execute the generator function or a generator\r\n\t * and return a promise.\r\n\t *\r\n\t * @param {Function} fn\r\n\t * @return {Promise}\r\n\t * @api public\r\n\t */function co(gen){var ctx=this;var args=slice.call(arguments,1);// we wrap everything in a promise to avoid promise chaining,\n// which leads to memory leak errors.\n// see https://github.com/tj/co/issues/180\nreturn new Promise(function(resolve,reject){if(typeof gen==='function')gen=gen.apply(ctx,args);if(!gen||typeof gen.next!=='function')return resolve(gen);onFulfilled();/**\r\n\t * @param {Mixed} res\r\n\t * @return {Promise}\r\n\t * @api private\r\n\t */function onFulfilled(res){var ret;try{ret=gen.next(res);}catch(e){return reject(e);}next(ret);}/**\r\n\t * @param {Error} err\r\n\t * @return {Promise}\r\n\t * @api private\r\n\t */function onRejected(err){var ret;try{ret=gen.throw(err);}catch(e){return reject(e);}next(ret);}/**\r\n\t * Get the next value in the generator,\r\n\t * return a promise.\r\n\t *\r\n\t * @param {Object} ret\r\n\t * @return {Promise}\r\n\t * @api private\r\n\t */function next(ret){if(ret.done)return resolve(ret.value);var value=toPromise.call(ctx,ret.value);if(value&&isPromise(value))return value.then(onFulfilled,onRejected);return onRejected(new TypeError('You may only yield a function, promise, generator, array, or object, '+'but the following object was passed: \"'+String(ret.value)+'\"'));}});}/**\r\n\t * Convert a `yield`ed value into a promise.\r\n\t *\r\n\t * @param {Mixed} obj\r\n\t * @return {Promise}\r\n\t * @api private\r\n\t */function toPromise(obj){if(!obj)return obj;if(isPromise(obj))return obj;if(isGeneratorFunction(obj)||isGenerator(obj))return co.call(this,obj);if('function'==typeof obj)return thunkToPromise.call(this,obj);if(Array.isArray(obj))return arrayToPromise.call(this,obj);if(isObject(obj))return objectToPromise.call(this,obj);return obj;}/**\r\n\t * Convert a thunk to a promise.\r\n\t *\r\n\t * @param {Function}\r\n\t * @return {Promise}\r\n\t * @api private\r\n\t */function thunkToPromise(fn){var ctx=this;return new Promise(function(resolve,reject){fn.call(ctx,function(err,res){if(err)return reject(err);if(arguments.length>2)res=slice.call(arguments,1);resolve(res);});});}/**\r\n\t * Convert an array of \"yieldables\" to a promise.\r\n\t * Uses `Promise.all()` internally.\r\n\t *\r\n\t * @param {Array} obj\r\n\t * @return {Promise}\r\n\t * @api private\r\n\t */function arrayToPromise(obj){return Promise.all(obj.map(toPromise,this));}/**\r\n\t * Convert an object of \"yieldables\" to a promise.\r\n\t * Uses `Promise.all()` internally.\r\n\t *\r\n\t * @param {Object} obj\r\n\t * @return {Promise}\r\n\t * @api private\r\n\t */function objectToPromise(obj){var results=new obj.constructor();var keys=Object.keys(obj);var promises=[];for(var i=0;i<keys.length;i++){var key=keys[i];var promise=toPromise.call(this,obj[key]);if(promise&&isPromise(promise))defer(promise,key);else results[key]=obj[key];}return Promise.all(promises).then(function(){return results;});function defer(promise,key){// predefine the key in the result\nresults[key]=undefined;promises.push(promise.then(function(res){results[key]=res;}));}}/**\r\n\t * Check if `obj` is a promise.\r\n\t *\r\n\t * @param {Object} obj\r\n\t * @return {Boolean}\r\n\t * @api private\r\n\t */function isPromise(obj){return'function'==typeof obj.then;}/**\r\n\t * Check if `obj` is a generator.\r\n\t *\r\n\t * @param {Mixed} obj\r\n\t * @return {Boolean}\r\n\t * @api private\r\n\t */function isGenerator(obj){return'function'==typeof obj.next&&'function'==typeof obj.throw;}/**\r\n\t * Check if `obj` is a generator function.\r\n\t *\r\n\t * @param {Mixed} obj\r\n\t * @return {Boolean}\r\n\t * @api private\r\n\t */function isGeneratorFunction(obj){var constructor=obj.constructor;if(!constructor)return false;if('GeneratorFunction'===constructor.name||'GeneratorFunction'===constructor.displayName)return true;return isGenerator(constructor.prototype);}/**\r\n\t * Check for plain object.\r\n\t *\r\n\t * @param {Mixed} val\r\n\t * @return {Boolean}\r\n\t * @api private\r\n\t */function isObject(val){return Object==val.constructor;}/***/},/* 20 */ /***/function(module,exports){'use strict';module.exports=ValidationError;function ValidationError(errors){this.message='validation failed';this.errors=errors;this.ajv=this.validation=true;}ValidationError.prototype=Object.create(Error.prototype);ValidationError.prototype.constructor=ValidationError;/***/},/* 21 */ /***/function(module,exports){'use strict';var Cache=module.exports=function Cache(){this._cache={};};Cache.prototype.put=function Cache_put(key,value){this._cache[key]=value;};Cache.prototype.get=function Cache_get(key){return this._cache[key];};Cache.prototype.del=function Cache_del(key){delete this._cache[key];};Cache.prototype.clear=function Cache_clear(){this._cache={};};/***/},/* 22 */ /***/function(module,exports,__webpack_require__){'use strict';var util=__webpack_require__(11);var DATE=/^\\d\\d\\d\\d-(\\d\\d)-(\\d\\d)$/;var DAYS=[0,31,29,31,30,31,30,31,31,30,31,30,31];var TIME=/^(\\d\\d):(\\d\\d):(\\d\\d)(\\.\\d+)?(z|[+-]\\d\\d:\\d\\d)?$/i;var HOSTNAME=/^[a-z](?:(?:[-0-9a-z]{0,61})?[0-9a-z])?(\\.[a-z](?:(?:[-0-9a-z]{0,61})?[0-9a-z])?)*$/i;var URI=/^(?:[a-z][a-z0-9+\\-.]*:)?(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\\?(?:[a-z0-9\\-._~!$&'()*+,;=:@\\/?]|%[0-9a-f]{2})*)?(?:\\#(?:[a-z0-9\\-._~!$&'()*+,;=:@\\/?]|%[0-9a-f]{2})*)?$/i;var UUID=/^(?:urn\\:uuid\\:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i;var JSON_POINTER=/^(?:\\/(?:[^~\\/]|~0|~1)+)*(?:\\/)?$|^\\#(?:\\/(?:[a-z0-9_\\-\\.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)+)*(?:\\/)?$/i;var RELATIVE_JSON_POINTER=/^(?:0|[1-9][0-9]*)(?:\\#|(?:\\/(?:[^~\\/]|~0|~1)+)*(?:\\/)?)$/;module.exports=formats;function formats(mode){mode=mode=='full'?'full':'fast';var formatDefs=util.copy(formats[mode]);for(var fName in formats.compare){formatDefs[fName]={validate:formatDefs[fName],compare:formats.compare[fName]};}return formatDefs;}formats.fast={// date: http://tools.ietf.org/html/rfc3339#section-5.6\ndate:/^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d$/,// date-time: http://tools.ietf.org/html/rfc3339#section-5.6\ntime:/^[0-2]\\d:[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:z|[+-]\\d\\d:\\d\\d)?$/i,'date-time':/^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d[t\\s][0-2]\\d:[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:z|[+-]\\d\\d:\\d\\d)$/i,// uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js\nuri:/^(?:[a-z][a-z0-9+-.]*)?(?:\\:|\\/)\\/?[^\\s]*$/i,// email (sources from jsen validator):\n// http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363\n// http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'willful violation')\nemail:/^[a-z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,hostname:HOSTNAME,// optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html\nipv4:/^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,// optimized http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses\nipv6:/^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,regex:regex,// uuid: http://tools.ietf.org/html/rfc4122\nuuid:UUID,// JSON-pointer: https://tools.ietf.org/html/rfc6901\n// uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A\n'json-pointer':JSON_POINTER,// relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00\n'relative-json-pointer':RELATIVE_JSON_POINTER};formats.full={date:date,time:time,'date-time':date_time,uri:uri,email:/^[a-z0-9!#$%&'*+\\/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&''*+\\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:hostname,ipv4:/^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,ipv6:/^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,regex:regex,uuid:UUID,'json-pointer':JSON_POINTER,'relative-json-pointer':RELATIVE_JSON_POINTER};formats.compare={date:compareDate,time:compareTime,'date-time':compareDateTime};function date(str){// full-date from http://tools.ietf.org/html/rfc3339#section-5.6\nvar matches=str.match(DATE);if(!matches)return false;var month=+matches[1];var day=+matches[2];return month>=1&&month<=12&&day>=1&&day<=DAYS[month];}function time(str,full){var matches=str.match(TIME);if(!matches)return false;var hour=matches[1];var minute=matches[2];var second=matches[3];var timeZone=matches[5];return hour<=23&&minute<=59&&second<=59&&(!full||timeZone);}var DATE_TIME_SEPARATOR=/t|\\s/i;function date_time(str){// http://tools.ietf.org/html/rfc3339#section-5.6\nvar dateTime=str.split(DATE_TIME_SEPARATOR);return date(dateTime[0])&&time(dateTime[1],true);}function hostname(str){// http://tools.ietf.org/html/rfc1034#section-3.5\nreturn str.length<=255&&HOSTNAME.test(str);}var NOT_URI_FRAGMENT=/\\/|\\:/;function uri(str){// http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required \".\"\nreturn NOT_URI_FRAGMENT.test(str)&&URI.test(str);}function regex(str){try{new RegExp(str);return true;}catch(e){return false;}}function compareDate(d1,d2){if(!(d1&&d2))return;if(d1>d2)return 1;if(d1<d2)return-1;if(d1===d2)return 0;}function compareTime(t1,t2){if(!(t1&&t2))return;t1=t1.match(TIME);t2=t2.match(TIME);if(!(t1&&t2))return;t1=t1[1]+t1[2]+t1[3]+(t1[4]||'');t2=t2[1]+t2[2]+t2[3]+(t2[4]||'');if(t1>t2)return 1;if(t1<t2)return-1;if(t1===t2)return 0;}function compareDateTime(dt1,dt2){if(!(dt1&&dt2))return;dt1=dt1.split(DATE_TIME_SEPARATOR);dt2=dt2.split(DATE_TIME_SEPARATOR);var res=compareDate(dt1[0],dt2[0]);if(res===undefined)return;return res||compareTime(dt1[1],dt2[1]);}/***/},/* 23 */ /***/function(module,exports,__webpack_require__){'use strict';var ruleModules=__webpack_require__(24),util=__webpack_require__(11);module.exports=function rules(){var RULES=[{type:'number',rules:['maximum','minimum','multipleOf']},{type:'string',rules:['maxLength','minLength','pattern','format']},{type:'array',rules:['maxItems','minItems','uniqueItems','items']},{type:'object',rules:['maxProperties','minProperties','required','dependencies','properties']},{rules:['$ref','enum','not','anyOf','oneOf','allOf']}];RULES.all=['type','additionalProperties','patternProperties'];RULES.keywords=['additionalItems','$schema','id','title','description','default'];RULES.types=['number','integer','string','array','object','boolean','null'];RULES.forEach(function(group){group.rules=group.rules.map(function(keyword){RULES.all.push(keyword);return{keyword:keyword,code:ruleModules[keyword]};});});RULES.keywords=util.toHash(RULES.all.concat(RULES.keywords));RULES.all=util.toHash(RULES.all);RULES.types=util.toHash(RULES.types);return RULES;};/***/},/* 24 */ /***/function(module,exports,__webpack_require__){'use strict';//all requires must be explicit because browserify won't work with dynamic requires\nmodule.exports={'$ref':__webpack_require__(25),allOf:__webpack_require__(26),anyOf:__webpack_require__(27),dependencies:__webpack_require__(28),enum:__webpack_require__(29),format:__webpack_require__(30),items:__webpack_require__(31),maximum:__webpack_require__(32),minimum:__webpack_require__(32),maxItems:__webpack_require__(33),minItems:__webpack_require__(33),maxLength:__webpack_require__(34),minLength:__webpack_require__(34),maxProperties:__webpack_require__(35),minProperties:__webpack_require__(35),multipleOf:__webpack_require__(36),not:__webpack_require__(37),oneOf:__webpack_require__(38),pattern:__webpack_require__(39),properties:__webpack_require__(40),required:__webpack_require__(41),uniqueItems:__webpack_require__(42),validate:__webpack_require__(18)};/***/},/* 25 */ /***/function(module,exports){'use strict';module.exports=function generate_ref(it,$keyword){var out=' ';var $lvl=it.level;var $dataLvl=it.dataLevel;var $schema=it.schema[$keyword];var $errSchemaPath=it.errSchemaPath+'/'+$keyword;var $breakOnError=!it.opts.allErrors;var $errorKeyword;var $data='data'+($dataLvl||'');var $valid='valid'+$lvl;var $async,$refCode;if($schema=='#'||$schema=='#/'){if(it.isRoot){$async=it.async;$refCode='validate';}else{$async=it.root.schema.$async===true;$refCode='root.refVal[0]';}}else{var $refVal=it.resolveRef(it.baseId,$schema,it.isRoot);if($refVal===undefined){var $message='can\\'t resolve reference '+$schema+' from id '+it.baseId;if(it.opts.missingRefs=='fail'){console.log($message);var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'$ref')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: { ref: \\''+it.util.escapeQuotes($schema)+'\\' } ';if(it.opts.messages!==false){out+=' , message: \\'can\\\\\\'t resolve reference '+it.util.escapeQuotes($schema)+'\\' ';}if(it.opts.verbose){out+=' , schema: '+it.util.toQuotedString($schema)+' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}if($breakOnError){out+=' if (false) { ';}}else if(it.opts.missingRefs=='ignore'){console.log($message);if($breakOnError){out+=' if (true) { ';}}else{var $error=new Error($message);$error.missingRef=it.resolve.url(it.baseId,$schema);$error.missingSchema=it.resolve.normalizeId(it.resolve.fullPath($error.missingRef));throw $error;}}else if($refVal.inline){var $it=it.util.copy(it);$it.level++;$it.schema=$refVal.schema;$it.schemaPath='';$it.errSchemaPath=$schema;var $code=it.validate($it).replace(/validate\\.schema/g,$refVal.code);out+=' '+$code+' ';if($breakOnError){out+=' if (valid'+$it.level+') { ';}}else{$async=$refVal.async;$refCode=$refVal.code;}}if($refCode){var $$outStack=$$outStack||[];$$outStack.push(out);out='';if(it.opts.passContext){out+=' '+$refCode+'.call(this, ';}else{out+=' '+$refCode+'( ';}out+=' '+$data+', (dataPath || \\'\\')';if(it.errorPath!='\"\"'){out+=' + '+it.errorPath;}if($dataLvl){out+=' , data'+($dataLvl-1||'')+' , '+it.dataPathArr[$dataLvl]+' ';}else{out+=' , parentData , parentDataProperty ';}out+=') ';var __callValidate=out;out=$$outStack.pop();if($async){if(!it.async)throw new Error('async schema referenced by sync schema');out+=' try { ';if($breakOnError){out+='var '+$valid+' =';}out+=' '+it.yieldAwait+' '+__callValidate+'; } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; } ';if($breakOnError){out+=' if ('+$valid+') { ';}}else{out+=' if (!'+__callValidate+') { if (vErrors === null) vErrors = '+$refCode+'.errors; else vErrors = vErrors.concat('+$refCode+'.errors); errors = vErrors.length; } ';if($breakOnError){out+=' else { ';}}}return out;};/***/},/* 26 */ /***/function(module,exports){'use strict';module.exports=function generate_allOf(it,$keyword){var out=' ';var $schema=it.schema[$keyword];var $schemaPath=it.schemaPath+'.'+$keyword;var $errSchemaPath=it.errSchemaPath+'/'+$keyword;var $breakOnError=!it.opts.allErrors;var $it=it.util.copy(it);var $closingBraces='';$it.level++;var arr1=$schema;if(arr1){var $sch,$i=-1,l1=arr1.length-1;while($i<l1){$sch=arr1[$i+=1];if(it.util.schemaHasRules($sch,it.RULES.all)){$it.schema=$sch;$it.schemaPath=$schemaPath+'['+$i+']';$it.errSchemaPath=$errSchemaPath+'/'+$i;out+=' '+it.validate($it)+' ';if($breakOnError){out+=' if (valid'+$it.level+') { ';$closingBraces+='}';}}}}if($breakOnError){out+=' '+$closingBraces.slice(0,-1);}out=it.util.cleanUpCode(out);return out;};/***/},/* 27 */ /***/function(module,exports){'use strict';module.exports=function generate_anyOf(it,$keyword){var out=' ';var $lvl=it.level;var $dataLvl=it.dataLevel;var $schema=it.schema[$keyword];var $schemaPath=it.schemaPath+'.'+$keyword;var $errSchemaPath=it.errSchemaPath+'/'+$keyword;var $breakOnError=!it.opts.allErrors;var $errorKeyword;var $data='data'+($dataLvl||'');var $valid='valid'+$lvl;var $errs='errs__'+$lvl;var $it=it.util.copy(it);var $closingBraces='';$it.level++;var $noEmptySchema=$schema.every(function($sch){return it.util.schemaHasRules($sch,it.RULES.all);});if($noEmptySchema){out+=' var '+$errs+' = errors; var '+$valid+' = false; ';var $wasComposite=it.compositeRule;it.compositeRule=$it.compositeRule=true;var arr1=$schema;if(arr1){var $sch,$i=-1,l1=arr1.length-1;while($i<l1){$sch=arr1[$i+=1];$it.schema=$sch;$it.schemaPath=$schemaPath+'['+$i+']';$it.errSchemaPath=$errSchemaPath+'/'+$i;out+=' '+it.validate($it)+' '+$valid+' = '+$valid+' || valid'+$it.level+'; if (!'+$valid+') { ';$closingBraces+='}';}}it.compositeRule=$it.compositeRule=$wasComposite;out+=' '+$closingBraces+' if (!'+$valid+') { var err = ';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'anyOf')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: {} ';if(it.opts.messages!==false){out+=' , message: \\'should match some schema in anyOf\\' ';}if(it.opts.verbose){out+=' , schema: validate.schema'+$schemaPath+' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}out+='; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else { errors = '+$errs+'; if (vErrors !== null) { if ('+$errs+') vErrors.length = '+$errs+'; else vErrors = null; } ';if(it.opts.allErrors){out+=' } ';}out=it.util.cleanUpCode(out);}else{if($breakOnError){out+=' if (true) { ';}}return out;};/***/},/* 28 */ /***/function(module,exports){'use strict';module.exports=function generate_dependencies(it,$keyword){var out=' ';var $lvl=it.level;var $dataLvl=it.dataLevel;var $schema=it.schema[$keyword];var $schemaPath=it.schemaPath+'.'+$keyword;var $errSchemaPath=it.errSchemaPath+'/'+$keyword;var $breakOnError=!it.opts.allErrors;var $errorKeyword;var $data='data'+($dataLvl||'');var $errs='errs__'+$lvl;var $it=it.util.copy(it);var $closingBraces='';$it.level++;var $schemaDeps={},$propertyDeps={};for($property in $schema){var $sch=$schema[$property];var $deps=Array.isArray($sch)?$propertyDeps:$schemaDeps;$deps[$property]=$sch;}out+='var '+$errs+' = errors;';var $currentErrorPath=it.errorPath;out+='var missing'+$lvl+';';for(var $property in $propertyDeps){$deps=$propertyDeps[$property];out+=' if ('+$data+it.util.getProperty($property)+' !== undefined && ( ';var arr1=$deps;if(arr1){var _$property,$i=-1,l1=arr1.length-1;while($i<l1){_$property=arr1[$i+=1];if($i){out+=' || ';}var $prop=it.util.getProperty(_$property);out+=' ( '+$data+$prop+' === undefined && (missing'+$lvl+' = '+it.util.toQuotedString(it.opts.jsonPointers?_$property:$prop)+') ) ';}}out+=')) { ';var $propertyPath='missing'+$lvl,$missingProperty='\\' + '+$propertyPath+' + \\'';if(it.opts._errorDataPathProperty){it.errorPath=it.opts.jsonPointers?it.util.getPathExpr($currentErrorPath,$propertyPath,true):$currentErrorPath+' + '+$propertyPath;}var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'dependencies')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: { property: \\''+it.util.escapeQuotes($property)+'\\', missingProperty: \\''+$missingProperty+'\\', depsCount: '+$deps.length+', deps: \\''+it.util.escapeQuotes($deps.length==1?$deps[0]:$deps.join(\", \"))+'\\' } ';if(it.opts.messages!==false){out+=' , message: \\'should have ';if($deps.length==1){out+='property '+it.util.escapeQuotes($deps[0]);}else{out+='properties '+it.util.escapeQuotes($deps.join(\", \"));}out+=' when property '+it.util.escapeQuotes($property)+' is present\\' ';}if(it.opts.verbose){out+=' , schema: validate.schema'+$schemaPath+' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}out+=' } ';if($breakOnError){$closingBraces+='}';out+=' else { ';}}it.errorPath=$currentErrorPath;for(var $property in $schemaDeps){var $sch=$schemaDeps[$property];if(it.util.schemaHasRules($sch,it.RULES.all)){out+=' valid'+$it.level+' = true; if ('+$data+'[\\''+$property+'\\'] !== undefined) { ';$it.schema=$sch;$it.schemaPath=$schemaPath+it.util.getProperty($property);$it.errSchemaPath=$errSchemaPath+'/'+it.util.escapeFragment($property);out+=' '+it.validate($it)+' } ';if($breakOnError){out+=' if (valid'+$it.level+') { ';$closingBraces+='}';}}}if($breakOnError){out+=' '+$closingBraces+' if ('+$errs+' == errors) {';}out=it.util.cleanUpCode(out);return out;};/***/},/* 29 */ /***/function(module,exports){'use strict';module.exports=function generate_enum(it,$keyword){var out=' ';var $lvl=it.level;var $dataLvl=it.dataLevel;var $schema=it.schema[$keyword];var $schemaPath=it.schemaPath+'.'+$keyword;var $errSchemaPath=it.errSchemaPath+'/'+$keyword;var $breakOnError=!it.opts.allErrors;var $errorKeyword;var $data='data'+($dataLvl||'');var $valid='valid'+$lvl;var $isData=it.opts.v5&&$schema.$data;var $schemaValue=$isData?it.util.getData($schema.$data,$dataLvl,it.dataPathArr):$schema;if($isData){out+=' var schema'+$lvl+' = '+$schemaValue+'; ';$schemaValue='schema'+$lvl;}var $i='i'+$lvl;if(!$isData){out+=' var schema'+$lvl+' = validate.schema'+$schemaPath+';';}out+='var '+$valid+';';if($isData){out+=' if (schema'+$lvl+' === undefined) '+$valid+' = true; else if (!Array.isArray(schema'+$lvl+')) '+$valid+' = false; else {';}out+=''+$valid+' = false;for (var '+$i+'=0; '+$i+'<schema'+$lvl+'.length; '+$i+'++) if (equal('+$data+', schema'+$lvl+'['+$i+'])) { '+$valid+' = true; break; }';if($isData){out+=' } ';}out+=' if (!'+$valid+') { ';var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'enum')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: {} ';if(it.opts.messages!==false){out+=' , message: \\'should be equal to one of the allowed values\\' ';}if(it.opts.verbose){out+=' , schema: validate.schema'+$schemaPath+' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}out+=' }';if($breakOnError){out+=' else { ';}return out;};/***/},/* 30 */ /***/function(module,exports){'use strict';module.exports=function generate_format(it,$keyword){var out=' ';var $lvl=it.level;var $dataLvl=it.dataLevel;var $schema=it.schema[$keyword];var $schemaPath=it.schemaPath+'.'+$keyword;var $errSchemaPath=it.errSchemaPath+'/'+$keyword;var $breakOnError=!it.opts.allErrors;var $errorKeyword;var $data='data'+($dataLvl||'');if(it.opts.format===false){if($breakOnError){out+=' if (true) { ';}return out;}var $isData=it.opts.v5&&$schema.$data;var $schemaValue=$isData?it.util.getData($schema.$data,$dataLvl,it.dataPathArr):$schema;if($isData){out+=' var schema'+$lvl+' = '+$schemaValue+'; ';$schemaValue='schema'+$lvl;}if($isData){var $format='format'+$lvl;out+=' var '+$format+' = formats['+$schemaValue+']; var isObject'+$lvl+' = typeof '+$format+' == \\'object\\' && !('+$format+' instanceof RegExp) && '+$format+'.validate; if (isObject'+$lvl+') { var async'+$lvl+' = '+$format+'.async; '+$format+' = '+$format+'.validate; } if ( ';if($isData){out+=' ('+$schemaValue+' !== undefined && typeof '+$schemaValue+' != \\'string\\') || ';}out+=' ('+$format+' && !(typeof '+$format+' == \\'function\\' ? ';if(it.async){out+=' (async'+$lvl+' ? '+it.yieldAwait+' '+$format+'('+$data+') : '+$format+'('+$data+')) ';}else{out+=' '+$format+'('+$data+') ';}out+=' : '+$format+'.test('+$data+')))) {';}else{var $format=it.formats[$schema];if(!$format){if($breakOnError){out+=' if (true) { ';}return out;}var $isObject=typeof $format=='object'&&!($format instanceof RegExp)&&$format.validate;if($isObject){var $async=$format.async===true;$format=$format.validate;}if($async){if(!it.async)throw new Error('async format in sync schema');var $formatRef='formats'+it.util.getProperty($schema)+'.validate';out+=' if (!('+it.yieldAwait+' '+$formatRef+'('+$data+'))) { ';}else{out+=' if (! ';var $formatRef='formats'+it.util.getProperty($schema);if($isObject)$formatRef+='.validate';if(typeof $format=='function'){out+=' '+$formatRef+'('+$data+') ';}else{out+=' '+$formatRef+'.test('+$data+') ';}out+=') { ';}}var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'format')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: { format: ';if($isData){out+=''+$schemaValue;}else{out+=''+it.util.toQuotedString($schema);}out+=' } ';if(it.opts.messages!==false){out+=' , message: \\'should match format \"';if($isData){out+='\\' + '+$schemaValue+' + \\'';}else{out+=''+it.util.escapeQuotes($schema);}out+='\"\\' ';}if(it.opts.verbose){out+=' , schema: ';if($isData){out+='validate.schema'+$schemaPath;}else{out+=''+it.util.toQuotedString($schema);}out+=' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}out+=' } ';if($breakOnError){out+=' else { ';}return out;};/***/},/* 31 */ /***/function(module,exports){'use strict';module.exports=function generate_items(it,$keyword){var out=' ';var $lvl=it.level;var $dataLvl=it.dataLevel;var $schema=it.schema[$keyword];var $schemaPath=it.schemaPath+'.'+$keyword;var $errSchemaPath=it.errSchemaPath+'/'+$keyword;var $breakOnError=!it.opts.allErrors;var $errorKeyword;var $data='data'+($dataLvl||'');var $valid='valid'+$lvl;var $errs='errs__'+$lvl;var $it=it.util.copy(it);var $closingBraces='';$it.level++;var $dataNxt=$it.dataLevel=it.dataLevel+1,$nextData='data'+$dataNxt;out+='var '+$errs+' = errors;var '+$valid+';';if(Array.isArray($schema)){var $additionalItems=it.schema.additionalItems;if($additionalItems===false){out+=' '+$valid+' = '+$data+'.length <= '+$schema.length+'; ';var $currErrSchemaPath=$errSchemaPath;$errSchemaPath=it.errSchemaPath+'/additionalItems';out+=' if (!'+$valid+') { ';var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'additionalItems')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: { limit: '+$schema.length+' } ';if(it.opts.messages!==false){out+=' , message: \\'should NOT have more than '+$schema.length+' items\\' ';}if(it.opts.verbose){out+=' , schema: false , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}out+=' } ';$errSchemaPath=$currErrSchemaPath;if($breakOnError){$closingBraces+='}';out+=' else { ';}}var arr1=$schema;if(arr1){var $sch,$i=-1,l1=arr1.length-1;while($i<l1){$sch=arr1[$i+=1];if(it.util.schemaHasRules($sch,it.RULES.all)){out+=' valid'+$it.level+' = true; if ('+$data+'.length > '+$i+') { ';var $passData=$data+'['+$i+']';$it.schema=$sch;$it.schemaPath=$schemaPath+'['+$i+']';$it.errSchemaPath=$errSchemaPath+'/'+$i;$it.errorPath=it.util.getPathExpr(it.errorPath,$i,it.opts.jsonPointers,true);$it.dataPathArr[$dataNxt]=$i;var $code=it.validate($it);if(it.util.varOccurences($code,$nextData)<2){out+=' '+it.util.varReplace($code,$nextData,$passData)+' ';}else{out+=' var '+$nextData+' = '+$passData+'; '+$code+' ';}out+=' } ';if($breakOnError){out+=' if (valid'+$it.level+') { ';$closingBraces+='}';}}}}if(typeof $additionalItems=='object'&&it.util.schemaHasRules($additionalItems,it.RULES.all)){$it.schema=$additionalItems;$it.schemaPath=it.schemaPath+'.additionalItems';$it.errSchemaPath=it.errSchemaPath+'/additionalItems';out+=' valid'+$it.level+' = true; if ('+$data+'.length > '+$schema.length+') { for (var i'+$lvl+' = '+$schema.length+'; i'+$lvl+' < '+$data+'.length; i'+$lvl+'++) { ';$it.errorPath=it.util.getPathExpr(it.errorPath,'i'+$lvl,it.opts.jsonPointers,true);var $passData=$data+'[i'+$lvl+']';$it.dataPathArr[$dataNxt]='i'+$lvl;var $code=it.validate($it);if(it.util.varOccurences($code,$nextData)<2){out+=' '+it.util.varReplace($code,$nextData,$passData)+' ';}else{out+=' var '+$nextData+' = '+$passData+'; '+$code+' ';}if($breakOnError){out+=' if (!valid'+$it.level+') break; ';}out+=' } } ';if($breakOnError){out+=' if (valid'+$it.level+') { ';$closingBraces+='}';}}}else if(it.util.schemaHasRules($schema,it.RULES.all)){$it.schema=$schema;$it.schemaPath=$schemaPath;$it.errSchemaPath=$errSchemaPath;out+=' for (var i'+$lvl+' = '+0+'; i'+$lvl+' < '+$data+'.length; i'+$lvl+'++) { ';$it.errorPath=it.util.getPathExpr(it.errorPath,'i'+$lvl,it.opts.jsonPointers,true);var $passData=$data+'[i'+$lvl+']';$it.dataPathArr[$dataNxt]='i'+$lvl;var $code=it.validate($it);if(it.util.varOccurences($code,$nextData)<2){out+=' '+it.util.varReplace($code,$nextData,$passData)+' ';}else{out+=' var '+$nextData+' = '+$passData+'; '+$code+' ';}if($breakOnError){out+=' if (!valid'+$it.level+') break; ';}out+=' } ';if($breakOnError){out+=' if (valid'+$it.level+') { ';$closingBraces+='}';}}if($breakOnError){out+=' '+$closingBraces+' if ('+$errs+' == errors) {';}out=it.util.cleanUpCode(out);return out;};/***/},/* 32 */ /***/function(module,exports){'use strict';module.exports=function generate__limit(it,$keyword){var out=' ';var $lvl=it.level;var $dataLvl=it.dataLevel;var $schema=it.schema[$keyword];var $schemaPath=it.schemaPath+'.'+$keyword;var $errSchemaPath=it.errSchemaPath+'/'+$keyword;var $breakOnError=!it.opts.allErrors;var $errorKeyword;var $data='data'+($dataLvl||'');var $isData=it.opts.v5&&$schema.$data;var $schemaValue=$isData?it.util.getData($schema.$data,$dataLvl,it.dataPathArr):$schema;if($isData){out+=' var schema'+$lvl+' = '+$schemaValue+'; ';$schemaValue='schema'+$lvl;}var $isMax=$keyword=='maximum',$exclusiveKeyword=$isMax?'exclusiveMaximum':'exclusiveMinimum',$schemaExcl=it.schema[$exclusiveKeyword],$isDataExcl=it.opts.v5&&$schemaExcl&&$schemaExcl.$data,$op=$isMax?'<':'>',$notOp=$isMax?'>':'<';if($isDataExcl){var $schemaValueExcl=it.util.getData($schemaExcl.$data,$dataLvl,it.dataPathArr),$exclusive='exclusive'+$lvl,$opExpr='op'+$lvl,$opStr='\\' + '+$opExpr+' + \\'';out+=' var schemaExcl'+$lvl+' = '+$schemaValueExcl+'; ';$schemaValueExcl='schemaExcl'+$lvl;out+=' var exclusive'+$lvl+'; if (typeof '+$schemaValueExcl+' != \\'boolean\\' && typeof '+$schemaValueExcl+' != \\'undefined\\') { ';var $errorKeyword=$exclusiveKeyword;var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'_exclusiveLimit')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: {} ';if(it.opts.messages!==false){out+=' , message: \\''+$exclusiveKeyword+' should be boolean\\' ';}if(it.opts.verbose){out+=' , schema: validate.schema'+$schemaPath+' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}out+=' } else if( ';if($isData){out+=' ('+$schemaValue+' !== undefined && typeof '+$schemaValue+' != \\'number\\') || ';}out+=' ((exclusive'+$lvl+' = '+$schemaValueExcl+' === true) ? '+$data+' '+$notOp+'= '+$schemaValue+' : '+$data+' '+$notOp+' '+$schemaValue+')) { var op'+$lvl+' = exclusive'+$lvl+' ? \\''+$op+'\\' : \\''+$op+'=\\';';}else{var $exclusive=$schemaExcl===true,$opStr=$op;if(!$exclusive)$opStr+='=';var $opExpr='\\''+$opStr+'\\'';out+=' if ( ';if($isData){out+=' ('+$schemaValue+' !== undefined && typeof '+$schemaValue+' != \\'number\\') || ';}out+=' '+$data+' '+$notOp;if($exclusive){out+='=';}out+=' '+$schemaValue+') {';}var $errorKeyword=$keyword;var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'_limit')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: { comparison: '+$opExpr+', limit: '+$schemaValue+', exclusive: '+$exclusive+' } ';if(it.opts.messages!==false){out+=' , message: \\'should be '+$opStr+' ';if($isData){out+='\\' + '+$schemaValue;}else{out+=''+$schema+'\\'';}}if(it.opts.verbose){out+=' , schema: ';if($isData){out+='validate.schema'+$schemaPath;}else{out+=''+$schema;}out+=' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}out+=' } ';if($breakOnError){out+=' else { ';}return out;};/***/},/* 33 */ /***/function(module,exports){'use strict';module.exports=function generate__limitItems(it,$keyword){var out=' ';var $lvl=it.level;var $dataLvl=it.dataLevel;var $schema=it.schema[$keyword];var $schemaPath=it.schemaPath+'.'+$keyword;var $errSchemaPath=it.errSchemaPath+'/'+$keyword;var $breakOnError=!it.opts.allErrors;var $errorKeyword;var $data='data'+($dataLvl||'');var $isData=it.opts.v5&&$schema.$data;var $schemaValue=$isData?it.util.getData($schema.$data,$dataLvl,it.dataPathArr):$schema;if($isData){out+=' var schema'+$lvl+' = '+$schemaValue+'; ';$schemaValue='schema'+$lvl;}var $op=$keyword=='maxItems'?'>':'<';out+='if ( ';if($isData){out+=' ('+$schemaValue+' !== undefined && typeof '+$schemaValue+' != \\'number\\') || ';}out+=' '+$data+'.length '+$op+' '+$schemaValue+') { ';var $errorKeyword=$keyword;var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'_limitItems')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: { limit: '+$schemaValue+' } ';if(it.opts.messages!==false){out+=' , message: \\'should NOT have ';if($keyword=='maxItems'){out+='more';}else{out+='less';}out+=' than ';if($isData){out+='\\' + '+$schemaValue+' + \\'';}else{out+=''+$schema;}out+=' items\\' ';}if(it.opts.verbose){out+=' , schema: ';if($isData){out+='validate.schema'+$schemaPath;}else{out+=''+$schema;}out+=' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}out+='} ';if($breakOnError){out+=' else { ';}return out;};/***/},/* 34 */ /***/function(module,exports){'use strict';module.exports=function generate__limitLength(it,$keyword){var out=' ';var $lvl=it.level;var $dataLvl=it.dataLevel;var $schema=it.schema[$keyword];var $schemaPath=it.schemaPath+'.'+$keyword;var $errSchemaPath=it.errSchemaPath+'/'+$keyword;var $breakOnError=!it.opts.allErrors;var $errorKeyword;var $data='data'+($dataLvl||'');var $isData=it.opts.v5&&$schema.$data;var $schemaValue=$isData?it.util.getData($schema.$data,$dataLvl,it.dataPathArr):$schema;if($isData){out+=' var schema'+$lvl+' = '+$schemaValue+'; ';$schemaValue='schema'+$lvl;}var $op=$keyword=='maxLength'?'>':'<';out+='if ( ';if($isData){out+=' ('+$schemaValue+' !== undefined && typeof '+$schemaValue+' != \\'number\\') || ';}if(it.opts.unicode===false){out+=' '+$data+'.length ';}else{out+=' ucs2length('+$data+') ';}out+=' '+$op+' '+$schemaValue+') { ';var $errorKeyword=$keyword;var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'_limitLength')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: { limit: '+$schemaValue+' } ';if(it.opts.messages!==false){out+=' , message: \\'should NOT be ';if($keyword=='maxLength'){out+='longer';}else{out+='shorter';}out+=' than ';if($isData){out+='\\' + '+$schemaValue+' + \\'';}else{out+=''+$schema;}out+=' characters\\' ';}if(it.opts.verbose){out+=' , schema: ';if($isData){out+='validate.schema'+$schemaPath;}else{out+=''+$schema;}out+=' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}out+='} ';if($breakOnError){out+=' else { ';}return out;};/***/},/* 35 */ /***/function(module,exports){'use strict';module.exports=function generate__limitProperties(it,$keyword){var out=' ';var $lvl=it.level;var $dataLvl=it.dataLevel;var $schema=it.schema[$keyword];var $schemaPath=it.schemaPath+'.'+$keyword;var $errSchemaPath=it.errSchemaPath+'/'+$keyword;var $breakOnError=!it.opts.allErrors;var $errorKeyword;var $data='data'+($dataLvl||'');var $isData=it.opts.v5&&$schema.$data;var $schemaValue=$isData?it.util.getData($schema.$data,$dataLvl,it.dataPathArr):$schema;if($isData){out+=' var schema'+$lvl+' = '+$schemaValue+'; ';$schemaValue='schema'+$lvl;}var $op=$keyword=='maxProperties'?'>':'<';out+='if ( ';if($isData){out+=' ('+$schemaValue+' !== undefined && typeof '+$schemaValue+' != \\'number\\') || ';}out+=' Object.keys('+$data+').length '+$op+' '+$schemaValue+') { ';var $errorKeyword=$keyword;var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'_limitProperties')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: { limit: '+$schemaValue+' } ';if(it.opts.messages!==false){out+=' , message: \\'should NOT have ';if($keyword=='maxProperties'){out+='more';}else{out+='less';}out+=' than ';if($isData){out+='\\' + '+$schemaValue+' + \\'';}else{out+=''+$schema;}out+=' properties\\' ';}if(it.opts.verbose){out+=' , schema: ';if($isData){out+='validate.schema'+$schemaPath;}else{out+=''+$schema;}out+=' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}out+='} ';if($breakOnError){out+=' else { ';}return out;};/***/},/* 36 */ /***/function(module,exports){'use strict';module.exports=function generate_multipleOf(it,$keyword){var out=' ';var $lvl=it.level;var $dataLvl=it.dataLevel;var $schema=it.schema[$keyword];var $schemaPath=it.schemaPath+'.'+$keyword;var $errSchemaPath=it.errSchemaPath+'/'+$keyword;var $breakOnError=!it.opts.allErrors;var $errorKeyword;var $data='data'+($dataLvl||'');var $isData=it.opts.v5&&$schema.$data;var $schemaValue=$isData?it.util.getData($schema.$data,$dataLvl,it.dataPathArr):$schema;if($isData){out+=' var schema'+$lvl+' = '+$schemaValue+'; ';$schemaValue='schema'+$lvl;}out+='var division'+$lvl+';if (';if($isData){out+=' '+$schemaValue+' !== undefined && ( typeof '+$schemaValue+' != \\'number\\' || ';}out+=' (division'+$lvl+' = '+$data+' / '+$schemaValue+', ';if(it.opts.multipleOfPrecision){out+=' Math.abs(Math.round(division'+$lvl+') - division'+$lvl+') > 1e-'+it.opts.multipleOfPrecision+' ';}else{out+=' division'+$lvl+' !== parseInt(division'+$lvl+') ';}out+=' ) ';if($isData){out+=' ) ';}out+=' ) { ';var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'multipleOf')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: { multipleOf: '+$schemaValue+' } ';if(it.opts.messages!==false){out+=' , message: \\'should be multiple of ';if($isData){out+='\\' + '+$schemaValue;}else{out+=''+$schema+'\\'';}}if(it.opts.verbose){out+=' , schema: ';if($isData){out+='validate.schema'+$schemaPath;}else{out+=''+$schema;}out+=' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}out+='} ';if($breakOnError){out+=' else { ';}return out;};/***/},/* 37 */ /***/function(module,exports){'use strict';module.exports=function generate_not(it,$keyword){var out=' ';var $lvl=it.level;var $dataLvl=it.dataLevel;var $schema=it.schema[$keyword];var $schemaPath=it.schemaPath+'.'+$keyword;var $errSchemaPath=it.errSchemaPath+'/'+$keyword;var $breakOnError=!it.opts.allErrors;var $errorKeyword;var $data='data'+($dataLvl||'');var $errs='errs__'+$lvl;var $it=it.util.copy(it);$it.level++;if(it.util.schemaHasRules($schema,it.RULES.all)){$it.schema=$schema;$it.schemaPath=$schemaPath;$it.errSchemaPath=$errSchemaPath;out+=' var '+$errs+' = errors; ';var $wasComposite=it.compositeRule;it.compositeRule=$it.compositeRule=true;$it.createErrors=false;var $allErrorsOption;if($it.opts.allErrors){$allErrorsOption=$it.opts.allErrors;$it.opts.allErrors=false;}out+=' '+it.validate($it)+' ';$it.createErrors=true;if($allErrorsOption)$it.opts.allErrors=$allErrorsOption;it.compositeRule=$it.compositeRule=$wasComposite;out+=' if (valid'+$it.level+') { ';var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'not')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: {} ';if(it.opts.messages!==false){out+=' , message: \\'should NOT be valid\\' ';}if(it.opts.verbose){out+=' , schema: validate.schema'+$schemaPath+' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}out+=' } else { errors = '+$errs+'; if (vErrors !== null) { if ('+$errs+') vErrors.length = '+$errs+'; else vErrors = null; } ';if(it.opts.allErrors){out+=' } ';}}else{out+=' var err = ';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'not')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: {} ';if(it.opts.messages!==false){out+=' , message: \\'should NOT be valid\\' ';}if(it.opts.verbose){out+=' , schema: validate.schema'+$schemaPath+' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}out+='; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';if($breakOnError){out+=' if (false) { ';}}return out;};/***/},/* 38 */ /***/function(module,exports){'use strict';module.exports=function generate_oneOf(it,$keyword){var out=' ';var $lvl=it.level;var $dataLvl=it.dataLevel;var $schema=it.schema[$keyword];var $schemaPath=it.schemaPath+'.'+$keyword;var $errSchemaPath=it.errSchemaPath+'/'+$keyword;var $breakOnError=!it.opts.allErrors;var $errorKeyword;var $data='data'+($dataLvl||'');var $valid='valid'+$lvl;var $errs='errs__'+$lvl;var $it=it.util.copy(it);var $closingBraces='';$it.level++;out+='var '+$errs+' = errors;var prevValid'+$lvl+' = false;var '+$valid+' = false; ';var $wasComposite=it.compositeRule;it.compositeRule=$it.compositeRule=true;var arr1=$schema;if(arr1){var $sch,$i=-1,l1=arr1.length-1;while($i<l1){$sch=arr1[$i+=1];if(it.util.schemaHasRules($sch,it.RULES.all)){$it.schema=$sch;$it.schemaPath=$schemaPath+'['+$i+']';$it.errSchemaPath=$errSchemaPath+'/'+$i;out+=' '+it.validate($it)+' ';}else{out+=' var valid'+$it.level+' = true; ';}if($i){out+=' if (valid'+$it.level+' && prevValid'+$lvl+') '+$valid+' = false; else { ';$closingBraces+='}';}out+=' if (valid'+$it.level+') '+$valid+' = prevValid'+$lvl+' = true;';}}it.compositeRule=$it.compositeRule=$wasComposite;out+=''+$closingBraces+'if (!'+$valid+') { ';var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'oneOf')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: {} ';if(it.opts.messages!==false){out+=' , message: \\'should match exactly one schema in oneOf\\' ';}if(it.opts.verbose){out+=' , schema: validate.schema'+$schemaPath+' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}out+='} else { errors = '+$errs+'; if (vErrors !== null) { if ('+$errs+') vErrors.length = '+$errs+'; else vErrors = null; }';if(it.opts.allErrors){out+=' } ';}return out;};/***/},/* 39 */ /***/function(module,exports){'use strict';module.exports=function generate_pattern(it,$keyword){var out=' ';var $lvl=it.level;var $dataLvl=it.dataLevel;var $schema=it.schema[$keyword];var $schemaPath=it.schemaPath+'.'+$keyword;var $errSchemaPath=it.errSchemaPath+'/'+$keyword;var $breakOnError=!it.opts.allErrors;var $errorKeyword;var $data='data'+($dataLvl||'');var $isData=it.opts.v5&&$schema.$data;var $schemaValue=$isData?it.util.getData($schema.$data,$dataLvl,it.dataPathArr):$schema;if($isData){out+=' var schema'+$lvl+' = '+$schemaValue+'; ';$schemaValue='schema'+$lvl;}var $regexp=$isData?'(new RegExp('+$schemaValue+'))':it.usePattern($schema);out+='if ( ';if($isData){out+=' ('+$schemaValue+' !== undefined && typeof '+$schemaValue+' != \\'string\\') || ';}out+=' !'+$regexp+'.test('+$data+') ) { ';var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'pattern')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: { pattern: ';if($isData){out+=''+$schemaValue;}else{out+=''+it.util.toQuotedString($schema);}out+=' } ';if(it.opts.messages!==false){out+=' , message: \\'should match pattern \"';if($isData){out+='\\' + '+$schemaValue+' + \\'';}else{out+=''+it.util.escapeQuotes($schema);}out+='\"\\' ';}if(it.opts.verbose){out+=' , schema: ';if($isData){out+='validate.schema'+$schemaPath;}else{out+=''+it.util.toQuotedString($schema);}out+=' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}out+='} ';if($breakOnError){out+=' else { ';}return out;};/***/},/* 40 */ /***/function(module,exports){'use strict';module.exports=function generate_properties(it,$keyword){var out=' ';var $lvl=it.level;var $dataLvl=it.dataLevel;var $schema=it.schema[$keyword];var $schemaPath=it.schemaPath+'.'+$keyword;var $errSchemaPath=it.errSchemaPath+'/'+$keyword;var $breakOnError=!it.opts.allErrors;var $errorKeyword;var $data='data'+($dataLvl||'');var $valid='valid'+$lvl;var $errs='errs__'+$lvl;var $it=it.util.copy(it);var $closingBraces='';$it.level++;var $dataNxt=$it.dataLevel=it.dataLevel+1,$nextData='data'+$dataNxt;var $schemaKeys=Object.keys($schema||{}),$pProperties=it.schema.patternProperties||{},$pPropertyKeys=Object.keys($pProperties),$aProperties=it.schema.additionalProperties,$someProperties=$schemaKeys.length||$pPropertyKeys.length,$noAdditional=$aProperties===false,$additionalIsSchema=typeof $aProperties=='object'&&Object.keys($aProperties).length,$removeAdditional=it.opts.removeAdditional,$checkAdditional=$noAdditional||$additionalIsSchema||$removeAdditional;var $required=it.schema.required;if($required&&!(it.opts.v5&&$required.$data)&&$required.length<it.opts.loopRequired)var $requiredHash=it.util.toHash($required);if(it.opts.v5){var $pgProperties=it.schema.patternGroups||{},$pgPropertyKeys=Object.keys($pgProperties);}out+='var '+$errs+' = errors;var valid'+$it.level+' = true;';if($checkAdditional){out+=' for (var key'+$lvl+' in '+$data+') { ';if($someProperties){out+=' var isAdditional'+$lvl+' = !(false ';if($schemaKeys.length){if($schemaKeys.length>5){out+=' || validate.schema'+$schemaPath+'[key'+$lvl+'] ';}else{var arr1=$schemaKeys;if(arr1){var $propertyKey,i1=-1,l1=arr1.length-1;while(i1<l1){$propertyKey=arr1[i1+=1];out+=' || key'+$lvl+' == '+it.util.toQuotedString($propertyKey)+' ';}}}}if($pPropertyKeys.length){var arr2=$pPropertyKeys;if(arr2){var $pProperty,$i=-1,l2=arr2.length-1;while($i<l2){$pProperty=arr2[$i+=1];out+=' || '+it.usePattern($pProperty)+'.test(key'+$lvl+') ';}}}if(it.opts.v5&&$pgPropertyKeys&&$pgPropertyKeys.length){var arr3=$pgPropertyKeys;if(arr3){var $pgProperty,$i=-1,l3=arr3.length-1;while($i<l3){$pgProperty=arr3[$i+=1];out+=' || '+it.usePattern($pgProperty)+'.test(key'+$lvl+') ';}}}out+=' ); if (isAdditional'+$lvl+') { ';}if($removeAdditional=='all'){out+=' delete '+$data+'[key'+$lvl+']; ';}else{var $currentErrorPath=it.errorPath;var $additionalProperty='\\' + key'+$lvl+' + \\'';if(it.opts._errorDataPathProperty){it.errorPath=it.util.getPathExpr(it.errorPath,'key'+$lvl,it.opts.jsonPointers);}if($noAdditional){if($removeAdditional){out+=' delete '+$data+'[key'+$lvl+']; ';}else{out+=' valid'+$it.level+' = false; ';var $currErrSchemaPath=$errSchemaPath;$errSchemaPath=it.errSchemaPath+'/additionalProperties';var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'additionalProperties')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: { additionalProperty: \\''+$additionalProperty+'\\' } ';if(it.opts.messages!==false){out+=' , message: \\'should NOT have additional properties\\' ';}if(it.opts.verbose){out+=' , schema: false , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}$errSchemaPath=$currErrSchemaPath;if($breakOnError){out+=' break; ';}}}else if($additionalIsSchema){if($removeAdditional=='failing'){out+=' var '+$errs+' = errors; ';var $wasComposite=it.compositeRule;it.compositeRule=$it.compositeRule=true;$it.schema=$aProperties;$it.schemaPath=it.schemaPath+'.additionalProperties';$it.errSchemaPath=it.errSchemaPath+'/additionalProperties';$it.errorPath=it.opts._errorDataPathProperty?it.errorPath:it.util.getPathExpr(it.errorPath,'key'+$lvl,it.opts.jsonPointers);var $passData=$data+'[key'+$lvl+']';$it.dataPathArr[$dataNxt]='key'+$lvl;var $code=it.validate($it);if(it.util.varOccurences($code,$nextData)<2){out+=' '+it.util.varReplace($code,$nextData,$passData)+' ';}else{out+=' var '+$nextData+' = '+$passData+'; '+$code+' ';}out+=' if (!valid'+$it.level+') { errors = '+$errs+'; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete '+$data+'[key'+$lvl+']; } ';it.compositeRule=$it.compositeRule=$wasComposite;}else{$it.schema=$aProperties;$it.schemaPath=it.schemaPath+'.additionalProperties';$it.errSchemaPath=it.errSchemaPath+'/additionalProperties';$it.errorPath=it.opts._errorDataPathProperty?it.errorPath:it.util.getPathExpr(it.errorPath,'key'+$lvl,it.opts.jsonPointers);var $passData=$data+'[key'+$lvl+']';$it.dataPathArr[$dataNxt]='key'+$lvl;var $code=it.validate($it);if(it.util.varOccurences($code,$nextData)<2){out+=' '+it.util.varReplace($code,$nextData,$passData)+' ';}else{out+=' var '+$nextData+' = '+$passData+'; '+$code+' ';}if($breakOnError){out+=' if (!valid'+$it.level+') break; ';}}}it.errorPath=$currentErrorPath;}if($someProperties){out+=' } ';}out+=' } ';if($breakOnError){out+=' if (valid'+$it.level+') { ';$closingBraces+='}';}}var $useDefaults=it.opts.useDefaults&&!it.compositeRule;if($schemaKeys.length){var arr4=$schemaKeys;if(arr4){var $propertyKey,i4=-1,l4=arr4.length-1;while(i4<l4){$propertyKey=arr4[i4+=1];var $sch=$schema[$propertyKey];if(it.util.schemaHasRules($sch,it.RULES.all)){var $prop=it.util.getProperty($propertyKey),$passData=$data+$prop,$hasDefault=$useDefaults&&$sch.default!==undefined;$it.schema=$sch;$it.schemaPath=$schemaPath+$prop;$it.errSchemaPath=$errSchemaPath+'/'+it.util.escapeFragment($propertyKey);$it.errorPath=it.util.getPath(it.errorPath,$propertyKey,it.opts.jsonPointers);$it.dataPathArr[$dataNxt]=it.util.toQuotedString($propertyKey);var $code=it.validate($it);if(it.util.varOccurences($code,$nextData)<2){$code=it.util.varReplace($code,$nextData,$passData);var $useData=$passData;}else{var $useData=$nextData;out+=' var '+$nextData+' = '+$passData+'; ';}if($hasDefault){out+=' '+$code+' ';}else{if($requiredHash&&$requiredHash[$propertyKey]){out+=' if ('+$useData+' === undefined) { valid'+$it.level+' = false; ';var $currentErrorPath=it.errorPath,$currErrSchemaPath=$errSchemaPath,$missingProperty=it.util.escapeQuotes($propertyKey);if(it.opts._errorDataPathProperty){it.errorPath=it.util.getPath($currentErrorPath,$propertyKey,it.opts.jsonPointers);}$errSchemaPath=it.errSchemaPath+'/required';var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'required')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: { missingProperty: \\''+$missingProperty+'\\' } ';if(it.opts.messages!==false){out+=' , message: \\'';if(it.opts._errorDataPathProperty){out+='is a required property';}else{out+='should have required property \\\\\\''+$missingProperty+'\\\\\\'';}out+='\\' ';}if(it.opts.verbose){out+=' , schema: validate.schema'+$schemaPath+' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}$errSchemaPath=$currErrSchemaPath;it.errorPath=$currentErrorPath;out+=' } else { ';}else{if($breakOnError){out+=' if ('+$useData+' === undefined) { valid'+$it.level+' = true; } else { ';}else{out+=' if ('+$useData+' !== undefined) { ';}}out+=' '+$code+' } ';}}if($breakOnError){out+=' if (valid'+$it.level+') { ';$closingBraces+='}';}}}}var arr5=$pPropertyKeys;if(arr5){var $pProperty,i5=-1,l5=arr5.length-1;while(i5<l5){$pProperty=arr5[i5+=1];var $sch=$pProperties[$pProperty];if(it.util.schemaHasRules($sch,it.RULES.all)){$it.schema=$sch;$it.schemaPath=it.schemaPath+'.patternProperties'+it.util.getProperty($pProperty);$it.errSchemaPath=it.errSchemaPath+'/patternProperties/'+it.util.escapeFragment($pProperty);out+=' for (var key'+$lvl+' in '+$data+') { if ('+it.usePattern($pProperty)+'.test(key'+$lvl+')) { ';$it.errorPath=it.util.getPathExpr(it.errorPath,'key'+$lvl,it.opts.jsonPointers);var $passData=$data+'[key'+$lvl+']';$it.dataPathArr[$dataNxt]='key'+$lvl;var $code=it.validate($it);if(it.util.varOccurences($code,$nextData)<2){out+=' '+it.util.varReplace($code,$nextData,$passData)+' ';}else{out+=' var '+$nextData+' = '+$passData+'; '+$code+' ';}if($breakOnError){out+=' if (!valid'+$it.level+') break; ';}out+=' } ';if($breakOnError){out+=' else valid'+$it.level+' = true; ';}out+=' } ';if($breakOnError){out+=' if (valid'+$it.level+') { ';$closingBraces+='}';}}}}if(it.opts.v5){var arr6=$pgPropertyKeys;if(arr6){var $pgProperty,i6=-1,l6=arr6.length-1;while(i6<l6){$pgProperty=arr6[i6+=1];var $pgSchema=$pgProperties[$pgProperty],$sch=$pgSchema.schema;if(it.util.schemaHasRules($sch,it.RULES.all)){$it.schema=$sch;$it.schemaPath=it.schemaPath+'.patternGroups'+it.util.getProperty($pgProperty)+'.schema';$it.errSchemaPath=it.errSchemaPath+'/patternGroups/'+it.util.escapeFragment($pgProperty)+'/schema';out+=' var pgPropCount'+$lvl+' = 0; for (var key'+$lvl+' in '+$data+') { if ('+it.usePattern($pgProperty)+'.test(key'+$lvl+')) { pgPropCount'+$lvl+'++; ';$it.errorPath=it.util.getPathExpr(it.errorPath,'key'+$lvl,it.opts.jsonPointers);var $passData=$data+'[key'+$lvl+']';$it.dataPathArr[$dataNxt]='key'+$lvl;var $code=it.validate($it);if(it.util.varOccurences($code,$nextData)<2){out+=' '+it.util.varReplace($code,$nextData,$passData)+' ';}else{out+=' var '+$nextData+' = '+$passData+'; '+$code+' ';}if($breakOnError){out+=' if (!valid'+$it.level+') break; ';}out+=' } ';if($breakOnError){out+=' else valid'+$it.level+' = true; ';}out+=' } ';if($breakOnError){out+=' if (valid'+$it.level+') { ';$closingBraces+='}';}var $pgMin=$pgSchema.minimum,$pgMax=$pgSchema.maximum;if($pgMin!==undefined||$pgMax!==undefined){out+=' var '+$valid+' = true; ';var $currErrSchemaPath=$errSchemaPath;if($pgMin!==undefined){var $limit=$pgMin,$reason='minimum',$moreOrLess='less';out+=' '+$valid+' = pgPropCount'+$lvl+' >= '+$pgMin+'; ';$errSchemaPath=it.errSchemaPath+'/patternGroups/minimum';out+=' if (!'+$valid+') { ';var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'patternGroups')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: { reason: \\''+$reason+'\\', limit: '+$limit+', pattern: \\''+it.util.escapeQuotes($pgProperty)+'\\' } ';if(it.opts.messages!==false){out+=' , message: \\'should NOT have '+$moreOrLess+' than '+$limit+' properties matching pattern \"'+it.util.escapeQuotes($pgProperty)+'\"\\' ';}if(it.opts.verbose){out+=' , schema: validate.schema'+$schemaPath+' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}out+=' } ';if($pgMax!==undefined){out+=' else ';}}if($pgMax!==undefined){var $limit=$pgMax,$reason='maximum',$moreOrLess='more';out+=' '+$valid+' = pgPropCount'+$lvl+' <= '+$pgMax+'; ';$errSchemaPath=it.errSchemaPath+'/patternGroups/maximum';out+=' if (!'+$valid+') { ';var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'patternGroups')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: { reason: \\''+$reason+'\\', limit: '+$limit+', pattern: \\''+it.util.escapeQuotes($pgProperty)+'\\' } ';if(it.opts.messages!==false){out+=' , message: \\'should NOT have '+$moreOrLess+' than '+$limit+' properties matching pattern \"'+it.util.escapeQuotes($pgProperty)+'\"\\' ';}if(it.opts.verbose){out+=' , schema: validate.schema'+$schemaPath+' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}out+=' } ';}$errSchemaPath=$currErrSchemaPath;if($breakOnError){out+=' if ('+$valid+') { ';$closingBraces+='}';}}}}}}if($breakOnError){out+=' '+$closingBraces+' if ('+$errs+' == errors) {';}out=it.util.cleanUpCode(out);return out;};/***/},/* 41 */ /***/function(module,exports){'use strict';module.exports=function generate_required(it,$keyword){var out=' ';var $lvl=it.level;var $dataLvl=it.dataLevel;var $schema=it.schema[$keyword];var $schemaPath=it.schemaPath+'.'+$keyword;var $errSchemaPath=it.errSchemaPath+'/'+$keyword;var $breakOnError=!it.opts.allErrors;var $errorKeyword;var $data='data'+($dataLvl||'');var $valid='valid'+$lvl;var $isData=it.opts.v5&&$schema.$data;var $schemaValue=$isData?it.util.getData($schema.$data,$dataLvl,it.dataPathArr):$schema;if($isData){out+=' var schema'+$lvl+' = '+$schemaValue+'; ';$schemaValue='schema'+$lvl;}if(!$isData){if($schema.length<it.opts.loopRequired&&it.schema.properties&&Object.keys(it.schema.properties).length){var $required=[];var arr1=$schema;if(arr1){var $property,i1=-1,l1=arr1.length-1;while(i1<l1){$property=arr1[i1+=1];var $propertySch=it.schema.properties[$property];if(!($propertySch&&it.util.schemaHasRules($propertySch,it.RULES.all))){$required[$required.length]=$property;}}}}else{var $required=$schema;}}if($isData||$required.length){var $currentErrorPath=it.errorPath,$loopRequired=$isData||$required.length>=it.opts.loopRequired;if($breakOnError){out+=' var missing'+$lvl+'; ';if($loopRequired){if(!$isData){out+=' var schema'+$lvl+' = validate.schema'+$schemaPath+'; ';}var $i='i'+$lvl,$propertyPath='schema'+$lvl+'['+$i+']',$missingProperty='\\' + '+$propertyPath+' + \\'';if(it.opts._errorDataPathProperty){it.errorPath=it.util.getPathExpr($currentErrorPath,$propertyPath,it.opts.jsonPointers);}out+=' var '+$valid+' = true; ';if($isData){out+=' if (schema'+$lvl+' === undefined) '+$valid+' = true; else if (!Array.isArray(schema'+$lvl+')) '+$valid+' = false; else {';}out+=' for (var '+$i+' = 0; '+$i+' < schema'+$lvl+'.length; '+$i+'++) { '+$valid+' = '+$data+'[schema'+$lvl+'['+$i+']] !== undefined; if (!'+$valid+') break; } ';if($isData){out+=' } ';}out+=' if (!'+$valid+') { ';var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'required')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: { missingProperty: \\''+$missingProperty+'\\' } ';if(it.opts.messages!==false){out+=' , message: \\'';if(it.opts._errorDataPathProperty){out+='is a required property';}else{out+='should have required property \\\\\\''+$missingProperty+'\\\\\\'';}out+='\\' ';}if(it.opts.verbose){out+=' , schema: validate.schema'+$schemaPath+' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}out+=' } else { ';}else{out+=' if ( ';var arr2=$required;if(arr2){var _$property,$i=-1,l2=arr2.length-1;while($i<l2){_$property=arr2[$i+=1];if($i){out+=' || ';}var $prop=it.util.getProperty(_$property);out+=' ( '+$data+$prop+' === undefined && (missing'+$lvl+' = '+it.util.toQuotedString(it.opts.jsonPointers?_$property:$prop)+') ) ';}}out+=') { ';var $propertyPath='missing'+$lvl,$missingProperty='\\' + '+$propertyPath+' + \\'';if(it.opts._errorDataPathProperty){it.errorPath=it.opts.jsonPointers?it.util.getPathExpr($currentErrorPath,$propertyPath,true):$currentErrorPath+' + '+$propertyPath;}var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'required')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: { missingProperty: \\''+$missingProperty+'\\' } ';if(it.opts.messages!==false){out+=' , message: \\'';if(it.opts._errorDataPathProperty){out+='is a required property';}else{out+='should have required property \\\\\\''+$missingProperty+'\\\\\\'';}out+='\\' ';}if(it.opts.verbose){out+=' , schema: validate.schema'+$schemaPath+' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}out+=' } else { ';}}else{if($loopRequired){if(!$isData){out+=' var schema'+$lvl+' = validate.schema'+$schemaPath+'; ';}var $i='i'+$lvl,$propertyPath='schema'+$lvl+'['+$i+']',$missingProperty='\\' + '+$propertyPath+' + \\'';if(it.opts._errorDataPathProperty){it.errorPath=it.util.getPathExpr($currentErrorPath,$propertyPath,it.opts.jsonPointers);}if($isData){out+=' if (schema'+$lvl+' && !Array.isArray(schema'+$lvl+')) { var err = ';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'required')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: { missingProperty: \\''+$missingProperty+'\\' } ';if(it.opts.messages!==false){out+=' , message: \\'';if(it.opts._errorDataPathProperty){out+='is a required property';}else{out+='should have required property \\\\\\''+$missingProperty+'\\\\\\'';}out+='\\' ';}if(it.opts.verbose){out+=' , schema: validate.schema'+$schemaPath+' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}out+='; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (schema'+$lvl+' !== undefined) { ';}out+=' for (var '+$i+' = 0; '+$i+' < schema'+$lvl+'.length; '+$i+'++) { if ('+$data+'[schema'+$lvl+'['+$i+']] === undefined) { var err = ';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'required')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: { missingProperty: \\''+$missingProperty+'\\' } ';if(it.opts.messages!==false){out+=' , message: \\'';if(it.opts._errorDataPathProperty){out+='is a required property';}else{out+='should have required property \\\\\\''+$missingProperty+'\\\\\\'';}out+='\\' ';}if(it.opts.verbose){out+=' , schema: validate.schema'+$schemaPath+' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}out+='; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } ';if($isData){out+=' } ';}}else{var arr3=$required;if(arr3){var $property,$i=-1,l3=arr3.length-1;while($i<l3){$property=arr3[$i+=1];var $prop=it.util.getProperty($property),$missingProperty=it.util.escapeQuotes($property);if(it.opts._errorDataPathProperty){it.errorPath=it.util.getPath($currentErrorPath,$property,it.opts.jsonPointers);}out+=' if ('+$data+$prop+' === undefined) { var err = ';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'required')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: { missingProperty: \\''+$missingProperty+'\\' } ';if(it.opts.messages!==false){out+=' , message: \\'';if(it.opts._errorDataPathProperty){out+='is a required property';}else{out+='should have required property \\\\\\''+$missingProperty+'\\\\\\'';}out+='\\' ';}if(it.opts.verbose){out+=' , schema: validate.schema'+$schemaPath+' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}out+='; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';}}}}it.errorPath=$currentErrorPath;}else if($breakOnError){out+=' if (true) {';}return out;};/***/},/* 42 */ /***/function(module,exports){'use strict';module.exports=function generate_uniqueItems(it,$keyword){var out=' ';var $lvl=it.level;var $dataLvl=it.dataLevel;var $schema=it.schema[$keyword];var $schemaPath=it.schemaPath+'.'+$keyword;var $errSchemaPath=it.errSchemaPath+'/'+$keyword;var $breakOnError=!it.opts.allErrors;var $errorKeyword;var $data='data'+($dataLvl||'');var $valid='valid'+$lvl;var $isData=it.opts.v5&&$schema.$data;var $schemaValue=$isData?it.util.getData($schema.$data,$dataLvl,it.dataPathArr):$schema;if($isData){out+=' var schema'+$lvl+' = '+$schemaValue+'; ';$schemaValue='schema'+$lvl;}if(($schema||$isData)&&it.opts.uniqueItems!==false){if($isData){out+=' var '+$valid+'; if ('+$schemaValue+' === false || '+$schemaValue+' === undefined) '+$valid+' = true; else if (typeof '+$schemaValue+' != \\'boolean\\') '+$valid+' = false; else { ';}out+=' var '+$valid+' = true; if ('+$data+'.length > 1) { var i = '+$data+'.length, j; outer: for (;i--;) { for (j = i; j--;) { if (equal('+$data+'[i], '+$data+'[j])) { '+$valid+' = false; break outer; } } } } ';if($isData){out+=' } ';}out+=' if (!'+$valid+') { ';var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'uniqueItems')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: { i: i, j: j } ';if(it.opts.messages!==false){out+=' , message: \\'should NOT have duplicate items (items ## \\' + j + \\' and \\' + i + \\' are identical)\\' ';}if(it.opts.verbose){out+=' , schema: ';if($isData){out+='validate.schema'+$schemaPath;}else{out+=''+$schema;}out+=' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}out+=' } ';if($breakOnError){out+=' else { ';}}else{if($breakOnError){out+=' if (true) { ';}}return out;};/***/},/* 43 */ /***/function(module,exports,__webpack_require__){'use strict';var META_SCHEMA_ID='https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/json-schema-v5.json';module.exports={enable:enableV5,META_SCHEMA_ID:META_SCHEMA_ID};function enableV5(ajv){var inlineFunctions={'switch':__webpack_require__(44),'constant':__webpack_require__(45),'_formatLimit':__webpack_require__(46),'patternRequired':__webpack_require__(47)};if(ajv._opts.meta!==false){var metaSchema=__webpack_require__(48);ajv.addMetaSchema(metaSchema,META_SCHEMA_ID);}_addKeyword('constant');ajv.addKeyword('contains',{type:'array',macro:containsMacro});_addKeyword('formatMaximum','string',inlineFunctions._formatLimit);_addKeyword('formatMinimum','string',inlineFunctions._formatLimit);ajv.addKeyword('exclusiveFormatMaximum');ajv.addKeyword('exclusiveFormatMinimum');ajv.addKeyword('patternGroups');// implemented in properties.jst\n_addKeyword('patternRequired','object');_addKeyword('switch');function _addKeyword(keyword,types,inlineFunc){var definition={inline:inlineFunc||inlineFunctions[keyword],statements:true,errors:'full'};if(types)definition.type=types;ajv.addKeyword(keyword,definition);}}function containsMacro(schema){return{not:{items:{not:schema}}};}/***/},/* 44 */ /***/function(module,exports){'use strict';module.exports=function generate_switch(it,$keyword){var out=' ';var $lvl=it.level;var $dataLvl=it.dataLevel;var $schema=it.schema[$keyword];var $schemaPath=it.schemaPath+'.'+$keyword;var $errSchemaPath=it.errSchemaPath+'/'+$keyword;var $breakOnError=!it.opts.allErrors;var $errorKeyword;var $data='data'+($dataLvl||'');var $valid='valid'+$lvl;var $errs='errs__'+$lvl;var $it=it.util.copy(it);var $closingBraces='';$it.level++;var $ifPassed='ifPassed'+it.level,$shouldContinue;out+='var '+$ifPassed+';';var arr1=$schema;if(arr1){var $sch,$caseIndex=-1,l1=arr1.length-1;while($caseIndex<l1){$sch=arr1[$caseIndex+=1];if($caseIndex&&!$shouldContinue){out+=' if (!'+$ifPassed+') { ';$closingBraces+='}';}if($sch.if&&it.util.schemaHasRules($sch.if,it.RULES.all)){out+=' var '+$errs+' = errors; ';var $wasComposite=it.compositeRule;it.compositeRule=$it.compositeRule=true;$it.createErrors=false;$it.schema=$sch.if;$it.schemaPath=$schemaPath+'['+$caseIndex+'].if';$it.errSchemaPath=$errSchemaPath+'/'+$caseIndex+'/if';out+=' '+it.validate($it)+' ';$it.createErrors=true;it.compositeRule=$it.compositeRule=$wasComposite;out+=' '+$ifPassed+' = valid'+$it.level+'; if ('+$ifPassed+') { ';if(typeof $sch.then=='boolean'){if($sch.then===false){var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'switch')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: { caseIndex: '+$caseIndex+' } ';if(it.opts.messages!==false){out+=' , message: \\'should pass \"switch\" keyword validation\\' ';}if(it.opts.verbose){out+=' , schema: validate.schema'+$schemaPath+' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}}out+=' var valid'+$it.level+' = '+$sch.then+'; ';}else{$it.schema=$sch.then;$it.schemaPath=$schemaPath+'['+$caseIndex+'].then';$it.errSchemaPath=$errSchemaPath+'/'+$caseIndex+'/then';out+=' '+it.validate($it)+' ';}out+=' } else { errors = '+$errs+'; if (vErrors !== null) { if ('+$errs+') vErrors.length = '+$errs+'; else vErrors = null; } } ';}else{out+=' '+$ifPassed+' = true; ';if(typeof $sch.then=='boolean'){if($sch.then===false){var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'switch')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: { caseIndex: '+$caseIndex+' } ';if(it.opts.messages!==false){out+=' , message: \\'should pass \"switch\" keyword validation\\' ';}if(it.opts.verbose){out+=' , schema: validate.schema'+$schemaPath+' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}}out+=' var valid'+$it.level+' = '+$sch.then+'; ';}else{$it.schema=$sch.then;$it.schemaPath=$schemaPath+'['+$caseIndex+'].then';$it.errSchemaPath=$errSchemaPath+'/'+$caseIndex+'/then';out+=' '+it.validate($it)+' ';}}$shouldContinue=$sch.continue;}}out+=''+$closingBraces+'var '+$valid+' = valid'+$it.level+'; ';out=it.util.cleanUpCode(out);return out;};/***/},/* 45 */ /***/function(module,exports){'use strict';module.exports=function generate_constant(it,$keyword){var out=' ';var $lvl=it.level;var $dataLvl=it.dataLevel;var $schema=it.schema[$keyword];var $schemaPath=it.schemaPath+'.'+$keyword;var $errSchemaPath=it.errSchemaPath+'/'+$keyword;var $breakOnError=!it.opts.allErrors;var $errorKeyword;var $data='data'+($dataLvl||'');var $valid='valid'+$lvl;var $isData=it.opts.v5&&$schema.$data;var $schemaValue=$isData?it.util.getData($schema.$data,$dataLvl,it.dataPathArr):$schema;if($isData){out+=' var schema'+$lvl+' = '+$schemaValue+'; ';$schemaValue='schema'+$lvl;}if(!$isData){out+=' var schema'+$lvl+' = validate.schema'+$schemaPath+';';}out+='var '+$valid+' = equal('+$data+', schema'+$lvl+'); if (!'+$valid+') { ';var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'constant')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: {} ';if(it.opts.messages!==false){out+=' , message: \\'should be equal to constant\\' ';}if(it.opts.verbose){out+=' , schema: validate.schema'+$schemaPath+' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}out+=' }';return out;};/***/},/* 46 */ /***/function(module,exports){'use strict';module.exports=function generate__formatLimit(it,$keyword){var out=' ';var $lvl=it.level;var $dataLvl=it.dataLevel;var $schema=it.schema[$keyword];var $schemaPath=it.schemaPath+'.'+$keyword;var $errSchemaPath=it.errSchemaPath+'/'+$keyword;var $breakOnError=!it.opts.allErrors;var $errorKeyword;var $data='data'+($dataLvl||'');var $valid='valid'+$lvl;out+='var '+$valid+' = undefined;';if(it.opts.format===false){out+=' '+$valid+' = true; ';return out;}var $schemaFormat=it.schema.format,$isDataFormat=it.opts.v5&&$schemaFormat.$data,$closingBraces='';if($isDataFormat){var $schemaValueFormat=it.util.getData($schemaFormat.$data,$dataLvl,it.dataPathArr),$format='format'+$lvl,$compare='compare'+$lvl;out+=' var '+$format+' = formats['+$schemaValueFormat+'] , '+$compare+' = '+$format+' && '+$format+'.compare;';}else{var $format=it.formats[$schemaFormat];if(!($format&&$format.compare)){out+=' '+$valid+' = true; ';return out;}var $compare='formats'+it.util.getProperty($schemaFormat)+'.compare';}var $isMax=$keyword=='formatMaximum',$exclusiveKeyword='exclusiveFormat'+($isMax?'Maximum':'Minimum'),$schemaExcl=it.schema[$exclusiveKeyword],$isDataExcl=it.opts.v5&&$schemaExcl&&$schemaExcl.$data,$op=$isMax?'<':'>',$result='result'+$lvl;var $isData=it.opts.v5&&$schema.$data;var $schemaValue=$isData?it.util.getData($schema.$data,$dataLvl,it.dataPathArr):$schema;if($isData){out+=' var schema'+$lvl+' = '+$schemaValue+'; ';$schemaValue='schema'+$lvl;}if($isDataExcl){var $schemaValueExcl=it.util.getData($schemaExcl.$data,$dataLvl,it.dataPathArr),$exclusive='exclusive'+$lvl,$opExpr='op'+$lvl,$opStr='\\' + '+$opExpr+' + \\'';out+=' var schemaExcl'+$lvl+' = '+$schemaValueExcl+'; ';$schemaValueExcl='schemaExcl'+$lvl;out+=' if (typeof '+$schemaValueExcl+' != \\'boolean\\' && '+$schemaValueExcl+' !== undefined) { '+$valid+' = false; ';var $errorKeyword=$exclusiveKeyword;var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'_exclusiveFormatLimit')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: {} ';if(it.opts.messages!==false){out+=' , message: \\''+$exclusiveKeyword+' should be boolean\\' ';}if(it.opts.verbose){out+=' , schema: validate.schema'+$schemaPath+' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}out+=' } ';if($breakOnError){$closingBraces+='}';out+=' else { ';}if($isData){out+=' if ('+$schemaValue+' === undefined) '+$valid+' = true; else if (typeof '+$schemaValue+' != \\'string\\') '+$valid+' = false; else { ';$closingBraces+='}';}if($isDataFormat){out+=' if (!'+$compare+') '+$valid+' = true; else { ';$closingBraces+='}';}out+=' var '+$result+' = '+$compare+'('+$data+', ';if($isData){out+=''+$schemaValue;}else{out+=''+it.util.toQuotedString($schema);}out+=' ); if ('+$result+' === undefined) '+$valid+' = false; var exclusive'+$lvl+' = '+$schemaValueExcl+' === true; if ('+$valid+' === undefined) { '+$valid+' = exclusive'+$lvl+' ? '+$result+' '+$op+' 0 : '+$result+' '+$op+'= 0; } if (!'+$valid+') var op'+$lvl+' = exclusive'+$lvl+' ? \\''+$op+'\\' : \\''+$op+'=\\';';}else{var $exclusive=$schemaExcl===true,$opStr=$op;if(!$exclusive)$opStr+='=';var $opExpr='\\''+$opStr+'\\'';if($isData){out+=' if ('+$schemaValue+' === undefined) '+$valid+' = true; else if (typeof '+$schemaValue+' != \\'string\\') '+$valid+' = false; else { ';$closingBraces+='}';}if($isDataFormat){out+=' if (!'+$compare+') '+$valid+' = true; else { ';$closingBraces+='}';}out+=' var '+$result+' = '+$compare+'('+$data+', ';if($isData){out+=''+$schemaValue;}else{out+=''+it.util.toQuotedString($schema);}out+=' ); if ('+$result+' === undefined) '+$valid+' = false; if ('+$valid+' === undefined) '+$valid+' = '+$result+' '+$op;if(!$exclusive){out+='=';}out+=' 0;';}out+=''+$closingBraces+'if (!'+$valid+') { ';var $errorKeyword=$keyword;var $$outStack=$$outStack||[];$$outStack.push(out);out='';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'_formatLimit')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: { limit: ';if($isData){out+=''+$schemaValue;}else{out+=''+it.util.toQuotedString($schema);}out+=' } ';if(it.opts.messages!==false){out+=' , message: \\'should be '+$opStr+' \"';if($isData){out+='\\' + '+$schemaValue+' + \\'';}else{out+=''+it.util.escapeQuotes($schema);}out+='\"\\' ';}if(it.opts.verbose){out+=' , schema: ';if($isData){out+='validate.schema'+$schemaPath;}else{out+=''+it.util.toQuotedString($schema);}out+=' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}var __err=out;out=$$outStack.pop();if(!it.compositeRule&&$breakOnError){/* istanbul ignore if */if(it.async){out+=' throw new ValidationError(['+__err+']); ';}else{out+=' validate.errors = ['+__err+']; return false; ';}}else{out+=' var err = '+__err+'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';}out+='}';return out;};/***/},/* 47 */ /***/function(module,exports){'use strict';module.exports=function generate_patternRequired(it,$keyword){var out=' ';var $lvl=it.level;var $dataLvl=it.dataLevel;var $schema=it.schema[$keyword];var $schemaPath=it.schemaPath+'.'+$keyword;var $errSchemaPath=it.errSchemaPath+'/'+$keyword;var $breakOnError=!it.opts.allErrors;var $errorKeyword;var $data='data'+($dataLvl||'');var $valid='valid'+$lvl;var $key='key'+$lvl,$matched='patternMatched'+$lvl,$closingBraces='';out+='var '+$valid+' = true;';var arr1=$schema;if(arr1){var $pProperty,i1=-1,l1=arr1.length-1;while(i1<l1){$pProperty=arr1[i1+=1];out+=' var '+$matched+' = false; for (var '+$key+' in '+$data+') { '+$matched+' = '+it.usePattern($pProperty)+'.test('+$key+'); if ('+$matched+') break; } ';var $missingPattern=it.util.escapeQuotes($pProperty);out+=' if (!'+$matched+') { '+$valid+' = false; var err = ';/* istanbul ignore else */if(it.createErrors!==false){out+=' { keyword: \\''+($errorKeyword||'patternRequired')+'\\' , dataPath: (dataPath || \\'\\') + '+it.errorPath+' , schemaPath: \"'+$errSchemaPath+'\" , params: { missingPattern: \\''+$missingPattern+'\\' } ';if(it.opts.messages!==false){out+=' , message: \\'should have property matching pattern \\\\\\''+$missingPattern+'\\\\\\'\\' ';}if(it.opts.verbose){out+=' , schema: validate.schema'+$schemaPath+' , parentSchema: validate.schema'+it.schemaPath+' , data: '+$data+' ';}out+=' } ';}else{out+=' {} ';}out+='; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';if($breakOnError){$closingBraces+='}';out+=' else { ';}}}out+=''+$closingBraces;return out;};/***/},/* 48 */ /***/function(module,exports){module.exports={\"id\":\"https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/json-schema-v5.json#\",\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"description\":\"Core schema meta-schema (v5 proposals)\",\"definitions\":{\"schemaArray\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#\"}},\"positiveInteger\":{\"type\":\"integer\",\"minimum\":0},\"positiveIntegerDefault0\":{\"allOf\":[{\"$ref\":\"#/definitions/positiveInteger\"},{\"default\":0}]},\"simpleTypes\":{\"enum\":[\"array\",\"boolean\",\"integer\",\"null\",\"number\",\"object\",\"string\"]},\"stringArray\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"minItems\":1,\"uniqueItems\":true},\"$data\":{\"type\":\"object\",\"required\":[\"$data\"],\"properties\":{\"$data\":{\"type\":\"string\",\"format\":\"relative-json-pointer\"}},\"additionalProperties\":false}},\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"format\":\"uri\"},\"$schema\":{\"type\":\"string\",\"format\":\"uri\"},\"title\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"default\":{},\"multipleOf\":{\"anyOf\":[{\"type\":\"number\",\"minimum\":0,\"exclusiveMinimum\":true},{\"$ref\":\"#/definitions/$data\"}]},\"maximum\":{\"anyOf\":[{\"type\":\"number\"},{\"$ref\":\"#/definitions/$data\"}]},\"exclusiveMaximum\":{\"anyOf\":[{\"type\":\"boolean\",\"default\":false},{\"$ref\":\"#/definitions/$data\"}]},\"minimum\":{\"anyOf\":[{\"type\":\"number\"},{\"$ref\":\"#/definitions/$data\"}]},\"exclusiveMinimum\":{\"anyOf\":[{\"type\":\"boolean\",\"default\":false},{\"$ref\":\"#/definitions/$data\"}]},\"maxLength\":{\"anyOf\":[{\"$ref\":\"#/definitions/positiveInteger\"},{\"$ref\":\"#/definitions/$data\"}]},\"minLength\":{\"anyOf\":[{\"$ref\":\"#/definitions/positiveIntegerDefault0\"},{\"$ref\":\"#/definitions/$data\"}]},\"pattern\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"regex\"},{\"$ref\":\"#/definitions/$data\"}]},\"additionalItems\":{\"anyOf\":[{\"type\":\"boolean\"},{\"$ref\":\"#\"},{\"$ref\":\"#/definitions/$data\"}],\"default\":{}},\"items\":{\"anyOf\":[{\"$ref\":\"#\"},{\"$ref\":\"#/definitions/schemaArray\"}],\"default\":{}},\"maxItems\":{\"anyOf\":[{\"$ref\":\"#/definitions/positiveInteger\"},{\"$ref\":\"#/definitions/$data\"}]},\"minItems\":{\"anyOf\":[{\"$ref\":\"#/definitions/positiveIntegerDefault0\"},{\"$ref\":\"#/definitions/$data\"}]},\"uniqueItems\":{\"anyOf\":[{\"type\":\"boolean\",\"default\":false},{\"$ref\":\"#/definitions/$data\"}]},\"maxProperties\":{\"anyOf\":[{\"$ref\":\"#/definitions/positiveInteger\"},{\"$ref\":\"#/definitions/$data\"}]},\"minProperties\":{\"anyOf\":[{\"$ref\":\"#/definitions/positiveIntegerDefault0\"},{\"$ref\":\"#/definitions/$data\"}]},\"required\":{\"anyOf\":[{\"$ref\":\"#/definitions/stringArray\"},{\"$ref\":\"#/definitions/$data\"}]},\"additionalProperties\":{\"anyOf\":[{\"type\":\"boolean\"},{\"$ref\":\"#\"},{\"$ref\":\"#/definitions/$data\"}],\"default\":{}},\"definitions\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"properties\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"patternProperties\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"dependencies\":{\"type\":\"object\",\"additionalProperties\":{\"anyOf\":[{\"$ref\":\"#\"},{\"$ref\":\"#/definitions/stringArray\"}]}},\"enum\":{\"anyOf\":[{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true},{\"$ref\":\"#/definitions/$data\"}]},\"type\":{\"anyOf\":[{\"$ref\":\"#/definitions/simpleTypes\"},{\"type\":\"array\",\"items\":{\"$ref\":\"#/definitions/simpleTypes\"},\"minItems\":1,\"uniqueItems\":true}]},\"allOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"anyOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"oneOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"not\":{\"$ref\":\"#\"},\"format\":{\"anyOf\":[{\"type\":\"string\"},{\"$ref\":\"#/definitions/$data\"}]},\"formatMaximum\":{\"anyOf\":[{\"type\":\"string\"},{\"$ref\":\"#/definitions/$data\"}]},\"formatMinimum\":{\"anyOf\":[{\"type\":\"string\"},{\"$ref\":\"#/definitions/$data\"}]},\"exclusiveFormatMaximum\":{\"anyOf\":[{\"type\":\"boolean\",\"default\":false},{\"$ref\":\"#/definitions/$data\"}]},\"exclusiveFormatMinimum\":{\"anyOf\":[{\"type\":\"boolean\",\"default\":false},{\"$ref\":\"#/definitions/$data\"}]},\"constant\":{\"anyOf\":[{},{\"$ref\":\"#/definitions/$data\"}]},\"contains\":{\"$ref\":\"#\"},\"patternGroups\":{\"type\":\"object\",\"additionalProperties\":{\"type\":\"object\",\"required\":[\"schema\"],\"properties\":{\"maximum\":{\"anyOf\":[{\"$ref\":\"#/definitions/positiveInteger\"},{\"$ref\":\"#/definitions/$data\"}]},\"minimum\":{\"anyOf\":[{\"$ref\":\"#/definitions/positiveIntegerDefault0\"},{\"$ref\":\"#/definitions/$data\"}]},\"schema\":{\"$ref\":\"#\"}},\"additionalProperties\":false},\"default\":{}},\"switch\":{\"type\":\"array\",\"items\":{\"required\":[\"then\"],\"properties\":{\"if\":{\"$ref\":\"#\"},\"then\":{\"anyOf\":[{\"type\":\"boolean\"},{\"$ref\":\"#\"}]},\"continue\":{\"type\":\"boolean\"}},\"additionalProperties\":false,\"dependencies\":{\"continue\":[\"if\"]}}}},\"dependencies\":{\"exclusiveMaximum\":[\"maximum\"],\"exclusiveMinimum\":[\"minimum\"],\"formatMaximum\":[\"format\"],\"formatMinimum\":[\"format\"],\"exclusiveFormatMaximum\":[\"formatMaximum\"],\"exclusiveFormatMinimum\":[\"formatMinimum\"]},\"default\":{}};/***/},/* 49 */ /***/function(module,exports){'use strict';var IDENTIFIER=/^[a-z_$][a-z0-9_$]*$/i;/**\r\n\t * Define custom keyword\r\n\t * @this Ajv\r\n\t * @param {String} keyword custom keyword, should be a valid identifier, should be different from all standard, custom and macro keywords.\r\n\t * @param {Object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`.\r\n\t */module.exports=function addKeyword(keyword,definition){/* eslint no-shadow: 0 */var self=this;if(this.RULES.keywords[keyword])throw new Error('Keyword '+keyword+' is already defined');if(!IDENTIFIER.test(keyword))throw new Error('Keyword '+keyword+' is not a valid identifier');if(definition){var dataType=definition.type;if(Array.isArray(dataType)){var i,len=dataType.length;for(i=0;i<len;i++)checkDataType(dataType[i]);for(i=0;i<len;i++)_addRule(keyword,dataType[i],definition);}else{if(dataType)checkDataType(dataType);_addRule(keyword,dataType,definition);}}this.RULES.keywords[keyword]=true;this.RULES.all[keyword]=true;function _addRule(keyword,dataType,definition){var ruleGroup;for(var i=0;i<self.RULES.length;i++){var rg=self.RULES[i];if(rg.type==dataType){ruleGroup=rg;break;}}if(!ruleGroup){ruleGroup={type:dataType,rules:[]};self.RULES.push(ruleGroup);}var rule={keyword:keyword,definition:definition,custom:true};ruleGroup.rules.push(rule);}function checkDataType(dataType){if(!self.RULES.types[dataType])throw new Error('Unknown type '+dataType);}};/***/},/* 50 */ /***/function(module,exports){module.exports={\"id\":\"http://json-schema.org/draft-04/schema#\",\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"description\":\"Core schema meta-schema\",\"definitions\":{\"schemaArray\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#\"}},\"positiveInteger\":{\"type\":\"integer\",\"minimum\":0},\"positiveIntegerDefault0\":{\"allOf\":[{\"$ref\":\"#/definitions/positiveInteger\"},{\"default\":0}]},\"simpleTypes\":{\"enum\":[\"array\",\"boolean\",\"integer\",\"null\",\"number\",\"object\",\"string\"]},\"stringArray\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"minItems\":1,\"uniqueItems\":true}},\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"format\":\"uri\"},\"$schema\":{\"type\":\"string\",\"format\":\"uri\"},\"title\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"default\":{},\"multipleOf\":{\"type\":\"number\",\"minimum\":0,\"exclusiveMinimum\":true},\"maximum\":{\"type\":\"number\"},\"exclusiveMaximum\":{\"type\":\"boolean\",\"default\":false},\"minimum\":{\"type\":\"number\"},\"exclusiveMinimum\":{\"type\":\"boolean\",\"default\":false},\"maxLength\":{\"$ref\":\"#/definitions/positiveInteger\"},\"minLength\":{\"$ref\":\"#/definitions/positiveIntegerDefault0\"},\"pattern\":{\"type\":\"string\",\"format\":\"regex\"},\"additionalItems\":{\"anyOf\":[{\"type\":\"boolean\"},{\"$ref\":\"#\"}],\"default\":{}},\"items\":{\"anyOf\":[{\"$ref\":\"#\"},{\"$ref\":\"#/definitions/schemaArray\"}],\"default\":{}},\"maxItems\":{\"$ref\":\"#/definitions/positiveInteger\"},\"minItems\":{\"$ref\":\"#/definitions/positiveIntegerDefault0\"},\"uniqueItems\":{\"type\":\"boolean\",\"default\":false},\"maxProperties\":{\"$ref\":\"#/definitions/positiveInteger\"},\"minProperties\":{\"$ref\":\"#/definitions/positiveIntegerDefault0\"},\"required\":{\"$ref\":\"#/definitions/stringArray\"},\"additionalProperties\":{\"anyOf\":[{\"type\":\"boolean\"},{\"$ref\":\"#\"}],\"default\":{}},\"definitions\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"properties\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"patternProperties\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"dependencies\":{\"type\":\"object\",\"additionalProperties\":{\"anyOf\":[{\"$ref\":\"#\"},{\"$ref\":\"#/definitions/stringArray\"}]}},\"enum\":{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true},\"type\":{\"anyOf\":[{\"$ref\":\"#/definitions/simpleTypes\"},{\"type\":\"array\",\"items\":{\"$ref\":\"#/definitions/simpleTypes\"},\"minItems\":1,\"uniqueItems\":true}]},\"allOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"anyOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"oneOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"not\":{\"$ref\":\"#\"}},\"dependencies\":{\"exclusiveMaximum\":[\"maximum\"],\"exclusiveMinimum\":[\"minimum\"]},\"default\":{}};/***/},/* 51 */ /***/function(module,exports,__webpack_require__){'use strict';var Highlighter=__webpack_require__(52);var History=__webpack_require__(53);var SearchBox=__webpack_require__(56);var ContextMenu=__webpack_require__(57);var Node=__webpack_require__(58);var ModeSwitcher=__webpack_require__(61);var util=__webpack_require__(54);// create a mixin with the functions for tree mode\nvar treemode={};/**\r\n\t * Create a tree editor\r\n\t * @param {Element} container Container element\r\n\t * @param {Object} [options] Object with options. available options:\r\n\t * {String} mode Editor mode. Available values:\r\n\t * 'tree' (default), 'view',\r\n\t * and 'form'.\r\n\t * {Boolean} search Enable search box.\r\n\t * True by default\r\n\t * {Boolean} history Enable history (undo/redo).\r\n\t * True by default\r\n\t * {function} onChange Callback method, triggered\r\n\t * on change of contents\r\n\t * {String} name Field name for the root node.\r\n\t * {boolean} escapeUnicode If true, unicode\r\n\t * characters are escaped.\r\n\t * false by default.\r\n\t * {Object} schema A JSON Schema for validation\r\n\t * @private\r\n\t */treemode.create=function(container,options){if(!container){throw new Error('No container element provided.');}this.container=container;this.dom={};this.highlighter=new Highlighter();this.selection=undefined;// will hold the last input selection\nthis.multiselection={nodes:[]};this.validateSchema=null;// will be set in .setSchema(schema)\nthis.errorNodes=[];this.node=null;this.focusTarget=null;this._setOptions(options);if(this.options.history&&this.options.mode!=='view'){this.history=new History(this);}this._createFrame();this._createTable();};/**\r\n\t * Destroy the editor. Clean up DOM, event listeners, and web workers.\r\n\t */treemode.destroy=function(){if(this.frame&&this.container&&this.frame.parentNode==this.container){this.container.removeChild(this.frame);this.frame=null;}this.container=null;this.dom=null;this.clear();this.node=null;this.focusTarget=null;this.selection=null;this.multiselection=null;this.errorNodes=null;this.validateSchema=null;this._debouncedValidate=null;if(this.history){this.history.destroy();this.history=null;}if(this.searchBox){this.searchBox.destroy();this.searchBox=null;}if(this.modeSwitcher){this.modeSwitcher.destroy();this.modeSwitcher=null;}};/**\r\n\t * Initialize and set default options\r\n\t * @param {Object} [options] See description in constructor\r\n\t * @private\r\n\t */treemode._setOptions=function(options){this.options={search:true,history:true,mode:'tree',name:undefined,// field name of root node\nschema:null};// copy all options\nif(options){for(var prop in options){if(options.hasOwnProperty(prop)){this.options[prop]=options[prop];}}}// compile a JSON schema validator if a JSON schema is provided\nthis.setSchema(this.options.schema);// create a debounced validate function\nthis._debouncedValidate=util.debounce(this.validate.bind(this),this.DEBOUNCE_INTERVAL);};/**\r\n\t * Set JSON object in editor\r\n\t * @param {Object | undefined} json JSON data\r\n\t * @param {String} [name] Optional field name for the root node.\r\n\t * Can also be set using setName(name).\r\n\t */treemode.set=function(json,name){// adjust field name for root node\nif(name){// TODO: deprecated since version 2.2.0. Cleanup some day.\nconsole.warn('Second parameter \"name\" is deprecated. Use setName(name) instead.');this.options.name=name;}// verify if json is valid JSON, ignore when a function\nif(json instanceof Function||json===undefined){this.clear();}else{this.content.removeChild(this.table);// Take the table offline\n// replace the root node\nvar params={field:this.options.name,value:json};var node=new Node(this,params);this._setRoot(node);// validate JSON schema (if configured)\nthis.validate();// expand\nvar recurse=false;this.node.expand(recurse);this.content.appendChild(this.table);// Put the table online again\n}// TODO: maintain history, store last state and previous document\nif(this.history){this.history.clear();}// clear search\nif(this.searchBox){this.searchBox.clear();}};/**\r\n\t * Get JSON object from editor\r\n\t * @return {Object | undefined} json\r\n\t */treemode.get=function(){// remove focus from currently edited node\nif(this.focusTarget){var node=Node.getNodeFromTarget(this.focusTarget);if(node){node.blur();}}if(this.node){return this.node.getValue();}else{return undefined;}};/**\r\n\t * Get the text contents of the editor\r\n\t * @return {String} jsonText\r\n\t */treemode.getText=function(){return JSON.stringify(this.get());};/**\r\n\t * Set the text contents of the editor\r\n\t * @param {String} jsonText\r\n\t */treemode.setText=function(jsonText){this.set(util.parse(jsonText));};/**\r\n\t * Set a field name for the root node.\r\n\t * @param {String | undefined} name\r\n\t */treemode.setName=function(name){this.options.name=name;if(this.node){this.node.updateField(this.options.name);}};/**\r\n\t * Get the field name for the root node.\r\n\t * @return {String | undefined} name\r\n\t */treemode.getName=function(){return this.options.name;};/**\r\n\t * Set focus to the editor. Focus will be set to:\r\n\t * - the first editable field or value, or else\r\n\t * - to the expand button of the root node, or else\r\n\t * - to the context menu button of the root node, or else\r\n\t * - to the first button in the top menu\r\n\t */treemode.focus=function(){var input=this.content.querySelector('[contenteditable=true]');if(input){input.focus();}else if(this.node.dom.expand){this.node.dom.expand.focus();}else if(this.node.dom.menu){this.node.dom.menu.focus();}else{// focus to the first button in the menu\ninput=this.frame.querySelector('button');if(input){input.focus();}}};/**\r\n\t * Remove the root node from the editor\r\n\t */treemode.clear=function(){if(this.node){this.node.collapse();this.tbody.removeChild(this.node.getDom());delete this.node;}};/**\r\n\t * Set the root node for the json editor\r\n\t * @param {Node} node\r\n\t * @private\r\n\t */treemode._setRoot=function(node){this.clear();this.node=node;// append to the dom\nthis.tbody.appendChild(node.getDom());};/**\r\n\t * Search text in all nodes\r\n\t * The nodes will be expanded when the text is found one of its childs,\r\n\t * else it will be collapsed. Searches are case insensitive.\r\n\t * @param {String} text\r\n\t * @return {Object[]} results Array with nodes containing the search results\r\n\t * The result objects contains fields:\r\n\t * - {Node} node,\r\n\t * - {String} elem the dom element name where\r\n\t * the result is found ('field' or\r\n\t * 'value')\r\n\t */treemode.search=function(text){var results;if(this.node){this.content.removeChild(this.table);// Take the table offline\nresults=this.node.search(text);this.content.appendChild(this.table);// Put the table online again\n}else{results=[];}return results;};/**\r\n\t * Expand all nodes\r\n\t */treemode.expandAll=function(){if(this.node){this.content.removeChild(this.table);// Take the table offline\nthis.node.expand();this.content.appendChild(this.table);// Put the table online again\n}};/**\r\n\t * Collapse all nodes\r\n\t */treemode.collapseAll=function(){if(this.node){this.content.removeChild(this.table);// Take the table offline\nthis.node.collapse();this.content.appendChild(this.table);// Put the table online again\n}};/**\r\n\t * The method onChange is called whenever a field or value is changed, created,\r\n\t * deleted, duplicated, etc.\r\n\t * @param {String} action Change action. Available values: \"editField\",\r\n\t * \"editValue\", \"changeType\", \"appendNode\",\r\n\t * \"removeNode\", \"duplicateNode\", \"moveNode\", \"expand\",\r\n\t * \"collapse\".\r\n\t * @param {Object} params Object containing parameters describing the change.\r\n\t * The parameters in params depend on the action (for\r\n\t * example for \"editValue\" the Node, old value, and new\r\n\t * value are provided). params contains all information\r\n\t * needed to undo or redo the action.\r\n\t * @private\r\n\t */treemode._onAction=function(action,params){// add an action to the history\nif(this.history){this.history.add(action,params);}this._onChange();};/**\r\n\t * Handle a change:\r\n\t * - Validate JSON schema\r\n\t * - Send a callback to the onChange listener if provided\r\n\t * @private\r\n\t */treemode._onChange=function(){// validate JSON schema (if configured)\nthis._debouncedValidate();// trigger the onChange callback\nif(this.options.onChange){try{this.options.onChange();}catch(err){console.error('Error in onChange callback: ',err);}}};/**\r\n\t * Validate current JSON object against the configured JSON schema\r\n\t * Throws an exception when no JSON schema is configured\r\n\t */treemode.validate=function(){// clear all current errors\nif(this.errorNodes){this.errorNodes.forEach(function(node){node.setError(null);});}var root=this.node;if(!root){// TODO: this should be redundant but is needed on mode switch\nreturn;}// check for duplicate keys\nvar duplicateErrors=root.validate();// validate the JSON\nvar schemaErrors=[];if(this.validateSchema){var valid=this.validateSchema(root.getValue());if(!valid){// apply all new errors\nschemaErrors=this.validateSchema.errors.map(function(error){return util.improveSchemaError(error);}).map(function findNode(error){return{node:root.findNode(error.dataPath),error:error};}).filter(function hasNode(entry){return entry.node!=null;});}}// display the error in the nodes with a problem\nthis.errorNodes=duplicateErrors.concat(schemaErrors).reduce(function expandParents(all,entry){// expand parents, then merge such that parents come first and\n// original entries last\nreturn entry.node.findParents().map(function(parent){return{node:parent,child:entry.node,error:{message:parent.type==='object'?'Contains invalid properties'// object\n:'Contains invalid items'// array\n}};}).concat(all,[entry]);},[])// TODO: dedupe the parent nodes\n.map(function setError(entry){entry.node.setError(entry.error,entry.child);return entry.node;});};/**\r\n\t * Refresh the rendered contents\r\n\t */treemode.refresh=function(){if(this.node){this.node.updateDom({recurse:true});}};/**\r\n\t * Start autoscrolling when given mouse position is above the top of the\r\n\t * editor contents, or below the bottom.\r\n\t * @param {Number} mouseY Absolute mouse position in pixels\r\n\t */treemode.startAutoScroll=function(mouseY){var me=this;var content=this.content;var top=util.getAbsoluteTop(content);var height=content.clientHeight;var bottom=top+height;var margin=24;var interval=50;// ms\nif(mouseY<top+margin&&content.scrollTop>0){this.autoScrollStep=(top+margin-mouseY)/3;}else if(mouseY>bottom-margin&&height+content.scrollTop<content.scrollHeight){this.autoScrollStep=(bottom-margin-mouseY)/3;}else{this.autoScrollStep=undefined;}if(this.autoScrollStep){if(!this.autoScrollTimer){this.autoScrollTimer=setInterval(function(){if(me.autoScrollStep){content.scrollTop-=me.autoScrollStep;}else{me.stopAutoScroll();}},interval);}}else{this.stopAutoScroll();}};/**\r\n\t * Stop auto scrolling. Only applicable when scrolling\r\n\t */treemode.stopAutoScroll=function(){if(this.autoScrollTimer){clearTimeout(this.autoScrollTimer);delete this.autoScrollTimer;}if(this.autoScrollStep){delete this.autoScrollStep;}};/**\r\n\t * Set the focus to an element in the editor, set text selection, and\r\n\t * set scroll position.\r\n\t * @param {Object} selection An object containing fields:\r\n\t * {Element | undefined} dom The dom element\r\n\t * which has focus\r\n\t * {Range | TextRange} range A text selection\r\n\t * {Node[]} nodes Nodes in case of multi selection\r\n\t * {Number} scrollTop Scroll position\r\n\t */treemode.setSelection=function(selection){if(!selection){return;}if('scrollTop'in selection&&this.content){// TODO: animated scroll\nthis.content.scrollTop=selection.scrollTop;}if(selection.nodes){// multi-select\nthis.select(selection.nodes);}if(selection.range){util.setSelectionOffset(selection.range);}if(selection.dom){selection.dom.focus();}};/**\r\n\t * Get the current focus\r\n\t * @return {Object} selection An object containing fields:\r\n\t * {Element | undefined} dom The dom element\r\n\t * which has focus\r\n\t * {Range | TextRange} range A text selection\r\n\t * {Node[]} nodes Nodes in case of multi selection\r\n\t * {Number} scrollTop Scroll position\r\n\t */treemode.getSelection=function(){var range=util.getSelectionOffset();if(range&&range.container.nodeName!=='DIV'){// filter on (editable) divs)\nrange=null;}return{dom:this.focusTarget,range:range,nodes:this.multiselection.nodes.slice(0),scrollTop:this.content?this.content.scrollTop:0};};/**\r\n\t * Adjust the scroll position such that given top position is shown at 1/4\r\n\t * of the window height.\r\n\t * @param {Number} top\r\n\t * @param {function(boolean)} [callback] Callback, executed when animation is\r\n\t * finished. The callback returns true\r\n\t * when animation is finished, or false\r\n\t * when not.\r\n\t */treemode.scrollTo=function(top,callback){var content=this.content;if(content){var editor=this;// cancel any running animation\nif(editor.animateTimeout){clearTimeout(editor.animateTimeout);delete editor.animateTimeout;}if(editor.animateCallback){editor.animateCallback(false);delete editor.animateCallback;}// calculate final scroll position\nvar height=content.clientHeight;var bottom=content.scrollHeight-height;var finalScrollTop=Math.min(Math.max(top-height/4,0),bottom);// animate towards the new scroll position\nvar animate=function(){var scrollTop=content.scrollTop;var diff=finalScrollTop-scrollTop;if(Math.abs(diff)>3){content.scrollTop+=diff/3;editor.animateCallback=callback;editor.animateTimeout=setTimeout(animate,50);}else{// finished\nif(callback){callback(true);}content.scrollTop=finalScrollTop;delete editor.animateTimeout;delete editor.animateCallback;}};animate();}else{if(callback){callback(false);}}};/**\r\n\t * Create main frame\r\n\t * @private\r\n\t */treemode._createFrame=function(){// create the frame\nthis.frame=document.createElement('div');this.frame.className='jsoneditor jsoneditor-mode-'+this.options.mode;this.container.appendChild(this.frame);// create one global event listener to handle all events from all nodes\nvar editor=this;function onEvent(event){// when switching to mode \"code\" or \"text\" via the menu, some events\n// are still fired whilst the _onEvent methods is already removed.\nif(editor._onEvent){editor._onEvent(event);}}this.frame.onclick=function(event){var target=event.target;// || event.srcElement;\nonEvent(event);// prevent default submit action of buttons when editor is located\n// inside a form\nif(target.nodeName=='BUTTON'){event.preventDefault();}};this.frame.oninput=onEvent;this.frame.onchange=onEvent;this.frame.onkeydown=onEvent;this.frame.onkeyup=onEvent;this.frame.oncut=onEvent;this.frame.onpaste=onEvent;this.frame.onmousedown=onEvent;this.frame.onmouseup=onEvent;this.frame.onmouseover=onEvent;this.frame.onmouseout=onEvent;// Note: focus and blur events do not propagate, therefore they defined\n// using an eventListener with useCapture=true\n// see http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html\nutil.addEventListener(this.frame,'focus',onEvent,true);util.addEventListener(this.frame,'blur',onEvent,true);this.frame.onfocusin=onEvent;// for IE\nthis.frame.onfocusout=onEvent;// for IE\n// create menu\nthis.menu=document.createElement('div');this.menu.className='jsoneditor-menu';this.frame.appendChild(this.menu);// create expand all button\nvar expandAll=document.createElement('button');expandAll.type='button';expandAll.className='jsoneditor-expand-all';expandAll.title='Expand all fields';expandAll.onclick=function(){editor.expandAll();};this.menu.appendChild(expandAll);// create expand all button\nvar collapseAll=document.createElement('button');collapseAll.type='button';collapseAll.title='Collapse all fields';collapseAll.className='jsoneditor-collapse-all';collapseAll.onclick=function(){editor.collapseAll();};this.menu.appendChild(collapseAll);// create undo/redo buttons\nif(this.history){// create undo button\nvar undo=document.createElement('button');undo.type='button';undo.className='jsoneditor-undo jsoneditor-separator';undo.title='Undo last action (Ctrl+Z)';undo.onclick=function(){editor._onUndo();};this.menu.appendChild(undo);this.dom.undo=undo;// create redo button\nvar redo=document.createElement('button');redo.type='button';redo.className='jsoneditor-redo';redo.title='Redo (Ctrl+Shift+Z)';redo.onclick=function(){editor._onRedo();};this.menu.appendChild(redo);this.dom.redo=redo;// register handler for onchange of history\nthis.history.onChange=function(){undo.disabled=!editor.history.canUndo();redo.disabled=!editor.history.canRedo();};this.history.onChange();}// create mode box\nif(this.options&&this.options.modes&&this.options.modes.length){var me=this;this.modeSwitcher=new ModeSwitcher(this.menu,this.options.modes,this.options.mode,function onSwitch(mode){me.modeSwitcher.destroy();// switch mode and restore focus\nme.setMode(mode);me.modeSwitcher.focus();});}// create search box\nif(this.options.search){this.searchBox=new SearchBox(this,this.menu);}};/**\r\n\t * Perform an undo action\r\n\t * @private\r\n\t */treemode._onUndo=function(){if(this.history){// undo last action\nthis.history.undo();// fire change event\nthis._onChange();}};/**\r\n\t * Perform a redo action\r\n\t * @private\r\n\t */treemode._onRedo=function(){if(this.history){// redo last action\nthis.history.redo();// fire change event\nthis._onChange();}};/**\r\n\t * Event handler\r\n\t * @param event\r\n\t * @private\r\n\t */treemode._onEvent=function(event){if(event.type=='keydown'){this._onKeyDown(event);}if(event.type=='focus'){this.focusTarget=event.target;}if(event.type=='mousedown'){this._startDragDistance(event);}if(event.type=='mousemove'||event.type=='mouseup'||event.type=='click'){this._updateDragDistance(event);}var node=Node.getNodeFromTarget(event.target);if(node&&node.selected){if(event.type=='click'){if(event.target==node.dom.menu){this.showContextMenu(event.target);// stop propagation (else we will open the context menu of a single node)\nreturn;}// deselect a multi selection\nif(!event.hasMoved){this.deselect();}}if(event.type=='mousedown'){// drag multiple nodes\nNode.onDragStart(this.multiselection.nodes,event);}}else{if(event.type=='mousedown'){this.deselect();if(node&&event.target==node.dom.drag){// drag a singe node\nNode.onDragStart(node,event);}else if(!node||event.target!=node.dom.field&&event.target!=node.dom.value&&event.target!=node.dom.select){// select multiple nodes\nthis._onMultiSelectStart(event);}}}if(node){node.onEvent(event);}};treemode._startDragDistance=function(event){this.dragDistanceEvent={initialTarget:event.target,initialPageX:event.pageX,initialPageY:event.pageY,dragDistance:0,hasMoved:false};};treemode._updateDragDistance=function(event){if(!this.dragDistanceEvent){this._startDragDistance(event);}var diffX=event.pageX-this.dragDistanceEvent.initialPageX;var diffY=event.pageY-this.dragDistanceEvent.initialPageY;this.dragDistanceEvent.dragDistance=Math.sqrt(diffX*diffX+diffY*diffY);this.dragDistanceEvent.hasMoved=this.dragDistanceEvent.hasMoved||this.dragDistanceEvent.dragDistance>10;event.dragDistance=this.dragDistanceEvent.dragDistance;event.hasMoved=this.dragDistanceEvent.hasMoved;return event.dragDistance;};/**\r\n\t * Start multi selection of nodes by dragging the mouse\r\n\t * @param event\r\n\t * @private\r\n\t */treemode._onMultiSelectStart=function(event){var node=Node.getNodeFromTarget(event.target);if(this.options.mode!=='tree'||this.options.onEditable!==undefined){// dragging not allowed in modes 'view' and 'form'\n// TODO: allow multiselection of items when option onEditable is specified\nreturn;}this.multiselection={start:node||null,end:null,nodes:[]};this._startDragDistance(event);var editor=this;if(!this.mousemove){this.mousemove=util.addEventListener(window,'mousemove',function(event){editor._onMultiSelect(event);});}if(!this.mouseup){this.mouseup=util.addEventListener(window,'mouseup',function(event){editor._onMultiSelectEnd(event);});}};/**\r\n\t * Multiselect nodes by dragging\r\n\t * @param event\r\n\t * @private\r\n\t */treemode._onMultiSelect=function(event){event.preventDefault();this._updateDragDistance(event);if(!event.hasMoved){return;}var node=Node.getNodeFromTarget(event.target);if(node){if(this.multiselection.start==null){this.multiselection.start=node;}this.multiselection.end=node;}// deselect previous selection\nthis.deselect();// find the selected nodes in the range from first to last\nvar start=this.multiselection.start;var end=this.multiselection.end||this.multiselection.start;if(start&&end){// find the top level childs, all having the same parent\nthis.multiselection.nodes=this._findTopLevelNodes(start,end);this.select(this.multiselection.nodes);}};/**\r\n\t * End of multiselect nodes by dragging\r\n\t * @param event\r\n\t * @private\r\n\t */treemode._onMultiSelectEnd=function(event){// set focus to the context menu button of the first node\nif(this.multiselection.nodes[0]){this.multiselection.nodes[0].dom.menu.focus();}this.multiselection.start=null;this.multiselection.end=null;// cleanup global event listeners\nif(this.mousemove){util.removeEventListener(window,'mousemove',this.mousemove);delete this.mousemove;}if(this.mouseup){util.removeEventListener(window,'mouseup',this.mouseup);delete this.mouseup;}};/**\r\n\t * deselect currently selected nodes\r\n\t * @param {boolean} [clearStartAndEnd=false] If true, the `start` and `end`\r\n\t * state is cleared too.\r\n\t */treemode.deselect=function(clearStartAndEnd){this.multiselection.nodes.forEach(function(node){node.setSelected(false);});this.multiselection.nodes=[];if(clearStartAndEnd){this.multiselection.start=null;this.multiselection.end=null;}};/**\r\n\t * select nodes\r\n\t * @param {Node[] | Node} nodes\r\n\t */treemode.select=function(nodes){if(!Array.isArray(nodes)){return this.select([nodes]);}if(nodes){this.deselect();this.multiselection.nodes=nodes.slice(0);var first=nodes[0];nodes.forEach(function(node){node.setSelected(true,node===first);});}};/**\r\n\t * From two arbitrary selected nodes, find their shared parent node.\r\n\t * From that parent node, select the two child nodes in the brances going to\r\n\t * nodes `start` and `end`, and select all childs in between.\r\n\t * @param {Node} start\r\n\t * @param {Node} end\r\n\t * @return {Array.<Node>} Returns an ordered list with child nodes\r\n\t * @private\r\n\t */treemode._findTopLevelNodes=function(start,end){var startPath=start.getNodePath();var endPath=end.getNodePath();var i=0;while(i<startPath.length&&startPath[i]===endPath[i]){i++;}var root=startPath[i-1];var startChild=startPath[i];var endChild=endPath[i];if(!startChild||!endChild){if(root.parent){// startChild is a parent of endChild or vice versa\nstartChild=root;endChild=root;root=root.parent;}else{// we have selected the root node (which doesn't have a parent)\nstartChild=root.childs[0];endChild=root.childs[root.childs.length-1];}}if(root&&startChild&&endChild){var startIndex=root.childs.indexOf(startChild);var endIndex=root.childs.indexOf(endChild);var firstIndex=Math.min(startIndex,endIndex);var lastIndex=Math.max(startIndex,endIndex);return root.childs.slice(firstIndex,lastIndex+1);}else{return[];}};/**\r\n\t * Event handler for keydown. Handles shortcut keys\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */treemode._onKeyDown=function(event){var keynum=event.which||event.keyCode;var ctrlKey=event.ctrlKey;var shiftKey=event.shiftKey;var handled=false;if(keynum==9){// Tab or Shift+Tab\nvar me=this;setTimeout(function(){// select all text when moving focus to an editable div\nutil.selectContentEditable(me.focusTarget);},0);}if(this.searchBox){if(ctrlKey&&keynum==70){// Ctrl+F\nthis.searchBox.dom.search.focus();this.searchBox.dom.search.select();handled=true;}else if(keynum==114||ctrlKey&&keynum==71){// F3 or Ctrl+G\nvar focus=true;if(!shiftKey){// select next search result (F3 or Ctrl+G)\nthis.searchBox.next(focus);}else{// select previous search result (Shift+F3 or Ctrl+Shift+G)\nthis.searchBox.previous(focus);}handled=true;}}if(this.history){if(ctrlKey&&!shiftKey&&keynum==90){// Ctrl+Z\n// undo\nthis._onUndo();handled=true;}else if(ctrlKey&&shiftKey&&keynum==90){// Ctrl+Shift+Z\n// redo\nthis._onRedo();handled=true;}}if(handled){event.preventDefault();event.stopPropagation();}};/**\r\n\t * Create main table\r\n\t * @private\r\n\t */treemode._createTable=function(){var contentOuter=document.createElement('div');contentOuter.className='jsoneditor-outer';this.contentOuter=contentOuter;this.content=document.createElement('div');this.content.className='jsoneditor-tree';contentOuter.appendChild(this.content);this.table=document.createElement('table');this.table.className='jsoneditor-tree';this.content.appendChild(this.table);// create colgroup where the first two columns don't have a fixed\n// width, and the edit columns do have a fixed width\nvar col;this.colgroupContent=document.createElement('colgroup');if(this.options.mode==='tree'){col=document.createElement('col');col.width=\"24px\";this.colgroupContent.appendChild(col);}col=document.createElement('col');col.width=\"24px\";this.colgroupContent.appendChild(col);col=document.createElement('col');this.colgroupContent.appendChild(col);this.table.appendChild(this.colgroupContent);this.tbody=document.createElement('tbody');this.table.appendChild(this.tbody);this.frame.appendChild(contentOuter);};/**\r\n\t * Show a contextmenu for this node.\r\n\t * Used for multiselection\r\n\t * @param {HTMLElement} anchor Anchor element to attache the context menu to.\r\n\t * @param {function} [onClose] Callback method called when the context menu\r\n\t * is being closed.\r\n\t */treemode.showContextMenu=function(anchor,onClose){var items=[];var editor=this;// create duplicate button\nitems.push({text:'Duplicate',title:'Duplicate selected fields (Ctrl+D)',className:'jsoneditor-duplicate',click:function(){Node.onDuplicate(editor.multiselection.nodes);}});// create remove button\nitems.push({text:'Remove',title:'Remove selected fields (Ctrl+Del)',className:'jsoneditor-remove',click:function(){Node.onRemove(editor.multiselection.nodes);}});var menu=new ContextMenu(items,{close:onClose});menu.show(anchor,this.content);};// define modes\nmodule.exports=[{mode:'tree',mixin:treemode,data:'json'},{mode:'view',mixin:treemode,data:'json'},{mode:'form',mixin:treemode,data:'json'}];/***/},/* 52 */ /***/function(module,exports){'use strict';/**\r\n\t * The highlighter can highlight/unhighlight a node, and\r\n\t * animate the visibility of a context menu.\r\n\t * @constructor Highlighter\r\n\t */function Highlighter(){this.locked=false;}/**\r\n\t * Hightlight given node and its childs\r\n\t * @param {Node} node\r\n\t */Highlighter.prototype.highlight=function(node){if(this.locked){return;}if(this.node!=node){// unhighlight current node\nif(this.node){this.node.setHighlight(false);}// highlight new node\nthis.node=node;this.node.setHighlight(true);}// cancel any current timeout\nthis._cancelUnhighlight();};/**\r\n\t * Unhighlight currently highlighted node.\r\n\t * Will be done after a delay\r\n\t */Highlighter.prototype.unhighlight=function(){if(this.locked){return;}var me=this;if(this.node){this._cancelUnhighlight();// do the unhighlighting after a small delay, to prevent re-highlighting\n// the same node when moving from the drag-icon to the contextmenu-icon\n// or vice versa.\nthis.unhighlightTimer=setTimeout(function(){me.node.setHighlight(false);me.node=undefined;me.unhighlightTimer=undefined;},0);}};/**\r\n\t * Cancel an unhighlight action (if before the timeout of the unhighlight action)\r\n\t * @private\r\n\t */Highlighter.prototype._cancelUnhighlight=function(){if(this.unhighlightTimer){clearTimeout(this.unhighlightTimer);this.unhighlightTimer=undefined;}};/**\r\n\t * Lock highlighting or unhighlighting nodes.\r\n\t * methods highlight and unhighlight do not work while locked.\r\n\t */Highlighter.prototype.lock=function(){this.locked=true;};/**\r\n\t * Unlock highlighting or unhighlighting nodes\r\n\t */Highlighter.prototype.unlock=function(){this.locked=false;};module.exports=Highlighter;/***/},/* 53 */ /***/function(module,exports,__webpack_require__){'use strict';var util=__webpack_require__(54);/**\r\n\t * @constructor History\r\n\t * Store action history, enables undo and redo\r\n\t * @param {JSONEditor} editor\r\n\t */function History(editor){this.editor=editor;this.history=[];this.index=-1;this.clear();// map with all supported actions\nthis.actions={'editField':{'undo':function(params){params.node.updateField(params.oldValue);},'redo':function(params){params.node.updateField(params.newValue);}},'editValue':{'undo':function(params){params.node.updateValue(params.oldValue);},'redo':function(params){params.node.updateValue(params.newValue);}},'changeType':{'undo':function(params){params.node.changeType(params.oldType);},'redo':function(params){params.node.changeType(params.newType);}},'appendNodes':{'undo':function(params){params.nodes.forEach(function(node){params.parent.removeChild(node);});},'redo':function(params){params.nodes.forEach(function(node){params.parent.appendChild(node);});}},'insertBeforeNodes':{'undo':function(params){params.nodes.forEach(function(node){params.parent.removeChild(node);});},'redo':function(params){params.nodes.forEach(function(node){params.parent.insertBefore(node,params.beforeNode);});}},'insertAfterNodes':{'undo':function(params){params.nodes.forEach(function(node){params.parent.removeChild(node);});},'redo':function(params){var afterNode=params.afterNode;params.nodes.forEach(function(node){params.parent.insertAfter(params.node,afterNode);afterNode=node;});}},'removeNodes':{'undo':function(params){var parent=params.parent;var beforeNode=parent.childs[params.index]||parent.append;params.nodes.forEach(function(node){parent.insertBefore(node,beforeNode);});},'redo':function(params){params.nodes.forEach(function(node){params.parent.removeChild(node);});}},'duplicateNodes':{'undo':function(params){params.nodes.forEach(function(node){params.parent.removeChild(node);});},'redo':function(params){var afterNode=params.afterNode;params.nodes.forEach(function(node){params.parent.insertAfter(node,afterNode);afterNode=node;});}},'moveNodes':{'undo':function(params){params.nodes.forEach(function(node){params.oldBeforeNode.parent.moveBefore(node,params.oldBeforeNode);});},'redo':function(params){params.nodes.forEach(function(node){params.newBeforeNode.parent.moveBefore(node,params.newBeforeNode);});}},'sort':{'undo':function(params){var node=params.node;node.hideChilds();node.sort=params.oldSort;node.childs=params.oldChilds;node.showChilds();},'redo':function(params){var node=params.node;node.hideChilds();node.sort=params.newSort;node.childs=params.newChilds;node.showChilds();}}// TODO: restore the original caret position and selection with each undo\n// TODO: implement history for actions \"expand\", \"collapse\", \"scroll\", \"setDocument\"\n};}/**\r\n\t * The method onChange is executed when the History is changed, and can\r\n\t * be overloaded.\r\n\t */History.prototype.onChange=function(){};/**\r\n\t * Add a new action to the history\r\n\t * @param {String} action The executed action. Available actions: \"editField\",\r\n\t * \"editValue\", \"changeType\", \"appendNode\",\r\n\t * \"removeNode\", \"duplicateNode\", \"moveNode\"\r\n\t * @param {Object} params Object containing parameters describing the change.\r\n\t * The parameters in params depend on the action (for\r\n\t * example for \"editValue\" the Node, old value, and new\r\n\t * value are provided). params contains all information\r\n\t * needed to undo or redo the action.\r\n\t */History.prototype.add=function(action,params){this.index++;this.history[this.index]={'action':action,'params':params,'timestamp':new Date()};// remove redo actions which are invalid now\nif(this.index<this.history.length-1){this.history.splice(this.index+1,this.history.length-this.index-1);}// fire onchange event\nthis.onChange();};/**\r\n\t * Clear history\r\n\t */History.prototype.clear=function(){this.history=[];this.index=-1;// fire onchange event\nthis.onChange();};/**\r\n\t * Check if there is an action available for undo\r\n\t * @return {Boolean} canUndo\r\n\t */History.prototype.canUndo=function(){return this.index>=0;};/**\r\n\t * Check if there is an action available for redo\r\n\t * @return {Boolean} canRedo\r\n\t */History.prototype.canRedo=function(){return this.index<this.history.length-1;};/**\r\n\t * Undo the last action\r\n\t */History.prototype.undo=function(){if(this.canUndo()){var obj=this.history[this.index];if(obj){var action=this.actions[obj.action];if(action&&action.undo){action.undo(obj.params);if(obj.params.oldSelection){this.editor.setSelection(obj.params.oldSelection);}}else{console.error(new Error('unknown action \"'+obj.action+'\"'));}}this.index--;// fire onchange event\nthis.onChange();}};/**\r\n\t * Redo the last action\r\n\t */History.prototype.redo=function(){if(this.canRedo()){this.index++;var obj=this.history[this.index];if(obj){var action=this.actions[obj.action];if(action&&action.redo){action.redo(obj.params);if(obj.params.newSelection){this.editor.setSelection(obj.params.newSelection);}}else{console.error(new Error('unknown action \"'+obj.action+'\"'));}}// fire onchange event\nthis.onChange();}};/**\r\n\t * Destroy history\r\n\t */History.prototype.destroy=function(){this.editor=null;this.history=[];this.index=-1;};module.exports=History;/***/},/* 54 */ /***/function(module,exports,__webpack_require__){'use strict';var jsonlint=__webpack_require__(55);/**\r\n\t * Parse JSON using the parser built-in in the browser.\r\n\t * On exception, the jsonString is validated and a detailed error is thrown.\r\n\t * @param {String} jsonString\r\n\t * @return {JSON} json\r\n\t */exports.parse=function parse(jsonString){try{return JSON.parse(jsonString);}catch(err){// try to throw a more detailed error message using validate\nexports.validate(jsonString);// rethrow the original error\nthrow err;}};/**\r\n\t * Sanitize a JSON-like string containing. For example changes JavaScript\r\n\t * notation into JSON notation.\r\n\t * This function for example changes a string like \"{a: 2, 'b': {c: 'd'}\"\r\n\t * into '{\"a\": 2, \"b\": {\"c\": \"d\"}'\r\n\t * @param {string} jsString\r\n\t * @returns {string} json\r\n\t */exports.sanitize=function(jsString){// escape all single and double quotes inside strings\nvar chars=[];var i=0;//If JSON starts with a function (characters/digits/\"_-\"), remove this function.\n//This is useful for \"stripping\" JSONP objects to become JSON\n//For example: /* some comment */ function_12321321 ( [{\"a\":\"b\"}] ); => [{\"a\":\"b\"}]\nvar match=jsString.match(/^\\s*(\\/\\*(.|[\\r\\n])*?\\*\\/)?\\s*[\\da-zA-Z_$]+\\s*\\(([\\s\\S]*)\\)\\s*;?\\s*$/);if(match){jsString=match[3];}// helper functions to get the current/prev/next character\nfunction curr(){return jsString.charAt(i);}function next(){return jsString.charAt(i+1);}function prev(){return jsString.charAt(i-1);}// get the last parsed non-whitespace character\nfunction lastNonWhitespace(){var p=chars.length-1;while(p>=0){var pp=chars[p];if(pp!==' '&&pp!=='\\n'&&pp!=='\\r'&&pp!=='\\t'){// non whitespace\nreturn pp;}p--;}return'';}// skip a block comment '/* ... */'\nfunction skipBlockComment(){i+=2;while(i<jsString.length&&(curr()!=='*'||next()!=='/')){i++;}i+=2;}// skip a comment '// ...'\nfunction skipComment(){i+=2;while(i<jsString.length&&curr()!=='\\n'){i++;}}// parse single or double quoted string\nfunction parseString(quote){chars.push('\"');i++;var c=curr();while(i<jsString.length&&c!==quote){if(c==='\"'&&prev()!=='\\\\'){// unescaped double quote, escape it\nchars.push('\\\\');}// handle escape character\nif(c==='\\\\'){i++;c=curr();// remove the escape character when followed by a single quote ', not needed\nif(c!=='\\''){chars.push('\\\\');}}chars.push(c);i++;c=curr();}if(c===quote){chars.push('\"');i++;}}// parse an unquoted key\nfunction parseKey(){var specialValues=['null','true','false'];var key='';var c=curr();var regexp=/[a-zA-Z_$\\d]/;// letter, number, underscore, dollar character\nwhile(regexp.test(c)){key+=c;i++;c=curr();}if(specialValues.indexOf(key)===-1){chars.push('\"'+key+'\"');}else{chars.push(key);}}while(i<jsString.length){var c=curr();if(c==='/'&&next()==='*'){skipBlockComment();}else if(c==='/'&&next()==='/'){skipComment();}else if(c==='\\''||c==='\"'){parseString(c);}else if(/[a-zA-Z_$]/.test(c)&&['{',','].indexOf(lastNonWhitespace())!==-1){// an unquoted object key (like a in '{a:2}')\nparseKey();}else{chars.push(c);i++;}}return chars.join('');};/**\r\n\t * Escape unicode characters.\r\n\t * For example input '\\u2661' (length 1) will output '\\\\u2661' (length 5).\r\n\t * @param {string} text\r\n\t * @return {string}\r\n\t */exports.escapeUnicodeChars=function(text){// see https://www.wikiwand.com/en/UTF-16\n// note: we leave surrogate pairs as two individual chars,\n// as JSON doesn't interpret them as a single unicode char.\nreturn text.replace(/[\\u007F-\\uFFFF]/g,function(c){return'\\\\u'+('0000'+c.charCodeAt(0).toString(16)).slice(-4);});};/**\r\n\t * Validate a string containing a JSON object\r\n\t * This method uses JSONLint to validate the String. If JSONLint is not\r\n\t * available, the built-in JSON parser of the browser is used.\r\n\t * @param {String} jsonString String with an (invalid) JSON object\r\n\t * @throws Error\r\n\t */exports.validate=function validate(jsonString){if(typeof jsonlint!='undefined'){jsonlint.parse(jsonString);}else{JSON.parse(jsonString);}};/**\r\n\t * Extend object a with the properties of object b\r\n\t * @param {Object} a\r\n\t * @param {Object} b\r\n\t * @return {Object} a\r\n\t */exports.extend=function extend(a,b){for(var prop in b){if(b.hasOwnProperty(prop)){a[prop]=b[prop];}}return a;};/**\r\n\t * Remove all properties from object a\r\n\t * @param {Object} a\r\n\t * @return {Object} a\r\n\t */exports.clear=function clear(a){for(var prop in a){if(a.hasOwnProperty(prop)){delete a[prop];}}return a;};/**\r\n\t * Get the type of an object\r\n\t * @param {*} object\r\n\t * @return {String} type\r\n\t */exports.type=function type(object){if(object===null){return'null';}if(object===undefined){return'undefined';}if(object instanceof Number||typeof object==='number'){return'number';}if(object instanceof String||typeof object==='string'){return'string';}if(object instanceof Boolean||typeof object==='boolean'){return'boolean';}if(object instanceof RegExp||typeof object==='regexp'){return'regexp';}if(exports.isArray(object)){return'array';}return'object';};/**\r\n\t * Test whether a text contains a url (matches when a string starts\r\n\t * with 'http://*' or 'https://*' and has no whitespace characters)\r\n\t * @param {String} text\r\n\t */var isUrlRegex=/^https?:\\/\\/\\S+$/;exports.isUrl=function isUrl(text){return(typeof text=='string'||text instanceof String)&&isUrlRegex.test(text);};/**\r\n\t * Tes whether given object is an Array\r\n\t * @param {*} obj\r\n\t * @returns {boolean} returns true when obj is an array\r\n\t */exports.isArray=function(obj){return Object.prototype.toString.call(obj)==='[object Array]';};/**\r\n\t * Retrieve the absolute left value of a DOM element\r\n\t * @param {Element} elem A dom element, for example a div\r\n\t * @return {Number} left The absolute left position of this element\r\n\t * in the browser page.\r\n\t */exports.getAbsoluteLeft=function getAbsoluteLeft(elem){var rect=elem.getBoundingClientRect();return rect.left+window.pageXOffset||document.scrollLeft||0;};/**\r\n\t * Retrieve the absolute top value of a DOM element\r\n\t * @param {Element} elem A dom element, for example a div\r\n\t * @return {Number} top The absolute top position of this element\r\n\t * in the browser page.\r\n\t */exports.getAbsoluteTop=function getAbsoluteTop(elem){var rect=elem.getBoundingClientRect();return rect.top+window.pageYOffset||document.scrollTop||0;};/**\r\n\t * add a className to the given elements style\r\n\t * @param {Element} elem\r\n\t * @param {String} className\r\n\t */exports.addClassName=function addClassName(elem,className){var classes=elem.className.split(' ');if(classes.indexOf(className)==-1){classes.push(className);// add the class to the array\nelem.className=classes.join(' ');}};/**\r\n\t * add a className to the given elements style\r\n\t * @param {Element} elem\r\n\t * @param {String} className\r\n\t */exports.removeClassName=function removeClassName(elem,className){var classes=elem.className.split(' ');var index=classes.indexOf(className);if(index!=-1){classes.splice(index,1);// remove the class from the array\nelem.className=classes.join(' ');}};/**\r\n\t * Strip the formatting from the contents of a div\r\n\t * the formatting from the div itself is not stripped, only from its childs.\r\n\t * @param {Element} divElement\r\n\t */exports.stripFormatting=function stripFormatting(divElement){var childs=divElement.childNodes;for(var i=0,iMax=childs.length;i<iMax;i++){var child=childs[i];// remove the style\nif(child.style){// TODO: test if child.attributes does contain style\nchild.removeAttribute('style');}// remove all attributes\nvar attributes=child.attributes;if(attributes){for(var j=attributes.length-1;j>=0;j--){var attribute=attributes[j];if(attribute.specified===true){child.removeAttribute(attribute.name);}}}// recursively strip childs\nexports.stripFormatting(child);}};/**\r\n\t * Set focus to the end of an editable div\r\n\t * code from Nico Burns\r\n\t * http://stackoverflow.com/users/140293/nico-burns\r\n\t * http://stackoverflow.com/questions/1125292/how-to-move-cursor-to-end-of-contenteditable-entity\r\n\t * @param {Element} contentEditableElement A content editable div\r\n\t */exports.setEndOfContentEditable=function setEndOfContentEditable(contentEditableElement){var range,selection;if(document.createRange){range=document.createRange();//Create a range (a range is a like the selection but invisible)\nrange.selectNodeContents(contentEditableElement);//Select the entire contents of the element with the range\nrange.collapse(false);//collapse the range to the end point. false means collapse to end rather than the start\nselection=window.getSelection();//get the selection object (allows you to change selection)\nselection.removeAllRanges();//remove any selections already made\nselection.addRange(range);//make the range you have just created the visible selection\n}};/**\r\n\t * Select all text of a content editable div.\r\n\t * http://stackoverflow.com/a/3806004/1262753\r\n\t * @param {Element} contentEditableElement A content editable div\r\n\t */exports.selectContentEditable=function selectContentEditable(contentEditableElement){if(!contentEditableElement||contentEditableElement.nodeName!='DIV'){return;}var sel,range;if(window.getSelection&&document.createRange){range=document.createRange();range.selectNodeContents(contentEditableElement);sel=window.getSelection();sel.removeAllRanges();sel.addRange(range);}};/**\r\n\t * Get text selection\r\n\t * http://stackoverflow.com/questions/4687808/contenteditable-selected-text-save-and-restore\r\n\t * @return {Range | TextRange | null} range\r\n\t */exports.getSelection=function getSelection(){if(window.getSelection){var sel=window.getSelection();if(sel.getRangeAt&&sel.rangeCount){return sel.getRangeAt(0);}}return null;};/**\r\n\t * Set text selection\r\n\t * http://stackoverflow.com/questions/4687808/contenteditable-selected-text-save-and-restore\r\n\t * @param {Range | TextRange | null} range\r\n\t */exports.setSelection=function setSelection(range){if(range){if(window.getSelection){var sel=window.getSelection();sel.removeAllRanges();sel.addRange(range);}}};/**\r\n\t * Get selected text range\r\n\t * @return {Object} params object containing parameters:\r\n\t * {Number} startOffset\r\n\t * {Number} endOffset\r\n\t * {Element} container HTML element holding the\r\n\t * selected text element\r\n\t * Returns null if no text selection is found\r\n\t */exports.getSelectionOffset=function getSelectionOffset(){var range=exports.getSelection();if(range&&'startOffset'in range&&'endOffset'in range&&range.startContainer&&range.startContainer==range.endContainer){return{startOffset:range.startOffset,endOffset:range.endOffset,container:range.startContainer.parentNode};}return null;};/**\r\n\t * Set selected text range in given element\r\n\t * @param {Object} params An object containing:\r\n\t * {Element} container\r\n\t * {Number} startOffset\r\n\t * {Number} endOffset\r\n\t */exports.setSelectionOffset=function setSelectionOffset(params){if(document.createRange&&window.getSelection){var selection=window.getSelection();if(selection){var range=document.createRange();if(!params.container.firstChild){params.container.appendChild(document.createTextNode(''));}// TODO: do not suppose that the first child of the container is a textnode,\n// but recursively find the textnodes\nrange.setStart(params.container.firstChild,params.startOffset);range.setEnd(params.container.firstChild,params.endOffset);exports.setSelection(range);}}};/**\r\n\t * Get the inner text of an HTML element (for example a div element)\r\n\t * @param {Element} element\r\n\t * @param {Object} [buffer]\r\n\t * @return {String} innerText\r\n\t */exports.getInnerText=function getInnerText(element,buffer){var first=buffer==undefined;if(first){buffer={'text':'','flush':function(){var text=this.text;this.text='';return text;},'set':function(text){this.text=text;}};}// text node\nif(element.nodeValue){return buffer.flush()+element.nodeValue;}// divs or other HTML elements\nif(element.hasChildNodes()){var childNodes=element.childNodes;var innerText='';for(var i=0,iMax=childNodes.length;i<iMax;i++){var child=childNodes[i];if(child.nodeName=='DIV'||child.nodeName=='P'){var prevChild=childNodes[i-1];var prevName=prevChild?prevChild.nodeName:undefined;if(prevName&&prevName!='DIV'&&prevName!='P'&&prevName!='BR'){innerText+='\\n';buffer.flush();}innerText+=exports.getInnerText(child,buffer);buffer.set('\\n');}else if(child.nodeName=='BR'){innerText+=buffer.flush();buffer.set('\\n');}else{innerText+=exports.getInnerText(child,buffer);}}return innerText;}else{if(element.nodeName=='P'&&exports.getInternetExplorerVersion()!=-1){// On Internet Explorer, a <p> with hasChildNodes()==false is\n// rendered with a new line. Note that a <p> with\n// hasChildNodes()==true is rendered without a new line\n// Other browsers always ensure there is a <br> inside the <p>,\n// and if not, the <p> does not render a new line\nreturn buffer.flush();}}// br or unknown\nreturn'';};/**\r\n\t * Returns the version of Internet Explorer or a -1\r\n\t * (indicating the use of another browser).\r\n\t * Source: http://msdn.microsoft.com/en-us/library/ms537509(v=vs.85).aspx\r\n\t * @return {Number} Internet Explorer version, or -1 in case of an other browser\r\n\t */exports.getInternetExplorerVersion=function getInternetExplorerVersion(){if(_ieVersion==-1){var rv=-1;// Return value assumes failure.\nif(navigator.appName=='Microsoft Internet Explorer'){var ua=navigator.userAgent;var re=new RegExp(\"MSIE ([0-9]{1,}[\\.0-9]{0,})\");if(re.exec(ua)!=null){rv=parseFloat(RegExp.$1);}}_ieVersion=rv;}return _ieVersion;};/**\r\n\t * Test whether the current browser is Firefox\r\n\t * @returns {boolean} isFirefox\r\n\t */exports.isFirefox=function isFirefox(){return navigator.userAgent.indexOf(\"Firefox\")!=-1;};/**\r\n\t * cached internet explorer version\r\n\t * @type {Number}\r\n\t * @private\r\n\t */var _ieVersion=-1;/**\r\n\t * Add and event listener. Works for all browsers\r\n\t * @param {Element} element An html element\r\n\t * @param {string} action The action, for example \"click\",\r\n\t * without the prefix \"on\"\r\n\t * @param {function} listener The callback function to be executed\r\n\t * @param {boolean} [useCapture] false by default\r\n\t * @return {function} the created event listener\r\n\t */exports.addEventListener=function addEventListener(element,action,listener,useCapture){if(element.addEventListener){if(useCapture===undefined)useCapture=false;if(action===\"mousewheel\"&&exports.isFirefox()){action=\"DOMMouseScroll\";// For Firefox\n}element.addEventListener(action,listener,useCapture);return listener;}else if(element.attachEvent){// Old IE browsers\nvar f=function(){return listener.call(element,window.event);};element.attachEvent(\"on\"+action,f);return f;}};/**\r\n\t * Remove an event listener from an element\r\n\t * @param {Element} element An html dom element\r\n\t * @param {string} action The name of the event, for example \"mousedown\"\r\n\t * @param {function} listener The listener function\r\n\t * @param {boolean} [useCapture] false by default\r\n\t */exports.removeEventListener=function removeEventListener(element,action,listener,useCapture){if(element.removeEventListener){if(useCapture===undefined)useCapture=false;if(action===\"mousewheel\"&&exports.isFirefox()){action=\"DOMMouseScroll\";// For Firefox\n}element.removeEventListener(action,listener,useCapture);}else if(element.detachEvent){// Old IE browsers\nelement.detachEvent(\"on\"+action,listener);}};/**\r\n\t * Parse a JSON path like '.items[3].name' into an array\r\n\t * @param {string} jsonPath\r\n\t * @return {Array}\r\n\t */exports.parsePath=function parsePath(jsonPath){var prop,remainder;if(jsonPath.length===0){return[];}// find a match like '.prop'\nvar match=jsonPath.match(/^\\.(\\w+)/);if(match){prop=match[1];remainder=jsonPath.substr(prop.length+1);}else if(jsonPath[0]==='['){// find a match like\nvar end=jsonPath.indexOf(']');if(end===-1){throw new SyntaxError('Character ] expected in path');}if(end===1){throw new SyntaxError('Index expected after [');}var value=jsonPath.substring(1,end);if(value[0]==='\\''){// ajv produces string prop names with single quotes, so we need\n// to reformat them into valid double-quoted JSON strings\nvalue='\\\"'+value.substring(1,value.length-1)+'\\\"';}prop=value==='*'?value:JSON.parse(value);// parse string and number\nremainder=jsonPath.substr(end+1);}else{throw new SyntaxError('Failed to parse path');}return[prop].concat(parsePath(remainder));};/**\r\n\t * Improve the error message of a JSON schema error\r\n\t * @param {Object} error\r\n\t * @return {Object} The error\r\n\t */exports.improveSchemaError=function(error){if(error.keyword==='enum'&&Array.isArray(error.schema)){var enums=error.schema;if(enums){enums=enums.map(function(value){return JSON.stringify(value);});if(enums.length>5){var more=['('+(enums.length-5)+' more...)'];enums=enums.slice(0,5);enums.push(more);}error.message='should be equal to one of: '+enums.join(', ');}}if(error.keyword==='additionalProperties'){error.message='should NOT have additional property: '+error.params.additionalProperty;}return error;};/**\r\n\t * Test whether the child rect fits completely inside the parent rect.\r\n\t * @param {ClientRect} parent\r\n\t * @param {ClientRect} child\r\n\t * @param {number} margin\r\n\t */exports.insideRect=function(parent,child,margin){var _margin=margin!==undefined?margin:0;return child.left-_margin>=parent.left&&child.right+_margin<=parent.right&&child.top-_margin>=parent.top&&child.bottom+_margin<=parent.bottom;};/**\r\n\t * Returns a function, that, as long as it continues to be invoked, will not\r\n\t * be triggered. The function will be called after it stops being called for\r\n\t * N milliseconds.\r\n\t *\r\n\t * Source: https://davidwalsh.name/javascript-debounce-function\r\n\t *\r\n\t * @param {function} func\r\n\t * @param {number} wait Number in milliseconds\r\n\t * @param {boolean} [immediate=false] If `immediate` is passed, trigger the\r\n\t * function on the leading edge, instead\r\n\t * of the trailing.\r\n\t * @return {function} Return the debounced function\r\n\t */exports.debounce=function debounce(func,wait,immediate){var timeout;return function(){var context=this,args=arguments;var later=function(){timeout=null;if(!immediate)func.apply(context,args);};var callNow=immediate&&!timeout;clearTimeout(timeout);timeout=setTimeout(later,wait);if(callNow)func.apply(context,args);};};/**\r\n\t * Determines the difference between two texts.\r\n\t * Can only detect one removed or inserted block of characters.\r\n\t * @param {string} oldText\r\n\t * @param {string} newText\r\n\t * @return {{start: number, end: number}} Returns the start and end\r\n\t * of the changed part in newText.\r\n\t */exports.textDiff=function textDiff(oldText,newText){var len=newText.length;var start=0;var oldEnd=oldText.length;var newEnd=newText.length;while(newText.charAt(start)===oldText.charAt(start)&&start<len){start++;}while(newText.charAt(newEnd-1)===oldText.charAt(oldEnd-1)&&newEnd>start&&oldEnd>0){newEnd--;oldEnd--;}return{start:start,end:newEnd};};/***/},/* 55 */ /***/function(module,exports,__webpack_require__){/* Jison generated parser */var jsonlint=function(){var parser={trace:function trace(){},yy:{},symbols_:{\"error\":2,\"JSONString\":3,\"STRING\":4,\"JSONNumber\":5,\"NUMBER\":6,\"JSONNullLiteral\":7,\"NULL\":8,\"JSONBooleanLiteral\":9,\"TRUE\":10,\"FALSE\":11,\"JSONText\":12,\"JSONValue\":13,\"EOF\":14,\"JSONObject\":15,\"JSONArray\":16,\"{\":17,\"}\":18,\"JSONMemberList\":19,\"JSONMember\":20,\":\":21,\",\":22,\"[\":23,\"]\":24,\"JSONElementList\":25,\"$accept\":0,\"$end\":1},terminals_:{2:\"error\",4:\"STRING\",6:\"NUMBER\",8:\"NULL\",10:\"TRUE\",11:\"FALSE\",14:\"EOF\",17:\"{\",18:\"}\",21:\":\",22:\",\",23:\"[\",24:\"]\"},productions_:[0,[3,1],[5,1],[7,1],[9,1],[9,1],[12,2],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[15,2],[15,3],[20,3],[19,1],[19,3],[16,2],[16,3],[25,1],[25,3]],performAction:function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$){var $0=$$.length-1;switch(yystate){case 1:// replace escaped characters with actual character\nthis.$=yytext.replace(/\\\\(\\\\|\")/g,\"$\"+\"1\").replace(/\\\\n/g,'\\n').replace(/\\\\r/g,'\\r').replace(/\\\\t/g,'\\t').replace(/\\\\v/g,'\\v').replace(/\\\\f/g,'\\f').replace(/\\\\b/g,'\\b');break;case 2:this.$=Number(yytext);break;case 3:this.$=null;break;case 4:this.$=true;break;case 5:this.$=false;break;case 6:return this.$=$$[$0-1];break;case 13:this.$={};break;case 14:this.$=$$[$0-1];break;case 15:this.$=[$$[$0-2],$$[$0]];break;case 16:this.$={};this.$[$$[$0][0]]=$$[$0][1];break;case 17:this.$=$$[$0-2];$$[$0-2][$$[$0][0]]=$$[$0][1];break;case 18:this.$=[];break;case 19:this.$=$$[$0-1];break;case 20:this.$=[$$[$0]];break;case 21:this.$=$$[$0-2];$$[$0-2].push($$[$0]);break;}},table:[{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],12:1,13:2,15:7,16:8,17:[1,14],23:[1,15]},{1:[3]},{14:[1,16]},{14:[2,7],18:[2,7],22:[2,7],24:[2,7]},{14:[2,8],18:[2,8],22:[2,8],24:[2,8]},{14:[2,9],18:[2,9],22:[2,9],24:[2,9]},{14:[2,10],18:[2,10],22:[2,10],24:[2,10]},{14:[2,11],18:[2,11],22:[2,11],24:[2,11]},{14:[2,12],18:[2,12],22:[2,12],24:[2,12]},{14:[2,3],18:[2,3],22:[2,3],24:[2,3]},{14:[2,4],18:[2,4],22:[2,4],24:[2,4]},{14:[2,5],18:[2,5],22:[2,5],24:[2,5]},{14:[2,1],18:[2,1],21:[2,1],22:[2,1],24:[2,1]},{14:[2,2],18:[2,2],22:[2,2],24:[2,2]},{3:20,4:[1,12],18:[1,17],19:18,20:19},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:23,15:7,16:8,17:[1,14],23:[1,15],24:[1,21],25:22},{1:[2,6]},{14:[2,13],18:[2,13],22:[2,13],24:[2,13]},{18:[1,24],22:[1,25]},{18:[2,16],22:[2,16]},{21:[1,26]},{14:[2,18],18:[2,18],22:[2,18],24:[2,18]},{22:[1,28],24:[1,27]},{22:[2,20],24:[2,20]},{14:[2,14],18:[2,14],22:[2,14],24:[2,14]},{3:20,4:[1,12],20:29},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:30,15:7,16:8,17:[1,14],23:[1,15]},{14:[2,19],18:[2,19],22:[2,19],24:[2,19]},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:31,15:7,16:8,17:[1,14],23:[1,15]},{18:[2,17],22:[2,17]},{18:[2,15],22:[2,15]},{22:[2,21],24:[2,21]}],defaultActions:{16:[2,6]},parseError:function parseError(str,hash){throw new Error(str);},parse:function parse(input){var self=this,stack=[0],vstack=[null],// semantic value stack\nlstack=[],// location stack\ntable=this.table,yytext='',yylineno=0,yyleng=0,recovering=0,TERROR=2,EOF=1;//this.reductionCount = this.shiftCount = 0;\nthis.lexer.setInput(input);this.lexer.yy=this.yy;this.yy.lexer=this.lexer;if(typeof this.lexer.yylloc=='undefined')this.lexer.yylloc={};var yyloc=this.lexer.yylloc;lstack.push(yyloc);if(typeof this.yy.parseError==='function')this.parseError=this.yy.parseError;function popStack(n){stack.length=stack.length-2*n;vstack.length=vstack.length-n;lstack.length=lstack.length-n;}function lex(){var token;token=self.lexer.lex()||1;// $end = 1\n// if token isn't its numeric value, convert\nif(typeof token!=='number'){token=self.symbols_[token]||token;}return token;}var symbol,preErrorSymbol,state,action,a,r,yyval={},p,len,newState,expected;while(true){// retreive state number from top of stack\nstate=stack[stack.length-1];// use default actions if available\nif(this.defaultActions[state]){action=this.defaultActions[state];}else{if(symbol==null)symbol=lex();// read action for current state and first input\naction=table[state]&&table[state][symbol];}// handle parse error\n_handle_error:if(typeof action==='undefined'||!action.length||!action[0]){if(!recovering){// Report error\nexpected=[];for(p in table[state])if(this.terminals_[p]&&p>2){expected.push(\"'\"+this.terminals_[p]+\"'\");}var errStr='';if(this.lexer.showPosition){errStr='Parse error on line '+(yylineno+1)+\":\\n\"+this.lexer.showPosition()+\"\\nExpecting \"+expected.join(', ')+\", got '\"+this.terminals_[symbol]+\"'\";}else{errStr='Parse error on line '+(yylineno+1)+\": Unexpected \"+(symbol==1/*EOF*/?\"end of input\":\"'\"+(this.terminals_[symbol]||symbol)+\"'\");}this.parseError(errStr,{text:this.lexer.match,token:this.terminals_[symbol]||symbol,line:this.lexer.yylineno,loc:yyloc,expected:expected});}// just recovered from another error\nif(recovering==3){if(symbol==EOF){throw new Error(errStr||'Parsing halted.');}// discard current lookahead and grab another\nyyleng=this.lexer.yyleng;yytext=this.lexer.yytext;yylineno=this.lexer.yylineno;yyloc=this.lexer.yylloc;symbol=lex();}// try to recover from error\nwhile(1){// check for error recovery rule in this state\nif(TERROR.toString()in table[state]){break;}if(state==0){throw new Error(errStr||'Parsing halted.');}popStack(1);state=stack[stack.length-1];}preErrorSymbol=symbol;// save the lookahead token\nsymbol=TERROR;// insert generic error symbol as new lookahead\nstate=stack[stack.length-1];action=table[state]&&table[state][TERROR];recovering=3;// allow 3 real symbols to be shifted before reporting a new error\n}// this shouldn't happen, unless resolve defaults are off\nif(action[0]instanceof Array&&action.length>1){throw new Error('Parse Error: multiple actions possible at state: '+state+', token: '+symbol);}switch(action[0]){case 1:// shift\n//this.shiftCount++;\nstack.push(symbol);vstack.push(this.lexer.yytext);lstack.push(this.lexer.yylloc);stack.push(action[1]);// push state\nsymbol=null;if(!preErrorSymbol){// normal execution/no error\nyyleng=this.lexer.yyleng;yytext=this.lexer.yytext;yylineno=this.lexer.yylineno;yyloc=this.lexer.yylloc;if(recovering>0)recovering--;}else{// error just occurred, resume old lookahead f/ before error\nsymbol=preErrorSymbol;preErrorSymbol=null;}break;case 2:// reduce\n//this.reductionCount++;\nlen=this.productions_[action[1]][1];// perform semantic action\nyyval.$=vstack[vstack.length-len];// default to $$ = $1\n// default location, uses first token for firsts, last for lasts\nyyval._$={first_line:lstack[lstack.length-(len||1)].first_line,last_line:lstack[lstack.length-1].last_line,first_column:lstack[lstack.length-(len||1)].first_column,last_column:lstack[lstack.length-1].last_column};r=this.performAction.call(yyval,yytext,yyleng,yylineno,this.yy,action[1],vstack,lstack);if(typeof r!=='undefined'){return r;}// pop off stack\nif(len){stack=stack.slice(0,-1*len*2);vstack=vstack.slice(0,-1*len);lstack=lstack.slice(0,-1*len);}stack.push(this.productions_[action[1]][0]);// push nonterminal (reduce)\nvstack.push(yyval.$);lstack.push(yyval._$);// goto new state = table[STATE][NONTERMINAL]\nnewState=table[stack[stack.length-2]][stack[stack.length-1]];stack.push(newState);break;case 3:// accept\nreturn true;}}return true;}};/* Jison generated lexer */var lexer=function(){var lexer={EOF:1,parseError:function parseError(str,hash){if(this.yy.parseError){this.yy.parseError(str,hash);}else{throw new Error(str);}},setInput:function(input){this._input=input;this._more=this._less=this.done=false;this.yylineno=this.yyleng=0;this.yytext=this.matched=this.match='';this.conditionStack=['INITIAL'];this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0};return this;},input:function(){var ch=this._input[0];this.yytext+=ch;this.yyleng++;this.match+=ch;this.matched+=ch;var lines=ch.match(/\\n/);if(lines)this.yylineno++;this._input=this._input.slice(1);return ch;},unput:function(ch){this._input=ch+this._input;return this;},more:function(){this._more=true;return this;},less:function(n){this._input=this.match.slice(n)+this._input;},pastInput:function(){var past=this.matched.substr(0,this.matched.length-this.match.length);return(past.length>20?'...':'')+past.substr(-20).replace(/\\n/g,\"\");},upcomingInput:function(){var next=this.match;if(next.length<20){next+=this._input.substr(0,20-next.length);}return(next.substr(0,20)+(next.length>20?'...':'')).replace(/\\n/g,\"\");},showPosition:function(){var pre=this.pastInput();var c=new Array(pre.length+1).join(\"-\");return pre+this.upcomingInput()+\"\\n\"+c+\"^\";},next:function(){if(this.done){return this.EOF;}if(!this._input)this.done=true;var token,match,tempMatch,index,col,lines;if(!this._more){this.yytext='';this.match='';}var rules=this._currentRules();for(var i=0;i<rules.length;i++){tempMatch=this._input.match(this.rules[rules[i]]);if(tempMatch&&(!match||tempMatch[0].length>match[0].length)){match=tempMatch;index=i;if(!this.options.flex)break;}}if(match){lines=match[0].match(/\\n.*/g);if(lines)this.yylineno+=lines.length;this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:lines?lines[lines.length-1].length-1:this.yylloc.last_column+match[0].length};this.yytext+=match[0];this.match+=match[0];this.yyleng=this.yytext.length;this._more=false;this._input=this._input.slice(match[0].length);this.matched+=match[0];token=this.performAction.call(this,this.yy,this,rules[index],this.conditionStack[this.conditionStack.length-1]);if(this.done&&this._input)this.done=false;if(token)return token;else return;}if(this._input===\"\"){return this.EOF;}else{this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\\n'+this.showPosition(),{text:\"\",token:null,line:this.yylineno});}},lex:function lex(){var r=this.next();if(typeof r!=='undefined'){return r;}else{return this.lex();}},begin:function begin(condition){this.conditionStack.push(condition);},popState:function popState(){return this.conditionStack.pop();},_currentRules:function _currentRules(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules;},topState:function(){return this.conditionStack[this.conditionStack.length-2];},pushState:function begin(condition){this.begin(condition);}};lexer.options={};lexer.performAction=function anonymous(yy,yy_,$avoiding_name_collisions,YY_START){var YYSTATE=YY_START;switch($avoiding_name_collisions){case 0:/* skip whitespace */break;case 1:return 6;break;case 2:yy_.yytext=yy_.yytext.substr(1,yy_.yyleng-2);return 4;break;case 3:return 17;break;case 4:return 18;break;case 5:return 23;break;case 6:return 24;break;case 7:return 22;break;case 8:return 21;break;case 9:return 10;break;case 10:return 11;break;case 11:return 8;break;case 12:return 14;break;case 13:return'INVALID';break;}};lexer.rules=[/^(?:\\s+)/,/^(?:(-?([0-9]|[1-9][0-9]+))(\\.[0-9]+)?([eE][-+]?[0-9]+)?\\b)/,/^(?:\"(?:\\\\[\\\\\"bfnrt/]|\\\\u[a-fA-F0-9]{4}|[^\\\\\\0-\\x09\\x0a-\\x1f\"])*\")/,/^(?:\\{)/,/^(?:\\})/,/^(?:\\[)/,/^(?:\\])/,/^(?:,)/,/^(?::)/,/^(?:true\\b)/,/^(?:false\\b)/,/^(?:null\\b)/,/^(?:$)/,/^(?:.)/];lexer.conditions={\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13],\"inclusive\":true}};;return lexer;}();parser.lexer=lexer;return parser;}();if(true){exports.parser=jsonlint;exports.parse=jsonlint.parse.bind(jsonlint);}/***/},/* 56 */ /***/function(module,exports){'use strict';/**\r\n\t * @constructor SearchBox\r\n\t * Create a search box in given HTML container\r\n\t * @param {JSONEditor} editor The JSON Editor to attach to\r\n\t * @param {Element} container HTML container element of where to\r\n\t * create the search box\r\n\t */function SearchBox(editor,container){var searchBox=this;this.editor=editor;this.timeout=undefined;this.delay=200;// ms\nthis.lastText=undefined;this.dom={};this.dom.container=container;var table=document.createElement('table');this.dom.table=table;table.className='jsoneditor-search';container.appendChild(table);var tbody=document.createElement('tbody');this.dom.tbody=tbody;table.appendChild(tbody);var tr=document.createElement('tr');tbody.appendChild(tr);var td=document.createElement('td');tr.appendChild(td);var results=document.createElement('div');this.dom.results=results;results.className='jsoneditor-results';td.appendChild(results);td=document.createElement('td');tr.appendChild(td);var divInput=document.createElement('div');this.dom.input=divInput;divInput.className='jsoneditor-frame';divInput.title='Search fields and values';td.appendChild(divInput);// table to contain the text input and search button\nvar tableInput=document.createElement('table');divInput.appendChild(tableInput);var tbodySearch=document.createElement('tbody');tableInput.appendChild(tbodySearch);tr=document.createElement('tr');tbodySearch.appendChild(tr);var refreshSearch=document.createElement('button');refreshSearch.type='button';refreshSearch.className='jsoneditor-refresh';td=document.createElement('td');td.appendChild(refreshSearch);tr.appendChild(td);var search=document.createElement('input');// search.type = 'button';\nthis.dom.search=search;search.oninput=function(event){searchBox._onDelayedSearch(event);};search.onchange=function(event){// For IE 9\nsearchBox._onSearch();};search.onkeydown=function(event){searchBox._onKeyDown(event);};search.onkeyup=function(event){searchBox._onKeyUp(event);};refreshSearch.onclick=function(event){search.select();};// TODO: ESC in FF restores the last input, is a FF bug, https://bugzilla.mozilla.org/show_bug.cgi?id=598819\ntd=document.createElement('td');td.appendChild(search);tr.appendChild(td);var searchNext=document.createElement('button');searchNext.type='button';searchNext.title='Next result (Enter)';searchNext.className='jsoneditor-next';searchNext.onclick=function(){searchBox.next();};td=document.createElement('td');td.appendChild(searchNext);tr.appendChild(td);var searchPrevious=document.createElement('button');searchPrevious.type='button';searchPrevious.title='Previous result (Shift+Enter)';searchPrevious.className='jsoneditor-previous';searchPrevious.onclick=function(){searchBox.previous();};td=document.createElement('td');td.appendChild(searchPrevious);tr.appendChild(td);}/**\r\n\t * Go to the next search result\r\n\t * @param {boolean} [focus] If true, focus will be set to the next result\r\n\t * focus is false by default.\r\n\t */SearchBox.prototype.next=function(focus){if(this.results!=undefined){var index=this.resultIndex!=undefined?this.resultIndex+1:0;if(index>this.results.length-1){index=0;}this._setActiveResult(index,focus);}};/**\r\n\t * Go to the prevous search result\r\n\t * @param {boolean} [focus] If true, focus will be set to the next result\r\n\t * focus is false by default.\r\n\t */SearchBox.prototype.previous=function(focus){if(this.results!=undefined){var max=this.results.length-1;var index=this.resultIndex!=undefined?this.resultIndex-1:max;if(index<0){index=max;}this._setActiveResult(index,focus);}};/**\r\n\t * Set new value for the current active result\r\n\t * @param {Number} index\r\n\t * @param {boolean} [focus] If true, focus will be set to the next result.\r\n\t * focus is false by default.\r\n\t * @private\r\n\t */SearchBox.prototype._setActiveResult=function(index,focus){// de-activate current active result\nif(this.activeResult){var prevNode=this.activeResult.node;var prevElem=this.activeResult.elem;if(prevElem=='field'){delete prevNode.searchFieldActive;}else{delete prevNode.searchValueActive;}prevNode.updateDom();}if(!this.results||!this.results[index]){// out of range, set to undefined\nthis.resultIndex=undefined;this.activeResult=undefined;return;}this.resultIndex=index;// set new node active\nvar node=this.results[this.resultIndex].node;var elem=this.results[this.resultIndex].elem;if(elem=='field'){node.searchFieldActive=true;}else{node.searchValueActive=true;}this.activeResult=this.results[this.resultIndex];node.updateDom();// TODO: not so nice that the focus is only set after the animation is finished\nnode.scrollTo(function(){if(focus){node.focus(elem);}});};/**\r\n\t * Cancel any running onDelayedSearch.\r\n\t * @private\r\n\t */SearchBox.prototype._clearDelay=function(){if(this.timeout!=undefined){clearTimeout(this.timeout);delete this.timeout;}};/**\r\n\t * Start a timer to execute a search after a short delay.\r\n\t * Used for reducing the number of searches while typing.\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */SearchBox.prototype._onDelayedSearch=function(event){// execute the search after a short delay (reduces the number of\n// search actions while typing in the search text box)\nthis._clearDelay();var searchBox=this;this.timeout=setTimeout(function(event){searchBox._onSearch();},this.delay);};/**\r\n\t * Handle onSearch event\r\n\t * @param {boolean} [forceSearch] If true, search will be executed again even\r\n\t * when the search text is not changed.\r\n\t * Default is false.\r\n\t * @private\r\n\t */SearchBox.prototype._onSearch=function(forceSearch){this._clearDelay();var value=this.dom.search.value;var text=value.length>0?value:undefined;if(text!=this.lastText||forceSearch){// only search again when changed\nthis.lastText=text;this.results=this.editor.search(text);this._setActiveResult(undefined);// display search results\nif(text!=undefined){var resultCount=this.results.length;switch(resultCount){case 0:this.dom.results.innerHTML='no&nbsp;results';break;case 1:this.dom.results.innerHTML='1&nbsp;result';break;default:this.dom.results.innerHTML=resultCount+'&nbsp;results';break;}}else{this.dom.results.innerHTML='';}}};/**\r\n\t * Handle onKeyDown event in the input box\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */SearchBox.prototype._onKeyDown=function(event){var keynum=event.which;if(keynum==27){// ESC\nthis.dom.search.value='';// clear search\nthis._onSearch();event.preventDefault();event.stopPropagation();}else if(keynum==13){// Enter\nif(event.ctrlKey){// force to search again\nthis._onSearch(true);}else if(event.shiftKey){// move to the previous search result\nthis.previous();}else{// move to the next search result\nthis.next();}event.preventDefault();event.stopPropagation();}};/**\r\n\t * Handle onKeyUp event in the input box\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */SearchBox.prototype._onKeyUp=function(event){var keynum=event.keyCode;if(keynum!=27&&keynum!=13){// !show and !Enter\nthis._onDelayedSearch(event);// For IE 9\n}};/**\r\n\t * Clear the search results\r\n\t */SearchBox.prototype.clear=function(){this.dom.search.value='';this._onSearch();};/**\r\n\t * Destroy the search box\r\n\t */SearchBox.prototype.destroy=function(){this.editor=null;this.dom.container.removeChild(this.dom.table);this.dom=null;this.results=null;this.activeResult=null;this._clearDelay();};module.exports=SearchBox;/***/},/* 57 */ /***/function(module,exports,__webpack_require__){'use strict';var util=__webpack_require__(54);/**\r\n\t * A context menu\r\n\t * @param {Object[]} items Array containing the menu structure\r\n\t * TODO: describe structure\r\n\t * @param {Object} [options] Object with options. Available options:\r\n\t * {function} close Callback called when the\r\n\t * context menu is being closed.\r\n\t * @constructor\r\n\t */function ContextMenu(items,options){this.dom={};var me=this;var dom=this.dom;this.anchor=undefined;this.items=items;this.eventListeners={};this.selection=undefined;// holds the selection before the menu was opened\nthis.onClose=options?options.close:undefined;// create root element\nvar root=document.createElement('div');root.className='jsoneditor-contextmenu-root';dom.root=root;// create a container element\nvar menu=document.createElement('div');menu.className='jsoneditor-contextmenu';dom.menu=menu;root.appendChild(menu);// create a list to hold the menu items\nvar list=document.createElement('ul');list.className='jsoneditor-menu';menu.appendChild(list);dom.list=list;dom.items=[];// list with all buttons\n// create a (non-visible) button to set the focus to the menu\nvar focusButton=document.createElement('button');focusButton.type='button';dom.focusButton=focusButton;var li=document.createElement('li');li.style.overflow='hidden';li.style.height='0';li.appendChild(focusButton);list.appendChild(li);function createMenuItems(list,domItems,items){items.forEach(function(item){if(item.type=='separator'){// create a separator\nvar separator=document.createElement('div');separator.className='jsoneditor-separator';li=document.createElement('li');li.appendChild(separator);list.appendChild(li);}else{var domItem={};// create a menu item\nvar li=document.createElement('li');list.appendChild(li);// create a button in the menu item\nvar button=document.createElement('button');button.type='button';button.className=item.className;domItem.button=button;if(item.title){button.title=item.title;}if(item.click){button.onclick=function(event){event.preventDefault();me.hide();item.click();};}li.appendChild(button);// create the contents of the button\nif(item.submenu){// add the icon to the button\nvar divIcon=document.createElement('div');divIcon.className='jsoneditor-icon';button.appendChild(divIcon);button.appendChild(document.createTextNode(item.text));var buttonSubmenu;if(item.click){// submenu and a button with a click handler\nbutton.className+=' jsoneditor-default';var buttonExpand=document.createElement('button');buttonExpand.type='button';domItem.buttonExpand=buttonExpand;buttonExpand.className='jsoneditor-expand';buttonExpand.innerHTML='<div class=\"jsoneditor-expand\"></div>';li.appendChild(buttonExpand);if(item.submenuTitle){buttonExpand.title=item.submenuTitle;}buttonSubmenu=buttonExpand;}else{// submenu and a button without a click handler\nvar divExpand=document.createElement('div');divExpand.className='jsoneditor-expand';button.appendChild(divExpand);buttonSubmenu=button;}// attach a handler to expand/collapse the submenu\nbuttonSubmenu.onclick=function(event){event.preventDefault();me._onExpandItem(domItem);buttonSubmenu.focus();};// create the submenu\nvar domSubItems=[];domItem.subItems=domSubItems;var ul=document.createElement('ul');domItem.ul=ul;ul.className='jsoneditor-menu';ul.style.height='0';li.appendChild(ul);createMenuItems(ul,domSubItems,item.submenu);}else{// no submenu, just a button with clickhandler\nbutton.innerHTML='<div class=\"jsoneditor-icon\"></div>'+item.text;}domItems.push(domItem);}});}createMenuItems(list,this.dom.items,items);// TODO: when the editor is small, show the submenu on the right instead of inline?\n// calculate the max height of the menu with one submenu expanded\nthis.maxHeight=0;// height in pixels\nitems.forEach(function(item){var height=(items.length+(item.submenu?item.submenu.length:0))*24;me.maxHeight=Math.max(me.maxHeight,height);});}/**\r\n\t * Get the currently visible buttons\r\n\t * @return {Array.<HTMLElement>} buttons\r\n\t * @private\r\n\t */ContextMenu.prototype._getVisibleButtons=function(){var buttons=[];var me=this;this.dom.items.forEach(function(item){buttons.push(item.button);if(item.buttonExpand){buttons.push(item.buttonExpand);}if(item.subItems&&item==me.expandedItem){item.subItems.forEach(function(subItem){buttons.push(subItem.button);if(subItem.buttonExpand){buttons.push(subItem.buttonExpand);}// TODO: change to fully recursive method\n});}});return buttons;};// currently displayed context menu, a singleton. We may only have one visible context menu\nContextMenu.visibleMenu=undefined;/**\r\n\t * Attach the menu to an anchor\r\n\t * @param {HTMLElement} anchor Anchor where the menu will be attached\r\n\t * as sibling.\r\n\t * @param {HTMLElement} [contentWindow] The DIV with with the (scrollable) contents\r\n\t */ContextMenu.prototype.show=function(anchor,contentWindow){this.hide();// determine whether to display the menu below or above the anchor\nvar showBelow=true;if(contentWindow){var anchorRect=anchor.getBoundingClientRect();var contentRect=contentWindow.getBoundingClientRect();if(anchorRect.bottom+this.maxHeight<contentRect.bottom){// fits below -> show below\n}else if(anchorRect.top-this.maxHeight>contentRect.top){// fits above -> show above\nshowBelow=false;}else{// doesn't fit above nor below -> show below\n}}// position the menu\nif(showBelow){// display the menu below the anchor\nvar anchorHeight=anchor.offsetHeight;this.dom.menu.style.left='0px';this.dom.menu.style.top=anchorHeight+'px';this.dom.menu.style.bottom='';}else{// display the menu above the anchor\nthis.dom.menu.style.left='0px';this.dom.menu.style.top='';this.dom.menu.style.bottom='0px';}// attach the menu to the parent of the anchor\nvar parent=anchor.parentNode;parent.insertBefore(this.dom.root,parent.firstChild);// create and attach event listeners\nvar me=this;var list=this.dom.list;this.eventListeners.mousedown=util.addEventListener(window,'mousedown',function(event){// hide menu on click outside of the menu\nvar target=event.target;if(target!=list&&!me._isChildOf(target,list)){me.hide();event.stopPropagation();event.preventDefault();}});this.eventListeners.keydown=util.addEventListener(window,'keydown',function(event){me._onKeyDown(event);});// move focus to the first button in the context menu\nthis.selection=util.getSelection();this.anchor=anchor;setTimeout(function(){me.dom.focusButton.focus();},0);if(ContextMenu.visibleMenu){ContextMenu.visibleMenu.hide();}ContextMenu.visibleMenu=this;};/**\r\n\t * Hide the context menu if visible\r\n\t */ContextMenu.prototype.hide=function(){// remove the menu from the DOM\nif(this.dom.root.parentNode){this.dom.root.parentNode.removeChild(this.dom.root);if(this.onClose){this.onClose();}}// remove all event listeners\n// all event listeners are supposed to be attached to document.\nfor(var name in this.eventListeners){if(this.eventListeners.hasOwnProperty(name)){var fn=this.eventListeners[name];if(fn){util.removeEventListener(window,name,fn);}delete this.eventListeners[name];}}if(ContextMenu.visibleMenu==this){ContextMenu.visibleMenu=undefined;}};/**\r\n\t * Expand a submenu\r\n\t * Any currently expanded submenu will be hided.\r\n\t * @param {Object} domItem\r\n\t * @private\r\n\t */ContextMenu.prototype._onExpandItem=function(domItem){var me=this;var alreadyVisible=domItem==this.expandedItem;// hide the currently visible submenu\nvar expandedItem=this.expandedItem;if(expandedItem){//var ul = expandedItem.ul;\nexpandedItem.ul.style.height='0';expandedItem.ul.style.padding='';setTimeout(function(){if(me.expandedItem!=expandedItem){expandedItem.ul.style.display='';util.removeClassName(expandedItem.ul.parentNode,'jsoneditor-selected');}},300);// timeout duration must match the css transition duration\nthis.expandedItem=undefined;}if(!alreadyVisible){var ul=domItem.ul;ul.style.display='block';var height=ul.clientHeight;// force a reflow in Firefox\nsetTimeout(function(){if(me.expandedItem==domItem){ul.style.height=ul.childNodes.length*24+'px';ul.style.padding='5px 10px';}},0);util.addClassName(ul.parentNode,'jsoneditor-selected');this.expandedItem=domItem;}};/**\r\n\t * Handle onkeydown event\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */ContextMenu.prototype._onKeyDown=function(event){var target=event.target;var keynum=event.which;var handled=false;var buttons,targetIndex,prevButton,nextButton;if(keynum==27){// ESC\n// hide the menu on ESC key\n// restore previous selection and focus\nif(this.selection){util.setSelection(this.selection);}if(this.anchor){this.anchor.focus();}this.hide();handled=true;}else if(keynum==9){// Tab\nif(!event.shiftKey){// Tab\nbuttons=this._getVisibleButtons();targetIndex=buttons.indexOf(target);if(targetIndex==buttons.length-1){// move to first button\nbuttons[0].focus();handled=true;}}else{// Shift+Tab\nbuttons=this._getVisibleButtons();targetIndex=buttons.indexOf(target);if(targetIndex==0){// move to last button\nbuttons[buttons.length-1].focus();handled=true;}}}else if(keynum==37){// Arrow Left\nif(target.className=='jsoneditor-expand'){buttons=this._getVisibleButtons();targetIndex=buttons.indexOf(target);prevButton=buttons[targetIndex-1];if(prevButton){prevButton.focus();}}handled=true;}else if(keynum==38){// Arrow Up\nbuttons=this._getVisibleButtons();targetIndex=buttons.indexOf(target);prevButton=buttons[targetIndex-1];if(prevButton&&prevButton.className=='jsoneditor-expand'){// skip expand button\nprevButton=buttons[targetIndex-2];}if(!prevButton){// move to last button\nprevButton=buttons[buttons.length-1];}if(prevButton){prevButton.focus();}handled=true;}else if(keynum==39){// Arrow Right\nbuttons=this._getVisibleButtons();targetIndex=buttons.indexOf(target);nextButton=buttons[targetIndex+1];if(nextButton&&nextButton.className=='jsoneditor-expand'){nextButton.focus();}handled=true;}else if(keynum==40){// Arrow Down\nbuttons=this._getVisibleButtons();targetIndex=buttons.indexOf(target);nextButton=buttons[targetIndex+1];if(nextButton&&nextButton.className=='jsoneditor-expand'){// skip expand button\nnextButton=buttons[targetIndex+2];}if(!nextButton){// move to first button\nnextButton=buttons[0];}if(nextButton){nextButton.focus();handled=true;}handled=true;}// TODO: arrow left and right\nif(handled){event.stopPropagation();event.preventDefault();}};/**\r\n\t * Test if an element is a child of a parent element.\r\n\t * @param {Element} child\r\n\t * @param {Element} parent\r\n\t * @return {boolean} isChild\r\n\t */ContextMenu.prototype._isChildOf=function(child,parent){var e=child.parentNode;while(e){if(e==parent){return true;}e=e.parentNode;}return false;};module.exports=ContextMenu;/***/},/* 58 */ /***/function(module,exports,__webpack_require__){'use strict';var naturalSort=__webpack_require__(59);var ContextMenu=__webpack_require__(57);var appendNodeFactory=__webpack_require__(60);var util=__webpack_require__(54);/**\r\n\t * @constructor Node\r\n\t * Create a new Node\r\n\t * @param {./treemode} editor\r\n\t * @param {Object} [params] Can contain parameters:\r\n\t * {string} field\r\n\t * {boolean} fieldEditable\r\n\t * {*} value\r\n\t * {String} type Can have values 'auto', 'array',\r\n\t * 'object', or 'string'.\r\n\t */function Node(editor,params){/** @type {./treemode} */this.editor=editor;this.dom={};this.expanded=false;if(params&&params instanceof Object){this.setField(params.field,params.fieldEditable);this.setValue(params.value,params.type);}else{this.setField('');this.setValue(null);}this._debouncedOnChangeValue=util.debounce(this._onChangeValue.bind(this),Node.prototype.DEBOUNCE_INTERVAL);this._debouncedOnChangeField=util.debounce(this._onChangeField.bind(this),Node.prototype.DEBOUNCE_INTERVAL);}// debounce interval for keyboard input in milliseconds\nNode.prototype.DEBOUNCE_INTERVAL=150;/**\r\n\t * Determine whether the field and/or value of this node are editable\r\n\t * @private\r\n\t */Node.prototype._updateEditability=function(){this.editable={field:true,value:true};if(this.editor){this.editable.field=this.editor.options.mode==='tree';this.editable.value=this.editor.options.mode!=='view';if((this.editor.options.mode==='tree'||this.editor.options.mode==='form')&&typeof this.editor.options.onEditable==='function'){var editable=this.editor.options.onEditable({field:this.field,value:this.value,path:this.getPath()});if(typeof editable==='boolean'){this.editable.field=editable;this.editable.value=editable;}else{if(typeof editable.field==='boolean')this.editable.field=editable.field;if(typeof editable.value==='boolean')this.editable.value=editable.value;}}}};/**\r\n\t * Get the path of this node\r\n\t * @return {String[]} Array containing the path to this node\r\n\t */Node.prototype.getPath=function(){var node=this;var path=[];while(node){var field=!node.parent?undefined// do not add an (optional) field name of the root node\n:node.parent.type!='array'?node.field:node.index;if(field!==undefined){path.unshift(field);}node=node.parent;}return path;};/**\r\n\t * Find a Node from a JSON path like '.items[3].name'\r\n\t * @param {string} jsonPath\r\n\t * @return {Node | null} Returns the Node when found, returns null if not found\r\n\t */Node.prototype.findNode=function(jsonPath){var path=util.parsePath(jsonPath);var node=this;while(node&&path.length>0){var prop=path.shift();if(typeof prop==='number'){if(node.type!=='array'){throw new Error('Cannot get child node at index '+prop+': node is no array');}node=node.childs[prop];}else{// string\nif(node.type!=='object'){throw new Error('Cannot get child node '+prop+': node is no object');}node=node.childs.filter(function(child){return child.field===prop;})[0];}}return node;};/**\r\n\t * Find all parents of this node. The parents are ordered from root node towards\r\n\t * the original node.\r\n\t * @return {Array.<Node>}\r\n\t */Node.prototype.findParents=function(){var parents=[];var parent=this.parent;while(parent){parents.unshift(parent);parent=parent.parent;}return parents;};/**\r\n\t *\r\n\t * @param {{dataPath: string, keyword: string, message: string, params: Object, schemaPath: string} | null} error\r\n\t * @param {Node} [child] When this is the error of a parent node, pointing\r\n\t * to an invalid child node, the child node itself\r\n\t * can be provided. If provided, clicking the error\r\n\t * icon will set focus to the invalid child node.\r\n\t */Node.prototype.setError=function(error,child){// ensure the dom exists\nthis.getDom();this.error=error;var tdError=this.dom.tdError;if(error){if(!tdError){tdError=document.createElement('td');this.dom.tdError=tdError;this.dom.tdValue.parentNode.appendChild(tdError);}var popover=document.createElement('div');popover.className='jsoneditor-popover jsoneditor-right';popover.appendChild(document.createTextNode(error.message));var button=document.createElement('button');button.type='button';button.className='jsoneditor-schema-error';button.appendChild(popover);// update the direction of the popover\nbutton.onmouseover=button.onfocus=function updateDirection(){var directions=['right','above','below','left'];for(var i=0;i<directions.length;i++){var direction=directions[i];popover.className='jsoneditor-popover jsoneditor-'+direction;var contentRect=this.editor.content.getBoundingClientRect();var popoverRect=popover.getBoundingClientRect();var margin=20;// account for a scroll bar\nvar fit=util.insideRect(contentRect,popoverRect,margin);if(fit){break;}}}.bind(this);// when clicking the error icon, expand all nodes towards the invalid\n// child node, and set focus to the child node\nif(child){button.onclick=function showInvalidNode(){child.findParents().forEach(function(parent){parent.expand(false);});child.scrollTo(function(){child.focus();});};}// apply the error message to the node\nwhile(tdError.firstChild){tdError.removeChild(tdError.firstChild);}tdError.appendChild(button);}else{if(tdError){this.dom.tdError.parentNode.removeChild(this.dom.tdError);delete this.dom.tdError;}}};/**\r\n\t * Get the index of this node: the index in the list of childs where this\r\n\t * node is part of\r\n\t * @return {number} Returns the index, or -1 if this is the root node\r\n\t */Node.prototype.getIndex=function(){return this.parent?this.parent.childs.indexOf(this):-1;};/**\r\n\t * Set parent node\r\n\t * @param {Node} parent\r\n\t */Node.prototype.setParent=function(parent){this.parent=parent;};/**\r\n\t * Set field\r\n\t * @param {String} field\r\n\t * @param {boolean} [fieldEditable]\r\n\t */Node.prototype.setField=function(field,fieldEditable){this.field=field;this.previousField=field;this.fieldEditable=fieldEditable===true;};/**\r\n\t * Get field\r\n\t * @return {String}\r\n\t */Node.prototype.getField=function(){if(this.field===undefined){this._getDomField();}return this.field;};/**\r\n\t * Set value. Value is a JSON structure or an element String, Boolean, etc.\r\n\t * @param {*} value\r\n\t * @param {String} [type] Specify the type of the value. Can be 'auto',\r\n\t * 'array', 'object', or 'string'\r\n\t */Node.prototype.setValue=function(value,type){var childValue,child;// first clear all current childs (if any)\nvar childs=this.childs;if(childs){while(childs.length){this.removeChild(childs[0]);}}// TODO: remove the DOM of this Node\nthis.type=this._getType(value);// check if type corresponds with the provided type\nif(type&&type!=this.type){if(type=='string'&&this.type=='auto'){this.type=type;}else{throw new Error('Type mismatch: '+'cannot cast value of type \"'+this.type+' to the specified type \"'+type+'\"');}}if(this.type=='array'){// array\nthis.childs=[];for(var i=0,iMax=value.length;i<iMax;i++){childValue=value[i];if(childValue!==undefined&&!(childValue instanceof Function)){// ignore undefined and functions\nchild=new Node(this.editor,{value:childValue});this.appendChild(child);}}this.value='';}else if(this.type=='object'){// object\nthis.childs=[];for(var childField in value){if(value.hasOwnProperty(childField)){childValue=value[childField];if(childValue!==undefined&&!(childValue instanceof Function)){// ignore undefined and functions\nchild=new Node(this.editor,{field:childField,value:childValue});this.appendChild(child);}}}this.value='';// sort object keys\nif(this.editor.options.sortObjectKeys===true){this.sort('asc');}}else{// value\nthis.childs=undefined;this.value=value;}this.previousValue=this.value;};/**\r\n\t * Get value. Value is a JSON structure\r\n\t * @return {*} value\r\n\t */Node.prototype.getValue=function(){//var childs, i, iMax;\nif(this.type=='array'){var arr=[];this.childs.forEach(function(child){arr.push(child.getValue());});return arr;}else if(this.type=='object'){var obj={};this.childs.forEach(function(child){obj[child.getField()]=child.getValue();});return obj;}else{if(this.value===undefined){this._getDomValue();}return this.value;}};/**\r\n\t * Get the nesting level of this node\r\n\t * @return {Number} level\r\n\t */Node.prototype.getLevel=function(){return this.parent?this.parent.getLevel()+1:0;};/**\r\n\t * Get path of the root node till the current node\r\n\t * @return {Node[]} Returns an array with nodes\r\n\t */Node.prototype.getNodePath=function(){var path=this.parent?this.parent.getNodePath():[];path.push(this);return path;};/**\r\n\t * Create a clone of a node\r\n\t * The complete state of a clone is copied, including whether it is expanded or\r\n\t * not. The DOM elements are not cloned.\r\n\t * @return {Node} clone\r\n\t */Node.prototype.clone=function(){var clone=new Node(this.editor);clone.type=this.type;clone.field=this.field;clone.fieldInnerText=this.fieldInnerText;clone.fieldEditable=this.fieldEditable;clone.value=this.value;clone.valueInnerText=this.valueInnerText;clone.expanded=this.expanded;if(this.childs){// an object or array\nvar cloneChilds=[];this.childs.forEach(function(child){var childClone=child.clone();childClone.setParent(clone);cloneChilds.push(childClone);});clone.childs=cloneChilds;}else{// a value\nclone.childs=undefined;}return clone;};/**\r\n\t * Expand this node and optionally its childs.\r\n\t * @param {boolean} [recurse] Optional recursion, true by default. When\r\n\t * true, all childs will be expanded recursively\r\n\t */Node.prototype.expand=function(recurse){if(!this.childs){return;}// set this node expanded\nthis.expanded=true;if(this.dom.expand){this.dom.expand.className='jsoneditor-expanded';}this.showChilds();if(recurse!==false){this.childs.forEach(function(child){child.expand(recurse);});}};/**\r\n\t * Collapse this node and optionally its childs.\r\n\t * @param {boolean} [recurse] Optional recursion, true by default. When\r\n\t * true, all childs will be collapsed recursively\r\n\t */Node.prototype.collapse=function(recurse){if(!this.childs){return;}this.hideChilds();// collapse childs in case of recurse\nif(recurse!==false){this.childs.forEach(function(child){child.collapse(recurse);});}// make this node collapsed\nif(this.dom.expand){this.dom.expand.className='jsoneditor-collapsed';}this.expanded=false;};/**\r\n\t * Recursively show all childs when they are expanded\r\n\t */Node.prototype.showChilds=function(){var childs=this.childs;if(!childs){return;}if(!this.expanded){return;}var tr=this.dom.tr;var table=tr?tr.parentNode:undefined;if(table){// show row with append button\nvar append=this.getAppend();var nextTr=tr.nextSibling;if(nextTr){table.insertBefore(append,nextTr);}else{table.appendChild(append);}// show childs\nthis.childs.forEach(function(child){table.insertBefore(child.getDom(),append);child.showChilds();});}};/**\r\n\t * Hide the node with all its childs\r\n\t */Node.prototype.hide=function(){var tr=this.dom.tr;var table=tr?tr.parentNode:undefined;if(table){table.removeChild(tr);}this.hideChilds();};/**\r\n\t * Recursively hide all childs\r\n\t */Node.prototype.hideChilds=function(){var childs=this.childs;if(!childs){return;}if(!this.expanded){return;}// hide append row\nvar append=this.getAppend();if(append.parentNode){append.parentNode.removeChild(append);}// hide childs\nthis.childs.forEach(function(child){child.hide();});};/**\r\n\t * Add a new child to the node.\r\n\t * Only applicable when Node value is of type array or object\r\n\t * @param {Node} node\r\n\t */Node.prototype.appendChild=function(node){if(this._hasChilds()){// adjust the link to the parent\nnode.setParent(this);node.fieldEditable=this.type=='object';if(this.type=='array'){node.index=this.childs.length;}this.childs.push(node);if(this.expanded){// insert into the DOM, before the appendRow\nvar newTr=node.getDom();var appendTr=this.getAppend();var table=appendTr?appendTr.parentNode:undefined;if(appendTr&&table){table.insertBefore(newTr,appendTr);}node.showChilds();}this.updateDom({'updateIndexes':true});node.updateDom({'recurse':true});}};/**\r\n\t * Move a node from its current parent to this node\r\n\t * Only applicable when Node value is of type array or object\r\n\t * @param {Node} node\r\n\t * @param {Node} beforeNode\r\n\t */Node.prototype.moveBefore=function(node,beforeNode){if(this._hasChilds()){// create a temporary row, to prevent the scroll position from jumping\n// when removing the node\nvar tbody=this.dom.tr?this.dom.tr.parentNode:undefined;if(tbody){var trTemp=document.createElement('tr');trTemp.style.height=tbody.clientHeight+'px';tbody.appendChild(trTemp);}if(node.parent){node.parent.removeChild(node);}if(beforeNode instanceof AppendNode){this.appendChild(node);}else{this.insertBefore(node,beforeNode);}if(tbody){tbody.removeChild(trTemp);}}};/**\r\n\t * Move a node from its current parent to this node\r\n\t * Only applicable when Node value is of type array or object.\r\n\t * If index is out of range, the node will be appended to the end\r\n\t * @param {Node} node\r\n\t * @param {Number} index\r\n\t */Node.prototype.moveTo=function(node,index){if(node.parent==this){// same parent\nvar currentIndex=this.childs.indexOf(node);if(currentIndex<index){// compensate the index for removal of the node itself\nindex++;}}var beforeNode=this.childs[index]||this.append;this.moveBefore(node,beforeNode);};/**\r\n\t * Insert a new child before a given node\r\n\t * Only applicable when Node value is of type array or object\r\n\t * @param {Node} node\r\n\t * @param {Node} beforeNode\r\n\t */Node.prototype.insertBefore=function(node,beforeNode){if(this._hasChilds()){if(beforeNode==this.append){// append to the child nodes\n// adjust the link to the parent\nnode.setParent(this);node.fieldEditable=this.type=='object';this.childs.push(node);}else{// insert before a child node\nvar index=this.childs.indexOf(beforeNode);if(index==-1){throw new Error('Node not found');}// adjust the link to the parent\nnode.setParent(this);node.fieldEditable=this.type=='object';this.childs.splice(index,0,node);}if(this.expanded){// insert into the DOM\nvar newTr=node.getDom();var nextTr=beforeNode.getDom();var table=nextTr?nextTr.parentNode:undefined;if(nextTr&&table){table.insertBefore(newTr,nextTr);}node.showChilds();}this.updateDom({'updateIndexes':true});node.updateDom({'recurse':true});}};/**\r\n\t * Insert a new child before a given node\r\n\t * Only applicable when Node value is of type array or object\r\n\t * @param {Node} node\r\n\t * @param {Node} afterNode\r\n\t */Node.prototype.insertAfter=function(node,afterNode){if(this._hasChilds()){var index=this.childs.indexOf(afterNode);var beforeNode=this.childs[index+1];if(beforeNode){this.insertBefore(node,beforeNode);}else{this.appendChild(node);}}};/**\r\n\t * Search in this node\r\n\t * The node will be expanded when the text is found one of its childs, else\r\n\t * it will be collapsed. Searches are case insensitive.\r\n\t * @param {String} text\r\n\t * @return {Node[]} results Array with nodes containing the search text\r\n\t */Node.prototype.search=function(text){var results=[];var index;var search=text?text.toLowerCase():undefined;// delete old search data\ndelete this.searchField;delete this.searchValue;// search in field\nif(this.field!=undefined){var field=String(this.field).toLowerCase();index=field.indexOf(search);if(index!=-1){this.searchField=true;results.push({'node':this,'elem':'field'});}// update dom\nthis._updateDomField();}// search in value\nif(this._hasChilds()){// array, object\n// search the nodes childs\nif(this.childs){var childResults=[];this.childs.forEach(function(child){childResults=childResults.concat(child.search(text));});results=results.concat(childResults);}// update dom\nif(search!=undefined){var recurse=false;if(childResults.length==0){this.collapse(recurse);}else{this.expand(recurse);}}}else{// string, auto\nif(this.value!=undefined){var value=String(this.value).toLowerCase();index=value.indexOf(search);if(index!=-1){this.searchValue=true;results.push({'node':this,'elem':'value'});}}// update dom\nthis._updateDomValue();}return results;};/**\r\n\t * Move the scroll position such that this node is in the visible area.\r\n\t * The node will not get the focus\r\n\t * @param {function(boolean)} [callback]\r\n\t */Node.prototype.scrollTo=function(callback){if(!this.dom.tr||!this.dom.tr.parentNode){// if the node is not visible, expand its parents\nvar parent=this.parent;var recurse=false;while(parent){parent.expand(recurse);parent=parent.parent;}}if(this.dom.tr&&this.dom.tr.parentNode){this.editor.scrollTo(this.dom.tr.offsetTop,callback);}};// stores the element name currently having the focus\nNode.focusElement=undefined;/**\r\n\t * Set focus to this node\r\n\t * @param {String} [elementName] The field name of the element to get the\r\n\t * focus available values: 'drag', 'menu',\r\n\t * 'expand', 'field', 'value' (default)\r\n\t */Node.prototype.focus=function(elementName){Node.focusElement=elementName;if(this.dom.tr&&this.dom.tr.parentNode){var dom=this.dom;switch(elementName){case'drag':if(dom.drag){dom.drag.focus();}else{dom.menu.focus();}break;case'menu':dom.menu.focus();break;case'expand':if(this._hasChilds()){dom.expand.focus();}else if(dom.field&&this.fieldEditable){dom.field.focus();util.selectContentEditable(dom.field);}else if(dom.value&&!this._hasChilds()){dom.value.focus();util.selectContentEditable(dom.value);}else{dom.menu.focus();}break;case'field':if(dom.field&&this.fieldEditable){dom.field.focus();util.selectContentEditable(dom.field);}else if(dom.value&&!this._hasChilds()){dom.value.focus();util.selectContentEditable(dom.value);}else if(this._hasChilds()){dom.expand.focus();}else{dom.menu.focus();}break;case'value':default:if(dom.value&&!this._hasChilds()){dom.value.focus();util.selectContentEditable(dom.value);}else if(dom.field&&this.fieldEditable){dom.field.focus();util.selectContentEditable(dom.field);}else if(this._hasChilds()){dom.expand.focus();}else{dom.menu.focus();}break;}}};/**\r\n\t * Select all text in an editable div after a delay of 0 ms\r\n\t * @param {Element} editableDiv\r\n\t */Node.select=function(editableDiv){setTimeout(function(){util.selectContentEditable(editableDiv);},0);};/**\r\n\t * Update the values from the DOM field and value of this node\r\n\t */Node.prototype.blur=function(){// retrieve the actual field and value from the DOM.\nthis._getDomValue(false);this._getDomField(false);};/**\r\n\t * Check if given node is a child. The method will check recursively to find\r\n\t * this node.\r\n\t * @param {Node} node\r\n\t * @return {boolean} containsNode\r\n\t */Node.prototype.containsNode=function(node){if(this==node){return true;}var childs=this.childs;if(childs){// TODO: use the js5 Array.some() here?\nfor(var i=0,iMax=childs.length;i<iMax;i++){if(childs[i].containsNode(node)){return true;}}}return false;};/**\r\n\t * Move given node into this node\r\n\t * @param {Node} node the childNode to be moved\r\n\t * @param {Node} beforeNode node will be inserted before given\r\n\t * node. If no beforeNode is given,\r\n\t * the node is appended at the end\r\n\t * @private\r\n\t */Node.prototype._move=function(node,beforeNode){if(node==beforeNode){// nothing to do...\nreturn;}// check if this node is not a child of the node to be moved here\nif(node.containsNode(this)){throw new Error('Cannot move a field into a child of itself');}// remove the original node\nif(node.parent){node.parent.removeChild(node);}// create a clone of the node\nvar clone=node.clone();node.clearDom();// insert or append the node\nif(beforeNode){this.insertBefore(clone,beforeNode);}else{this.appendChild(clone);}/* TODO: adjust the field name (to prevent equal field names)\r\n\t if (this.type == 'object') {\r\n\t }\r\n\t */};/**\r\n\t * Remove a child from the node.\r\n\t * Only applicable when Node value is of type array or object\r\n\t * @param {Node} node The child node to be removed;\r\n\t * @return {Node | undefined} node The removed node on success,\r\n\t * else undefined\r\n\t */Node.prototype.removeChild=function(node){if(this.childs){var index=this.childs.indexOf(node);if(index!=-1){node.hide();// delete old search results\ndelete node.searchField;delete node.searchValue;var removedNode=this.childs.splice(index,1)[0];removedNode.parent=null;this.updateDom({'updateIndexes':true});return removedNode;}}return undefined;};/**\r\n\t * Remove a child node node from this node\r\n\t * This method is equal to Node.removeChild, except that _remove fire an\r\n\t * onChange event.\r\n\t * @param {Node} node\r\n\t * @private\r\n\t */Node.prototype._remove=function(node){this.removeChild(node);};/**\r\n\t * Change the type of the value of this Node\r\n\t * @param {String} newType\r\n\t */Node.prototype.changeType=function(newType){var oldType=this.type;if(oldType==newType){// type is not changed\nreturn;}if((newType=='string'||newType=='auto')&&(oldType=='string'||oldType=='auto')){// this is an easy change\nthis.type=newType;}else{// change from array to object, or from string/auto to object/array\nvar table=this.dom.tr?this.dom.tr.parentNode:undefined;var lastTr;if(this.expanded){lastTr=this.getAppend();}else{lastTr=this.getDom();}var nextTr=lastTr&&lastTr.parentNode?lastTr.nextSibling:undefined;// hide current field and all its childs\nthis.hide();this.clearDom();// adjust the field and the value\nthis.type=newType;// adjust childs\nif(newType=='object'){if(!this.childs){this.childs=[];}this.childs.forEach(function(child,index){child.clearDom();delete child.index;child.fieldEditable=true;if(child.field==undefined){child.field='';}});if(oldType=='string'||oldType=='auto'){this.expanded=true;}}else if(newType=='array'){if(!this.childs){this.childs=[];}this.childs.forEach(function(child,index){child.clearDom();child.fieldEditable=false;child.index=index;});if(oldType=='string'||oldType=='auto'){this.expanded=true;}}else{this.expanded=false;}// create new DOM\nif(table){if(nextTr){table.insertBefore(this.getDom(),nextTr);}else{table.appendChild(this.getDom());}}this.showChilds();}if(newType=='auto'||newType=='string'){// cast value to the correct type\nif(newType=='string'){this.value=String(this.value);}else{this.value=this._stringCast(String(this.value));}this.focus();}this.updateDom({'updateIndexes':true});};/**\r\n\t * Retrieve value from DOM\r\n\t * @param {boolean} [silent] If true (default), no errors will be thrown in\r\n\t * case of invalid data\r\n\t * @private\r\n\t */Node.prototype._getDomValue=function(silent){if(this.dom.value&&this.type!='array'&&this.type!='object'){this.valueInnerText=util.getInnerText(this.dom.value);}if(this.valueInnerText!=undefined){try{// retrieve the value\nvar value;if(this.type=='string'){value=this._unescapeHTML(this.valueInnerText);}else{var str=this._unescapeHTML(this.valueInnerText);value=this._stringCast(str);}if(value!==this.value){this.value=value;this._debouncedOnChangeValue();}}catch(err){this.value=undefined;// TODO: sent an action with the new, invalid value?\nif(silent!==true){throw err;}}}};/**\r\n\t * Handle a changed value\r\n\t * @private\r\n\t */Node.prototype._onChangeValue=function(){// get current selection, then override the range such that we can select\n// the added/removed text on undo/redo\nvar oldSelection=this.editor.getSelection();if(oldSelection.range){var undoDiff=util.textDiff(String(this.value),String(this.previousValue));oldSelection.range.startOffset=undoDiff.start;oldSelection.range.endOffset=undoDiff.end;}var newSelection=this.editor.getSelection();if(newSelection.range){var redoDiff=util.textDiff(String(this.previousValue),String(this.value));newSelection.range.startOffset=redoDiff.start;newSelection.range.endOffset=redoDiff.end;}this.editor._onAction('editValue',{node:this,oldValue:this.previousValue,newValue:this.value,oldSelection:oldSelection,newSelection:newSelection});this.previousValue=this.value;};/**\r\n\t * Handle a changed field\r\n\t * @private\r\n\t */Node.prototype._onChangeField=function(){// get current selection, then override the range such that we can select\n// the added/removed text on undo/redo\nvar oldSelection=this.editor.getSelection();if(oldSelection.range){var undoDiff=util.textDiff(this.field,this.previousField);oldSelection.range.startOffset=undoDiff.start;oldSelection.range.endOffset=undoDiff.end;}var newSelection=this.editor.getSelection();if(newSelection.range){var redoDiff=util.textDiff(this.previousField,this.field);newSelection.range.startOffset=redoDiff.start;newSelection.range.endOffset=redoDiff.end;}this.editor._onAction('editField',{node:this,oldValue:this.previousField,newValue:this.field,oldSelection:oldSelection,newSelection:newSelection});this.previousField=this.field;};/**\r\n\t * Update dom value:\r\n\t * - the text color of the value, depending on the type of the value\r\n\t * - the height of the field, depending on the width\r\n\t * - background color in case it is empty\r\n\t * @private\r\n\t */Node.prototype._updateDomValue=function(){var domValue=this.dom.value;if(domValue){var classNames=['jsoneditor-value'];// set text color depending on value type\nvar value=this.value;var type=this.type=='auto'?util.type(value):this.type;var isUrl=type=='string'&&util.isUrl(value);classNames.push('jsoneditor-'+type);if(isUrl){classNames.push('jsoneditor-url');}// visual styling when empty\nvar isEmpty=String(this.value)==''&&this.type!='array'&&this.type!='object';if(isEmpty){classNames.push('jsoneditor-empty');}// highlight when there is a search result\nif(this.searchValueActive){classNames.push('jsoneditor-highlight-active');}if(this.searchValue){classNames.push('jsoneditor-highlight');}domValue.className=classNames.join(' ');// update title\nif(type=='array'||type=='object'){var count=this.childs?this.childs.length:0;domValue.title=this.type+' containing '+count+' items';}else if(isUrl&&this.editable.value){domValue.title='Ctrl+Click or Ctrl+Enter to open url in new window';}else{domValue.title='';}// show checkbox when the value is a boolean\nif(type==='boolean'&&this.editable.value){if(!this.dom.checkbox){this.dom.checkbox=document.createElement('input');this.dom.checkbox.type='checkbox';this.dom.tdCheckbox=document.createElement('td');this.dom.tdCheckbox.className='jsoneditor-tree';this.dom.tdCheckbox.appendChild(this.dom.checkbox);this.dom.tdValue.parentNode.insertBefore(this.dom.tdCheckbox,this.dom.tdValue);}this.dom.checkbox.checked=this.value;}else{// cleanup checkbox when displayed\nif(this.dom.tdCheckbox){this.dom.tdCheckbox.parentNode.removeChild(this.dom.tdCheckbox);delete this.dom.tdCheckbox;delete this.dom.checkbox;}}if(this.enum&&this.editable.value){// create select box when this node has an enum object\nif(!this.dom.select){this.dom.select=document.createElement('select');this.id=this.field+\"_\"+new Date().getUTCMilliseconds();this.dom.select.id=this.id;this.dom.select.name=this.dom.select.id;//Create the default empty option\nthis.dom.select.option=document.createElement('option');this.dom.select.option.value='';this.dom.select.option.innerHTML='--';this.dom.select.appendChild(this.dom.select.option);//Iterate all enum values and add them as options\nfor(var i=0;i<this.enum.length;i++){this.dom.select.option=document.createElement('option');this.dom.select.option.value=this.enum[i];this.dom.select.option.innerHTML=this.enum[i];if(this.dom.select.option.value==this.value){this.dom.select.option.selected=true;}this.dom.select.appendChild(this.dom.select.option);}this.dom.tdSelect=document.createElement('td');this.dom.tdSelect.className='jsoneditor-tree';this.dom.tdSelect.appendChild(this.dom.select);this.dom.tdValue.parentNode.insertBefore(this.dom.tdSelect,this.dom.tdValue);}// If the enum is inside a composite type display\n// both the simple input and the dropdown field\nif(this.schema&&!this.schema.hasOwnProperty(\"oneOf\")&&!this.schema.hasOwnProperty(\"anyOf\")&&!this.schema.hasOwnProperty(\"allOf\")){this.valueFieldHTML=this.dom.tdValue.innerHTML;this.dom.tdValue.style.visibility='hidden';this.dom.tdValue.innerHTML='';}else{delete this.valueFieldHTML;}}else{// cleanup select box when displayed\nif(this.dom.tdSelect){this.dom.tdSelect.parentNode.removeChild(this.dom.tdSelect);delete this.dom.tdSelect;delete this.dom.select;this.dom.tdValue.innerHTML=this.valueFieldHTML;this.dom.tdValue.style.visibility='';delete this.valueFieldHTML;}}// strip formatting from the contents of the editable div\nutil.stripFormatting(domValue);}};/**\r\n\t * Update dom field:\r\n\t * - the text color of the field, depending on the text\r\n\t * - the height of the field, depending on the width\r\n\t * - background color in case it is empty\r\n\t * @private\r\n\t */Node.prototype._updateDomField=function(){var domField=this.dom.field;if(domField){// make backgound color lightgray when empty\nvar isEmpty=String(this.field)==''&&this.parent.type!='array';if(isEmpty){util.addClassName(domField,'jsoneditor-empty');}else{util.removeClassName(domField,'jsoneditor-empty');}// highlight when there is a search result\nif(this.searchFieldActive){util.addClassName(domField,'jsoneditor-highlight-active');}else{util.removeClassName(domField,'jsoneditor-highlight-active');}if(this.searchField){util.addClassName(domField,'jsoneditor-highlight');}else{util.removeClassName(domField,'jsoneditor-highlight');}// strip formatting from the contents of the editable div\nutil.stripFormatting(domField);}};/**\r\n\t * Retrieve field from DOM\r\n\t * @param {boolean} [silent] If true (default), no errors will be thrown in\r\n\t * case of invalid data\r\n\t * @private\r\n\t */Node.prototype._getDomField=function(silent){if(this.dom.field&&this.fieldEditable){this.fieldInnerText=util.getInnerText(this.dom.field);}if(this.fieldInnerText!=undefined){try{var field=this._unescapeHTML(this.fieldInnerText);if(field!==this.field){this.field=field;this._debouncedOnChangeField();}}catch(err){this.field=undefined;// TODO: sent an action here, with the new, invalid value?\nif(silent!==true){throw err;}}}};/**\r\n\t * Validate this node and all it's childs\r\n\t * @return {Array.<{node: Node, error: {message: string}}>} Returns a list with duplicates\r\n\t */Node.prototype.validate=function(){var errors=[];// find duplicate keys\nif(this.type==='object'){var keys={};var duplicateKeys=[];for(var i=0;i<this.childs.length;i++){var child=this.childs[i];if(keys.hasOwnProperty(child.field)){duplicateKeys.push(child.field);}keys[child.field]=true;}if(duplicateKeys.length>0){errors=this.childs.filter(function(node){return duplicateKeys.indexOf(node.field)!==-1;}).map(function(node){return{node:node,error:{message:'duplicate key \"'+node.field+'\"'}};});}}// recurse over the childs\nif(this.childs){for(var i=0;i<this.childs.length;i++){var e=this.childs[i].validate();if(e.length>0){errors=errors.concat(e);}}}return errors;};/**\r\n\t * Clear the dom of the node\r\n\t */Node.prototype.clearDom=function(){// TODO: hide the node first?\n//this.hide();\n// TODO: recursively clear dom?\nthis.dom={};};/**\r\n\t * Get the HTML DOM TR element of the node.\r\n\t * The dom will be generated when not yet created\r\n\t * @return {Element} tr HTML DOM TR Element\r\n\t */Node.prototype.getDom=function(){var dom=this.dom;if(dom.tr){return dom.tr;}this._updateEditability();// create row\ndom.tr=document.createElement('tr');dom.tr.node=this;if(this.editor.options.mode==='tree'){// note: we take here the global setting\nvar tdDrag=document.createElement('td');if(this.editable.field){// create draggable area\nif(this.parent){var domDrag=document.createElement('button');domDrag.type='button';dom.drag=domDrag;domDrag.className='jsoneditor-dragarea';domDrag.title='Drag to move this field (Alt+Shift+Arrows)';tdDrag.appendChild(domDrag);}}dom.tr.appendChild(tdDrag);// create context menu\nvar tdMenu=document.createElement('td');var menu=document.createElement('button');menu.type='button';dom.menu=menu;menu.className='jsoneditor-contextmenu';menu.title='Click to open the actions menu (Ctrl+M)';tdMenu.appendChild(dom.menu);dom.tr.appendChild(tdMenu);}// create tree and field\nvar tdField=document.createElement('td');dom.tr.appendChild(tdField);dom.tree=this._createDomTree();tdField.appendChild(dom.tree);this.updateDom({'updateIndexes':true});return dom.tr;};/**\r\n\t * DragStart event, fired on mousedown on the dragarea at the left side of a Node\r\n\t * @param {Node[] | Node} nodes\r\n\t * @param {Event} event\r\n\t */Node.onDragStart=function(nodes,event){if(!Array.isArray(nodes)){return Node.onDragStart([nodes],event);}if(nodes.length===0){return;}var firstNode=nodes[0];var lastNode=nodes[nodes.length-1];var draggedNode=Node.getNodeFromTarget(event.target);var beforeNode=lastNode._nextSibling();var editor=firstNode.editor;// in case of multiple selected nodes, offsetY prevents the selection from\n// jumping when you start dragging one of the lower down nodes in the selection\nvar offsetY=util.getAbsoluteTop(draggedNode.dom.tr)-util.getAbsoluteTop(firstNode.dom.tr);if(!editor.mousemove){editor.mousemove=util.addEventListener(window,'mousemove',function(event){Node.onDrag(nodes,event);});}if(!editor.mouseup){editor.mouseup=util.addEventListener(window,'mouseup',function(event){Node.onDragEnd(nodes,event);});}editor.highlighter.lock();editor.drag={oldCursor:document.body.style.cursor,oldSelection:editor.getSelection(),oldBeforeNode:beforeNode,mouseX:event.pageX,offsetY:offsetY,level:firstNode.getLevel()};document.body.style.cursor='move';event.preventDefault();};/**\r\n\t * Drag event, fired when moving the mouse while dragging a Node\r\n\t * @param {Node[] | Node} nodes\r\n\t * @param {Event} event\r\n\t */Node.onDrag=function(nodes,event){if(!Array.isArray(nodes)){return Node.onDrag([nodes],event);}if(nodes.length===0){return;}// TODO: this method has grown too large. Split it in a number of methods\nvar editor=nodes[0].editor;var mouseY=event.pageY-editor.drag.offsetY;var mouseX=event.pageX;var trThis,trPrev,trNext,trFirst,trLast,trRoot;var nodePrev,nodeNext;var topThis,topPrev,topFirst,heightThis,bottomNext,heightNext;var moved=false;// TODO: add an ESC option, which resets to the original position\n// move up/down\nvar firstNode=nodes[0];trThis=firstNode.dom.tr;topThis=util.getAbsoluteTop(trThis);heightThis=trThis.offsetHeight;if(mouseY<topThis){// move up\ntrPrev=trThis;do{trPrev=trPrev.previousSibling;nodePrev=Node.getNodeFromTarget(trPrev);topPrev=trPrev?util.getAbsoluteTop(trPrev):0;}while(trPrev&&mouseY<topPrev);if(nodePrev&&!nodePrev.parent){nodePrev=undefined;}if(!nodePrev){// move to the first node\ntrRoot=trThis.parentNode.firstChild;trPrev=trRoot?trRoot.nextSibling:undefined;nodePrev=Node.getNodeFromTarget(trPrev);if(nodePrev==firstNode){nodePrev=undefined;}}if(nodePrev){// check if mouseY is really inside the found node\ntrPrev=nodePrev.dom.tr;topPrev=trPrev?util.getAbsoluteTop(trPrev):0;if(mouseY>topPrev+heightThis){nodePrev=undefined;}}if(nodePrev){nodes.forEach(function(node){nodePrev.parent.moveBefore(node,nodePrev);});moved=true;}}else{// move down\nvar lastNode=nodes[nodes.length-1];trLast=lastNode.expanded&&lastNode.append?lastNode.append.getDom():lastNode.dom.tr;trFirst=trLast?trLast.nextSibling:undefined;if(trFirst){topFirst=util.getAbsoluteTop(trFirst);trNext=trFirst;do{nodeNext=Node.getNodeFromTarget(trNext);if(trNext){bottomNext=trNext.nextSibling?util.getAbsoluteTop(trNext.nextSibling):0;heightNext=trNext?bottomNext-topFirst:0;if(nodeNext.parent.childs.length==nodes.length&&nodeNext.parent.childs[nodes.length-1]==lastNode){// We are about to remove the last child of this parent,\n// which will make the parents appendNode visible.\ntopThis+=27;// TODO: dangerous to suppose the height of the appendNode a constant of 27 px.\n}}trNext=trNext.nextSibling;}while(trNext&&mouseY>topThis+heightNext);if(nodeNext&&nodeNext.parent){// calculate the desired level\nvar diffX=mouseX-editor.drag.mouseX;var diffLevel=Math.round(diffX/24/2);var level=editor.drag.level+diffLevel;// desired level\nvar levelNext=nodeNext.getLevel();// level to be\n// find the best fitting level (move upwards over the append nodes)\ntrPrev=nodeNext.dom.tr.previousSibling;while(levelNext<level&&trPrev){nodePrev=Node.getNodeFromTarget(trPrev);var isDraggedNode=nodes.some(function(node){return node===nodePrev||nodePrev._isChildOf(node);});if(isDraggedNode){// neglect the dragged nodes themselves and their childs\n}else if(nodePrev instanceof AppendNode){var childs=nodePrev.parent.childs;if(childs.length!=nodes.length||childs[nodes.length-1]!=lastNode){// non-visible append node of a list of childs\n// consisting of not only this node (else the\n// append node will change into a visible \"empty\"\n// text when removing this node).\nnodeNext=Node.getNodeFromTarget(trPrev);levelNext=nodeNext.getLevel();}else{break;}}else{break;}trPrev=trPrev.previousSibling;}// move the node when its position is changed\nif(trLast.nextSibling!=nodeNext.dom.tr){nodes.forEach(function(node){nodeNext.parent.moveBefore(node,nodeNext);});moved=true;}}}}if(moved){// update the dragging parameters when moved\neditor.drag.mouseX=mouseX;editor.drag.level=firstNode.getLevel();}// auto scroll when hovering around the top of the editor\neditor.startAutoScroll(mouseY);event.preventDefault();};/**\r\n\t * Drag event, fired on mouseup after having dragged a node\r\n\t * @param {Node[] | Node} nodes\r\n\t * @param {Event} event\r\n\t */Node.onDragEnd=function(nodes,event){if(!Array.isArray(nodes)){return Node.onDrag([nodes],event);}if(nodes.length===0){return;}var firstNode=nodes[0];var editor=firstNode.editor;var parent=firstNode.parent;var firstIndex=parent.childs.indexOf(firstNode);var beforeNode=parent.childs[firstIndex+nodes.length]||parent.append;// set focus to the context menu button of the first node\nif(nodes[0]){nodes[0].dom.menu.focus();}var params={nodes:nodes,oldSelection:editor.drag.oldSelection,newSelection:editor.getSelection(),oldBeforeNode:editor.drag.oldBeforeNode,newBeforeNode:beforeNode};if(params.oldBeforeNode!=params.newBeforeNode){// only register this action if the node is actually moved to another place\neditor._onAction('moveNodes',params);}document.body.style.cursor=editor.drag.oldCursor;editor.highlighter.unlock();nodes.forEach(function(node){if(event.target!==node.dom.drag&&event.target!==node.dom.menu){editor.highlighter.unhighlight();}});delete editor.drag;if(editor.mousemove){util.removeEventListener(window,'mousemove',editor.mousemove);delete editor.mousemove;}if(editor.mouseup){util.removeEventListener(window,'mouseup',editor.mouseup);delete editor.mouseup;}// Stop any running auto scroll\neditor.stopAutoScroll();event.preventDefault();};/**\r\n\t * Test if this node is a child of an other node\r\n\t * @param {Node} node\r\n\t * @return {boolean} isChild\r\n\t * @private\r\n\t */Node.prototype._isChildOf=function(node){var n=this.parent;while(n){if(n==node){return true;}n=n.parent;}return false;};/**\r\n\t * Create an editable field\r\n\t * @return {Element} domField\r\n\t * @private\r\n\t */Node.prototype._createDomField=function(){return document.createElement('div');};/**\r\n\t * Set highlighting for this node and all its childs.\r\n\t * Only applied to the currently visible (expanded childs)\r\n\t * @param {boolean} highlight\r\n\t */Node.prototype.setHighlight=function(highlight){if(this.dom.tr){if(highlight){util.addClassName(this.dom.tr,'jsoneditor-highlight');}else{util.removeClassName(this.dom.tr,'jsoneditor-highlight');}if(this.append){this.append.setHighlight(highlight);}if(this.childs){this.childs.forEach(function(child){child.setHighlight(highlight);});}}};/**\r\n\t * Select or deselect a node\r\n\t * @param {boolean} selected\r\n\t * @param {boolean} [isFirst]\r\n\t */Node.prototype.setSelected=function(selected,isFirst){this.selected=selected;if(this.dom.tr){if(selected){util.addClassName(this.dom.tr,'jsoneditor-selected');}else{util.removeClassName(this.dom.tr,'jsoneditor-selected');}if(isFirst){util.addClassName(this.dom.tr,'jsoneditor-first');}else{util.removeClassName(this.dom.tr,'jsoneditor-first');}if(this.append){this.append.setSelected(selected);}if(this.childs){this.childs.forEach(function(child){child.setSelected(selected);});}}};/**\r\n\t * Update the value of the node. Only primitive types are allowed, no Object\r\n\t * or Array is allowed.\r\n\t * @param {String | Number | Boolean | null} value\r\n\t */Node.prototype.updateValue=function(value){this.value=value;this.updateDom();};/**\r\n\t * Update the field of the node.\r\n\t * @param {String} field\r\n\t */Node.prototype.updateField=function(field){this.field=field;this.updateDom();};/**\r\n\t * Update the HTML DOM, optionally recursing through the childs\r\n\t * @param {Object} [options] Available parameters:\r\n\t * {boolean} [recurse] If true, the\r\n\t * DOM of the childs will be updated recursively.\r\n\t * False by default.\r\n\t * {boolean} [updateIndexes] If true, the childs\r\n\t * indexes of the node will be updated too. False by\r\n\t * default.\r\n\t */Node.prototype.updateDom=function(options){// update level indentation\nvar domTree=this.dom.tree;if(domTree){domTree.style.marginLeft=this.getLevel()*24+'px';}// apply field to DOM\nvar domField=this.dom.field;if(domField){if(this.fieldEditable){// parent is an object\ndomField.contentEditable=this.editable.field;domField.spellcheck=false;domField.className='jsoneditor-field';}else{// parent is an array this is the root node\ndomField.className='jsoneditor-readonly';}var fieldText;if(this.index!=undefined){fieldText=this.index;}else if(this.field!=undefined){fieldText=this.field;}else if(this._hasChilds()){fieldText=this.type;}else{fieldText='';}domField.innerHTML=this._escapeHTML(fieldText);this._updateSchema();}// apply value to DOM\nvar domValue=this.dom.value;if(domValue){var count=this.childs?this.childs.length:0;if(this.type=='array'){domValue.innerHTML='['+count+']';util.addClassName(this.dom.tr,'jsoneditor-expandable');}else if(this.type=='object'){domValue.innerHTML='{'+count+'}';util.addClassName(this.dom.tr,'jsoneditor-expandable');}else{domValue.innerHTML=this._escapeHTML(this.value);util.removeClassName(this.dom.tr,'jsoneditor-expandable');}}// update field and value\nthis._updateDomField();this._updateDomValue();// update childs indexes\nif(options&&options.updateIndexes===true){// updateIndexes is true or undefined\nthis._updateDomIndexes();}if(options&&options.recurse===true){// recurse is true or undefined. update childs recursively\nif(this.childs){this.childs.forEach(function(child){child.updateDom(options);});}}// update row with append button\nif(this.append){this.append.updateDom();}};/**\r\n\t * Locate the JSON schema of the node and check for any enum type\r\n\t * @private\r\n\t */Node.prototype._updateSchema=function(){//Locating the schema of the node and checking for any enum type\nif(this.editor&&this.editor.options){// find the part of the json schema matching this nodes path\nthis.schema=Node._findSchema(this.editor.options.schema,this.getPath());if(this.schema){this.enum=Node._findEnum(this.schema);}else{delete this.enum;}}};/**\r\n\t * find an enum definition in a JSON schema, as property `enum` or inside\r\n\t * one of the schemas composites (`oneOf`, `anyOf`, `allOf`)\r\n\t * @param {Object} schema\r\n\t * @return {Array | null} Returns the enum when found, null otherwise.\r\n\t * @private\r\n\t */Node._findEnum=function(schema){if(schema.enum){return schema.enum;}var composite=schema.oneOf||schema.anyOf||schema.allOf;if(composite){var match=composite.filter(function(entry){return entry.enum;});if(match.length>0){return match[0].enum;}}return null;};/**\r\n\t * Return the part of a JSON schema matching given path.\r\n\t * @param {Object} schema\r\n\t * @param {Array.<string | number>} path\r\n\t * @return {Object | null}\r\n\t * @private\r\n\t */Node._findSchema=function(schema,path){var childSchema=schema;for(var i=0;i<path.length&&childSchema;i++){var key=path[i];if(typeof key==='string'&&childSchema.properties){childSchema=childSchema.properties[key]||null;}else if(typeof key==='number'&&childSchema.items){childSchema=childSchema.items;}}return childSchema;};/**\r\n\t * Update the DOM of the childs of a node: update indexes and undefined field\r\n\t * names.\r\n\t * Only applicable when structure is an array or object\r\n\t * @private\r\n\t */Node.prototype._updateDomIndexes=function(){var domValue=this.dom.value;var childs=this.childs;if(domValue&&childs){if(this.type=='array'){childs.forEach(function(child,index){child.index=index;var childField=child.dom.field;if(childField){childField.innerHTML=index;}});}else if(this.type=='object'){childs.forEach(function(child){if(child.index!=undefined){delete child.index;if(child.field==undefined){child.field='';}}});}}};/**\r\n\t * Create an editable value\r\n\t * @private\r\n\t */Node.prototype._createDomValue=function(){var domValue;if(this.type=='array'){domValue=document.createElement('div');domValue.innerHTML='[...]';}else if(this.type=='object'){domValue=document.createElement('div');domValue.innerHTML='{...}';}else{if(!this.editable.value&&util.isUrl(this.value)){// create a link in case of read-only editor and value containing an url\ndomValue=document.createElement('a');domValue.href=this.value;domValue.target='_blank';domValue.innerHTML=this._escapeHTML(this.value);}else{// create an editable or read-only div\ndomValue=document.createElement('div');domValue.contentEditable=this.editable.value;domValue.spellcheck=false;domValue.innerHTML=this._escapeHTML(this.value);}}return domValue;};/**\r\n\t * Create an expand/collapse button\r\n\t * @return {Element} expand\r\n\t * @private\r\n\t */Node.prototype._createDomExpandButton=function(){// create expand button\nvar expand=document.createElement('button');expand.type='button';if(this._hasChilds()){expand.className=this.expanded?'jsoneditor-expanded':'jsoneditor-collapsed';expand.title='Click to expand/collapse this field (Ctrl+E). \\n'+'Ctrl+Click to expand/collapse including all childs.';}else{expand.className='jsoneditor-invisible';expand.title='';}return expand;};/**\r\n\t * Create a DOM tree element, containing the expand/collapse button\r\n\t * @return {Element} domTree\r\n\t * @private\r\n\t */Node.prototype._createDomTree=function(){var dom=this.dom;var domTree=document.createElement('table');var tbody=document.createElement('tbody');domTree.style.borderCollapse='collapse';// TODO: put in css\ndomTree.className='jsoneditor-values';domTree.appendChild(tbody);var tr=document.createElement('tr');tbody.appendChild(tr);// create expand button\nvar tdExpand=document.createElement('td');tdExpand.className='jsoneditor-tree';tr.appendChild(tdExpand);dom.expand=this._createDomExpandButton();tdExpand.appendChild(dom.expand);dom.tdExpand=tdExpand;// create the field\nvar tdField=document.createElement('td');tdField.className='jsoneditor-tree';tr.appendChild(tdField);dom.field=this._createDomField();tdField.appendChild(dom.field);dom.tdField=tdField;// create a separator\nvar tdSeparator=document.createElement('td');tdSeparator.className='jsoneditor-tree';tr.appendChild(tdSeparator);if(this.type!='object'&&this.type!='array'){tdSeparator.appendChild(document.createTextNode(':'));tdSeparator.className='jsoneditor-separator';}dom.tdSeparator=tdSeparator;// create the value\nvar tdValue=document.createElement('td');tdValue.className='jsoneditor-tree';tr.appendChild(tdValue);dom.value=this._createDomValue();tdValue.appendChild(dom.value);dom.tdValue=tdValue;return domTree;};/**\r\n\t * Handle an event. The event is caught centrally by the editor\r\n\t * @param {Event} event\r\n\t */Node.prototype.onEvent=function(event){var type=event.type,target=event.target||event.srcElement,dom=this.dom,node=this,expandable=this._hasChilds();// check if mouse is on menu or on dragarea.\n// If so, highlight current row and its childs\nif(target==dom.drag||target==dom.menu){if(type=='mouseover'){this.editor.highlighter.highlight(this);}else if(type=='mouseout'){this.editor.highlighter.unhighlight();}}// context menu events\nif(type=='click'&&target==dom.menu){var highlighter=node.editor.highlighter;highlighter.highlight(node);highlighter.lock();util.addClassName(dom.menu,'jsoneditor-selected');this.showContextMenu(dom.menu,function(){util.removeClassName(dom.menu,'jsoneditor-selected');highlighter.unlock();highlighter.unhighlight();});}// expand events\nif(type=='click'){if(target==dom.expand||(node.editor.options.mode==='view'||node.editor.options.mode==='form')&&target.nodeName==='DIV'){if(expandable){var recurse=event.ctrlKey;// with ctrl-key, expand/collapse all\nthis._onExpand(recurse);}}}// swap the value of a boolean when the checkbox displayed left is clicked\nif(type=='change'&&target==dom.checkbox){this.dom.value.innerHTML=!this.value;this._getDomValue();}// update the value of the node based on the selected option\nif(type=='change'&&target==dom.select){this.dom.value.innerHTML=dom.select.value;this._getDomValue();this._updateDomValue();}// value events\nvar domValue=dom.value;if(target==domValue){//noinspection FallthroughInSwitchStatementJS\nswitch(type){case'blur':case'change':this._getDomValue(true);this._updateDomValue();if(this.value){domValue.innerHTML=this._escapeHTML(this.value);}break;case'input'://this._debouncedGetDomValue(true); // TODO\nthis._getDomValue(true);this._updateDomValue();break;case'keydown':case'mousedown':// TODO: cleanup\nthis.editor.selection=this.editor.getSelection();break;case'click':if(event.ctrlKey||!this.editable.value){if(util.isUrl(this.value)){window.open(this.value,'_blank');}}break;case'keyup'://this._debouncedGetDomValue(true); // TODO\nthis._getDomValue(true);this._updateDomValue();break;case'cut':case'paste':setTimeout(function(){node._getDomValue(true);node._updateDomValue();},1);break;}}// field events\nvar domField=dom.field;if(target==domField){switch(type){case'blur':case'change':this._getDomField(true);this._updateDomField();if(this.field){domField.innerHTML=this._escapeHTML(this.field);}break;case'input':this._getDomField(true);this._updateSchema();this._updateDomField();this._updateDomValue();break;case'keydown':case'mousedown':this.editor.selection=this.editor.getSelection();break;case'keyup':this._getDomField(true);this._updateDomField();break;case'cut':case'paste':setTimeout(function(){node._getDomField(true);node._updateDomField();},1);break;}}// focus\n// when clicked in whitespace left or right from the field or value, set focus\nvar domTree=dom.tree;if(target==domTree.parentNode&&type=='click'&&!event.hasMoved){var left=event.offsetX!=undefined?event.offsetX<(this.getLevel()+1)*24:event.pageX<util.getAbsoluteLeft(dom.tdSeparator);// for FF\nif(left||expandable){// node is expandable when it is an object or array\nif(domField){util.setEndOfContentEditable(domField);domField.focus();}}else{if(domValue&&!this.enum){util.setEndOfContentEditable(domValue);domValue.focus();}}}if((target==dom.tdExpand&&!expandable||target==dom.tdField||target==dom.tdSeparator)&&type=='click'&&!event.hasMoved){if(domField){util.setEndOfContentEditable(domField);domField.focus();}}if(type=='keydown'){this.onKeyDown(event);}};/**\r\n\t * Key down event handler\r\n\t * @param {Event} event\r\n\t */Node.prototype.onKeyDown=function(event){var keynum=event.which||event.keyCode;var target=event.target||event.srcElement;var ctrlKey=event.ctrlKey;var shiftKey=event.shiftKey;var altKey=event.altKey;var handled=false;var prevNode,nextNode,nextDom,nextDom2;var editable=this.editor.options.mode==='tree';var oldSelection;var oldBeforeNode;var nodes;var multiselection;var selectedNodes=this.editor.multiselection.nodes.length>0?this.editor.multiselection.nodes:[this];var firstNode=selectedNodes[0];var lastNode=selectedNodes[selectedNodes.length-1];// console.log(ctrlKey, keynum, event.charCode); // TODO: cleanup\nif(keynum==13){// Enter\nif(target==this.dom.value){if(!this.editable.value||event.ctrlKey){if(util.isUrl(this.value)){window.open(this.value,'_blank');handled=true;}}}else if(target==this.dom.expand){var expandable=this._hasChilds();if(expandable){var recurse=event.ctrlKey;// with ctrl-key, expand/collapse all\nthis._onExpand(recurse);target.focus();handled=true;}}}else if(keynum==68){// D\nif(ctrlKey&&editable){// Ctrl+D\nNode.onDuplicate(selectedNodes);handled=true;}}else if(keynum==69){// E\nif(ctrlKey){// Ctrl+E and Ctrl+Shift+E\nthis._onExpand(shiftKey);// recurse = shiftKey\ntarget.focus();// TODO: should restore focus in case of recursing expand (which takes DOM offline)\nhandled=true;}}else if(keynum==77&&editable){// M\nif(ctrlKey){// Ctrl+M\nthis.showContextMenu(target);handled=true;}}else if(keynum==46&&editable){// Del\nif(ctrlKey){// Ctrl+Del\nNode.onRemove(selectedNodes);handled=true;}}else if(keynum==45&&editable){// Ins\nif(ctrlKey&&!shiftKey){// Ctrl+Ins\nthis._onInsertBefore();handled=true;}else if(ctrlKey&&shiftKey){// Ctrl+Shift+Ins\nthis._onInsertAfter();handled=true;}}else if(keynum==35){// End\nif(altKey){// Alt+End\n// find the last node\nvar endNode=this._lastNode();if(endNode){endNode.focus(Node.focusElement||this._getElementName(target));}handled=true;}}else if(keynum==36){// Home\nif(altKey){// Alt+Home\n// find the first node\nvar homeNode=this._firstNode();if(homeNode){homeNode.focus(Node.focusElement||this._getElementName(target));}handled=true;}}else if(keynum==37){// Arrow Left\nif(altKey&&!shiftKey){// Alt + Arrow Left\n// move to left element\nvar prevElement=this._previousElement(target);if(prevElement){this.focus(this._getElementName(prevElement));}handled=true;}else if(altKey&&shiftKey&&editable){// Alt + Shift + Arrow left\nif(lastNode.expanded){var appendDom=lastNode.getAppend();nextDom=appendDom?appendDom.nextSibling:undefined;}else{var dom=lastNode.getDom();nextDom=dom.nextSibling;}if(nextDom){nextNode=Node.getNodeFromTarget(nextDom);nextDom2=nextDom.nextSibling;nextNode2=Node.getNodeFromTarget(nextDom2);if(nextNode&&nextNode instanceof AppendNode&&!(lastNode.parent.childs.length==1)&&nextNode2&&nextNode2.parent){oldSelection=this.editor.getSelection();oldBeforeNode=lastNode._nextSibling();selectedNodes.forEach(function(node){nextNode2.parent.moveBefore(node,nextNode2);});this.focus(Node.focusElement||this._getElementName(target));this.editor._onAction('moveNodes',{nodes:selectedNodes,oldBeforeNode:oldBeforeNode,newBeforeNode:nextNode2,oldSelection:oldSelection,newSelection:this.editor.getSelection()});}}}}else if(keynum==38){// Arrow Up\nif(altKey&&!shiftKey){// Alt + Arrow Up\n// find the previous node\nprevNode=this._previousNode();if(prevNode){this.editor.deselect(true);prevNode.focus(Node.focusElement||this._getElementName(target));}handled=true;}else if(!altKey&&ctrlKey&&shiftKey&&editable){// Ctrl + Shift + Arrow Up\n// select multiple nodes\nprevNode=this._previousNode();if(prevNode){multiselection=this.editor.multiselection;multiselection.start=multiselection.start||this;multiselection.end=prevNode;nodes=this.editor._findTopLevelNodes(multiselection.start,multiselection.end);this.editor.select(nodes);prevNode.focus('field');// select field as we know this always exists\n}handled=true;}else if(altKey&&shiftKey&&editable){// Alt + Shift + Arrow Up\n// find the previous node\nprevNode=firstNode._previousNode();if(prevNode&&prevNode.parent){oldSelection=this.editor.getSelection();oldBeforeNode=lastNode._nextSibling();selectedNodes.forEach(function(node){prevNode.parent.moveBefore(node,prevNode);});this.focus(Node.focusElement||this._getElementName(target));this.editor._onAction('moveNodes',{nodes:selectedNodes,oldBeforeNode:oldBeforeNode,newBeforeNode:prevNode,oldSelection:oldSelection,newSelection:this.editor.getSelection()});}handled=true;}}else if(keynum==39){// Arrow Right\nif(altKey&&!shiftKey){// Alt + Arrow Right\n// move to right element\nvar nextElement=this._nextElement(target);if(nextElement){this.focus(this._getElementName(nextElement));}handled=true;}else if(altKey&&shiftKey&&editable){// Alt + Shift + Arrow Right\ndom=firstNode.getDom();var prevDom=dom.previousSibling;if(prevDom){prevNode=Node.getNodeFromTarget(prevDom);if(prevNode&&prevNode.parent&&prevNode instanceof AppendNode&&!prevNode.isVisible()){oldSelection=this.editor.getSelection();oldBeforeNode=lastNode._nextSibling();selectedNodes.forEach(function(node){prevNode.parent.moveBefore(node,prevNode);});this.focus(Node.focusElement||this._getElementName(target));this.editor._onAction('moveNodes',{nodes:selectedNodes,oldBeforeNode:oldBeforeNode,newBeforeNode:prevNode,oldSelection:oldSelection,newSelection:this.editor.getSelection()});}}}}else if(keynum==40){// Arrow Down\nif(altKey&&!shiftKey){// Alt + Arrow Down\n// find the next node\nnextNode=this._nextNode();if(nextNode){this.editor.deselect(true);nextNode.focus(Node.focusElement||this._getElementName(target));}handled=true;}else if(!altKey&&ctrlKey&&shiftKey&&editable){// Ctrl + Shift + Arrow Down\n// select multiple nodes\nnextNode=this._nextNode();if(nextNode){multiselection=this.editor.multiselection;multiselection.start=multiselection.start||this;multiselection.end=nextNode;nodes=this.editor._findTopLevelNodes(multiselection.start,multiselection.end);this.editor.select(nodes);nextNode.focus('field');// select field as we know this always exists\n}handled=true;}else if(altKey&&shiftKey&&editable){// Alt + Shift + Arrow Down\n// find the 2nd next node and move before that one\nif(lastNode.expanded){nextNode=lastNode.append?lastNode.append._nextNode():undefined;}else{nextNode=lastNode._nextNode();}var nextNode2=nextNode&&(nextNode._nextNode()||nextNode.parent.append);if(nextNode2&&nextNode2.parent){oldSelection=this.editor.getSelection();oldBeforeNode=lastNode._nextSibling();selectedNodes.forEach(function(node){nextNode2.parent.moveBefore(node,nextNode2);});this.focus(Node.focusElement||this._getElementName(target));this.editor._onAction('moveNodes',{nodes:selectedNodes,oldBeforeNode:oldBeforeNode,newBeforeNode:nextNode2,oldSelection:oldSelection,newSelection:this.editor.getSelection()});}handled=true;}}if(handled){event.preventDefault();event.stopPropagation();}};/**\r\n\t * Handle the expand event, when clicked on the expand button\r\n\t * @param {boolean} recurse If true, child nodes will be expanded too\r\n\t * @private\r\n\t */Node.prototype._onExpand=function(recurse){if(recurse){// Take the table offline\nvar table=this.dom.tr.parentNode;// TODO: not nice to access the main table like this\nvar frame=table.parentNode;var scrollTop=frame.scrollTop;frame.removeChild(table);}if(this.expanded){this.collapse(recurse);}else{this.expand(recurse);}if(recurse){// Put the table online again\nframe.appendChild(table);frame.scrollTop=scrollTop;}};/**\r\n\t * Remove nodes\r\n\t * @param {Node[] | Node} nodes\r\n\t */Node.onRemove=function(nodes){if(!Array.isArray(nodes)){return Node.onRemove([nodes]);}if(nodes&&nodes.length>0){var firstNode=nodes[0];var parent=firstNode.parent;var editor=firstNode.editor;var firstIndex=firstNode.getIndex();editor.highlighter.unhighlight();// adjust the focus\nvar oldSelection=editor.getSelection();Node.blurNodes(nodes);var newSelection=editor.getSelection();// remove the nodes\nnodes.forEach(function(node){node.parent._remove(node);});// store history action\neditor._onAction('removeNodes',{nodes:nodes.slice(0),// store a copy of the array!\nparent:parent,index:firstIndex,oldSelection:oldSelection,newSelection:newSelection});}};/**\r\n\t * Duplicate nodes\r\n\t * duplicated nodes will be added right after the original nodes\r\n\t * @param {Node[] | Node} nodes\r\n\t */Node.onDuplicate=function(nodes){if(!Array.isArray(nodes)){return Node.onDuplicate([nodes]);}if(nodes&&nodes.length>0){var lastNode=nodes[nodes.length-1];var parent=lastNode.parent;var editor=lastNode.editor;editor.deselect(editor.multiselection.nodes);// duplicate the nodes\nvar oldSelection=editor.getSelection();var afterNode=lastNode;var clones=nodes.map(function(node){var clone=node.clone();parent.insertAfter(clone,afterNode);afterNode=clone;return clone;});// set selection to the duplicated nodes\nif(nodes.length===1){clones[0].focus();}else{editor.select(clones);}var newSelection=editor.getSelection();editor._onAction('duplicateNodes',{afterNode:lastNode,nodes:clones,parent:parent,oldSelection:oldSelection,newSelection:newSelection});}};/**\r\n\t * Handle insert before event\r\n\t * @param {String} [field]\r\n\t * @param {*} [value]\r\n\t * @param {String} [type] Can be 'auto', 'array', 'object', or 'string'\r\n\t * @private\r\n\t */Node.prototype._onInsertBefore=function(field,value,type){var oldSelection=this.editor.getSelection();var newNode=new Node(this.editor,{field:field!=undefined?field:'',value:value!=undefined?value:'',type:type});newNode.expand(true);this.parent.insertBefore(newNode,this);this.editor.highlighter.unhighlight();newNode.focus('field');var newSelection=this.editor.getSelection();this.editor._onAction('insertBeforeNodes',{nodes:[newNode],beforeNode:this,parent:this.parent,oldSelection:oldSelection,newSelection:newSelection});};/**\r\n\t * Handle insert after event\r\n\t * @param {String} [field]\r\n\t * @param {*} [value]\r\n\t * @param {String} [type] Can be 'auto', 'array', 'object', or 'string'\r\n\t * @private\r\n\t */Node.prototype._onInsertAfter=function(field,value,type){var oldSelection=this.editor.getSelection();var newNode=new Node(this.editor,{field:field!=undefined?field:'',value:value!=undefined?value:'',type:type});newNode.expand(true);this.parent.insertAfter(newNode,this);this.editor.highlighter.unhighlight();newNode.focus('field');var newSelection=this.editor.getSelection();this.editor._onAction('insertAfterNodes',{nodes:[newNode],afterNode:this,parent:this.parent,oldSelection:oldSelection,newSelection:newSelection});};/**\r\n\t * Handle append event\r\n\t * @param {String} [field]\r\n\t * @param {*} [value]\r\n\t * @param {String} [type] Can be 'auto', 'array', 'object', or 'string'\r\n\t * @private\r\n\t */Node.prototype._onAppend=function(field,value,type){var oldSelection=this.editor.getSelection();var newNode=new Node(this.editor,{field:field!=undefined?field:'',value:value!=undefined?value:'',type:type});newNode.expand(true);this.parent.appendChild(newNode);this.editor.highlighter.unhighlight();newNode.focus('field');var newSelection=this.editor.getSelection();this.editor._onAction('appendNodes',{nodes:[newNode],parent:this.parent,oldSelection:oldSelection,newSelection:newSelection});};/**\r\n\t * Change the type of the node's value\r\n\t * @param {String} newType\r\n\t * @private\r\n\t */Node.prototype._onChangeType=function(newType){var oldType=this.type;if(newType!=oldType){var oldSelection=this.editor.getSelection();this.changeType(newType);var newSelection=this.editor.getSelection();this.editor._onAction('changeType',{node:this,oldType:oldType,newType:newType,oldSelection:oldSelection,newSelection:newSelection});}};/**\r\n\t * Sort the child's of the node. Only applicable when the node has type 'object'\r\n\t * or 'array'.\r\n\t * @param {String} direction Sorting direction. Available values: \"asc\", \"desc\"\r\n\t * @private\r\n\t */Node.prototype.sort=function(direction){if(!this._hasChilds()){return;}var order=direction=='desc'?-1:1;var prop=this.type=='array'?'value':'field';this.hideChilds();var oldChilds=this.childs;var oldSortOrder=this.sortOrder;// copy the array (the old one will be kept for an undo action\nthis.childs=this.childs.concat();// sort the arrays\nthis.childs.sort(function(a,b){return order*naturalSort(a[prop],b[prop]);});this.sortOrder=order==1?'asc':'desc';this.editor._onAction('sort',{node:this,oldChilds:oldChilds,oldSort:oldSortOrder,newChilds:this.childs,newSort:this.sortOrder});this.showChilds();};/**\r\n\t * Create a table row with an append button.\r\n\t * @return {HTMLElement | undefined} buttonAppend or undefined when inapplicable\r\n\t */Node.prototype.getAppend=function(){if(!this.append){this.append=new AppendNode(this.editor);this.append.setParent(this);}return this.append.getDom();};/**\r\n\t * Find the node from an event target\r\n\t * @param {Node} target\r\n\t * @return {Node | undefined} node or undefined when not found\r\n\t * @static\r\n\t */Node.getNodeFromTarget=function(target){while(target){if(target.node){return target.node;}target=target.parentNode;}return undefined;};/**\r\n\t * Remove the focus of given nodes, and move the focus to the (a) node before,\r\n\t * (b) the node after, or (c) the parent node.\r\n\t * @param {Array.<Node> | Node} nodes\r\n\t */Node.blurNodes=function(nodes){if(!Array.isArray(nodes)){Node.blurNodes([nodes]);return;}var firstNode=nodes[0];var parent=firstNode.parent;var firstIndex=firstNode.getIndex();if(parent.childs[firstIndex+nodes.length]){parent.childs[firstIndex+nodes.length].focus();}else if(parent.childs[firstIndex-1]){parent.childs[firstIndex-1].focus();}else{parent.focus();}};/**\r\n\t * Get the next sibling of current node\r\n\t * @return {Node} nextSibling\r\n\t * @private\r\n\t */Node.prototype._nextSibling=function(){var index=this.parent.childs.indexOf(this);return this.parent.childs[index+1]||this.parent.append;};/**\r\n\t * Get the previously rendered node\r\n\t * @return {Node | null} previousNode\r\n\t * @private\r\n\t */Node.prototype._previousNode=function(){var prevNode=null;var dom=this.getDom();if(dom&&dom.parentNode){// find the previous field\nvar prevDom=dom;do{prevDom=prevDom.previousSibling;prevNode=Node.getNodeFromTarget(prevDom);}while(prevDom&&prevNode instanceof AppendNode&&!prevNode.isVisible());}return prevNode;};/**\r\n\t * Get the next rendered node\r\n\t * @return {Node | null} nextNode\r\n\t * @private\r\n\t */Node.prototype._nextNode=function(){var nextNode=null;var dom=this.getDom();if(dom&&dom.parentNode){// find the previous field\nvar nextDom=dom;do{nextDom=nextDom.nextSibling;nextNode=Node.getNodeFromTarget(nextDom);}while(nextDom&&nextNode instanceof AppendNode&&!nextNode.isVisible());}return nextNode;};/**\r\n\t * Get the first rendered node\r\n\t * @return {Node | null} firstNode\r\n\t * @private\r\n\t */Node.prototype._firstNode=function(){var firstNode=null;var dom=this.getDom();if(dom&&dom.parentNode){var firstDom=dom.parentNode.firstChild;firstNode=Node.getNodeFromTarget(firstDom);}return firstNode;};/**\r\n\t * Get the last rendered node\r\n\t * @return {Node | null} lastNode\r\n\t * @private\r\n\t */Node.prototype._lastNode=function(){var lastNode=null;var dom=this.getDom();if(dom&&dom.parentNode){var lastDom=dom.parentNode.lastChild;lastNode=Node.getNodeFromTarget(lastDom);while(lastDom&&lastNode instanceof AppendNode&&!lastNode.isVisible()){lastDom=lastDom.previousSibling;lastNode=Node.getNodeFromTarget(lastDom);}}return lastNode;};/**\r\n\t * Get the next element which can have focus.\r\n\t * @param {Element} elem\r\n\t * @return {Element | null} nextElem\r\n\t * @private\r\n\t */Node.prototype._previousElement=function(elem){var dom=this.dom;// noinspection FallthroughInSwitchStatementJS\nswitch(elem){case dom.value:if(this.fieldEditable){return dom.field;}// intentional fall through\ncase dom.field:if(this._hasChilds()){return dom.expand;}// intentional fall through\ncase dom.expand:return dom.menu;case dom.menu:if(dom.drag){return dom.drag;}// intentional fall through\ndefault:return null;}};/**\r\n\t * Get the next element which can have focus.\r\n\t * @param {Element} elem\r\n\t * @return {Element | null} nextElem\r\n\t * @private\r\n\t */Node.prototype._nextElement=function(elem){var dom=this.dom;// noinspection FallthroughInSwitchStatementJS\nswitch(elem){case dom.drag:return dom.menu;case dom.menu:if(this._hasChilds()){return dom.expand;}// intentional fall through\ncase dom.expand:if(this.fieldEditable){return dom.field;}// intentional fall through\ncase dom.field:if(!this._hasChilds()){return dom.value;}default:return null;}};/**\r\n\t * Get the dom name of given element. returns null if not found.\r\n\t * For example when element == dom.field, \"field\" is returned.\r\n\t * @param {Element} element\r\n\t * @return {String | null} elementName Available elements with name: 'drag',\r\n\t * 'menu', 'expand', 'field', 'value'\r\n\t * @private\r\n\t */Node.prototype._getElementName=function(element){var dom=this.dom;for(var name in dom){if(dom.hasOwnProperty(name)){if(dom[name]==element){return name;}}}return null;};/**\r\n\t * Test if this node has childs. This is the case when the node is an object\r\n\t * or array.\r\n\t * @return {boolean} hasChilds\r\n\t * @private\r\n\t */Node.prototype._hasChilds=function(){return this.type=='array'||this.type=='object';};// titles with explanation for the different types\nNode.TYPE_TITLES={'auto':'Field type \"auto\". '+'The field type is automatically determined from the value '+'and can be a string, number, boolean, or null.','object':'Field type \"object\". '+'An object contains an unordered set of key/value pairs.','array':'Field type \"array\". '+'An array contains an ordered collection of values.','string':'Field type \"string\". '+'Field type is not determined from the value, '+'but always returned as string.'};/**\r\n\t * Show a contextmenu for this node\r\n\t * @param {HTMLElement} anchor Anchor element to attach the context menu to\r\n\t * as sibling.\r\n\t * @param {function} [onClose] Callback method called when the context menu\r\n\t * is being closed.\r\n\t */Node.prototype.showContextMenu=function(anchor,onClose){var node=this;var titles=Node.TYPE_TITLES;var items=[];if(this.editable.value){items.push({text:'Type',title:'Change the type of this field',className:'jsoneditor-type-'+this.type,submenu:[{text:'Auto',className:'jsoneditor-type-auto'+(this.type=='auto'?' jsoneditor-selected':''),title:titles.auto,click:function(){node._onChangeType('auto');}},{text:'Array',className:'jsoneditor-type-array'+(this.type=='array'?' jsoneditor-selected':''),title:titles.array,click:function(){node._onChangeType('array');}},{text:'Object',className:'jsoneditor-type-object'+(this.type=='object'?' jsoneditor-selected':''),title:titles.object,click:function(){node._onChangeType('object');}},{text:'String',className:'jsoneditor-type-string'+(this.type=='string'?' jsoneditor-selected':''),title:titles.string,click:function(){node._onChangeType('string');}}]});}if(this._hasChilds()){var direction=this.sortOrder=='asc'?'desc':'asc';items.push({text:'Sort',title:'Sort the childs of this '+this.type,className:'jsoneditor-sort-'+direction,click:function(){node.sort(direction);},submenu:[{text:'Ascending',className:'jsoneditor-sort-asc',title:'Sort the childs of this '+this.type+' in ascending order',click:function(){node.sort('asc');}},{text:'Descending',className:'jsoneditor-sort-desc',title:'Sort the childs of this '+this.type+' in descending order',click:function(){node.sort('desc');}}]});}if(this.parent&&this.parent._hasChilds()){if(items.length){// create a separator\nitems.push({'type':'separator'});}// create append button (for last child node only)\nvar childs=node.parent.childs;if(node==childs[childs.length-1]){items.push({text:'Append',title:'Append a new field with type \\'auto\\' after this field (Ctrl+Shift+Ins)',submenuTitle:'Select the type of the field to be appended',className:'jsoneditor-append',click:function(){node._onAppend('','','auto');},submenu:[{text:'Auto',className:'jsoneditor-type-auto',title:titles.auto,click:function(){node._onAppend('','','auto');}},{text:'Array',className:'jsoneditor-type-array',title:titles.array,click:function(){node._onAppend('',[]);}},{text:'Object',className:'jsoneditor-type-object',title:titles.object,click:function(){node._onAppend('',{});}},{text:'String',className:'jsoneditor-type-string',title:titles.string,click:function(){node._onAppend('','','string');}}]});}// create insert button\nitems.push({text:'Insert',title:'Insert a new field with type \\'auto\\' before this field (Ctrl+Ins)',submenuTitle:'Select the type of the field to be inserted',className:'jsoneditor-insert',click:function(){node._onInsertBefore('','','auto');},submenu:[{text:'Auto',className:'jsoneditor-type-auto',title:titles.auto,click:function(){node._onInsertBefore('','','auto');}},{text:'Array',className:'jsoneditor-type-array',title:titles.array,click:function(){node._onInsertBefore('',[]);}},{text:'Object',className:'jsoneditor-type-object',title:titles.object,click:function(){node._onInsertBefore('',{});}},{text:'String',className:'jsoneditor-type-string',title:titles.string,click:function(){node._onInsertBefore('','','string');}}]});if(this.editable.field){// create duplicate button\nitems.push({text:'Duplicate',title:'Duplicate this field (Ctrl+D)',className:'jsoneditor-duplicate',click:function(){Node.onDuplicate(node);}});// create remove button\nitems.push({text:'Remove',title:'Remove this field (Ctrl+Del)',className:'jsoneditor-remove',click:function(){Node.onRemove(node);}});}}var menu=new ContextMenu(items,{close:onClose});menu.show(anchor,this.editor.content);};/**\r\n\t * get the type of a value\r\n\t * @param {*} value\r\n\t * @return {String} type Can be 'object', 'array', 'string', 'auto'\r\n\t * @private\r\n\t */Node.prototype._getType=function(value){if(value instanceof Array){return'array';}if(value instanceof Object){return'object';}if(typeof value=='string'&&typeof this._stringCast(value)!='string'){return'string';}return'auto';};/**\r\n\t * cast contents of a string to the correct type. This can be a string,\r\n\t * a number, a boolean, etc\r\n\t * @param {String} str\r\n\t * @return {*} castedStr\r\n\t * @private\r\n\t */Node.prototype._stringCast=function(str){var lower=str.toLowerCase(),num=Number(str),// will nicely fail with '123ab'\nnumFloat=parseFloat(str);// will nicely fail with ' '\nif(str==''){return'';}else if(lower=='null'){return null;}else if(lower=='true'){return true;}else if(lower=='false'){return false;}else if(!isNaN(num)&&!isNaN(numFloat)){return num;}else{return str;}};/**\r\n\t * escape a text, such that it can be displayed safely in an HTML element\r\n\t * @param {String} text\r\n\t * @return {String} escapedText\r\n\t * @private\r\n\t */Node.prototype._escapeHTML=function(text){if(typeof text!=='string'){return String(text);}else{var htmlEscaped=String(text).replace(/&/g,'&amp;')// must be replaced first!\n.replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/ /g,' &nbsp;')// replace double space with an nbsp and space\n.replace(/^ /,'&nbsp;')// space at start\n.replace(/ $/,'&nbsp;');// space at end\nvar json=JSON.stringify(htmlEscaped);var html=json.substring(1,json.length-1);if(this.editor.options.escapeUnicode===true){html=util.escapeUnicodeChars(html);}return html;}};/**\r\n\t * unescape a string.\r\n\t * @param {String} escapedText\r\n\t * @return {String} text\r\n\t * @private\r\n\t */Node.prototype._unescapeHTML=function(escapedText){var json='\"'+this._escapeJSON(escapedText)+'\"';var htmlEscaped=util.parse(json);return htmlEscaped.replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&nbsp;|\\u00A0/g,' ').replace(/&amp;/g,'&');// must be replaced last\n};/**\r\n\t * escape a text to make it a valid JSON string. The method will:\r\n\t * - replace unescaped double quotes with '\\\"'\r\n\t * - replace unescaped backslash with '\\\\'\r\n\t * - replace returns with '\\n'\r\n\t * @param {String} text\r\n\t * @return {String} escapedText\r\n\t * @private\r\n\t */Node.prototype._escapeJSON=function(text){// TODO: replace with some smart regex (only when a new solution is faster!)\nvar escaped='';var i=0;while(i<text.length){var c=text.charAt(i);if(c=='\\n'){escaped+='\\\\n';}else if(c=='\\\\'){escaped+=c;i++;c=text.charAt(i);if(c===''||'\"\\\\/bfnrtu'.indexOf(c)==-1){escaped+='\\\\';// no valid escape character\n}escaped+=c;}else if(c=='\"'){escaped+='\\\\\"';}else{escaped+=c;}i++;}return escaped;};// TODO: find a nicer solution to resolve this circular dependency between Node and AppendNode\nvar AppendNode=appendNodeFactory(Node);module.exports=Node;/***/},/* 59 */ /***/function(module,exports){/*\r\n\t * Natural Sort algorithm for Javascript - Version 0.7 - Released under MIT license\r\n\t * Author: Jim Palmer (based on chunking idea from Dave Koelle)\r\n\t */ /*jshint unused:false */module.exports=function naturalSort(a,b){\"use strict\";var re=/(^([+\\-]?(?:0|[1-9]\\d*)(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)?$|^0x[0-9a-f]+$|\\d+)/gi,sre=/(^[ ]*|[ ]*$)/g,dre=/(^([\\w ]+,?[\\w ]+)?[\\w ]+,?[\\w ]+\\d+:\\d+(:\\d+)?[\\w ]?|^\\d{1,4}[\\/\\-]\\d{1,4}[\\/\\-]\\d{1,4}|^\\w+, \\w+ \\d+, \\d{4})/,hre=/^0x[0-9a-f]+$/i,ore=/^0/,i=function(s){return naturalSort.insensitive&&(''+s).toLowerCase()||''+s;},// convert all to strings strip whitespace\nx=i(a).replace(sre,'')||'',y=i(b).replace(sre,'')||'',// chunk/tokenize\nxN=x.replace(re,'\\0$1\\0').replace(/\\0$/,'').replace(/^\\0/,'').split('\\0'),yN=y.replace(re,'\\0$1\\0').replace(/\\0$/,'').replace(/^\\0/,'').split('\\0'),// numeric, hex or date detection\nxD=parseInt(x.match(hre),16)||xN.length!==1&&x.match(dre)&&Date.parse(x),yD=parseInt(y.match(hre),16)||xD&&y.match(dre)&&Date.parse(y)||null,oFxNcL,oFyNcL;// first try and sort Hex codes or Dates\nif(yD){if(xD<yD){return-1;}else if(xD>yD){return 1;}}// natural sorting through split numeric strings and default strings\nfor(var cLoc=0,numS=Math.max(xN.length,yN.length);cLoc<numS;cLoc++){// find floats not starting with '0', string or 0 if not defined (Clint Priest)\noFxNcL=!(xN[cLoc]||'').match(ore)&&parseFloat(xN[cLoc])||xN[cLoc]||0;oFyNcL=!(yN[cLoc]||'').match(ore)&&parseFloat(yN[cLoc])||yN[cLoc]||0;// handle numeric vs string comparison - number < string - (Kyle Adams)\nif(isNaN(oFxNcL)!==isNaN(oFyNcL)){return isNaN(oFxNcL)?1:-1;}// rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'\nelse if(typeof oFxNcL!==typeof oFyNcL){oFxNcL+='';oFyNcL+='';}if(oFxNcL<oFyNcL){return-1;}if(oFxNcL>oFyNcL){return 1;}}return 0;};/***/},/* 60 */ /***/function(module,exports,__webpack_require__){'use strict';var util=__webpack_require__(54);var ContextMenu=__webpack_require__(57);/**\r\n\t * A factory function to create an AppendNode, which depends on a Node\r\n\t * @param {Node} Node\r\n\t */function appendNodeFactory(Node){/**\r\n\t * @constructor AppendNode\r\n\t * @extends Node\r\n\t * @param {TreeEditor} editor\r\n\t * Create a new AppendNode. This is a special node which is created at the\r\n\t * end of the list with childs for an object or array\r\n\t */function AppendNode(editor){/** @type {TreeEditor} */this.editor=editor;this.dom={};}AppendNode.prototype=new Node();/**\r\n\t * Return a table row with an append button.\r\n\t * @return {Element} dom TR element\r\n\t */AppendNode.prototype.getDom=function(){// TODO: implement a new solution for the append node\nvar dom=this.dom;if(dom.tr){return dom.tr;}this._updateEditability();// a row for the append button\nvar trAppend=document.createElement('tr');trAppend.node=this;dom.tr=trAppend;// TODO: consistent naming\nif(this.editor.options.mode==='tree'){// a cell for the dragarea column\ndom.tdDrag=document.createElement('td');// create context menu\nvar tdMenu=document.createElement('td');dom.tdMenu=tdMenu;var menu=document.createElement('button');menu.type='button';menu.className='jsoneditor-contextmenu';menu.title='Click to open the actions menu (Ctrl+M)';dom.menu=menu;tdMenu.appendChild(dom.menu);}// a cell for the contents (showing text 'empty')\nvar tdAppend=document.createElement('td');var domText=document.createElement('div');domText.innerHTML='(empty)';domText.className='jsoneditor-readonly';tdAppend.appendChild(domText);dom.td=tdAppend;dom.text=domText;this.updateDom();return trAppend;};/**\r\n\t * Update the HTML dom of the Node\r\n\t */AppendNode.prototype.updateDom=function(){var dom=this.dom;var tdAppend=dom.td;if(tdAppend){tdAppend.style.paddingLeft=this.getLevel()*24+26+'px';// TODO: not so nice hard coded offset\n}var domText=dom.text;if(domText){domText.innerHTML='(empty '+this.parent.type+')';}// attach or detach the contents of the append node:\n// hide when the parent has childs, show when the parent has no childs\nvar trAppend=dom.tr;if(!this.isVisible()){if(dom.tr.firstChild){if(dom.tdDrag){trAppend.removeChild(dom.tdDrag);}if(dom.tdMenu){trAppend.removeChild(dom.tdMenu);}trAppend.removeChild(tdAppend);}}else{if(!dom.tr.firstChild){if(dom.tdDrag){trAppend.appendChild(dom.tdDrag);}if(dom.tdMenu){trAppend.appendChild(dom.tdMenu);}trAppend.appendChild(tdAppend);}}};/**\r\n\t * Check whether the AppendNode is currently visible.\r\n\t * the AppendNode is visible when its parent has no childs (i.e. is empty).\r\n\t * @return {boolean} isVisible\r\n\t */AppendNode.prototype.isVisible=function(){return this.parent.childs.length==0;};/**\r\n\t * Show a contextmenu for this node\r\n\t * @param {HTMLElement} anchor The element to attach the menu to.\r\n\t * @param {function} [onClose] Callback method called when the context menu\r\n\t * is being closed.\r\n\t */AppendNode.prototype.showContextMenu=function(anchor,onClose){var node=this;var titles=Node.TYPE_TITLES;var items=[// create append button\n{'text':'Append','title':'Append a new field with type \\'auto\\' (Ctrl+Shift+Ins)','submenuTitle':'Select the type of the field to be appended','className':'jsoneditor-insert','click':function(){node._onAppend('','','auto');},'submenu':[{'text':'Auto','className':'jsoneditor-type-auto','title':titles.auto,'click':function(){node._onAppend('','','auto');}},{'text':'Array','className':'jsoneditor-type-array','title':titles.array,'click':function(){node._onAppend('',[]);}},{'text':'Object','className':'jsoneditor-type-object','title':titles.object,'click':function(){node._onAppend('',{});}},{'text':'String','className':'jsoneditor-type-string','title':titles.string,'click':function(){node._onAppend('','','string');}}]}];var menu=new ContextMenu(items,{close:onClose});menu.show(anchor,this.editor.content);};/**\r\n\t * Handle an event. The event is catched centrally by the editor\r\n\t * @param {Event} event\r\n\t */AppendNode.prototype.onEvent=function(event){var type=event.type;var target=event.target||event.srcElement;var dom=this.dom;// highlight the append nodes parent\nvar menu=dom.menu;if(target==menu){if(type=='mouseover'){this.editor.highlighter.highlight(this.parent);}else if(type=='mouseout'){this.editor.highlighter.unhighlight();}}// context menu events\nif(type=='click'&&target==dom.menu){var highlighter=this.editor.highlighter;highlighter.highlight(this.parent);highlighter.lock();util.addClassName(dom.menu,'jsoneditor-selected');this.showContextMenu(dom.menu,function(){util.removeClassName(dom.menu,'jsoneditor-selected');highlighter.unlock();highlighter.unhighlight();});}if(type=='keydown'){this.onKeyDown(event);}};return AppendNode;}module.exports=appendNodeFactory;/***/},/* 61 */ /***/function(module,exports,__webpack_require__){'use strict';var ContextMenu=__webpack_require__(57);/**\r\n\t * Create a select box to be used in the editor menu's, which allows to switch mode\r\n\t * @param {HTMLElement} container\r\n\t * @param {String[]} modes Available modes: 'code', 'form', 'text', 'tree', 'view'\r\n\t * @param {String} current Available modes: 'code', 'form', 'text', 'tree', 'view'\r\n\t * @param {function(mode: string)} onSwitch Callback invoked on switch\r\n\t * @constructor\r\n\t */function ModeSwitcher(container,modes,current,onSwitch){// available modes\nvar availableModes={code:{'text':'Code','title':'Switch to code highlighter','click':function(){onSwitch('code');}},form:{'text':'Form','title':'Switch to form editor','click':function(){onSwitch('form');}},text:{'text':'Text','title':'Switch to plain text editor','click':function(){onSwitch('text');}},tree:{'text':'Tree','title':'Switch to tree editor','click':function(){onSwitch('tree');}},view:{'text':'View','title':'Switch to tree view','click':function(){onSwitch('view');}}};// list the selected modes\nvar items=[];for(var i=0;i<modes.length;i++){var mode=modes[i];var item=availableModes[mode];if(!item){throw new Error('Unknown mode \"'+mode+'\"');}item.className='jsoneditor-type-modes'+(current==mode?' jsoneditor-selected':'');items.push(item);}// retrieve the title of current mode\nvar currentMode=availableModes[current];if(!currentMode){throw new Error('Unknown mode \"'+current+'\"');}var currentTitle=currentMode.text;// create the html element\nvar box=document.createElement('button');box.type='button';box.className='jsoneditor-modes jsoneditor-separator';box.innerHTML=currentTitle+' &#x25BE;';box.title='Switch editor mode';box.onclick=function(){var menu=new ContextMenu(items);menu.show(box);};var frame=document.createElement('div');frame.className='jsoneditor-modes';frame.style.position='relative';frame.appendChild(box);container.appendChild(frame);this.dom={container:container,box:box,frame:frame};}/**\r\n\t * Set focus to switcher\r\n\t */ModeSwitcher.prototype.focus=function(){this.dom.box.focus();};/**\r\n\t * Destroy the ModeSwitcher, remove from DOM\r\n\t */ModeSwitcher.prototype.destroy=function(){if(this.dom&&this.dom.frame&&this.dom.frame.parentNode){this.dom.frame.parentNode.removeChild(this.dom.frame);}this.dom=null;};module.exports=ModeSwitcher;/***/},/* 62 */ /***/function(module,exports,__webpack_require__){'use strict';var ace;try{ace=__webpack_require__(63);}catch(err){// failed to load ace, no problem, we will fall back to plain text\n}var ModeSwitcher=__webpack_require__(61);var util=__webpack_require__(54);// create a mixin with the functions for text mode\nvar textmode={};var MAX_ERRORS=3;// maximum number of displayed errors at the bottom\nvar DEFAULT_THEME='ace/theme/jsoneditor';/**\r\n\t * Create a text editor\r\n\t * @param {Element} container\r\n\t * @param {Object} [options] Object with options. available options:\r\n\t * {String} mode Available values:\r\n\t * \"text\" (default)\r\n\t * or \"code\".\r\n\t * {Number} indentation Number of indentation\r\n\t * spaces. 2 by default.\r\n\t * {function} onChange Callback method\r\n\t * triggered on change\r\n\t * {function} onModeChange Callback method\r\n\t * triggered after setMode\r\n\t * {Object} ace A custom instance of\r\n\t * Ace editor.\r\n\t * {boolean} escapeUnicode If true, unicode\r\n\t * characters are escaped.\r\n\t * false by default.\r\n\t * @private\r\n\t */textmode.create=function(container,options){// read options\noptions=options||{};this.options=options;// indentation\nif(options.indentation){this.indentation=Number(options.indentation);}else{this.indentation=2;// number of spaces\n}// grab ace from options if provided\nvar _ace=options.ace?options.ace:ace;// determine mode\nthis.mode=options.mode=='code'?'code':'text';if(this.mode=='code'){// verify whether Ace editor is available and supported\nif(typeof _ace==='undefined'){this.mode='text';console.warn('Failed to load Ace editor, falling back to plain text mode. Please use a JSONEditor bundle including Ace, or pass Ace as via the configuration option `ace`.');}}// determine theme\nthis.theme=options.theme||DEFAULT_THEME;if(this.theme===DEFAULT_THEME&&window.ace){__webpack_require__(70);}var me=this;this.container=container;this.dom={};this.aceEditor=undefined;// ace code editor\nthis.textarea=undefined;// plain text editor (fallback when Ace is not available)\nthis.validateSchema=null;// create a debounced validate function\nthis._debouncedValidate=util.debounce(this.validate.bind(this),this.DEBOUNCE_INTERVAL);this.width=container.clientWidth;this.height=container.clientHeight;this.frame=document.createElement('div');this.frame.className='jsoneditor jsoneditor-mode-'+this.options.mode;this.frame.onclick=function(event){// prevent default submit action when the editor is located inside a form\nevent.preventDefault();};this.frame.onkeydown=function(event){me._onKeyDown(event);};// create menu\nthis.menu=document.createElement('div');this.menu.className='jsoneditor-menu';this.frame.appendChild(this.menu);// create format button\nvar buttonFormat=document.createElement('button');buttonFormat.type='button';buttonFormat.className='jsoneditor-format';buttonFormat.title='Format JSON data, with proper indentation and line feeds (Ctrl+\\\\)';this.menu.appendChild(buttonFormat);buttonFormat.onclick=function(){try{me.format();me._onChange();}catch(err){me._onError(err);}};// create compact button\nvar buttonCompact=document.createElement('button');buttonCompact.type='button';buttonCompact.className='jsoneditor-compact';buttonCompact.title='Compact JSON data, remove all whitespaces (Ctrl+Shift+\\\\)';this.menu.appendChild(buttonCompact);buttonCompact.onclick=function(){try{me.compact();me._onChange();}catch(err){me._onError(err);}};// create mode box\nif(this.options&&this.options.modes&&this.options.modes.length){this.modeSwitcher=new ModeSwitcher(this.menu,this.options.modes,this.options.mode,function onSwitch(mode){// switch mode and restore focus\nme.setMode(mode);me.modeSwitcher.focus();});}this.content=document.createElement('div');this.content.className='jsoneditor-outer';this.frame.appendChild(this.content);this.container.appendChild(this.frame);if(this.mode=='code'){this.editorDom=document.createElement('div');this.editorDom.style.height='100%';// TODO: move to css\nthis.editorDom.style.width='100%';// TODO: move to css\nthis.content.appendChild(this.editorDom);var aceEditor=_ace.edit(this.editorDom);aceEditor.$blockScrolling=Infinity;aceEditor.setTheme(this.theme);aceEditor.setShowPrintMargin(false);aceEditor.setFontSize(13);aceEditor.getSession().setMode('ace/mode/json');aceEditor.getSession().setTabSize(this.indentation);aceEditor.getSession().setUseSoftTabs(true);aceEditor.getSession().setUseWrapMode(true);aceEditor.commands.bindKey('Ctrl-L',null);// disable Ctrl+L (is used by the browser to select the address bar)\naceEditor.commands.bindKey('Command-L',null);// disable Ctrl+L (is used by the browser to select the address bar)\nthis.aceEditor=aceEditor;// TODO: deprecated since v5.0.0. Cleanup backward compatibility some day\nif(!this.hasOwnProperty('editor')){Object.defineProperty(this,'editor',{get:function(){console.warn('Property \"editor\" has been renamed to \"aceEditor\".');return me.aceEditor;},set:function(aceEditor){console.warn('Property \"editor\" has been renamed to \"aceEditor\".');me.aceEditor=aceEditor;}});}var poweredBy=document.createElement('a');poweredBy.appendChild(document.createTextNode('powered by ace'));poweredBy.href='http://ace.ajax.org';poweredBy.target='_blank';poweredBy.className='jsoneditor-poweredBy';poweredBy.onclick=function(){// TODO: this anchor falls below the margin of the content,\n// therefore the normal a.href does not work. We use a click event\n// for now, but this should be fixed.\nwindow.open(poweredBy.href,poweredBy.target);};this.menu.appendChild(poweredBy);// register onchange event\naceEditor.on('change',this._onChange.bind(this));}else{// load a plain text textarea\nvar textarea=document.createElement('textarea');textarea.className='jsoneditor-text';textarea.spellcheck=false;this.content.appendChild(textarea);this.textarea=textarea;// register onchange event\nif(this.textarea.oninput===null){this.textarea.oninput=this._onChange.bind(this);}else{// oninput is undefined. For IE8-\nthis.textarea.onchange=this._onChange.bind(this);}}this.setSchema(this.options.schema);};/**\r\n\t * Handle a change:\r\n\t * - Validate JSON schema\r\n\t * - Send a callback to the onChange listener if provided\r\n\t * @private\r\n\t */textmode._onChange=function(){// validate JSON schema (if configured)\nthis._debouncedValidate();// trigger the onChange callback\nif(this.options.onChange){try{this.options.onChange();}catch(err){console.error('Error in onChange callback: ',err);}}};/**\r\n\t * Event handler for keydown. Handles shortcut keys\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */textmode._onKeyDown=function(event){var keynum=event.which||event.keyCode;var handled=false;if(keynum==220&&event.ctrlKey){if(event.shiftKey){// Ctrl+Shift+\\\nthis.compact();this._onChange();}else{// Ctrl+\\\nthis.format();this._onChange();}handled=true;}if(handled){event.preventDefault();event.stopPropagation();}};/**\r\n\t * Destroy the editor. Clean up DOM, event listeners, and web workers.\r\n\t */textmode.destroy=function(){// remove old ace editor\nif(this.aceEditor){this.aceEditor.destroy();this.aceEditor=null;}if(this.frame&&this.container&&this.frame.parentNode==this.container){this.container.removeChild(this.frame);}if(this.modeSwitcher){this.modeSwitcher.destroy();this.modeSwitcher=null;}this.textarea=null;this._debouncedValidate=null;};/**\r\n\t * Compact the code in the formatter\r\n\t */textmode.compact=function(){var json=this.get();var text=JSON.stringify(json);this.setText(text);};/**\r\n\t * Format the code in the formatter\r\n\t */textmode.format=function(){var json=this.get();var text=JSON.stringify(json,null,this.indentation);this.setText(text);};/**\r\n\t * Set focus to the formatter\r\n\t */textmode.focus=function(){if(this.textarea){this.textarea.focus();}if(this.aceEditor){this.aceEditor.focus();}};/**\r\n\t * Resize the formatter\r\n\t */textmode.resize=function(){if(this.aceEditor){var force=false;this.aceEditor.resize(force);}};/**\r\n\t * Set json data in the formatter\r\n\t * @param {Object} json\r\n\t */textmode.set=function(json){this.setText(JSON.stringify(json,null,this.indentation));};/**\r\n\t * Get json data from the formatter\r\n\t * @return {Object} json\r\n\t */textmode.get=function(){var text=this.getText();var json;try{json=util.parse(text);// this can throw an error\n}catch(err){// try to sanitize json, replace JavaScript notation with JSON notation\ntext=util.sanitize(text);// try to parse again\njson=util.parse(text);// this can throw an error\n}return json;};/**\r\n\t * Get the text contents of the editor\r\n\t * @return {String} jsonText\r\n\t */textmode.getText=function(){if(this.textarea){return this.textarea.value;}if(this.aceEditor){return this.aceEditor.getValue();}return'';};/**\r\n\t * Set the text contents of the editor\r\n\t * @param {String} jsonText\r\n\t */textmode.setText=function(jsonText){var text;if(this.options.escapeUnicode===true){text=util.escapeUnicodeChars(jsonText);}else{text=jsonText;}if(this.textarea){this.textarea.value=text;}if(this.aceEditor){// prevent emitting onChange events while setting new text\nvar originalOnChange=this.options.onChange;this.options.onChange=null;this.aceEditor.setValue(text,-1);this.options.onChange=originalOnChange;}// validate JSON schema\nthis.validate();};/**\r\n\t * Validate current JSON object against the configured JSON schema\r\n\t * Throws an exception when no JSON schema is configured\r\n\t */textmode.validate=function(){// clear all current errors\nif(this.dom.validationErrors){this.dom.validationErrors.parentNode.removeChild(this.dom.validationErrors);this.dom.validationErrors=null;this.content.style.marginBottom='';this.content.style.paddingBottom='';}var doValidate=false;var errors=[];var json;try{json=this.get();// this can fail when there is no valid json\ndoValidate=true;}catch(err){// no valid JSON, don't validate\n}// only validate the JSON when parsing the JSON succeeded\nif(doValidate&&this.validateSchema){var valid=this.validateSchema(json);if(!valid){errors=this.validateSchema.errors.map(function(error){return util.improveSchemaError(error);});}}if(errors.length>0){// limit the number of displayed errors\nvar limit=errors.length>MAX_ERRORS;if(limit){errors=errors.slice(0,MAX_ERRORS);var hidden=this.validateSchema.errors.length-MAX_ERRORS;errors.push('('+hidden+' more errors...)');}var validationErrors=document.createElement('div');validationErrors.innerHTML='<table class=\"jsoneditor-text-errors\">'+'<tbody>'+errors.map(function(error){var message;if(typeof error==='string'){message='<td colspan=\"2\"><pre>'+error+'</pre></td>';}else{message='<td>'+error.dataPath+'</td>'+'<td>'+error.message+'</td>';}return'<tr><td><button class=\"jsoneditor-schema-error\"></button></td>'+message+'</tr>';}).join('')+'</tbody>'+'</table>';this.dom.validationErrors=validationErrors;this.frame.appendChild(validationErrors);var height=validationErrors.clientHeight;this.content.style.marginBottom=-height+'px';this.content.style.paddingBottom=height+'px';}// update the height of the ace editor\nif(this.aceEditor){var force=false;this.aceEditor.resize(force);}};// define modes\nmodule.exports=[{mode:'text',mixin:textmode,data:'text',load:textmode.format},{mode:'code',mixin:textmode,data:'text',load:textmode.format}];/***/},/* 63 */ /***/function(module,exports,__webpack_require__){// load brace\nvar ace=__webpack_require__(64);// load required ace modules\n__webpack_require__(67);__webpack_require__(69);module.exports=ace;/***/},/* 64 */ /***/function(module,exports,__webpack_require__){/* ***** BEGIN LICENSE BLOCK *****\r\n\t * Distributed under the BSD license:\r\n\t *\r\n\t * Copyright (c) 2010, Ajax.org B.V.\r\n\t * All rights reserved.\r\n\t *\r\n\t * Redistribution and use in source and binary forms, with or without\r\n\t * modification, are permitted provided that the following conditions are met:\r\n\t * * Redistributions of source code must retain the above copyright\r\n\t * notice, this list of conditions and the following disclaimer.\r\n\t * * Redistributions in binary form must reproduce the above copyright\r\n\t * notice, this list of conditions and the following disclaimer in the\r\n\t * documentation and/or other materials provided with the distribution.\r\n\t * * Neither the name of Ajax.org B.V. nor the\r\n\t * names of its contributors may be used to endorse or promote products\r\n\t * derived from this software without specific prior written permission.\r\n\t *\r\n\t * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n\t * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n\t * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n\t * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\r\n\t * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n\t * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n\t * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\r\n\t * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n\t * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n\t * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n\t *\r\n\t * ***** END LICENSE BLOCK ***** */ /**\r\n\t * Define a module along with a payload\r\n\t * @param module a name for the payload\r\n\t * @param payload a function to call with (acequire, exports, module) params\r\n\t */(function(){var ACE_NAMESPACE=\"ace\";var global=function(){return this;}();if(!global&&typeof window!=\"undefined\")global=window;// strict mode\nif(!ACE_NAMESPACE&&typeof acequirejs!==\"undefined\")return;var define=function(module,deps,payload){if(typeof module!==\"string\"){if(define.original)define.original.apply(this,arguments);else{console.error(\"dropping module because define wasn\\'t a string.\");console.trace();}return;}if(arguments.length==2)payload=deps;if(!define.modules[module]){define.payloads[module]=payload;define.modules[module]=null;}};define.modules={};define.payloads={};/**\r\n\t * Get at functionality define()ed using the function above\r\n\t */var _acequire=function(parentId,module,callback){if(typeof module===\"string\"){var payload=lookup(parentId,module);if(payload!=undefined){callback&&callback();return payload;}}else if(Object.prototype.toString.call(module)===\"[object Array]\"){var params=[];for(var i=0,l=module.length;i<l;++i){var dep=lookup(parentId,module[i]);if(dep==undefined&&acequire.original)return;params.push(dep);}return callback&&callback.apply(null,params)||true;}};var acequire=function(module,callback){var packagedModule=_acequire(\"\",module,callback);if(packagedModule==undefined&&acequire.original)return acequire.original.apply(this,arguments);return packagedModule;};var normalizeModule=function(parentId,moduleName){// normalize plugin acequires\nif(moduleName.indexOf(\"!\")!==-1){var chunks=moduleName.split(\"!\");return normalizeModule(parentId,chunks[0])+\"!\"+normalizeModule(parentId,chunks[1]);}// normalize relative acequires\nif(moduleName.charAt(0)==\".\"){var base=parentId.split(\"/\").slice(0,-1).join(\"/\");moduleName=base+\"/\"+moduleName;while(moduleName.indexOf(\".\")!==-1&&previous!=moduleName){var previous=moduleName;moduleName=moduleName.replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\");}}return moduleName;};/**\r\n\t * Internal function to lookup moduleNames and resolve them by calling the\r\n\t * definition function if needed.\r\n\t */var lookup=function(parentId,moduleName){moduleName=normalizeModule(parentId,moduleName);var module=define.modules[moduleName];if(!module){module=define.payloads[moduleName];if(typeof module==='function'){var exports={};var mod={id:moduleName,uri:'',exports:exports,packaged:true};var req=function(module,callback){return _acequire(moduleName,module,callback);};var returnValue=module(req,exports,mod);exports=returnValue||mod.exports;define.modules[moduleName]=exports;delete define.payloads[moduleName];}module=define.modules[moduleName]=exports||module;}return module;};function exportAce(ns){var root=global;if(ns){if(!global[ns])global[ns]={};root=global[ns];}if(!root.define||!root.define.packaged){define.original=root.define;root.define=define;root.define.packaged=true;}if(!root.acequire||!root.acequire.packaged){acequire.original=root.acequire;root.acequire=acequire;root.acequire.packaged=true;}}exportAce(ACE_NAMESPACE);})();ace.define(\"ace/lib/regexp\",[\"require\",\"exports\",\"module\"],function(acequire,exports,module){\"use strict\";var real={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},compliantExecNpcg=real.exec.call(/()??/,\"\")[1]===undefined,// check `exec` handling of nonparticipating capturing groups\ncompliantLastIndexIncrement=function(){var x=/^/g;real.test.call(x,\"\");return!x.lastIndex;}();if(compliantLastIndexIncrement&&compliantExecNpcg)return;RegExp.prototype.exec=function(str){var match=real.exec.apply(this,arguments),name,r2;if(typeof str=='string'&&match){if(!compliantExecNpcg&&match.length>1&&indexOf(match,\"\")>-1){r2=RegExp(this.source,real.replace.call(getNativeFlags(this),\"g\",\"\"));real.replace.call(str.slice(match.index),r2,function(){for(var i=1;i<arguments.length-2;i++){if(arguments[i]===undefined)match[i]=undefined;}});}if(this._xregexp&&this._xregexp.captureNames){for(var i=1;i<match.length;i++){name=this._xregexp.captureNames[i-1];if(name)match[name]=match[i];}}if(!compliantLastIndexIncrement&&this.global&&!match[0].length&&this.lastIndex>match.index)this.lastIndex--;}return match;};if(!compliantLastIndexIncrement){RegExp.prototype.test=function(str){var match=real.exec.call(this,str);if(match&&this.global&&!match[0].length&&this.lastIndex>match.index)this.lastIndex--;return!!match;};}function getNativeFlags(regex){return(regex.global?\"g\":\"\")+(regex.ignoreCase?\"i\":\"\")+(regex.multiline?\"m\":\"\")+(regex.extended?\"x\":\"\")+(// Proposed for ES4; included in AS3\nregex.sticky?\"y\":\"\");}function indexOf(array,item,from){if(Array.prototype.indexOf)// Use the native array method if available\nreturn array.indexOf(item,from);for(var i=from||0;i<array.length;i++){if(array[i]===item)return i;}return-1;}});ace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"],function(acequire,exports,module){function Empty(){}if(!Function.prototype.bind){Function.prototype.bind=function bind(that){// .length is 1\nvar target=this;if(typeof target!=\"function\"){throw new TypeError(\"Function.prototype.bind called on incompatible \"+target);}var args=slice.call(arguments,1);// for normal call\nvar bound=function(){if(this instanceof bound){var result=target.apply(this,args.concat(slice.call(arguments)));if(Object(result)===result){return result;}return this;}else{return target.apply(that,args.concat(slice.call(arguments)));}};if(target.prototype){Empty.prototype=target.prototype;bound.prototype=new Empty();Empty.prototype=null;}return bound;};}var call=Function.prototype.call;var prototypeOfArray=Array.prototype;var prototypeOfObject=Object.prototype;var slice=prototypeOfArray.slice;var _toString=call.bind(prototypeOfObject.toString);var owns=call.bind(prototypeOfObject.hasOwnProperty);var defineGetter;var defineSetter;var lookupGetter;var lookupSetter;var supportsAccessors;if(supportsAccessors=owns(prototypeOfObject,\"__defineGetter__\")){defineGetter=call.bind(prototypeOfObject.__defineGetter__);defineSetter=call.bind(prototypeOfObject.__defineSetter__);lookupGetter=call.bind(prototypeOfObject.__lookupGetter__);lookupSetter=call.bind(prototypeOfObject.__lookupSetter__);}if([1,2].splice(0).length!=2){if(function(){// test IE < 9 to splice bug - see issue #138\nfunction makeArray(l){var a=new Array(l+2);a[0]=a[1]=0;return a;}var array=[],lengthBefore;array.splice.apply(array,makeArray(20));array.splice.apply(array,makeArray(26));lengthBefore=array.length;//46\narray.splice(5,0,\"XXX\");// add one element\nlengthBefore+1==array.length;if(lengthBefore+1==array.length){return true;// has right splice implementation without bugs\n}}()){//IE 6/7\nvar array_splice=Array.prototype.splice;Array.prototype.splice=function(start,deleteCount){if(!arguments.length){return[];}else{return array_splice.apply(this,[start===void 0?0:start,deleteCount===void 0?this.length-start:deleteCount].concat(slice.call(arguments,2)));}};}else{//IE8\nArray.prototype.splice=function(pos,removeCount){var length=this.length;if(pos>0){if(pos>length)pos=length;}else if(pos==void 0){pos=0;}else if(pos<0){pos=Math.max(length+pos,0);}if(!(pos+removeCount<length))removeCount=length-pos;var removed=this.slice(pos,pos+removeCount);var insert=slice.call(arguments,2);var add=insert.length;if(pos===length){if(add){this.push.apply(this,insert);}}else{var remove=Math.min(removeCount,length-pos);var tailOldPos=pos+remove;var tailNewPos=tailOldPos+add-remove;var tailCount=length-tailOldPos;var lengthAfterRemove=length-remove;if(tailNewPos<tailOldPos){// case A\nfor(var i=0;i<tailCount;++i){this[tailNewPos+i]=this[tailOldPos+i];}}else if(tailNewPos>tailOldPos){// case B\nfor(i=tailCount;i--;){this[tailNewPos+i]=this[tailOldPos+i];}}// else, add == remove (nothing to do)\nif(add&&pos===lengthAfterRemove){this.length=lengthAfterRemove;// truncate array\nthis.push.apply(this,insert);}else{this.length=lengthAfterRemove+add;// reserves space\nfor(i=0;i<add;++i){this[pos+i]=insert[i];}}}return removed;};}}if(!Array.isArray){Array.isArray=function isArray(obj){return _toString(obj)==\"[object Array]\";};}var boxedString=Object(\"a\"),splitString=boxedString[0]!=\"a\"||!(0 in boxedString);if(!Array.prototype.forEach){Array.prototype.forEach=function forEach(fun/*, thisp*/){var object=toObject(this),self=splitString&&_toString(this)==\"[object String]\"?this.split(\"\"):object,thisp=arguments[1],i=-1,length=self.length>>>0;if(_toString(fun)!=\"[object Function]\"){throw new TypeError();// TODO message\n}while(++i<length){if(i in self){fun.call(thisp,self[i],i,object);}}};}if(!Array.prototype.map){Array.prototype.map=function map(fun/*, thisp*/){var object=toObject(this),self=splitString&&_toString(this)==\"[object String]\"?this.split(\"\"):object,length=self.length>>>0,result=Array(length),thisp=arguments[1];if(_toString(fun)!=\"[object Function]\"){throw new TypeError(fun+\" is not a function\");}for(var i=0;i<length;i++){if(i in self)result[i]=fun.call(thisp,self[i],i,object);}return result;};}if(!Array.prototype.filter){Array.prototype.filter=function filter(fun/*, thisp */){var object=toObject(this),self=splitString&&_toString(this)==\"[object String]\"?this.split(\"\"):object,length=self.length>>>0,result=[],value,thisp=arguments[1];if(_toString(fun)!=\"[object Function]\"){throw new TypeError(fun+\" is not a function\");}for(var i=0;i<length;i++){if(i in self){value=self[i];if(fun.call(thisp,value,i,object)){result.push(value);}}}return result;};}if(!Array.prototype.every){Array.prototype.every=function every(fun/*, thisp */){var object=toObject(this),self=splitString&&_toString(this)==\"[object String]\"?this.split(\"\"):object,length=self.length>>>0,thisp=arguments[1];if(_toString(fun)!=\"[object Function]\"){throw new TypeError(fun+\" is not a function\");}for(var i=0;i<length;i++){if(i in self&&!fun.call(thisp,self[i],i,object)){return false;}}return true;};}if(!Array.prototype.some){Array.prototype.some=function some(fun/*, thisp */){var object=toObject(this),self=splitString&&_toString(this)==\"[object String]\"?this.split(\"\"):object,length=self.length>>>0,thisp=arguments[1];if(_toString(fun)!=\"[object Function]\"){throw new TypeError(fun+\" is not a function\");}for(var i=0;i<length;i++){if(i in self&&fun.call(thisp,self[i],i,object)){return true;}}return false;};}if(!Array.prototype.reduce){Array.prototype.reduce=function reduce(fun/*, initial*/){var object=toObject(this),self=splitString&&_toString(this)==\"[object String]\"?this.split(\"\"):object,length=self.length>>>0;if(_toString(fun)!=\"[object Function]\"){throw new TypeError(fun+\" is not a function\");}if(!length&&arguments.length==1){throw new TypeError(\"reduce of empty array with no initial value\");}var i=0;var result;if(arguments.length>=2){result=arguments[1];}else{do{if(i in self){result=self[i++];break;}if(++i>=length){throw new TypeError(\"reduce of empty array with no initial value\");}}while(true);}for(;i<length;i++){if(i in self){result=fun.call(void 0,result,self[i],i,object);}}return result;};}if(!Array.prototype.reduceRight){Array.prototype.reduceRight=function reduceRight(fun/*, initial*/){var object=toObject(this),self=splitString&&_toString(this)==\"[object String]\"?this.split(\"\"):object,length=self.length>>>0;if(_toString(fun)!=\"[object Function]\"){throw new TypeError(fun+\" is not a function\");}if(!length&&arguments.length==1){throw new TypeError(\"reduceRight of empty array with no initial value\");}var result,i=length-1;if(arguments.length>=2){result=arguments[1];}else{do{if(i in self){result=self[i--];break;}if(--i<0){throw new TypeError(\"reduceRight of empty array with no initial value\");}}while(true);}do{if(i in this){result=fun.call(void 0,result,self[i],i,object);}}while(i--);return result;};}if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1){Array.prototype.indexOf=function indexOf(sought/*, fromIndex */){var self=splitString&&_toString(this)==\"[object String]\"?this.split(\"\"):toObject(this),length=self.length>>>0;if(!length){return-1;}var i=0;if(arguments.length>1){i=toInteger(arguments[1]);}i=i>=0?i:Math.max(0,length+i);for(;i<length;i++){if(i in self&&self[i]===sought){return i;}}return-1;};}if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1){Array.prototype.lastIndexOf=function lastIndexOf(sought/*, fromIndex */){var self=splitString&&_toString(this)==\"[object String]\"?this.split(\"\"):toObject(this),length=self.length>>>0;if(!length){return-1;}var i=length-1;if(arguments.length>1){i=Math.min(i,toInteger(arguments[1]));}i=i>=0?i:length-Math.abs(i);for(;i>=0;i--){if(i in self&&sought===self[i]){return i;}}return-1;};}if(!Object.getPrototypeOf){Object.getPrototypeOf=function getPrototypeOf(object){return object.__proto__||(object.constructor?object.constructor.prototype:prototypeOfObject);};}if(!Object.getOwnPropertyDescriptor){var ERR_NON_OBJECT=\"Object.getOwnPropertyDescriptor called on a \"+\"non-object: \";Object.getOwnPropertyDescriptor=function getOwnPropertyDescriptor(object,property){if(typeof object!=\"object\"&&typeof object!=\"function\"||object===null)throw new TypeError(ERR_NON_OBJECT+object);if(!owns(object,property))return;var descriptor,getter,setter;descriptor={enumerable:true,configurable:true};if(supportsAccessors){var prototype=object.__proto__;object.__proto__=prototypeOfObject;var getter=lookupGetter(object,property);var setter=lookupSetter(object,property);object.__proto__=prototype;if(getter||setter){if(getter)descriptor.get=getter;if(setter)descriptor.set=setter;return descriptor;}}descriptor.value=object[property];return descriptor;};}if(!Object.getOwnPropertyNames){Object.getOwnPropertyNames=function getOwnPropertyNames(object){return Object.keys(object);};}if(!Object.create){var createEmpty;if(Object.prototype.__proto__===null){createEmpty=function(){return{\"__proto__\":null};};}else{createEmpty=function(){var empty={};for(var i in empty)empty[i]=null;empty.constructor=empty.hasOwnProperty=empty.propertyIsEnumerable=empty.isPrototypeOf=empty.toLocaleString=empty.toString=empty.valueOf=empty.__proto__=null;return empty;};}Object.create=function create(prototype,properties){var object;if(prototype===null){object=createEmpty();}else{if(typeof prototype!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof prototype+\"] != 'object'\");var Type=function(){};Type.prototype=prototype;object=new Type();object.__proto__=prototype;}if(properties!==void 0)Object.defineProperties(object,properties);return object;};}function doesDefinePropertyWork(object){try{Object.defineProperty(object,\"sentinel\",{});return\"sentinel\"in object;}catch(exception){}}if(Object.defineProperty){var definePropertyWorksOnObject=doesDefinePropertyWork({});var definePropertyWorksOnDom=typeof document==\"undefined\"||doesDefinePropertyWork(document.createElement(\"div\"));if(!definePropertyWorksOnObject||!definePropertyWorksOnDom){var definePropertyFallback=Object.defineProperty;}}if(!Object.defineProperty||definePropertyFallback){var ERR_NON_OBJECT_DESCRIPTOR=\"Property description must be an object: \";var ERR_NON_OBJECT_TARGET=\"Object.defineProperty called on non-object: \";var ERR_ACCESSORS_NOT_SUPPORTED=\"getters & setters can not be defined \"+\"on this javascript engine\";Object.defineProperty=function defineProperty(object,property,descriptor){if(typeof object!=\"object\"&&typeof object!=\"function\"||object===null)throw new TypeError(ERR_NON_OBJECT_TARGET+object);if(typeof descriptor!=\"object\"&&typeof descriptor!=\"function\"||descriptor===null)throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR+descriptor);if(definePropertyFallback){try{return definePropertyFallback.call(Object,object,property,descriptor);}catch(exception){}}if(owns(descriptor,\"value\")){if(supportsAccessors&&(lookupGetter(object,property)||lookupSetter(object,property))){var prototype=object.__proto__;object.__proto__=prototypeOfObject;delete object[property];object[property]=descriptor.value;object.__proto__=prototype;}else{object[property]=descriptor.value;}}else{if(!supportsAccessors)throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);if(owns(descriptor,\"get\"))defineGetter(object,property,descriptor.get);if(owns(descriptor,\"set\"))defineSetter(object,property,descriptor.set);}return object;};}if(!Object.defineProperties){Object.defineProperties=function defineProperties(object,properties){for(var property in properties){if(owns(properties,property))Object.defineProperty(object,property,properties[property]);}return object;};}if(!Object.seal){Object.seal=function seal(object){return object;};}if(!Object.freeze){Object.freeze=function freeze(object){return object;};}try{Object.freeze(function(){});}catch(exception){Object.freeze=function freeze(freezeObject){return function freeze(object){if(typeof object==\"function\"){return object;}else{return freezeObject(object);}};}(Object.freeze);}if(!Object.preventExtensions){Object.preventExtensions=function preventExtensions(object){return object;};}if(!Object.isSealed){Object.isSealed=function isSealed(object){return false;};}if(!Object.isFrozen){Object.isFrozen=function isFrozen(object){return false;};}if(!Object.isExtensible){Object.isExtensible=function isExtensible(object){if(Object(object)===object){throw new TypeError();// TODO message\n}var name='';while(owns(object,name)){name+='?';}object[name]=true;var returnValue=owns(object,name);delete object[name];return returnValue;};}if(!Object.keys){var hasDontEnumBug=true,dontEnums=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],dontEnumsLength=dontEnums.length;for(var key in{\"toString\":null}){hasDontEnumBug=false;}Object.keys=function keys(object){if(typeof object!=\"object\"&&typeof object!=\"function\"||object===null){throw new TypeError(\"Object.keys called on a non-object\");}var keys=[];for(var name in object){if(owns(object,name)){keys.push(name);}}if(hasDontEnumBug){for(var i=0,ii=dontEnumsLength;i<ii;i++){var dontEnum=dontEnums[i];if(owns(object,dontEnum)){keys.push(dontEnum);}}}return keys;};}if(!Date.now){Date.now=function now(){return new Date().getTime();};}var ws=\"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\"+\"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\"+\"\\u2029\\uFEFF\";if(!String.prototype.trim||ws.trim()){ws=\"[\"+ws+\"]\";var trimBeginRegexp=new RegExp(\"^\"+ws+ws+\"*\"),trimEndRegexp=new RegExp(ws+ws+\"*$\");String.prototype.trim=function trim(){return String(this).replace(trimBeginRegexp,\"\").replace(trimEndRegexp,\"\");};}function toInteger(n){n=+n;if(n!==n){// isNaN\nn=0;}else if(n!==0&&n!==1/0&&n!==-(1/0)){n=(n>0||-1)*Math.floor(Math.abs(n));}return n;}function isPrimitive(input){var type=typeof input;return input===null||type===\"undefined\"||type===\"boolean\"||type===\"number\"||type===\"string\";}function toPrimitive(input){var val,valueOf,toString;if(isPrimitive(input)){return input;}valueOf=input.valueOf;if(typeof valueOf===\"function\"){val=valueOf.call(input);if(isPrimitive(val)){return val;}}toString=input.toString;if(typeof toString===\"function\"){val=toString.call(input);if(isPrimitive(val)){return val;}}throw new TypeError();}var toObject=function(o){if(o==null){// this matches both null and undefined\nthrow new TypeError(\"can't convert \"+o+\" to object\");}return Object(o);};});ace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/regexp\",\"ace/lib/es5-shim\"],function(acequire,exports,module){\"use strict\";acequire(\"./regexp\");acequire(\"./es5-shim\");});ace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\"],function(acequire,exports,module){\"use strict\";var XHTML_NS=\"http://www.w3.org/1999/xhtml\";exports.getDocumentHead=function(doc){if(!doc)doc=document;return doc.head||doc.getElementsByTagName(\"head\")[0]||doc.documentElement;};exports.createElement=function(tag,ns){return document.createElementNS?document.createElementNS(ns||XHTML_NS,tag):document.createElement(tag);};exports.hasCssClass=function(el,name){var classes=(el.className||\"\").split(/\\s+/g);return classes.indexOf(name)!==-1;};exports.addCssClass=function(el,name){if(!exports.hasCssClass(el,name)){el.className+=\" \"+name;}};exports.removeCssClass=function(el,name){var classes=el.className.split(/\\s+/g);while(true){var index=classes.indexOf(name);if(index==-1){break;}classes.splice(index,1);}el.className=classes.join(\" \");};exports.toggleCssClass=function(el,name){var classes=el.className.split(/\\s+/g),add=true;while(true){var index=classes.indexOf(name);if(index==-1){break;}add=false;classes.splice(index,1);}if(add)classes.push(name);el.className=classes.join(\" \");return add;};exports.setCssClass=function(node,className,include){if(include){exports.addCssClass(node,className);}else{exports.removeCssClass(node,className);}};exports.hasCssString=function(id,doc){var index=0,sheets;doc=doc||document;if(doc.createStyleSheet&&(sheets=doc.styleSheets)){while(index<sheets.length)if(sheets[index++].owningElement.id===id)return true;}else if(sheets=doc.getElementsByTagName(\"style\")){while(index<sheets.length)if(sheets[index++].id===id)return true;}return false;};exports.importCssString=function importCssString(cssText,id,doc){doc=doc||document;if(id&&exports.hasCssString(id,doc))return null;var style;if(id)cssText+=\"\\n/*# sourceURL=ace/css/\"+id+\" */\";if(doc.createStyleSheet){style=doc.createStyleSheet();style.cssText=cssText;if(id)style.owningElement.id=id;}else{style=exports.createElement(\"style\");style.appendChild(doc.createTextNode(cssText));if(id)style.id=id;exports.getDocumentHead(doc).appendChild(style);}};exports.importCssStylsheet=function(uri,doc){if(doc.createStyleSheet){doc.createStyleSheet(uri);}else{var link=exports.createElement('link');link.rel='stylesheet';link.href=uri;exports.getDocumentHead(doc).appendChild(link);}};exports.getInnerWidth=function(element){return parseInt(exports.computedStyle(element,\"paddingLeft\"),10)+parseInt(exports.computedStyle(element,\"paddingRight\"),10)+element.clientWidth;};exports.getInnerHeight=function(element){return parseInt(exports.computedStyle(element,\"paddingTop\"),10)+parseInt(exports.computedStyle(element,\"paddingBottom\"),10)+element.clientHeight;};exports.scrollbarWidth=function(document){var inner=exports.createElement(\"ace_inner\");inner.style.width=\"100%\";inner.style.minWidth=\"0px\";inner.style.height=\"200px\";inner.style.display=\"block\";var outer=exports.createElement(\"ace_outer\");var style=outer.style;style.position=\"absolute\";style.left=\"-10000px\";style.overflow=\"hidden\";style.width=\"200px\";style.minWidth=\"0px\";style.height=\"150px\";style.display=\"block\";outer.appendChild(inner);var body=document.documentElement;body.appendChild(outer);var noScrollbar=inner.offsetWidth;style.overflow=\"scroll\";var withScrollbar=inner.offsetWidth;if(noScrollbar==withScrollbar){withScrollbar=outer.clientWidth;}body.removeChild(outer);return noScrollbar-withScrollbar;};if(typeof document==\"undefined\"){exports.importCssString=function(){};return;}if(window.pageYOffset!==undefined){exports.getPageScrollTop=function(){return window.pageYOffset;};exports.getPageScrollLeft=function(){return window.pageXOffset;};}else{exports.getPageScrollTop=function(){return document.body.scrollTop;};exports.getPageScrollLeft=function(){return document.body.scrollLeft;};}if(window.getComputedStyle)exports.computedStyle=function(element,style){if(style)return(window.getComputedStyle(element,\"\")||{})[style]||\"\";return window.getComputedStyle(element,\"\")||{};};else exports.computedStyle=function(element,style){if(style)return element.currentStyle[style];return element.currentStyle;};exports.setInnerHtml=function(el,innerHtml){var element=el.cloneNode(false);//document.createElement(\"div\");\nelement.innerHTML=innerHtml;el.parentNode.replaceChild(element,el);return element;};if(\"textContent\"in document.documentElement){exports.setInnerText=function(el,innerText){el.textContent=innerText;};exports.getInnerText=function(el){return el.textContent;};}else{exports.setInnerText=function(el,innerText){el.innerText=innerText;};exports.getInnerText=function(el){return el.innerText;};}exports.getParentWindow=function(document){return document.defaultView||document.parentWindow;};});ace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"],function(acequire,exports,module){\"use strict\";exports.inherits=function(ctor,superCtor){ctor.super_=superCtor;ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:false,writable:true,configurable:true}});};exports.mixin=function(obj,mixin){for(var key in mixin){obj[key]=mixin[key];}return obj;};exports.implement=function(proto,mixin){exports.mixin(proto,mixin);};});ace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\"],function(acequire,exports,module){\"use strict\";acequire(\"./fixoldbrowsers\");var oop=acequire(\"./oop\");var Keys=function(){var ret={MODIFIER_KEYS:{16:'Shift',17:'Ctrl',18:'Alt',224:'Meta'},KEY_MODS:{\"ctrl\":1,\"alt\":2,\"option\":2,\"shift\":4,\"super\":8,\"meta\":8,\"command\":8,\"cmd\":8},FUNCTION_KEYS:{8:\"Backspace\",9:\"Tab\",13:\"Return\",19:\"Pause\",27:\"Esc\",32:\"Space\",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"Left\",38:\"Up\",39:\"Right\",40:\"Down\",44:\"Print\",45:\"Insert\",46:\"Delete\",96:\"Numpad0\",97:\"Numpad1\",98:\"Numpad2\",99:\"Numpad3\",100:\"Numpad4\",101:\"Numpad5\",102:\"Numpad6\",103:\"Numpad7\",104:\"Numpad8\",105:\"Numpad9\",'-13':\"NumpadEnter\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"Numlock\",145:\"Scrolllock\"},PRINTABLE_KEYS:{32:' ',48:'0',49:'1',50:'2',51:'3',52:'4',53:'5',54:'6',55:'7',56:'8',57:'9',59:';',61:'=',65:'a',66:'b',67:'c',68:'d',69:'e',70:'f',71:'g',72:'h',73:'i',74:'j',75:'k',76:'l',77:'m',78:'n',79:'o',80:'p',81:'q',82:'r',83:'s',84:'t',85:'u',86:'v',87:'w',88:'x',89:'y',90:'z',107:'+',109:'-',110:'.',186:';',187:'=',188:',',189:'-',190:'.',191:'/',192:'`',219:'[',220:'\\\\',221:']',222:\"'\",111:'/',106:'*'}};var name,i;for(i in ret.FUNCTION_KEYS){name=ret.FUNCTION_KEYS[i].toLowerCase();ret[name]=parseInt(i,10);}for(i in ret.PRINTABLE_KEYS){name=ret.PRINTABLE_KEYS[i].toLowerCase();ret[name]=parseInt(i,10);}oop.mixin(ret,ret.MODIFIER_KEYS);oop.mixin(ret,ret.PRINTABLE_KEYS);oop.mixin(ret,ret.FUNCTION_KEYS);ret.enter=ret[\"return\"];ret.escape=ret.esc;ret.del=ret[\"delete\"];ret[173]='-';(function(){var mods=[\"cmd\",\"ctrl\",\"alt\",\"shift\"];for(var i=Math.pow(2,mods.length);i--;){ret.KEY_MODS[i]=mods.filter(function(x){return i&ret.KEY_MODS[x];}).join(\"-\")+\"-\";}})();ret.KEY_MODS[0]=\"\";ret.KEY_MODS[-1]=\"input-\";return ret;}();oop.mixin(exports,Keys);exports.keyCodeToString=function(keyCode){var keyString=Keys[keyCode];if(typeof keyString!=\"string\")keyString=String.fromCharCode(keyCode);return keyString.toLowerCase();};});ace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"],function(acequire,exports,module){\"use strict\";exports.OS={LINUX:\"LINUX\",MAC:\"MAC\",WINDOWS:\"WINDOWS\"};exports.getOS=function(){if(exports.isMac){return exports.OS.MAC;}else if(exports.isLinux){return exports.OS.LINUX;}else{return exports.OS.WINDOWS;}};if(typeof navigator!=\"object\")return;var os=(navigator.platform.match(/mac|win|linux/i)||[\"other\"])[0].toLowerCase();var ua=navigator.userAgent;exports.isWin=os==\"win\";exports.isMac=os==\"mac\";exports.isLinux=os==\"linux\";exports.isIE=navigator.appName==\"Microsoft Internet Explorer\"||navigator.appName.indexOf(\"MSAppHost\")>=0?parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]):parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]);// for ie\nexports.isOldIE=exports.isIE&&exports.isIE<9;exports.isGecko=exports.isMozilla=(window.Controllers||window.controllers)&&window.navigator.product===\"Gecko\";exports.isOldGecko=exports.isGecko&&parseInt((ua.match(/rv\\:(\\d+)/)||[])[1],10)<4;exports.isOpera=window.opera&&Object.prototype.toString.call(window.opera)==\"[object Opera]\";exports.isWebKit=parseFloat(ua.split(\"WebKit/\")[1])||undefined;exports.isChrome=parseFloat(ua.split(\" Chrome/\")[1])||undefined;exports.isAIR=ua.indexOf(\"AdobeAIR\")>=0;exports.isIPad=ua.indexOf(\"iPad\")>=0;exports.isTouchPad=ua.indexOf(\"TouchPad\")>=0;exports.isChromeOS=ua.indexOf(\" CrOS \")>=0;});ace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"],function(acequire,exports,module){\"use strict\";var keys=acequire(\"./keys\");var useragent=acequire(\"./useragent\");var pressedKeys=null;var ts=0;exports.addListener=function(elem,type,callback){if(elem.addEventListener){return elem.addEventListener(type,callback,false);}if(elem.attachEvent){var wrapper=function(){callback.call(elem,window.event);};callback._wrapper=wrapper;elem.attachEvent(\"on\"+type,wrapper);}};exports.removeListener=function(elem,type,callback){if(elem.removeEventListener){return elem.removeEventListener(type,callback,false);}if(elem.detachEvent){elem.detachEvent(\"on\"+type,callback._wrapper||callback);}};exports.stopEvent=function(e){exports.stopPropagation(e);exports.preventDefault(e);return false;};exports.stopPropagation=function(e){if(e.stopPropagation)e.stopPropagation();else e.cancelBubble=true;};exports.preventDefault=function(e){if(e.preventDefault)e.preventDefault();else e.returnValue=false;};exports.getButton=function(e){if(e.type==\"dblclick\")return 0;if(e.type==\"contextmenu\"||useragent.isMac&&e.ctrlKey&&!e.altKey&&!e.shiftKey)return 2;if(e.preventDefault){return e.button;}else{return{1:0,2:2,4:1}[e.button];}};exports.capture=function(el,eventHandler,releaseCaptureHandler){function onMouseUp(e){eventHandler&&eventHandler(e);releaseCaptureHandler&&releaseCaptureHandler(e);exports.removeListener(document,\"mousemove\",eventHandler,true);exports.removeListener(document,\"mouseup\",onMouseUp,true);exports.removeListener(document,\"dragstart\",onMouseUp,true);}exports.addListener(document,\"mousemove\",eventHandler,true);exports.addListener(document,\"mouseup\",onMouseUp,true);exports.addListener(document,\"dragstart\",onMouseUp,true);return onMouseUp;};exports.addTouchMoveListener=function(el,callback){if(\"ontouchmove\"in el){var startx,starty;exports.addListener(el,\"touchstart\",function(e){var touchObj=e.changedTouches[0];startx=touchObj.clientX;starty=touchObj.clientY;});exports.addListener(el,\"touchmove\",function(e){var factor=1,touchObj=e.changedTouches[0];e.wheelX=-(touchObj.clientX-startx)/factor;e.wheelY=-(touchObj.clientY-starty)/factor;startx=touchObj.clientX;starty=touchObj.clientY;callback(e);});}};exports.addMouseWheelListener=function(el,callback){if(\"onmousewheel\"in el){exports.addListener(el,\"mousewheel\",function(e){var factor=8;if(e.wheelDeltaX!==undefined){e.wheelX=-e.wheelDeltaX/factor;e.wheelY=-e.wheelDeltaY/factor;}else{e.wheelX=0;e.wheelY=-e.wheelDelta/factor;}callback(e);});}else if(\"onwheel\"in el){exports.addListener(el,\"wheel\",function(e){var factor=0.35;switch(e.deltaMode){case e.DOM_DELTA_PIXEL:e.wheelX=e.deltaX*factor||0;e.wheelY=e.deltaY*factor||0;break;case e.DOM_DELTA_LINE:case e.DOM_DELTA_PAGE:e.wheelX=(e.deltaX||0)*5;e.wheelY=(e.deltaY||0)*5;break;}callback(e);});}else{exports.addListener(el,\"DOMMouseScroll\",function(e){if(e.axis&&e.axis==e.HORIZONTAL_AXIS){e.wheelX=(e.detail||0)*5;e.wheelY=0;}else{e.wheelX=0;e.wheelY=(e.detail||0)*5;}callback(e);});}};exports.addMultiMouseDownListener=function(elements,timeouts,eventHandler,callbackName){var clicks=0;var startX,startY,timer;var eventNames={2:\"dblclick\",3:\"tripleclick\",4:\"quadclick\"};function onMousedown(e){if(exports.getButton(e)!==0){clicks=0;}else if(e.detail>1){clicks++;if(clicks>4)clicks=1;}else{clicks=1;}if(useragent.isIE){var isNewClick=Math.abs(e.clientX-startX)>5||Math.abs(e.clientY-startY)>5;if(!timer||isNewClick)clicks=1;if(timer)clearTimeout(timer);timer=setTimeout(function(){timer=null;},timeouts[clicks-1]||600);if(clicks==1){startX=e.clientX;startY=e.clientY;}}e._clicks=clicks;eventHandler[callbackName](\"mousedown\",e);if(clicks>4)clicks=0;else if(clicks>1)return eventHandler[callbackName](eventNames[clicks],e);}function onDblclick(e){clicks=2;if(timer)clearTimeout(timer);timer=setTimeout(function(){timer=null;},timeouts[clicks-1]||600);eventHandler[callbackName](\"mousedown\",e);eventHandler[callbackName](eventNames[clicks],e);}if(!Array.isArray(elements))elements=[elements];elements.forEach(function(el){exports.addListener(el,\"mousedown\",onMousedown);if(useragent.isOldIE)exports.addListener(el,\"dblclick\",onDblclick);});};var getModifierHash=useragent.isMac&&useragent.isOpera&&!(\"KeyboardEvent\"in window)?function(e){return 0|(e.metaKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.ctrlKey?8:0);}:function(e){return 0|(e.ctrlKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.metaKey?8:0);};exports.getModifierString=function(e){return keys.KEY_MODS[getModifierHash(e)];};function normalizeCommandKeys(callback,e,keyCode){var hashId=getModifierHash(e);if(!useragent.isMac&&pressedKeys){if(pressedKeys.OSKey)hashId|=8;if(pressedKeys.altGr){if((3&hashId)!=3)pressedKeys.altGr=0;else return;}if(keyCode===18||keyCode===17){var location=\"location\"in e?e.location:e.keyLocation;if(keyCode===17&&location===1){if(pressedKeys[keyCode]==1)ts=e.timeStamp;}else if(keyCode===18&&hashId===3&&location===2){var dt=e.timeStamp-ts;if(dt<50)pressedKeys.altGr=true;}}}if(keyCode in keys.MODIFIER_KEYS){keyCode=-1;}if(hashId&8&&keyCode>=91&&keyCode<=93){keyCode=-1;}if(!hashId&&keyCode===13){var location=\"location\"in e?e.location:e.keyLocation;if(location===3){callback(e,hashId,-keyCode);if(e.defaultPrevented)return;}}if(useragent.isChromeOS&&hashId&8){callback(e,hashId,keyCode);if(e.defaultPrevented)return;else hashId&=~8;}if(!hashId&&!(keyCode in keys.FUNCTION_KEYS)&&!(keyCode in keys.PRINTABLE_KEYS)){return false;}return callback(e,hashId,keyCode);}exports.addCommandKeyListener=function(el,callback){var addListener=exports.addListener;if(useragent.isOldGecko||useragent.isOpera&&!(\"KeyboardEvent\"in window)){var lastKeyDownKeyCode=null;addListener(el,\"keydown\",function(e){lastKeyDownKeyCode=e.keyCode;});addListener(el,\"keypress\",function(e){return normalizeCommandKeys(callback,e,lastKeyDownKeyCode);});}else{var lastDefaultPrevented=null;addListener(el,\"keydown\",function(e){var keyCode=e.keyCode;pressedKeys[keyCode]=(pressedKeys[keyCode]||0)+1;if(keyCode==91||keyCode==92){pressedKeys.OSKey=true;}else if(pressedKeys.OSKey){if(e.timeStamp-pressedKeys.lastT>200&&pressedKeys.count==1)resetPressedKeys();}if(pressedKeys[keyCode]==1)pressedKeys.count++;pressedKeys.lastT=e.timeStamp;var result=normalizeCommandKeys(callback,e,keyCode);lastDefaultPrevented=e.defaultPrevented;return result;});addListener(el,\"keypress\",function(e){if(lastDefaultPrevented&&(e.ctrlKey||e.altKey||e.shiftKey||e.metaKey)){exports.stopEvent(e);lastDefaultPrevented=null;}});addListener(el,\"keyup\",function(e){var keyCode=e.keyCode;if(!pressedKeys[keyCode]){resetPressedKeys();}else{pressedKeys.count=Math.max(pressedKeys.count-1,0);}if(keyCode==91||keyCode==92){pressedKeys.OSKey=false;}pressedKeys[keyCode]=null;});if(!pressedKeys){resetPressedKeys();addListener(window,\"focus\",resetPressedKeys);}}};function resetPressedKeys(){pressedKeys=Object.create(null);pressedKeys.count=0;pressedKeys.lastT=0;}if(typeof window==\"object\"&&window.postMessage&&!useragent.isOldIE){var postMessageId=1;exports.nextTick=function(callback,win){win=win||window;var messageName=\"zero-timeout-message-\"+postMessageId;exports.addListener(win,\"message\",function listener(e){if(e.data==messageName){exports.stopPropagation(e);exports.removeListener(win,\"message\",listener);callback();}});win.postMessage(messageName,\"*\");};}exports.nextFrame=typeof window==\"object\"&&(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame);if(exports.nextFrame)exports.nextFrame=exports.nextFrame.bind(window);else exports.nextFrame=function(callback){setTimeout(callback,17);};});ace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"],function(acequire,exports,module){\"use strict\";exports.last=function(a){return a[a.length-1];};exports.stringReverse=function(string){return string.split(\"\").reverse().join(\"\");};exports.stringRepeat=function(string,count){var result='';while(count>0){if(count&1)result+=string;if(count>>=1)string+=string;}return result;};var trimBeginRegexp=/^\\s\\s*/;var trimEndRegexp=/\\s\\s*$/;exports.stringTrimLeft=function(string){return string.replace(trimBeginRegexp,'');};exports.stringTrimRight=function(string){return string.replace(trimEndRegexp,'');};exports.copyObject=function(obj){var copy={};for(var key in obj){copy[key]=obj[key];}return copy;};exports.copyArray=function(array){var copy=[];for(var i=0,l=array.length;i<l;i++){if(array[i]&&typeof array[i]==\"object\")copy[i]=this.copyObject(array[i]);else copy[i]=array[i];}return copy;};exports.deepCopy=function deepCopy(obj){if(typeof obj!==\"object\"||!obj)return obj;var copy;if(Array.isArray(obj)){copy=[];for(var key=0;key<obj.length;key++){copy[key]=deepCopy(obj[key]);}return copy;}var cons=obj.constructor;if(cons===RegExp)return obj;copy=cons();for(var key in obj){copy[key]=deepCopy(obj[key]);}return copy;};exports.arrayToMap=function(arr){var map={};for(var i=0;i<arr.length;i++){map[arr[i]]=1;}return map;};exports.createMap=function(props){var map=Object.create(null);for(var i in props){map[i]=props[i];}return map;};exports.arrayRemove=function(array,value){for(var i=0;i<=array.length;i++){if(value===array[i]){array.splice(i,1);}}};exports.escapeRegExp=function(str){return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,'\\\\$1');};exports.escapeHTML=function(str){return str.replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\");};exports.getMatchOffsets=function(string,regExp){var matches=[];string.replace(regExp,function(str){matches.push({offset:arguments[arguments.length-2],length:str.length});});return matches;};exports.deferredCall=function(fcn){var timer=null;var callback=function(){timer=null;fcn();};var deferred=function(timeout){deferred.cancel();timer=setTimeout(callback,timeout||0);return deferred;};deferred.schedule=deferred;deferred.call=function(){this.cancel();fcn();return deferred;};deferred.cancel=function(){clearTimeout(timer);timer=null;return deferred;};deferred.isPending=function(){return timer;};return deferred;};exports.delayedCall=function(fcn,defaultTimeout){var timer=null;var callback=function(){timer=null;fcn();};var _self=function(timeout){if(timer==null)timer=setTimeout(callback,timeout||defaultTimeout);};_self.delay=function(timeout){timer&&clearTimeout(timer);timer=setTimeout(callback,timeout||defaultTimeout);};_self.schedule=_self;_self.call=function(){this.cancel();fcn();};_self.cancel=function(){timer&&clearTimeout(timer);timer=null;};_self.isPending=function(){return timer;};return _self;};});ace.define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\"],function(acequire,exports,module){\"use strict\";var event=acequire(\"../lib/event\");var useragent=acequire(\"../lib/useragent\");var dom=acequire(\"../lib/dom\");var lang=acequire(\"../lib/lang\");var BROKEN_SETDATA=useragent.isChrome<18;var USE_IE_MIME_TYPE=useragent.isIE;var TextInput=function(parentNode,host){var text=dom.createElement(\"textarea\");text.className=\"ace_text-input\";if(useragent.isTouchPad)text.setAttribute(\"x-palm-disable-auto-cap\",true);text.setAttribute(\"wrap\",\"off\");text.setAttribute(\"autocorrect\",\"off\");text.setAttribute(\"autocapitalize\",\"off\");text.setAttribute(\"spellcheck\",false);text.style.opacity=\"0\";if(useragent.isOldIE)text.style.top=\"-1000px\";parentNode.insertBefore(text,parentNode.firstChild);var PLACEHOLDER=\"\\x01\\x01\";var copied=false;var pasted=false;var inComposition=false;var tempStyle='';var isSelectionEmpty=true;try{var isFocused=document.activeElement===text;}catch(e){}event.addListener(text,\"blur\",function(e){host.onBlur(e);isFocused=false;});event.addListener(text,\"focus\",function(e){isFocused=true;host.onFocus(e);resetSelection();});this.focus=function(){if(tempStyle)return text.focus();var top=text.style.top;text.style.position=\"fixed\";text.style.top=\"0px\";text.focus();setTimeout(function(){text.style.position=\"\";if(text.style.top==\"0px\")text.style.top=top;},0);};this.blur=function(){text.blur();};this.isFocused=function(){return isFocused;};var syncSelection=lang.delayedCall(function(){isFocused&&resetSelection(isSelectionEmpty);});var syncValue=lang.delayedCall(function(){if(!inComposition){text.value=PLACEHOLDER;isFocused&&resetSelection();}});function resetSelection(isEmpty){if(inComposition)return;inComposition=true;if(inputHandler){selectionStart=0;selectionEnd=isEmpty?0:text.value.length-1;}else{var selectionStart=isEmpty?2:1;var selectionEnd=2;}try{text.setSelectionRange(selectionStart,selectionEnd);}catch(e){}inComposition=false;}function resetValue(){if(inComposition)return;text.value=PLACEHOLDER;if(useragent.isWebKit)syncValue.schedule();}useragent.isWebKit||host.addEventListener('changeSelection',function(){if(host.selection.isEmpty()!=isSelectionEmpty){isSelectionEmpty=!isSelectionEmpty;syncSelection.schedule();}});resetValue();if(isFocused)host.onFocus();var isAllSelected=function(text){return text.selectionStart===0&&text.selectionEnd===text.value.length;};if(!text.setSelectionRange&&text.createTextRange){text.setSelectionRange=function(selectionStart,selectionEnd){var range=this.createTextRange();range.collapse(true);range.moveStart('character',selectionStart);range.moveEnd('character',selectionEnd);range.select();};isAllSelected=function(text){try{var range=text.ownerDocument.selection.createRange();}catch(e){}if(!range||range.parentElement()!=text)return false;return range.text==text.value;};}if(useragent.isOldIE){var inPropertyChange=false;var onPropertyChange=function(e){if(inPropertyChange)return;var data=text.value;if(inComposition||!data||data==PLACEHOLDER)return;if(e&&data==PLACEHOLDER[0])return syncProperty.schedule();sendText(data);inPropertyChange=true;resetValue();inPropertyChange=false;};var syncProperty=lang.delayedCall(onPropertyChange);event.addListener(text,\"propertychange\",onPropertyChange);var keytable={13:1,27:1};event.addListener(text,\"keyup\",function(e){if(inComposition&&(!text.value||keytable[e.keyCode]))setTimeout(onCompositionEnd,0);if((text.value.charCodeAt(0)||0)<129){return syncProperty.call();}inComposition?onCompositionUpdate():onCompositionStart();});event.addListener(text,\"keydown\",function(e){syncProperty.schedule(50);});}var onSelect=function(e){if(copied){copied=false;}else if(isAllSelected(text)){host.selectAll();resetSelection();}else if(inputHandler){resetSelection(host.selection.isEmpty());}};var inputHandler=null;this.setInputHandler=function(cb){inputHandler=cb;};this.getInputHandler=function(){return inputHandler;};var afterContextMenu=false;var sendText=function(data){if(inputHandler){data=inputHandler(data);inputHandler=null;}if(pasted){resetSelection();if(data)host.onPaste(data);pasted=false;}else if(data==PLACEHOLDER.charAt(0)){if(afterContextMenu)host.execCommand(\"del\",{source:\"ace\"});else// some versions of android do not fire keydown when pressing backspace\nhost.execCommand(\"backspace\",{source:\"ace\"});}else{if(data.substring(0,2)==PLACEHOLDER)data=data.substr(2);else if(data.charAt(0)==PLACEHOLDER.charAt(0))data=data.substr(1);else if(data.charAt(data.length-1)==PLACEHOLDER.charAt(0))data=data.slice(0,-1);if(data.charAt(data.length-1)==PLACEHOLDER.charAt(0))data=data.slice(0,-1);if(data)host.onTextInput(data);}if(afterContextMenu)afterContextMenu=false;};var onInput=function(e){if(inComposition)return;var data=text.value;sendText(data);resetValue();};var handleClipboardData=function(e,data){var clipboardData=e.clipboardData||window.clipboardData;if(!clipboardData||BROKEN_SETDATA)return;var mime=USE_IE_MIME_TYPE?\"Text\":\"text/plain\";if(data){return clipboardData.setData(mime,data)!==false;}else{return clipboardData.getData(mime);}};var doCopy=function(e,isCut){var data=host.getCopyText();if(!data)return event.preventDefault(e);if(handleClipboardData(e,data)){isCut?host.onCut():host.onCopy();event.preventDefault(e);}else{copied=true;text.value=data;text.select();setTimeout(function(){copied=false;resetValue();resetSelection();isCut?host.onCut():host.onCopy();});}};var onCut=function(e){doCopy(e,true);};var onCopy=function(e){doCopy(e,false);};var onPaste=function(e){var data=handleClipboardData(e);if(typeof data==\"string\"){if(data)host.onPaste(data,e);if(useragent.isIE)setTimeout(resetSelection);event.preventDefault(e);}else{text.value=\"\";pasted=true;}};event.addCommandKeyListener(text,host.onCommandKey.bind(host));event.addListener(text,\"select\",onSelect);event.addListener(text,\"input\",onInput);event.addListener(text,\"cut\",onCut);event.addListener(text,\"copy\",onCopy);event.addListener(text,\"paste\",onPaste);if(!('oncut'in text)||!('oncopy'in text)||!('onpaste'in text)){event.addListener(parentNode,\"keydown\",function(e){if(useragent.isMac&&!e.metaKey||!e.ctrlKey)return;switch(e.keyCode){case 67:onCopy(e);break;case 86:onPaste(e);break;case 88:onCut(e);break;}});}var onCompositionStart=function(e){if(inComposition||!host.onCompositionStart||host.$readOnly)return;inComposition={};host.onCompositionStart();setTimeout(onCompositionUpdate,0);host.on(\"mousedown\",onCompositionEnd);if(!host.selection.isEmpty()){host.insert(\"\");host.session.markUndoGroup();host.selection.clearSelection();}host.session.markUndoGroup();};var onCompositionUpdate=function(){if(!inComposition||!host.onCompositionUpdate||host.$readOnly)return;var val=text.value.replace(/\\x01/g,\"\");if(inComposition.lastValue===val)return;host.onCompositionUpdate(val);if(inComposition.lastValue)host.undo();inComposition.lastValue=val;if(inComposition.lastValue){var r=host.selection.getRange();host.insert(inComposition.lastValue);host.session.markUndoGroup();inComposition.range=host.selection.getRange();host.selection.setRange(r);host.selection.clearSelection();}};var onCompositionEnd=function(e){if(!host.onCompositionEnd||host.$readOnly)return;var c=inComposition;inComposition=false;var timer=setTimeout(function(){timer=null;var str=text.value.replace(/\\x01/g,\"\");if(inComposition)return;else if(str==c.lastValue)resetValue();else if(!c.lastValue&&str){resetValue();sendText(str);}});inputHandler=function compositionInputHandler(str){if(timer)clearTimeout(timer);str=str.replace(/\\x01/g,\"\");if(str==c.lastValue)return\"\";if(c.lastValue&&timer)host.undo();return str;};host.onCompositionEnd();host.removeListener(\"mousedown\",onCompositionEnd);if(e.type==\"compositionend\"&&c.range){host.selection.setRange(c.range);}};var syncComposition=lang.delayedCall(onCompositionUpdate,50);event.addListener(text,\"compositionstart\",onCompositionStart);if(useragent.isGecko){event.addListener(text,\"text\",function(){syncComposition.schedule();});}else{event.addListener(text,\"keyup\",function(){syncComposition.schedule();});event.addListener(text,\"keydown\",function(){syncComposition.schedule();});}event.addListener(text,\"compositionend\",onCompositionEnd);this.getElement=function(){return text;};this.setReadOnly=function(readOnly){text.readOnly=readOnly;};this.onContextMenu=function(e){afterContextMenu=true;resetSelection(host.selection.isEmpty());host._emit(\"nativecontextmenu\",{target:host,domEvent:e});this.moveToMouse(e,true);};this.moveToMouse=function(e,bringToFront){if(!bringToFront&&useragent.isOldIE)return;if(!tempStyle)tempStyle=text.style.cssText;text.style.cssText=(bringToFront?\"z-index:100000;\":\"\")+\"height:\"+text.style.height+\";\"+(useragent.isIE?\"opacity:0.1;\":\"\");var rect=host.container.getBoundingClientRect();var style=dom.computedStyle(host.container);var top=rect.top+(parseInt(style.borderTopWidth)||0);var left=rect.left+(parseInt(rect.borderLeftWidth)||0);var maxTop=rect.bottom-top-text.clientHeight-2;var move=function(e){text.style.left=e.clientX-left-2+\"px\";text.style.top=Math.min(e.clientY-top-2,maxTop)+\"px\";};move(e);if(e.type!=\"mousedown\")return;if(host.renderer.$keepTextAreaAtCursor)host.renderer.$keepTextAreaAtCursor=null;clearTimeout(closeTimeout);if(useragent.isWin&&!useragent.isOldIE)event.capture(host.container,move,onContextMenuClose);};this.onContextMenuClose=onContextMenuClose;var closeTimeout;function onContextMenuClose(){clearTimeout(closeTimeout);closeTimeout=setTimeout(function(){if(tempStyle){text.style.cssText=tempStyle;tempStyle='';}if(host.renderer.$keepTextAreaAtCursor==null){host.renderer.$keepTextAreaAtCursor=true;host.renderer.$moveTextAreaToCursor();}},useragent.isOldIE?200:0);}var onContextMenu=function(e){host.textInput.onContextMenu(e);onContextMenuClose();};event.addListener(text,\"mouseup\",onContextMenu);event.addListener(text,\"mousedown\",function(e){e.preventDefault();onContextMenuClose();});event.addListener(host.renderer.scroller,\"contextmenu\",onContextMenu);event.addListener(text,\"contextmenu\",onContextMenu);};exports.TextInput=TextInput;});ace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"],function(acequire,exports,module){\"use strict\";var dom=acequire(\"../lib/dom\");var event=acequire(\"../lib/event\");var useragent=acequire(\"../lib/useragent\");var DRAG_OFFSET=0;// pixels\nfunction DefaultHandlers(mouseHandler){mouseHandler.$clickSelection=null;var editor=mouseHandler.editor;editor.setDefaultHandler(\"mousedown\",this.onMouseDown.bind(mouseHandler));editor.setDefaultHandler(\"dblclick\",this.onDoubleClick.bind(mouseHandler));editor.setDefaultHandler(\"tripleclick\",this.onTripleClick.bind(mouseHandler));editor.setDefaultHandler(\"quadclick\",this.onQuadClick.bind(mouseHandler));editor.setDefaultHandler(\"mousewheel\",this.onMouseWheel.bind(mouseHandler));editor.setDefaultHandler(\"touchmove\",this.onTouchMove.bind(mouseHandler));var exports=[\"select\",\"startSelect\",\"selectEnd\",\"selectAllEnd\",\"selectByWordsEnd\",\"selectByLinesEnd\",\"dragWait\",\"dragWaitEnd\",\"focusWait\"];exports.forEach(function(x){mouseHandler[x]=this[x];},this);mouseHandler.selectByLines=this.extendSelectionBy.bind(mouseHandler,\"getLineRange\");mouseHandler.selectByWords=this.extendSelectionBy.bind(mouseHandler,\"getWordRange\");}(function(){this.onMouseDown=function(ev){var inSelection=ev.inSelection();var pos=ev.getDocumentPosition();this.mousedownEvent=ev;var editor=this.editor;var button=ev.getButton();if(button!==0){var selectionRange=editor.getSelectionRange();var selectionEmpty=selectionRange.isEmpty();editor.$blockScrolling++;if(selectionEmpty||button==1)editor.selection.moveToPosition(pos);editor.$blockScrolling--;if(button==2)editor.textInput.onContextMenu(ev.domEvent);return;// stopping event here breaks contextmenu on ff mac\n}this.mousedownEvent.time=Date.now();if(inSelection&&!editor.isFocused()){editor.focus();if(this.$focusTimout&&!this.$clickSelection&&!editor.inMultiSelectMode){this.setState(\"focusWait\");this.captureMouse(ev);return;}}this.captureMouse(ev);this.startSelect(pos,ev.domEvent._clicks>1);return ev.preventDefault();};this.startSelect=function(pos,waitForClickSelection){pos=pos||this.editor.renderer.screenToTextCoordinates(this.x,this.y);var editor=this.editor;editor.$blockScrolling++;if(this.mousedownEvent.getShiftKey())editor.selection.selectToPosition(pos);else if(!waitForClickSelection)editor.selection.moveToPosition(pos);if(!waitForClickSelection)this.select();if(editor.renderer.scroller.setCapture){editor.renderer.scroller.setCapture();}editor.setStyle(\"ace_selecting\");this.setState(\"select\");editor.$blockScrolling--;};this.select=function(){var anchor,editor=this.editor;var cursor=editor.renderer.screenToTextCoordinates(this.x,this.y);editor.$blockScrolling++;if(this.$clickSelection){var cmp=this.$clickSelection.comparePoint(cursor);if(cmp==-1){anchor=this.$clickSelection.end;}else if(cmp==1){anchor=this.$clickSelection.start;}else{var orientedRange=calcRangeOrientation(this.$clickSelection,cursor);cursor=orientedRange.cursor;anchor=orientedRange.anchor;}editor.selection.setSelectionAnchor(anchor.row,anchor.column);}editor.selection.selectToPosition(cursor);editor.$blockScrolling--;editor.renderer.scrollCursorIntoView();};this.extendSelectionBy=function(unitName){var anchor,editor=this.editor;var cursor=editor.renderer.screenToTextCoordinates(this.x,this.y);var range=editor.selection[unitName](cursor.row,cursor.column);editor.$blockScrolling++;if(this.$clickSelection){var cmpStart=this.$clickSelection.comparePoint(range.start);var cmpEnd=this.$clickSelection.comparePoint(range.end);if(cmpStart==-1&&cmpEnd<=0){anchor=this.$clickSelection.end;if(range.end.row!=cursor.row||range.end.column!=cursor.column)cursor=range.start;}else if(cmpEnd==1&&cmpStart>=0){anchor=this.$clickSelection.start;if(range.start.row!=cursor.row||range.start.column!=cursor.column)cursor=range.end;}else if(cmpStart==-1&&cmpEnd==1){cursor=range.end;anchor=range.start;}else{var orientedRange=calcRangeOrientation(this.$clickSelection,cursor);cursor=orientedRange.cursor;anchor=orientedRange.anchor;}editor.selection.setSelectionAnchor(anchor.row,anchor.column);}editor.selection.selectToPosition(cursor);editor.$blockScrolling--;editor.renderer.scrollCursorIntoView();};this.selectEnd=this.selectAllEnd=this.selectByWordsEnd=this.selectByLinesEnd=function(){this.$clickSelection=null;this.editor.unsetStyle(\"ace_selecting\");if(this.editor.renderer.scroller.releaseCapture){this.editor.renderer.scroller.releaseCapture();}};this.focusWait=function(){var distance=calcDistance(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);var time=Date.now();if(distance>DRAG_OFFSET||time-this.mousedownEvent.time>this.$focusTimout)this.startSelect(this.mousedownEvent.getDocumentPosition());};this.onDoubleClick=function(ev){var pos=ev.getDocumentPosition();var editor=this.editor;var session=editor.session;var range=session.getBracketRange(pos);if(range){if(range.isEmpty()){range.start.column--;range.end.column++;}this.setState(\"select\");}else{range=editor.selection.getWordRange(pos.row,pos.column);this.setState(\"selectByWords\");}this.$clickSelection=range;this.select();};this.onTripleClick=function(ev){var pos=ev.getDocumentPosition();var editor=this.editor;this.setState(\"selectByLines\");var range=editor.getSelectionRange();if(range.isMultiLine()&&range.contains(pos.row,pos.column)){this.$clickSelection=editor.selection.getLineRange(range.start.row);this.$clickSelection.end=editor.selection.getLineRange(range.end.row).end;}else{this.$clickSelection=editor.selection.getLineRange(pos.row);}this.select();};this.onQuadClick=function(ev){var editor=this.editor;editor.selectAll();this.$clickSelection=editor.getSelectionRange();this.setState(\"selectAll\");};this.onMouseWheel=function(ev){if(ev.getAccelKey())return;if(ev.getShiftKey()&&ev.wheelY&&!ev.wheelX){ev.wheelX=ev.wheelY;ev.wheelY=0;}var t=ev.domEvent.timeStamp;var dt=t-(this.$lastScrollTime||0);var editor=this.editor;var isScrolable=editor.renderer.isScrollableBy(ev.wheelX*ev.speed,ev.wheelY*ev.speed);if(isScrolable||dt<200){this.$lastScrollTime=t;editor.renderer.scrollBy(ev.wheelX*ev.speed,ev.wheelY*ev.speed);return ev.stop();}};this.onTouchMove=function(ev){var t=ev.domEvent.timeStamp;var dt=t-(this.$lastScrollTime||0);var editor=this.editor;var isScrolable=editor.renderer.isScrollableBy(ev.wheelX*ev.speed,ev.wheelY*ev.speed);if(isScrolable||dt<200){this.$lastScrollTime=t;editor.renderer.scrollBy(ev.wheelX*ev.speed,ev.wheelY*ev.speed);return ev.stop();}};}).call(DefaultHandlers.prototype);exports.DefaultHandlers=DefaultHandlers;function calcDistance(ax,ay,bx,by){return Math.sqrt(Math.pow(bx-ax,2)+Math.pow(by-ay,2));}function calcRangeOrientation(range,cursor){if(range.start.row==range.end.row)var cmp=2*cursor.column-range.start.column-range.end.column;else if(range.start.row==range.end.row-1&&!range.start.column&&!range.end.column)var cmp=cursor.column-4;else var cmp=2*cursor.row-range.start.row-range.end.row;if(cmp<0)return{cursor:range.start,anchor:range.end};else return{cursor:range.end,anchor:range.start};}});ace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\"],function(acequire,exports,module){\"use strict\";var oop=acequire(\"./lib/oop\");var dom=acequire(\"./lib/dom\");function Tooltip(parentNode){this.isOpen=false;this.$element=null;this.$parentNode=parentNode;}(function(){this.$init=function(){this.$element=dom.createElement(\"div\");this.$element.className=\"ace_tooltip\";this.$element.style.display=\"none\";this.$parentNode.appendChild(this.$element);return this.$element;};this.getElement=function(){return this.$element||this.$init();};this.setText=function(text){dom.setInnerText(this.getElement(),text);};this.setHtml=function(html){this.getElement().innerHTML=html;};this.setPosition=function(x,y){this.getElement().style.left=x+\"px\";this.getElement().style.top=y+\"px\";};this.setClassName=function(className){dom.addCssClass(this.getElement(),className);};this.show=function(text,x,y){if(text!=null)this.setText(text);if(x!=null&&y!=null)this.setPosition(x,y);if(!this.isOpen){this.getElement().style.display=\"block\";this.isOpen=true;}};this.hide=function(){if(this.isOpen){this.getElement().style.display=\"none\";this.isOpen=false;}};this.getHeight=function(){return this.getElement().offsetHeight;};this.getWidth=function(){return this.getElement().offsetWidth;};}).call(Tooltip.prototype);exports.Tooltip=Tooltip;});ace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/tooltip\"],function(acequire,exports,module){\"use strict\";var dom=acequire(\"../lib/dom\");var oop=acequire(\"../lib/oop\");var event=acequire(\"../lib/event\");var Tooltip=acequire(\"../tooltip\").Tooltip;function GutterHandler(mouseHandler){var editor=mouseHandler.editor;var gutter=editor.renderer.$gutterLayer;var tooltip=new GutterTooltip(editor.container);mouseHandler.editor.setDefaultHandler(\"guttermousedown\",function(e){if(!editor.isFocused()||e.getButton()!=0)return;var gutterRegion=gutter.getRegion(e);if(gutterRegion==\"foldWidgets\")return;var row=e.getDocumentPosition().row;var selection=editor.session.selection;if(e.getShiftKey())selection.selectTo(row,0);else{if(e.domEvent.detail==2){editor.selectAll();return e.preventDefault();}mouseHandler.$clickSelection=editor.selection.getLineRange(row);}mouseHandler.setState(\"selectByLines\");mouseHandler.captureMouse(e);return e.preventDefault();});var tooltipTimeout,mouseEvent,tooltipAnnotation;function showTooltip(){var row=mouseEvent.getDocumentPosition().row;var annotation=gutter.$annotations[row];if(!annotation)return hideTooltip();var maxRow=editor.session.getLength();if(row==maxRow){var screenRow=editor.renderer.pixelToScreenCoordinates(0,mouseEvent.y).row;var pos=mouseEvent.$pos;if(screenRow>editor.session.documentToScreenRow(pos.row,pos.column))return hideTooltip();}if(tooltipAnnotation==annotation)return;tooltipAnnotation=annotation.text.join(\"<br/>\");tooltip.setHtml(tooltipAnnotation);tooltip.show();editor.on(\"mousewheel\",hideTooltip);if(mouseHandler.$tooltipFollowsMouse){moveTooltip(mouseEvent);}else{var gutterElement=mouseEvent.domEvent.target;var rect=gutterElement.getBoundingClientRect();var style=tooltip.getElement().style;style.left=rect.right+\"px\";style.top=rect.bottom+\"px\";}}function hideTooltip(){if(tooltipTimeout)tooltipTimeout=clearTimeout(tooltipTimeout);if(tooltipAnnotation){tooltip.hide();tooltipAnnotation=null;editor.removeEventListener(\"mousewheel\",hideTooltip);}}function moveTooltip(e){tooltip.setPosition(e.x,e.y);}mouseHandler.editor.setDefaultHandler(\"guttermousemove\",function(e){var target=e.domEvent.target||e.domEvent.srcElement;if(dom.hasCssClass(target,\"ace_fold-widget\"))return hideTooltip();if(tooltipAnnotation&&mouseHandler.$tooltipFollowsMouse)moveTooltip(e);mouseEvent=e;if(tooltipTimeout)return;tooltipTimeout=setTimeout(function(){tooltipTimeout=null;if(mouseEvent&&!mouseHandler.isMousePressed)showTooltip();else hideTooltip();},50);});event.addListener(editor.renderer.$gutter,\"mouseout\",function(e){mouseEvent=null;if(!tooltipAnnotation||tooltipTimeout)return;tooltipTimeout=setTimeout(function(){tooltipTimeout=null;hideTooltip();},50);});editor.on(\"changeSession\",hideTooltip);}function GutterTooltip(parentNode){Tooltip.call(this,parentNode);}oop.inherits(GutterTooltip,Tooltip);(function(){this.setPosition=function(x,y){var windowWidth=window.innerWidth||document.documentElement.clientWidth;var windowHeight=window.innerHeight||document.documentElement.clientHeight;var width=this.getWidth();var height=this.getHeight();x+=15;y+=15;if(x+width>windowWidth){x-=x+width-windowWidth;}if(y+height>windowHeight){y-=20+height;}Tooltip.prototype.setPosition.call(this,x,y);};}).call(GutterTooltip.prototype);exports.GutterHandler=GutterHandler;});ace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"],function(acequire,exports,module){\"use strict\";var event=acequire(\"../lib/event\");var useragent=acequire(\"../lib/useragent\");var MouseEvent=exports.MouseEvent=function(domEvent,editor){this.domEvent=domEvent;this.editor=editor;this.x=this.clientX=domEvent.clientX;this.y=this.clientY=domEvent.clientY;this.$pos=null;this.$inSelection=null;this.propagationStopped=false;this.defaultPrevented=false;};(function(){this.stopPropagation=function(){event.stopPropagation(this.domEvent);this.propagationStopped=true;};this.preventDefault=function(){event.preventDefault(this.domEvent);this.defaultPrevented=true;};this.stop=function(){this.stopPropagation();this.preventDefault();};this.getDocumentPosition=function(){if(this.$pos)return this.$pos;this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY);return this.$pos;};this.inSelection=function(){if(this.$inSelection!==null)return this.$inSelection;var editor=this.editor;var selectionRange=editor.getSelectionRange();if(selectionRange.isEmpty())this.$inSelection=false;else{var pos=this.getDocumentPosition();this.$inSelection=selectionRange.contains(pos.row,pos.column);}return this.$inSelection;};this.getButton=function(){return event.getButton(this.domEvent);};this.getShiftKey=function(){return this.domEvent.shiftKey;};this.getAccelKey=useragent.isMac?function(){return this.domEvent.metaKey;}:function(){return this.domEvent.ctrlKey;};}).call(MouseEvent.prototype);});ace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"],function(acequire,exports,module){\"use strict\";var dom=acequire(\"../lib/dom\");var event=acequire(\"../lib/event\");var useragent=acequire(\"../lib/useragent\");var AUTOSCROLL_DELAY=200;var SCROLL_CURSOR_DELAY=200;var SCROLL_CURSOR_HYSTERESIS=5;function DragdropHandler(mouseHandler){var editor=mouseHandler.editor;var blankImage=dom.createElement(\"img\");blankImage.src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";if(useragent.isOpera)blankImage.style.cssText=\"width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;\";var exports=[\"dragWait\",\"dragWaitEnd\",\"startDrag\",\"dragReadyEnd\",\"onMouseDrag\"];exports.forEach(function(x){mouseHandler[x]=this[x];},this);editor.addEventListener(\"mousedown\",this.onMouseDown.bind(mouseHandler));var mouseTarget=editor.container;var dragSelectionMarker,x,y;var timerId,range;var dragCursor,counter=0;var dragOperation;var isInternal;var autoScrollStartTime;var cursorMovedTime;var cursorPointOnCaretMoved;this.onDragStart=function(e){if(this.cancelDrag||!mouseTarget.draggable){var self=this;setTimeout(function(){self.startSelect();self.captureMouse(e);},0);return e.preventDefault();}range=editor.getSelectionRange();var dataTransfer=e.dataTransfer;dataTransfer.effectAllowed=editor.getReadOnly()?\"copy\":\"copyMove\";if(useragent.isOpera){editor.container.appendChild(blankImage);blankImage.scrollTop=0;}dataTransfer.setDragImage&&dataTransfer.setDragImage(blankImage,0,0);if(useragent.isOpera){editor.container.removeChild(blankImage);}dataTransfer.clearData();dataTransfer.setData(\"Text\",editor.session.getTextRange());isInternal=true;this.setState(\"drag\");};this.onDragEnd=function(e){mouseTarget.draggable=false;isInternal=false;this.setState(null);if(!editor.getReadOnly()){var dropEffect=e.dataTransfer.dropEffect;if(!dragOperation&&dropEffect==\"move\")editor.session.remove(editor.getSelectionRange());editor.renderer.$cursorLayer.setBlinking(true);}this.editor.unsetStyle(\"ace_dragging\");this.editor.renderer.setCursorStyle(\"\");};this.onDragEnter=function(e){if(editor.getReadOnly()||!canAccept(e.dataTransfer))return;x=e.clientX;y=e.clientY;if(!dragSelectionMarker)addDragMarker();counter++;e.dataTransfer.dropEffect=dragOperation=getDropEffect(e);return event.preventDefault(e);};this.onDragOver=function(e){if(editor.getReadOnly()||!canAccept(e.dataTransfer))return;x=e.clientX;y=e.clientY;if(!dragSelectionMarker){addDragMarker();counter++;}if(onMouseMoveTimer!==null)onMouseMoveTimer=null;e.dataTransfer.dropEffect=dragOperation=getDropEffect(e);return event.preventDefault(e);};this.onDragLeave=function(e){counter--;if(counter<=0&&dragSelectionMarker){clearDragMarker();dragOperation=null;return event.preventDefault(e);}};this.onDrop=function(e){if(!dragCursor)return;var dataTransfer=e.dataTransfer;if(isInternal){switch(dragOperation){case\"move\":if(range.contains(dragCursor.row,dragCursor.column)){range={start:dragCursor,end:dragCursor};}else{range=editor.moveText(range,dragCursor);}break;case\"copy\":range=editor.moveText(range,dragCursor,true);break;}}else{var dropData=dataTransfer.getData('Text');range={start:dragCursor,end:editor.session.insert(dragCursor,dropData)};editor.focus();dragOperation=null;}clearDragMarker();return event.preventDefault(e);};event.addListener(mouseTarget,\"dragstart\",this.onDragStart.bind(mouseHandler));event.addListener(mouseTarget,\"dragend\",this.onDragEnd.bind(mouseHandler));event.addListener(mouseTarget,\"dragenter\",this.onDragEnter.bind(mouseHandler));event.addListener(mouseTarget,\"dragover\",this.onDragOver.bind(mouseHandler));event.addListener(mouseTarget,\"dragleave\",this.onDragLeave.bind(mouseHandler));event.addListener(mouseTarget,\"drop\",this.onDrop.bind(mouseHandler));function scrollCursorIntoView(cursor,prevCursor){var now=Date.now();var vMovement=!prevCursor||cursor.row!=prevCursor.row;var hMovement=!prevCursor||cursor.column!=prevCursor.column;if(!cursorMovedTime||vMovement||hMovement){editor.$blockScrolling+=1;editor.moveCursorToPosition(cursor);editor.$blockScrolling-=1;cursorMovedTime=now;cursorPointOnCaretMoved={x:x,y:y};}else{var distance=calcDistance(cursorPointOnCaretMoved.x,cursorPointOnCaretMoved.y,x,y);if(distance>SCROLL_CURSOR_HYSTERESIS){cursorMovedTime=null;}else if(now-cursorMovedTime>=SCROLL_CURSOR_DELAY){editor.renderer.scrollCursorIntoView();cursorMovedTime=null;}}}function autoScroll(cursor,prevCursor){var now=Date.now();var lineHeight=editor.renderer.layerConfig.lineHeight;var characterWidth=editor.renderer.layerConfig.characterWidth;var editorRect=editor.renderer.scroller.getBoundingClientRect();var offsets={x:{left:x-editorRect.left,right:editorRect.right-x},y:{top:y-editorRect.top,bottom:editorRect.bottom-y}};var nearestXOffset=Math.min(offsets.x.left,offsets.x.right);var nearestYOffset=Math.min(offsets.y.top,offsets.y.bottom);var scrollCursor={row:cursor.row,column:cursor.column};if(nearestXOffset/characterWidth<=2){scrollCursor.column+=offsets.x.left<offsets.x.right?-3:+2;}if(nearestYOffset/lineHeight<=1){scrollCursor.row+=offsets.y.top<offsets.y.bottom?-1:+1;}var vScroll=cursor.row!=scrollCursor.row;var hScroll=cursor.column!=scrollCursor.column;var vMovement=!prevCursor||cursor.row!=prevCursor.row;if(vScroll||hScroll&&!vMovement){if(!autoScrollStartTime)autoScrollStartTime=now;else if(now-autoScrollStartTime>=AUTOSCROLL_DELAY)editor.renderer.scrollCursorIntoView(scrollCursor);}else{autoScrollStartTime=null;}}function onDragInterval(){var prevCursor=dragCursor;dragCursor=editor.renderer.screenToTextCoordinates(x,y);scrollCursorIntoView(dragCursor,prevCursor);autoScroll(dragCursor,prevCursor);}function addDragMarker(){range=editor.selection.toOrientedRange();dragSelectionMarker=editor.session.addMarker(range,\"ace_selection\",editor.getSelectionStyle());editor.clearSelection();if(editor.isFocused())editor.renderer.$cursorLayer.setBlinking(false);clearInterval(timerId);onDragInterval();timerId=setInterval(onDragInterval,20);counter=0;event.addListener(document,\"mousemove\",onMouseMove);}function clearDragMarker(){clearInterval(timerId);editor.session.removeMarker(dragSelectionMarker);dragSelectionMarker=null;editor.$blockScrolling+=1;editor.selection.fromOrientedRange(range);editor.$blockScrolling-=1;if(editor.isFocused()&&!isInternal)editor.renderer.$cursorLayer.setBlinking(!editor.getReadOnly());range=null;dragCursor=null;counter=0;autoScrollStartTime=null;cursorMovedTime=null;event.removeListener(document,\"mousemove\",onMouseMove);}var onMouseMoveTimer=null;function onMouseMove(){if(onMouseMoveTimer==null){onMouseMoveTimer=setTimeout(function(){if(onMouseMoveTimer!=null&&dragSelectionMarker)clearDragMarker();},20);}}function canAccept(dataTransfer){var types=dataTransfer.types;return!types||Array.prototype.some.call(types,function(type){return type=='text/plain'||type=='Text';});}function getDropEffect(e){var copyAllowed=['copy','copymove','all','uninitialized'];var moveAllowed=['move','copymove','linkmove','all','uninitialized'];var copyModifierState=useragent.isMac?e.altKey:e.ctrlKey;var effectAllowed=\"uninitialized\";try{effectAllowed=e.dataTransfer.effectAllowed.toLowerCase();}catch(e){}var dropEffect=\"none\";if(copyModifierState&&copyAllowed.indexOf(effectAllowed)>=0)dropEffect=\"copy\";else if(moveAllowed.indexOf(effectAllowed)>=0)dropEffect=\"move\";else if(copyAllowed.indexOf(effectAllowed)>=0)dropEffect=\"copy\";return dropEffect;}}(function(){this.dragWait=function(){var interval=Date.now()-this.mousedownEvent.time;if(interval>this.editor.getDragDelay())this.startDrag();};this.dragWaitEnd=function(){var target=this.editor.container;target.draggable=false;this.startSelect(this.mousedownEvent.getDocumentPosition());this.selectEnd();};this.dragReadyEnd=function(e){this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly());this.editor.unsetStyle(\"ace_dragging\");this.editor.renderer.setCursorStyle(\"\");this.dragWaitEnd();};this.startDrag=function(){this.cancelDrag=false;var editor=this.editor;var target=editor.container;target.draggable=true;editor.renderer.$cursorLayer.setBlinking(false);editor.setStyle(\"ace_dragging\");var cursorStyle=useragent.isWin?\"default\":\"move\";editor.renderer.setCursorStyle(cursorStyle);this.setState(\"dragReady\");};this.onMouseDrag=function(e){var target=this.editor.container;if(useragent.isIE&&this.state==\"dragReady\"){var distance=calcDistance(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);if(distance>3)target.dragDrop();}if(this.state===\"dragWait\"){var distance=calcDistance(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);if(distance>0){target.draggable=false;this.startSelect(this.mousedownEvent.getDocumentPosition());}}};this.onMouseDown=function(e){if(!this.$dragEnabled)return;this.mousedownEvent=e;var editor=this.editor;var inSelection=e.inSelection();var button=e.getButton();var clickCount=e.domEvent.detail||1;if(clickCount===1&&button===0&&inSelection){if(e.editor.inMultiSelectMode&&(e.getAccelKey()||e.getShiftKey()))return;this.mousedownEvent.time=Date.now();var eventTarget=e.domEvent.target||e.domEvent.srcElement;if(\"unselectable\"in eventTarget)eventTarget.unselectable=\"on\";if(editor.getDragDelay()){if(useragent.isWebKit){this.cancelDrag=true;var mouseTarget=editor.container;mouseTarget.draggable=true;}this.setState(\"dragWait\");}else{this.startDrag();}this.captureMouse(e,this.onMouseDrag.bind(this));e.defaultPrevented=true;}};}).call(DragdropHandler.prototype);function calcDistance(ax,ay,bx,by){return Math.sqrt(Math.pow(bx-ax,2)+Math.pow(by-ay,2));}exports.DragdropHandler=DragdropHandler;});ace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(acequire,exports,module){\"use strict\";var dom=acequire(\"./dom\");exports.get=function(url,callback){var xhr=new XMLHttpRequest();xhr.open('GET',url,true);xhr.onreadystatechange=function(){if(xhr.readyState===4){callback(xhr.responseText);}};xhr.send(null);};exports.loadScript=function(path,callback){var head=dom.getDocumentHead();var s=document.createElement('script');s.src=path;head.appendChild(s);s.onload=s.onreadystatechange=function(_,isAbort){if(isAbort||!s.readyState||s.readyState==\"loaded\"||s.readyState==\"complete\"){s=s.onload=s.onreadystatechange=null;if(!isAbort)callback();}};};exports.qualifyURL=function(url){var a=document.createElement('a');a.href=url;return a.href;};});ace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"],function(acequire,exports,module){\"use strict\";var EventEmitter={};var stopPropagation=function(){this.propagationStopped=true;};var preventDefault=function(){this.defaultPrevented=true;};EventEmitter._emit=EventEmitter._dispatchEvent=function(eventName,e){this._eventRegistry||(this._eventRegistry={});this._defaultHandlers||(this._defaultHandlers={});var listeners=this._eventRegistry[eventName]||[];var defaultHandler=this._defaultHandlers[eventName];if(!listeners.length&&!defaultHandler)return;if(typeof e!=\"object\"||!e)e={};if(!e.type)e.type=eventName;if(!e.stopPropagation)e.stopPropagation=stopPropagation;if(!e.preventDefault)e.preventDefault=preventDefault;listeners=listeners.slice();for(var i=0;i<listeners.length;i++){listeners[i](e,this);if(e.propagationStopped)break;}if(defaultHandler&&!e.defaultPrevented)return defaultHandler(e,this);};EventEmitter._signal=function(eventName,e){var listeners=(this._eventRegistry||{})[eventName];if(!listeners)return;listeners=listeners.slice();for(var i=0;i<listeners.length;i++)listeners[i](e,this);};EventEmitter.once=function(eventName,callback){var _self=this;callback&&this.addEventListener(eventName,function newCallback(){_self.removeEventListener(eventName,newCallback);callback.apply(null,arguments);});};EventEmitter.setDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(!handlers)handlers=this._defaultHandlers={_disabled_:{}};if(handlers[eventName]){var old=handlers[eventName];var disabled=handlers._disabled_[eventName];if(!disabled)handlers._disabled_[eventName]=disabled=[];disabled.push(old);var i=disabled.indexOf(callback);if(i!=-1)disabled.splice(i,1);}handlers[eventName]=callback;};EventEmitter.removeDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(!handlers)return;var disabled=handlers._disabled_[eventName];if(handlers[eventName]==callback){var old=handlers[eventName];if(disabled)this.setDefaultHandler(eventName,disabled.pop());}else if(disabled){var i=disabled.indexOf(callback);if(i!=-1)disabled.splice(i,1);}};EventEmitter.on=EventEmitter.addEventListener=function(eventName,callback,capturing){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];if(!listeners)listeners=this._eventRegistry[eventName]=[];if(listeners.indexOf(callback)==-1)listeners[capturing?\"unshift\":\"push\"](callback);return callback;};EventEmitter.off=EventEmitter.removeListener=EventEmitter.removeEventListener=function(eventName,callback){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];if(!listeners)return;var index=listeners.indexOf(callback);if(index!==-1)listeners.splice(index,1);};EventEmitter.removeAllListeners=function(eventName){if(this._eventRegistry)this._eventRegistry[eventName]=[];};exports.EventEmitter=EventEmitter;});ace.define(\"ace/lib/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(acequire,exports,module){\"no use strict\";var oop=acequire(\"./oop\");var EventEmitter=acequire(\"./event_emitter\").EventEmitter;var optionsProvider={setOptions:function(optList){Object.keys(optList).forEach(function(key){this.setOption(key,optList[key]);},this);},getOptions:function(optionNames){var result={};if(!optionNames){optionNames=Object.keys(this.$options);}else if(!Array.isArray(optionNames)){result=optionNames;optionNames=Object.keys(result);}optionNames.forEach(function(key){result[key]=this.getOption(key);},this);return result;},setOption:function(name,value){if(this[\"$\"+name]===value)return;var opt=this.$options[name];if(!opt){return warn('misspelled option \"'+name+'\"');}if(opt.forwardTo)return this[opt.forwardTo]&&this[opt.forwardTo].setOption(name,value);if(!opt.handlesSet)this[\"$\"+name]=value;if(opt&&opt.set)opt.set.call(this,value);},getOption:function(name){var opt=this.$options[name];if(!opt){return warn('misspelled option \"'+name+'\"');}if(opt.forwardTo)return this[opt.forwardTo]&&this[opt.forwardTo].getOption(name);return opt&&opt.get?opt.get.call(this):this[\"$\"+name];}};function warn(message){if(typeof console!=\"undefined\"&&console.warn)console.warn.apply(console,arguments);}function reportError(msg,data){var e=new Error(msg);e.data=data;if(typeof console==\"object\"&&console.error)console.error(e);setTimeout(function(){throw e;});}var AppConfig=function(){this.$defaultOptions={};};(function(){oop.implement(this,EventEmitter);this.defineOptions=function(obj,path,options){if(!obj.$options)this.$defaultOptions[path]=obj.$options={};Object.keys(options).forEach(function(key){var opt=options[key];if(typeof opt==\"string\")opt={forwardTo:opt};opt.name||(opt.name=key);obj.$options[opt.name]=opt;if(\"initialValue\"in opt)obj[\"$\"+opt.name]=opt.initialValue;});oop.implement(obj,optionsProvider);return this;};this.resetOptions=function(obj){Object.keys(obj.$options).forEach(function(key){var opt=obj.$options[key];if(\"value\"in opt)obj.setOption(key,opt.value);});};this.setDefaultValue=function(path,name,value){var opts=this.$defaultOptions[path]||(this.$defaultOptions[path]={});if(opts[name]){if(opts.forwardTo)this.setDefaultValue(opts.forwardTo,name,value);else opts[name].value=value;}};this.setDefaultValues=function(path,optionHash){Object.keys(optionHash).forEach(function(key){this.setDefaultValue(path,key,optionHash[key]);},this);};this.warn=warn;this.reportError=reportError;}).call(AppConfig.prototype);exports.AppConfig=AppConfig;});ace.define(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/app_config\"],function(acequire,exports,module){\"no use strict\";var lang=acequire(\"./lib/lang\");var oop=acequire(\"./lib/oop\");var net=acequire(\"./lib/net\");var AppConfig=acequire(\"./lib/app_config\").AppConfig;module.exports=exports=new AppConfig();var global=function(){return this||typeof window!=\"undefined\"&&window;}();var options={packaged:false,workerPath:null,modePath:null,themePath:null,basePath:\"\",suffix:\".js\",$moduleUrls:{}};exports.get=function(key){if(!options.hasOwnProperty(key))throw new Error(\"Unknown config key: \"+key);return options[key];};exports.set=function(key,value){if(!options.hasOwnProperty(key))throw new Error(\"Unknown config key: \"+key);options[key]=value;};exports.all=function(){return lang.copyObject(options);};exports.moduleUrl=function(name,component){if(options.$moduleUrls[name])return options.$moduleUrls[name];var parts=name.split(\"/\");component=component||parts[parts.length-2]||\"\";var sep=component==\"snippets\"?\"/\":\"-\";var base=parts[parts.length-1];if(component==\"worker\"&&sep==\"-\"){var re=new RegExp(\"^\"+component+\"[\\\\-_]|[\\\\-_]\"+component+\"$\",\"g\");base=base.replace(re,\"\");}if((!base||base==component)&&parts.length>1)base=parts[parts.length-2];var path=options[component+\"Path\"];if(path==null){path=options.basePath;}else if(sep==\"/\"){component=sep=\"\";}if(path&&path.slice(-1)!=\"/\")path+=\"/\";return path+component+sep+base+this.get(\"suffix\");};exports.setModuleUrl=function(name,subst){return options.$moduleUrls[name]=subst;};exports.$loading={};exports.loadModule=function(moduleName,onLoad){var module,moduleType;if(Array.isArray(moduleName)){moduleType=moduleName[0];moduleName=moduleName[1];}try{module=acequire(moduleName);}catch(e){}if(module&&!exports.$loading[moduleName])return onLoad&&onLoad(module);if(!exports.$loading[moduleName])exports.$loading[moduleName]=[];exports.$loading[moduleName].push(onLoad);if(exports.$loading[moduleName].length>1)return;var afterLoad=function(){acequire([moduleName],function(module){exports._emit(\"load.module\",{name:moduleName,module:module});var listeners=exports.$loading[moduleName];exports.$loading[moduleName]=null;listeners.forEach(function(onLoad){onLoad&&onLoad(module);});});};if(!exports.get(\"packaged\"))return afterLoad();net.loadScript(exports.moduleUrl(moduleName,moduleType),afterLoad);};init(true);function init(packaged){if(!global||!global.document)return;options.packaged=packaged||acequire.packaged||module.packaged||global.define&&__webpack_require__(65).packaged;var scriptOptions={};var scriptUrl=\"\";var currentScript=document.currentScript||document._currentScript;// native or polyfill\nvar currentDocument=currentScript&&currentScript.ownerDocument||document;var scripts=currentDocument.getElementsByTagName(\"script\");for(var i=0;i<scripts.length;i++){var script=scripts[i];var src=script.src||script.getAttribute(\"src\");if(!src)continue;var attributes=script.attributes;for(var j=0,l=attributes.length;j<l;j++){var attr=attributes[j];if(attr.name.indexOf(\"data-ace-\")===0){scriptOptions[deHyphenate(attr.name.replace(/^data-ace-/,\"\"))]=attr.value;}}var m=src.match(/^(.*)\\/ace(\\-\\w+)?\\.js(\\?|$)/);if(m)scriptUrl=m[1];}if(scriptUrl){scriptOptions.base=scriptOptions.base||scriptUrl;scriptOptions.packaged=true;}scriptOptions.basePath=scriptOptions.base;scriptOptions.workerPath=scriptOptions.workerPath||scriptOptions.base;scriptOptions.modePath=scriptOptions.modePath||scriptOptions.base;scriptOptions.themePath=scriptOptions.themePath||scriptOptions.base;delete scriptOptions.base;for(var key in scriptOptions)if(typeof scriptOptions[key]!==\"undefined\")exports.set(key,scriptOptions[key]);}exports.init=init;function deHyphenate(str){return str.replace(/-(.)/g,function(m,m1){return m1.toUpperCase();});}});ace.define(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/config\"],function(acequire,exports,module){\"use strict\";var event=acequire(\"../lib/event\");var useragent=acequire(\"../lib/useragent\");var DefaultHandlers=acequire(\"./default_handlers\").DefaultHandlers;var DefaultGutterHandler=acequire(\"./default_gutter_handler\").GutterHandler;var MouseEvent=acequire(\"./mouse_event\").MouseEvent;var DragdropHandler=acequire(\"./dragdrop_handler\").DragdropHandler;var config=acequire(\"../config\");var MouseHandler=function(editor){var _self=this;this.editor=editor;new DefaultHandlers(this);new DefaultGutterHandler(this);new DragdropHandler(this);var focusEditor=function(e){var windowBlurred=!document.hasFocus||!document.hasFocus()||!editor.isFocused()&&document.activeElement==(editor.textInput&&editor.textInput.getElement());if(windowBlurred)window.focus();editor.focus();};var mouseTarget=editor.renderer.getMouseEventTarget();event.addListener(mouseTarget,\"click\",this.onMouseEvent.bind(this,\"click\"));event.addListener(mouseTarget,\"mousemove\",this.onMouseMove.bind(this,\"mousemove\"));event.addMultiMouseDownListener([mouseTarget,editor.renderer.scrollBarV&&editor.renderer.scrollBarV.inner,editor.renderer.scrollBarH&&editor.renderer.scrollBarH.inner,editor.textInput&&editor.textInput.getElement()].filter(Boolean),[400,300,250],this,\"onMouseEvent\");event.addMouseWheelListener(editor.container,this.onMouseWheel.bind(this,\"mousewheel\"));event.addTouchMoveListener(editor.container,this.onTouchMove.bind(this,\"touchmove\"));var gutterEl=editor.renderer.$gutter;event.addListener(gutterEl,\"mousedown\",this.onMouseEvent.bind(this,\"guttermousedown\"));event.addListener(gutterEl,\"click\",this.onMouseEvent.bind(this,\"gutterclick\"));event.addListener(gutterEl,\"dblclick\",this.onMouseEvent.bind(this,\"gutterdblclick\"));event.addListener(gutterEl,\"mousemove\",this.onMouseEvent.bind(this,\"guttermousemove\"));event.addListener(mouseTarget,\"mousedown\",focusEditor);event.addListener(gutterEl,\"mousedown\",focusEditor);if(useragent.isIE&&editor.renderer.scrollBarV){event.addListener(editor.renderer.scrollBarV.element,\"mousedown\",focusEditor);event.addListener(editor.renderer.scrollBarH.element,\"mousedown\",focusEditor);}editor.on(\"mousemove\",function(e){if(_self.state||_self.$dragDelay||!_self.$dragEnabled)return;var character=editor.renderer.screenToTextCoordinates(e.x,e.y);var range=editor.session.selection.getRange();var renderer=editor.renderer;if(!range.isEmpty()&&range.insideStart(character.row,character.column)){renderer.setCursorStyle(\"default\");}else{renderer.setCursorStyle(\"\");}});};(function(){this.onMouseEvent=function(name,e){this.editor._emit(name,new MouseEvent(e,this.editor));};this.onMouseMove=function(name,e){var listeners=this.editor._eventRegistry&&this.editor._eventRegistry.mousemove;if(!listeners||!listeners.length)return;this.editor._emit(name,new MouseEvent(e,this.editor));};this.onMouseWheel=function(name,e){var mouseEvent=new MouseEvent(e,this.editor);mouseEvent.speed=this.$scrollSpeed*2;mouseEvent.wheelX=e.wheelX;mouseEvent.wheelY=e.wheelY;this.editor._emit(name,mouseEvent);};this.onTouchMove=function(name,e){var mouseEvent=new MouseEvent(e,this.editor);mouseEvent.speed=1;//this.$scrollSpeed * 2;\nmouseEvent.wheelX=e.wheelX;mouseEvent.wheelY=e.wheelY;this.editor._emit(name,mouseEvent);};this.setState=function(state){this.state=state;};this.captureMouse=function(ev,mouseMoveHandler){this.x=ev.x;this.y=ev.y;this.isMousePressed=true;var renderer=this.editor.renderer;if(renderer.$keepTextAreaAtCursor)renderer.$keepTextAreaAtCursor=null;var self=this;var onMouseMove=function(e){if(!e)return;if(useragent.isWebKit&&!e.which&&self.releaseMouse)return self.releaseMouse();self.x=e.clientX;self.y=e.clientY;mouseMoveHandler&&mouseMoveHandler(e);self.mouseEvent=new MouseEvent(e,self.editor);self.$mouseMoved=true;};var onCaptureEnd=function(e){clearInterval(timerId);onCaptureInterval();self[self.state+\"End\"]&&self[self.state+\"End\"](e);self.state=\"\";if(renderer.$keepTextAreaAtCursor==null){renderer.$keepTextAreaAtCursor=true;renderer.$moveTextAreaToCursor();}self.isMousePressed=false;self.$onCaptureMouseMove=self.releaseMouse=null;e&&self.onMouseEvent(\"mouseup\",e);};var onCaptureInterval=function(){self[self.state]&&self[self.state]();self.$mouseMoved=false;};if(useragent.isOldIE&&ev.domEvent.type==\"dblclick\"){return setTimeout(function(){onCaptureEnd(ev);});}self.$onCaptureMouseMove=onMouseMove;self.releaseMouse=event.capture(this.editor.container,onMouseMove,onCaptureEnd);var timerId=setInterval(onCaptureInterval,20);};this.releaseMouse=null;this.cancelContextMenu=function(){var stop=function(e){if(e&&e.domEvent&&e.domEvent.type!=\"contextmenu\")return;this.editor.off(\"nativecontextmenu\",stop);if(e&&e.domEvent)event.stopEvent(e.domEvent);}.bind(this);setTimeout(stop,10);this.editor.on(\"nativecontextmenu\",stop);};}).call(MouseHandler.prototype);config.defineOptions(MouseHandler.prototype,\"mouseHandler\",{scrollSpeed:{initialValue:2},dragDelay:{initialValue:useragent.isMac?150:0},dragEnabled:{initialValue:true},focusTimout:{initialValue:0},tooltipFollowsMouse:{initialValue:true}});exports.MouseHandler=MouseHandler;});ace.define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\"],function(acequire,exports,module){\"use strict\";function FoldHandler(editor){editor.on(\"click\",function(e){var position=e.getDocumentPosition();var session=editor.session;var fold=session.getFoldAt(position.row,position.column,1);if(fold){if(e.getAccelKey())session.removeFold(fold);else session.expandFold(fold);e.stop();}});editor.on(\"gutterclick\",function(e){var gutterRegion=editor.renderer.$gutterLayer.getRegion(e);if(gutterRegion==\"foldWidgets\"){var row=e.getDocumentPosition().row;var session=editor.session;if(session.foldWidgets&&session.foldWidgets[row])editor.session.onFoldWidgetClick(row,e);if(!editor.isFocused())editor.focus();e.stop();}});editor.on(\"gutterdblclick\",function(e){var gutterRegion=editor.renderer.$gutterLayer.getRegion(e);if(gutterRegion==\"foldWidgets\"){var row=e.getDocumentPosition().row;var session=editor.session;var data=session.getParentFoldRangeData(row,true);var range=data.range||data.firstRange;if(range){row=range.start.row;var fold=session.getFoldAt(row,session.getLine(row).length,1);if(fold){session.removeFold(fold);}else{session.addFold(\"...\",range);editor.renderer.scrollCursorIntoView({row:range.start.row,column:0});}}e.stop();}});}exports.FoldHandler=FoldHandler;});ace.define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"],function(acequire,exports,module){\"use strict\";var keyUtil=acequire(\"../lib/keys\");var event=acequire(\"../lib/event\");var KeyBinding=function(editor){this.$editor=editor;this.$data={editor:editor};this.$handlers=[];this.setDefaultHandler(editor.commands);};(function(){this.setDefaultHandler=function(kb){this.removeKeyboardHandler(this.$defaultHandler);this.$defaultHandler=kb;this.addKeyboardHandler(kb,0);};this.setKeyboardHandler=function(kb){var h=this.$handlers;if(h[h.length-1]==kb)return;while(h[h.length-1]&&h[h.length-1]!=this.$defaultHandler)this.removeKeyboardHandler(h[h.length-1]);this.addKeyboardHandler(kb,1);};this.addKeyboardHandler=function(kb,pos){if(!kb)return;if(typeof kb==\"function\"&&!kb.handleKeyboard)kb.handleKeyboard=kb;var i=this.$handlers.indexOf(kb);if(i!=-1)this.$handlers.splice(i,1);if(pos==undefined)this.$handlers.push(kb);else this.$handlers.splice(pos,0,kb);if(i==-1&&kb.attach)kb.attach(this.$editor);};this.removeKeyboardHandler=function(kb){var i=this.$handlers.indexOf(kb);if(i==-1)return false;this.$handlers.splice(i,1);kb.detach&&kb.detach(this.$editor);return true;};this.getKeyboardHandler=function(){return this.$handlers[this.$handlers.length-1];};this.getStatusText=function(){var data=this.$data;var editor=data.editor;return this.$handlers.map(function(h){return h.getStatusText&&h.getStatusText(editor,data)||\"\";}).filter(Boolean).join(\" \");};this.$callKeyboardHandlers=function(hashId,keyString,keyCode,e){var toExecute;var success=false;var commands=this.$editor.commands;for(var i=this.$handlers.length;i--;){toExecute=this.$handlers[i].handleKeyboard(this.$data,hashId,keyString,keyCode,e);if(!toExecute||!toExecute.command)continue;if(toExecute.command==\"null\"){success=true;}else{success=commands.exec(toExecute.command,this.$editor,toExecute.args,e);}if(success&&e&&hashId!=-1&&toExecute.passEvent!=true&&toExecute.command.passEvent!=true){event.stopEvent(e);}if(success)break;}if(!success&&hashId==-1){toExecute={command:\"insertstring\"};success=commands.exec(\"insertstring\",this.$editor,keyString);}if(success)this.$editor._signal(\"keyboardActivity\",toExecute);return success;};this.onCommandKey=function(e,hashId,keyCode){var keyString=keyUtil.keyCodeToString(keyCode);this.$callKeyboardHandlers(hashId,keyString,keyCode,e);};this.onTextInput=function(text){this.$callKeyboardHandlers(-1,text);};}).call(KeyBinding.prototype);exports.KeyBinding=KeyBinding;});ace.define(\"ace/range\",[\"require\",\"exports\",\"module\"],function(acequire,exports,module){\"use strict\";var comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column;};var Range=function(startRow,startColumn,endRow,endColumn){this.start={row:startRow,column:startColumn};this.end={row:endRow,column:endColumn};};(function(){this.isEqual=function(range){return this.start.row===range.start.row&&this.end.row===range.end.row&&this.start.column===range.start.column&&this.end.column===range.end.column;};this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\";};this.contains=function(row,column){return this.compare(row,column)==0;};this.compareRange=function(range){var cmp,end=range.end,start=range.start;cmp=this.compare(end.row,end.column);if(cmp==1){cmp=this.compare(start.row,start.column);if(cmp==1){return 2;}else if(cmp==0){return 1;}else{return 0;}}else if(cmp==-1){return-2;}else{cmp=this.compare(start.row,start.column);if(cmp==-1){return-1;}else if(cmp==1){return 42;}else{return 0;}}};this.comparePoint=function(p){return this.compare(p.row,p.column);};this.containsRange=function(range){return this.comparePoint(range.start)==0&&this.comparePoint(range.end)==0;};this.intersects=function(range){var cmp=this.compareRange(range);return cmp==-1||cmp==0||cmp==1;};this.isEnd=function(row,column){return this.end.row==row&&this.end.column==column;};this.isStart=function(row,column){return this.start.row==row&&this.start.column==column;};this.setStart=function(row,column){if(typeof row==\"object\"){this.start.column=row.column;this.start.row=row.row;}else{this.start.row=row;this.start.column=column;}};this.setEnd=function(row,column){if(typeof row==\"object\"){this.end.column=row.column;this.end.row=row.row;}else{this.end.row=row;this.end.column=column;}};this.inside=function(row,column){if(this.compare(row,column)==0){if(this.isEnd(row,column)||this.isStart(row,column)){return false;}else{return true;}}return false;};this.insideStart=function(row,column){if(this.compare(row,column)==0){if(this.isEnd(row,column)){return false;}else{return true;}}return false;};this.insideEnd=function(row,column){if(this.compare(row,column)==0){if(this.isStart(row,column)){return false;}else{return true;}}return false;};this.compare=function(row,column){if(!this.isMultiLine()){if(row===this.start.row){return column<this.start.column?-1:column>this.end.column?1:0;}}if(row<this.start.row)return-1;if(row>this.end.row)return 1;if(this.start.row===row)return column>=this.start.column?0:-1;if(this.end.row===row)return column<=this.end.column?0:1;return 0;};this.compareStart=function(row,column){if(this.start.row==row&&this.start.column==column){return-1;}else{return this.compare(row,column);}};this.compareEnd=function(row,column){if(this.end.row==row&&this.end.column==column){return 1;}else{return this.compare(row,column);}};this.compareInside=function(row,column){if(this.end.row==row&&this.end.column==column){return 1;}else if(this.start.row==row&&this.start.column==column){return-1;}else{return this.compare(row,column);}};this.clipRows=function(firstRow,lastRow){if(this.end.row>lastRow)var end={row:lastRow+1,column:0};else if(this.end.row<firstRow)var end={row:firstRow,column:0};if(this.start.row>lastRow)var start={row:lastRow+1,column:0};else if(this.start.row<firstRow)var start={row:firstRow,column:0};return Range.fromPoints(start||this.start,end||this.end);};this.extend=function(row,column){var cmp=this.compare(row,column);if(cmp==0)return this;else if(cmp==-1)var start={row:row,column:column};else var end={row:row,column:column};return Range.fromPoints(start||this.start,end||this.end);};this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column;};this.isMultiLine=function(){return this.start.row!==this.end.row;};this.clone=function(){return Range.fromPoints(this.start,this.end);};this.collapseRows=function(){if(this.end.column==0)return new Range(this.start.row,0,Math.max(this.start.row,this.end.row-1),0);else return new Range(this.start.row,0,this.end.row,0);};this.toScreenRange=function(session){var screenPosStart=session.documentToScreenPosition(this.start);var screenPosEnd=session.documentToScreenPosition(this.end);return new Range(screenPosStart.row,screenPosStart.column,screenPosEnd.row,screenPosEnd.column);};this.moveBy=function(row,column){this.start.row+=row;this.start.column+=column;this.end.row+=row;this.end.column+=column;};}).call(Range.prototype);Range.fromPoints=function(start,end){return new Range(start.row,start.column,end.row,end.column);};Range.comparePoints=comparePoints;Range.comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column;};exports.Range=Range;});ace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"],function(acequire,exports,module){\"use strict\";var oop=acequire(\"./lib/oop\");var lang=acequire(\"./lib/lang\");var EventEmitter=acequire(\"./lib/event_emitter\").EventEmitter;var Range=acequire(\"./range\").Range;var Selection=function(session){this.session=session;this.doc=session.getDocument();this.clearSelection();this.lead=this.selectionLead=this.doc.createAnchor(0,0);this.anchor=this.selectionAnchor=this.doc.createAnchor(0,0);var self=this;this.lead.on(\"change\",function(e){self._emit(\"changeCursor\");if(!self.$isEmpty)self._emit(\"changeSelection\");if(!self.$keepDesiredColumnOnChange&&e.old.column!=e.value.column)self.$desiredColumn=null;});this.selectionAnchor.on(\"change\",function(){if(!self.$isEmpty)self._emit(\"changeSelection\");});};(function(){oop.implement(this,EventEmitter);this.isEmpty=function(){return this.$isEmpty||this.anchor.row==this.lead.row&&this.anchor.column==this.lead.column;};this.isMultiLine=function(){if(this.isEmpty()){return false;}return this.getRange().isMultiLine();};this.getCursor=function(){return this.lead.getPosition();};this.setSelectionAnchor=function(row,column){this.anchor.setPosition(row,column);if(this.$isEmpty){this.$isEmpty=false;this._emit(\"changeSelection\");}};this.getSelectionAnchor=function(){if(this.$isEmpty)return this.getSelectionLead();else return this.anchor.getPosition();};this.getSelectionLead=function(){return this.lead.getPosition();};this.shiftSelection=function(columns){if(this.$isEmpty){this.moveCursorTo(this.lead.row,this.lead.column+columns);return;}var anchor=this.getSelectionAnchor();var lead=this.getSelectionLead();var isBackwards=this.isBackwards();if(!isBackwards||anchor.column!==0)this.setSelectionAnchor(anchor.row,anchor.column+columns);if(isBackwards||lead.column!==0){this.$moveSelection(function(){this.moveCursorTo(lead.row,lead.column+columns);});}};this.isBackwards=function(){var anchor=this.anchor;var lead=this.lead;return anchor.row>lead.row||anchor.row==lead.row&&anchor.column>lead.column;};this.getRange=function(){var anchor=this.anchor;var lead=this.lead;if(this.isEmpty())return Range.fromPoints(lead,lead);if(this.isBackwards()){return Range.fromPoints(lead,anchor);}else{return Range.fromPoints(anchor,lead);}};this.clearSelection=function(){if(!this.$isEmpty){this.$isEmpty=true;this._emit(\"changeSelection\");}};this.selectAll=function(){var lastRow=this.doc.getLength()-1;this.setSelectionAnchor(0,0);this.moveCursorTo(lastRow,this.doc.getLine(lastRow).length);};this.setRange=this.setSelectionRange=function(range,reverse){if(reverse){this.setSelectionAnchor(range.end.row,range.end.column);this.selectTo(range.start.row,range.start.column);}else{this.setSelectionAnchor(range.start.row,range.start.column);this.selectTo(range.end.row,range.end.column);}if(this.getRange().isEmpty())this.$isEmpty=true;this.$desiredColumn=null;};this.$moveSelection=function(mover){var lead=this.lead;if(this.$isEmpty)this.setSelectionAnchor(lead.row,lead.column);mover.call(this);};this.selectTo=function(row,column){this.$moveSelection(function(){this.moveCursorTo(row,column);});};this.selectToPosition=function(pos){this.$moveSelection(function(){this.moveCursorToPosition(pos);});};this.moveTo=function(row,column){this.clearSelection();this.moveCursorTo(row,column);};this.moveToPosition=function(pos){this.clearSelection();this.moveCursorToPosition(pos);};this.selectUp=function(){this.$moveSelection(this.moveCursorUp);};this.selectDown=function(){this.$moveSelection(this.moveCursorDown);};this.selectRight=function(){this.$moveSelection(this.moveCursorRight);};this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft);};this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart);};this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd);};this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd);};this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart);};this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight);};this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft);};this.getWordRange=function(row,column){if(typeof column==\"undefined\"){var cursor=row||this.lead;row=cursor.row;column=cursor.column;}return this.session.getWordRange(row,column);};this.selectWord=function(){this.setSelectionRange(this.getWordRange());};this.selectAWord=function(){var cursor=this.getCursor();var range=this.session.getAWordRange(cursor.row,cursor.column);this.setSelectionRange(range);};this.getLineRange=function(row,excludeLastChar){var rowStart=typeof row==\"number\"?row:this.lead.row;var rowEnd;var foldLine=this.session.getFoldLine(rowStart);if(foldLine){rowStart=foldLine.start.row;rowEnd=foldLine.end.row;}else{rowEnd=rowStart;}if(excludeLastChar===true)return new Range(rowStart,0,rowEnd,this.session.getLine(rowEnd).length);else return new Range(rowStart,0,rowEnd+1,0);};this.selectLine=function(){this.setSelectionRange(this.getLineRange());};this.moveCursorUp=function(){this.moveCursorBy(-1,0);};this.moveCursorDown=function(){this.moveCursorBy(1,0);};this.moveCursorLeft=function(){var cursor=this.lead.getPosition(),fold;if(fold=this.session.getFoldAt(cursor.row,cursor.column,-1)){this.moveCursorTo(fold.start.row,fold.start.column);}else if(cursor.column===0){if(cursor.row>0){this.moveCursorTo(cursor.row-1,this.doc.getLine(cursor.row-1).length);}}else{var tabSize=this.session.getTabSize();if(this.session.isTabStop(cursor)&&this.doc.getLine(cursor.row).slice(cursor.column-tabSize,cursor.column).split(\" \").length-1==tabSize)this.moveCursorBy(0,-tabSize);else this.moveCursorBy(0,-1);}};this.moveCursorRight=function(){var cursor=this.lead.getPosition(),fold;if(fold=this.session.getFoldAt(cursor.row,cursor.column,1)){this.moveCursorTo(fold.end.row,fold.end.column);}else if(this.lead.column==this.doc.getLine(this.lead.row).length){if(this.lead.row<this.doc.getLength()-1){this.moveCursorTo(this.lead.row+1,0);}}else{var tabSize=this.session.getTabSize();var cursor=this.lead;if(this.session.isTabStop(cursor)&&this.doc.getLine(cursor.row).slice(cursor.column,cursor.column+tabSize).split(\" \").length-1==tabSize)this.moveCursorBy(0,tabSize);else this.moveCursorBy(0,1);}};this.moveCursorLineStart=function(){var row=this.lead.row;var column=this.lead.column;var screenRow=this.session.documentToScreenRow(row,column);var firstColumnPosition=this.session.screenToDocumentPosition(screenRow,0);var beforeCursor=this.session.getDisplayLine(row,null,firstColumnPosition.row,firstColumnPosition.column);var leadingSpace=beforeCursor.match(/^\\s*/);if(leadingSpace[0].length!=column&&!this.session.$useEmacsStyleLineStart)firstColumnPosition.column+=leadingSpace[0].length;this.moveCursorToPosition(firstColumnPosition);};this.moveCursorLineEnd=function(){var lead=this.lead;var lineEnd=this.session.getDocumentLastRowColumnPosition(lead.row,lead.column);if(this.lead.column==lineEnd.column){var line=this.session.getLine(lineEnd.row);if(lineEnd.column==line.length){var textEnd=line.search(/\\s+$/);if(textEnd>0)lineEnd.column=textEnd;}}this.moveCursorTo(lineEnd.row,lineEnd.column);};this.moveCursorFileEnd=function(){var row=this.doc.getLength()-1;var column=this.doc.getLine(row).length;this.moveCursorTo(row,column);};this.moveCursorFileStart=function(){this.moveCursorTo(0,0);};this.moveCursorLongWordRight=function(){var row=this.lead.row;var column=this.lead.column;var line=this.doc.getLine(row);var rightOfCursor=line.substring(column);var match;this.session.nonTokenRe.lastIndex=0;this.session.tokenRe.lastIndex=0;var fold=this.session.getFoldAt(row,column,1);if(fold){this.moveCursorTo(fold.end.row,fold.end.column);return;}if(match=this.session.nonTokenRe.exec(rightOfCursor)){column+=this.session.nonTokenRe.lastIndex;this.session.nonTokenRe.lastIndex=0;rightOfCursor=line.substring(column);}if(column>=line.length){this.moveCursorTo(row,line.length);this.moveCursorRight();if(row<this.doc.getLength()-1)this.moveCursorWordRight();return;}if(match=this.session.tokenRe.exec(rightOfCursor)){column+=this.session.tokenRe.lastIndex;this.session.tokenRe.lastIndex=0;}this.moveCursorTo(row,column);};this.moveCursorLongWordLeft=function(){var row=this.lead.row;var column=this.lead.column;var fold;if(fold=this.session.getFoldAt(row,column,-1)){this.moveCursorTo(fold.start.row,fold.start.column);return;}var str=this.session.getFoldStringAt(row,column,-1);if(str==null){str=this.doc.getLine(row).substring(0,column);}var leftOfCursor=lang.stringReverse(str);var match;this.session.nonTokenRe.lastIndex=0;this.session.tokenRe.lastIndex=0;if(match=this.session.nonTokenRe.exec(leftOfCursor)){column-=this.session.nonTokenRe.lastIndex;leftOfCursor=leftOfCursor.slice(this.session.nonTokenRe.lastIndex);this.session.nonTokenRe.lastIndex=0;}if(column<=0){this.moveCursorTo(row,0);this.moveCursorLeft();if(row>0)this.moveCursorWordLeft();return;}if(match=this.session.tokenRe.exec(leftOfCursor)){column-=this.session.tokenRe.lastIndex;this.session.tokenRe.lastIndex=0;}this.moveCursorTo(row,column);};this.$shortWordEndIndex=function(rightOfCursor){var match,index=0,ch;var whitespaceRe=/\\s/;var tokenRe=this.session.tokenRe;tokenRe.lastIndex=0;if(match=this.session.tokenRe.exec(rightOfCursor)){index=this.session.tokenRe.lastIndex;}else{while((ch=rightOfCursor[index])&&whitespaceRe.test(ch))index++;if(index<1){tokenRe.lastIndex=0;while((ch=rightOfCursor[index])&&!tokenRe.test(ch)){tokenRe.lastIndex=0;index++;if(whitespaceRe.test(ch)){if(index>2){index--;break;}else{while((ch=rightOfCursor[index])&&whitespaceRe.test(ch))index++;if(index>2)break;}}}}}tokenRe.lastIndex=0;return index;};this.moveCursorShortWordRight=function(){var row=this.lead.row;var column=this.lead.column;var line=this.doc.getLine(row);var rightOfCursor=line.substring(column);var fold=this.session.getFoldAt(row,column,1);if(fold)return this.moveCursorTo(fold.end.row,fold.end.column);if(column==line.length){var l=this.doc.getLength();do{row++;rightOfCursor=this.doc.getLine(row);}while(row<l&&/^\\s*$/.test(rightOfCursor));if(!/^\\s+/.test(rightOfCursor))rightOfCursor=\"\";column=0;}var index=this.$shortWordEndIndex(rightOfCursor);this.moveCursorTo(row,column+index);};this.moveCursorShortWordLeft=function(){var row=this.lead.row;var column=this.lead.column;var fold;if(fold=this.session.getFoldAt(row,column,-1))return this.moveCursorTo(fold.start.row,fold.start.column);var line=this.session.getLine(row).substring(0,column);if(column===0){do{row--;line=this.doc.getLine(row);}while(row>0&&/^\\s*$/.test(line));column=line.length;if(!/\\s+$/.test(line))line=\"\";}var leftOfCursor=lang.stringReverse(line);var index=this.$shortWordEndIndex(leftOfCursor);return this.moveCursorTo(row,column-index);};this.moveCursorWordRight=function(){if(this.session.$selectLongWords)this.moveCursorLongWordRight();else this.moveCursorShortWordRight();};this.moveCursorWordLeft=function(){if(this.session.$selectLongWords)this.moveCursorLongWordLeft();else this.moveCursorShortWordLeft();};this.moveCursorBy=function(rows,chars){var screenPos=this.session.documentToScreenPosition(this.lead.row,this.lead.column);if(chars===0){if(this.$desiredColumn)screenPos.column=this.$desiredColumn;else this.$desiredColumn=screenPos.column;}var docPos=this.session.screenToDocumentPosition(screenPos.row+rows,screenPos.column);if(rows!==0&&chars===0&&docPos.row===this.lead.row&&docPos.column===this.lead.column){if(this.session.lineWidgets&&this.session.lineWidgets[docPos.row]){if(docPos.row>0||rows>0)docPos.row++;}}this.moveCursorTo(docPos.row,docPos.column+chars,chars===0);};this.moveCursorToPosition=function(position){this.moveCursorTo(position.row,position.column);};this.moveCursorTo=function(row,column,keepDesiredColumn){var fold=this.session.getFoldAt(row,column,1);if(fold){row=fold.start.row;column=fold.start.column;}this.$keepDesiredColumnOnChange=true;this.lead.setPosition(row,column);this.$keepDesiredColumnOnChange=false;if(!keepDesiredColumn)this.$desiredColumn=null;};this.moveCursorToScreen=function(row,column,keepDesiredColumn){var pos=this.session.screenToDocumentPosition(row,column);this.moveCursorTo(pos.row,pos.column,keepDesiredColumn);};this.detach=function(){this.lead.detach();this.anchor.detach();this.session=this.doc=null;};this.fromOrientedRange=function(range){this.setSelectionRange(range,range.cursor==range.start);this.$desiredColumn=range.desiredColumn||this.$desiredColumn;};this.toOrientedRange=function(range){var r=this.getRange();if(range){range.start.column=r.start.column;range.start.row=r.start.row;range.end.column=r.end.column;range.end.row=r.end.row;}else{range=r;}range.cursor=this.isBackwards()?range.start:range.end;range.desiredColumn=this.$desiredColumn;return range;};this.getRangeOfMovements=function(func){var start=this.getCursor();try{func(this);var end=this.getCursor();return Range.fromPoints(start,end);}catch(e){return Range.fromPoints(start,start);}finally{this.moveCursorToPosition(start);}};this.toJSON=function(){if(this.rangeCount){var data=this.ranges.map(function(r){var r1=r.clone();r1.isBackwards=r.cursor==r.start;return r1;});}else{var data=this.getRange();data.isBackwards=this.isBackwards();}return data;};this.fromJSON=function(data){if(data.start==undefined){if(this.rangeList){this.toSingleRange(data[0]);for(var i=data.length;i--;){var r=Range.fromPoints(data[i].start,data[i].end);if(data[i].isBackwards)r.cursor=r.start;this.addRange(r,true);}return;}else data=data[0];}if(this.rangeList)this.toSingleRange(data);this.setSelectionRange(data,data.isBackwards);};this.isEqual=function(data){if((data.length||this.rangeCount)&&data.length!=this.rangeCount)return false;if(!data.length||!this.ranges)return this.getRange().isEqual(data);for(var i=this.ranges.length;i--;){if(!this.ranges[i].isEqual(data[i]))return false;}return true;};}).call(Selection.prototype);exports.Selection=Selection;});ace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"],function(acequire,exports,module){\"use strict\";var config=acequire(\"./config\");var MAX_TOKEN_COUNT=2000;var Tokenizer=function(rules){this.states=rules;this.regExps={};this.matchMappings={};for(var key in this.states){var state=this.states[key];var ruleRegExps=[];var matchTotal=0;var mapping=this.matchMappings[key]={defaultToken:\"text\"};var flag=\"g\";var splitterRurles=[];for(var i=0;i<state.length;i++){var rule=state[i];if(rule.defaultToken)mapping.defaultToken=rule.defaultToken;if(rule.caseInsensitive)flag=\"gi\";if(rule.regex==null)continue;if(rule.regex instanceof RegExp)rule.regex=rule.regex.toString().slice(1,-1);var adjustedregex=rule.regex;var matchcount=new RegExp(\"(?:(\"+adjustedregex+\")|(.))\").exec(\"a\").length-2;if(Array.isArray(rule.token)){if(rule.token.length==1||matchcount==1){rule.token=rule.token[0];}else if(matchcount-1!=rule.token.length){this.reportError(\"number of classes and regexp groups doesn't match\",{rule:rule,groupCount:matchcount-1});rule.token=rule.token[0];}else{rule.tokenArray=rule.token;rule.token=null;rule.onMatch=this.$arrayTokens;}}else if(typeof rule.token==\"function\"&&!rule.onMatch){if(matchcount>1)rule.onMatch=this.$applyToken;else rule.onMatch=rule.token;}if(matchcount>1){if(/\\\\\\d/.test(rule.regex)){adjustedregex=rule.regex.replace(/\\\\([0-9]+)/g,function(match,digit){return\"\\\\\"+(parseInt(digit,10)+matchTotal+1);});}else{matchcount=1;adjustedregex=this.removeCapturingGroups(rule.regex);}if(!rule.splitRegex&&typeof rule.token!=\"string\")splitterRurles.push(rule);// flag will be known only at the very end\n}mapping[matchTotal]=i;matchTotal+=matchcount;ruleRegExps.push(adjustedregex);if(!rule.onMatch)rule.onMatch=null;}if(!ruleRegExps.length){mapping[0]=0;ruleRegExps.push(\"$\");}splitterRurles.forEach(function(rule){rule.splitRegex=this.createSplitterRegexp(rule.regex,flag);},this);this.regExps[key]=new RegExp(\"(\"+ruleRegExps.join(\")|(\")+\")|($)\",flag);}};(function(){this.$setMaxTokenCount=function(m){MAX_TOKEN_COUNT=m|0;};this.$applyToken=function(str){var values=this.splitRegex.exec(str).slice(1);var types=this.token.apply(this,values);if(typeof types===\"string\")return[{type:types,value:str}];var tokens=[];for(var i=0,l=types.length;i<l;i++){if(values[i])tokens[tokens.length]={type:types[i],value:values[i]};}return tokens;};this.$arrayTokens=function(str){if(!str)return[];var values=this.splitRegex.exec(str);if(!values)return\"text\";var tokens=[];var types=this.tokenArray;for(var i=0,l=types.length;i<l;i++){if(values[i+1])tokens[tokens.length]={type:types[i],value:values[i+1]};}return tokens;};this.removeCapturingGroups=function(src){var r=src.replace(/\\[(?:\\\\.|[^\\]])*?\\]|\\\\.|\\(\\?[:=!]|(\\()/g,function(x,y){return y?\"(?:\":x;});return r;};this.createSplitterRegexp=function(src,flag){if(src.indexOf(\"(?=\")!=-1){var stack=0;var inChClass=false;var lastCapture={};src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g,function(m,esc,parenOpen,parenClose,square,index){if(inChClass){inChClass=square!=\"]\";}else if(square){inChClass=true;}else if(parenClose){if(stack==lastCapture.stack){lastCapture.end=index+1;lastCapture.stack=-1;}stack--;}else if(parenOpen){stack++;if(parenOpen.length!=1){lastCapture.stack=stack;lastCapture.start=index;}}return m;});if(lastCapture.end!=null&&/^\\)*$/.test(src.substr(lastCapture.end)))src=src.substring(0,lastCapture.start)+src.substr(lastCapture.end);}if(src.charAt(0)!=\"^\")src=\"^\"+src;if(src.charAt(src.length-1)!=\"$\")src+=\"$\";return new RegExp(src,(flag||\"\").replace(\"g\",\"\"));};this.getLineTokens=function(line,startState){if(startState&&typeof startState!=\"string\"){var stack=startState.slice(0);startState=stack[0];if(startState===\"#tmp\"){stack.shift();startState=stack.shift();}}else var stack=[];var currentState=startState||\"start\";var state=this.states[currentState];if(!state){currentState=\"start\";state=this.states[currentState];}var mapping=this.matchMappings[currentState];var re=this.regExps[currentState];re.lastIndex=0;var match,tokens=[];var lastIndex=0;var matchAttempts=0;var token={type:null,value:\"\"};while(match=re.exec(line)){var type=mapping.defaultToken;var rule=null;var value=match[0];var index=re.lastIndex;if(index-value.length>lastIndex){var skipped=line.substring(lastIndex,index-value.length);if(token.type==type){token.value+=skipped;}else{if(token.type)tokens.push(token);token={type:type,value:skipped};}}for(var i=0;i<match.length-2;i++){if(match[i+1]===undefined)continue;rule=state[mapping[i]];if(rule.onMatch)type=rule.onMatch(value,currentState,stack);else type=rule.token;if(rule.next){if(typeof rule.next==\"string\"){currentState=rule.next;}else{currentState=rule.next(currentState,stack);}state=this.states[currentState];if(!state){this.reportError(\"state doesn't exist\",currentState);currentState=\"start\";state=this.states[currentState];}mapping=this.matchMappings[currentState];lastIndex=index;re=this.regExps[currentState];re.lastIndex=index;}break;}if(value){if(typeof type===\"string\"){if((!rule||rule.merge!==false)&&token.type===type){token.value+=value;}else{if(token.type)tokens.push(token);token={type:type,value:value};}}else if(type){if(token.type)tokens.push(token);token={type:null,value:\"\"};for(var i=0;i<type.length;i++)tokens.push(type[i]);}}if(lastIndex==line.length)break;lastIndex=index;if(matchAttempts++>MAX_TOKEN_COUNT){if(matchAttempts>2*line.length){this.reportError(\"infinite loop with in ace tokenizer\",{startState:startState,line:line});}while(lastIndex<line.length){if(token.type)tokens.push(token);token={value:line.substring(lastIndex,lastIndex+=2000),type:\"overflow\"};}currentState=\"start\";stack=[];break;}}if(token.type)tokens.push(token);if(stack.length>1){if(stack[0]!==currentState)stack.unshift(\"#tmp\",currentState);}return{tokens:tokens,state:stack.length?stack:currentState};};this.reportError=config.reportError;}).call(Tokenizer.prototype);exports.Tokenizer=Tokenizer;});ace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"],function(acequire,exports,module){\"use strict\";var lang=acequire(\"../lib/lang\");var TextHighlightRules=function(){this.$rules={\"start\":[{token:\"empty_line\",regex:'^$'},{defaultToken:\"text\"}]};};(function(){this.addRules=function(rules,prefix){if(!prefix){for(var key in rules)this.$rules[key]=rules[key];return;}for(var key in rules){var state=rules[key];for(var i=0;i<state.length;i++){var rule=state[i];if(rule.next||rule.onMatch){if(typeof rule.next==\"string\"){if(rule.next.indexOf(prefix)!==0)rule.next=prefix+rule.next;}if(rule.nextState&&rule.nextState.indexOf(prefix)!==0)rule.nextState=prefix+rule.nextState;}}this.$rules[prefix+key]=state;}};this.getRules=function(){return this.$rules;};this.embedRules=function(HighlightRules,prefix,escapeRules,states,append){var embedRules=typeof HighlightRules==\"function\"?new HighlightRules().getRules():HighlightRules;if(states){for(var i=0;i<states.length;i++)states[i]=prefix+states[i];}else{states=[];for(var key in embedRules)states.push(prefix+key);}this.addRules(embedRules,prefix);if(escapeRules){var addRules=Array.prototype[append?\"push\":\"unshift\"];for(var i=0;i<states.length;i++)addRules.apply(this.$rules[states[i]],lang.deepCopy(escapeRules));}if(!this.$embeds)this.$embeds=[];this.$embeds.push(prefix);};this.getEmbeds=function(){return this.$embeds;};var pushState=function(currentState,stack){if(currentState!=\"start\"||stack.length)stack.unshift(this.nextState,currentState);return this.nextState;};var popState=function(currentState,stack){stack.shift();return stack.shift()||\"start\";};this.normalizeRules=function(){var id=0;var rules=this.$rules;function processState(key){var state=rules[key];state.processed=true;for(var i=0;i<state.length;i++){var rule=state[i];if(!rule.regex&&rule.start){rule.regex=rule.start;if(!rule.next)rule.next=[];rule.next.push({defaultToken:rule.token},{token:rule.token+\".end\",regex:rule.end||rule.start,next:\"pop\"});rule.token=rule.token+\".start\";rule.push=true;}var next=rule.next||rule.push;if(next&&Array.isArray(next)){var stateName=rule.stateName;if(!stateName){stateName=rule.token;if(typeof stateName!=\"string\")stateName=stateName[0]||\"\";if(rules[stateName])stateName+=id++;}rules[stateName]=next;rule.next=stateName;processState(stateName);}else if(next==\"pop\"){rule.next=popState;}if(rule.push){rule.nextState=rule.next||rule.push;rule.next=pushState;delete rule.push;}if(rule.rules){for(var r in rule.rules){if(rules[r]){if(rules[r].push)rules[r].push.apply(rules[r],rule.rules[r]);}else{rules[r]=rule.rules[r];}}}if(rule.include||typeof rule==\"string\"){var includeName=rule.include||rule;var toInsert=rules[includeName];}else if(Array.isArray(rule))toInsert=rule;if(toInsert){var args=[i,1].concat(toInsert);if(rule.noEscape)args=args.filter(function(x){return!x.next;});state.splice.apply(state,args);i--;toInsert=null;}if(rule.keywordMap){rule.token=this.createKeywordMapper(rule.keywordMap,rule.defaultToken||\"text\",rule.caseInsensitive);delete rule.defaultToken;}}}Object.keys(rules).forEach(processState,this);};this.createKeywordMapper=function(map,defaultToken,ignoreCase,splitChar){var keywords=Object.create(null);Object.keys(map).forEach(function(className){var a=map[className];if(ignoreCase)a=a.toLowerCase();var list=a.split(splitChar||\"|\");for(var i=list.length;i--;)keywords[list[i]]=className;});if(Object.getPrototypeOf(keywords)){keywords.__proto__=null;}this.$keywordList=Object.keys(keywords);map=null;return ignoreCase?function(value){return keywords[value.toLowerCase()]||defaultToken;}:function(value){return keywords[value]||defaultToken;};};this.getKeywords=function(){return this.$keywords;};}).call(TextHighlightRules.prototype);exports.TextHighlightRules=TextHighlightRules;});ace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"],function(acequire,exports,module){\"use strict\";var Behaviour=function(){this.$behaviours={};};(function(){this.add=function(name,action,callback){switch(undefined){case this.$behaviours:this.$behaviours={};case this.$behaviours[name]:this.$behaviours[name]={};}this.$behaviours[name][action]=callback;};this.addBehaviours=function(behaviours){for(var key in behaviours){for(var action in behaviours[key]){this.add(key,action,behaviours[key][action]);}}};this.remove=function(name){if(this.$behaviours&&this.$behaviours[name]){delete this.$behaviours[name];}};this.inherit=function(mode,filter){if(typeof mode===\"function\"){var behaviours=new mode().getBehaviours(filter);}else{var behaviours=mode.getBehaviours(filter);}this.addBehaviours(behaviours);};this.getBehaviours=function(filter){if(!filter){return this.$behaviours;}else{var ret={};for(var i=0;i<filter.length;i++){if(this.$behaviours[filter[i]]){ret[filter[i]]=this.$behaviours[filter[i]];}}return ret;}};}).call(Behaviour.prototype);exports.Behaviour=Behaviour;});ace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"],function(acequire,exports,module){\"use strict\";exports.packages={};addUnicodePackage({L:\"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",Ll:\"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A\",Lu:\"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A\",Lt:\"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC\",Lm:\"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F\",Lo:\"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",M:\"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26\",Mn:\"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26\",Mc:\"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC\",Me:\"0488048906DE20DD-20E020E2-20E4A670-A672\",N:\"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",Nd:\"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",Nl:\"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF\",No:\"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835\",P:\"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65\",Pd:\"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D\",Ps:\"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62\",Pe:\"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63\",Pi:\"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20\",Pf:\"00BB2019201D203A2E032E052E0A2E0D2E1D2E21\",Pc:\"005F203F20402054FE33FE34FE4D-FE4FFF3F\",Po:\"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65\",S:\"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD\",Sm:\"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC\",Sc:\"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6\",Sk:\"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3\",So:\"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD\",Z:\"002000A01680180E2000-200A20282029202F205F3000\",Zs:\"002000A01680180E2000-200A202F205F3000\",Zl:\"2028\",Zp:\"2029\",C:\"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF\",Cc:\"0000-001F007F-009F\",Cf:\"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB\",Co:\"E000-F8FF\",Cs:\"D800-DFFF\",Cn:\"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF\"});function addUnicodePackage(pack){var codePoint=/\\w{4}/g;for(var name in pack)exports.packages[name]=pack[name].replace(codePoint,\"\\\\u$&\");}});ace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\"],function(acequire,exports,module){\"use strict\";var TokenIterator=function(session,initialRow,initialColumn){this.$session=session;this.$row=initialRow;this.$rowTokens=session.getTokens(initialRow);var token=session.getTokenAt(initialRow,initialColumn);this.$tokenIndex=token?token.index:-1;};(function(){this.stepBackward=function(){this.$tokenIndex-=1;while(this.$tokenIndex<0){this.$row-=1;if(this.$row<0){this.$row=0;return null;}this.$rowTokens=this.$session.getTokens(this.$row);this.$tokenIndex=this.$rowTokens.length-1;}return this.$rowTokens[this.$tokenIndex];};this.stepForward=function(){this.$tokenIndex+=1;var rowCount;while(this.$tokenIndex>=this.$rowTokens.length){this.$row+=1;if(!rowCount)rowCount=this.$session.getLength();if(this.$row>=rowCount){this.$row=rowCount-1;return null;}this.$rowTokens=this.$session.getTokens(this.$row);this.$tokenIndex=0;}return this.$rowTokens[this.$tokenIndex];};this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex];};this.getCurrentTokenRow=function(){return this.$row;};this.getCurrentTokenColumn=function(){var rowTokens=this.$rowTokens;var tokenIndex=this.$tokenIndex;var column=rowTokens[tokenIndex].start;if(column!==undefined)return column;column=0;while(tokenIndex>0){tokenIndex-=1;column+=rowTokens[tokenIndex].value.length;}return column;};this.getCurrentTokenPosition=function(){return{row:this.$row,column:this.getCurrentTokenColumn()};};}).call(TokenIterator.prototype);exports.TokenIterator=TokenIterator;});ace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"],function(acequire,exports,module){\"use strict\";var Tokenizer=acequire(\"../tokenizer\").Tokenizer;var TextHighlightRules=acequire(\"./text_highlight_rules\").TextHighlightRules;var Behaviour=acequire(\"./behaviour\").Behaviour;var unicode=acequire(\"../unicode\");var lang=acequire(\"../lib/lang\");var TokenIterator=acequire(\"../token_iterator\").TokenIterator;var Range=acequire(\"../range\").Range;var Mode=function(){this.HighlightRules=TextHighlightRules;this.$behaviour=new Behaviour();};(function(){this.tokenRe=new RegExp(\"^[\"+unicode.packages.L+unicode.packages.Mn+unicode.packages.Mc+unicode.packages.Nd+unicode.packages.Pc+\"\\\\$_]+\",\"g\");this.nonTokenRe=new RegExp(\"^(?:[^\"+unicode.packages.L+unicode.packages.Mn+unicode.packages.Mc+unicode.packages.Nd+unicode.packages.Pc+\"\\\\$_]|\\\\s])+\",\"g\");this.getTokenizer=function(){if(!this.$tokenizer){this.$highlightRules=this.$highlightRules||new this.HighlightRules();this.$tokenizer=new Tokenizer(this.$highlightRules.getRules());}return this.$tokenizer;};this.lineCommentStart=\"\";this.blockComment=\"\";this.toggleCommentLines=function(state,session,startRow,endRow){var doc=session.doc;var ignoreBlankLines=true;var shouldRemove=true;var minIndent=Infinity;var tabSize=session.getTabSize();var insertAtTabStop=false;if(!this.lineCommentStart){if(!this.blockComment)return false;var lineCommentStart=this.blockComment.start;var lineCommentEnd=this.blockComment.end;var regexpStart=new RegExp(\"^(\\\\s*)(?:\"+lang.escapeRegExp(lineCommentStart)+\")\");var regexpEnd=new RegExp(\"(?:\"+lang.escapeRegExp(lineCommentEnd)+\")\\\\s*$\");var comment=function(line,i){if(testRemove(line,i))return;if(!ignoreBlankLines||/\\S/.test(line)){doc.insertInLine({row:i,column:line.length},lineCommentEnd);doc.insertInLine({row:i,column:minIndent},lineCommentStart);}};var uncomment=function(line,i){var m;if(m=line.match(regexpEnd))doc.removeInLine(i,line.length-m[0].length,line.length);if(m=line.match(regexpStart))doc.removeInLine(i,m[1].length,m[0].length);};var testRemove=function(line,row){if(regexpStart.test(line))return true;var tokens=session.getTokens(row);for(var i=0;i<tokens.length;i++){if(tokens[i].type===\"comment\")return true;}};}else{if(Array.isArray(this.lineCommentStart)){var regexpStart=this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");var lineCommentStart=this.lineCommentStart[0];}else{var regexpStart=lang.escapeRegExp(this.lineCommentStart);var lineCommentStart=this.lineCommentStart;}regexpStart=new RegExp(\"^(\\\\s*)(?:\"+regexpStart+\") ?\");insertAtTabStop=session.getUseSoftTabs();var uncomment=function(line,i){var m=line.match(regexpStart);if(!m)return;var start=m[1].length,end=m[0].length;if(!shouldInsertSpace(line,start,end)&&m[0][end-1]==\" \")end--;doc.removeInLine(i,start,end);};var commentWithSpace=lineCommentStart+\" \";var comment=function(line,i){if(!ignoreBlankLines||/\\S/.test(line)){if(shouldInsertSpace(line,minIndent,minIndent))doc.insertInLine({row:i,column:minIndent},commentWithSpace);else doc.insertInLine({row:i,column:minIndent},lineCommentStart);}};var testRemove=function(line,i){return regexpStart.test(line);};var shouldInsertSpace=function(line,before,after){var spaces=0;while(before--&&line.charAt(before)==\" \")spaces++;if(spaces%tabSize!=0)return false;var spaces=0;while(line.charAt(after++)==\" \")spaces++;if(tabSize>2)return spaces%tabSize!=tabSize-1;else return spaces%tabSize==0;return true;};}function iter(fun){for(var i=startRow;i<=endRow;i++)fun(doc.getLine(i),i);}var minEmptyLength=Infinity;iter(function(line,i){var indent=line.search(/\\S/);if(indent!==-1){if(indent<minIndent)minIndent=indent;if(shouldRemove&&!testRemove(line,i))shouldRemove=false;}else if(minEmptyLength>line.length){minEmptyLength=line.length;}});if(minIndent==Infinity){minIndent=minEmptyLength;ignoreBlankLines=false;shouldRemove=false;}if(insertAtTabStop&&minIndent%tabSize!=0)minIndent=Math.floor(minIndent/tabSize)*tabSize;iter(shouldRemove?uncomment:comment);};this.toggleBlockComment=function(state,session,range,cursor){var comment=this.blockComment;if(!comment)return;if(!comment.start&&comment[0])comment=comment[0];var iterator=new TokenIterator(session,cursor.row,cursor.column);var token=iterator.getCurrentToken();var sel=session.selection;var initialRange=session.selection.toOrientedRange();var startRow,colDiff;if(token&&/comment/.test(token.type)){var startRange,endRange;while(token&&/comment/.test(token.type)){var i=token.value.indexOf(comment.start);if(i!=-1){var row=iterator.getCurrentTokenRow();var column=iterator.getCurrentTokenColumn()+i;startRange=new Range(row,column,row,column+comment.start.length);break;}token=iterator.stepBackward();}var iterator=new TokenIterator(session,cursor.row,cursor.column);var token=iterator.getCurrentToken();while(token&&/comment/.test(token.type)){var i=token.value.indexOf(comment.end);if(i!=-1){var row=iterator.getCurrentTokenRow();var column=iterator.getCurrentTokenColumn()+i;endRange=new Range(row,column,row,column+comment.end.length);break;}token=iterator.stepForward();}if(endRange)session.remove(endRange);if(startRange){session.remove(startRange);startRow=startRange.start.row;colDiff=-comment.start.length;}}else{colDiff=comment.start.length;startRow=range.start.row;session.insert(range.end,comment.end);session.insert(range.start,comment.start);}if(initialRange.start.row==startRow)initialRange.start.column+=colDiff;if(initialRange.end.row==startRow)initialRange.end.column+=colDiff;session.selection.fromOrientedRange(initialRange);};this.getNextLineIndent=function(state,line,tab){return this.$getIndent(line);};this.checkOutdent=function(state,line,input){return false;};this.autoOutdent=function(state,doc,row){};this.$getIndent=function(line){return line.match(/^\\s*/)[0];};this.createWorker=function(session){return null;};this.createModeDelegates=function(mapping){this.$embeds=[];this.$modes={};for(var i in mapping){if(mapping[i]){this.$embeds.push(i);this.$modes[i]=new mapping[i]();}}var delegations=[\"toggleBlockComment\",\"toggleCommentLines\",\"getNextLineIndent\",\"checkOutdent\",\"autoOutdent\",\"transformAction\",\"getCompletions\"];for(var i=0;i<delegations.length;i++){(function(scope){var functionName=delegations[i];var defaultHandler=scope[functionName];scope[delegations[i]]=function(){return this.$delegator(functionName,arguments,defaultHandler);};})(this);}};this.$delegator=function(method,args,defaultHandler){var state=args[0];if(typeof state!=\"string\")state=state[0];for(var i=0;i<this.$embeds.length;i++){if(!this.$modes[this.$embeds[i]])continue;var split=state.split(this.$embeds[i]);if(!split[0]&&split[1]){args[0]=split[1];var mode=this.$modes[this.$embeds[i]];return mode[method].apply(mode,args);}}var ret=defaultHandler.apply(this,args);return defaultHandler?ret:undefined;};this.transformAction=function(state,action,editor,session,param){if(this.$behaviour){var behaviours=this.$behaviour.getBehaviours();for(var key in behaviours){if(behaviours[key][action]){var ret=behaviours[key][action].apply(this,arguments);if(ret){return ret;}}}}};this.getKeywords=function(append){if(!this.completionKeywords){var rules=this.$tokenizer.rules;var completionKeywords=[];for(var rule in rules){var ruleItr=rules[rule];for(var r=0,l=ruleItr.length;r<l;r++){if(typeof ruleItr[r].token===\"string\"){if(/keyword|support|storage/.test(ruleItr[r].token))completionKeywords.push(ruleItr[r].regex);}else if(typeof ruleItr[r].token===\"object\"){for(var a=0,aLength=ruleItr[r].token.length;a<aLength;a++){if(/keyword|support|storage/.test(ruleItr[r].token[a])){var rule=ruleItr[r].regex.match(/\\(.+?\\)/g)[a];completionKeywords.push(rule.substr(1,rule.length-2));}}}}}this.completionKeywords=completionKeywords;}if(!append)return this.$keywordList;return completionKeywords.concat(this.$keywordList||[]);};this.$createKeywordList=function(){if(!this.$highlightRules)this.getTokenizer();return this.$keywordList=this.$highlightRules.$keywordList||[];};this.getCompletions=function(state,session,pos,prefix){var keywords=this.$keywordList||this.$createKeywordList();return keywords.map(function(word){return{name:word,value:word,score:0,meta:\"keyword\"};});};this.$id=\"ace/mode/text\";}).call(Mode.prototype);exports.Mode=Mode;});ace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"],function(acequire,exports,module){\"use strict\";function throwDeltaError(delta,errorText){console.log(\"Invalid Delta:\",delta);throw\"Invalid Delta: \"+errorText;}function positionInDocument(docLines,position){return position.row>=0&&position.row<docLines.length&&position.column>=0&&position.column<=docLines[position.row].length;}function validateDelta(docLines,delta){if(delta.action!=\"insert\"&&delta.action!=\"remove\")throwDeltaError(delta,\"delta.action must be 'insert' or 'remove'\");if(!(delta.lines instanceof Array))throwDeltaError(delta,\"delta.lines must be an Array\");if(!delta.start||!delta.end)throwDeltaError(delta,\"delta.start/end must be an present\");var start=delta.start;if(!positionInDocument(docLines,delta.start))throwDeltaError(delta,\"delta.start must be contained in document\");var end=delta.end;if(delta.action==\"remove\"&&!positionInDocument(docLines,end))throwDeltaError(delta,\"delta.end must contained in document for 'remove' actions\");var numRangeRows=end.row-start.row;var numRangeLastLineChars=end.column-(numRangeRows==0?start.column:0);if(numRangeRows!=delta.lines.length-1||delta.lines[numRangeRows].length!=numRangeLastLineChars)throwDeltaError(delta,\"delta.range must match delta lines\");}exports.applyDelta=function(docLines,delta,doNotValidate){var row=delta.start.row;var startColumn=delta.start.column;var line=docLines[row]||\"\";switch(delta.action){case\"insert\":var lines=delta.lines;if(lines.length===1){docLines[row]=line.substring(0,startColumn)+delta.lines[0]+line.substring(startColumn);}else{var args=[row,1].concat(delta.lines);docLines.splice.apply(docLines,args);docLines[row]=line.substring(0,startColumn)+docLines[row];docLines[row+delta.lines.length-1]+=line.substring(startColumn);}break;case\"remove\":var endColumn=delta.end.column;var endRow=delta.end.row;if(row===endRow){docLines[row]=line.substring(0,startColumn)+line.substring(endColumn);}else{docLines.splice(row,endRow-row+1,line.substring(0,startColumn)+docLines[endRow].substring(endColumn));}break;}};});ace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(acequire,exports,module){\"use strict\";var oop=acequire(\"./lib/oop\");var EventEmitter=acequire(\"./lib/event_emitter\").EventEmitter;var Anchor=exports.Anchor=function(doc,row,column){this.$onChange=this.onChange.bind(this);this.attach(doc);if(typeof column==\"undefined\")this.setPosition(row.row,row.column);else this.setPosition(row,column);};(function(){oop.implement(this,EventEmitter);this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column);};this.getDocument=function(){return this.document;};this.$insertRight=false;this.onChange=function(delta){if(delta.start.row==delta.end.row&&delta.start.row!=this.row)return;if(delta.start.row>this.row)return;var point=$getTransformedPoint(delta,{row:this.row,column:this.column},this.$insertRight);this.setPosition(point.row,point.column,true);};function $pointsInOrder(point1,point2,equalPointsInOrder){var bColIsAfter=equalPointsInOrder?point1.column<=point2.column:point1.column<point2.column;return point1.row<point2.row||point1.row==point2.row&&bColIsAfter;}function $getTransformedPoint(delta,point,moveIfEqual){var deltaIsInsert=delta.action==\"insert\";var deltaRowShift=(deltaIsInsert?1:-1)*(delta.end.row-delta.start.row);var deltaColShift=(deltaIsInsert?1:-1)*(delta.end.column-delta.start.column);var deltaStart=delta.start;var deltaEnd=deltaIsInsert?deltaStart:delta.end;// Collapse insert range.\nif($pointsInOrder(point,deltaStart,moveIfEqual)){return{row:point.row,column:point.column};}if($pointsInOrder(deltaEnd,point,!moveIfEqual)){return{row:point.row+deltaRowShift,column:point.column+(point.row==deltaEnd.row?deltaColShift:0)};}return{row:deltaStart.row,column:deltaStart.column};}this.setPosition=function(row,column,noClip){var pos;if(noClip){pos={row:row,column:column};}else{pos=this.$clipPositionToDocument(row,column);}if(this.row==pos.row&&this.column==pos.column)return;var old={row:this.row,column:this.column};this.row=pos.row;this.column=pos.column;this._signal(\"change\",{old:old,value:pos});};this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange);};this.attach=function(doc){this.document=doc||this.document;this.document.on(\"change\",this.$onChange);};this.$clipPositionToDocument=function(row,column){var pos={};if(row>=this.document.getLength()){pos.row=Math.max(0,this.document.getLength()-1);pos.column=this.document.getLine(pos.row).length;}else if(row<0){pos.row=0;pos.column=0;}else{pos.row=row;pos.column=Math.min(this.document.getLine(pos.row).length,Math.max(0,column));}if(column<0)pos.column=0;return pos;};}).call(Anchor.prototype);});ace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"],function(acequire,exports,module){\"use strict\";var oop=acequire(\"./lib/oop\");var applyDelta=acequire(\"./apply_delta\").applyDelta;var EventEmitter=acequire(\"./lib/event_emitter\").EventEmitter;var Range=acequire(\"./range\").Range;var Anchor=acequire(\"./anchor\").Anchor;var Document=function(textOrLines){this.$lines=[\"\"];if(textOrLines.length===0){this.$lines=[\"\"];}else if(Array.isArray(textOrLines)){this.insertMergedLines({row:0,column:0},textOrLines);}else{this.insert({row:0,column:0},textOrLines);}};(function(){oop.implement(this,EventEmitter);this.setValue=function(text){var len=this.getLength()-1;this.remove(new Range(0,0,len,this.getLine(len).length));this.insert({row:0,column:0},text);};this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter());};this.createAnchor=function(row,column){return new Anchor(this,row,column);};if(\"aaa\".split(/a/).length===0){this.$split=function(text){return text.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\");};}else{this.$split=function(text){return text.split(/\\r\\n|\\r|\\n/);};}this.$detectNewLine=function(text){var match=text.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=match?match[1]:\"\\n\";this._signal(\"changeNewLineMode\");};this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\";}};this.$autoNewLine=\"\";this.$newLineMode=\"auto\";this.setNewLineMode=function(newLineMode){if(this.$newLineMode===newLineMode)return;this.$newLineMode=newLineMode;this._signal(\"changeNewLineMode\");};this.getNewLineMode=function(){return this.$newLineMode;};this.isNewLine=function(text){return text==\"\\r\\n\"||text==\"\\r\"||text==\"\\n\";};this.getLine=function(row){return this.$lines[row]||\"\";};this.getLines=function(firstRow,lastRow){return this.$lines.slice(firstRow,lastRow+1);};this.getAllLines=function(){return this.getLines(0,this.getLength());};this.getLength=function(){return this.$lines.length;};this.getTextRange=function(range){return this.getLinesForRange(range).join(this.getNewLineCharacter());};this.getLinesForRange=function(range){var lines;if(range.start.row===range.end.row){lines=[this.getLine(range.start.row).substring(range.start.column,range.end.column)];}else{lines=this.getLines(range.start.row,range.end.row);lines[0]=(lines[0]||\"\").substring(range.start.column);var l=lines.length-1;if(range.end.row-range.start.row==l)lines[l]=lines[l].substring(0,range.end.column);}return lines;};this.insertLines=function(row,lines){console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");return this.insertFullLines(row,lines);};this.removeLines=function(firstRow,lastRow){console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");return this.removeFullLines(firstRow,lastRow);};this.insertNewLine=function(position){console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\\'\\', \\'\\']) instead.\");return this.insertMergedLines(position,[\"\",\"\"]);};this.insert=function(position,text){if(this.getLength()<=1)this.$detectNewLine(text);return this.insertMergedLines(position,this.$split(text));};this.insertInLine=function(position,text){var start=this.clippedPos(position.row,position.column);var end=this.pos(position.row,position.column+text.length);this.applyDelta({start:start,end:end,action:\"insert\",lines:[text]},true);return this.clonePos(end);};this.clippedPos=function(row,column){var length=this.getLength();if(row===undefined){row=length;}else if(row<0){row=0;}else if(row>=length){row=length-1;column=undefined;}var line=this.getLine(row);if(column==undefined)column=line.length;column=Math.min(Math.max(column,0),line.length);return{row:row,column:column};};this.clonePos=function(pos){return{row:pos.row,column:pos.column};};this.pos=function(row,column){return{row:row,column:column};};this.$clipPosition=function(position){var length=this.getLength();if(position.row>=length){position.row=Math.max(0,length-1);position.column=this.getLine(length-1).length;}else{position.row=Math.max(0,position.row);position.column=Math.min(Math.max(position.column,0),this.getLine(position.row).length);}return position;};this.insertFullLines=function(row,lines){row=Math.min(Math.max(row,0),this.getLength());var column=0;if(row<this.getLength()){lines=lines.concat([\"\"]);column=0;}else{lines=[\"\"].concat(lines);row--;column=this.$lines[row].length;}this.insertMergedLines({row:row,column:column},lines);};this.insertMergedLines=function(position,lines){var start=this.clippedPos(position.row,position.column);var end={row:start.row+lines.length-1,column:(lines.length==1?start.column:0)+lines[lines.length-1].length};this.applyDelta({start:start,end:end,action:\"insert\",lines:lines});return this.clonePos(end);};this.remove=function(range){var start=this.clippedPos(range.start.row,range.start.column);var end=this.clippedPos(range.end.row,range.end.column);this.applyDelta({start:start,end:end,action:\"remove\",lines:this.getLinesForRange({start:start,end:end})});return this.clonePos(start);};this.removeInLine=function(row,startColumn,endColumn){var start=this.clippedPos(row,startColumn);var end=this.clippedPos(row,endColumn);this.applyDelta({start:start,end:end,action:\"remove\",lines:this.getLinesForRange({start:start,end:end})},true);return this.clonePos(start);};this.removeFullLines=function(firstRow,lastRow){firstRow=Math.min(Math.max(0,firstRow),this.getLength()-1);lastRow=Math.min(Math.max(0,lastRow),this.getLength()-1);var deleteFirstNewLine=lastRow==this.getLength()-1&&firstRow>0;var deleteLastNewLine=lastRow<this.getLength()-1;var startRow=deleteFirstNewLine?firstRow-1:firstRow;var startCol=deleteFirstNewLine?this.getLine(startRow).length:0;var endRow=deleteLastNewLine?lastRow+1:lastRow;var endCol=deleteLastNewLine?0:this.getLine(endRow).length;var range=new Range(startRow,startCol,endRow,endCol);var deletedLines=this.$lines.slice(firstRow,lastRow+1);this.applyDelta({start:range.start,end:range.end,action:\"remove\",lines:this.getLinesForRange(range)});return deletedLines;};this.removeNewLine=function(row){if(row<this.getLength()-1&&row>=0){this.applyDelta({start:this.pos(row,this.getLine(row).length),end:this.pos(row+1,0),action:\"remove\",lines:[\"\",\"\"]});}};this.replace=function(range,text){if(!(range instanceof Range))range=Range.fromPoints(range.start,range.end);if(text.length===0&&range.isEmpty())return range.start;if(text==this.getTextRange(range))return range.end;this.remove(range);var end;if(text){end=this.insert(range.start,text);}else{end=range.start;}return end;};this.applyDeltas=function(deltas){for(var i=0;i<deltas.length;i++){this.applyDelta(deltas[i]);}};this.revertDeltas=function(deltas){for(var i=deltas.length-1;i>=0;i--){this.revertDelta(deltas[i]);}};this.applyDelta=function(delta,doNotValidate){var isInsert=delta.action==\"insert\";if(isInsert?delta.lines.length<=1&&!delta.lines[0]:!Range.comparePoints(delta.start,delta.end)){return;}if(isInsert&&delta.lines.length>20000)this.$splitAndapplyLargeDelta(delta,20000);applyDelta(this.$lines,delta,doNotValidate);this._signal(\"change\",delta);};this.$splitAndapplyLargeDelta=function(delta,MAX){var lines=delta.lines;var l=lines.length;var row=delta.start.row;var column=delta.start.column;var from=0,to=0;do{from=to;to+=MAX-1;var chunk=lines.slice(from,to);if(to>l){delta.lines=chunk;delta.start.row=row+from;delta.start.column=column;break;}chunk.push(\"\");this.applyDelta({start:this.pos(row+from,column),end:this.pos(row+to,column=0),action:delta.action,lines:chunk},true);}while(true);};this.revertDelta=function(delta){this.applyDelta({start:this.clonePos(delta.start),end:this.clonePos(delta.end),action:delta.action==\"insert\"?\"remove\":\"insert\",lines:delta.lines.slice()});};this.indexToPosition=function(index,startRow){var lines=this.$lines||this.getAllLines();var newlineLength=this.getNewLineCharacter().length;for(var i=startRow||0,l=lines.length;i<l;i++){index-=lines[i].length+newlineLength;if(index<0)return{row:i,column:index+lines[i].length+newlineLength};}return{row:l-1,column:lines[l-1].length};};this.positionToIndex=function(pos,startRow){var lines=this.$lines||this.getAllLines();var newlineLength=this.getNewLineCharacter().length;var index=0;var row=Math.min(pos.row,lines.length);for(var i=startRow||0;i<row;++i)index+=lines[i].length+newlineLength;return index+pos.column;};}).call(Document.prototype);exports.Document=Document;});ace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(acequire,exports,module){\"use strict\";var oop=acequire(\"./lib/oop\");var EventEmitter=acequire(\"./lib/event_emitter\").EventEmitter;var BackgroundTokenizer=function(tokenizer,editor){this.running=false;this.lines=[];this.states=[];this.currentLine=0;this.tokenizer=tokenizer;var self=this;this.$worker=function(){if(!self.running){return;}var workerStart=new Date();var currentLine=self.currentLine;var endLine=-1;var doc=self.doc;var startLine=currentLine;while(self.lines[currentLine])currentLine++;var len=doc.getLength();var processedLines=0;self.running=false;while(currentLine<len){self.$tokenizeRow(currentLine);endLine=currentLine;do{currentLine++;}while(self.lines[currentLine]);processedLines++;if(processedLines%5===0&&new Date()-workerStart>20){self.running=setTimeout(self.$worker,20);break;}}self.currentLine=currentLine;if(startLine<=endLine)self.fireUpdateEvent(startLine,endLine);};};(function(){oop.implement(this,EventEmitter);this.setTokenizer=function(tokenizer){this.tokenizer=tokenizer;this.lines=[];this.states=[];this.start(0);};this.setDocument=function(doc){this.doc=doc;this.lines=[];this.states=[];this.stop();};this.fireUpdateEvent=function(firstRow,lastRow){var data={first:firstRow,last:lastRow};this._signal(\"update\",{data:data});};this.start=function(startRow){this.currentLine=Math.min(startRow||0,this.currentLine,this.doc.getLength());this.lines.splice(this.currentLine,this.lines.length);this.states.splice(this.currentLine,this.states.length);this.stop();this.running=setTimeout(this.$worker,700);};this.scheduleStart=function(){if(!this.running)this.running=setTimeout(this.$worker,700);};this.$updateOnChange=function(delta){var startRow=delta.start.row;var len=delta.end.row-startRow;if(len===0){this.lines[startRow]=null;}else if(delta.action==\"remove\"){this.lines.splice(startRow,len+1,null);this.states.splice(startRow,len+1,null);}else{var args=Array(len+1);args.unshift(startRow,1);this.lines.splice.apply(this.lines,args);this.states.splice.apply(this.states,args);}this.currentLine=Math.min(startRow,this.currentLine,this.doc.getLength());this.stop();};this.stop=function(){if(this.running)clearTimeout(this.running);this.running=false;};this.getTokens=function(row){return this.lines[row]||this.$tokenizeRow(row);};this.getState=function(row){if(this.currentLine==row)this.$tokenizeRow(row);return this.states[row]||\"start\";};this.$tokenizeRow=function(row){var line=this.doc.getLine(row);var state=this.states[row-1];var data=this.tokenizer.getLineTokens(line,state,row);if(this.states[row]+\"\"!==data.state+\"\"){this.states[row]=data.state;this.lines[row+1]=null;if(this.currentLine>row+1)this.currentLine=row+1;}else if(this.currentLine==row){this.currentLine=row+1;}return this.lines[row]=data.tokens;};}).call(BackgroundTokenizer.prototype);exports.BackgroundTokenizer=BackgroundTokenizer;});ace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"],function(acequire,exports,module){\"use strict\";var lang=acequire(\"./lib/lang\");var oop=acequire(\"./lib/oop\");var Range=acequire(\"./range\").Range;var SearchHighlight=function(regExp,clazz,type){this.setRegexp(regExp);this.clazz=clazz;this.type=type||\"text\";};(function(){this.MAX_RANGES=500;this.setRegexp=function(regExp){if(this.regExp+\"\"==regExp+\"\")return;this.regExp=regExp;this.cache=[];};this.update=function(html,markerLayer,session,config){if(!this.regExp)return;var start=config.firstRow,end=config.lastRow;for(var i=start;i<=end;i++){var ranges=this.cache[i];if(ranges==null){ranges=lang.getMatchOffsets(session.getLine(i),this.regExp);if(ranges.length>this.MAX_RANGES)ranges=ranges.slice(0,this.MAX_RANGES);ranges=ranges.map(function(match){return new Range(i,match.offset,i,match.offset+match.length);});this.cache[i]=ranges.length?ranges:\"\";}for(var j=ranges.length;j--;){markerLayer.drawSingleLineMarker(html,ranges[j].toScreenRange(session),this.clazz,config);}}};}).call(SearchHighlight.prototype);exports.SearchHighlight=SearchHighlight;});ace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(acequire,exports,module){\"use strict\";var Range=acequire(\"../range\").Range;function FoldLine(foldData,folds){this.foldData=foldData;if(Array.isArray(folds)){this.folds=folds;}else{folds=this.folds=[folds];}var last=folds[folds.length-1];this.range=new Range(folds[0].start.row,folds[0].start.column,last.end.row,last.end.column);this.start=this.range.start;this.end=this.range.end;this.folds.forEach(function(fold){fold.setFoldLine(this);},this);}(function(){this.shiftRow=function(shift){this.start.row+=shift;this.end.row+=shift;this.folds.forEach(function(fold){fold.start.row+=shift;fold.end.row+=shift;});};this.addFold=function(fold){if(fold.sameRow){if(fold.start.row<this.startRow||fold.endRow>this.endRow){throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");}this.folds.push(fold);this.folds.sort(function(a,b){return-a.range.compareEnd(b.start.row,b.start.column);});if(this.range.compareEnd(fold.start.row,fold.start.column)>0){this.end.row=fold.end.row;this.end.column=fold.end.column;}else if(this.range.compareStart(fold.end.row,fold.end.column)<0){this.start.row=fold.start.row;this.start.column=fold.start.column;}}else if(fold.start.row==this.end.row){this.folds.push(fold);this.end.row=fold.end.row;this.end.column=fold.end.column;}else if(fold.end.row==this.start.row){this.folds.unshift(fold);this.start.row=fold.start.row;this.start.column=fold.start.column;}else{throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");}fold.foldLine=this;};this.containsRow=function(row){return row>=this.start.row&&row<=this.end.row;};this.walk=function(callback,endRow,endColumn){var lastEnd=0,folds=this.folds,fold,cmp,stop,isNewRow=true;if(endRow==null){endRow=this.end.row;endColumn=this.end.column;}for(var i=0;i<folds.length;i++){fold=folds[i];cmp=fold.range.compareStart(endRow,endColumn);if(cmp==-1){callback(null,endRow,endColumn,lastEnd,isNewRow);return;}stop=callback(null,fold.start.row,fold.start.column,lastEnd,isNewRow);stop=!stop&&callback(fold.placeholder,fold.start.row,fold.start.column,lastEnd);if(stop||cmp===0){return;}isNewRow=!fold.sameRow;lastEnd=fold.end.column;}callback(null,endRow,endColumn,lastEnd,isNewRow);};this.getNextFoldTo=function(row,column){var fold,cmp;for(var i=0;i<this.folds.length;i++){fold=this.folds[i];cmp=fold.range.compareEnd(row,column);if(cmp==-1){return{fold:fold,kind:\"after\"};}else if(cmp===0){return{fold:fold,kind:\"inside\"};}}return null;};this.addRemoveChars=function(row,column,len){var ret=this.getNextFoldTo(row,column),fold,folds;if(ret){fold=ret.fold;if(ret.kind==\"inside\"&&fold.start.column!=column&&fold.start.row!=row){window.console&&window.console.log(row,column,fold);}else if(fold.start.row==row){folds=this.folds;var i=folds.indexOf(fold);if(i===0){this.start.column+=len;}for(i;i<folds.length;i++){fold=folds[i];fold.start.column+=len;if(!fold.sameRow){return;}fold.end.column+=len;}this.end.column+=len;}}};this.split=function(row,column){var pos=this.getNextFoldTo(row,column);if(!pos||pos.kind==\"inside\")return null;var fold=pos.fold;var folds=this.folds;var foldData=this.foldData;var i=folds.indexOf(fold);var foldBefore=folds[i-1];this.end.row=foldBefore.end.row;this.end.column=foldBefore.end.column;folds=folds.splice(i,folds.length-i);var newFoldLine=new FoldLine(foldData,folds);foldData.splice(foldData.indexOf(this)+1,0,newFoldLine);return newFoldLine;};this.merge=function(foldLineNext){var folds=foldLineNext.folds;for(var i=0;i<folds.length;i++){this.addFold(folds[i]);}var foldData=this.foldData;foldData.splice(foldData.indexOf(foldLineNext),1);};this.toString=function(){var ret=[this.range.toString()+\": [\"];this.folds.forEach(function(fold){ret.push(\" \"+fold.toString());});ret.push(\"]\");return ret.join(\"\\n\");};this.idxToPosition=function(idx){var lastFoldEndColumn=0;for(var i=0;i<this.folds.length;i++){var fold=this.folds[i];idx-=fold.start.column-lastFoldEndColumn;if(idx<0){return{row:fold.start.row,column:fold.start.column+idx};}idx-=fold.placeholder.length;if(idx<0){return fold.start;}lastFoldEndColumn=fold.end.column;}return{row:this.end.row,column:this.end.column+idx};};}).call(FoldLine.prototype);exports.FoldLine=FoldLine;});ace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(acequire,exports,module){\"use strict\";var Range=acequire(\"./range\").Range;var comparePoints=Range.comparePoints;var RangeList=function(){this.ranges=[];};(function(){this.comparePoints=comparePoints;this.pointIndex=function(pos,excludeEdges,startIndex){var list=this.ranges;for(var i=startIndex||0;i<list.length;i++){var range=list[i];var cmpEnd=comparePoints(pos,range.end);if(cmpEnd>0)continue;var cmpStart=comparePoints(pos,range.start);if(cmpEnd===0)return excludeEdges&&cmpStart!==0?-i-2:i;if(cmpStart>0||cmpStart===0&&!excludeEdges)return i;return-i-1;}return-i-1;};this.add=function(range){var excludeEdges=!range.isEmpty();var startIndex=this.pointIndex(range.start,excludeEdges);if(startIndex<0)startIndex=-startIndex-1;var endIndex=this.pointIndex(range.end,excludeEdges,startIndex);if(endIndex<0)endIndex=-endIndex-1;else endIndex++;return this.ranges.splice(startIndex,endIndex-startIndex,range);};this.addList=function(list){var removed=[];for(var i=list.length;i--;){removed.push.apply(removed,this.add(list[i]));}return removed;};this.substractPoint=function(pos){var i=this.pointIndex(pos);if(i>=0)return this.ranges.splice(i,1);};this.merge=function(){var removed=[];var list=this.ranges;list=list.sort(function(a,b){return comparePoints(a.start,b.start);});var next=list[0],range;for(var i=1;i<list.length;i++){range=next;next=list[i];var cmp=comparePoints(range.end,next.start);if(cmp<0)continue;if(cmp==0&&!range.isEmpty()&&!next.isEmpty())continue;if(comparePoints(range.end,next.end)<0){range.end.row=next.end.row;range.end.column=next.end.column;}list.splice(i,1);removed.push(next);next=range;i--;}this.ranges=list;return removed;};this.contains=function(row,column){return this.pointIndex({row:row,column:column})>=0;};this.containsPoint=function(pos){return this.pointIndex(pos)>=0;};this.rangeAtPoint=function(pos){var i=this.pointIndex(pos);if(i>=0)return this.ranges[i];};this.clipRows=function(startRow,endRow){var list=this.ranges;if(list[0].start.row>endRow||list[list.length-1].start.row<startRow)return[];var startIndex=this.pointIndex({row:startRow,column:0});if(startIndex<0)startIndex=-startIndex-1;var endIndex=this.pointIndex({row:endRow,column:0},startIndex);if(endIndex<0)endIndex=-endIndex-1;var clipped=[];for(var i=startIndex;i<endIndex;i++){clipped.push(list[i]);}return clipped;};this.removeAll=function(){return this.ranges.splice(0,this.ranges.length);};this.attach=function(session){if(this.session)this.detach();this.session=session;this.onChange=this.$onChange.bind(this);this.session.on('change',this.onChange);};this.detach=function(){if(!this.session)return;this.session.removeListener('change',this.onChange);this.session=null;};this.$onChange=function(delta){if(delta.action==\"insert\"){var start=delta.start;var end=delta.end;}else{var end=delta.start;var start=delta.end;}var startRow=start.row;var endRow=end.row;var lineDif=endRow-startRow;var colDiff=-start.column+end.column;var ranges=this.ranges;for(var i=0,n=ranges.length;i<n;i++){var r=ranges[i];if(r.end.row<startRow)continue;if(r.start.row>startRow)break;if(r.start.row==startRow&&r.start.column>=start.column){if(r.start.column==start.column&&this.$insertRight){}else{r.start.column+=colDiff;r.start.row+=lineDif;}}if(r.end.row==startRow&&r.end.column>=start.column){if(r.end.column==start.column&&this.$insertRight){continue;}if(r.end.column==start.column&&colDiff>0&&i<n-1){if(r.end.column>r.start.column&&r.end.column==ranges[i+1].start.column)r.end.column-=colDiff;}r.end.column+=colDiff;r.end.row+=lineDif;}}if(lineDif!=0&&i<n){for(;i<n;i++){var r=ranges[i];r.start.row+=lineDif;r.end.row+=lineDif;}}};}).call(RangeList.prototype);exports.RangeList=RangeList;});ace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/range_list\",\"ace/lib/oop\"],function(acequire,exports,module){\"use strict\";var Range=acequire(\"../range\").Range;var RangeList=acequire(\"../range_list\").RangeList;var oop=acequire(\"../lib/oop\");var Fold=exports.Fold=function(range,placeholder){this.foldLine=null;this.placeholder=placeholder;this.range=range;this.start=range.start;this.end=range.end;this.sameRow=range.start.row==range.end.row;this.subFolds=this.ranges=[];};oop.inherits(Fold,RangeList);(function(){this.toString=function(){return'\"'+this.placeholder+'\" '+this.range.toString();};this.setFoldLine=function(foldLine){this.foldLine=foldLine;this.subFolds.forEach(function(fold){fold.setFoldLine(foldLine);});};this.clone=function(){var range=this.range.clone();var fold=new Fold(range,this.placeholder);this.subFolds.forEach(function(subFold){fold.subFolds.push(subFold.clone());});fold.collapseChildren=this.collapseChildren;return fold;};this.addSubFold=function(fold){if(this.range.isEqual(fold))return;if(!this.range.containsRange(fold))throw new Error(\"A fold can't intersect already existing fold\"+fold.range+this.range);consumeRange(fold,this.start);var row=fold.start.row,column=fold.start.column;for(var i=0,cmp=-1;i<this.subFolds.length;i++){cmp=this.subFolds[i].range.compare(row,column);if(cmp!=1)break;}var afterStart=this.subFolds[i];if(cmp==0)return afterStart.addSubFold(fold);var row=fold.range.end.row,column=fold.range.end.column;for(var j=i,cmp=-1;j<this.subFolds.length;j++){cmp=this.subFolds[j].range.compare(row,column);if(cmp!=1)break;}var afterEnd=this.subFolds[j];if(cmp==0)throw new Error(\"A fold can't intersect already existing fold\"+fold.range+this.range);var consumedFolds=this.subFolds.splice(i,j-i,fold);fold.setFoldLine(this.foldLine);return fold;};this.restoreRange=function(range){return restoreRange(range,this.start);};}).call(Fold.prototype);function consumePoint(point,anchor){point.row-=anchor.row;if(point.row==0)point.column-=anchor.column;}function consumeRange(range,anchor){consumePoint(range.start,anchor);consumePoint(range.end,anchor);}function restorePoint(point,anchor){if(point.row==0)point.column+=anchor.column;point.row+=anchor.row;}function restoreRange(range,anchor){restorePoint(range.start,anchor);restorePoint(range.end,anchor);}});ace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\"],function(acequire,exports,module){\"use strict\";var Range=acequire(\"../range\").Range;var FoldLine=acequire(\"./fold_line\").FoldLine;var Fold=acequire(\"./fold\").Fold;var TokenIterator=acequire(\"../token_iterator\").TokenIterator;function Folding(){this.getFoldAt=function(row,column,side){var foldLine=this.getFoldLine(row);if(!foldLine)return null;var folds=foldLine.folds;for(var i=0;i<folds.length;i++){var fold=folds[i];if(fold.range.contains(row,column)){if(side==1&&fold.range.isEnd(row,column)){continue;}else if(side==-1&&fold.range.isStart(row,column)){continue;}return fold;}}};this.getFoldsInRange=function(range){var start=range.start;var end=range.end;var foldLines=this.$foldData;var foundFolds=[];start.column+=1;end.column-=1;for(var i=0;i<foldLines.length;i++){var cmp=foldLines[i].range.compareRange(range);if(cmp==2){continue;}else if(cmp==-2){break;}var folds=foldLines[i].folds;for(var j=0;j<folds.length;j++){var fold=folds[j];cmp=fold.range.compareRange(range);if(cmp==-2){break;}else if(cmp==2){continue;}else if(cmp==42){break;}foundFolds.push(fold);}}start.column-=1;end.column+=1;return foundFolds;};this.getFoldsInRangeList=function(ranges){if(Array.isArray(ranges)){var folds=[];ranges.forEach(function(range){folds=folds.concat(this.getFoldsInRange(range));},this);}else{var folds=this.getFoldsInRange(ranges);}return folds;};this.getAllFolds=function(){var folds=[];var foldLines=this.$foldData;for(var i=0;i<foldLines.length;i++)for(var j=0;j<foldLines[i].folds.length;j++)folds.push(foldLines[i].folds[j]);return folds;};this.getFoldStringAt=function(row,column,trim,foldLine){foldLine=foldLine||this.getFoldLine(row);if(!foldLine)return null;var lastFold={end:{column:0}};var str,fold;for(var i=0;i<foldLine.folds.length;i++){fold=foldLine.folds[i];var cmp=fold.range.compareEnd(row,column);if(cmp==-1){str=this.getLine(fold.start.row).substring(lastFold.end.column,fold.start.column);break;}else if(cmp===0){return null;}lastFold=fold;}if(!str)str=this.getLine(fold.start.row).substring(lastFold.end.column);if(trim==-1)return str.substring(0,column-lastFold.end.column);else if(trim==1)return str.substring(column-lastFold.end.column);else return str;};this.getFoldLine=function(docRow,startFoldLine){var foldData=this.$foldData;var i=0;if(startFoldLine)i=foldData.indexOf(startFoldLine);if(i==-1)i=0;for(i;i<foldData.length;i++){var foldLine=foldData[i];if(foldLine.start.row<=docRow&&foldLine.end.row>=docRow){return foldLine;}else if(foldLine.end.row>docRow){return null;}}return null;};this.getNextFoldLine=function(docRow,startFoldLine){var foldData=this.$foldData;var i=0;if(startFoldLine)i=foldData.indexOf(startFoldLine);if(i==-1)i=0;for(i;i<foldData.length;i++){var foldLine=foldData[i];if(foldLine.end.row>=docRow){return foldLine;}}return null;};this.getFoldedRowCount=function(first,last){var foldData=this.$foldData,rowCount=last-first+1;for(var i=0;i<foldData.length;i++){var foldLine=foldData[i],end=foldLine.end.row,start=foldLine.start.row;if(end>=last){if(start<last){if(start>=first)rowCount-=last-start;else rowCount=0;// in one fold\n}break;}else if(end>=first){if(start>=first)// fold inside range\nrowCount-=end-start;else rowCount-=end-first+1;}}return rowCount;};this.$addFoldLine=function(foldLine){this.$foldData.push(foldLine);this.$foldData.sort(function(a,b){return a.start.row-b.start.row;});return foldLine;};this.addFold=function(placeholder,range){var foldData=this.$foldData;var added=false;var fold;if(placeholder instanceof Fold)fold=placeholder;else{fold=new Fold(range,placeholder);fold.collapseChildren=range.collapseChildren;}this.$clipRangeToDocument(fold.range);var startRow=fold.start.row;var startColumn=fold.start.column;var endRow=fold.end.row;var endColumn=fold.end.column;if(!(startRow<endRow||startRow==endRow&&startColumn<=endColumn-2))throw new Error(\"The range has to be at least 2 characters width\");var startFold=this.getFoldAt(startRow,startColumn,1);var endFold=this.getFoldAt(endRow,endColumn,-1);if(startFold&&endFold==startFold)return startFold.addSubFold(fold);if(startFold&&!startFold.range.isStart(startRow,startColumn))this.removeFold(startFold);if(endFold&&!endFold.range.isEnd(endRow,endColumn))this.removeFold(endFold);var folds=this.getFoldsInRange(fold.range);if(folds.length>0){this.removeFolds(folds);folds.forEach(function(subFold){fold.addSubFold(subFold);});}for(var i=0;i<foldData.length;i++){var foldLine=foldData[i];if(endRow==foldLine.start.row){foldLine.addFold(fold);added=true;break;}else if(startRow==foldLine.end.row){foldLine.addFold(fold);added=true;if(!fold.sameRow){var foldLineNext=foldData[i+1];if(foldLineNext&&foldLineNext.start.row==endRow){foldLine.merge(foldLineNext);break;}}break;}else if(endRow<=foldLine.start.row){break;}}if(!added)foldLine=this.$addFoldLine(new FoldLine(this.$foldData,fold));if(this.$useWrapMode)this.$updateWrapData(foldLine.start.row,foldLine.start.row);else this.$updateRowLengthCache(foldLine.start.row,foldLine.start.row);this.$modified=true;this._signal(\"changeFold\",{data:fold,action:\"add\"});return fold;};this.addFolds=function(folds){folds.forEach(function(fold){this.addFold(fold);},this);};this.removeFold=function(fold){var foldLine=fold.foldLine;var startRow=foldLine.start.row;var endRow=foldLine.end.row;var foldLines=this.$foldData;var folds=foldLine.folds;if(folds.length==1){foldLines.splice(foldLines.indexOf(foldLine),1);}else if(foldLine.range.isEnd(fold.end.row,fold.end.column)){folds.pop();foldLine.end.row=folds[folds.length-1].end.row;foldLine.end.column=folds[folds.length-1].end.column;}else if(foldLine.range.isStart(fold.start.row,fold.start.column)){folds.shift();foldLine.start.row=folds[0].start.row;foldLine.start.column=folds[0].start.column;}else if(fold.sameRow){folds.splice(folds.indexOf(fold),1);}else{var newFoldLine=foldLine.split(fold.start.row,fold.start.column);folds=newFoldLine.folds;folds.shift();newFoldLine.start.row=folds[0].start.row;newFoldLine.start.column=folds[0].start.column;}if(!this.$updating){if(this.$useWrapMode)this.$updateWrapData(startRow,endRow);else this.$updateRowLengthCache(startRow,endRow);}this.$modified=true;this._signal(\"changeFold\",{data:fold,action:\"remove\"});};this.removeFolds=function(folds){var cloneFolds=[];for(var i=0;i<folds.length;i++){cloneFolds.push(folds[i]);}cloneFolds.forEach(function(fold){this.removeFold(fold);},this);this.$modified=true;};this.expandFold=function(fold){this.removeFold(fold);fold.subFolds.forEach(function(subFold){fold.restoreRange(subFold);this.addFold(subFold);},this);if(fold.collapseChildren>0){this.foldAll(fold.start.row+1,fold.end.row,fold.collapseChildren-1);}fold.subFolds=[];};this.expandFolds=function(folds){folds.forEach(function(fold){this.expandFold(fold);},this);};this.unfold=function(location,expandInner){var range,folds;if(location==null){range=new Range(0,0,this.getLength(),0);expandInner=true;}else if(typeof location==\"number\")range=new Range(location,0,location,this.getLine(location).length);else if(\"row\"in location)range=Range.fromPoints(location,location);else range=location;folds=this.getFoldsInRangeList(range);if(expandInner){this.removeFolds(folds);}else{var subFolds=folds;while(subFolds.length){this.expandFolds(subFolds);subFolds=this.getFoldsInRangeList(range);}}if(folds.length)return folds;};this.isRowFolded=function(docRow,startFoldRow){return!!this.getFoldLine(docRow,startFoldRow);};this.getRowFoldEnd=function(docRow,startFoldRow){var foldLine=this.getFoldLine(docRow,startFoldRow);return foldLine?foldLine.end.row:docRow;};this.getRowFoldStart=function(docRow,startFoldRow){var foldLine=this.getFoldLine(docRow,startFoldRow);return foldLine?foldLine.start.row:docRow;};this.getFoldDisplayLine=function(foldLine,endRow,endColumn,startRow,startColumn){if(startRow==null)startRow=foldLine.start.row;if(startColumn==null)startColumn=0;if(endRow==null)endRow=foldLine.end.row;if(endColumn==null)endColumn=this.getLine(endRow).length;var doc=this.doc;var textLine=\"\";foldLine.walk(function(placeholder,row,column,lastColumn){if(row<startRow)return;if(row==startRow){if(column<startColumn)return;lastColumn=Math.max(startColumn,lastColumn);}if(placeholder!=null){textLine+=placeholder;}else{textLine+=doc.getLine(row).substring(lastColumn,column);}},endRow,endColumn);return textLine;};this.getDisplayLine=function(row,endColumn,startRow,startColumn){var foldLine=this.getFoldLine(row);if(!foldLine){var line;line=this.doc.getLine(row);return line.substring(startColumn||0,endColumn||line.length);}else{return this.getFoldDisplayLine(foldLine,row,endColumn,startRow,startColumn);}};this.$cloneFoldData=function(){var fd=[];fd=this.$foldData.map(function(foldLine){var folds=foldLine.folds.map(function(fold){return fold.clone();});return new FoldLine(fd,folds);});return fd;};this.toggleFold=function(tryToUnfold){var selection=this.selection;var range=selection.getRange();var fold;var bracketPos;if(range.isEmpty()){var cursor=range.start;fold=this.getFoldAt(cursor.row,cursor.column);if(fold){this.expandFold(fold);return;}else if(bracketPos=this.findMatchingBracket(cursor)){if(range.comparePoint(bracketPos)==1){range.end=bracketPos;}else{range.start=bracketPos;range.start.column++;range.end.column--;}}else if(bracketPos=this.findMatchingBracket({row:cursor.row,column:cursor.column+1})){if(range.comparePoint(bracketPos)==1)range.end=bracketPos;else range.start=bracketPos;range.start.column++;}else{range=this.getCommentFoldRange(cursor.row,cursor.column)||range;}}else{var folds=this.getFoldsInRange(range);if(tryToUnfold&&folds.length){this.expandFolds(folds);return;}else if(folds.length==1){fold=folds[0];}}if(!fold)fold=this.getFoldAt(range.start.row,range.start.column);if(fold&&fold.range.toString()==range.toString()){this.expandFold(fold);return;}var placeholder=\"...\";if(!range.isMultiLine()){placeholder=this.getTextRange(range);if(placeholder.length<4)return;placeholder=placeholder.trim().substring(0,2)+\"..\";}this.addFold(placeholder,range);};this.getCommentFoldRange=function(row,column,dir){var iterator=new TokenIterator(this,row,column);var token=iterator.getCurrentToken();if(token&&/^comment|string/.test(token.type)){var range=new Range();var re=new RegExp(token.type.replace(/\\..*/,\"\\\\.\"));if(dir!=1){do{token=iterator.stepBackward();}while(token&&re.test(token.type));iterator.stepForward();}range.start.row=iterator.getCurrentTokenRow();range.start.column=iterator.getCurrentTokenColumn()+2;iterator=new TokenIterator(this,row,column);if(dir!=-1){do{token=iterator.stepForward();}while(token&&re.test(token.type));token=iterator.stepBackward();}else token=iterator.getCurrentToken();range.end.row=iterator.getCurrentTokenRow();range.end.column=iterator.getCurrentTokenColumn()+token.value.length-2;return range;}};this.foldAll=function(startRow,endRow,depth){if(depth==undefined)depth=100000;// JSON.stringify doesn't hanle Infinity\nvar foldWidgets=this.foldWidgets;if(!foldWidgets)return;// mode doesn't support folding\nendRow=endRow||this.getLength();startRow=startRow||0;for(var row=startRow;row<endRow;row++){if(foldWidgets[row]==null)foldWidgets[row]=this.getFoldWidget(row);if(foldWidgets[row]!=\"start\")continue;var range=this.getFoldWidgetRange(row);if(range&&range.isMultiLine()&&range.end.row<=endRow&&range.start.row>=startRow){row=range.end.row;try{var fold=this.addFold(\"...\",range);if(fold)fold.collapseChildren=depth;}catch(e){}}}};this.$foldStyles={\"manual\":1,\"markbegin\":1,\"markbeginend\":1};this.$foldStyle=\"markbegin\";this.setFoldStyle=function(style){if(!this.$foldStyles[style])throw new Error(\"invalid fold style: \"+style+\"[\"+Object.keys(this.$foldStyles).join(\", \")+\"]\");if(this.$foldStyle==style)return;this.$foldStyle=style;if(style==\"manual\")this.unfold();var mode=this.$foldMode;this.$setFolding(null);this.$setFolding(mode);};this.$setFolding=function(foldMode){if(this.$foldMode==foldMode)return;this.$foldMode=foldMode;this.off('change',this.$updateFoldWidgets);this.off('tokenizerUpdate',this.$tokenizerUpdateFoldWidgets);this._signal(\"changeAnnotation\");if(!foldMode||this.$foldStyle==\"manual\"){this.foldWidgets=null;return;}this.foldWidgets=[];this.getFoldWidget=foldMode.getFoldWidget.bind(foldMode,this,this.$foldStyle);this.getFoldWidgetRange=foldMode.getFoldWidgetRange.bind(foldMode,this,this.$foldStyle);this.$updateFoldWidgets=this.updateFoldWidgets.bind(this);this.$tokenizerUpdateFoldWidgets=this.tokenizerUpdateFoldWidgets.bind(this);this.on('change',this.$updateFoldWidgets);this.on('tokenizerUpdate',this.$tokenizerUpdateFoldWidgets);};this.getParentFoldRangeData=function(row,ignoreCurrent){var fw=this.foldWidgets;if(!fw||ignoreCurrent&&fw[row])return{};var i=row-1,firstRange;while(i>=0){var c=fw[i];if(c==null)c=fw[i]=this.getFoldWidget(i);if(c==\"start\"){var range=this.getFoldWidgetRange(i);if(!firstRange)firstRange=range;if(range&&range.end.row>=row)break;}i--;}return{range:i!==-1&&range,firstRange:firstRange};};this.onFoldWidgetClick=function(row,e){e=e.domEvent;var options={children:e.shiftKey,all:e.ctrlKey||e.metaKey,siblings:e.altKey};var range=this.$toggleFoldWidget(row,options);if(!range){var el=e.target||e.srcElement;if(el&&/ace_fold-widget/.test(el.className))el.className+=\" ace_invalid\";}};this.$toggleFoldWidget=function(row,options){if(!this.getFoldWidget)return;var type=this.getFoldWidget(row);var line=this.getLine(row);var dir=type===\"end\"?-1:1;var fold=this.getFoldAt(row,dir===-1?0:line.length,dir);if(fold){if(options.children||options.all)this.removeFold(fold);else this.expandFold(fold);return;}var range=this.getFoldWidgetRange(row,true);if(range&&!range.isMultiLine()){fold=this.getFoldAt(range.start.row,range.start.column,1);if(fold&&range.isEqual(fold.range)){this.removeFold(fold);return;}}if(options.siblings){var data=this.getParentFoldRangeData(row);if(data.range){var startRow=data.range.start.row+1;var endRow=data.range.end.row;}this.foldAll(startRow,endRow,options.all?10000:0);}else if(options.children){endRow=range?range.end.row:this.getLength();this.foldAll(row+1,endRow,options.all?10000:0);}else if(range){if(options.all)range.collapseChildren=10000;this.addFold(\"...\",range);}return range;};this.toggleFoldWidget=function(toggleParent){var row=this.selection.getCursor().row;row=this.getRowFoldStart(row);var range=this.$toggleFoldWidget(row,{});if(range)return;var data=this.getParentFoldRangeData(row,true);range=data.range||data.firstRange;if(range){row=range.start.row;var fold=this.getFoldAt(row,this.getLine(row).length,1);if(fold){this.removeFold(fold);}else{this.addFold(\"...\",range);}}};this.updateFoldWidgets=function(delta){var firstRow=delta.start.row;var len=delta.end.row-firstRow;if(len===0){this.foldWidgets[firstRow]=null;}else if(delta.action=='remove'){this.foldWidgets.splice(firstRow,len+1,null);}else{var args=Array(len+1);args.unshift(firstRow,1);this.foldWidgets.splice.apply(this.foldWidgets,args);}};this.tokenizerUpdateFoldWidgets=function(e){var rows=e.data;if(rows.first!=rows.last){if(this.foldWidgets.length>rows.first)this.foldWidgets.splice(rows.first,this.foldWidgets.length);}};}exports.Folding=Folding;});ace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"],function(acequire,exports,module){\"use strict\";var TokenIterator=acequire(\"../token_iterator\").TokenIterator;var Range=acequire(\"../range\").Range;function BracketMatch(){this.findMatchingBracket=function(position,chr){if(position.column==0)return null;var charBeforeCursor=chr||this.getLine(position.row).charAt(position.column-1);if(charBeforeCursor==\"\")return null;var match=charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);if(!match)return null;if(match[1])return this.$findClosingBracket(match[1],position);else return this.$findOpeningBracket(match[2],position);};this.getBracketRange=function(pos){var line=this.getLine(pos.row);var before=true,range;var chr=line.charAt(pos.column-1);var match=chr&&chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);if(!match){chr=line.charAt(pos.column);pos={row:pos.row,column:pos.column+1};match=chr&&chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);before=false;}if(!match)return null;if(match[1]){var bracketPos=this.$findClosingBracket(match[1],pos);if(!bracketPos)return null;range=Range.fromPoints(pos,bracketPos);if(!before){range.end.column++;range.start.column--;}range.cursor=range.end;}else{var bracketPos=this.$findOpeningBracket(match[2],pos);if(!bracketPos)return null;range=Range.fromPoints(bracketPos,pos);if(!before){range.start.column++;range.end.column--;}range.cursor=range.start;}return range;};this.$brackets={\")\":\"(\",\"(\":\")\",\"]\":\"[\",\"[\":\"]\",\"{\":\"}\",\"}\":\"{\"};this.$findOpeningBracket=function(bracket,position,typeRe){var openBracket=this.$brackets[bracket];var depth=1;var iterator=new TokenIterator(this,position.row,position.column);var token=iterator.getCurrentToken();if(!token)token=iterator.stepForward();if(!token)return;if(!typeRe){typeRe=new RegExp(\"(\\\\.?\"+token.type.replace(\".\",\"\\\\.\").replace(\"rparen\",\".paren\").replace(/\\b(?:end)\\b/,\"(?:start|begin|end)\")+\")+\");}var valueIndex=position.column-iterator.getCurrentTokenColumn()-2;var value=token.value;while(true){while(valueIndex>=0){var chr=value.charAt(valueIndex);if(chr==openBracket){depth-=1;if(depth==0){return{row:iterator.getCurrentTokenRow(),column:valueIndex+iterator.getCurrentTokenColumn()};}}else if(chr==bracket){depth+=1;}valueIndex-=1;}do{token=iterator.stepBackward();}while(token&&!typeRe.test(token.type));if(token==null)break;value=token.value;valueIndex=value.length-1;}return null;};this.$findClosingBracket=function(bracket,position,typeRe){var closingBracket=this.$brackets[bracket];var depth=1;var iterator=new TokenIterator(this,position.row,position.column);var token=iterator.getCurrentToken();if(!token)token=iterator.stepForward();if(!token)return;if(!typeRe){typeRe=new RegExp(\"(\\\\.?\"+token.type.replace(\".\",\"\\\\.\").replace(\"lparen\",\".paren\").replace(/\\b(?:start|begin)\\b/,\"(?:start|begin|end)\")+\")+\");}var valueIndex=position.column-iterator.getCurrentTokenColumn();while(true){var value=token.value;var valueLength=value.length;while(valueIndex<valueLength){var chr=value.charAt(valueIndex);if(chr==closingBracket){depth-=1;if(depth==0){return{row:iterator.getCurrentTokenRow(),column:valueIndex+iterator.getCurrentTokenColumn()};}}else if(chr==bracket){depth+=1;}valueIndex+=1;}do{token=iterator.stepForward();}while(token&&!typeRe.test(token.type));if(token==null)break;valueIndex=0;}return null;};}exports.BracketMatch=BracketMatch;});ace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"],function(acequire,exports,module){\"use strict\";var oop=acequire(\"./lib/oop\");var lang=acequire(\"./lib/lang\");var config=acequire(\"./config\");var EventEmitter=acequire(\"./lib/event_emitter\").EventEmitter;var Selection=acequire(\"./selection\").Selection;var TextMode=acequire(\"./mode/text\").Mode;var Range=acequire(\"./range\").Range;var Document=acequire(\"./document\").Document;var BackgroundTokenizer=acequire(\"./background_tokenizer\").BackgroundTokenizer;var SearchHighlight=acequire(\"./search_highlight\").SearchHighlight;var EditSession=function(text,mode){this.$breakpoints=[];this.$decorations=[];this.$frontMarkers={};this.$backMarkers={};this.$markerId=1;this.$undoSelect=true;this.$foldData=[];this.$foldData.toString=function(){return this.join(\"\\n\");};this.on(\"changeFold\",this.onChangeFold.bind(this));this.$onChange=this.onChange.bind(this);if(typeof text!=\"object\"||!text.getLine)text=new Document(text);this.setDocument(text);this.selection=new Selection(this);config.resetOptions(this);this.setMode(mode);config._signal(\"session\",this);};(function(){oop.implement(this,EventEmitter);this.setDocument=function(doc){if(this.doc)this.doc.removeListener(\"change\",this.$onChange);this.doc=doc;doc.on(\"change\",this.$onChange);if(this.bgTokenizer)this.bgTokenizer.setDocument(this.getDocument());this.resetCaches();};this.getDocument=function(){return this.doc;};this.$resetRowCache=function(docRow){if(!docRow){this.$docRowCache=[];this.$screenRowCache=[];return;}var l=this.$docRowCache.length;var i=this.$getRowCacheIndex(this.$docRowCache,docRow)+1;if(l>i){this.$docRowCache.splice(i,l);this.$screenRowCache.splice(i,l);}};this.$getRowCacheIndex=function(cacheArray,val){var low=0;var hi=cacheArray.length-1;while(low<=hi){var mid=low+hi>>1;var c=cacheArray[mid];if(val>c)low=mid+1;else if(val<c)hi=mid-1;else return mid;}return low-1;};this.resetCaches=function(){this.$modified=true;this.$wrapData=[];this.$rowLengthCache=[];this.$resetRowCache(0);if(this.bgTokenizer)this.bgTokenizer.start(0);};this.onChangeFold=function(e){var fold=e.data;this.$resetRowCache(fold.start.row);};this.onChange=function(delta){this.$modified=true;this.$resetRowCache(delta.start.row);var removedFolds=this.$updateInternalDataOnChange(delta);if(!this.$fromUndo&&this.$undoManager&&!delta.ignore){this.$deltasDoc.push(delta);if(removedFolds&&removedFolds.length!=0){this.$deltasFold.push({action:\"removeFolds\",folds:removedFolds});}this.$informUndoManager.schedule();}this.bgTokenizer&&this.bgTokenizer.$updateOnChange(delta);this._signal(\"change\",delta);};this.setValue=function(text){this.doc.setValue(text);this.selection.moveTo(0,0);this.$resetRowCache(0);this.$deltas=[];this.$deltasDoc=[];this.$deltasFold=[];this.setUndoManager(this.$undoManager);this.getUndoManager().reset();};this.getValue=this.toString=function(){return this.doc.getValue();};this.getSelection=function(){return this.selection;};this.getState=function(row){return this.bgTokenizer.getState(row);};this.getTokens=function(row){return this.bgTokenizer.getTokens(row);};this.getTokenAt=function(row,column){var tokens=this.bgTokenizer.getTokens(row);var token,c=0;if(column==null){i=tokens.length-1;c=this.getLine(row).length;}else{for(var i=0;i<tokens.length;i++){c+=tokens[i].value.length;if(c>=column)break;}}token=tokens[i];if(!token)return null;token.index=i;token.start=c-token.value.length;return token;};this.setUndoManager=function(undoManager){this.$undoManager=undoManager;this.$deltas=[];this.$deltasDoc=[];this.$deltasFold=[];if(this.$informUndoManager)this.$informUndoManager.cancel();if(undoManager){var self=this;this.$syncInformUndoManager=function(){self.$informUndoManager.cancel();if(self.$deltasFold.length){self.$deltas.push({group:\"fold\",deltas:self.$deltasFold});self.$deltasFold=[];}if(self.$deltasDoc.length){self.$deltas.push({group:\"doc\",deltas:self.$deltasDoc});self.$deltasDoc=[];}if(self.$deltas.length>0){undoManager.execute({action:\"aceupdate\",args:[self.$deltas,self],merge:self.mergeUndoDeltas});}self.mergeUndoDeltas=false;self.$deltas=[];};this.$informUndoManager=lang.delayedCall(this.$syncInformUndoManager);}};this.markUndoGroup=function(){if(this.$syncInformUndoManager)this.$syncInformUndoManager();};this.$defaultUndoManager={undo:function(){},redo:function(){},reset:function(){}};this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager;};this.getTabString=function(){if(this.getUseSoftTabs()){return lang.stringRepeat(\" \",this.getTabSize());}else{return\"\\t\";}};this.setUseSoftTabs=function(val){this.setOption(\"useSoftTabs\",val);};this.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs;};this.setTabSize=function(tabSize){this.setOption(\"tabSize\",tabSize);};this.getTabSize=function(){return this.$tabSize;};this.isTabStop=function(position){return this.$useSoftTabs&&position.column%this.$tabSize===0;};this.$overwrite=false;this.setOverwrite=function(overwrite){this.setOption(\"overwrite\",overwrite);};this.getOverwrite=function(){return this.$overwrite;};this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite);};this.addGutterDecoration=function(row,className){if(!this.$decorations[row])this.$decorations[row]=\"\";this.$decorations[row]+=\" \"+className;this._signal(\"changeBreakpoint\",{});};this.removeGutterDecoration=function(row,className){this.$decorations[row]=(this.$decorations[row]||\"\").replace(\" \"+className,\"\");this._signal(\"changeBreakpoint\",{});};this.getBreakpoints=function(){return this.$breakpoints;};this.setBreakpoints=function(rows){this.$breakpoints=[];for(var i=0;i<rows.length;i++){this.$breakpoints[rows[i]]=\"ace_breakpoint\";}this._signal(\"changeBreakpoint\",{});};this.clearBreakpoints=function(){this.$breakpoints=[];this._signal(\"changeBreakpoint\",{});};this.setBreakpoint=function(row,className){if(className===undefined)className=\"ace_breakpoint\";if(className)this.$breakpoints[row]=className;else delete this.$breakpoints[row];this._signal(\"changeBreakpoint\",{});};this.clearBreakpoint=function(row){delete this.$breakpoints[row];this._signal(\"changeBreakpoint\",{});};this.addMarker=function(range,clazz,type,inFront){var id=this.$markerId++;var marker={range:range,type:type||\"line\",renderer:typeof type==\"function\"?type:null,clazz:clazz,inFront:!!inFront,id:id};if(inFront){this.$frontMarkers[id]=marker;this._signal(\"changeFrontMarker\");}else{this.$backMarkers[id]=marker;this._signal(\"changeBackMarker\");}return id;};this.addDynamicMarker=function(marker,inFront){if(!marker.update)return;var id=this.$markerId++;marker.id=id;marker.inFront=!!inFront;if(inFront){this.$frontMarkers[id]=marker;this._signal(\"changeFrontMarker\");}else{this.$backMarkers[id]=marker;this._signal(\"changeBackMarker\");}return marker;};this.removeMarker=function(markerId){var marker=this.$frontMarkers[markerId]||this.$backMarkers[markerId];if(!marker)return;var markers=marker.inFront?this.$frontMarkers:this.$backMarkers;if(marker){delete markers[markerId];this._signal(marker.inFront?\"changeFrontMarker\":\"changeBackMarker\");}};this.getMarkers=function(inFront){return inFront?this.$frontMarkers:this.$backMarkers;};this.highlight=function(re){if(!this.$searchHighlight){var highlight=new SearchHighlight(null,\"ace_selected-word\",\"text\");this.$searchHighlight=this.addDynamicMarker(highlight);}this.$searchHighlight.setRegexp(re);};this.highlightLines=function(startRow,endRow,clazz,inFront){if(typeof endRow!=\"number\"){clazz=endRow;endRow=startRow;}if(!clazz)clazz=\"ace_step\";var range=new Range(startRow,0,endRow,Infinity);range.id=this.addMarker(range,clazz,\"fullLine\",inFront);return range;};this.setAnnotations=function(annotations){this.$annotations=annotations;this._signal(\"changeAnnotation\",{});};this.getAnnotations=function(){return this.$annotations||[];};this.clearAnnotations=function(){this.setAnnotations([]);};this.$detectNewLine=function(text){var match=text.match(/^.*?(\\r?\\n)/m);if(match){this.$autoNewLine=match[1];}else{this.$autoNewLine=\"\\n\";}};this.getWordRange=function(row,column){var line=this.getLine(row);var inToken=false;if(column>0)inToken=!!line.charAt(column-1).match(this.tokenRe);if(!inToken)inToken=!!line.charAt(column).match(this.tokenRe);if(inToken)var re=this.tokenRe;else if(/^\\s+$/.test(line.slice(column-1,column+1)))var re=/\\s/;else var re=this.nonTokenRe;var start=column;if(start>0){do{start--;}while(start>=0&&line.charAt(start).match(re));start++;}var end=column;while(end<line.length&&line.charAt(end).match(re)){end++;}return new Range(row,start,row,end);};this.getAWordRange=function(row,column){var wordRange=this.getWordRange(row,column);var line=this.getLine(wordRange.end.row);while(line.charAt(wordRange.end.column).match(/[ \\t]/)){wordRange.end.column+=1;}return wordRange;};this.setNewLineMode=function(newLineMode){this.doc.setNewLineMode(newLineMode);};this.getNewLineMode=function(){return this.doc.getNewLineMode();};this.setUseWorker=function(useWorker){this.setOption(\"useWorker\",useWorker);};this.getUseWorker=function(){return this.$useWorker;};this.onReloadTokenizer=function(e){var rows=e.data;this.bgTokenizer.start(rows.first);this._signal(\"tokenizerUpdate\",e);};this.$modes={};this.$mode=null;this.$modeId=null;this.setMode=function(mode,cb){if(mode&&typeof mode===\"object\"){if(mode.getTokenizer)return this.$onChangeMode(mode);var options=mode;var path=options.path;}else{path=mode||\"ace/mode/text\";}if(!this.$modes[\"ace/mode/text\"])this.$modes[\"ace/mode/text\"]=new TextMode();if(this.$modes[path]&&!options){this.$onChangeMode(this.$modes[path]);cb&&cb();return;}this.$modeId=path;config.loadModule([\"mode\",path],function(m){if(this.$modeId!==path)return cb&&cb();if(this.$modes[path]&&!options){this.$onChangeMode(this.$modes[path]);}else if(m&&m.Mode){m=new m.Mode(options);if(!options){this.$modes[path]=m;m.$id=path;}this.$onChangeMode(m);}cb&&cb();}.bind(this));if(!this.$mode)this.$onChangeMode(this.$modes[\"ace/mode/text\"],true);};this.$onChangeMode=function(mode,$isPlaceholder){if(!$isPlaceholder)this.$modeId=mode.$id;if(this.$mode===mode)return;this.$mode=mode;this.$stopWorker();if(this.$useWorker)this.$startWorker();var tokenizer=mode.getTokenizer();if(tokenizer.addEventListener!==undefined){var onReloadTokenizer=this.onReloadTokenizer.bind(this);tokenizer.addEventListener(\"update\",onReloadTokenizer);}if(!this.bgTokenizer){this.bgTokenizer=new BackgroundTokenizer(tokenizer);var _self=this;this.bgTokenizer.addEventListener(\"update\",function(e){_self._signal(\"tokenizerUpdate\",e);});}else{this.bgTokenizer.setTokenizer(tokenizer);}this.bgTokenizer.setDocument(this.getDocument());this.tokenRe=mode.tokenRe;this.nonTokenRe=mode.nonTokenRe;if(!$isPlaceholder){if(mode.attachToSession)mode.attachToSession(this);this.$options.wrapMethod.set.call(this,this.$wrapMethod);this.$setFolding(mode.foldingRules);this.bgTokenizer.start(0);this._emit(\"changeMode\");}};this.$stopWorker=function(){if(this.$worker){this.$worker.terminate();this.$worker=null;}};this.$startWorker=function(){try{this.$worker=this.$mode.createWorker(this);}catch(e){config.warn(\"Could not load worker\",e);this.$worker=null;}};this.getMode=function(){return this.$mode;};this.$scrollTop=0;this.setScrollTop=function(scrollTop){if(this.$scrollTop===scrollTop||isNaN(scrollTop))return;this.$scrollTop=scrollTop;this._signal(\"changeScrollTop\",scrollTop);};this.getScrollTop=function(){return this.$scrollTop;};this.$scrollLeft=0;this.setScrollLeft=function(scrollLeft){if(this.$scrollLeft===scrollLeft||isNaN(scrollLeft))return;this.$scrollLeft=scrollLeft;this._signal(\"changeScrollLeft\",scrollLeft);};this.getScrollLeft=function(){return this.$scrollLeft;};this.getScreenWidth=function(){this.$computeWidth();if(this.lineWidgets)return Math.max(this.getLineWidgetMaxWidth(),this.screenWidth);return this.screenWidth;};this.getLineWidgetMaxWidth=function(){if(this.lineWidgetsWidth!=null)return this.lineWidgetsWidth;var width=0;this.lineWidgets.forEach(function(w){if(w&&w.screenWidth>width)width=w.screenWidth;});return this.lineWidgetWidth=width;};this.$computeWidth=function(force){if(this.$modified||force){this.$modified=false;if(this.$useWrapMode)return this.screenWidth=this.$wrapLimit;var lines=this.doc.getAllLines();var cache=this.$rowLengthCache;var longestScreenLine=0;var foldIndex=0;var foldLine=this.$foldData[foldIndex];var foldStart=foldLine?foldLine.start.row:Infinity;var len=lines.length;for(var i=0;i<len;i++){if(i>foldStart){i=foldLine.end.row+1;if(i>=len)break;foldLine=this.$foldData[foldIndex++];foldStart=foldLine?foldLine.start.row:Infinity;}if(cache[i]==null)cache[i]=this.$getStringScreenWidth(lines[i])[0];if(cache[i]>longestScreenLine)longestScreenLine=cache[i];}this.screenWidth=longestScreenLine;}};this.getLine=function(row){return this.doc.getLine(row);};this.getLines=function(firstRow,lastRow){return this.doc.getLines(firstRow,lastRow);};this.getLength=function(){return this.doc.getLength();};this.getTextRange=function(range){return this.doc.getTextRange(range||this.selection.getRange());};this.insert=function(position,text){return this.doc.insert(position,text);};this.remove=function(range){return this.doc.remove(range);};this.removeFullLines=function(firstRow,lastRow){return this.doc.removeFullLines(firstRow,lastRow);};this.undoChanges=function(deltas,dontSelect){if(!deltas.length)return;this.$fromUndo=true;var lastUndoRange=null;for(var i=deltas.length-1;i!=-1;i--){var delta=deltas[i];if(delta.group==\"doc\"){this.doc.revertDeltas(delta.deltas);lastUndoRange=this.$getUndoSelection(delta.deltas,true,lastUndoRange);}else{delta.deltas.forEach(function(foldDelta){this.addFolds(foldDelta.folds);},this);}}this.$fromUndo=false;lastUndoRange&&this.$undoSelect&&!dontSelect&&this.selection.setSelectionRange(lastUndoRange);return lastUndoRange;};this.redoChanges=function(deltas,dontSelect){if(!deltas.length)return;this.$fromUndo=true;var lastUndoRange=null;for(var i=0;i<deltas.length;i++){var delta=deltas[i];if(delta.group==\"doc\"){this.doc.applyDeltas(delta.deltas);lastUndoRange=this.$getUndoSelection(delta.deltas,false,lastUndoRange);}}this.$fromUndo=false;lastUndoRange&&this.$undoSelect&&!dontSelect&&this.selection.setSelectionRange(lastUndoRange);return lastUndoRange;};this.setUndoSelect=function(enable){this.$undoSelect=enable;};this.$getUndoSelection=function(deltas,isUndo,lastUndoRange){function isInsert(delta){return isUndo?delta.action!==\"insert\":delta.action===\"insert\";}var delta=deltas[0];var range,point;var lastDeltaIsInsert=false;if(isInsert(delta)){range=Range.fromPoints(delta.start,delta.end);lastDeltaIsInsert=true;}else{range=Range.fromPoints(delta.start,delta.start);lastDeltaIsInsert=false;}for(var i=1;i<deltas.length;i++){delta=deltas[i];if(isInsert(delta)){point=delta.start;if(range.compare(point.row,point.column)==-1){range.setStart(point);}point=delta.end;if(range.compare(point.row,point.column)==1){range.setEnd(point);}lastDeltaIsInsert=true;}else{point=delta.start;if(range.compare(point.row,point.column)==-1){range=Range.fromPoints(delta.start,delta.start);}lastDeltaIsInsert=false;}}if(lastUndoRange!=null){if(Range.comparePoints(lastUndoRange.start,range.start)===0){lastUndoRange.start.column+=range.end.column-range.start.column;lastUndoRange.end.column+=range.end.column-range.start.column;}var cmp=lastUndoRange.compareRange(range);if(cmp==1){range.setStart(lastUndoRange.start);}else if(cmp==-1){range.setEnd(lastUndoRange.end);}}return range;};this.replace=function(range,text){return this.doc.replace(range,text);};this.moveText=function(fromRange,toPosition,copy){var text=this.getTextRange(fromRange);var folds=this.getFoldsInRange(fromRange);var toRange=Range.fromPoints(toPosition,toPosition);if(!copy){this.remove(fromRange);var rowDiff=fromRange.start.row-fromRange.end.row;var collDiff=rowDiff?-fromRange.end.column:fromRange.start.column-fromRange.end.column;if(collDiff){if(toRange.start.row==fromRange.end.row&&toRange.start.column>fromRange.end.column)toRange.start.column+=collDiff;if(toRange.end.row==fromRange.end.row&&toRange.end.column>fromRange.end.column)toRange.end.column+=collDiff;}if(rowDiff&&toRange.start.row>=fromRange.end.row){toRange.start.row+=rowDiff;toRange.end.row+=rowDiff;}}toRange.end=this.insert(toRange.start,text);if(folds.length){var oldStart=fromRange.start;var newStart=toRange.start;var rowDiff=newStart.row-oldStart.row;var collDiff=newStart.column-oldStart.column;this.addFolds(folds.map(function(x){x=x.clone();if(x.start.row==oldStart.row)x.start.column+=collDiff;if(x.end.row==oldStart.row)x.end.column+=collDiff;x.start.row+=rowDiff;x.end.row+=rowDiff;return x;}));}return toRange;};this.indentRows=function(startRow,endRow,indentString){indentString=indentString.replace(/\\t/g,this.getTabString());for(var row=startRow;row<=endRow;row++)this.doc.insertInLine({row:row,column:0},indentString);};this.outdentRows=function(range){var rowRange=range.collapseRows();var deleteRange=new Range(0,0,0,0);var size=this.getTabSize();for(var i=rowRange.start.row;i<=rowRange.end.row;++i){var line=this.getLine(i);deleteRange.start.row=i;deleteRange.end.row=i;for(var j=0;j<size;++j)if(line.charAt(j)!=' ')break;if(j<size&&line.charAt(j)=='\\t'){deleteRange.start.column=j;deleteRange.end.column=j+1;}else{deleteRange.start.column=0;deleteRange.end.column=j;}this.remove(deleteRange);}};this.$moveLines=function(firstRow,lastRow,dir){firstRow=this.getRowFoldStart(firstRow);lastRow=this.getRowFoldEnd(lastRow);if(dir<0){var row=this.getRowFoldStart(firstRow+dir);if(row<0)return 0;var diff=row-firstRow;}else if(dir>0){var row=this.getRowFoldEnd(lastRow+dir);if(row>this.doc.getLength()-1)return 0;var diff=row-lastRow;}else{firstRow=this.$clipRowToDocument(firstRow);lastRow=this.$clipRowToDocument(lastRow);var diff=lastRow-firstRow+1;}var range=new Range(firstRow,0,lastRow,Number.MAX_VALUE);var folds=this.getFoldsInRange(range).map(function(x){x=x.clone();x.start.row+=diff;x.end.row+=diff;return x;});var lines=dir==0?this.doc.getLines(firstRow,lastRow):this.doc.removeFullLines(firstRow,lastRow);this.doc.insertFullLines(firstRow+diff,lines);folds.length&&this.addFolds(folds);return diff;};this.moveLinesUp=function(firstRow,lastRow){return this.$moveLines(firstRow,lastRow,-1);};this.moveLinesDown=function(firstRow,lastRow){return this.$moveLines(firstRow,lastRow,1);};this.duplicateLines=function(firstRow,lastRow){return this.$moveLines(firstRow,lastRow,0);};this.$clipRowToDocument=function(row){return Math.max(0,Math.min(row,this.doc.getLength()-1));};this.$clipColumnToRow=function(row,column){if(column<0)return 0;return Math.min(this.doc.getLine(row).length,column);};this.$clipPositionToDocument=function(row,column){column=Math.max(0,column);if(row<0){row=0;column=0;}else{var len=this.doc.getLength();if(row>=len){row=len-1;column=this.doc.getLine(len-1).length;}else{column=Math.min(this.doc.getLine(row).length,column);}}return{row:row,column:column};};this.$clipRangeToDocument=function(range){if(range.start.row<0){range.start.row=0;range.start.column=0;}else{range.start.column=this.$clipColumnToRow(range.start.row,range.start.column);}var len=this.doc.getLength()-1;if(range.end.row>len){range.end.row=len;range.end.column=this.doc.getLine(len).length;}else{range.end.column=this.$clipColumnToRow(range.end.row,range.end.column);}return range;};this.$wrapLimit=80;this.$useWrapMode=false;this.$wrapLimitRange={min:null,max:null};this.setUseWrapMode=function(useWrapMode){if(useWrapMode!=this.$useWrapMode){this.$useWrapMode=useWrapMode;this.$modified=true;this.$resetRowCache(0);if(useWrapMode){var len=this.getLength();this.$wrapData=Array(len);this.$updateWrapData(0,len-1);}this._signal(\"changeWrapMode\");}};this.getUseWrapMode=function(){return this.$useWrapMode;};this.setWrapLimitRange=function(min,max){if(this.$wrapLimitRange.min!==min||this.$wrapLimitRange.max!==max){this.$wrapLimitRange={min:min,max:max};this.$modified=true;if(this.$useWrapMode)this._signal(\"changeWrapMode\");}};this.adjustWrapLimit=function(desiredLimit,$printMargin){var limits=this.$wrapLimitRange;if(limits.max<0)limits={min:$printMargin,max:$printMargin};var wrapLimit=this.$constrainWrapLimit(desiredLimit,limits.min,limits.max);if(wrapLimit!=this.$wrapLimit&&wrapLimit>1){this.$wrapLimit=wrapLimit;this.$modified=true;if(this.$useWrapMode){this.$updateWrapData(0,this.getLength()-1);this.$resetRowCache(0);this._signal(\"changeWrapLimit\");}return true;}return false;};this.$constrainWrapLimit=function(wrapLimit,min,max){if(min)wrapLimit=Math.max(min,wrapLimit);if(max)wrapLimit=Math.min(max,wrapLimit);return wrapLimit;};this.getWrapLimit=function(){return this.$wrapLimit;};this.setWrapLimit=function(limit){this.setWrapLimitRange(limit,limit);};this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max};};this.$updateInternalDataOnChange=function(delta){var useWrapMode=this.$useWrapMode;var action=delta.action;var start=delta.start;var end=delta.end;var firstRow=start.row;var lastRow=end.row;var len=lastRow-firstRow;var removedFolds=null;this.$updating=true;if(len!=0){if(action===\"remove\"){this[useWrapMode?\"$wrapData\":\"$rowLengthCache\"].splice(firstRow,len);var foldLines=this.$foldData;removedFolds=this.getFoldsInRange(delta);this.removeFolds(removedFolds);var foldLine=this.getFoldLine(end.row);var idx=0;if(foldLine){foldLine.addRemoveChars(end.row,end.column,start.column-end.column);foldLine.shiftRow(-len);var foldLineBefore=this.getFoldLine(firstRow);if(foldLineBefore&&foldLineBefore!==foldLine){foldLineBefore.merge(foldLine);foldLine=foldLineBefore;}idx=foldLines.indexOf(foldLine)+1;}for(idx;idx<foldLines.length;idx++){var foldLine=foldLines[idx];if(foldLine.start.row>=end.row){foldLine.shiftRow(-len);}}lastRow=firstRow;}else{var args=Array(len);args.unshift(firstRow,0);var arr=useWrapMode?this.$wrapData:this.$rowLengthCache;arr.splice.apply(arr,args);var foldLines=this.$foldData;var foldLine=this.getFoldLine(firstRow);var idx=0;if(foldLine){var cmp=foldLine.range.compareInside(start.row,start.column);if(cmp==0){foldLine=foldLine.split(start.row,start.column);if(foldLine){foldLine.shiftRow(len);foldLine.addRemoveChars(lastRow,0,end.column-start.column);}}else if(cmp==-1){foldLine.addRemoveChars(firstRow,0,end.column-start.column);foldLine.shiftRow(len);}idx=foldLines.indexOf(foldLine)+1;}for(idx;idx<foldLines.length;idx++){var foldLine=foldLines[idx];if(foldLine.start.row>=firstRow){foldLine.shiftRow(len);}}}}else{len=Math.abs(delta.start.column-delta.end.column);if(action===\"remove\"){removedFolds=this.getFoldsInRange(delta);this.removeFolds(removedFolds);len=-len;}var foldLine=this.getFoldLine(firstRow);if(foldLine){foldLine.addRemoveChars(firstRow,start.column,len);}}if(useWrapMode&&this.$wrapData.length!=this.doc.getLength()){console.error(\"doc.getLength() and $wrapData.length have to be the same!\");}this.$updating=false;if(useWrapMode)this.$updateWrapData(firstRow,lastRow);else this.$updateRowLengthCache(firstRow,lastRow);return removedFolds;};this.$updateRowLengthCache=function(firstRow,lastRow,b){this.$rowLengthCache[firstRow]=null;this.$rowLengthCache[lastRow]=null;};this.$updateWrapData=function(firstRow,lastRow){var lines=this.doc.getAllLines();var tabSize=this.getTabSize();var wrapData=this.$wrapData;var wrapLimit=this.$wrapLimit;var tokens;var foldLine;var row=firstRow;lastRow=Math.min(lastRow,lines.length-1);while(row<=lastRow){foldLine=this.getFoldLine(row,foldLine);if(!foldLine){tokens=this.$getDisplayTokens(lines[row]);wrapData[row]=this.$computeWrapSplits(tokens,wrapLimit,tabSize);row++;}else{tokens=[];foldLine.walk(function(placeholder,row,column,lastColumn){var walkTokens;if(placeholder!=null){walkTokens=this.$getDisplayTokens(placeholder,tokens.length);walkTokens[0]=PLACEHOLDER_START;for(var i=1;i<walkTokens.length;i++){walkTokens[i]=PLACEHOLDER_BODY;}}else{walkTokens=this.$getDisplayTokens(lines[row].substring(lastColumn,column),tokens.length);}tokens=tokens.concat(walkTokens);}.bind(this),foldLine.end.row,lines[foldLine.end.row].length+1);wrapData[foldLine.start.row]=this.$computeWrapSplits(tokens,wrapLimit,tabSize);row=foldLine.end.row+1;}}};var CHAR=1,CHAR_EXT=2,PLACEHOLDER_START=3,PLACEHOLDER_BODY=4,PUNCTUATION=9,SPACE=10,TAB=11,TAB_SPACE=12;this.$computeWrapSplits=function(tokens,wrapLimit,tabSize){if(tokens.length==0){return[];}var splits=[];var displayLength=tokens.length;var lastSplit=0,lastDocSplit=0;var isCode=this.$wrapAsCode;var indentedSoftWrap=this.$indentedSoftWrap;var maxIndent=wrapLimit<=Math.max(2*tabSize,8)||indentedSoftWrap===false?0:Math.floor(wrapLimit/2);function getWrapIndent(){var indentation=0;if(maxIndent===0)return indentation;if(indentedSoftWrap){for(var i=0;i<tokens.length;i++){var token=tokens[i];if(token==SPACE)indentation+=1;else if(token==TAB)indentation+=tabSize;else if(token==TAB_SPACE)continue;else break;}}if(isCode&&indentedSoftWrap!==false)indentation+=tabSize;return Math.min(indentation,maxIndent);}function addSplit(screenPos){var displayed=tokens.slice(lastSplit,screenPos);var len=displayed.length;displayed.join(\"\").replace(/12/g,function(){len-=1;}).replace(/2/g,function(){len-=1;});if(!splits.length){indent=getWrapIndent();splits.indent=indent;}lastDocSplit+=len;splits.push(lastDocSplit);lastSplit=screenPos;}var indent=0;while(displayLength-lastSplit>wrapLimit-indent){var split=lastSplit+wrapLimit-indent;if(tokens[split-1]>=SPACE&&tokens[split]>=SPACE){addSplit(split);continue;}if(tokens[split]==PLACEHOLDER_START||tokens[split]==PLACEHOLDER_BODY){for(split;split!=lastSplit-1;split--){if(tokens[split]==PLACEHOLDER_START){break;}}if(split>lastSplit){addSplit(split);continue;}split=lastSplit+wrapLimit;for(split;split<tokens.length;split++){if(tokens[split]!=PLACEHOLDER_BODY){break;}}if(split==tokens.length){break;// Breaks the while-loop.\n}addSplit(split);continue;}var minSplit=Math.max(split-(wrapLimit-(wrapLimit>>2)),lastSplit-1);while(split>minSplit&&tokens[split]<PLACEHOLDER_START){split--;}if(isCode){while(split>minSplit&&tokens[split]<PLACEHOLDER_START){split--;}while(split>minSplit&&tokens[split]==PUNCTUATION){split--;}}else{while(split>minSplit&&tokens[split]<SPACE){split--;}}if(split>minSplit){addSplit(++split);continue;}split=lastSplit+wrapLimit;if(tokens[split]==CHAR_EXT)split--;addSplit(split-indent);}return splits;};this.$getDisplayTokens=function(str,offset){var arr=[];var tabSize;offset=offset||0;for(var i=0;i<str.length;i++){var c=str.charCodeAt(i);if(c==9){tabSize=this.getScreenTabSize(arr.length+offset);arr.push(TAB);for(var n=1;n<tabSize;n++){arr.push(TAB_SPACE);}}else if(c==32){arr.push(SPACE);}else if(c>39&&c<48||c>57&&c<64){arr.push(PUNCTUATION);}else if(c>=0x1100&&isFullWidth(c)){arr.push(CHAR,CHAR_EXT);}else{arr.push(CHAR);}}return arr;};this.$getStringScreenWidth=function(str,maxScreenColumn,screenColumn){if(maxScreenColumn==0)return[0,0];if(maxScreenColumn==null)maxScreenColumn=Infinity;screenColumn=screenColumn||0;var c,column;for(column=0;column<str.length;column++){c=str.charCodeAt(column);if(c==9){screenColumn+=this.getScreenTabSize(screenColumn);}else if(c>=0x1100&&isFullWidth(c)){screenColumn+=2;}else{screenColumn+=1;}if(screenColumn>maxScreenColumn){break;}}return[screenColumn,column];};this.lineWidgets=null;this.getRowLength=function(row){if(this.lineWidgets)var h=this.lineWidgets[row]&&this.lineWidgets[row].rowCount||0;else h=0;if(!this.$useWrapMode||!this.$wrapData[row]){return 1+h;}else{return this.$wrapData[row].length+1+h;}};this.getRowLineCount=function(row){if(!this.$useWrapMode||!this.$wrapData[row]){return 1;}else{return this.$wrapData[row].length+1;}};this.getRowWrapIndent=function(screenRow){if(this.$useWrapMode){var pos=this.screenToDocumentPosition(screenRow,Number.MAX_VALUE);var splits=this.$wrapData[pos.row];return splits.length&&splits[0]<pos.column?splits.indent:0;}else{return 0;}};this.getScreenLastRowColumn=function(screenRow){var pos=this.screenToDocumentPosition(screenRow,Number.MAX_VALUE);return this.documentToScreenColumn(pos.row,pos.column);};this.getDocumentLastRowColumn=function(docRow,docColumn){var screenRow=this.documentToScreenRow(docRow,docColumn);return this.getScreenLastRowColumn(screenRow);};this.getDocumentLastRowColumnPosition=function(docRow,docColumn){var screenRow=this.documentToScreenRow(docRow,docColumn);return this.screenToDocumentPosition(screenRow,Number.MAX_VALUE/10);};this.getRowSplitData=function(row){if(!this.$useWrapMode){return undefined;}else{return this.$wrapData[row];}};this.getScreenTabSize=function(screenColumn){return this.$tabSize-screenColumn%this.$tabSize;};this.screenToDocumentRow=function(screenRow,screenColumn){return this.screenToDocumentPosition(screenRow,screenColumn).row;};this.screenToDocumentColumn=function(screenRow,screenColumn){return this.screenToDocumentPosition(screenRow,screenColumn).column;};this.screenToDocumentPosition=function(screenRow,screenColumn){if(screenRow<0)return{row:0,column:0};var line;var docRow=0;var docColumn=0;var column;var row=0;var rowLength=0;var rowCache=this.$screenRowCache;var i=this.$getRowCacheIndex(rowCache,screenRow);var l=rowCache.length;if(l&&i>=0){var row=rowCache[i];var docRow=this.$docRowCache[i];var doCache=screenRow>rowCache[l-1];}else{var doCache=!l;}var maxRow=this.getLength()-1;var foldLine=this.getNextFoldLine(docRow);var foldStart=foldLine?foldLine.start.row:Infinity;while(row<=screenRow){rowLength=this.getRowLength(docRow);if(row+rowLength>screenRow||docRow>=maxRow){break;}else{row+=rowLength;docRow++;if(docRow>foldStart){docRow=foldLine.end.row+1;foldLine=this.getNextFoldLine(docRow,foldLine);foldStart=foldLine?foldLine.start.row:Infinity;}}if(doCache){this.$docRowCache.push(docRow);this.$screenRowCache.push(row);}}if(foldLine&&foldLine.start.row<=docRow){line=this.getFoldDisplayLine(foldLine);docRow=foldLine.start.row;}else if(row+rowLength<=screenRow||docRow>maxRow){return{row:maxRow,column:this.getLine(maxRow).length};}else{line=this.getLine(docRow);foldLine=null;}var wrapIndent=0;if(this.$useWrapMode){var splits=this.$wrapData[docRow];if(splits){var splitIndex=Math.floor(screenRow-row);column=splits[splitIndex];if(splitIndex>0&&splits.length){wrapIndent=splits.indent;docColumn=splits[splitIndex-1]||splits[splits.length-1];line=line.substring(docColumn);}}}docColumn+=this.$getStringScreenWidth(line,screenColumn-wrapIndent)[1];if(this.$useWrapMode&&docColumn>=column)docColumn=column-1;if(foldLine)return foldLine.idxToPosition(docColumn);return{row:docRow,column:docColumn};};this.documentToScreenPosition=function(docRow,docColumn){if(typeof docColumn===\"undefined\")var pos=this.$clipPositionToDocument(docRow.row,docRow.column);else pos=this.$clipPositionToDocument(docRow,docColumn);docRow=pos.row;docColumn=pos.column;var screenRow=0;var foldStartRow=null;var fold=null;fold=this.getFoldAt(docRow,docColumn,1);if(fold){docRow=fold.start.row;docColumn=fold.start.column;}var rowEnd,row=0;var rowCache=this.$docRowCache;var i=this.$getRowCacheIndex(rowCache,docRow);var l=rowCache.length;if(l&&i>=0){var row=rowCache[i];var screenRow=this.$screenRowCache[i];var doCache=docRow>rowCache[l-1];}else{var doCache=!l;}var foldLine=this.getNextFoldLine(row);var foldStart=foldLine?foldLine.start.row:Infinity;while(row<docRow){if(row>=foldStart){rowEnd=foldLine.end.row+1;if(rowEnd>docRow)break;foldLine=this.getNextFoldLine(rowEnd,foldLine);foldStart=foldLine?foldLine.start.row:Infinity;}else{rowEnd=row+1;}screenRow+=this.getRowLength(row);row=rowEnd;if(doCache){this.$docRowCache.push(row);this.$screenRowCache.push(screenRow);}}var textLine=\"\";if(foldLine&&row>=foldStart){textLine=this.getFoldDisplayLine(foldLine,docRow,docColumn);foldStartRow=foldLine.start.row;}else{textLine=this.getLine(docRow).substring(0,docColumn);foldStartRow=docRow;}var wrapIndent=0;if(this.$useWrapMode){var wrapRow=this.$wrapData[foldStartRow];if(wrapRow){var screenRowOffset=0;while(textLine.length>=wrapRow[screenRowOffset]){screenRow++;screenRowOffset++;}textLine=textLine.substring(wrapRow[screenRowOffset-1]||0,textLine.length);wrapIndent=screenRowOffset>0?wrapRow.indent:0;}}return{row:screenRow,column:wrapIndent+this.$getStringScreenWidth(textLine)[0]};};this.documentToScreenColumn=function(row,docColumn){return this.documentToScreenPosition(row,docColumn).column;};this.documentToScreenRow=function(docRow,docColumn){return this.documentToScreenPosition(docRow,docColumn).row;};this.getScreenLength=function(){var screenRows=0;var fold=null;if(!this.$useWrapMode){screenRows=this.getLength();var foldData=this.$foldData;for(var i=0;i<foldData.length;i++){fold=foldData[i];screenRows-=fold.end.row-fold.start.row;}}else{var lastRow=this.$wrapData.length;var row=0,i=0;var fold=this.$foldData[i++];var foldStart=fold?fold.start.row:Infinity;while(row<lastRow){var splits=this.$wrapData[row];screenRows+=splits?splits.length+1:1;row++;if(row>foldStart){row=fold.end.row+1;fold=this.$foldData[i++];foldStart=fold?fold.start.row:Infinity;}}}if(this.lineWidgets)screenRows+=this.$getWidgetScreenLength();return screenRows;};this.$setFontMetrics=function(fm){if(!this.$enableVarChar)return;this.$getStringScreenWidth=function(str,maxScreenColumn,screenColumn){if(maxScreenColumn===0)return[0,0];if(!maxScreenColumn)maxScreenColumn=Infinity;screenColumn=screenColumn||0;var c,column;for(column=0;column<str.length;column++){c=str.charAt(column);if(c===\"\\t\"){screenColumn+=this.getScreenTabSize(screenColumn);}else{screenColumn+=fm.getCharacterWidth(c);}if(screenColumn>maxScreenColumn){break;}}return[screenColumn,column];};};this.destroy=function(){if(this.bgTokenizer){this.bgTokenizer.setDocument(null);this.bgTokenizer=null;}this.$stopWorker();};function isFullWidth(c){if(c<0x1100)return false;return c>=0x1100&&c<=0x115F||c>=0x11A3&&c<=0x11A7||c>=0x11FA&&c<=0x11FF||c>=0x2329&&c<=0x232A||c>=0x2E80&&c<=0x2E99||c>=0x2E9B&&c<=0x2EF3||c>=0x2F00&&c<=0x2FD5||c>=0x2FF0&&c<=0x2FFB||c>=0x3000&&c<=0x303E||c>=0x3041&&c<=0x3096||c>=0x3099&&c<=0x30FF||c>=0x3105&&c<=0x312D||c>=0x3131&&c<=0x318E||c>=0x3190&&c<=0x31BA||c>=0x31C0&&c<=0x31E3||c>=0x31F0&&c<=0x321E||c>=0x3220&&c<=0x3247||c>=0x3250&&c<=0x32FE||c>=0x3300&&c<=0x4DBF||c>=0x4E00&&c<=0xA48C||c>=0xA490&&c<=0xA4C6||c>=0xA960&&c<=0xA97C||c>=0xAC00&&c<=0xD7A3||c>=0xD7B0&&c<=0xD7C6||c>=0xD7CB&&c<=0xD7FB||c>=0xF900&&c<=0xFAFF||c>=0xFE10&&c<=0xFE19||c>=0xFE30&&c<=0xFE52||c>=0xFE54&&c<=0xFE66||c>=0xFE68&&c<=0xFE6B||c>=0xFF01&&c<=0xFF60||c>=0xFFE0&&c<=0xFFE6;}}).call(EditSession.prototype);acequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);acequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);config.defineOptions(EditSession.prototype,\"session\",{wrap:{set:function(value){if(!value||value==\"off\")value=false;else if(value==\"free\")value=true;else if(value==\"printMargin\")value=-1;else if(typeof value==\"string\")value=parseInt(value,10)||false;if(this.$wrap==value)return;this.$wrap=value;if(!value){this.setUseWrapMode(false);}else{var col=typeof value==\"number\"?value:null;this.setWrapLimitRange(col,col);this.setUseWrapMode(true);}},get:function(){if(this.getUseWrapMode()){if(this.$wrap==-1)return\"printMargin\";if(!this.getWrapLimitRange().min)return\"free\";return this.$wrap;}return\"off\";},handlesSet:true},wrapMethod:{set:function(val){val=val==\"auto\"?this.$mode.type!=\"text\":val!=\"text\";if(val!=this.$wrapAsCode){this.$wrapAsCode=val;if(this.$useWrapMode){this.$modified=true;this.$resetRowCache(0);this.$updateWrapData(0,this.getLength()-1);}}},initialValue:\"auto\"},indentedSoftWrap:{initialValue:true},firstLineNumber:{set:function(){this._signal(\"changeBreakpoint\");},initialValue:1},useWorker:{set:function(useWorker){this.$useWorker=useWorker;this.$stopWorker();if(useWorker)this.$startWorker();},initialValue:true},useSoftTabs:{initialValue:true},tabSize:{set:function(tabSize){if(isNaN(tabSize)||this.$tabSize===tabSize)return;this.$modified=true;this.$rowLengthCache=[];this.$tabSize=tabSize;this._signal(\"changeTabSize\");},initialValue:4,handlesSet:true},overwrite:{set:function(val){this._signal(\"changeOverwrite\");},initialValue:false},newLineMode:{set:function(val){this.doc.setNewLineMode(val);},get:function(){return this.doc.getNewLineMode();},handlesSet:true},mode:{set:function(val){this.setMode(val);},get:function(){return this.$modeId;}}});exports.EditSession=EditSession;});ace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"],function(acequire,exports,module){\"use strict\";var lang=acequire(\"./lib/lang\");var oop=acequire(\"./lib/oop\");var Range=acequire(\"./range\").Range;var Search=function(){this.$options={};};(function(){this.set=function(options){oop.mixin(this.$options,options);return this;};this.getOptions=function(){return lang.copyObject(this.$options);};this.setOptions=function(options){this.$options=options;};this.find=function(session){var options=this.$options;var iterator=this.$matchIterator(session,options);if(!iterator)return false;var firstRange=null;iterator.forEach(function(range,row,offset){if(!range.start){var column=range.offset+(offset||0);firstRange=new Range(row,column,row,column+range.length);if(!range.length&&options.start&&options.start.start&&options.skipCurrent!=false&&firstRange.isEqual(options.start)){firstRange=null;return false;}}else firstRange=range;return true;});return firstRange;};this.findAll=function(session){var options=this.$options;if(!options.needle)return[];this.$assembleRegExp(options);var range=options.range;var lines=range?session.getLines(range.start.row,range.end.row):session.doc.getAllLines();var ranges=[];var re=options.re;if(options.$isMultiLine){var len=re.length;var maxRow=lines.length-len;var prevRange;outer:for(var row=re.offset||0;row<=maxRow;row++){for(var j=0;j<len;j++)if(lines[row+j].search(re[j])==-1)continue outer;var startLine=lines[row];var line=lines[row+len-1];var startIndex=startLine.length-startLine.match(re[0])[0].length;var endIndex=line.match(re[len-1])[0].length;if(prevRange&&prevRange.end.row===row&&prevRange.end.column>startIndex){continue;}ranges.push(prevRange=new Range(row,startIndex,row+len-1,endIndex));if(len>2)row=row+len-2;}}else{for(var i=0;i<lines.length;i++){var matches=lang.getMatchOffsets(lines[i],re);for(var j=0;j<matches.length;j++){var match=matches[j];ranges.push(new Range(i,match.offset,i,match.offset+match.length));}}}if(range){var startColumn=range.start.column;var endColumn=range.start.column;var i=0,j=ranges.length-1;while(i<j&&ranges[i].start.column<startColumn&&ranges[i].start.row==range.start.row)i++;while(i<j&&ranges[j].end.column>endColumn&&ranges[j].end.row==range.end.row)j--;ranges=ranges.slice(i,j+1);for(i=0,j=ranges.length;i<j;i++){ranges[i].start.row+=range.start.row;ranges[i].end.row+=range.start.row;}}return ranges;};this.replace=function(input,replacement){var options=this.$options;var re=this.$assembleRegExp(options);if(options.$isMultiLine)return replacement;if(!re)return;var match=re.exec(input);if(!match||match[0].length!=input.length)return null;replacement=input.replace(re,replacement);if(options.preserveCase){replacement=replacement.split(\"\");for(var i=Math.min(input.length,input.length);i--;){var ch=input[i];if(ch&&ch.toLowerCase()!=ch)replacement[i]=replacement[i].toUpperCase();else replacement[i]=replacement[i].toLowerCase();}replacement=replacement.join(\"\");}return replacement;};this.$matchIterator=function(session,options){var re=this.$assembleRegExp(options);if(!re)return false;var callback;if(options.$isMultiLine){var len=re.length;var matchIterator=function(line,row,offset){var startIndex=line.search(re[0]);if(startIndex==-1)return;for(var i=1;i<len;i++){line=session.getLine(row+i);if(line.search(re[i])==-1)return;}var endIndex=line.match(re[len-1])[0].length;var range=new Range(row,startIndex,row+len-1,endIndex);if(re.offset==1){range.start.row--;range.start.column=Number.MAX_VALUE;}else if(offset)range.start.column+=offset;if(callback(range))return true;};}else if(options.backwards){var matchIterator=function(line,row,startIndex){var matches=lang.getMatchOffsets(line,re);for(var i=matches.length-1;i>=0;i--)if(callback(matches[i],row,startIndex))return true;};}else{var matchIterator=function(line,row,startIndex){var matches=lang.getMatchOffsets(line,re);for(var i=0;i<matches.length;i++)if(callback(matches[i],row,startIndex))return true;};}var lineIterator=this.$lineIterator(session,options);return{forEach:function(_callback){callback=_callback;lineIterator.forEach(matchIterator);}};};this.$assembleRegExp=function(options,$disableFakeMultiline){if(options.needle instanceof RegExp)return options.re=options.needle;var needle=options.needle;if(!options.needle)return options.re=false;if(!options.regExp)needle=lang.escapeRegExp(needle);if(options.wholeWord)needle=\"\\\\b\"+needle+\"\\\\b\";var modifier=options.caseSensitive?\"gm\":\"gmi\";options.$isMultiLine=!$disableFakeMultiline&&/[\\n\\r]/.test(needle);if(options.$isMultiLine)return options.re=this.$assembleMultilineRegExp(needle,modifier);try{var re=new RegExp(needle,modifier);}catch(e){re=false;}return options.re=re;};this.$assembleMultilineRegExp=function(needle,modifier){var parts=needle.replace(/\\r\\n|\\r|\\n/g,\"$\\n^\").split(\"\\n\");var re=[];for(var i=0;i<parts.length;i++)try{re.push(new RegExp(parts[i],modifier));}catch(e){return false;}if(parts[0]==\"\"){re.shift();re.offset=1;}else{re.offset=0;}return re;};this.$lineIterator=function(session,options){var backwards=options.backwards==true;var skipCurrent=options.skipCurrent!=false;var range=options.range;var start=options.start;if(!start)start=range?range[backwards?\"end\":\"start\"]:session.selection.getRange();if(start.start)start=start[skipCurrent!=backwards?\"end\":\"start\"];var firstRow=range?range.start.row:0;var lastRow=range?range.end.row:session.getLength()-1;var forEach=backwards?function(callback){var row=start.row;var line=session.getLine(row).substring(0,start.column);if(callback(line,row))return;for(row--;row>=firstRow;row--)if(callback(session.getLine(row),row))return;if(options.wrap==false)return;for(row=lastRow,firstRow=start.row;row>=firstRow;row--)if(callback(session.getLine(row),row))return;}:function(callback){var row=start.row;var line=session.getLine(row).substr(start.column);if(callback(line,row,start.column))return;for(row=row+1;row<=lastRow;row++)if(callback(session.getLine(row),row))return;if(options.wrap==false)return;for(row=firstRow,lastRow=start.row;row<=lastRow;row++)if(callback(session.getLine(row),row))return;};return{forEach:forEach};};}).call(Search.prototype);exports.Search=Search;});ace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"],function(acequire,exports,module){\"use strict\";var keyUtil=acequire(\"../lib/keys\");var useragent=acequire(\"../lib/useragent\");var KEY_MODS=keyUtil.KEY_MODS;function HashHandler(config,platform){this.platform=platform||(useragent.isMac?\"mac\":\"win\");this.commands={};this.commandKeyBinding={};this.addCommands(config);this.$singleCommand=true;}function MultiHashHandler(config,platform){HashHandler.call(this,config,platform);this.$singleCommand=false;}MultiHashHandler.prototype=HashHandler.prototype;(function(){this.addCommand=function(command){if(this.commands[command.name])this.removeCommand(command);this.commands[command.name]=command;if(command.bindKey)this._buildKeyHash(command);};this.removeCommand=function(command,keepCommand){var name=command&&(typeof command==='string'?command:command.name);command=this.commands[name];if(!keepCommand)delete this.commands[name];var ckb=this.commandKeyBinding;for(var keyId in ckb){var cmdGroup=ckb[keyId];if(cmdGroup==command){delete ckb[keyId];}else if(Array.isArray(cmdGroup)){var i=cmdGroup.indexOf(command);if(i!=-1){cmdGroup.splice(i,1);if(cmdGroup.length==1)ckb[keyId]=cmdGroup[0];}}}};this.bindKey=function(key,command,position){if(typeof key==\"object\"&&key){if(position==undefined)position=key.position;key=key[this.platform];}if(!key)return;if(typeof command==\"function\")return this.addCommand({exec:command,bindKey:key,name:command.name||key});key.split(\"|\").forEach(function(keyPart){var chain=\"\";if(keyPart.indexOf(\" \")!=-1){var parts=keyPart.split(/\\s+/);keyPart=parts.pop();parts.forEach(function(keyPart){var binding=this.parseKeys(keyPart);var id=KEY_MODS[binding.hashId]+binding.key;chain+=(chain?\" \":\"\")+id;this._addCommandToBinding(chain,\"chainKeys\");},this);chain+=\" \";}var binding=this.parseKeys(keyPart);var id=KEY_MODS[binding.hashId]+binding.key;this._addCommandToBinding(chain+id,command,position);},this);};function getPosition(command){return typeof command==\"object\"&&command.bindKey&&command.bindKey.position||0;}this._addCommandToBinding=function(keyId,command,position){var ckb=this.commandKeyBinding,i;if(!command){delete ckb[keyId];}else if(!ckb[keyId]||this.$singleCommand){ckb[keyId]=command;}else{if(!Array.isArray(ckb[keyId])){ckb[keyId]=[ckb[keyId]];}else if((i=ckb[keyId].indexOf(command))!=-1){ckb[keyId].splice(i,1);}if(typeof position!=\"number\"){if(position||command.isDefault)position=-100;else position=getPosition(command);}var commands=ckb[keyId];for(i=0;i<commands.length;i++){var other=commands[i];var otherPos=getPosition(other);if(otherPos>position)break;}commands.splice(i,0,command);}};this.addCommands=function(commands){commands&&Object.keys(commands).forEach(function(name){var command=commands[name];if(!command)return;if(typeof command===\"string\")return this.bindKey(command,name);if(typeof command===\"function\")command={exec:command};if(typeof command!==\"object\")return;if(!command.name)command.name=name;this.addCommand(command);},this);};this.removeCommands=function(commands){Object.keys(commands).forEach(function(name){this.removeCommand(commands[name]);},this);};this.bindKeys=function(keyList){Object.keys(keyList).forEach(function(key){this.bindKey(key,keyList[key]);},this);};this._buildKeyHash=function(command){this.bindKey(command.bindKey,command);};this.parseKeys=function(keys){var parts=keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function(x){return x;});var key=parts.pop();var keyCode=keyUtil[key];if(keyUtil.FUNCTION_KEYS[keyCode])key=keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();else if(!parts.length)return{key:key,hashId:-1};else if(parts.length==1&&parts[0]==\"shift\")return{key:key.toUpperCase(),hashId:-1};var hashId=0;for(var i=parts.length;i--;){var modifier=keyUtil.KEY_MODS[parts[i]];if(modifier==null){if(typeof console!=\"undefined\")console.error(\"invalid modifier \"+parts[i]+\" in \"+keys);return false;}hashId|=modifier;}return{key:key,hashId:hashId};};this.findKeyCommand=function findKeyCommand(hashId,keyString){var key=KEY_MODS[hashId]+keyString;return this.commandKeyBinding[key];};this.handleKeyboard=function(data,hashId,keyString,keyCode){if(keyCode<0)return;var key=KEY_MODS[hashId]+keyString;var command=this.commandKeyBinding[key];if(data.$keyChain){data.$keyChain+=\" \"+key;command=this.commandKeyBinding[data.$keyChain]||command;}if(command){if(command==\"chainKeys\"||command[command.length-1]==\"chainKeys\"){data.$keyChain=data.$keyChain||key;return{command:\"null\"};}}if(data.$keyChain){if((!hashId||hashId==4)&&keyString.length==1)data.$keyChain=data.$keyChain.slice(0,-key.length-1);// wait for input\nelse if(hashId==-1||keyCode>0)data.$keyChain=\"\";// reset keyChain\n}return{command:command};};this.getStatusText=function(editor,data){return data.$keyChain||\"\";};}).call(HashHandler.prototype);exports.HashHandler=HashHandler;exports.MultiHashHandler=MultiHashHandler;});ace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"],function(acequire,exports,module){\"use strict\";var oop=acequire(\"../lib/oop\");var MultiHashHandler=acequire(\"../keyboard/hash_handler\").MultiHashHandler;var EventEmitter=acequire(\"../lib/event_emitter\").EventEmitter;var CommandManager=function(platform,commands){MultiHashHandler.call(this,commands,platform);this.byName=this.commands;this.setDefaultHandler(\"exec\",function(e){return e.command.exec(e.editor,e.args||{});});};oop.inherits(CommandManager,MultiHashHandler);(function(){oop.implement(this,EventEmitter);this.exec=function(command,editor,args){if(Array.isArray(command)){for(var i=command.length;i--;){if(this.exec(command[i],editor,args))return true;}return false;}if(typeof command===\"string\")command=this.commands[command];if(!command)return false;if(editor&&editor.$readOnly&&!command.readOnly)return false;var e={editor:editor,command:command,args:args};e.returnValue=this._emit(\"exec\",e);this._signal(\"afterExec\",e);return e.returnValue===false?false:true;};this.toggleRecording=function(editor){if(this.$inReplay)return;editor&&editor._emit(\"changeStatus\");if(this.recording){this.macro.pop();this.removeEventListener(\"exec\",this.$addCommandToMacro);if(!this.macro.length)this.macro=this.oldMacro;return this.recording=false;}if(!this.$addCommandToMacro){this.$addCommandToMacro=function(e){this.macro.push([e.command,e.args]);}.bind(this);}this.oldMacro=this.macro;this.macro=[];this.on(\"exec\",this.$addCommandToMacro);return this.recording=true;};this.replay=function(editor){if(this.$inReplay||!this.macro)return;if(this.recording)return this.toggleRecording(editor);try{this.$inReplay=true;this.macro.forEach(function(x){if(typeof x==\"string\")this.exec(x,editor);else this.exec(x[0],editor,x[1]);},this);}finally{this.$inReplay=false;}};this.trimMacro=function(m){return m.map(function(x){if(typeof x[0]!=\"string\")x[0]=x[0].name;if(!x[1])x=x[0];return x;});};}).call(CommandManager.prototype);exports.CommandManager=CommandManager;});ace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"],function(acequire,exports,module){\"use strict\";var lang=acequire(\"../lib/lang\");var config=acequire(\"../config\");var Range=acequire(\"../range\").Range;function bindKey(win,mac){return{win:win,mac:mac};}exports.commands=[{name:\"showSettingsMenu\",bindKey:bindKey(\"Ctrl-,\",\"Command-,\"),exec:function(editor){config.loadModule(\"ace/ext/settings_menu\",function(module){module.init(editor);editor.showSettingsMenu();});},readOnly:true},{name:\"goToNextError\",bindKey:bindKey(\"Alt-E\",\"Ctrl-E\"),exec:function(editor){config.loadModule(\"ace/ext/error_marker\",function(module){module.showErrorMarker(editor,1);});},scrollIntoView:\"animate\",readOnly:true},{name:\"goToPreviousError\",bindKey:bindKey(\"Alt-Shift-E\",\"Ctrl-Shift-E\"),exec:function(editor){config.loadModule(\"ace/ext/error_marker\",function(module){module.showErrorMarker(editor,-1);});},scrollIntoView:\"animate\",readOnly:true},{name:\"selectall\",bindKey:bindKey(\"Ctrl-A\",\"Command-A\"),exec:function(editor){editor.selectAll();},readOnly:true},{name:\"centerselection\",bindKey:bindKey(null,\"Ctrl-L\"),exec:function(editor){editor.centerSelection();},readOnly:true},{name:\"gotoline\",bindKey:bindKey(\"Ctrl-L\",\"Command-L\"),exec:function(editor){var line=parseInt(prompt(\"Enter line number:\"),10);if(!isNaN(line)){editor.gotoLine(line);}},readOnly:true},{name:\"fold\",bindKey:bindKey(\"Alt-L|Ctrl-F1\",\"Command-Alt-L|Command-F1\"),exec:function(editor){editor.session.toggleFold(false);},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:true},{name:\"unfold\",bindKey:bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\",\"Command-Alt-Shift-L|Command-Shift-F1\"),exec:function(editor){editor.session.toggleFold(true);},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:true},{name:\"toggleFoldWidget\",bindKey:bindKey(\"F2\",\"F2\"),exec:function(editor){editor.session.toggleFoldWidget();},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:true},{name:\"toggleParentFoldWidget\",bindKey:bindKey(\"Alt-F2\",\"Alt-F2\"),exec:function(editor){editor.session.toggleFoldWidget(true);},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:true},{name:\"foldall\",bindKey:bindKey(null,\"Ctrl-Command-Option-0\"),exec:function(editor){editor.session.foldAll();},scrollIntoView:\"center\",readOnly:true},{name:\"foldOther\",bindKey:bindKey(\"Alt-0\",\"Command-Option-0\"),exec:function(editor){editor.session.foldAll();editor.session.unfold(editor.selection.getAllRanges());},scrollIntoView:\"center\",readOnly:true},{name:\"unfoldall\",bindKey:bindKey(\"Alt-Shift-0\",\"Command-Option-Shift-0\"),exec:function(editor){editor.session.unfold();},scrollIntoView:\"center\",readOnly:true},{name:\"findnext\",bindKey:bindKey(\"Ctrl-K\",\"Command-G\"),exec:function(editor){editor.findNext();},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:true},{name:\"findprevious\",bindKey:bindKey(\"Ctrl-Shift-K\",\"Command-Shift-G\"),exec:function(editor){editor.findPrevious();},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:true},{name:\"selectOrFindNext\",bindKey:bindKey(\"Alt-K\",\"Ctrl-G\"),exec:function(editor){if(editor.selection.isEmpty())editor.selection.selectWord();else editor.findNext();},readOnly:true},{name:\"selectOrFindPrevious\",bindKey:bindKey(\"Alt-Shift-K\",\"Ctrl-Shift-G\"),exec:function(editor){if(editor.selection.isEmpty())editor.selection.selectWord();else editor.findPrevious();},readOnly:true},{name:\"find\",bindKey:bindKey(\"Ctrl-F\",\"Command-F\"),exec:function(editor){config.loadModule(\"ace/ext/searchbox\",function(e){e.Search(editor);});},readOnly:true},{name:\"overwrite\",bindKey:\"Insert\",exec:function(editor){editor.toggleOverwrite();},readOnly:true},{name:\"selecttostart\",bindKey:bindKey(\"Ctrl-Shift-Home\",\"Command-Shift-Up\"),exec:function(editor){editor.getSelection().selectFileStart();},multiSelectAction:\"forEach\",readOnly:true,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"gotostart\",bindKey:bindKey(\"Ctrl-Home\",\"Command-Home|Command-Up\"),exec:function(editor){editor.navigateFileStart();},multiSelectAction:\"forEach\",readOnly:true,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"selectup\",bindKey:bindKey(\"Shift-Up\",\"Shift-Up\"),exec:function(editor){editor.getSelection().selectUp();},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:true},{name:\"golineup\",bindKey:bindKey(\"Up\",\"Up|Ctrl-P\"),exec:function(editor,args){editor.navigateUp(args.times);},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:true},{name:\"selecttoend\",bindKey:bindKey(\"Ctrl-Shift-End\",\"Command-Shift-Down\"),exec:function(editor){editor.getSelection().selectFileEnd();},multiSelectAction:\"forEach\",readOnly:true,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"gotoend\",bindKey:bindKey(\"Ctrl-End\",\"Command-End|Command-Down\"),exec:function(editor){editor.navigateFileEnd();},multiSelectAction:\"forEach\",readOnly:true,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"selectdown\",bindKey:bindKey(\"Shift-Down\",\"Shift-Down\"),exec:function(editor){editor.getSelection().selectDown();},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:true},{name:\"golinedown\",bindKey:bindKey(\"Down\",\"Down|Ctrl-N\"),exec:function(editor,args){editor.navigateDown(args.times);},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:true},{name:\"selectwordleft\",bindKey:bindKey(\"Ctrl-Shift-Left\",\"Option-Shift-Left\"),exec:function(editor){editor.getSelection().selectWordLeft();},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:true},{name:\"gotowordleft\",bindKey:bindKey(\"Ctrl-Left\",\"Option-Left\"),exec:function(editor){editor.navigateWordLeft();},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:true},{name:\"selecttolinestart\",bindKey:bindKey(\"Alt-Shift-Left\",\"Command-Shift-Left\"),exec:function(editor){editor.getSelection().selectLineStart();},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:true},{name:\"gotolinestart\",bindKey:bindKey(\"Alt-Left|Home\",\"Command-Left|Home|Ctrl-A\"),exec:function(editor){editor.navigateLineStart();},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:true},{name:\"selectleft\",bindKey:bindKey(\"Shift-Left\",\"Shift-Left\"),exec:function(editor){editor.getSelection().selectLeft();},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:true},{name:\"gotoleft\",bindKey:bindKey(\"Left\",\"Left|Ctrl-B\"),exec:function(editor,args){editor.navigateLeft(args.times);},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:true},{name:\"selectwordright\",bindKey:bindKey(\"Ctrl-Shift-Right\",\"Option-Shift-Right\"),exec:function(editor){editor.getSelection().selectWordRight();},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:true},{name:\"gotowordright\",bindKey:bindKey(\"Ctrl-Right\",\"Option-Right\"),exec:function(editor){editor.navigateWordRight();},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:true},{name:\"selecttolineend\",bindKey:bindKey(\"Alt-Shift-Right\",\"Command-Shift-Right\"),exec:function(editor){editor.getSelection().selectLineEnd();},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:true},{name:\"gotolineend\",bindKey:bindKey(\"Alt-Right|End\",\"Command-Right|End|Ctrl-E\"),exec:function(editor){editor.navigateLineEnd();},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:true},{name:\"selectright\",bindKey:bindKey(\"Shift-Right\",\"Shift-Right\"),exec:function(editor){editor.getSelection().selectRight();},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:true},{name:\"gotoright\",bindKey:bindKey(\"Right\",\"Right|Ctrl-F\"),exec:function(editor,args){editor.navigateRight(args.times);},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:true},{name:\"selectpagedown\",bindKey:\"Shift-PageDown\",exec:function(editor){editor.selectPageDown();},readOnly:true},{name:\"pagedown\",bindKey:bindKey(null,\"Option-PageDown\"),exec:function(editor){editor.scrollPageDown();},readOnly:true},{name:\"gotopagedown\",bindKey:bindKey(\"PageDown\",\"PageDown|Ctrl-V\"),exec:function(editor){editor.gotoPageDown();},readOnly:true},{name:\"selectpageup\",bindKey:\"Shift-PageUp\",exec:function(editor){editor.selectPageUp();},readOnly:true},{name:\"pageup\",bindKey:bindKey(null,\"Option-PageUp\"),exec:function(editor){editor.scrollPageUp();},readOnly:true},{name:\"gotopageup\",bindKey:\"PageUp\",exec:function(editor){editor.gotoPageUp();},readOnly:true},{name:\"scrollup\",bindKey:bindKey(\"Ctrl-Up\",null),exec:function(e){e.renderer.scrollBy(0,-2*e.renderer.layerConfig.lineHeight);},readOnly:true},{name:\"scrolldown\",bindKey:bindKey(\"Ctrl-Down\",null),exec:function(e){e.renderer.scrollBy(0,2*e.renderer.layerConfig.lineHeight);},readOnly:true},{name:\"selectlinestart\",bindKey:\"Shift-Home\",exec:function(editor){editor.getSelection().selectLineStart();},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:true},{name:\"selectlineend\",bindKey:\"Shift-End\",exec:function(editor){editor.getSelection().selectLineEnd();},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:true},{name:\"togglerecording\",bindKey:bindKey(\"Ctrl-Alt-E\",\"Command-Option-E\"),exec:function(editor){editor.commands.toggleRecording(editor);},readOnly:true},{name:\"replaymacro\",bindKey:bindKey(\"Ctrl-Shift-E\",\"Command-Shift-E\"),exec:function(editor){editor.commands.replay(editor);},readOnly:true},{name:\"jumptomatching\",bindKey:bindKey(\"Ctrl-P\",\"Ctrl-P\"),exec:function(editor){editor.jumpToMatching();},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:true},{name:\"selecttomatching\",bindKey:bindKey(\"Ctrl-Shift-P\",\"Ctrl-Shift-P\"),exec:function(editor){editor.jumpToMatching(true);},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:true},{name:\"expandToMatching\",bindKey:bindKey(\"Ctrl-Shift-M\",\"Ctrl-Shift-M\"),exec:function(editor){editor.jumpToMatching(true,true);},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:true},{name:\"passKeysToBrowser\",bindKey:bindKey(null,null),exec:function(){},passEvent:true,readOnly:true},{name:\"copy\",exec:function(editor){},readOnly:true},{name:\"cut\",exec:function(editor){var range=editor.getSelectionRange();editor._emit(\"cut\",range);if(!editor.selection.isEmpty()){editor.session.remove(range);editor.clearSelection();}},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"paste\",exec:function(editor,args){editor.$handlePaste(args);},scrollIntoView:\"cursor\"},{name:\"removeline\",bindKey:bindKey(\"Ctrl-D\",\"Command-D\"),exec:function(editor){editor.removeLines();},scrollIntoView:\"cursor\",multiSelectAction:\"forEachLine\"},{name:\"duplicateSelection\",bindKey:bindKey(\"Ctrl-Shift-D\",\"Command-Shift-D\"),exec:function(editor){editor.duplicateSelection();},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"sortlines\",bindKey:bindKey(\"Ctrl-Alt-S\",\"Command-Alt-S\"),exec:function(editor){editor.sortLines();},scrollIntoView:\"selection\",multiSelectAction:\"forEachLine\"},{name:\"togglecomment\",bindKey:bindKey(\"Ctrl-/\",\"Command-/\"),exec:function(editor){editor.toggleCommentLines();},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"toggleBlockComment\",bindKey:bindKey(\"Ctrl-Shift-/\",\"Command-Shift-/\"),exec:function(editor){editor.toggleBlockComment();},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"modifyNumberUp\",bindKey:bindKey(\"Ctrl-Shift-Up\",\"Alt-Shift-Up\"),exec:function(editor){editor.modifyNumber(1);},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"modifyNumberDown\",bindKey:bindKey(\"Ctrl-Shift-Down\",\"Alt-Shift-Down\"),exec:function(editor){editor.modifyNumber(-1);},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"replace\",bindKey:bindKey(\"Ctrl-H\",\"Command-Option-F\"),exec:function(editor){config.loadModule(\"ace/ext/searchbox\",function(e){e.Search(editor,true);});}},{name:\"undo\",bindKey:bindKey(\"Ctrl-Z\",\"Command-Z\"),exec:function(editor){editor.undo();}},{name:\"redo\",bindKey:bindKey(\"Ctrl-Shift-Z|Ctrl-Y\",\"Command-Shift-Z|Command-Y\"),exec:function(editor){editor.redo();}},{name:\"copylinesup\",bindKey:bindKey(\"Alt-Shift-Up\",\"Command-Option-Up\"),exec:function(editor){editor.copyLinesUp();},scrollIntoView:\"cursor\"},{name:\"movelinesup\",bindKey:bindKey(\"Alt-Up\",\"Option-Up\"),exec:function(editor){editor.moveLinesUp();},scrollIntoView:\"cursor\"},{name:\"copylinesdown\",bindKey:bindKey(\"Alt-Shift-Down\",\"Command-Option-Down\"),exec:function(editor){editor.copyLinesDown();},scrollIntoView:\"cursor\"},{name:\"movelinesdown\",bindKey:bindKey(\"Alt-Down\",\"Option-Down\"),exec:function(editor){editor.moveLinesDown();},scrollIntoView:\"cursor\"},{name:\"del\",bindKey:bindKey(\"Delete\",\"Delete|Ctrl-D|Shift-Delete\"),exec:function(editor){editor.remove(\"right\");},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"backspace\",bindKey:bindKey(\"Shift-Backspace|Backspace\",\"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"),exec:function(editor){editor.remove(\"left\");},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"cut_or_delete\",bindKey:bindKey(\"Shift-Delete\",null),exec:function(editor){if(editor.selection.isEmpty()){editor.remove(\"left\");}else{return false;}},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolinestart\",bindKey:bindKey(\"Alt-Backspace\",\"Command-Backspace\"),exec:function(editor){editor.removeToLineStart();},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolineend\",bindKey:bindKey(\"Alt-Delete\",\"Ctrl-K\"),exec:function(editor){editor.removeToLineEnd();},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removewordleft\",bindKey:bindKey(\"Ctrl-Backspace\",\"Alt-Backspace|Ctrl-Alt-Backspace\"),exec:function(editor){editor.removeWordLeft();},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removewordright\",bindKey:bindKey(\"Ctrl-Delete\",\"Alt-Delete\"),exec:function(editor){editor.removeWordRight();},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"outdent\",bindKey:bindKey(\"Shift-Tab\",\"Shift-Tab\"),exec:function(editor){editor.blockOutdent();},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"indent\",bindKey:bindKey(\"Tab\",\"Tab\"),exec:function(editor){editor.indent();},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"blockoutdent\",bindKey:bindKey(\"Ctrl-[\",\"Ctrl-[\"),exec:function(editor){editor.blockOutdent();},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"blockindent\",bindKey:bindKey(\"Ctrl-]\",\"Ctrl-]\"),exec:function(editor){editor.blockIndent();},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"insertstring\",exec:function(editor,str){editor.insert(str);},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"inserttext\",exec:function(editor,args){editor.insert(lang.stringRepeat(args.text||\"\",args.times||1));},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"splitline\",bindKey:bindKey(null,\"Ctrl-O\"),exec:function(editor){editor.splitLine();},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"transposeletters\",bindKey:bindKey(\"Ctrl-T\",\"Ctrl-T\"),exec:function(editor){editor.transposeLetters();},multiSelectAction:function(editor){editor.transposeSelections(1);},scrollIntoView:\"cursor\"},{name:\"touppercase\",bindKey:bindKey(\"Ctrl-U\",\"Ctrl-U\"),exec:function(editor){editor.toUpperCase();},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"tolowercase\",bindKey:bindKey(\"Ctrl-Shift-U\",\"Ctrl-Shift-U\"),exec:function(editor){editor.toLowerCase();},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"expandtoline\",bindKey:bindKey(\"Ctrl-Shift-L\",\"Command-Shift-L\"),exec:function(editor){var range=editor.selection.getRange();range.start.column=range.end.column=0;range.end.row++;editor.selection.setRange(range,false);},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:true},{name:\"joinlines\",bindKey:bindKey(null,null),exec:function(editor){var isBackwards=editor.selection.isBackwards();var selectionStart=isBackwards?editor.selection.getSelectionLead():editor.selection.getSelectionAnchor();var selectionEnd=isBackwards?editor.selection.getSelectionAnchor():editor.selection.getSelectionLead();var firstLineEndCol=editor.session.doc.getLine(selectionStart.row).length;var selectedText=editor.session.doc.getTextRange(editor.selection.getRange());var selectedCount=selectedText.replace(/\\n\\s*/,\" \").length;var insertLine=editor.session.doc.getLine(selectionStart.row);for(var i=selectionStart.row+1;i<=selectionEnd.row+1;i++){var curLine=lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));if(curLine.length!==0){curLine=\" \"+curLine;}insertLine+=curLine;}if(selectionEnd.row+1<editor.session.doc.getLength()-1){insertLine+=editor.session.doc.getNewLineCharacter();}editor.clearSelection();editor.session.doc.replace(new Range(selectionStart.row,0,selectionEnd.row+2,0),insertLine);if(selectedCount>0){editor.selection.moveCursorTo(selectionStart.row,selectionStart.column);editor.selection.selectTo(selectionStart.row,selectionStart.column+selectedCount);}else{firstLineEndCol=editor.session.doc.getLine(selectionStart.row).length>firstLineEndCol?firstLineEndCol+1:firstLineEndCol;editor.selection.moveCursorTo(selectionStart.row,firstLineEndCol);}},multiSelectAction:\"forEach\",readOnly:true},{name:\"invertSelection\",bindKey:bindKey(null,null),exec:function(editor){var endRow=editor.session.doc.getLength()-1;var endCol=editor.session.doc.getLine(endRow).length;var ranges=editor.selection.rangeList.ranges;var newRanges=[];if(ranges.length<1){ranges=[editor.selection.getRange()];}for(var i=0;i<ranges.length;i++){if(i==ranges.length-1){if(!(ranges[i].end.row===endRow&&ranges[i].end.column===endCol)){newRanges.push(new Range(ranges[i].end.row,ranges[i].end.column,endRow,endCol));}}if(i===0){if(!(ranges[i].start.row===0&&ranges[i].start.column===0)){newRanges.push(new Range(0,0,ranges[i].start.row,ranges[i].start.column));}}else{newRanges.push(new Range(ranges[i-1].end.row,ranges[i-1].end.column,ranges[i].start.row,ranges[i].start.column));}}editor.exitMultiSelectMode();editor.clearSelection();for(var i=0;i<newRanges.length;i++){editor.selection.addRange(newRanges[i],false);}},readOnly:true,scrollIntoView:\"none\"}];});ace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\"],function(acequire,exports,module){\"use strict\";acequire(\"./lib/fixoldbrowsers\");var oop=acequire(\"./lib/oop\");var dom=acequire(\"./lib/dom\");var lang=acequire(\"./lib/lang\");var useragent=acequire(\"./lib/useragent\");var TextInput=acequire(\"./keyboard/textinput\").TextInput;var MouseHandler=acequire(\"./mouse/mouse_handler\").MouseHandler;var FoldHandler=acequire(\"./mouse/fold_handler\").FoldHandler;var KeyBinding=acequire(\"./keyboard/keybinding\").KeyBinding;var EditSession=acequire(\"./edit_session\").EditSession;var Search=acequire(\"./search\").Search;var Range=acequire(\"./range\").Range;var EventEmitter=acequire(\"./lib/event_emitter\").EventEmitter;var CommandManager=acequire(\"./commands/command_manager\").CommandManager;var defaultCommands=acequire(\"./commands/default_commands\").commands;var config=acequire(\"./config\");var TokenIterator=acequire(\"./token_iterator\").TokenIterator;var Editor=function(renderer,session){var container=renderer.getContainerElement();this.container=container;this.renderer=renderer;this.commands=new CommandManager(useragent.isMac?\"mac\":\"win\",defaultCommands);this.textInput=new TextInput(renderer.getTextAreaContainer(),this);this.renderer.textarea=this.textInput.getElement();this.keyBinding=new KeyBinding(this);this.$mouseHandler=new MouseHandler(this);new FoldHandler(this);this.$blockScrolling=0;this.$search=new Search().set({wrap:true});this.$historyTracker=this.$historyTracker.bind(this);this.commands.on(\"exec\",this.$historyTracker);this.$initOperationListeners();this._$emitInputEvent=lang.delayedCall(function(){this._signal(\"input\",{});if(this.session&&this.session.bgTokenizer)this.session.bgTokenizer.scheduleStart();}.bind(this));this.on(\"change\",function(_,_self){_self._$emitInputEvent.schedule(31);});this.setSession(session||new EditSession(\"\"));config.resetOptions(this);config._signal(\"editor\",this);};(function(){oop.implement(this,EventEmitter);this.$initOperationListeners=function(){function last(a){return a[a.length-1];}this.selections=[];this.commands.on(\"exec\",this.startOperation.bind(this),true);this.commands.on(\"afterExec\",this.endOperation.bind(this),true);this.$opResetTimer=lang.delayedCall(this.endOperation.bind(this));this.on(\"change\",function(){this.curOp||this.startOperation();this.curOp.docChanged=true;}.bind(this),true);this.on(\"changeSelection\",function(){this.curOp||this.startOperation();this.curOp.selectionChanged=true;}.bind(this),true);};this.curOp=null;this.prevOp={};this.startOperation=function(commadEvent){if(this.curOp){if(!commadEvent||this.curOp.command)return;this.prevOp=this.curOp;}if(!commadEvent){this.previousCommand=null;commadEvent={};}this.$opResetTimer.schedule();this.curOp={command:commadEvent.command||{},args:commadEvent.args,scrollTop:this.renderer.scrollTop};if(this.curOp.command.name&&this.curOp.command.scrollIntoView!==undefined)this.$blockScrolling++;};this.endOperation=function(e){if(this.curOp){if(e&&e.returnValue===false)return this.curOp=null;this._signal(\"beforeEndOperation\");var command=this.curOp.command;if(command.name&&this.$blockScrolling>0)this.$blockScrolling--;var scrollIntoView=command&&command.scrollIntoView;if(scrollIntoView){switch(scrollIntoView){case\"center-animate\":scrollIntoView=\"animate\";case\"center\":this.renderer.scrollCursorIntoView(null,0.5);break;case\"animate\":case\"cursor\":this.renderer.scrollCursorIntoView();break;case\"selectionPart\":var range=this.selection.getRange();var config=this.renderer.layerConfig;if(range.start.row>=config.lastRow||range.end.row<=config.firstRow){this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead);}break;default:break;}if(scrollIntoView==\"animate\")this.renderer.animateScrolling(this.curOp.scrollTop);}this.prevOp=this.curOp;this.curOp=null;}};this.$mergeableCommands=[\"backspace\",\"del\",\"insertstring\"];this.$historyTracker=function(e){if(!this.$mergeUndoDeltas)return;var prev=this.prevOp;var mergeableCommands=this.$mergeableCommands;var shouldMerge=prev.command&&e.command.name==prev.command.name;if(e.command.name==\"insertstring\"){var text=e.args;if(this.mergeNextCommand===undefined)this.mergeNextCommand=true;shouldMerge=shouldMerge&&this.mergeNextCommand// previous command allows to coalesce with\n&&(!/\\s/.test(text)||/\\s/.test(prev.args));// previous insertion was of same type\nthis.mergeNextCommand=true;}else{shouldMerge=shouldMerge&&mergeableCommands.indexOf(e.command.name)!==-1;// the command is mergeable\n}if(this.$mergeUndoDeltas!=\"always\"&&Date.now()-this.sequenceStartTime>2000){shouldMerge=false;// the sequence is too long\n}if(shouldMerge)this.session.mergeUndoDeltas=true;else if(mergeableCommands.indexOf(e.command.name)!==-1)this.sequenceStartTime=Date.now();};this.setKeyboardHandler=function(keyboardHandler,cb){if(keyboardHandler&&typeof keyboardHandler===\"string\"){this.$keybindingId=keyboardHandler;var _self=this;config.loadModule([\"keybinding\",keyboardHandler],function(module){if(_self.$keybindingId==keyboardHandler)_self.keyBinding.setKeyboardHandler(module&&module.handler);cb&&cb();});}else{this.$keybindingId=null;this.keyBinding.setKeyboardHandler(keyboardHandler);cb&&cb();}};this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler();};this.setSession=function(session){if(this.session==session)return;if(this.curOp)this.endOperation();this.curOp={};var oldSession=this.session;if(oldSession){this.session.off(\"change\",this.$onDocumentChange);this.session.off(\"changeMode\",this.$onChangeMode);this.session.off(\"tokenizerUpdate\",this.$onTokenizerUpdate);this.session.off(\"changeTabSize\",this.$onChangeTabSize);this.session.off(\"changeWrapLimit\",this.$onChangeWrapLimit);this.session.off(\"changeWrapMode\",this.$onChangeWrapMode);this.session.off(\"changeFold\",this.$onChangeFold);this.session.off(\"changeFrontMarker\",this.$onChangeFrontMarker);this.session.off(\"changeBackMarker\",this.$onChangeBackMarker);this.session.off(\"changeBreakpoint\",this.$onChangeBreakpoint);this.session.off(\"changeAnnotation\",this.$onChangeAnnotation);this.session.off(\"changeOverwrite\",this.$onCursorChange);this.session.off(\"changeScrollTop\",this.$onScrollTopChange);this.session.off(\"changeScrollLeft\",this.$onScrollLeftChange);var selection=this.session.getSelection();selection.off(\"changeCursor\",this.$onCursorChange);selection.off(\"changeSelection\",this.$onSelectionChange);}this.session=session;if(session){this.$onDocumentChange=this.onDocumentChange.bind(this);session.on(\"change\",this.$onDocumentChange);this.renderer.setSession(session);this.$onChangeMode=this.onChangeMode.bind(this);session.on(\"changeMode\",this.$onChangeMode);this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this);session.on(\"tokenizerUpdate\",this.$onTokenizerUpdate);this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer);session.on(\"changeTabSize\",this.$onChangeTabSize);this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this);session.on(\"changeWrapLimit\",this.$onChangeWrapLimit);this.$onChangeWrapMode=this.onChangeWrapMode.bind(this);session.on(\"changeWrapMode\",this.$onChangeWrapMode);this.$onChangeFold=this.onChangeFold.bind(this);session.on(\"changeFold\",this.$onChangeFold);this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this);this.session.on(\"changeFrontMarker\",this.$onChangeFrontMarker);this.$onChangeBackMarker=this.onChangeBackMarker.bind(this);this.session.on(\"changeBackMarker\",this.$onChangeBackMarker);this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this);this.session.on(\"changeBreakpoint\",this.$onChangeBreakpoint);this.$onChangeAnnotation=this.onChangeAnnotation.bind(this);this.session.on(\"changeAnnotation\",this.$onChangeAnnotation);this.$onCursorChange=this.onCursorChange.bind(this);this.session.on(\"changeOverwrite\",this.$onCursorChange);this.$onScrollTopChange=this.onScrollTopChange.bind(this);this.session.on(\"changeScrollTop\",this.$onScrollTopChange);this.$onScrollLeftChange=this.onScrollLeftChange.bind(this);this.session.on(\"changeScrollLeft\",this.$onScrollLeftChange);this.selection=session.getSelection();this.selection.on(\"changeCursor\",this.$onCursorChange);this.$onSelectionChange=this.onSelectionChange.bind(this);this.selection.on(\"changeSelection\",this.$onSelectionChange);this.onChangeMode();this.$blockScrolling+=1;this.onCursorChange();this.$blockScrolling-=1;this.onScrollTopChange();this.onScrollLeftChange();this.onSelectionChange();this.onChangeFrontMarker();this.onChangeBackMarker();this.onChangeBreakpoint();this.onChangeAnnotation();this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit();this.renderer.updateFull();}else{this.selection=null;this.renderer.setSession(session);}this._signal(\"changeSession\",{session:session,oldSession:oldSession});this.curOp=null;oldSession&&oldSession._signal(\"changeEditor\",{oldEditor:this});session&&session._signal(\"changeEditor\",{editor:this});};this.getSession=function(){return this.session;};this.setValue=function(val,cursorPos){this.session.doc.setValue(val);if(!cursorPos)this.selectAll();else if(cursorPos==1)this.navigateFileEnd();else if(cursorPos==-1)this.navigateFileStart();return val;};this.getValue=function(){return this.session.getValue();};this.getSelection=function(){return this.selection;};this.resize=function(force){this.renderer.onResize(force);};this.setTheme=function(theme,cb){this.renderer.setTheme(theme,cb);};this.getTheme=function(){return this.renderer.getTheme();};this.setStyle=function(style){this.renderer.setStyle(style);};this.unsetStyle=function(style){this.renderer.unsetStyle(style);};this.getFontSize=function(){return this.getOption(\"fontSize\")||dom.computedStyle(this.container,\"fontSize\");};this.setFontSize=function(size){this.setOption(\"fontSize\",size);};this.$highlightBrackets=function(){if(this.session.$bracketHighlight){this.session.removeMarker(this.session.$bracketHighlight);this.session.$bracketHighlight=null;}if(this.$highlightPending){return;}var self=this;this.$highlightPending=true;setTimeout(function(){self.$highlightPending=false;var session=self.session;if(!session||!session.bgTokenizer)return;var pos=session.findMatchingBracket(self.getCursorPosition());if(pos){var range=new Range(pos.row,pos.column,pos.row,pos.column+1);}else if(session.$mode.getMatching){var range=session.$mode.getMatching(self.session);}if(range)session.$bracketHighlight=session.addMarker(range,\"ace_bracket\",\"text\");},50);};this.$highlightTags=function(){if(this.$highlightTagPending)return;var self=this;this.$highlightTagPending=true;setTimeout(function(){self.$highlightTagPending=false;var session=self.session;if(!session||!session.bgTokenizer)return;var pos=self.getCursorPosition();var iterator=new TokenIterator(self.session,pos.row,pos.column);var token=iterator.getCurrentToken();if(!token||!/\\b(?:tag-open|tag-name)/.test(token.type)){session.removeMarker(session.$tagHighlight);session.$tagHighlight=null;return;}if(token.type.indexOf(\"tag-open\")!=-1){token=iterator.stepForward();if(!token)return;}var tag=token.value;var depth=0;var prevToken=iterator.stepBackward();if(prevToken.value=='<'){do{prevToken=token;token=iterator.stepForward();if(token&&token.value===tag&&token.type.indexOf('tag-name')!==-1){if(prevToken.value==='<'){depth++;}else if(prevToken.value==='</'){depth--;}}}while(token&&depth>=0);}else{do{token=prevToken;prevToken=iterator.stepBackward();if(token&&token.value===tag&&token.type.indexOf('tag-name')!==-1){if(prevToken.value==='<'){depth++;}else if(prevToken.value==='</'){depth--;}}}while(prevToken&&depth<=0);iterator.stepForward();}if(!token){session.removeMarker(session.$tagHighlight);session.$tagHighlight=null;return;}var row=iterator.getCurrentTokenRow();var column=iterator.getCurrentTokenColumn();var range=new Range(row,column,row,column+token.value.length);if(session.$tagHighlight&&range.compareRange(session.$backMarkers[session.$tagHighlight].range)!==0){session.removeMarker(session.$tagHighlight);session.$tagHighlight=null;}if(range&&!session.$tagHighlight)session.$tagHighlight=session.addMarker(range,\"ace_bracket\",\"text\");},50);};this.focus=function(){var _self=this;setTimeout(function(){_self.textInput.focus();});this.textInput.focus();};this.isFocused=function(){return this.textInput.isFocused();};this.blur=function(){this.textInput.blur();};this.onFocus=function(e){if(this.$isFocused)return;this.$isFocused=true;this.renderer.showCursor();this.renderer.visualizeFocus();this._emit(\"focus\",e);};this.onBlur=function(e){if(!this.$isFocused)return;this.$isFocused=false;this.renderer.hideCursor();this.renderer.visualizeBlur();this._emit(\"blur\",e);};this.$cursorChange=function(){this.renderer.updateCursor();};this.onDocumentChange=function(delta){var wrap=this.session.$useWrapMode;var lastRow=delta.start.row==delta.end.row?delta.end.row:Infinity;this.renderer.updateLines(delta.start.row,lastRow,wrap);this._signal(\"change\",delta);this.$cursorChange();this.$updateHighlightActiveLine();};this.onTokenizerUpdate=function(e){var rows=e.data;this.renderer.updateLines(rows.first,rows.last);};this.onScrollTopChange=function(){this.renderer.scrollToY(this.session.getScrollTop());};this.onScrollLeftChange=function(){this.renderer.scrollToX(this.session.getScrollLeft());};this.onCursorChange=function(){this.$cursorChange();if(!this.$blockScrolling){config.warn(\"Automatically scrolling cursor into view after selection change\",\"this will be disabled in the next version\",\"set editor.$blockScrolling = Infinity to disable this message\");this.renderer.scrollCursorIntoView();}this.$highlightBrackets();this.$highlightTags();this.$updateHighlightActiveLine();this._signal(\"changeSelection\");};this.$updateHighlightActiveLine=function(){var session=this.getSession();var highlight;if(this.$highlightActiveLine){if(this.$selectionStyle!=\"line\"||!this.selection.isMultiLine())highlight=this.getCursorPosition();if(this.renderer.$maxLines&&this.session.getLength()===1&&!(this.renderer.$minLines>1))highlight=false;}if(session.$highlightLineMarker&&!highlight){session.removeMarker(session.$highlightLineMarker.id);session.$highlightLineMarker=null;}else if(!session.$highlightLineMarker&&highlight){var range=new Range(highlight.row,highlight.column,highlight.row,Infinity);range.id=session.addMarker(range,\"ace_active-line\",\"screenLine\");session.$highlightLineMarker=range;}else if(highlight){session.$highlightLineMarker.start.row=highlight.row;session.$highlightLineMarker.end.row=highlight.row;session.$highlightLineMarker.start.column=highlight.column;session._signal(\"changeBackMarker\");}};this.onSelectionChange=function(e){var session=this.session;if(session.$selectionMarker){session.removeMarker(session.$selectionMarker);}session.$selectionMarker=null;if(!this.selection.isEmpty()){var range=this.selection.getRange();var style=this.getSelectionStyle();session.$selectionMarker=session.addMarker(range,\"ace_selection\",style);}else{this.$updateHighlightActiveLine();}var re=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(re);this._signal(\"changeSelection\");};this.$getSelectionHighLightRegexp=function(){var session=this.session;var selection=this.getSelectionRange();if(selection.isEmpty()||selection.isMultiLine())return;var startOuter=selection.start.column-1;var endOuter=selection.end.column+1;var line=session.getLine(selection.start.row);var lineCols=line.length;var needle=line.substring(Math.max(startOuter,0),Math.min(endOuter,lineCols));if(startOuter>=0&&/^[\\w\\d]/.test(needle)||endOuter<=lineCols&&/[\\w\\d]$/.test(needle))return;needle=line.substring(selection.start.column,selection.end.column);if(!/^[\\w\\d]+$/.test(needle))return;var re=this.$search.$assembleRegExp({wholeWord:true,caseSensitive:true,needle:needle});return re;};this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers();};this.onChangeBackMarker=function(){this.renderer.updateBackMarkers();};this.onChangeBreakpoint=function(){this.renderer.updateBreakpoints();};this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations());};this.onChangeMode=function(e){this.renderer.updateText();this._emit(\"changeMode\",e);};this.onChangeWrapLimit=function(){this.renderer.updateFull();};this.onChangeWrapMode=function(){this.renderer.onResize(true);};this.onChangeFold=function(){this.$updateHighlightActiveLine();this.renderer.updateFull();};this.getSelectedText=function(){return this.session.getTextRange(this.getSelectionRange());};this.getCopyText=function(){var text=this.getSelectedText();this._signal(\"copy\",text);return text;};this.onCopy=function(){this.commands.exec(\"copy\",this);};this.onCut=function(){this.commands.exec(\"cut\",this);};this.onPaste=function(text,event){var e={text:text,event:event};this.commands.exec(\"paste\",this,e);};this.$handlePaste=function(e){if(typeof e==\"string\")e={text:e};this._signal(\"paste\",e);var text=e.text;if(!this.inMultiSelectMode||this.inVirtualSelectionMode){this.insert(text);}else{var lines=text.split(/\\r\\n|\\r|\\n/);var ranges=this.selection.rangeList.ranges;if(lines.length>ranges.length||lines.length<2||!lines[1])return this.commands.exec(\"insertstring\",this,text);for(var i=ranges.length;i--;){var range=ranges[i];if(!range.isEmpty())this.session.remove(range);this.session.insert(range.start,lines[i]);}}};this.execCommand=function(command,args){return this.commands.exec(command,this,args);};this.insert=function(text,pasted){var session=this.session;var mode=session.getMode();var cursor=this.getCursorPosition();if(this.getBehavioursEnabled()&&!pasted){var transform=mode.transformAction(session.getState(cursor.row),'insertion',this,session,text);if(transform){if(text!==transform.text){this.session.mergeUndoDeltas=false;this.$mergeNextCommand=false;}text=transform.text;}}if(text==\"\\t\")text=this.session.getTabString();if(!this.selection.isEmpty()){var range=this.getSelectionRange();cursor=this.session.remove(range);this.clearSelection();}else if(this.session.getOverwrite()){var range=new Range.fromPoints(cursor,cursor);range.end.column+=text.length;this.session.remove(range);}if(text==\"\\n\"||text==\"\\r\\n\"){var line=session.getLine(cursor.row);if(cursor.column>line.search(/\\S|$/)){var d=line.substr(cursor.column).search(/\\S|$/);session.doc.removeInLine(cursor.row,cursor.column,cursor.column+d);}}this.clearSelection();var start=cursor.column;var lineState=session.getState(cursor.row);var line=session.getLine(cursor.row);var shouldOutdent=mode.checkOutdent(lineState,line,text);var end=session.insert(cursor,text);if(transform&&transform.selection){if(transform.selection.length==2){// Transform relative to the current column\nthis.selection.setSelectionRange(new Range(cursor.row,start+transform.selection[0],cursor.row,start+transform.selection[1]));}else{// Transform relative to the current row.\nthis.selection.setSelectionRange(new Range(cursor.row+transform.selection[0],transform.selection[1],cursor.row+transform.selection[2],transform.selection[3]));}}if(session.getDocument().isNewLine(text)){var lineIndent=mode.getNextLineIndent(lineState,line.slice(0,cursor.column),session.getTabString());session.insert({row:cursor.row+1,column:0},lineIndent);}if(shouldOutdent)mode.autoOutdent(lineState,session,cursor.row);};this.onTextInput=function(text){this.keyBinding.onTextInput(text);};this.onCommandKey=function(e,hashId,keyCode){this.keyBinding.onCommandKey(e,hashId,keyCode);};this.setOverwrite=function(overwrite){this.session.setOverwrite(overwrite);};this.getOverwrite=function(){return this.session.getOverwrite();};this.toggleOverwrite=function(){this.session.toggleOverwrite();};this.setScrollSpeed=function(speed){this.setOption(\"scrollSpeed\",speed);};this.getScrollSpeed=function(){return this.getOption(\"scrollSpeed\");};this.setDragDelay=function(dragDelay){this.setOption(\"dragDelay\",dragDelay);};this.getDragDelay=function(){return this.getOption(\"dragDelay\");};this.setSelectionStyle=function(val){this.setOption(\"selectionStyle\",val);};this.getSelectionStyle=function(){return this.getOption(\"selectionStyle\");};this.setHighlightActiveLine=function(shouldHighlight){this.setOption(\"highlightActiveLine\",shouldHighlight);};this.getHighlightActiveLine=function(){return this.getOption(\"highlightActiveLine\");};this.setHighlightGutterLine=function(shouldHighlight){this.setOption(\"highlightGutterLine\",shouldHighlight);};this.getHighlightGutterLine=function(){return this.getOption(\"highlightGutterLine\");};this.setHighlightSelectedWord=function(shouldHighlight){this.setOption(\"highlightSelectedWord\",shouldHighlight);};this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord;};this.setAnimatedScroll=function(shouldAnimate){this.renderer.setAnimatedScroll(shouldAnimate);};this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll();};this.setShowInvisibles=function(showInvisibles){this.renderer.setShowInvisibles(showInvisibles);};this.getShowInvisibles=function(){return this.renderer.getShowInvisibles();};this.setDisplayIndentGuides=function(display){this.renderer.setDisplayIndentGuides(display);};this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides();};this.setShowPrintMargin=function(showPrintMargin){this.renderer.setShowPrintMargin(showPrintMargin);};this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin();};this.setPrintMarginColumn=function(showPrintMargin){this.renderer.setPrintMarginColumn(showPrintMargin);};this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn();};this.setReadOnly=function(readOnly){this.setOption(\"readOnly\",readOnly);};this.getReadOnly=function(){return this.getOption(\"readOnly\");};this.setBehavioursEnabled=function(enabled){this.setOption(\"behavioursEnabled\",enabled);};this.getBehavioursEnabled=function(){return this.getOption(\"behavioursEnabled\");};this.setWrapBehavioursEnabled=function(enabled){this.setOption(\"wrapBehavioursEnabled\",enabled);};this.getWrapBehavioursEnabled=function(){return this.getOption(\"wrapBehavioursEnabled\");};this.setShowFoldWidgets=function(show){this.setOption(\"showFoldWidgets\",show);};this.getShowFoldWidgets=function(){return this.getOption(\"showFoldWidgets\");};this.setFadeFoldWidgets=function(fade){this.setOption(\"fadeFoldWidgets\",fade);};this.getFadeFoldWidgets=function(){return this.getOption(\"fadeFoldWidgets\");};this.remove=function(dir){if(this.selection.isEmpty()){if(dir==\"left\")this.selection.selectLeft();else this.selection.selectRight();}var range=this.getSelectionRange();if(this.getBehavioursEnabled()){var session=this.session;var state=session.getState(range.start.row);var new_range=session.getMode().transformAction(state,'deletion',this,session,range);if(range.end.column===0){var text=session.getTextRange(range);if(text[text.length-1]==\"\\n\"){var line=session.getLine(range.end.row);if(/^\\s+$/.test(line)){range.end.column=line.length;}}}if(new_range)range=new_range;}this.session.remove(range);this.clearSelection();};this.removeWordRight=function(){if(this.selection.isEmpty())this.selection.selectWordRight();this.session.remove(this.getSelectionRange());this.clearSelection();};this.removeWordLeft=function(){if(this.selection.isEmpty())this.selection.selectWordLeft();this.session.remove(this.getSelectionRange());this.clearSelection();};this.removeToLineStart=function(){if(this.selection.isEmpty())this.selection.selectLineStart();this.session.remove(this.getSelectionRange());this.clearSelection();};this.removeToLineEnd=function(){if(this.selection.isEmpty())this.selection.selectLineEnd();var range=this.getSelectionRange();if(range.start.column==range.end.column&&range.start.row==range.end.row){range.end.column=0;range.end.row++;}this.session.remove(range);this.clearSelection();};this.splitLine=function(){if(!this.selection.isEmpty()){this.session.remove(this.getSelectionRange());this.clearSelection();}var cursor=this.getCursorPosition();this.insert(\"\\n\");this.moveCursorToPosition(cursor);};this.transposeLetters=function(){if(!this.selection.isEmpty()){return;}var cursor=this.getCursorPosition();var column=cursor.column;if(column===0)return;var line=this.session.getLine(cursor.row);var swap,range;if(column<line.length){swap=line.charAt(column)+line.charAt(column-1);range=new Range(cursor.row,column-1,cursor.row,column+1);}else{swap=line.charAt(column-1)+line.charAt(column-2);range=new Range(cursor.row,column-2,cursor.row,column);}this.session.replace(range,swap);};this.toLowerCase=function(){var originalRange=this.getSelectionRange();if(this.selection.isEmpty()){this.selection.selectWord();}var range=this.getSelectionRange();var text=this.session.getTextRange(range);this.session.replace(range,text.toLowerCase());this.selection.setSelectionRange(originalRange);};this.toUpperCase=function(){var originalRange=this.getSelectionRange();if(this.selection.isEmpty()){this.selection.selectWord();}var range=this.getSelectionRange();var text=this.session.getTextRange(range);this.session.replace(range,text.toUpperCase());this.selection.setSelectionRange(originalRange);};this.indent=function(){var session=this.session;var range=this.getSelectionRange();if(range.start.row<range.end.row){var rows=this.$getSelectedRows();session.indentRows(rows.first,rows.last,\"\\t\");return;}else if(range.start.column<range.end.column){var text=session.getTextRange(range);if(!/^\\s+$/.test(text)){var rows=this.$getSelectedRows();session.indentRows(rows.first,rows.last,\"\\t\");return;}}var line=session.getLine(range.start.row);var position=range.start;var size=session.getTabSize();var column=session.documentToScreenColumn(position.row,position.column);if(this.session.getUseSoftTabs()){var count=size-column%size;var indentString=lang.stringRepeat(\" \",count);}else{var count=column%size;while(line[range.start.column]==\" \"&&count){range.start.column--;count--;}this.selection.setSelectionRange(range);indentString=\"\\t\";}return this.insert(indentString);};this.blockIndent=function(){var rows=this.$getSelectedRows();this.session.indentRows(rows.first,rows.last,\"\\t\");};this.blockOutdent=function(){var selection=this.session.getSelection();this.session.outdentRows(selection.getRange());};this.sortLines=function(){var rows=this.$getSelectedRows();var session=this.session;var lines=[];for(i=rows.first;i<=rows.last;i++)lines.push(session.getLine(i));lines.sort(function(a,b){if(a.toLowerCase()<b.toLowerCase())return-1;if(a.toLowerCase()>b.toLowerCase())return 1;return 0;});var deleteRange=new Range(0,0,0,0);for(var i=rows.first;i<=rows.last;i++){var line=session.getLine(i);deleteRange.start.row=i;deleteRange.end.row=i;deleteRange.end.column=line.length;session.replace(deleteRange,lines[i-rows.first]);}};this.toggleCommentLines=function(){var state=this.session.getState(this.getCursorPosition().row);var rows=this.$getSelectedRows();this.session.getMode().toggleCommentLines(state,this.session,rows.first,rows.last);};this.toggleBlockComment=function(){var cursor=this.getCursorPosition();var state=this.session.getState(cursor.row);var range=this.getSelectionRange();this.session.getMode().toggleBlockComment(state,this.session,range,cursor);};this.getNumberAt=function(row,column){var _numberRx=/[\\-]?[0-9]+(?:\\.[0-9]+)?/g;_numberRx.lastIndex=0;var s=this.session.getLine(row);while(_numberRx.lastIndex<column){var m=_numberRx.exec(s);if(m.index<=column&&m.index+m[0].length>=column){var number={value:m[0],start:m.index,end:m.index+m[0].length};return number;}}return null;};this.modifyNumber=function(amount){var row=this.selection.getCursor().row;var column=this.selection.getCursor().column;var charRange=new Range(row,column-1,row,column);var c=this.session.getTextRange(charRange);if(!isNaN(parseFloat(c))&&isFinite(c)){var nr=this.getNumberAt(row,column);if(nr){var fp=nr.value.indexOf(\".\")>=0?nr.start+nr.value.indexOf(\".\")+1:nr.end;var decimals=nr.start+nr.value.length-fp;var t=parseFloat(nr.value);t*=Math.pow(10,decimals);if(fp!==nr.end&&column<fp){amount*=Math.pow(10,nr.end-column-1);}else{amount*=Math.pow(10,nr.end-column);}t+=amount;t/=Math.pow(10,decimals);var nnr=t.toFixed(decimals);var replaceRange=new Range(row,nr.start,row,nr.end);this.session.replace(replaceRange,nnr);this.moveCursorTo(row,Math.max(nr.start+1,column+nnr.length-nr.value.length));}}};this.removeLines=function(){var rows=this.$getSelectedRows();this.session.removeFullLines(rows.first,rows.last);this.clearSelection();};this.duplicateSelection=function(){var sel=this.selection;var doc=this.session;var range=sel.getRange();var reverse=sel.isBackwards();if(range.isEmpty()){var row=range.start.row;doc.duplicateLines(row,row);}else{var point=reverse?range.start:range.end;var endPoint=doc.insert(point,doc.getTextRange(range),false);range.start=point;range.end=endPoint;sel.setSelectionRange(range,reverse);}};this.moveLinesDown=function(){this.$moveLines(1,false);};this.moveLinesUp=function(){this.$moveLines(-1,false);};this.moveText=function(range,toPosition,copy){return this.session.moveText(range,toPosition,copy);};this.copyLinesUp=function(){this.$moveLines(-1,true);};this.copyLinesDown=function(){this.$moveLines(1,true);};this.$moveLines=function(dir,copy){var rows,moved;var selection=this.selection;if(!selection.inMultiSelectMode||this.inVirtualSelectionMode){var range=selection.toOrientedRange();rows=this.$getSelectedRows(range);moved=this.session.$moveLines(rows.first,rows.last,copy?0:dir);if(copy&&dir==-1)moved=0;range.moveBy(moved,0);selection.fromOrientedRange(range);}else{var ranges=selection.rangeList.ranges;selection.rangeList.detach(this.session);this.inVirtualSelectionMode=true;var diff=0;var totalDiff=0;var l=ranges.length;for(var i=0;i<l;i++){var rangeIndex=i;ranges[i].moveBy(diff,0);rows=this.$getSelectedRows(ranges[i]);var first=rows.first;var last=rows.last;while(++i<l){if(totalDiff)ranges[i].moveBy(totalDiff,0);var subRows=this.$getSelectedRows(ranges[i]);if(copy&&subRows.first!=last)break;else if(!copy&&subRows.first>last+1)break;last=subRows.last;}i--;diff=this.session.$moveLines(first,last,copy?0:dir);if(copy&&dir==-1)rangeIndex=i+1;while(rangeIndex<=i){ranges[rangeIndex].moveBy(diff,0);rangeIndex++;}if(!copy)diff=0;totalDiff+=diff;}selection.fromOrientedRange(selection.ranges[0]);selection.rangeList.attach(this.session);this.inVirtualSelectionMode=false;}};this.$getSelectedRows=function(range){range=(range||this.getSelectionRange()).collapseRows();return{first:this.session.getRowFoldStart(range.start.row),last:this.session.getRowFoldEnd(range.end.row)};};this.onCompositionStart=function(text){this.renderer.showComposition(this.getCursorPosition());};this.onCompositionUpdate=function(text){this.renderer.setCompositionText(text);};this.onCompositionEnd=function(){this.renderer.hideComposition();};this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow();};this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow();};this.isRowVisible=function(row){return row>=this.getFirstVisibleRow()&&row<=this.getLastVisibleRow();};this.isRowFullyVisible=function(row){return row>=this.renderer.getFirstFullyVisibleRow()&&row<=this.renderer.getLastFullyVisibleRow();};this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1;};this.$moveByPage=function(dir,select){var renderer=this.renderer;var config=this.renderer.layerConfig;var rows=dir*Math.floor(config.height/config.lineHeight);this.$blockScrolling++;if(select===true){this.selection.$moveSelection(function(){this.moveCursorBy(rows,0);});}else if(select===false){this.selection.moveCursorBy(rows,0);this.selection.clearSelection();}this.$blockScrolling--;var scrollTop=renderer.scrollTop;renderer.scrollBy(0,rows*config.lineHeight);if(select!=null)renderer.scrollCursorIntoView(null,0.5);renderer.animateScrolling(scrollTop);};this.selectPageDown=function(){this.$moveByPage(1,true);};this.selectPageUp=function(){this.$moveByPage(-1,true);};this.gotoPageDown=function(){this.$moveByPage(1,false);};this.gotoPageUp=function(){this.$moveByPage(-1,false);};this.scrollPageDown=function(){this.$moveByPage(1);};this.scrollPageUp=function(){this.$moveByPage(-1);};this.scrollToRow=function(row){this.renderer.scrollToRow(row);};this.scrollToLine=function(line,center,animate,callback){this.renderer.scrollToLine(line,center,animate,callback);};this.centerSelection=function(){var range=this.getSelectionRange();var pos={row:Math.floor(range.start.row+(range.end.row-range.start.row)/2),column:Math.floor(range.start.column+(range.end.column-range.start.column)/2)};this.renderer.alignCursor(pos,0.5);};this.getCursorPosition=function(){return this.selection.getCursor();};this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition());};this.getSelectionRange=function(){return this.selection.getRange();};this.selectAll=function(){this.$blockScrolling+=1;this.selection.selectAll();this.$blockScrolling-=1;};this.clearSelection=function(){this.selection.clearSelection();};this.moveCursorTo=function(row,column){this.selection.moveCursorTo(row,column);};this.moveCursorToPosition=function(pos){this.selection.moveCursorToPosition(pos);};this.jumpToMatching=function(select,expand){var cursor=this.getCursorPosition();var iterator=new TokenIterator(this.session,cursor.row,cursor.column);var prevToken=iterator.getCurrentToken();var token=prevToken||iterator.stepForward();if(!token)return;var matchType;var found=false;var depth={};var i=cursor.column-token.start;var bracketType;var brackets={\")\":\"(\",\"(\":\"(\",\"]\":\"[\",\"[\":\"[\",\"{\":\"{\",\"}\":\"{\"};do{if(token.value.match(/[{}()\\[\\]]/g)){for(;i<token.value.length&&!found;i++){if(!brackets[token.value[i]]){continue;}bracketType=brackets[token.value[i]]+'.'+token.type.replace(\"rparen\",\"lparen\");if(isNaN(depth[bracketType])){depth[bracketType]=0;}switch(token.value[i]){case'(':case'[':case'{':depth[bracketType]++;break;case')':case']':case'}':depth[bracketType]--;if(depth[bracketType]===-1){matchType='bracket';found=true;}break;}}}else if(token&&token.type.indexOf('tag-name')!==-1){if(isNaN(depth[token.value])){depth[token.value]=0;}if(prevToken.value==='<'){depth[token.value]++;}else if(prevToken.value==='</'){depth[token.value]--;}if(depth[token.value]===-1){matchType='tag';found=true;}}if(!found){prevToken=token;token=iterator.stepForward();i=0;}}while(token&&!found);if(!matchType)return;var range,pos;if(matchType==='bracket'){range=this.session.getBracketRange(cursor);if(!range){range=new Range(iterator.getCurrentTokenRow(),iterator.getCurrentTokenColumn()+i-1,iterator.getCurrentTokenRow(),iterator.getCurrentTokenColumn()+i-1);pos=range.start;if(expand||pos.row===cursor.row&&Math.abs(pos.column-cursor.column)<2)range=this.session.getBracketRange(pos);}}else if(matchType==='tag'){if(token&&token.type.indexOf('tag-name')!==-1)var tag=token.value;else return;range=new Range(iterator.getCurrentTokenRow(),iterator.getCurrentTokenColumn()-2,iterator.getCurrentTokenRow(),iterator.getCurrentTokenColumn()-2);if(range.compare(cursor.row,cursor.column)===0){found=false;do{token=prevToken;prevToken=iterator.stepBackward();if(prevToken){if(prevToken.type.indexOf('tag-close')!==-1){range.setEnd(iterator.getCurrentTokenRow(),iterator.getCurrentTokenColumn()+1);}if(token.value===tag&&token.type.indexOf('tag-name')!==-1){if(prevToken.value==='<'){depth[tag]++;}else if(prevToken.value==='</'){depth[tag]--;}if(depth[tag]===0)found=true;}}}while(prevToken&&!found);}if(token&&token.type.indexOf('tag-name')){pos=range.start;if(pos.row==cursor.row&&Math.abs(pos.column-cursor.column)<2)pos=range.end;}}pos=range&&range.cursor||pos;if(pos){if(select){if(range&&expand){this.selection.setRange(range);}else if(range&&range.isEqual(this.getSelectionRange())){this.clearSelection();}else{this.selection.selectTo(pos.row,pos.column);}}else{this.selection.moveTo(pos.row,pos.column);}}};this.gotoLine=function(lineNumber,column,animate){this.selection.clearSelection();this.session.unfold({row:lineNumber-1,column:column||0});this.$blockScrolling+=1;this.exitMultiSelectMode&&this.exitMultiSelectMode();this.moveCursorTo(lineNumber-1,column||0);this.$blockScrolling-=1;if(!this.isRowFullyVisible(lineNumber-1))this.scrollToLine(lineNumber-1,true,animate);};this.navigateTo=function(row,column){this.selection.moveTo(row,column);};this.navigateUp=function(times){if(this.selection.isMultiLine()&&!this.selection.isBackwards()){var selectionStart=this.selection.anchor.getPosition();return this.moveCursorToPosition(selectionStart);}this.selection.clearSelection();this.selection.moveCursorBy(-times||-1,0);};this.navigateDown=function(times){if(this.selection.isMultiLine()&&this.selection.isBackwards()){var selectionEnd=this.selection.anchor.getPosition();return this.moveCursorToPosition(selectionEnd);}this.selection.clearSelection();this.selection.moveCursorBy(times||1,0);};this.navigateLeft=function(times){if(!this.selection.isEmpty()){var selectionStart=this.getSelectionRange().start;this.moveCursorToPosition(selectionStart);}else{times=times||1;while(times--){this.selection.moveCursorLeft();}}this.clearSelection();};this.navigateRight=function(times){if(!this.selection.isEmpty()){var selectionEnd=this.getSelectionRange().end;this.moveCursorToPosition(selectionEnd);}else{times=times||1;while(times--){this.selection.moveCursorRight();}}this.clearSelection();};this.navigateLineStart=function(){this.selection.moveCursorLineStart();this.clearSelection();};this.navigateLineEnd=function(){this.selection.moveCursorLineEnd();this.clearSelection();};this.navigateFileEnd=function(){this.selection.moveCursorFileEnd();this.clearSelection();};this.navigateFileStart=function(){this.selection.moveCursorFileStart();this.clearSelection();};this.navigateWordRight=function(){this.selection.moveCursorWordRight();this.clearSelection();};this.navigateWordLeft=function(){this.selection.moveCursorWordLeft();this.clearSelection();};this.replace=function(replacement,options){if(options)this.$search.set(options);var range=this.$search.find(this.session);var replaced=0;if(!range)return replaced;if(this.$tryReplace(range,replacement)){replaced=1;}if(range!==null){this.selection.setSelectionRange(range);this.renderer.scrollSelectionIntoView(range.start,range.end);}return replaced;};this.replaceAll=function(replacement,options){if(options){this.$search.set(options);}var ranges=this.$search.findAll(this.session);var replaced=0;if(!ranges.length)return replaced;this.$blockScrolling+=1;var selection=this.getSelectionRange();this.selection.moveTo(0,0);for(var i=ranges.length-1;i>=0;--i){if(this.$tryReplace(ranges[i],replacement)){replaced++;}}this.selection.setSelectionRange(selection);this.$blockScrolling-=1;return replaced;};this.$tryReplace=function(range,replacement){var input=this.session.getTextRange(range);replacement=this.$search.replace(input,replacement);if(replacement!==null){range.end=this.session.replace(range,replacement);return range;}else{return null;}};this.getLastSearchOptions=function(){return this.$search.getOptions();};this.find=function(needle,options,animate){if(!options)options={};if(typeof needle==\"string\"||needle instanceof RegExp)options.needle=needle;else if(typeof needle==\"object\")oop.mixin(options,needle);var range=this.selection.getRange();if(options.needle==null){needle=this.session.getTextRange(range)||this.$search.$options.needle;if(!needle){range=this.session.getWordRange(range.start.row,range.start.column);needle=this.session.getTextRange(range);}this.$search.set({needle:needle});}this.$search.set(options);if(!options.start)this.$search.set({start:range});var newRange=this.$search.find(this.session);if(options.preventScroll)return newRange;if(newRange){this.revealRange(newRange,animate);return newRange;}if(options.backwards)range.start=range.end;else range.end=range.start;this.selection.setRange(range);};this.findNext=function(options,animate){this.find({skipCurrent:true,backwards:false},options,animate);};this.findPrevious=function(options,animate){this.find(options,{skipCurrent:true,backwards:true},animate);};this.revealRange=function(range,animate){this.$blockScrolling+=1;this.session.unfold(range);this.selection.setSelectionRange(range);this.$blockScrolling-=1;var scrollTop=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(range.start,range.end,0.5);if(animate!==false)this.renderer.animateScrolling(scrollTop);};this.undo=function(){this.$blockScrolling++;this.session.getUndoManager().undo();this.$blockScrolling--;this.renderer.scrollCursorIntoView(null,0.5);};this.redo=function(){this.$blockScrolling++;this.session.getUndoManager().redo();this.$blockScrolling--;this.renderer.scrollCursorIntoView(null,0.5);};this.destroy=function(){this.renderer.destroy();this._signal(\"destroy\",this);if(this.session){this.session.destroy();}};this.setAutoScrollEditorIntoView=function(enable){if(!enable)return;var rect;var self=this;var shouldScroll=false;if(!this.$scrollAnchor)this.$scrollAnchor=document.createElement(\"div\");var scrollAnchor=this.$scrollAnchor;scrollAnchor.style.cssText=\"position:absolute\";this.container.insertBefore(scrollAnchor,this.container.firstChild);var onChangeSelection=this.on(\"changeSelection\",function(){shouldScroll=true;});var onBeforeRender=this.renderer.on(\"beforeRender\",function(){if(shouldScroll)rect=self.renderer.container.getBoundingClientRect();});var onAfterRender=this.renderer.on(\"afterRender\",function(){if(shouldScroll&&rect&&(self.isFocused()||self.searchBox&&self.searchBox.isFocused())){var renderer=self.renderer;var pos=renderer.$cursorLayer.$pixelPos;var config=renderer.layerConfig;var top=pos.top-config.offset;if(pos.top>=0&&top+rect.top<0){shouldScroll=true;}else if(pos.top<config.height&&pos.top+rect.top+config.lineHeight>window.innerHeight){shouldScroll=false;}else{shouldScroll=null;}if(shouldScroll!=null){scrollAnchor.style.top=top+\"px\";scrollAnchor.style.left=pos.left+\"px\";scrollAnchor.style.height=config.lineHeight+\"px\";scrollAnchor.scrollIntoView(shouldScroll);}shouldScroll=rect=null;}});this.setAutoScrollEditorIntoView=function(enable){if(enable)return;delete this.setAutoScrollEditorIntoView;this.off(\"changeSelection\",onChangeSelection);this.renderer.off(\"afterRender\",onAfterRender);this.renderer.off(\"beforeRender\",onBeforeRender);};};this.$resetCursorStyle=function(){var style=this.$cursorStyle||\"ace\";var cursorLayer=this.renderer.$cursorLayer;if(!cursorLayer)return;cursorLayer.setSmoothBlinking(/smooth/.test(style));cursorLayer.isBlinking=!this.$readOnly&&style!=\"wide\";dom.setCssClass(cursorLayer.element,\"ace_slim-cursors\",/slim/.test(style));};}).call(Editor.prototype);config.defineOptions(Editor.prototype,\"editor\",{selectionStyle:{set:function(style){this.onSelectionChange();this._signal(\"changeSelectionStyle\",{data:style});},initialValue:\"line\"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine();},initialValue:true},highlightSelectedWord:{set:function(shouldHighlight){this.$onSelectionChange();},initialValue:true},readOnly:{set:function(readOnly){this.$resetCursorStyle();},initialValue:false},cursorStyle:{set:function(val){this.$resetCursorStyle();},values:[\"ace\",\"slim\",\"smooth\",\"wide\"],initialValue:\"ace\"},mergeUndoDeltas:{values:[false,true,\"always\"],initialValue:true},behavioursEnabled:{initialValue:true},wrapBehavioursEnabled:{initialValue:true},autoScrollEditorIntoView:{set:function(val){this.setAutoScrollEditorIntoView(val);}},keyboardHandler:{set:function(val){this.setKeyboardHandler(val);},get:function(){return this.keybindingId;},handlesSet:true},hScrollBarAlwaysVisible:\"renderer\",vScrollBarAlwaysVisible:\"renderer\",highlightGutterLine:\"renderer\",animatedScroll:\"renderer\",showInvisibles:\"renderer\",showPrintMargin:\"renderer\",printMarginColumn:\"renderer\",printMargin:\"renderer\",fadeFoldWidgets:\"renderer\",showFoldWidgets:\"renderer\",showLineNumbers:\"renderer\",showGutter:\"renderer\",displayIndentGuides:\"renderer\",fontSize:\"renderer\",fontFamily:\"renderer\",maxLines:\"renderer\",minLines:\"renderer\",scrollPastEnd:\"renderer\",fixedWidthGutter:\"renderer\",theme:\"renderer\",scrollSpeed:\"$mouseHandler\",dragDelay:\"$mouseHandler\",dragEnabled:\"$mouseHandler\",focusTimout:\"$mouseHandler\",tooltipFollowsMouse:\"$mouseHandler\",firstLineNumber:\"session\",overwrite:\"session\",newLineMode:\"session\",useWorker:\"session\",useSoftTabs:\"session\",tabSize:\"session\",wrap:\"session\",indentedSoftWrap:\"session\",foldStyle:\"session\",mode:\"session\"});exports.Editor=Editor;});ace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\"],function(acequire,exports,module){\"use strict\";var UndoManager=function(){this.reset();};(function(){this.execute=function(options){var deltaSets=options.args[0];this.$doc=options.args[1];if(options.merge&&this.hasUndo()){this.dirtyCounter--;deltaSets=this.$undoStack.pop().concat(deltaSets);}this.$undoStack.push(deltaSets);this.$redoStack=[];if(this.dirtyCounter<0){this.dirtyCounter=NaN;}this.dirtyCounter++;};this.undo=function(dontSelect){var deltaSets=this.$undoStack.pop();var undoSelectionRange=null;if(deltaSets){undoSelectionRange=this.$doc.undoChanges(deltaSets,dontSelect);this.$redoStack.push(deltaSets);this.dirtyCounter--;}return undoSelectionRange;};this.redo=function(dontSelect){var deltaSets=this.$redoStack.pop();var redoSelectionRange=null;if(deltaSets){redoSelectionRange=this.$doc.redoChanges(this.$deserializeDeltas(deltaSets),dontSelect);this.$undoStack.push(deltaSets);this.dirtyCounter++;}return redoSelectionRange;};this.reset=function(){this.$undoStack=[];this.$redoStack=[];this.dirtyCounter=0;};this.hasUndo=function(){return this.$undoStack.length>0;};this.hasRedo=function(){return this.$redoStack.length>0;};this.markClean=function(){this.dirtyCounter=0;};this.isClean=function(){return this.dirtyCounter===0;};this.$serializeDeltas=function(deltaSets){return cloneDeltaSetsObj(deltaSets,$serializeDelta);};this.$deserializeDeltas=function(deltaSets){return cloneDeltaSetsObj(deltaSets,$deserializeDelta);};function $serializeDelta(delta){return{action:delta.action,start:delta.start,end:delta.end,lines:delta.lines.length==1?null:delta.lines,text:delta.lines.length==1?delta.lines[0]:null};}function $deserializeDelta(delta){return{action:delta.action,start:delta.start,end:delta.end,lines:delta.lines||[delta.text]};}function cloneDeltaSetsObj(deltaSets_old,fnGetModifiedDelta){var deltaSets_new=new Array(deltaSets_old.length);for(var i=0;i<deltaSets_old.length;i++){var deltaSet_old=deltaSets_old[i];var deltaSet_new={group:deltaSet_old.group,deltas:new Array(deltaSet_old.length)};for(var j=0;j<deltaSet_old.deltas.length;j++){var delta_old=deltaSet_old.deltas[j];deltaSet_new.deltas[j]=fnGetModifiedDelta(delta_old);}deltaSets_new[i]=deltaSet_new;}return deltaSets_new;}}).call(UndoManager.prototype);exports.UndoManager=UndoManager;});ace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\"],function(acequire,exports,module){\"use strict\";var dom=acequire(\"../lib/dom\");var oop=acequire(\"../lib/oop\");var lang=acequire(\"../lib/lang\");var EventEmitter=acequire(\"../lib/event_emitter\").EventEmitter;var Gutter=function(parentEl){this.element=dom.createElement(\"div\");this.element.className=\"ace_layer ace_gutter-layer\";parentEl.appendChild(this.element);this.setShowFoldWidgets(this.$showFoldWidgets);this.gutterWidth=0;this.$annotations=[];this.$updateAnnotations=this.$updateAnnotations.bind(this);this.$cells=[];};(function(){oop.implement(this,EventEmitter);this.setSession=function(session){if(this.session)this.session.removeEventListener(\"change\",this.$updateAnnotations);this.session=session;if(session)session.on(\"change\",this.$updateAnnotations);};this.addGutterDecoration=function(row,className){if(window.console)console.warn&&console.warn(\"deprecated use session.addGutterDecoration\");this.session.addGutterDecoration(row,className);};this.removeGutterDecoration=function(row,className){if(window.console)console.warn&&console.warn(\"deprecated use session.removeGutterDecoration\");this.session.removeGutterDecoration(row,className);};this.setAnnotations=function(annotations){this.$annotations=[];for(var i=0;i<annotations.length;i++){var annotation=annotations[i];var row=annotation.row;var rowInfo=this.$annotations[row];if(!rowInfo)rowInfo=this.$annotations[row]={text:[]};var annoText=annotation.text;annoText=annoText?lang.escapeHTML(annoText):annotation.html||\"\";if(rowInfo.text.indexOf(annoText)===-1)rowInfo.text.push(annoText);var type=annotation.type;if(type==\"error\")rowInfo.className=\" ace_error\";else if(type==\"warning\"&&rowInfo.className!=\" ace_error\")rowInfo.className=\" ace_warning\";else if(type==\"info\"&&!rowInfo.className)rowInfo.className=\" ace_info\";}};this.$updateAnnotations=function(delta){if(!this.$annotations.length)return;var firstRow=delta.start.row;var len=delta.end.row-firstRow;if(len===0){}else if(delta.action=='remove'){this.$annotations.splice(firstRow,len+1,null);}else{var args=new Array(len+1);args.unshift(firstRow,1);this.$annotations.splice.apply(this.$annotations,args);}};this.update=function(config){var session=this.session;var firstRow=config.firstRow;var lastRow=Math.min(config.lastRow+config.gutterOffset,// needed to compensate for hor scollbar\nsession.getLength()-1);var fold=session.getNextFoldLine(firstRow);var foldStart=fold?fold.start.row:Infinity;var foldWidgets=this.$showFoldWidgets&&session.foldWidgets;var breakpoints=session.$breakpoints;var decorations=session.$decorations;var firstLineNumber=session.$firstLineNumber;var lastLineNumber=0;var gutterRenderer=session.gutterRenderer||this.$renderer;var cell=null;var index=-1;var row=firstRow;while(true){if(row>foldStart){row=fold.end.row+1;fold=session.getNextFoldLine(row,fold);foldStart=fold?fold.start.row:Infinity;}if(row>lastRow){while(this.$cells.length>index+1){cell=this.$cells.pop();this.element.removeChild(cell.element);}break;}cell=this.$cells[++index];if(!cell){cell={element:null,textNode:null,foldWidget:null};cell.element=dom.createElement(\"div\");cell.textNode=document.createTextNode('');cell.element.appendChild(cell.textNode);this.element.appendChild(cell.element);this.$cells[index]=cell;}var className=\"ace_gutter-cell \";if(breakpoints[row])className+=breakpoints[row];if(decorations[row])className+=decorations[row];if(this.$annotations[row])className+=this.$annotations[row].className;if(cell.element.className!=className)cell.element.className=className;var height=session.getRowLength(row)*config.lineHeight+\"px\";if(height!=cell.element.style.height)cell.element.style.height=height;if(foldWidgets){var c=foldWidgets[row];if(c==null)c=foldWidgets[row]=session.getFoldWidget(row);}if(c){if(!cell.foldWidget){cell.foldWidget=dom.createElement(\"span\");cell.element.appendChild(cell.foldWidget);}var className=\"ace_fold-widget ace_\"+c;if(c==\"start\"&&row==foldStart&&row<fold.end.row)className+=\" ace_closed\";else className+=\" ace_open\";if(cell.foldWidget.className!=className)cell.foldWidget.className=className;var height=config.lineHeight+\"px\";if(cell.foldWidget.style.height!=height)cell.foldWidget.style.height=height;}else{if(cell.foldWidget){cell.element.removeChild(cell.foldWidget);cell.foldWidget=null;}}var text=lastLineNumber=gutterRenderer?gutterRenderer.getText(session,row):row+firstLineNumber;if(text!=cell.textNode.data)cell.textNode.data=text;row++;}this.element.style.height=config.minHeight+\"px\";if(this.$fixedWidth||session.$useWrapMode)lastLineNumber=session.getLength()+firstLineNumber;var gutterWidth=gutterRenderer?gutterRenderer.getWidth(session,lastLineNumber,config):lastLineNumber.toString().length*config.characterWidth;var padding=this.$padding||this.$computePadding();gutterWidth+=padding.left+padding.right;if(gutterWidth!==this.gutterWidth&&!isNaN(gutterWidth)){this.gutterWidth=gutterWidth;this.element.style.width=Math.ceil(this.gutterWidth)+\"px\";this._emit(\"changeGutterWidth\",gutterWidth);}};this.$fixedWidth=false;this.$showLineNumbers=true;this.$renderer=\"\";this.setShowLineNumbers=function(show){this.$renderer=!show&&{getWidth:function(){return\"\";},getText:function(){return\"\";}};};this.getShowLineNumbers=function(){return this.$showLineNumbers;};this.$showFoldWidgets=true;this.setShowFoldWidgets=function(show){if(show)dom.addCssClass(this.element,\"ace_folding-enabled\");else dom.removeCssClass(this.element,\"ace_folding-enabled\");this.$showFoldWidgets=show;this.$padding=null;};this.getShowFoldWidgets=function(){return this.$showFoldWidgets;};this.$computePadding=function(){if(!this.element.firstChild)return{left:0,right:0};var style=dom.computedStyle(this.element.firstChild);this.$padding={};this.$padding.left=parseInt(style.paddingLeft)+1||0;this.$padding.right=parseInt(style.paddingRight)||0;return this.$padding;};this.getRegion=function(point){var padding=this.$padding||this.$computePadding();var rect=this.element.getBoundingClientRect();if(point.x<padding.left+rect.left)return\"markers\";if(this.$showFoldWidgets&&point.x>rect.right-padding.right)return\"foldWidgets\";};}).call(Gutter.prototype);exports.Gutter=Gutter;});ace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"],function(acequire,exports,module){\"use strict\";var Range=acequire(\"../range\").Range;var dom=acequire(\"../lib/dom\");var Marker=function(parentEl){this.element=dom.createElement(\"div\");this.element.className=\"ace_layer ace_marker-layer\";parentEl.appendChild(this.element);};(function(){this.$padding=0;this.setPadding=function(padding){this.$padding=padding;};this.setSession=function(session){this.session=session;};this.setMarkers=function(markers){this.markers=markers;};this.update=function(config){var config=config||this.config;if(!config)return;this.config=config;var html=[];for(var key in this.markers){var marker=this.markers[key];if(!marker.range){marker.update(html,this,this.session,config);continue;}var range=marker.range.clipRows(config.firstRow,config.lastRow);if(range.isEmpty())continue;range=range.toScreenRange(this.session);if(marker.renderer){var top=this.$getTop(range.start.row,config);var left=this.$padding+range.start.column*config.characterWidth;marker.renderer(html,range,left,top,config);}else if(marker.type==\"fullLine\"){this.drawFullLineMarker(html,range,marker.clazz,config);}else if(marker.type==\"screenLine\"){this.drawScreenLineMarker(html,range,marker.clazz,config);}else if(range.isMultiLine()){if(marker.type==\"text\")this.drawTextMarker(html,range,marker.clazz,config);else this.drawMultiLineMarker(html,range,marker.clazz,config);}else{this.drawSingleLineMarker(html,range,marker.clazz+\" ace_start\"+\" ace_br15\",config);}}this.element.innerHTML=html.join(\"\");};this.$getTop=function(row,layerConfig){return(row-layerConfig.firstRowScreen)*layerConfig.lineHeight;};function getBorderClass(tl,tr,br,bl){return(tl?1:0)|(tr?2:0)|(br?4:0)|(bl?8:0);}this.drawTextMarker=function(stringBuilder,range,clazz,layerConfig,extraStyle){var session=this.session;var start=range.start.row;var end=range.end.row;var row=start;var prev=0;var curr=0;var next=session.getScreenLastRowColumn(row);var lineRange=new Range(row,range.start.column,row,curr);for(;row<=end;row++){lineRange.start.row=lineRange.end.row=row;lineRange.start.column=row==start?range.start.column:session.getRowWrapIndent(row);lineRange.end.column=next;prev=curr;curr=next;next=row+1<end?session.getScreenLastRowColumn(row+1):row==end?0:range.end.column;this.drawSingleLineMarker(stringBuilder,lineRange,clazz+(row==start?\" ace_start\":\"\")+\" ace_br\"+getBorderClass(row==start||row==start+1&&range.start.column,prev<curr,curr>next,row==end),layerConfig,row==end?0:1,extraStyle);}};this.drawMultiLineMarker=function(stringBuilder,range,clazz,config,extraStyle){var padding=this.$padding;var height=config.lineHeight;var top=this.$getTop(range.start.row,config);var left=padding+range.start.column*config.characterWidth;extraStyle=extraStyle||\"\";stringBuilder.push(\"<div class='\",clazz,\" ace_br1 ace_start' style='\",\"height:\",height,\"px;\",\"right:0;\",\"top:\",top,\"px;\",\"left:\",left,\"px;\",extraStyle,\"'></div>\");top=this.$getTop(range.end.row,config);var width=range.end.column*config.characterWidth;stringBuilder.push(\"<div class='\",clazz,\" ace_br12' style='\",\"height:\",height,\"px;\",\"width:\",width,\"px;\",\"top:\",top,\"px;\",\"left:\",padding,\"px;\",extraStyle,\"'></div>\");height=(range.end.row-range.start.row-1)*config.lineHeight;if(height<=0)return;top=this.$getTop(range.start.row+1,config);var radiusClass=(range.start.column?1:0)|(range.end.column?0:8);stringBuilder.push(\"<div class='\",clazz,radiusClass?\" ace_br\"+radiusClass:\"\",\"' style='\",\"height:\",height,\"px;\",\"right:0;\",\"top:\",top,\"px;\",\"left:\",padding,\"px;\",extraStyle,\"'></div>\");};this.drawSingleLineMarker=function(stringBuilder,range,clazz,config,extraLength,extraStyle){var height=config.lineHeight;var width=(range.end.column+(extraLength||0)-range.start.column)*config.characterWidth;var top=this.$getTop(range.start.row,config);var left=this.$padding+range.start.column*config.characterWidth;stringBuilder.push(\"<div class='\",clazz,\"' style='\",\"height:\",height,\"px;\",\"width:\",width,\"px;\",\"top:\",top,\"px;\",\"left:\",left,\"px;\",extraStyle||\"\",\"'></div>\");};this.drawFullLineMarker=function(stringBuilder,range,clazz,config,extraStyle){var top=this.$getTop(range.start.row,config);var height=config.lineHeight;if(range.start.row!=range.end.row)height+=this.$getTop(range.end.row,config)-top;stringBuilder.push(\"<div class='\",clazz,\"' style='\",\"height:\",height,\"px;\",\"top:\",top,\"px;\",\"left:0;right:0;\",extraStyle||\"\",\"'></div>\");};this.drawScreenLineMarker=function(stringBuilder,range,clazz,config,extraStyle){var top=this.$getTop(range.start.row,config);var height=config.lineHeight;stringBuilder.push(\"<div class='\",clazz,\"' style='\",\"height:\",height,\"px;\",\"top:\",top,\"px;\",\"left:0;right:0;\",extraStyle||\"\",\"'></div>\");};}).call(Marker.prototype);exports.Marker=Marker;});ace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"],function(acequire,exports,module){\"use strict\";var oop=acequire(\"../lib/oop\");var dom=acequire(\"../lib/dom\");var lang=acequire(\"../lib/lang\");var useragent=acequire(\"../lib/useragent\");var EventEmitter=acequire(\"../lib/event_emitter\").EventEmitter;var Text=function(parentEl){this.element=dom.createElement(\"div\");this.element.className=\"ace_layer ace_text-layer\";parentEl.appendChild(this.element);this.$updateEolChar=this.$updateEolChar.bind(this);};(function(){oop.implement(this,EventEmitter);this.EOF_CHAR=\"\\xB6\";this.EOL_CHAR_LF=\"\\xAC\";this.EOL_CHAR_CRLF=\"\\xa4\";this.EOL_CHAR=this.EOL_CHAR_LF;this.TAB_CHAR=\"\\u2014\";//\"\\u21E5\";\nthis.SPACE_CHAR=\"\\xB7\";this.$padding=0;this.$updateEolChar=function(){var EOL_CHAR=this.session.doc.getNewLineCharacter()==\"\\n\"?this.EOL_CHAR_LF:this.EOL_CHAR_CRLF;if(this.EOL_CHAR!=EOL_CHAR){this.EOL_CHAR=EOL_CHAR;return true;}};this.setPadding=function(padding){this.$padding=padding;this.element.style.padding=\"0 \"+padding+\"px\";};this.getLineHeight=function(){return this.$fontMetrics.$characterSize.height||0;};this.getCharacterWidth=function(){return this.$fontMetrics.$characterSize.width||0;};this.$setFontMetrics=function(measure){this.$fontMetrics=measure;this.$fontMetrics.on(\"changeCharacterSize\",function(e){this._signal(\"changeCharacterSize\",e);}.bind(this));this.$pollSizeChanges();};this.checkForSizeChanges=function(){this.$fontMetrics.checkForSizeChanges();};this.$pollSizeChanges=function(){return this.$pollSizeChangesTimer=this.$fontMetrics.$pollSizeChanges();};this.setSession=function(session){this.session=session;if(session)this.$computeTabString();};this.showInvisibles=false;this.setShowInvisibles=function(showInvisibles){if(this.showInvisibles==showInvisibles)return false;this.showInvisibles=showInvisibles;this.$computeTabString();return true;};this.displayIndentGuides=true;this.setDisplayIndentGuides=function(display){if(this.displayIndentGuides==display)return false;this.displayIndentGuides=display;this.$computeTabString();return true;};this.$tabStrings=[];this.onChangeTabSize=this.$computeTabString=function(){var tabSize=this.session.getTabSize();this.tabSize=tabSize;var tabStr=this.$tabStrings=[0];for(var i=1;i<tabSize+1;i++){if(this.showInvisibles){tabStr.push(\"<span class='ace_invisible ace_invisible_tab'>\"+lang.stringRepeat(this.TAB_CHAR,i)+\"</span>\");}else{tabStr.push(lang.stringRepeat(\" \",i));}}if(this.displayIndentGuides){this.$indentGuideRe=/\\s\\S| \\t|\\t |\\s$/;var className=\"ace_indent-guide\";var spaceClass=\"\";var tabClass=\"\";if(this.showInvisibles){className+=\" ace_invisible\";spaceClass=\" ace_invisible_space\";tabClass=\" ace_invisible_tab\";var spaceContent=lang.stringRepeat(this.SPACE_CHAR,this.tabSize);var tabContent=lang.stringRepeat(this.TAB_CHAR,this.tabSize);}else{var spaceContent=lang.stringRepeat(\" \",this.tabSize);var tabContent=spaceContent;}this.$tabStrings[\" \"]=\"<span class='\"+className+spaceClass+\"'>\"+spaceContent+\"</span>\";this.$tabStrings[\"\\t\"]=\"<span class='\"+className+tabClass+\"'>\"+tabContent+\"</span>\";}};this.updateLines=function(config,firstRow,lastRow){if(this.config.lastRow!=config.lastRow||this.config.firstRow!=config.firstRow){this.scrollLines(config);}this.config=config;var first=Math.max(firstRow,config.firstRow);var last=Math.min(lastRow,config.lastRow);var lineElements=this.element.childNodes;var lineElementsIdx=0;for(var row=config.firstRow;row<first;row++){var foldLine=this.session.getFoldLine(row);if(foldLine){if(foldLine.containsRow(first)){first=foldLine.start.row;break;}else{row=foldLine.end.row;}}lineElementsIdx++;}var row=first;var foldLine=this.session.getNextFoldLine(row);var foldStart=foldLine?foldLine.start.row:Infinity;while(true){if(row>foldStart){row=foldLine.end.row+1;foldLine=this.session.getNextFoldLine(row,foldLine);foldStart=foldLine?foldLine.start.row:Infinity;}if(row>last)break;var lineElement=lineElements[lineElementsIdx++];if(lineElement){var html=[];this.$renderLine(html,row,!this.$useLineGroups(),row==foldStart?foldLine:false);lineElement.style.height=config.lineHeight*this.session.getRowLength(row)+\"px\";lineElement.innerHTML=html.join(\"\");}row++;}};this.scrollLines=function(config){var oldConfig=this.config;this.config=config;if(!oldConfig||oldConfig.lastRow<config.firstRow)return this.update(config);if(config.lastRow<oldConfig.firstRow)return this.update(config);var el=this.element;if(oldConfig.firstRow<config.firstRow)for(var row=this.session.getFoldedRowCount(oldConfig.firstRow,config.firstRow-1);row>0;row--)el.removeChild(el.firstChild);if(oldConfig.lastRow>config.lastRow)for(var row=this.session.getFoldedRowCount(config.lastRow+1,oldConfig.lastRow);row>0;row--)el.removeChild(el.lastChild);if(config.firstRow<oldConfig.firstRow){var fragment=this.$renderLinesFragment(config,config.firstRow,oldConfig.firstRow-1);if(el.firstChild)el.insertBefore(fragment,el.firstChild);else el.appendChild(fragment);}if(config.lastRow>oldConfig.lastRow){var fragment=this.$renderLinesFragment(config,oldConfig.lastRow+1,config.lastRow);el.appendChild(fragment);}};this.$renderLinesFragment=function(config,firstRow,lastRow){var fragment=this.element.ownerDocument.createDocumentFragment();var row=firstRow;var foldLine=this.session.getNextFoldLine(row);var foldStart=foldLine?foldLine.start.row:Infinity;while(true){if(row>foldStart){row=foldLine.end.row+1;foldLine=this.session.getNextFoldLine(row,foldLine);foldStart=foldLine?foldLine.start.row:Infinity;}if(row>lastRow)break;var container=dom.createElement(\"div\");var html=[];this.$renderLine(html,row,false,row==foldStart?foldLine:false);container.innerHTML=html.join(\"\");if(this.$useLineGroups()){container.className='ace_line_group';fragment.appendChild(container);container.style.height=config.lineHeight*this.session.getRowLength(row)+\"px\";}else{while(container.firstChild)fragment.appendChild(container.firstChild);}row++;}return fragment;};this.update=function(config){this.config=config;var html=[];var firstRow=config.firstRow,lastRow=config.lastRow;var row=firstRow;var foldLine=this.session.getNextFoldLine(row);var foldStart=foldLine?foldLine.start.row:Infinity;while(true){if(row>foldStart){row=foldLine.end.row+1;foldLine=this.session.getNextFoldLine(row,foldLine);foldStart=foldLine?foldLine.start.row:Infinity;}if(row>lastRow)break;if(this.$useLineGroups())html.push(\"<div class='ace_line_group' style='height:\",config.lineHeight*this.session.getRowLength(row),\"px'>\");this.$renderLine(html,row,false,row==foldStart?foldLine:false);if(this.$useLineGroups())html.push(\"</div>\");// end the line group\nrow++;}this.element.innerHTML=html.join(\"\");};this.$textToken={\"text\":true,\"rparen\":true,\"lparen\":true};this.$renderToken=function(stringBuilder,screenColumn,token,value){var self=this;var replaceReg=/\\t|&|<|>|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF\\uFFF9-\\uFFFC])|[\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3000-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]/g;var replaceFunc=function(c,a,b,tabIdx,idx4){if(a){return self.showInvisibles?\"<span class='ace_invisible ace_invisible_space'>\"+lang.stringRepeat(self.SPACE_CHAR,c.length)+\"</span>\":c;}else if(c==\"&\"){return\"&#38;\";}else if(c==\"<\"){return\"&#60;\";}else if(c==\">\"){return\"&#62;\";}else if(c==\"\\t\"){var tabSize=self.session.getScreenTabSize(screenColumn+tabIdx);screenColumn+=tabSize-1;return self.$tabStrings[tabSize];}else if(c==\"\\u3000\"){var classToUse=self.showInvisibles?\"ace_cjk ace_invisible ace_invisible_space\":\"ace_cjk\";var space=self.showInvisibles?self.SPACE_CHAR:\"\";screenColumn+=1;return\"<span class='\"+classToUse+\"' style='width:\"+self.config.characterWidth*2+\"px'>\"+space+\"</span>\";}else if(b){return\"<span class='ace_invisible ace_invisible_space ace_invalid'>\"+self.SPACE_CHAR+\"</span>\";}else{screenColumn+=1;return\"<span class='ace_cjk' style='width:\"+self.config.characterWidth*2+\"px'>\"+c+\"</span>\";}};var output=value.replace(replaceReg,replaceFunc);if(!this.$textToken[token.type]){var classes=\"ace_\"+token.type.replace(/\\./g,\" ace_\");var style=\"\";if(token.type==\"fold\")style=\" style='width:\"+token.value.length*this.config.characterWidth+\"px;' \";stringBuilder.push(\"<span class='\",classes,\"'\",style,\">\",output,\"</span>\");}else{stringBuilder.push(output);}return screenColumn+value.length;};this.renderIndentGuide=function(stringBuilder,value,max){var cols=value.search(this.$indentGuideRe);if(cols<=0||cols>=max)return value;if(value[0]==\" \"){cols-=cols%this.tabSize;stringBuilder.push(lang.stringRepeat(this.$tabStrings[\" \"],cols/this.tabSize));return value.substr(cols);}else if(value[0]==\"\\t\"){stringBuilder.push(lang.stringRepeat(this.$tabStrings[\"\\t\"],cols));return value.substr(cols);}return value;};this.$renderWrappedLine=function(stringBuilder,tokens,splits,onlyContents){var chars=0;var split=0;var splitChars=splits[0];var screenColumn=0;for(var i=0;i<tokens.length;i++){var token=tokens[i];var value=token.value;if(i==0&&this.displayIndentGuides){chars=value.length;value=this.renderIndentGuide(stringBuilder,value,splitChars);if(!value)continue;chars-=value.length;}if(chars+value.length<splitChars){screenColumn=this.$renderToken(stringBuilder,screenColumn,token,value);chars+=value.length;}else{while(chars+value.length>=splitChars){screenColumn=this.$renderToken(stringBuilder,screenColumn,token,value.substring(0,splitChars-chars));value=value.substring(splitChars-chars);chars=splitChars;if(!onlyContents){stringBuilder.push(\"</div>\",\"<div class='ace_line' style='height:\",this.config.lineHeight,\"px'>\");}stringBuilder.push(lang.stringRepeat(\"\\xa0\",splits.indent));split++;screenColumn=0;splitChars=splits[split]||Number.MAX_VALUE;}if(value.length!=0){chars+=value.length;screenColumn=this.$renderToken(stringBuilder,screenColumn,token,value);}}}};this.$renderSimpleLine=function(stringBuilder,tokens){var screenColumn=0;var token=tokens[0];var value=token.value;if(this.displayIndentGuides)value=this.renderIndentGuide(stringBuilder,value);if(value)screenColumn=this.$renderToken(stringBuilder,screenColumn,token,value);for(var i=1;i<tokens.length;i++){token=tokens[i];value=token.value;screenColumn=this.$renderToken(stringBuilder,screenColumn,token,value);}};this.$renderLine=function(stringBuilder,row,onlyContents,foldLine){if(!foldLine&&foldLine!=false)foldLine=this.session.getFoldLine(row);if(foldLine)var tokens=this.$getFoldLineTokens(row,foldLine);else var tokens=this.session.getTokens(row);if(!onlyContents){stringBuilder.push(\"<div class='ace_line' style='height:\",this.config.lineHeight*(this.$useLineGroups()?1:this.session.getRowLength(row)),\"px'>\");}if(tokens.length){var splits=this.session.getRowSplitData(row);if(splits&&splits.length)this.$renderWrappedLine(stringBuilder,tokens,splits,onlyContents);else this.$renderSimpleLine(stringBuilder,tokens);}if(this.showInvisibles){if(foldLine)row=foldLine.end.row;stringBuilder.push(\"<span class='ace_invisible ace_invisible_eol'>\",row==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,\"</span>\");}if(!onlyContents)stringBuilder.push(\"</div>\");};this.$getFoldLineTokens=function(row,foldLine){var session=this.session;var renderTokens=[];function addTokens(tokens,from,to){var idx=0,col=0;while(col+tokens[idx].value.length<from){col+=tokens[idx].value.length;idx++;if(idx==tokens.length)return;}if(col!=from){var value=tokens[idx].value.substring(from-col);if(value.length>to-from)value=value.substring(0,to-from);renderTokens.push({type:tokens[idx].type,value:value});col=from+value.length;idx+=1;}while(col<to&&idx<tokens.length){var value=tokens[idx].value;if(value.length+col>to){renderTokens.push({type:tokens[idx].type,value:value.substring(0,to-col)});}else renderTokens.push(tokens[idx]);col+=value.length;idx+=1;}}var tokens=session.getTokens(row);foldLine.walk(function(placeholder,row,column,lastColumn,isNewRow){if(placeholder!=null){renderTokens.push({type:\"fold\",value:placeholder});}else{if(isNewRow)tokens=session.getTokens(row);if(tokens.length)addTokens(tokens,lastColumn,column);}},foldLine.end.row,this.session.getLine(foldLine.end.row).length);return renderTokens;};this.$useLineGroups=function(){return this.session.getUseWrapMode();};this.destroy=function(){clearInterval(this.$pollSizeChangesTimer);if(this.$measureNode)this.$measureNode.parentNode.removeChild(this.$measureNode);delete this.$measureNode;};}).call(Text.prototype);exports.Text=Text;});ace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(acequire,exports,module){\"use strict\";var dom=acequire(\"../lib/dom\");var isIE8;var Cursor=function(parentEl){this.element=dom.createElement(\"div\");this.element.className=\"ace_layer ace_cursor-layer\";parentEl.appendChild(this.element);if(isIE8===undefined)isIE8=!(\"opacity\"in this.element.style);this.isVisible=false;this.isBlinking=true;this.blinkInterval=1000;this.smoothBlinking=false;this.cursors=[];this.cursor=this.addCursor();dom.addCssClass(this.element,\"ace_hidden-cursors\");this.$updateCursors=(isIE8?this.$updateVisibility:this.$updateOpacity).bind(this);};(function(){this.$updateVisibility=function(val){var cursors=this.cursors;for(var i=cursors.length;i--;)cursors[i].style.visibility=val?\"\":\"hidden\";};this.$updateOpacity=function(val){var cursors=this.cursors;for(var i=cursors.length;i--;)cursors[i].style.opacity=val?\"\":\"0\";};this.$padding=0;this.setPadding=function(padding){this.$padding=padding;};this.setSession=function(session){this.session=session;};this.setBlinking=function(blinking){if(blinking!=this.isBlinking){this.isBlinking=blinking;this.restartTimer();}};this.setBlinkInterval=function(blinkInterval){if(blinkInterval!=this.blinkInterval){this.blinkInterval=blinkInterval;this.restartTimer();}};this.setSmoothBlinking=function(smoothBlinking){if(smoothBlinking!=this.smoothBlinking&&!isIE8){this.smoothBlinking=smoothBlinking;dom.setCssClass(this.element,\"ace_smooth-blinking\",smoothBlinking);this.$updateCursors(true);this.$updateCursors=this.$updateOpacity.bind(this);this.restartTimer();}};this.addCursor=function(){var el=dom.createElement(\"div\");el.className=\"ace_cursor\";this.element.appendChild(el);this.cursors.push(el);return el;};this.removeCursor=function(){if(this.cursors.length>1){var el=this.cursors.pop();el.parentNode.removeChild(el);return el;}};this.hideCursor=function(){this.isVisible=false;dom.addCssClass(this.element,\"ace_hidden-cursors\");this.restartTimer();};this.showCursor=function(){this.isVisible=true;dom.removeCssClass(this.element,\"ace_hidden-cursors\");this.restartTimer();};this.restartTimer=function(){var update=this.$updateCursors;clearInterval(this.intervalId);clearTimeout(this.timeoutId);if(this.smoothBlinking){dom.removeCssClass(this.element,\"ace_smooth-blinking\");}update(true);if(!this.isBlinking||!this.blinkInterval||!this.isVisible)return;if(this.smoothBlinking){setTimeout(function(){dom.addCssClass(this.element,\"ace_smooth-blinking\");}.bind(this));}var blink=function(){this.timeoutId=setTimeout(function(){update(false);},0.6*this.blinkInterval);}.bind(this);this.intervalId=setInterval(function(){update(true);blink();},this.blinkInterval);blink();};this.getPixelPosition=function(position,onScreen){if(!this.config||!this.session)return{left:0,top:0};if(!position)position=this.session.selection.getCursor();var pos=this.session.documentToScreenPosition(position);var cursorLeft=this.$padding+pos.column*this.config.characterWidth;var cursorTop=(pos.row-(onScreen?this.config.firstRowScreen:0))*this.config.lineHeight;return{left:cursorLeft,top:cursorTop};};this.update=function(config){this.config=config;var selections=this.session.$selectionMarkers;var i=0,cursorIndex=0;if(selections===undefined||selections.length===0){selections=[{cursor:null}];}for(var i=0,n=selections.length;i<n;i++){var pixelPos=this.getPixelPosition(selections[i].cursor,true);if((pixelPos.top>config.height+config.offset||pixelPos.top<0)&&i>1){continue;}var style=(this.cursors[cursorIndex++]||this.addCursor()).style;if(!this.drawCursor){style.left=pixelPos.left+\"px\";style.top=pixelPos.top+\"px\";style.width=config.characterWidth+\"px\";style.height=config.lineHeight+\"px\";}else{this.drawCursor(style,pixelPos,config,selections[i],this.session);}}while(this.cursors.length>cursorIndex)this.removeCursor();var overwrite=this.session.getOverwrite();this.$setOverwrite(overwrite);this.$pixelPos=pixelPos;this.restartTimer();};this.drawCursor=null;this.$setOverwrite=function(overwrite){if(overwrite!=this.overwrite){this.overwrite=overwrite;if(overwrite)dom.addCssClass(this.element,\"ace_overwrite-cursors\");else dom.removeCssClass(this.element,\"ace_overwrite-cursors\");}};this.destroy=function(){clearInterval(this.intervalId);clearTimeout(this.timeoutId);};}).call(Cursor.prototype);exports.Cursor=Cursor;});ace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"],function(acequire,exports,module){\"use strict\";var oop=acequire(\"./lib/oop\");var dom=acequire(\"./lib/dom\");var event=acequire(\"./lib/event\");var EventEmitter=acequire(\"./lib/event_emitter\").EventEmitter;var ScrollBar=function(parent){this.element=dom.createElement(\"div\");this.element.className=\"ace_scrollbar ace_scrollbar\"+this.classSuffix;this.inner=dom.createElement(\"div\");this.inner.className=\"ace_scrollbar-inner\";this.element.appendChild(this.inner);parent.appendChild(this.element);this.setVisible(false);this.skipEvent=false;event.addListener(this.element,\"scroll\",this.onScroll.bind(this));event.addListener(this.element,\"mousedown\",event.preventDefault);};(function(){oop.implement(this,EventEmitter);this.setVisible=function(isVisible){this.element.style.display=isVisible?\"\":\"none\";this.isVisible=isVisible;};}).call(ScrollBar.prototype);var VScrollBar=function(parent,renderer){ScrollBar.call(this,parent);this.scrollTop=0;renderer.$scrollbarWidth=this.width=dom.scrollbarWidth(parent.ownerDocument);this.inner.style.width=this.element.style.width=(this.width||15)+5+\"px\";};oop.inherits(VScrollBar,ScrollBar);(function(){this.classSuffix='-v';this.onScroll=function(){if(!this.skipEvent){this.scrollTop=this.element.scrollTop;this._emit(\"scroll\",{data:this.scrollTop});}this.skipEvent=false;};this.getWidth=function(){return this.isVisible?this.width:0;};this.setHeight=function(height){this.element.style.height=height+\"px\";};this.setInnerHeight=function(height){this.inner.style.height=height+\"px\";};this.setScrollHeight=function(height){this.inner.style.height=height+\"px\";};this.setScrollTop=function(scrollTop){if(this.scrollTop!=scrollTop){this.skipEvent=true;this.scrollTop=this.element.scrollTop=scrollTop;}};}).call(VScrollBar.prototype);var HScrollBar=function(parent,renderer){ScrollBar.call(this,parent);this.scrollLeft=0;this.height=renderer.$scrollbarWidth;this.inner.style.height=this.element.style.height=(this.height||15)+5+\"px\";};oop.inherits(HScrollBar,ScrollBar);(function(){this.classSuffix='-h';this.onScroll=function(){if(!this.skipEvent){this.scrollLeft=this.element.scrollLeft;this._emit(\"scroll\",{data:this.scrollLeft});}this.skipEvent=false;};this.getHeight=function(){return this.isVisible?this.height:0;};this.setWidth=function(width){this.element.style.width=width+\"px\";};this.setInnerWidth=function(width){this.inner.style.width=width+\"px\";};this.setScrollWidth=function(width){this.inner.style.width=width+\"px\";};this.setScrollLeft=function(scrollLeft){if(this.scrollLeft!=scrollLeft){this.skipEvent=true;this.scrollLeft=this.element.scrollLeft=scrollLeft;}};}).call(HScrollBar.prototype);exports.ScrollBar=VScrollBar;// backward compatibility\nexports.ScrollBarV=VScrollBar;// backward compatibility\nexports.ScrollBarH=HScrollBar;// backward compatibility\nexports.VScrollBar=VScrollBar;exports.HScrollBar=HScrollBar;});ace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"],function(acequire,exports,module){\"use strict\";var event=acequire(\"./lib/event\");var RenderLoop=function(onRender,win){this.onRender=onRender;this.pending=false;this.changes=0;this.window=win||window;};(function(){this.schedule=function(change){this.changes=this.changes|change;if(!this.pending&&this.changes){this.pending=true;var _self=this;event.nextFrame(function(){_self.pending=false;var changes;while(changes=_self.changes){_self.changes=0;_self.onRender(changes);}},this.window);}};}).call(RenderLoop.prototype);exports.RenderLoop=RenderLoop;});ace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"],function(acequire,exports,module){var oop=acequire(\"../lib/oop\");var dom=acequire(\"../lib/dom\");var lang=acequire(\"../lib/lang\");var useragent=acequire(\"../lib/useragent\");var EventEmitter=acequire(\"../lib/event_emitter\").EventEmitter;var CHAR_COUNT=0;var FontMetrics=exports.FontMetrics=function(parentEl){this.el=dom.createElement(\"div\");this.$setMeasureNodeStyles(this.el.style,true);this.$main=dom.createElement(\"div\");this.$setMeasureNodeStyles(this.$main.style);this.$measureNode=dom.createElement(\"div\");this.$setMeasureNodeStyles(this.$measureNode.style);this.el.appendChild(this.$main);this.el.appendChild(this.$measureNode);parentEl.appendChild(this.el);if(!CHAR_COUNT)this.$testFractionalRect();this.$measureNode.innerHTML=lang.stringRepeat(\"X\",CHAR_COUNT);this.$characterSize={width:0,height:0};this.checkForSizeChanges();};(function(){oop.implement(this,EventEmitter);this.$characterSize={width:0,height:0};this.$testFractionalRect=function(){var el=dom.createElement(\"div\");this.$setMeasureNodeStyles(el.style);el.style.width=\"0.2px\";document.documentElement.appendChild(el);var w=el.getBoundingClientRect().width;if(w>0&&w<1)CHAR_COUNT=50;else CHAR_COUNT=100;el.parentNode.removeChild(el);};this.$setMeasureNodeStyles=function(style,isRoot){style.width=style.height=\"auto\";style.left=style.top=\"0px\";style.visibility=\"hidden\";style.position=\"absolute\";style.whiteSpace=\"pre\";if(useragent.isIE<8){style[\"font-family\"]=\"inherit\";}else{style.font=\"inherit\";}style.overflow=isRoot?\"hidden\":\"visible\";};this.checkForSizeChanges=function(){var size=this.$measureSizes();if(size&&(this.$characterSize.width!==size.width||this.$characterSize.height!==size.height)){this.$measureNode.style.fontWeight=\"bold\";var boldSize=this.$measureSizes();this.$measureNode.style.fontWeight=\"\";this.$characterSize=size;this.charSizes=Object.create(null);this.allowBoldFonts=boldSize&&boldSize.width===size.width&&boldSize.height===size.height;this._emit(\"changeCharacterSize\",{data:size});}};this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer)return this.$pollSizeChangesTimer;var self=this;return this.$pollSizeChangesTimer=setInterval(function(){self.checkForSizeChanges();},500);};this.setPolling=function(val){if(val){this.$pollSizeChanges();}else if(this.$pollSizeChangesTimer){clearInterval(this.$pollSizeChangesTimer);this.$pollSizeChangesTimer=0;}};this.$measureSizes=function(){if(CHAR_COUNT===50){var rect=null;try{rect=this.$measureNode.getBoundingClientRect();}catch(e){rect={width:0,height:0};}var size={height:rect.height,width:rect.width/CHAR_COUNT};}else{var size={height:this.$measureNode.clientHeight,width:this.$measureNode.clientWidth/CHAR_COUNT};}if(size.width===0||size.height===0)return null;return size;};this.$measureCharWidth=function(ch){this.$main.innerHTML=lang.stringRepeat(ch,CHAR_COUNT);var rect=this.$main.getBoundingClientRect();return rect.width/CHAR_COUNT;};this.getCharacterWidth=function(ch){var w=this.charSizes[ch];if(w===undefined){w=this.charSizes[ch]=this.$measureCharWidth(ch)/this.$characterSize.width;}return w;};this.destroy=function(){clearInterval(this.$pollSizeChangesTimer);if(this.el&&this.el.parentNode)this.el.parentNode.removeChild(this.el);};}).call(FontMetrics.prototype);});ace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/config\",\"ace/lib/useragent\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\"],function(acequire,exports,module){\"use strict\";var oop=acequire(\"./lib/oop\");var dom=acequire(\"./lib/dom\");var config=acequire(\"./config\");var useragent=acequire(\"./lib/useragent\");var GutterLayer=acequire(\"./layer/gutter\").Gutter;var MarkerLayer=acequire(\"./layer/marker\").Marker;var TextLayer=acequire(\"./layer/text\").Text;var CursorLayer=acequire(\"./layer/cursor\").Cursor;var HScrollBar=acequire(\"./scrollbar\").HScrollBar;var VScrollBar=acequire(\"./scrollbar\").VScrollBar;var RenderLoop=acequire(\"./renderloop\").RenderLoop;var FontMetrics=acequire(\"./layer/font_metrics\").FontMetrics;var EventEmitter=acequire(\"./lib/event_emitter\").EventEmitter;var editorCss=\".ace_editor {\\\r\n\tposition: relative;\\\r\n\toverflow: hidden;\\\r\n\tfont: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\\\r\n\tdirection: ltr;\\\r\n\t}\\\r\n\t.ace_scroller {\\\r\n\tposition: absolute;\\\r\n\toverflow: hidden;\\\r\n\ttop: 0;\\\r\n\tbottom: 0;\\\r\n\tbackground-color: inherit;\\\r\n\t-ms-user-select: none;\\\r\n\t-moz-user-select: none;\\\r\n\t-webkit-user-select: none;\\\r\n\tuser-select: none;\\\r\n\tcursor: text;\\\r\n\t}\\\r\n\t.ace_content {\\\r\n\tposition: absolute;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tmin-width: 100%;\\\r\n\t}\\\r\n\t.ace_dragging .ace_scroller:before{\\\r\n\tposition: absolute;\\\r\n\ttop: 0;\\\r\n\tleft: 0;\\\r\n\tright: 0;\\\r\n\tbottom: 0;\\\r\n\tcontent: '';\\\r\n\tbackground: rgba(250, 250, 250, 0.01);\\\r\n\tz-index: 1000;\\\r\n\t}\\\r\n\t.ace_dragging.ace_dark .ace_scroller:before{\\\r\n\tbackground: rgba(0, 0, 0, 0.01);\\\r\n\t}\\\r\n\t.ace_selecting, .ace_selecting * {\\\r\n\tcursor: text !important;\\\r\n\t}\\\r\n\t.ace_gutter {\\\r\n\tposition: absolute;\\\r\n\toverflow : hidden;\\\r\n\twidth: auto;\\\r\n\ttop: 0;\\\r\n\tbottom: 0;\\\r\n\tleft: 0;\\\r\n\tcursor: default;\\\r\n\tz-index: 4;\\\r\n\t-ms-user-select: none;\\\r\n\t-moz-user-select: none;\\\r\n\t-webkit-user-select: none;\\\r\n\tuser-select: none;\\\r\n\t}\\\r\n\t.ace_gutter-active-line {\\\r\n\tposition: absolute;\\\r\n\tleft: 0;\\\r\n\tright: 0;\\\r\n\t}\\\r\n\t.ace_scroller.ace_scroll-left {\\\r\n\tbox-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\\\r\n\t}\\\r\n\t.ace_gutter-cell {\\\r\n\tpadding-left: 19px;\\\r\n\tpadding-right: 6px;\\\r\n\tbackground-repeat: no-repeat;\\\r\n\t}\\\r\n\t.ace_gutter-cell.ace_error {\\\r\n\tbackground-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==\\\");\\\r\n\tbackground-repeat: no-repeat;\\\r\n\tbackground-position: 2px center;\\\r\n\t}\\\r\n\t.ace_gutter-cell.ace_warning {\\\r\n\tbackground-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==\\\");\\\r\n\tbackground-position: 2px center;\\\r\n\t}\\\r\n\t.ace_gutter-cell.ace_info {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\\\");\\\r\n\tbackground-position: 2px center;\\\r\n\t}\\\r\n\t.ace_dark .ace_gutter-cell.ace_info {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\\\");\\\r\n\t}\\\r\n\t.ace_scrollbar {\\\r\n\tposition: absolute;\\\r\n\tright: 0;\\\r\n\tbottom: 0;\\\r\n\tz-index: 6;\\\r\n\t}\\\r\n\t.ace_scrollbar-inner {\\\r\n\tposition: absolute;\\\r\n\tcursor: text;\\\r\n\tleft: 0;\\\r\n\ttop: 0;\\\r\n\t}\\\r\n\t.ace_scrollbar-v{\\\r\n\toverflow-x: hidden;\\\r\n\toverflow-y: scroll;\\\r\n\ttop: 0;\\\r\n\t}\\\r\n\t.ace_scrollbar-h {\\\r\n\toverflow-x: scroll;\\\r\n\toverflow-y: hidden;\\\r\n\tleft: 0;\\\r\n\t}\\\r\n\t.ace_print-margin {\\\r\n\tposition: absolute;\\\r\n\theight: 100%;\\\r\n\t}\\\r\n\t.ace_text-input {\\\r\n\tposition: absolute;\\\r\n\tz-index: 0;\\\r\n\twidth: 0.5em;\\\r\n\theight: 1em;\\\r\n\topacity: 0;\\\r\n\tbackground: transparent;\\\r\n\t-moz-appearance: none;\\\r\n\tappearance: none;\\\r\n\tborder: none;\\\r\n\tresize: none;\\\r\n\toutline: none;\\\r\n\toverflow: hidden;\\\r\n\tfont: inherit;\\\r\n\tpadding: 0 1px;\\\r\n\tmargin: 0 -1px;\\\r\n\ttext-indent: -1em;\\\r\n\t-ms-user-select: text;\\\r\n\t-moz-user-select: text;\\\r\n\t-webkit-user-select: text;\\\r\n\tuser-select: text;\\\r\n\twhite-space: pre!important;\\\r\n\t}\\\r\n\t.ace_text-input.ace_composition {\\\r\n\tbackground: inherit;\\\r\n\tcolor: inherit;\\\r\n\tz-index: 1000;\\\r\n\topacity: 1;\\\r\n\ttext-indent: 0;\\\r\n\t}\\\r\n\t.ace_layer {\\\r\n\tz-index: 1;\\\r\n\tposition: absolute;\\\r\n\toverflow: hidden;\\\r\n\tword-wrap: normal;\\\r\n\twhite-space: pre;\\\r\n\theight: 100%;\\\r\n\twidth: 100%;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tpointer-events: none;\\\r\n\t}\\\r\n\t.ace_gutter-layer {\\\r\n\tposition: relative;\\\r\n\twidth: auto;\\\r\n\ttext-align: right;\\\r\n\tpointer-events: auto;\\\r\n\t}\\\r\n\t.ace_text-layer {\\\r\n\tfont: inherit !important;\\\r\n\t}\\\r\n\t.ace_cjk {\\\r\n\tdisplay: inline-block;\\\r\n\ttext-align: center;\\\r\n\t}\\\r\n\t.ace_cursor-layer {\\\r\n\tz-index: 4;\\\r\n\t}\\\r\n\t.ace_cursor {\\\r\n\tz-index: 4;\\\r\n\tposition: absolute;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tborder-left: 2px solid;\\\r\n\ttransform: translatez(0);\\\r\n\t}\\\r\n\t.ace_slim-cursors .ace_cursor {\\\r\n\tborder-left-width: 1px;\\\r\n\t}\\\r\n\t.ace_overwrite-cursors .ace_cursor {\\\r\n\tborder-left-width: 0;\\\r\n\tborder-bottom: 1px solid;\\\r\n\t}\\\r\n\t.ace_hidden-cursors .ace_cursor {\\\r\n\topacity: 0.2;\\\r\n\t}\\\r\n\t.ace_smooth-blinking .ace_cursor {\\\r\n\t-webkit-transition: opacity 0.18s;\\\r\n\ttransition: opacity 0.18s;\\\r\n\t}\\\r\n\t.ace_editor.ace_multiselect .ace_cursor {\\\r\n\tborder-left-width: 1px;\\\r\n\t}\\\r\n\t.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\\r\n\tposition: absolute;\\\r\n\tz-index: 3;\\\r\n\t}\\\r\n\t.ace_marker-layer .ace_selection {\\\r\n\tposition: absolute;\\\r\n\tz-index: 5;\\\r\n\t}\\\r\n\t.ace_marker-layer .ace_bracket {\\\r\n\tposition: absolute;\\\r\n\tz-index: 6;\\\r\n\t}\\\r\n\t.ace_marker-layer .ace_active-line {\\\r\n\tposition: absolute;\\\r\n\tz-index: 2;\\\r\n\t}\\\r\n\t.ace_marker-layer .ace_selected-word {\\\r\n\tposition: absolute;\\\r\n\tz-index: 4;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\t}\\\r\n\t.ace_line .ace_fold {\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tdisplay: inline-block;\\\r\n\theight: 11px;\\\r\n\tmargin-top: -2px;\\\r\n\tvertical-align: middle;\\\r\n\tbackground-image:\\\r\n\turl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\r\n\turl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\\r\n\tbackground-repeat: no-repeat, repeat-x;\\\r\n\tbackground-position: center center, top left;\\\r\n\tcolor: transparent;\\\r\n\tborder: 1px solid black;\\\r\n\tborder-radius: 2px;\\\r\n\tcursor: pointer;\\\r\n\tpointer-events: auto;\\\r\n\t}\\\r\n\t.ace_dark .ace_fold {\\\r\n\t}\\\r\n\t.ace_fold:hover{\\\r\n\tbackground-image:\\\r\n\turl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\r\n\turl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\\r\n\t}\\\r\n\t.ace_tooltip {\\\r\n\tbackground-color: #FFF;\\\r\n\tbackground-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));\\\r\n\tbackground-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\\\r\n\tborder: 1px solid gray;\\\r\n\tborder-radius: 1px;\\\r\n\tbox-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\\r\n\tcolor: black;\\\r\n\tmax-width: 100%;\\\r\n\tpadding: 3px 4px;\\\r\n\tposition: fixed;\\\r\n\tz-index: 999999;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tcursor: default;\\\r\n\twhite-space: pre;\\\r\n\tword-wrap: break-word;\\\r\n\tline-height: normal;\\\r\n\tfont-style: normal;\\\r\n\tfont-weight: normal;\\\r\n\tletter-spacing: normal;\\\r\n\tpointer-events: none;\\\r\n\t}\\\r\n\t.ace_folding-enabled > .ace_gutter-cell {\\\r\n\tpadding-right: 13px;\\\r\n\t}\\\r\n\t.ace_fold-widget {\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tmargin: 0 -12px 0 1px;\\\r\n\tdisplay: none;\\\r\n\twidth: 11px;\\\r\n\tvertical-align: top;\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\\r\n\tbackground-repeat: no-repeat;\\\r\n\tbackground-position: center;\\\r\n\tborder-radius: 3px;\\\r\n\tborder: 1px solid transparent;\\\r\n\tcursor: pointer;\\\r\n\t}\\\r\n\t.ace_folding-enabled .ace_fold-widget {\\\r\n\tdisplay: inline-block; \\\r\n\t}\\\r\n\t.ace_fold-widget.ace_end {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\\r\n\t}\\\r\n\t.ace_fold-widget.ace_closed {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\\r\n\t}\\\r\n\t.ace_fold-widget:hover {\\\r\n\tborder: 1px solid rgba(0, 0, 0, 0.3);\\\r\n\tbackground-color: rgba(255, 255, 255, 0.2);\\\r\n\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\\r\n\t}\\\r\n\t.ace_fold-widget:active {\\\r\n\tborder: 1px solid rgba(0, 0, 0, 0.4);\\\r\n\tbackground-color: rgba(0, 0, 0, 0.05);\\\r\n\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\\r\n\t}\\\r\n\t.ace_dark .ace_fold-widget {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\\r\n\t}\\\r\n\t.ace_dark .ace_fold-widget.ace_end {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\\r\n\t}\\\r\n\t.ace_dark .ace_fold-widget.ace_closed {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\\r\n\t}\\\r\n\t.ace_dark .ace_fold-widget:hover {\\\r\n\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\r\n\tbackground-color: rgba(255, 255, 255, 0.1);\\\r\n\t}\\\r\n\t.ace_dark .ace_fold-widget:active {\\\r\n\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\r\n\t}\\\r\n\t.ace_fold-widget.ace_invalid {\\\r\n\tbackground-color: #FFB4B4;\\\r\n\tborder-color: #DE5555;\\\r\n\t}\\\r\n\t.ace_fade-fold-widgets .ace_fold-widget {\\\r\n\t-webkit-transition: opacity 0.4s ease 0.05s;\\\r\n\ttransition: opacity 0.4s ease 0.05s;\\\r\n\topacity: 0;\\\r\n\t}\\\r\n\t.ace_fade-fold-widgets:hover .ace_fold-widget {\\\r\n\t-webkit-transition: opacity 0.05s ease 0.05s;\\\r\n\ttransition: opacity 0.05s ease 0.05s;\\\r\n\topacity:1;\\\r\n\t}\\\r\n\t.ace_underline {\\\r\n\ttext-decoration: underline;\\\r\n\t}\\\r\n\t.ace_bold {\\\r\n\tfont-weight: bold;\\\r\n\t}\\\r\n\t.ace_nobold .ace_bold {\\\r\n\tfont-weight: normal;\\\r\n\t}\\\r\n\t.ace_italic {\\\r\n\tfont-style: italic;\\\r\n\t}\\\r\n\t.ace_error-marker {\\\r\n\tbackground-color: rgba(255, 0, 0,0.2);\\\r\n\tposition: absolute;\\\r\n\tz-index: 9;\\\r\n\t}\\\r\n\t.ace_highlight-marker {\\\r\n\tbackground-color: rgba(255, 255, 0,0.2);\\\r\n\tposition: absolute;\\\r\n\tz-index: 8;\\\r\n\t}\\\r\n\t.ace_br1 {border-top-left-radius : 3px;}\\\r\n\t.ace_br2 {border-top-right-radius : 3px;}\\\r\n\t.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\\\r\n\t.ace_br4 {border-bottom-right-radius: 3px;}\\\r\n\t.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\\\r\n\t.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\\\r\n\t.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\\\r\n\t.ace_br8 {border-bottom-left-radius : 3px;}\\\r\n\t.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\r\n\t\";dom.importCssString(editorCss,\"ace_editor.css\");var VirtualRenderer=function(container,theme){var _self=this;this.container=container||dom.createElement(\"div\");this.$keepTextAreaAtCursor=!useragent.isOldIE;dom.addCssClass(this.container,\"ace_editor\");this.setTheme(theme);this.$gutter=dom.createElement(\"div\");this.$gutter.className=\"ace_gutter\";this.container.appendChild(this.$gutter);this.scroller=dom.createElement(\"div\");this.scroller.className=\"ace_scroller\";this.container.appendChild(this.scroller);this.content=dom.createElement(\"div\");this.content.className=\"ace_content\";this.scroller.appendChild(this.content);this.$gutterLayer=new GutterLayer(this.$gutter);this.$gutterLayer.on(\"changeGutterWidth\",this.onGutterResize.bind(this));this.$markerBack=new MarkerLayer(this.content);var textLayer=this.$textLayer=new TextLayer(this.content);this.canvas=textLayer.element;this.$markerFront=new MarkerLayer(this.content);this.$cursorLayer=new CursorLayer(this.content);this.$horizScroll=false;this.$vScroll=false;this.scrollBar=this.scrollBarV=new VScrollBar(this.container,this);this.scrollBarH=new HScrollBar(this.container,this);this.scrollBarV.addEventListener(\"scroll\",function(e){if(!_self.$scrollAnimation)_self.session.setScrollTop(e.data-_self.scrollMargin.top);});this.scrollBarH.addEventListener(\"scroll\",function(e){if(!_self.$scrollAnimation)_self.session.setScrollLeft(e.data-_self.scrollMargin.left);});this.scrollTop=0;this.scrollLeft=0;this.cursorPos={row:0,column:0};this.$fontMetrics=new FontMetrics(this.container);this.$textLayer.$setFontMetrics(this.$fontMetrics);this.$textLayer.addEventListener(\"changeCharacterSize\",function(e){_self.updateCharacterSize();_self.onResize(true,_self.gutterWidth,_self.$size.width,_self.$size.height);_self._signal(\"changeCharacterSize\",e);});this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:true};this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1};this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0};this.$loop=new RenderLoop(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView);this.$loop.schedule(this.CHANGE_FULL);this.updateCharacterSize();this.setPadding(4);config.resetOptions(this);config._emit(\"renderer\",this);};(function(){this.CHANGE_CURSOR=1;this.CHANGE_MARKER=2;this.CHANGE_GUTTER=4;this.CHANGE_SCROLL=8;this.CHANGE_LINES=16;this.CHANGE_TEXT=32;this.CHANGE_SIZE=64;this.CHANGE_MARKER_BACK=128;this.CHANGE_MARKER_FRONT=256;this.CHANGE_FULL=512;this.CHANGE_H_SCROLL=1024;oop.implement(this,EventEmitter);this.updateCharacterSize=function(){if(this.$textLayer.allowBoldFonts!=this.$allowBoldFonts){this.$allowBoldFonts=this.$textLayer.allowBoldFonts;this.setStyle(\"ace_nobold\",!this.$allowBoldFonts);}this.layerConfig.characterWidth=this.characterWidth=this.$textLayer.getCharacterWidth();this.layerConfig.lineHeight=this.lineHeight=this.$textLayer.getLineHeight();this.$updatePrintMargin();};this.setSession=function(session){if(this.session)this.session.doc.off(\"changeNewLineMode\",this.onChangeNewLineMode);this.session=session;if(session&&this.scrollMargin.top&&session.getScrollTop()<=0)session.setScrollTop(-this.scrollMargin.top);this.$cursorLayer.setSession(session);this.$markerBack.setSession(session);this.$markerFront.setSession(session);this.$gutterLayer.setSession(session);this.$textLayer.setSession(session);if(!session)return;this.$loop.schedule(this.CHANGE_FULL);this.session.$setFontMetrics(this.$fontMetrics);this.onChangeNewLineMode=this.onChangeNewLineMode.bind(this);this.onChangeNewLineMode();this.session.doc.on(\"changeNewLineMode\",this.onChangeNewLineMode);};this.updateLines=function(firstRow,lastRow,force){if(lastRow===undefined)lastRow=Infinity;if(!this.$changedLines){this.$changedLines={firstRow:firstRow,lastRow:lastRow};}else{if(this.$changedLines.firstRow>firstRow)this.$changedLines.firstRow=firstRow;if(this.$changedLines.lastRow<lastRow)this.$changedLines.lastRow=lastRow;}if(this.$changedLines.lastRow<this.layerConfig.firstRow){if(force)this.$changedLines.lastRow=this.layerConfig.lastRow;else return;}if(this.$changedLines.firstRow>this.layerConfig.lastRow)return;this.$loop.schedule(this.CHANGE_LINES);};this.onChangeNewLineMode=function(){this.$loop.schedule(this.CHANGE_TEXT);this.$textLayer.$updateEolChar();};this.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER);this.$textLayer.onChangeTabSize();};this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT);};this.updateFull=function(force){if(force)this.$renderChanges(this.CHANGE_FULL,true);else this.$loop.schedule(this.CHANGE_FULL);};this.updateFontSize=function(){this.$textLayer.checkForSizeChanges();};this.$changes=0;this.$updateSizeAsync=function(){if(this.$loop.pending)this.$size.$dirty=true;else this.onResize();};this.onResize=function(force,gutterWidth,width,height){if(this.resizing>2)return;else if(this.resizing>0)this.resizing++;else this.resizing=force?1:0;var el=this.container;if(!height)height=el.clientHeight||el.scrollHeight;if(!width)width=el.clientWidth||el.scrollWidth;var changes=this.$updateCachedSize(force,gutterWidth,width,height);if(!this.$size.scrollerHeight||!width&&!height)return this.resizing=0;if(force)this.$gutterLayer.$padding=null;if(force)this.$renderChanges(changes|this.$changes,true);else this.$loop.schedule(changes|this.$changes);if(this.resizing)this.resizing=0;this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null;};this.$updateCachedSize=function(force,gutterWidth,width,height){height-=this.$extraHeight||0;var changes=0;var size=this.$size;var oldSize={width:size.width,height:size.height,scrollerHeight:size.scrollerHeight,scrollerWidth:size.scrollerWidth};if(height&&(force||size.height!=height)){size.height=height;changes|=this.CHANGE_SIZE;size.scrollerHeight=size.height;if(this.$horizScroll)size.scrollerHeight-=this.scrollBarH.getHeight();this.scrollBarV.element.style.bottom=this.scrollBarH.getHeight()+\"px\";changes=changes|this.CHANGE_SCROLL;}if(width&&(force||size.width!=width)){changes|=this.CHANGE_SIZE;size.width=width;if(gutterWidth==null)gutterWidth=this.$showGutter?this.$gutter.offsetWidth:0;this.gutterWidth=gutterWidth;this.scrollBarH.element.style.left=this.scroller.style.left=gutterWidth+\"px\";size.scrollerWidth=Math.max(0,width-gutterWidth-this.scrollBarV.getWidth());this.scrollBarH.element.style.right=this.scroller.style.right=this.scrollBarV.getWidth()+\"px\";this.scroller.style.bottom=this.scrollBarH.getHeight()+\"px\";if(this.session&&this.session.getUseWrapMode()&&this.adjustWrapLimit()||force)changes|=this.CHANGE_FULL;}size.$dirty=!width||!height;if(changes)this._signal(\"resize\",oldSize);return changes;};this.onGutterResize=function(){var gutterWidth=this.$showGutter?this.$gutter.offsetWidth:0;if(gutterWidth!=this.gutterWidth)this.$changes|=this.$updateCachedSize(true,gutterWidth,this.$size.width,this.$size.height);if(this.session.getUseWrapMode()&&this.adjustWrapLimit()){this.$loop.schedule(this.CHANGE_FULL);}else if(this.$size.$dirty){this.$loop.schedule(this.CHANGE_FULL);}else{this.$computeLayerConfig();this.$loop.schedule(this.CHANGE_MARKER);}};this.adjustWrapLimit=function(){var availableWidth=this.$size.scrollerWidth-this.$padding*2;var limit=Math.floor(availableWidth/this.characterWidth);return this.session.adjustWrapLimit(limit,this.$showPrintMargin&&this.$printMarginColumn);};this.setAnimatedScroll=function(shouldAnimate){this.setOption(\"animatedScroll\",shouldAnimate);};this.getAnimatedScroll=function(){return this.$animatedScroll;};this.setShowInvisibles=function(showInvisibles){this.setOption(\"showInvisibles\",showInvisibles);};this.getShowInvisibles=function(){return this.getOption(\"showInvisibles\");};this.getDisplayIndentGuides=function(){return this.getOption(\"displayIndentGuides\");};this.setDisplayIndentGuides=function(display){this.setOption(\"displayIndentGuides\",display);};this.setShowPrintMargin=function(showPrintMargin){this.setOption(\"showPrintMargin\",showPrintMargin);};this.getShowPrintMargin=function(){return this.getOption(\"showPrintMargin\");};this.setPrintMarginColumn=function(showPrintMargin){this.setOption(\"printMarginColumn\",showPrintMargin);};this.getPrintMarginColumn=function(){return this.getOption(\"printMarginColumn\");};this.getShowGutter=function(){return this.getOption(\"showGutter\");};this.setShowGutter=function(show){return this.setOption(\"showGutter\",show);};this.getFadeFoldWidgets=function(){return this.getOption(\"fadeFoldWidgets\");};this.setFadeFoldWidgets=function(show){this.setOption(\"fadeFoldWidgets\",show);};this.setHighlightGutterLine=function(shouldHighlight){this.setOption(\"highlightGutterLine\",shouldHighlight);};this.getHighlightGutterLine=function(){return this.getOption(\"highlightGutterLine\");};this.$updateGutterLineHighlight=function(){var pos=this.$cursorLayer.$pixelPos;var height=this.layerConfig.lineHeight;if(this.session.getUseWrapMode()){var cursor=this.session.selection.getCursor();cursor.column=0;pos=this.$cursorLayer.getPixelPosition(cursor,true);height*=this.session.getRowLength(cursor.row);}this.$gutterLineHighlight.style.top=pos.top-this.layerConfig.offset+\"px\";this.$gutterLineHighlight.style.height=height+\"px\";};this.$updatePrintMargin=function(){if(!this.$showPrintMargin&&!this.$printMarginEl)return;if(!this.$printMarginEl){var containerEl=dom.createElement(\"div\");containerEl.className=\"ace_layer ace_print-margin-layer\";this.$printMarginEl=dom.createElement(\"div\");this.$printMarginEl.className=\"ace_print-margin\";containerEl.appendChild(this.$printMarginEl);this.content.insertBefore(containerEl,this.content.firstChild);}var style=this.$printMarginEl.style;style.left=this.characterWidth*this.$printMarginColumn+this.$padding+\"px\";style.visibility=this.$showPrintMargin?\"visible\":\"hidden\";if(this.session&&this.session.$wrap==-1)this.adjustWrapLimit();};this.getContainerElement=function(){return this.container;};this.getMouseEventTarget=function(){return this.scroller;};this.getTextAreaContainer=function(){return this.container;};this.$moveTextAreaToCursor=function(){if(!this.$keepTextAreaAtCursor)return;var config=this.layerConfig;var posTop=this.$cursorLayer.$pixelPos.top;var posLeft=this.$cursorLayer.$pixelPos.left;posTop-=config.offset;var style=this.textarea.style;var h=this.lineHeight;if(posTop<0||posTop>config.height-h){style.top=style.left=\"0\";return;}var w=this.characterWidth;if(this.$composition){var val=this.textarea.value.replace(/^\\x01+/,\"\");w*=this.session.$getStringScreenWidth(val)[0]+2;h+=2;}posLeft-=this.scrollLeft;if(posLeft>this.$size.scrollerWidth-w)posLeft=this.$size.scrollerWidth-w;posLeft+=this.gutterWidth;style.height=h+\"px\";style.width=w+\"px\";style.left=Math.min(posLeft,this.$size.scrollerWidth-w)+\"px\";style.top=Math.min(posTop,this.$size.height-h)+\"px\";};this.getFirstVisibleRow=function(){return this.layerConfig.firstRow;};this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(this.layerConfig.offset===0?0:1);};this.getLastFullyVisibleRow=function(){var config=this.layerConfig;var lastRow=config.lastRow;var top=this.session.documentToScreenRow(lastRow,0)*config.lineHeight;if(top-this.session.getScrollTop()>config.height-config.lineHeight)return lastRow-1;return lastRow;};this.getLastVisibleRow=function(){return this.layerConfig.lastRow;};this.$padding=null;this.setPadding=function(padding){this.$padding=padding;this.$textLayer.setPadding(padding);this.$cursorLayer.setPadding(padding);this.$markerFront.setPadding(padding);this.$markerBack.setPadding(padding);this.$loop.schedule(this.CHANGE_FULL);this.$updatePrintMargin();};this.setScrollMargin=function(top,bottom,left,right){var sm=this.scrollMargin;sm.top=top|0;sm.bottom=bottom|0;sm.right=right|0;sm.left=left|0;sm.v=sm.top+sm.bottom;sm.h=sm.left+sm.right;if(sm.top&&this.scrollTop<=0&&this.session)this.session.setScrollTop(-sm.top);this.updateFull();};this.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible;};this.setHScrollBarAlwaysVisible=function(alwaysVisible){this.setOption(\"hScrollBarAlwaysVisible\",alwaysVisible);};this.getVScrollBarAlwaysVisible=function(){return this.$vScrollBarAlwaysVisible;};this.setVScrollBarAlwaysVisible=function(alwaysVisible){this.setOption(\"vScrollBarAlwaysVisible\",alwaysVisible);};this.$updateScrollBarV=function(){var scrollHeight=this.layerConfig.maxHeight;var scrollerHeight=this.$size.scrollerHeight;if(!this.$maxLines&&this.$scrollPastEnd){scrollHeight-=(scrollerHeight-this.lineHeight)*this.$scrollPastEnd;if(this.scrollTop>scrollHeight-scrollerHeight){scrollHeight=this.scrollTop+scrollerHeight;this.scrollBarV.scrollTop=null;}}this.scrollBarV.setScrollHeight(scrollHeight+this.scrollMargin.v);this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top);};this.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h);this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left);};this.$frozen=false;this.freeze=function(){this.$frozen=true;};this.unfreeze=function(){this.$frozen=false;};this.$renderChanges=function(changes,force){if(this.$changes){changes|=this.$changes;this.$changes=0;}if(!this.session||!this.container.offsetWidth||this.$frozen||!changes&&!force){this.$changes|=changes;return;}if(this.$size.$dirty){this.$changes|=changes;return this.onResize(true);}if(!this.lineHeight){this.$textLayer.checkForSizeChanges();}this._signal(\"beforeRender\");var config=this.layerConfig;if(changes&this.CHANGE_FULL||changes&this.CHANGE_SIZE||changes&this.CHANGE_TEXT||changes&this.CHANGE_LINES||changes&this.CHANGE_SCROLL||changes&this.CHANGE_H_SCROLL){changes|=this.$computeLayerConfig();if(config.firstRow!=this.layerConfig.firstRow&&config.firstRowScreen==this.layerConfig.firstRowScreen){var st=this.scrollTop+(config.firstRow-this.layerConfig.firstRow)*this.lineHeight;if(st>0){this.scrollTop=st;changes=changes|this.CHANGE_SCROLL;changes|=this.$computeLayerConfig();}}config=this.layerConfig;this.$updateScrollBarV();if(changes&this.CHANGE_H_SCROLL)this.$updateScrollBarH();this.$gutterLayer.element.style.marginTop=-config.offset+\"px\";this.content.style.marginTop=-config.offset+\"px\";this.content.style.width=config.width+2*this.$padding+\"px\";this.content.style.height=config.minHeight+\"px\";}if(changes&this.CHANGE_H_SCROLL){this.content.style.marginLeft=-this.scrollLeft+\"px\";this.scroller.className=this.scrollLeft<=0?\"ace_scroller\":\"ace_scroller ace_scroll-left\";}if(changes&this.CHANGE_FULL){this.$textLayer.update(config);if(this.$showGutter)this.$gutterLayer.update(config);this.$markerBack.update(config);this.$markerFront.update(config);this.$cursorLayer.update(config);this.$moveTextAreaToCursor();this.$highlightGutterLine&&this.$updateGutterLineHighlight();this._signal(\"afterRender\");return;}if(changes&this.CHANGE_SCROLL){if(changes&this.CHANGE_TEXT||changes&this.CHANGE_LINES)this.$textLayer.update(config);else this.$textLayer.scrollLines(config);if(this.$showGutter)this.$gutterLayer.update(config);this.$markerBack.update(config);this.$markerFront.update(config);this.$cursorLayer.update(config);this.$highlightGutterLine&&this.$updateGutterLineHighlight();this.$moveTextAreaToCursor();this._signal(\"afterRender\");return;}if(changes&this.CHANGE_TEXT){this.$textLayer.update(config);if(this.$showGutter)this.$gutterLayer.update(config);}else if(changes&this.CHANGE_LINES){if(this.$updateLines()||changes&this.CHANGE_GUTTER&&this.$showGutter)this.$gutterLayer.update(config);}else if(changes&this.CHANGE_TEXT||changes&this.CHANGE_GUTTER){if(this.$showGutter)this.$gutterLayer.update(config);}if(changes&this.CHANGE_CURSOR){this.$cursorLayer.update(config);this.$moveTextAreaToCursor();this.$highlightGutterLine&&this.$updateGutterLineHighlight();}if(changes&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)){this.$markerFront.update(config);}if(changes&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)){this.$markerBack.update(config);}this._signal(\"afterRender\");};this.$autosize=function(){var height=this.session.getScreenLength()*this.lineHeight;var maxHeight=this.$maxLines*this.lineHeight;var desiredHeight=Math.max((this.$minLines||1)*this.lineHeight,Math.min(maxHeight,height))+this.scrollMargin.v+(this.$extraHeight||0);if(this.$horizScroll)desiredHeight+=this.scrollBarH.getHeight();var vScroll=height>maxHeight;if(desiredHeight!=this.desiredHeight||this.$size.height!=this.desiredHeight||vScroll!=this.$vScroll){if(vScroll!=this.$vScroll){this.$vScroll=vScroll;this.scrollBarV.setVisible(vScroll);}var w=this.container.clientWidth;this.container.style.height=desiredHeight+\"px\";this.$updateCachedSize(true,this.$gutterWidth,w,desiredHeight);this.desiredHeight=desiredHeight;this._signal(\"autosize\");}};this.$computeLayerConfig=function(){var session=this.session;var size=this.$size;var hideScrollbars=size.height<=2*this.lineHeight;var screenLines=this.session.getScreenLength();var maxHeight=screenLines*this.lineHeight;var longestLine=this.$getLongestLine();var horizScroll=!hideScrollbars&&(this.$hScrollBarAlwaysVisible||size.scrollerWidth-longestLine-2*this.$padding<0);var hScrollChanged=this.$horizScroll!==horizScroll;if(hScrollChanged){this.$horizScroll=horizScroll;this.scrollBarH.setVisible(horizScroll);}var vScrollBefore=this.$vScroll;// autosize can change vscroll value in which case we need to update longestLine\nif(this.$maxLines&&this.lineHeight>1)this.$autosize();var offset=this.scrollTop%this.lineHeight;var minHeight=size.scrollerHeight+this.lineHeight;var scrollPastEnd=!this.$maxLines&&this.$scrollPastEnd?(size.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;maxHeight+=scrollPastEnd;var sm=this.scrollMargin;this.session.setScrollTop(Math.max(-sm.top,Math.min(this.scrollTop,maxHeight-size.scrollerHeight+sm.bottom)));this.session.setScrollLeft(Math.max(-sm.left,Math.min(this.scrollLeft,longestLine+2*this.$padding-size.scrollerWidth+sm.right)));var vScroll=!hideScrollbars&&(this.$vScrollBarAlwaysVisible||size.scrollerHeight-maxHeight+scrollPastEnd<0||this.scrollTop>sm.top);var vScrollChanged=vScrollBefore!==vScroll;if(vScrollChanged){this.$vScroll=vScroll;this.scrollBarV.setVisible(vScroll);}var lineCount=Math.ceil(minHeight/this.lineHeight)-1;var firstRow=Math.max(0,Math.round((this.scrollTop-offset)/this.lineHeight));var lastRow=firstRow+lineCount;var firstRowScreen,firstRowHeight;var lineHeight=this.lineHeight;firstRow=session.screenToDocumentRow(firstRow,0);var foldLine=session.getFoldLine(firstRow);if(foldLine){firstRow=foldLine.start.row;}firstRowScreen=session.documentToScreenRow(firstRow,0);firstRowHeight=session.getRowLength(firstRow)*lineHeight;lastRow=Math.min(session.screenToDocumentRow(lastRow,0),session.getLength()-1);minHeight=size.scrollerHeight+session.getRowLength(lastRow)*lineHeight+firstRowHeight;offset=this.scrollTop-firstRowScreen*lineHeight;var changes=0;if(this.layerConfig.width!=longestLine)changes=this.CHANGE_H_SCROLL;if(hScrollChanged||vScrollChanged){changes=this.$updateCachedSize(true,this.gutterWidth,size.width,size.height);this._signal(\"scrollbarVisibilityChanged\");if(vScrollChanged)longestLine=this.$getLongestLine();}this.layerConfig={width:longestLine,padding:this.$padding,firstRow:firstRow,firstRowScreen:firstRowScreen,lastRow:lastRow,lineHeight:lineHeight,characterWidth:this.characterWidth,minHeight:minHeight,maxHeight:maxHeight,offset:offset,gutterOffset:Math.max(0,Math.ceil((offset+size.height-size.scrollerHeight)/lineHeight)),height:this.$size.scrollerHeight};return changes;};this.$updateLines=function(){var firstRow=this.$changedLines.firstRow;var lastRow=this.$changedLines.lastRow;this.$changedLines=null;var layerConfig=this.layerConfig;if(firstRow>layerConfig.lastRow+1){return;}if(lastRow<layerConfig.firstRow){return;}if(lastRow===Infinity){if(this.$showGutter)this.$gutterLayer.update(layerConfig);this.$textLayer.update(layerConfig);return;}this.$textLayer.updateLines(layerConfig,firstRow,lastRow);return true;};this.$getLongestLine=function(){var charCount=this.session.getScreenWidth();if(this.showInvisibles&&!this.session.$useWrapMode)charCount+=1;return Math.max(this.$size.scrollerWidth-2*this.$padding,Math.round(charCount*this.characterWidth));};this.updateFrontMarkers=function(){this.$markerFront.setMarkers(this.session.getMarkers(true));this.$loop.schedule(this.CHANGE_MARKER_FRONT);};this.updateBackMarkers=function(){this.$markerBack.setMarkers(this.session.getMarkers());this.$loop.schedule(this.CHANGE_MARKER_BACK);};this.addGutterDecoration=function(row,className){this.$gutterLayer.addGutterDecoration(row,className);};this.removeGutterDecoration=function(row,className){this.$gutterLayer.removeGutterDecoration(row,className);};this.updateBreakpoints=function(rows){this.$loop.schedule(this.CHANGE_GUTTER);};this.setAnnotations=function(annotations){this.$gutterLayer.setAnnotations(annotations);this.$loop.schedule(this.CHANGE_GUTTER);};this.updateCursor=function(){this.$loop.schedule(this.CHANGE_CURSOR);};this.hideCursor=function(){this.$cursorLayer.hideCursor();};this.showCursor=function(){this.$cursorLayer.showCursor();};this.scrollSelectionIntoView=function(anchor,lead,offset){this.scrollCursorIntoView(anchor,offset);this.scrollCursorIntoView(lead,offset);};this.scrollCursorIntoView=function(cursor,offset,$viewMargin){if(this.$size.scrollerHeight===0)return;var pos=this.$cursorLayer.getPixelPosition(cursor);var left=pos.left;var top=pos.top;var topMargin=$viewMargin&&$viewMargin.top||0;var bottomMargin=$viewMargin&&$viewMargin.bottom||0;var scrollTop=this.$scrollAnimation?this.session.getScrollTop():this.scrollTop;if(scrollTop+topMargin>top){if(offset&&scrollTop+topMargin>top+this.lineHeight)top-=offset*this.$size.scrollerHeight;if(top===0)top=-this.scrollMargin.top;this.session.setScrollTop(top);}else if(scrollTop+this.$size.scrollerHeight-bottomMargin<top+this.lineHeight){if(offset&&scrollTop+this.$size.scrollerHeight-bottomMargin<top-this.lineHeight)top+=offset*this.$size.scrollerHeight;this.session.setScrollTop(top+this.lineHeight-this.$size.scrollerHeight);}var scrollLeft=this.scrollLeft;if(scrollLeft>left){if(left<this.$padding+2*this.layerConfig.characterWidth)left=-this.scrollMargin.left;this.session.setScrollLeft(left);}else if(scrollLeft+this.$size.scrollerWidth<left+this.characterWidth){this.session.setScrollLeft(Math.round(left+this.characterWidth-this.$size.scrollerWidth));}else if(scrollLeft<=this.$padding&&left-scrollLeft<this.characterWidth){this.session.setScrollLeft(0);}};this.getScrollTop=function(){return this.session.getScrollTop();};this.getScrollLeft=function(){return this.session.getScrollLeft();};this.getScrollTopRow=function(){return this.scrollTop/this.lineHeight;};this.getScrollBottomRow=function(){return Math.max(0,Math.floor((this.scrollTop+this.$size.scrollerHeight)/this.lineHeight)-1);};this.scrollToRow=function(row){this.session.setScrollTop(row*this.lineHeight);};this.alignCursor=function(cursor,alignment){if(typeof cursor==\"number\")cursor={row:cursor,column:0};var pos=this.$cursorLayer.getPixelPosition(cursor);var h=this.$size.scrollerHeight-this.lineHeight;var offset=pos.top-h*(alignment||0);this.session.setScrollTop(offset);return offset;};this.STEPS=8;this.$calcSteps=function(fromValue,toValue){var i=0;var l=this.STEPS;var steps=[];var func=function(t,x_min,dx){return dx*(Math.pow(t-1,3)+1)+x_min;};for(i=0;i<l;++i)steps.push(func(i/this.STEPS,fromValue,toValue-fromValue));return steps;};this.scrollToLine=function(line,center,animate,callback){var pos=this.$cursorLayer.getPixelPosition({row:line,column:0});var offset=pos.top;if(center)offset-=this.$size.scrollerHeight/2;var initialScroll=this.scrollTop;this.session.setScrollTop(offset);if(animate!==false)this.animateScrolling(initialScroll,callback);};this.animateScrolling=function(fromValue,callback){var toValue=this.scrollTop;if(!this.$animatedScroll)return;var _self=this;if(fromValue==toValue)return;if(this.$scrollAnimation){var oldSteps=this.$scrollAnimation.steps;if(oldSteps.length){fromValue=oldSteps[0];if(fromValue==toValue)return;}}var steps=_self.$calcSteps(fromValue,toValue);this.$scrollAnimation={from:fromValue,to:toValue,steps:steps};clearInterval(this.$timer);_self.session.setScrollTop(steps.shift());_self.session.$scrollTop=toValue;this.$timer=setInterval(function(){if(steps.length){_self.session.setScrollTop(steps.shift());_self.session.$scrollTop=toValue;}else if(toValue!=null){_self.session.$scrollTop=-1;_self.session.setScrollTop(toValue);toValue=null;}else{_self.$timer=clearInterval(_self.$timer);_self.$scrollAnimation=null;callback&&callback();}},10);};this.scrollToY=function(scrollTop){if(this.scrollTop!==scrollTop){this.$loop.schedule(this.CHANGE_SCROLL);this.scrollTop=scrollTop;}};this.scrollToX=function(scrollLeft){if(this.scrollLeft!==scrollLeft)this.scrollLeft=scrollLeft;this.$loop.schedule(this.CHANGE_H_SCROLL);};this.scrollTo=function(x,y){this.session.setScrollTop(y);this.session.setScrollLeft(y);};this.scrollBy=function(deltaX,deltaY){deltaY&&this.session.setScrollTop(this.session.getScrollTop()+deltaY);deltaX&&this.session.setScrollLeft(this.session.getScrollLeft()+deltaX);};this.isScrollableBy=function(deltaX,deltaY){if(deltaY<0&&this.session.getScrollTop()>=1-this.scrollMargin.top)return true;if(deltaY>0&&this.session.getScrollTop()+this.$size.scrollerHeight-this.layerConfig.maxHeight<-1+this.scrollMargin.bottom)return true;if(deltaX<0&&this.session.getScrollLeft()>=1-this.scrollMargin.left)return true;if(deltaX>0&&this.session.getScrollLeft()+this.$size.scrollerWidth-this.layerConfig.width<-1+this.scrollMargin.right)return true;};this.pixelToScreenCoordinates=function(x,y){var canvasPos=this.scroller.getBoundingClientRect();var offset=(x+this.scrollLeft-canvasPos.left-this.$padding)/this.characterWidth;var row=Math.floor((y+this.scrollTop-canvasPos.top)/this.lineHeight);var col=Math.round(offset);return{row:row,column:col,side:offset-col>0?1:-1};};this.screenToTextCoordinates=function(x,y){var canvasPos=this.scroller.getBoundingClientRect();var col=Math.round((x+this.scrollLeft-canvasPos.left-this.$padding)/this.characterWidth);var row=(y+this.scrollTop-canvasPos.top)/this.lineHeight;return this.session.screenToDocumentPosition(row,Math.max(col,0));};this.textToScreenCoordinates=function(row,column){var canvasPos=this.scroller.getBoundingClientRect();var pos=this.session.documentToScreenPosition(row,column);var x=this.$padding+Math.round(pos.column*this.characterWidth);var y=pos.row*this.lineHeight;return{pageX:canvasPos.left+x-this.scrollLeft,pageY:canvasPos.top+y-this.scrollTop};};this.visualizeFocus=function(){dom.addCssClass(this.container,\"ace_focus\");};this.visualizeBlur=function(){dom.removeCssClass(this.container,\"ace_focus\");};this.showComposition=function(position){if(!this.$composition)this.$composition={keepTextAreaAtCursor:this.$keepTextAreaAtCursor,cssText:this.textarea.style.cssText};this.$keepTextAreaAtCursor=true;dom.addCssClass(this.textarea,\"ace_composition\");this.textarea.style.cssText=\"\";this.$moveTextAreaToCursor();};this.setCompositionText=function(text){this.$moveTextAreaToCursor();};this.hideComposition=function(){if(!this.$composition)return;dom.removeCssClass(this.textarea,\"ace_composition\");this.$keepTextAreaAtCursor=this.$composition.keepTextAreaAtCursor;this.textarea.style.cssText=this.$composition.cssText;this.$composition=null;};this.setTheme=function(theme,cb){var _self=this;this.$themeId=theme;_self._dispatchEvent('themeChange',{theme:theme});if(!theme||typeof theme==\"string\"){var moduleName=theme||this.$options.theme.initialValue;config.loadModule([\"theme\",moduleName],afterLoad);}else{afterLoad(theme);}function afterLoad(module){if(_self.$themeId!=theme)return cb&&cb();if(!module.cssClass)return;dom.importCssString(module.cssText,module.cssClass,_self.container.ownerDocument);if(_self.theme)dom.removeCssClass(_self.container,_self.theme.cssClass);var padding=\"padding\"in module?module.padding:\"padding\"in(_self.theme||{})?4:_self.$padding;if(_self.$padding&&padding!=_self.$padding)_self.setPadding(padding);_self.$theme=module.cssClass;_self.theme=module;dom.addCssClass(_self.container,module.cssClass);dom.setCssClass(_self.container,\"ace_dark\",module.isDark);if(_self.$size){_self.$size.width=0;_self.$updateSizeAsync();}_self._dispatchEvent('themeLoaded',{theme:module});cb&&cb();}};this.getTheme=function(){return this.$themeId;};this.setStyle=function(style,include){dom.setCssClass(this.container,style,include!==false);};this.unsetStyle=function(style){dom.removeCssClass(this.container,style);};this.setCursorStyle=function(style){if(this.scroller.style.cursor!=style)this.scroller.style.cursor=style;};this.setMouseCursor=function(cursorStyle){this.scroller.style.cursor=cursorStyle;};this.destroy=function(){this.$textLayer.destroy();this.$cursorLayer.destroy();};}).call(VirtualRenderer.prototype);config.defineOptions(VirtualRenderer.prototype,\"renderer\",{animatedScroll:{initialValue:false},showInvisibles:{set:function(value){if(this.$textLayer.setShowInvisibles(value))this.$loop.schedule(this.CHANGE_TEXT);},initialValue:false},showPrintMargin:{set:function(){this.$updatePrintMargin();},initialValue:true},printMarginColumn:{set:function(){this.$updatePrintMargin();},initialValue:80},printMargin:{set:function(val){if(typeof val==\"number\")this.$printMarginColumn=val;this.$showPrintMargin=!!val;this.$updatePrintMargin();},get:function(){return this.$showPrintMargin&&this.$printMarginColumn;}},showGutter:{set:function(show){this.$gutter.style.display=show?\"block\":\"none\";this.$loop.schedule(this.CHANGE_FULL);this.onGutterResize();},initialValue:true},fadeFoldWidgets:{set:function(show){dom.setCssClass(this.$gutter,\"ace_fade-fold-widgets\",show);},initialValue:false},showFoldWidgets:{set:function(show){this.$gutterLayer.setShowFoldWidgets(show);},initialValue:true},showLineNumbers:{set:function(show){this.$gutterLayer.setShowLineNumbers(show);this.$loop.schedule(this.CHANGE_GUTTER);},initialValue:true},displayIndentGuides:{set:function(show){if(this.$textLayer.setDisplayIndentGuides(show))this.$loop.schedule(this.CHANGE_TEXT);},initialValue:true},highlightGutterLine:{set:function(shouldHighlight){if(!this.$gutterLineHighlight){this.$gutterLineHighlight=dom.createElement(\"div\");this.$gutterLineHighlight.className=\"ace_gutter-active-line\";this.$gutter.appendChild(this.$gutterLineHighlight);return;}this.$gutterLineHighlight.style.display=shouldHighlight?\"\":\"none\";if(this.$cursorLayer.$pixelPos)this.$updateGutterLineHighlight();},initialValue:false,value:true},hScrollBarAlwaysVisible:{set:function(val){if(!this.$hScrollBarAlwaysVisible||!this.$horizScroll)this.$loop.schedule(this.CHANGE_SCROLL);},initialValue:false},vScrollBarAlwaysVisible:{set:function(val){if(!this.$vScrollBarAlwaysVisible||!this.$vScroll)this.$loop.schedule(this.CHANGE_SCROLL);},initialValue:false},fontSize:{set:function(size){if(typeof size==\"number\")size=size+\"px\";this.container.style.fontSize=size;this.updateFontSize();},initialValue:12},fontFamily:{set:function(name){this.container.style.fontFamily=name;this.updateFontSize();}},maxLines:{set:function(val){this.updateFull();}},minLines:{set:function(val){this.updateFull();}},scrollPastEnd:{set:function(val){val=+val||0;if(this.$scrollPastEnd==val)return;this.$scrollPastEnd=val;this.$loop.schedule(this.CHANGE_SCROLL);},initialValue:0,handlesSet:true},fixedWidthGutter:{set:function(val){this.$gutterLayer.$fixedWidth=!!val;this.$loop.schedule(this.CHANGE_GUTTER);}},theme:{set:function(val){this.setTheme(val);},get:function(){return this.$themeId||this.theme;},initialValue:\"./theme/textmate\",handlesSet:true}});exports.VirtualRenderer=VirtualRenderer;});ace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"],function(acequire,exports,module){\"use strict\";var oop=acequire(\"../lib/oop\");var net=acequire(\"../lib/net\");var EventEmitter=acequire(\"../lib/event_emitter\").EventEmitter;var config=acequire(\"../config\");var WorkerClient=function(topLevelNamespaces,mod,classname,workerUrl){this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this);this.changeListener=this.changeListener.bind(this);this.onMessage=this.onMessage.bind(this);if(acequire.nameToUrl&&!acequire.toUrl)acequire.toUrl=acequire.nameToUrl;if(config.get(\"packaged\")||!acequire.toUrl){workerUrl=workerUrl||config.moduleUrl(mod.id,\"worker\");}else{var normalizePath=this.$normalizePath;workerUrl=workerUrl||normalizePath(acequire.toUrl(\"ace/worker/worker.js\",null,\"_\"));var tlns={};topLevelNamespaces.forEach(function(ns){tlns[ns]=normalizePath(acequire.toUrl(ns,null,\"_\").replace(/(\\.js)?(\\?.*)?$/,\"\"));});}try{var workerSrc=mod.src;var Blob=__webpack_require__(66);var blob=new Blob([workerSrc],{type:'application/javascript'});var blobUrl=(window.URL||window.webkitURL).createObjectURL(blob);this.$worker=new Worker(blobUrl);}catch(e){if(e instanceof window.DOMException){var blob=this.$workerBlob(workerUrl);var URL=window.URL||window.webkitURL;var blobURL=URL.createObjectURL(blob);this.$worker=new Worker(blobURL);URL.revokeObjectURL(blobURL);}else{throw e;}}this.$worker.postMessage({init:true,tlns:tlns,module:mod.id,classname:classname});this.callbackId=1;this.callbacks={};this.$worker.onmessage=this.onMessage;};(function(){oop.implement(this,EventEmitter);this.onMessage=function(e){var msg=e.data;switch(msg.type){case\"event\":this._signal(msg.name,{data:msg.data});break;case\"call\":var callback=this.callbacks[msg.id];if(callback){callback(msg.data);delete this.callbacks[msg.id];}break;case\"error\":this.reportError(msg.data);break;case\"log\":window.console&&console.log&&console.log.apply(console,msg.data);break;}};this.reportError=function(err){window.console&&console.error&&console.error(err);};this.$normalizePath=function(path){return net.qualifyURL(path);};this.terminate=function(){this._signal(\"terminate\",{});this.deltaQueue=null;this.$worker.terminate();this.$worker=null;if(this.$doc)this.$doc.off(\"change\",this.changeListener);this.$doc=null;};this.send=function(cmd,args){this.$worker.postMessage({command:cmd,args:args});};this.call=function(cmd,args,callback){if(callback){var id=this.callbackId++;this.callbacks[id]=callback;args.push(id);}this.send(cmd,args);};this.emit=function(event,data){try{this.$worker.postMessage({event:event,data:{data:data.data}});}catch(ex){console.error(ex.stack);}};this.attachToDocument=function(doc){if(this.$doc)this.terminate();this.$doc=doc;this.call(\"setValue\",[doc.getValue()]);doc.on(\"change\",this.changeListener);};this.changeListener=function(delta){if(!this.deltaQueue){this.deltaQueue=[];setTimeout(this.$sendDeltaQueue,0);}if(delta.action==\"insert\")this.deltaQueue.push(delta.start,delta.lines);else this.deltaQueue.push(delta.start,delta.end);};this.$sendDeltaQueue=function(){var q=this.deltaQueue;if(!q)return;this.deltaQueue=null;if(q.length>50&&q.length>this.$doc.getLength()>>1){this.call(\"setValue\",[this.$doc.getValue()]);}else this.emit(\"change\",{data:q});};this.$workerBlob=function(workerUrl){var script=\"importScripts('\"+net.qualifyURL(workerUrl)+\"');\";try{return new Blob([script],{\"type\":\"application/javascript\"});}catch(e){// Backwards-compatibility\nvar BlobBuilder=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder;var blobBuilder=new BlobBuilder();blobBuilder.append(script);return blobBuilder.getBlob(\"application/javascript\");}};}).call(WorkerClient.prototype);var UIWorkerClient=function(topLevelNamespaces,mod,classname){this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this);this.changeListener=this.changeListener.bind(this);this.callbackId=1;this.callbacks={};this.messageBuffer=[];var main=null;var emitSync=false;var sender=Object.create(EventEmitter);var _self=this;this.$worker={};this.$worker.terminate=function(){};this.$worker.postMessage=function(e){_self.messageBuffer.push(e);if(main){if(emitSync)setTimeout(processNext);else processNext();}};this.setEmitSync=function(val){emitSync=val;};var processNext=function(){var msg=_self.messageBuffer.shift();if(msg.command)main[msg.command].apply(main,msg.args);else if(msg.event)sender._signal(msg.event,msg.data);};sender.postMessage=function(msg){_self.onMessage({data:msg});};sender.callback=function(data,callbackId){this.postMessage({type:\"call\",id:callbackId,data:data});};sender.emit=function(name,data){this.postMessage({type:\"event\",name:name,data:data});};config.loadModule([\"worker\",mod],function(Main){main=new Main[classname](sender);while(_self.messageBuffer.length)processNext();});};UIWorkerClient.prototype=WorkerClient.prototype;exports.UIWorkerClient=UIWorkerClient;exports.WorkerClient=WorkerClient;});ace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"],function(acequire,exports,module){\"use strict\";var Range=acequire(\"./range\").Range;var EventEmitter=acequire(\"./lib/event_emitter\").EventEmitter;var oop=acequire(\"./lib/oop\");var PlaceHolder=function(session,length,pos,others,mainClass,othersClass){var _self=this;this.length=length;this.session=session;this.doc=session.getDocument();this.mainClass=mainClass;this.othersClass=othersClass;this.$onUpdate=this.onUpdate.bind(this);this.doc.on(\"change\",this.$onUpdate);this.$others=others;this.$onCursorChange=function(){setTimeout(function(){_self.onCursorChange();});};this.$pos=pos;var undoStack=session.getUndoManager().$undoStack||session.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=undoStack.length;this.setup();session.selection.on(\"changeCursor\",this.$onCursorChange);};(function(){oop.implement(this,EventEmitter);this.setup=function(){var _self=this;var doc=this.doc;var session=this.session;this.selectionBefore=session.selection.toJSON();if(session.selection.inMultiSelectMode)session.selection.toSingleRange();this.pos=doc.createAnchor(this.$pos.row,this.$pos.column);var pos=this.pos;pos.$insertRight=true;pos.detach();pos.markerId=session.addMarker(new Range(pos.row,pos.column,pos.row,pos.column+this.length),this.mainClass,null,false);this.others=[];this.$others.forEach(function(other){var anchor=doc.createAnchor(other.row,other.column);anchor.$insertRight=true;anchor.detach();_self.others.push(anchor);});session.setUndoSelect(false);};this.showOtherMarkers=function(){if(this.othersActive)return;var session=this.session;var _self=this;this.othersActive=true;this.others.forEach(function(anchor){anchor.markerId=session.addMarker(new Range(anchor.row,anchor.column,anchor.row,anchor.column+_self.length),_self.othersClass,null,false);});};this.hideOtherMarkers=function(){if(!this.othersActive)return;this.othersActive=false;for(var i=0;i<this.others.length;i++){this.session.removeMarker(this.others[i].markerId);}};this.onUpdate=function(delta){if(this.$updating)return this.updateAnchors(delta);var range=delta;if(range.start.row!==range.end.row)return;if(range.start.row!==this.pos.row)return;this.$updating=true;var lengthDiff=delta.action===\"insert\"?range.end.column-range.start.column:range.start.column-range.end.column;var inMainRange=range.start.column>=this.pos.column&&range.start.column<=this.pos.column+this.length+1;var distanceFromStart=range.start.column-this.pos.column;this.updateAnchors(delta);if(inMainRange)this.length+=lengthDiff;if(inMainRange&&!this.session.$fromUndo){if(delta.action==='insert'){for(var i=this.others.length-1;i>=0;i--){var otherPos=this.others[i];var newPos={row:otherPos.row,column:otherPos.column+distanceFromStart};this.doc.insertMergedLines(newPos,delta.lines);}}else if(delta.action==='remove'){for(var i=this.others.length-1;i>=0;i--){var otherPos=this.others[i];var newPos={row:otherPos.row,column:otherPos.column+distanceFromStart};this.doc.remove(new Range(newPos.row,newPos.column,newPos.row,newPos.column-lengthDiff));}}}this.$updating=false;this.updateMarkers();};this.updateAnchors=function(delta){this.pos.onChange(delta);for(var i=this.others.length;i--;)this.others[i].onChange(delta);this.updateMarkers();};this.updateMarkers=function(){if(this.$updating)return;var _self=this;var session=this.session;var updateMarker=function(pos,className){session.removeMarker(pos.markerId);pos.markerId=session.addMarker(new Range(pos.row,pos.column,pos.row,pos.column+_self.length),className,null,false);};updateMarker(this.pos,this.mainClass);for(var i=this.others.length;i--;)updateMarker(this.others[i],this.othersClass);};this.onCursorChange=function(event){if(this.$updating||!this.session)return;var pos=this.session.selection.getCursor();if(pos.row===this.pos.row&&pos.column>=this.pos.column&&pos.column<=this.pos.column+this.length){this.showOtherMarkers();this._emit(\"cursorEnter\",event);}else{this.hideOtherMarkers();this._emit(\"cursorLeave\",event);}};this.detach=function(){this.session.removeMarker(this.pos&&this.pos.markerId);this.hideOtherMarkers();this.doc.removeEventListener(\"change\",this.$onUpdate);this.session.selection.removeEventListener(\"changeCursor\",this.$onCursorChange);this.session.setUndoSelect(true);this.session=null;};this.cancel=function(){if(this.$undoStackDepth===-1)return;var undoManager=this.session.getUndoManager();var undosRequired=(undoManager.$undoStack||undoManager.$undostack).length-this.$undoStackDepth;for(var i=0;i<undosRequired;i++){undoManager.undo(true);}if(this.selectionBefore)this.session.selection.fromJSON(this.selectionBefore);};}).call(PlaceHolder.prototype);exports.PlaceHolder=PlaceHolder;});ace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"],function(acequire,exports,module){var event=acequire(\"../lib/event\");var useragent=acequire(\"../lib/useragent\");function isSamePoint(p1,p2){return p1.row==p2.row&&p1.column==p2.column;}function onMouseDown(e){var ev=e.domEvent;var alt=ev.altKey;var shift=ev.shiftKey;var ctrl=ev.ctrlKey;var accel=e.getAccelKey();var button=e.getButton();if(ctrl&&useragent.isMac)button=ev.button;if(e.editor.inMultiSelectMode&&button==2){e.editor.textInput.onContextMenu(e.domEvent);return;}if(!ctrl&&!alt&&!accel){if(button===0&&e.editor.inMultiSelectMode)e.editor.exitMultiSelectMode();return;}if(button!==0)return;var editor=e.editor;var selection=editor.selection;var isMultiSelect=editor.inMultiSelectMode;var pos=e.getDocumentPosition();var cursor=selection.getCursor();var inSelection=e.inSelection()||selection.isEmpty()&&isSamePoint(pos,cursor);var mouseX=e.x,mouseY=e.y;var onMouseSelection=function(e){mouseX=e.clientX;mouseY=e.clientY;};var session=editor.session;var screenAnchor=editor.renderer.pixelToScreenCoordinates(mouseX,mouseY);var screenCursor=screenAnchor;var selectionMode;if(editor.$mouseHandler.$enableJumpToDef){if(ctrl&&alt||accel&&alt)selectionMode=shift?\"block\":\"add\";else if(alt&&editor.$blockSelectEnabled)selectionMode=\"block\";}else{if(accel&&!alt){selectionMode=\"add\";if(!isMultiSelect&&shift)return;}else if(alt&&editor.$blockSelectEnabled){selectionMode=\"block\";}}if(selectionMode&&useragent.isMac&&ev.ctrlKey){editor.$mouseHandler.cancelContextMenu();}if(selectionMode==\"add\"){if(!isMultiSelect&&inSelection)return;// dragging\nif(!isMultiSelect){var range=selection.toOrientedRange();editor.addSelectionMarker(range);}var oldRange=selection.rangeList.rangeAtPoint(pos);editor.$blockScrolling++;editor.inVirtualSelectionMode=true;if(shift){oldRange=null;range=selection.ranges[0]||range;editor.removeSelectionMarker(range);}editor.once(\"mouseup\",function(){var tmpSel=selection.toOrientedRange();if(oldRange&&tmpSel.isEmpty()&&isSamePoint(oldRange.cursor,tmpSel.cursor))selection.substractPoint(tmpSel.cursor);else{if(shift){selection.substractPoint(range.cursor);}else if(range){editor.removeSelectionMarker(range);selection.addRange(range);}selection.addRange(tmpSel);}editor.$blockScrolling--;editor.inVirtualSelectionMode=false;});}else if(selectionMode==\"block\"){e.stop();editor.inVirtualSelectionMode=true;var initialRange;var rectSel=[];var blockSelect=function(){var newCursor=editor.renderer.pixelToScreenCoordinates(mouseX,mouseY);var cursor=session.screenToDocumentPosition(newCursor.row,newCursor.column);if(isSamePoint(screenCursor,newCursor)&&isSamePoint(cursor,selection.lead))return;screenCursor=newCursor;editor.$blockScrolling++;editor.selection.moveToPosition(cursor);editor.renderer.scrollCursorIntoView();editor.removeSelectionMarkers(rectSel);rectSel=selection.rectangularRangeBlock(screenCursor,screenAnchor);if(editor.$mouseHandler.$clickSelection&&rectSel.length==1&&rectSel[0].isEmpty())rectSel[0]=editor.$mouseHandler.$clickSelection.clone();rectSel.forEach(editor.addSelectionMarker,editor);editor.updateSelectionMarkers();editor.$blockScrolling--;};editor.$blockScrolling++;if(isMultiSelect&&!accel){selection.toSingleRange();}else if(!isMultiSelect&&accel){initialRange=selection.toOrientedRange();editor.addSelectionMarker(initialRange);}if(shift)screenAnchor=session.documentToScreenPosition(selection.lead);else selection.moveToPosition(pos);editor.$blockScrolling--;screenCursor={row:-1,column:-1};var onMouseSelectionEnd=function(e){clearInterval(timerId);editor.removeSelectionMarkers(rectSel);if(!rectSel.length)rectSel=[selection.toOrientedRange()];editor.$blockScrolling++;if(initialRange){editor.removeSelectionMarker(initialRange);selection.toSingleRange(initialRange);}for(var i=0;i<rectSel.length;i++)selection.addRange(rectSel[i]);editor.inVirtualSelectionMode=false;editor.$mouseHandler.$clickSelection=null;editor.$blockScrolling--;};var onSelectionInterval=blockSelect;event.capture(editor.container,onMouseSelection,onMouseSelectionEnd);var timerId=setInterval(function(){onSelectionInterval();},20);return e.preventDefault();}}exports.onMouseDown=onMouseDown;});ace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"],function(acequire,exports,module){exports.defaultCommands=[{name:\"addCursorAbove\",exec:function(editor){editor.selectMoreLines(-1);},bindKey:{win:\"Ctrl-Alt-Up\",mac:\"Ctrl-Alt-Up\"},scrollIntoView:\"cursor\",readOnly:true},{name:\"addCursorBelow\",exec:function(editor){editor.selectMoreLines(1);},bindKey:{win:\"Ctrl-Alt-Down\",mac:\"Ctrl-Alt-Down\"},scrollIntoView:\"cursor\",readOnly:true},{name:\"addCursorAboveSkipCurrent\",exec:function(editor){editor.selectMoreLines(-1,true);},bindKey:{win:\"Ctrl-Alt-Shift-Up\",mac:\"Ctrl-Alt-Shift-Up\"},scrollIntoView:\"cursor\",readOnly:true},{name:\"addCursorBelowSkipCurrent\",exec:function(editor){editor.selectMoreLines(1,true);},bindKey:{win:\"Ctrl-Alt-Shift-Down\",mac:\"Ctrl-Alt-Shift-Down\"},scrollIntoView:\"cursor\",readOnly:true},{name:\"selectMoreBefore\",exec:function(editor){editor.selectMore(-1);},bindKey:{win:\"Ctrl-Alt-Left\",mac:\"Ctrl-Alt-Left\"},scrollIntoView:\"cursor\",readOnly:true},{name:\"selectMoreAfter\",exec:function(editor){editor.selectMore(1);},bindKey:{win:\"Ctrl-Alt-Right\",mac:\"Ctrl-Alt-Right\"},scrollIntoView:\"cursor\",readOnly:true},{name:\"selectNextBefore\",exec:function(editor){editor.selectMore(-1,true);},bindKey:{win:\"Ctrl-Alt-Shift-Left\",mac:\"Ctrl-Alt-Shift-Left\"},scrollIntoView:\"cursor\",readOnly:true},{name:\"selectNextAfter\",exec:function(editor){editor.selectMore(1,true);},bindKey:{win:\"Ctrl-Alt-Shift-Right\",mac:\"Ctrl-Alt-Shift-Right\"},scrollIntoView:\"cursor\",readOnly:true},{name:\"splitIntoLines\",exec:function(editor){editor.multiSelect.splitIntoLines();},bindKey:{win:\"Ctrl-Alt-L\",mac:\"Ctrl-Alt-L\"},readOnly:true},{name:\"alignCursors\",exec:function(editor){editor.alignCursors();},bindKey:{win:\"Ctrl-Alt-A\",mac:\"Ctrl-Alt-A\"},scrollIntoView:\"cursor\"},{name:\"findAll\",exec:function(editor){editor.findAll();},bindKey:{win:\"Ctrl-Alt-K\",mac:\"Ctrl-Alt-G\"},scrollIntoView:\"cursor\",readOnly:true}];exports.multiSelectCommands=[{name:\"singleSelection\",bindKey:\"esc\",exec:function(editor){editor.exitMultiSelectMode();},scrollIntoView:\"cursor\",readOnly:true,isAvailable:function(editor){return editor&&editor.inMultiSelectMode;}}];var HashHandler=acequire(\"../keyboard/hash_handler\").HashHandler;exports.keyboardHandler=new HashHandler(exports.multiSelectCommands);});ace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"],function(acequire,exports,module){var RangeList=acequire(\"./range_list\").RangeList;var Range=acequire(\"./range\").Range;var Selection=acequire(\"./selection\").Selection;var onMouseDown=acequire(\"./mouse/multi_select_handler\").onMouseDown;var event=acequire(\"./lib/event\");var lang=acequire(\"./lib/lang\");var commands=acequire(\"./commands/multi_select_commands\");exports.commands=commands.defaultCommands.concat(commands.multiSelectCommands);var Search=acequire(\"./search\").Search;var search=new Search();function find(session,needle,dir){search.$options.wrap=true;search.$options.needle=needle;search.$options.backwards=dir==-1;return search.find(session);}var EditSession=acequire(\"./edit_session\").EditSession;(function(){this.getSelectionMarkers=function(){return this.$selectionMarkers;};}).call(EditSession.prototype);(function(){this.ranges=null;this.rangeList=null;this.addRange=function(range,$blockChangeEvents){if(!range)return;if(!this.inMultiSelectMode&&this.rangeCount===0){var oldRange=this.toOrientedRange();this.rangeList.add(oldRange);this.rangeList.add(range);if(this.rangeList.ranges.length!=2){this.rangeList.removeAll();return $blockChangeEvents||this.fromOrientedRange(range);}this.rangeList.removeAll();this.rangeList.add(oldRange);this.$onAddRange(oldRange);}if(!range.cursor)range.cursor=range.end;var removed=this.rangeList.add(range);this.$onAddRange(range);if(removed.length)this.$onRemoveRange(removed);if(this.rangeCount>1&&!this.inMultiSelectMode){this._signal(\"multiSelect\");this.inMultiSelectMode=true;this.session.$undoSelect=false;this.rangeList.attach(this.session);}return $blockChangeEvents||this.fromOrientedRange(range);};this.toSingleRange=function(range){range=range||this.ranges[0];var removed=this.rangeList.removeAll();if(removed.length)this.$onRemoveRange(removed);range&&this.fromOrientedRange(range);};this.substractPoint=function(pos){var removed=this.rangeList.substractPoint(pos);if(removed){this.$onRemoveRange(removed);return removed[0];}};this.mergeOverlappingRanges=function(){var removed=this.rangeList.merge();if(removed.length)this.$onRemoveRange(removed);else if(this.ranges[0])this.fromOrientedRange(this.ranges[0]);};this.$onAddRange=function(range){this.rangeCount=this.rangeList.ranges.length;this.ranges.unshift(range);this._signal(\"addRange\",{range:range});};this.$onRemoveRange=function(removed){this.rangeCount=this.rangeList.ranges.length;if(this.rangeCount==1&&this.inMultiSelectMode){var lastRange=this.rangeList.ranges.pop();removed.push(lastRange);this.rangeCount=0;}for(var i=removed.length;i--;){var index=this.ranges.indexOf(removed[i]);this.ranges.splice(index,1);}this._signal(\"removeRange\",{ranges:removed});if(this.rangeCount===0&&this.inMultiSelectMode){this.inMultiSelectMode=false;this._signal(\"singleSelect\");this.session.$undoSelect=true;this.rangeList.detach(this.session);}lastRange=lastRange||this.ranges[0];if(lastRange&&!lastRange.isEqual(this.getRange()))this.fromOrientedRange(lastRange);};this.$initRangeList=function(){if(this.rangeList)return;this.rangeList=new RangeList();this.ranges=[];this.rangeCount=0;};this.getAllRanges=function(){return this.rangeCount?this.rangeList.ranges.concat():[this.getRange()];};this.splitIntoLines=function(){if(this.rangeCount>1){var ranges=this.rangeList.ranges;var lastRange=ranges[ranges.length-1];var range=Range.fromPoints(ranges[0].start,lastRange.end);this.toSingleRange();this.setSelectionRange(range,lastRange.cursor==lastRange.start);}else{var range=this.getRange();var isBackwards=this.isBackwards();var startRow=range.start.row;var endRow=range.end.row;if(startRow==endRow){if(isBackwards)var start=range.end,end=range.start;else var start=range.start,end=range.end;this.addRange(Range.fromPoints(end,end));this.addRange(Range.fromPoints(start,start));return;}var rectSel=[];var r=this.getLineRange(startRow,true);r.start.column=range.start.column;rectSel.push(r);for(var i=startRow+1;i<endRow;i++)rectSel.push(this.getLineRange(i,true));r=this.getLineRange(endRow,true);r.end.column=range.end.column;rectSel.push(r);rectSel.forEach(this.addRange,this);}};this.toggleBlockSelection=function(){if(this.rangeCount>1){var ranges=this.rangeList.ranges;var lastRange=ranges[ranges.length-1];var range=Range.fromPoints(ranges[0].start,lastRange.end);this.toSingleRange();this.setSelectionRange(range,lastRange.cursor==lastRange.start);}else{var cursor=this.session.documentToScreenPosition(this.selectionLead);var anchor=this.session.documentToScreenPosition(this.selectionAnchor);var rectSel=this.rectangularRangeBlock(cursor,anchor);rectSel.forEach(this.addRange,this);}};this.rectangularRangeBlock=function(screenCursor,screenAnchor,includeEmptyLines){var rectSel=[];var xBackwards=screenCursor.column<screenAnchor.column;if(xBackwards){var startColumn=screenCursor.column;var endColumn=screenAnchor.column;}else{var startColumn=screenAnchor.column;var endColumn=screenCursor.column;}var yBackwards=screenCursor.row<screenAnchor.row;if(yBackwards){var startRow=screenCursor.row;var endRow=screenAnchor.row;}else{var startRow=screenAnchor.row;var endRow=screenCursor.row;}if(startColumn<0)startColumn=0;if(startRow<0)startRow=0;if(startRow==endRow)includeEmptyLines=true;for(var row=startRow;row<=endRow;row++){var range=Range.fromPoints(this.session.screenToDocumentPosition(row,startColumn),this.session.screenToDocumentPosition(row,endColumn));if(range.isEmpty()){if(docEnd&&isSamePoint(range.end,docEnd))break;var docEnd=range.end;}range.cursor=xBackwards?range.start:range.end;rectSel.push(range);}if(yBackwards)rectSel.reverse();if(!includeEmptyLines){var end=rectSel.length-1;while(rectSel[end].isEmpty()&&end>0)end--;if(end>0){var start=0;while(rectSel[start].isEmpty())start++;}for(var i=end;i>=start;i--){if(rectSel[i].isEmpty())rectSel.splice(i,1);}}return rectSel;};}).call(Selection.prototype);var Editor=acequire(\"./editor\").Editor;(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor();this.renderer.updateBackMarkers();};this.addSelectionMarker=function(orientedRange){if(!orientedRange.cursor)orientedRange.cursor=orientedRange.end;var style=this.getSelectionStyle();orientedRange.marker=this.session.addMarker(orientedRange,\"ace_selection\",style);this.session.$selectionMarkers.push(orientedRange);this.session.selectionMarkerCount=this.session.$selectionMarkers.length;return orientedRange;};this.removeSelectionMarker=function(range){if(!range.marker)return;this.session.removeMarker(range.marker);var index=this.session.$selectionMarkers.indexOf(range);if(index!=-1)this.session.$selectionMarkers.splice(index,1);this.session.selectionMarkerCount=this.session.$selectionMarkers.length;};this.removeSelectionMarkers=function(ranges){var markerList=this.session.$selectionMarkers;for(var i=ranges.length;i--;){var range=ranges[i];if(!range.marker)continue;this.session.removeMarker(range.marker);var index=markerList.indexOf(range);if(index!=-1)markerList.splice(index,1);}this.session.selectionMarkerCount=markerList.length;};this.$onAddRange=function(e){this.addSelectionMarker(e.range);this.renderer.updateCursor();this.renderer.updateBackMarkers();};this.$onRemoveRange=function(e){this.removeSelectionMarkers(e.ranges);this.renderer.updateCursor();this.renderer.updateBackMarkers();};this.$onMultiSelect=function(e){if(this.inMultiSelectMode)return;this.inMultiSelectMode=true;this.setStyle(\"ace_multiselect\");this.keyBinding.addKeyboardHandler(commands.keyboardHandler);this.commands.setDefaultHandler(\"exec\",this.$onMultiSelectExec);this.renderer.updateCursor();this.renderer.updateBackMarkers();};this.$onSingleSelect=function(e){if(this.session.multiSelect.inVirtualMode)return;this.inMultiSelectMode=false;this.unsetStyle(\"ace_multiselect\");this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);this.commands.removeDefaultHandler(\"exec\",this.$onMultiSelectExec);this.renderer.updateCursor();this.renderer.updateBackMarkers();this._emit(\"changeSelection\");};this.$onMultiSelectExec=function(e){var command=e.command;var editor=e.editor;if(!editor.multiSelect)return;if(!command.multiSelectAction){var result=command.exec(editor,e.args||{});editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());editor.multiSelect.mergeOverlappingRanges();}else if(command.multiSelectAction==\"forEach\"){result=editor.forEachSelection(command,e.args);}else if(command.multiSelectAction==\"forEachLine\"){result=editor.forEachSelection(command,e.args,true);}else if(command.multiSelectAction==\"single\"){editor.exitMultiSelectMode();result=command.exec(editor,e.args||{});}else{result=command.multiSelectAction(editor,e.args||{});}return result;};this.forEachSelection=function(cmd,args,options){if(this.inVirtualSelectionMode)return;var keepOrder=options&&options.keepOrder;var $byLines=options==true||options&&options.$byLines;var session=this.session;var selection=this.selection;var rangeList=selection.rangeList;var ranges=(keepOrder?selection:rangeList).ranges;var result;if(!ranges.length)return cmd.exec?cmd.exec(this,args||{}):cmd(this,args||{});var reg=selection._eventRegistry;selection._eventRegistry={};var tmpSel=new Selection(session);this.inVirtualSelectionMode=true;for(var i=ranges.length;i--;){if($byLines){while(i>0&&ranges[i].start.row==ranges[i-1].end.row)i--;}tmpSel.fromOrientedRange(ranges[i]);tmpSel.index=i;this.selection=session.selection=tmpSel;var cmdResult=cmd.exec?cmd.exec(this,args||{}):cmd(this,args||{});if(!result&&cmdResult!==undefined)result=cmdResult;tmpSel.toOrientedRange(ranges[i]);}tmpSel.detach();this.selection=session.selection=selection;this.inVirtualSelectionMode=false;selection._eventRegistry=reg;selection.mergeOverlappingRanges();var anim=this.renderer.$scrollAnimation;this.onCursorChange();this.onSelectionChange();if(anim&&anim.from==anim.to)this.renderer.animateScrolling(anim.from);return result;};this.exitMultiSelectMode=function(){if(!this.inMultiSelectMode||this.inVirtualSelectionMode)return;this.multiSelect.toSingleRange();};this.getSelectedText=function(){var text=\"\";if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){var ranges=this.multiSelect.rangeList.ranges;var buf=[];for(var i=0;i<ranges.length;i++){buf.push(this.session.getTextRange(ranges[i]));}var nl=this.session.getDocument().getNewLineCharacter();text=buf.join(nl);if(text.length==(buf.length-1)*nl.length)text=\"\";}else if(!this.selection.isEmpty()){text=this.session.getTextRange(this.getSelectionRange());}return text;};this.$checkMultiselectChange=function(e,anchor){if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){var range=this.multiSelect.ranges[0];if(this.multiSelect.isEmpty()&&anchor==this.multiSelect.anchor)return;var pos=anchor==this.multiSelect.anchor?range.cursor==range.start?range.end:range.start:range.cursor;if(pos.row!=anchor.row||this.session.$clipPositionToDocument(pos.row,pos.column).column!=anchor.column)this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());}};this.findAll=function(needle,options,additive){options=options||{};options.needle=needle||options.needle;if(options.needle==undefined){var range=this.selection.isEmpty()?this.selection.getWordRange():this.selection.getRange();options.needle=this.session.getTextRange(range);}this.$search.set(options);var ranges=this.$search.findAll(this.session);if(!ranges.length)return 0;this.$blockScrolling+=1;var selection=this.multiSelect;if(!additive)selection.toSingleRange(ranges[0]);for(var i=ranges.length;i--;)selection.addRange(ranges[i],true);if(range&&selection.rangeList.rangeAtPoint(range.start))selection.addRange(range,true);this.$blockScrolling-=1;return ranges.length;};this.selectMoreLines=function(dir,skip){var range=this.selection.toOrientedRange();var isBackwards=range.cursor==range.end;var screenLead=this.session.documentToScreenPosition(range.cursor);if(this.selection.$desiredColumn)screenLead.column=this.selection.$desiredColumn;var lead=this.session.screenToDocumentPosition(screenLead.row+dir,screenLead.column);if(!range.isEmpty()){var screenAnchor=this.session.documentToScreenPosition(isBackwards?range.end:range.start);var anchor=this.session.screenToDocumentPosition(screenAnchor.row+dir,screenAnchor.column);}else{var anchor=lead;}if(isBackwards){var newRange=Range.fromPoints(lead,anchor);newRange.cursor=newRange.start;}else{var newRange=Range.fromPoints(anchor,lead);newRange.cursor=newRange.end;}newRange.desiredColumn=screenLead.column;if(!this.selection.inMultiSelectMode){this.selection.addRange(range);}else{if(skip)var toRemove=range.cursor;}this.selection.addRange(newRange);if(toRemove)this.selection.substractPoint(toRemove);};this.transposeSelections=function(dir){var session=this.session;var sel=session.multiSelect;var all=sel.ranges;for(var i=all.length;i--;){var range=all[i];if(range.isEmpty()){var tmp=session.getWordRange(range.start.row,range.start.column);range.start.row=tmp.start.row;range.start.column=tmp.start.column;range.end.row=tmp.end.row;range.end.column=tmp.end.column;}}sel.mergeOverlappingRanges();var words=[];for(var i=all.length;i--;){var range=all[i];words.unshift(session.getTextRange(range));}if(dir<0)words.unshift(words.pop());else words.push(words.shift());for(var i=all.length;i--;){var range=all[i];var tmp=range.clone();session.replace(range,words[i]);range.start.row=tmp.start.row;range.start.column=tmp.start.column;}};this.selectMore=function(dir,skip,stopAtFirst){var session=this.session;var sel=session.multiSelect;var range=sel.toOrientedRange();if(range.isEmpty()){range=session.getWordRange(range.start.row,range.start.column);range.cursor=dir==-1?range.start:range.end;this.multiSelect.addRange(range);if(stopAtFirst)return;}var needle=session.getTextRange(range);var newRange=find(session,needle,dir);if(newRange){newRange.cursor=dir==-1?newRange.start:newRange.end;this.$blockScrolling+=1;this.session.unfold(newRange);this.multiSelect.addRange(newRange);this.$blockScrolling-=1;this.renderer.scrollCursorIntoView(null,0.5);}if(skip)this.multiSelect.substractPoint(range.cursor);};this.alignCursors=function(){var session=this.session;var sel=session.multiSelect;var ranges=sel.ranges;var row=-1;var sameRowRanges=ranges.filter(function(r){if(r.cursor.row==row)return true;row=r.cursor.row;});if(!ranges.length||sameRowRanges.length==ranges.length-1){var range=this.selection.getRange();var fr=range.start.row,lr=range.end.row;var guessRange=fr==lr;if(guessRange){var max=this.session.getLength();var line;do{line=this.session.getLine(lr);}while(/[=:]/.test(line)&&++lr<max);do{line=this.session.getLine(fr);}while(/[=:]/.test(line)&&--fr>0);if(fr<0)fr=0;if(lr>=max)lr=max-1;}var lines=this.session.removeFullLines(fr,lr);lines=this.$reAlignText(lines,guessRange);this.session.insert({row:fr,column:0},lines.join(\"\\n\")+\"\\n\");if(!guessRange){range.start.column=0;range.end.column=lines[lines.length-1].length;}this.selection.setRange(range);}else{sameRowRanges.forEach(function(r){sel.substractPoint(r.cursor);});var maxCol=0;var minSpace=Infinity;var spaceOffsets=ranges.map(function(r){var p=r.cursor;var line=session.getLine(p.row);var spaceOffset=line.substr(p.column).search(/\\S/g);if(spaceOffset==-1)spaceOffset=0;if(p.column>maxCol)maxCol=p.column;if(spaceOffset<minSpace)minSpace=spaceOffset;return spaceOffset;});ranges.forEach(function(r,i){var p=r.cursor;var l=maxCol-p.column;var d=spaceOffsets[i]-minSpace;if(l>d)session.insert(p,lang.stringRepeat(\" \",l-d));else session.remove(new Range(p.row,p.column,p.row,p.column-l+d));r.start.column=r.end.column=maxCol;r.start.row=r.end.row=p.row;r.cursor=r.end;});sel.fromOrientedRange(ranges[0]);this.renderer.updateCursor();this.renderer.updateBackMarkers();}};this.$reAlignText=function(lines,forceLeft){var isLeftAligned=true,isRightAligned=true;var startW,textW,endW;return lines.map(function(line){var m=line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);if(!m)return[line];if(startW==null){startW=m[1].length;textW=m[2].length;endW=m[3].length;return m;}if(startW+textW+endW!=m[1].length+m[2].length+m[3].length)isRightAligned=false;if(startW!=m[1].length)isLeftAligned=false;if(startW>m[1].length)startW=m[1].length;if(textW<m[2].length)textW=m[2].length;if(endW>m[3].length)endW=m[3].length;return m;}).map(forceLeft?alignLeft:isLeftAligned?isRightAligned?alignRight:alignLeft:unAlign);function spaces(n){return lang.stringRepeat(\" \",n);}function alignLeft(m){return!m[2]?m[0]:spaces(startW)+m[2]+spaces(textW-m[2].length+endW)+m[4].replace(/^([=:])\\s+/,\"$1 \");}function alignRight(m){return!m[2]?m[0]:spaces(startW+textW-m[2].length)+m[2]+spaces(endW,\" \")+m[4].replace(/^([=:])\\s+/,\"$1 \");}function unAlign(m){return!m[2]?m[0]:spaces(startW)+m[2]+spaces(endW)+m[4].replace(/^([=:])\\s+/,\"$1 \");}};}).call(Editor.prototype);function isSamePoint(p1,p2){return p1.row==p2.row&&p1.column==p2.column;}exports.onSessionChange=function(e){var session=e.session;if(session&&!session.multiSelect){session.$selectionMarkers=[];session.selection.$initRangeList();session.multiSelect=session.selection;}this.multiSelect=session&&session.multiSelect;var oldSession=e.oldSession;if(oldSession){oldSession.multiSelect.off(\"addRange\",this.$onAddRange);oldSession.multiSelect.off(\"removeRange\",this.$onRemoveRange);oldSession.multiSelect.off(\"multiSelect\",this.$onMultiSelect);oldSession.multiSelect.off(\"singleSelect\",this.$onSingleSelect);oldSession.multiSelect.lead.off(\"change\",this.$checkMultiselectChange);oldSession.multiSelect.anchor.off(\"change\",this.$checkMultiselectChange);}if(session){session.multiSelect.on(\"addRange\",this.$onAddRange);session.multiSelect.on(\"removeRange\",this.$onRemoveRange);session.multiSelect.on(\"multiSelect\",this.$onMultiSelect);session.multiSelect.on(\"singleSelect\",this.$onSingleSelect);session.multiSelect.lead.on(\"change\",this.$checkMultiselectChange);session.multiSelect.anchor.on(\"change\",this.$checkMultiselectChange);}if(session&&this.inMultiSelectMode!=session.selection.inMultiSelectMode){if(session.selection.inMultiSelectMode)this.$onMultiSelect();else this.$onSingleSelect();}};function MultiSelect(editor){if(editor.$multiselectOnSessionChange)return;editor.$onAddRange=editor.$onAddRange.bind(editor);editor.$onRemoveRange=editor.$onRemoveRange.bind(editor);editor.$onMultiSelect=editor.$onMultiSelect.bind(editor);editor.$onSingleSelect=editor.$onSingleSelect.bind(editor);editor.$multiselectOnSessionChange=exports.onSessionChange.bind(editor);editor.$checkMultiselectChange=editor.$checkMultiselectChange.bind(editor);editor.$multiselectOnSessionChange(editor);editor.on(\"changeSession\",editor.$multiselectOnSessionChange);editor.on(\"mousedown\",onMouseDown);editor.commands.addCommands(commands.defaultCommands);addAltCursorListeners(editor);}function addAltCursorListeners(editor){var el=editor.textInput.getElement();var altCursor=false;event.addListener(el,\"keydown\",function(e){var altDown=e.keyCode==18&&!(e.ctrlKey||e.shiftKey||e.metaKey);if(editor.$blockSelectEnabled&&altDown){if(!altCursor){editor.renderer.setMouseCursor(\"crosshair\");altCursor=true;}}else if(altCursor){reset();}});event.addListener(el,\"keyup\",reset);event.addListener(el,\"blur\",reset);function reset(e){if(altCursor){editor.renderer.setMouseCursor(\"\");altCursor=false;}}}exports.MultiSelect=MultiSelect;acequire(\"./config\").defineOptions(Editor.prototype,\"editor\",{enableMultiselect:{set:function(val){MultiSelect(this);if(val){this.on(\"changeSession\",this.$multiselectOnSessionChange);this.on(\"mousedown\",onMouseDown);}else{this.off(\"changeSession\",this.$multiselectOnSessionChange);this.off(\"mousedown\",onMouseDown);}},value:true},enableBlockSelect:{set:function(val){this.$blockSelectEnabled=val;},value:true}});});ace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(acequire,exports,module){\"use strict\";var Range=acequire(\"../../range\").Range;var FoldMode=exports.FoldMode=function(){};(function(){this.foldingStartMarker=null;this.foldingStopMarker=null;this.getFoldWidget=function(session,foldStyle,row){var line=session.getLine(row);if(this.foldingStartMarker.test(line))return\"start\";if(foldStyle==\"markbeginend\"&&this.foldingStopMarker&&this.foldingStopMarker.test(line))return\"end\";return\"\";};this.getFoldWidgetRange=function(session,foldStyle,row){return null;};this.indentationBlock=function(session,row,column){var re=/\\S/;var line=session.getLine(row);var startLevel=line.search(re);if(startLevel==-1)return;var startColumn=column||line.length;var maxRow=session.getLength();var startRow=row;var endRow=row;while(++row<maxRow){var level=session.getLine(row).search(re);if(level==-1)continue;if(level<=startLevel)break;endRow=row;}if(endRow>startRow){var endColumn=session.getLine(endRow).length;return new Range(startRow,startColumn,endRow,endColumn);}};this.openingBracketBlock=function(session,bracket,row,column,typeRe){var start={row:row,column:column+1};var end=session.$findClosingBracket(bracket,start,typeRe);if(!end)return;var fw=session.foldWidgets[end.row];if(fw==null)fw=session.getFoldWidget(end.row);if(fw==\"start\"&&end.row>start.row){end.row--;end.column=session.getLine(end.row).length;}return Range.fromPoints(start,end);};this.closingBracketBlock=function(session,bracket,row,column,typeRe){var end={row:row,column:column};var start=session.$findOpeningBracket(bracket,end);if(!start)return;start.column++;end.column--;return Range.fromPoints(start,end);};}).call(FoldMode.prototype);});ace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(acequire,exports,module){\"use strict\";exports.isDark=false;exports.cssClass=\"ace-tm\";exports.cssText=\".ace-tm .ace_gutter {\\\r\n\tbackground: #f0f0f0;\\\r\n\tcolor: #333;\\\r\n\t}\\\r\n\t.ace-tm .ace_print-margin {\\\r\n\twidth: 1px;\\\r\n\tbackground: #e8e8e8;\\\r\n\t}\\\r\n\t.ace-tm .ace_fold {\\\r\n\tbackground-color: #6B72E6;\\\r\n\t}\\\r\n\t.ace-tm {\\\r\n\tbackground-color: #FFFFFF;\\\r\n\tcolor: black;\\\r\n\t}\\\r\n\t.ace-tm .ace_cursor {\\\r\n\tcolor: black;\\\r\n\t}\\\r\n\t.ace-tm .ace_invisible {\\\r\n\tcolor: rgb(191, 191, 191);\\\r\n\t}\\\r\n\t.ace-tm .ace_storage,\\\r\n\t.ace-tm .ace_keyword {\\\r\n\tcolor: blue;\\\r\n\t}\\\r\n\t.ace-tm .ace_constant {\\\r\n\tcolor: rgb(197, 6, 11);\\\r\n\t}\\\r\n\t.ace-tm .ace_constant.ace_buildin {\\\r\n\tcolor: rgb(88, 72, 246);\\\r\n\t}\\\r\n\t.ace-tm .ace_constant.ace_language {\\\r\n\tcolor: rgb(88, 92, 246);\\\r\n\t}\\\r\n\t.ace-tm .ace_constant.ace_library {\\\r\n\tcolor: rgb(6, 150, 14);\\\r\n\t}\\\r\n\t.ace-tm .ace_invalid {\\\r\n\tbackground-color: rgba(255, 0, 0, 0.1);\\\r\n\tcolor: red;\\\r\n\t}\\\r\n\t.ace-tm .ace_support.ace_function {\\\r\n\tcolor: rgb(60, 76, 114);\\\r\n\t}\\\r\n\t.ace-tm .ace_support.ace_constant {\\\r\n\tcolor: rgb(6, 150, 14);\\\r\n\t}\\\r\n\t.ace-tm .ace_support.ace_type,\\\r\n\t.ace-tm .ace_support.ace_class {\\\r\n\tcolor: rgb(109, 121, 222);\\\r\n\t}\\\r\n\t.ace-tm .ace_keyword.ace_operator {\\\r\n\tcolor: rgb(104, 118, 135);\\\r\n\t}\\\r\n\t.ace-tm .ace_string {\\\r\n\tcolor: rgb(3, 106, 7);\\\r\n\t}\\\r\n\t.ace-tm .ace_comment {\\\r\n\tcolor: rgb(76, 136, 107);\\\r\n\t}\\\r\n\t.ace-tm .ace_comment.ace_doc {\\\r\n\tcolor: rgb(0, 102, 255);\\\r\n\t}\\\r\n\t.ace-tm .ace_comment.ace_doc.ace_tag {\\\r\n\tcolor: rgb(128, 159, 191);\\\r\n\t}\\\r\n\t.ace-tm .ace_constant.ace_numeric {\\\r\n\tcolor: rgb(0, 0, 205);\\\r\n\t}\\\r\n\t.ace-tm .ace_variable {\\\r\n\tcolor: rgb(49, 132, 149);\\\r\n\t}\\\r\n\t.ace-tm .ace_xml-pe {\\\r\n\tcolor: rgb(104, 104, 91);\\\r\n\t}\\\r\n\t.ace-tm .ace_entity.ace_name.ace_function {\\\r\n\tcolor: #0000A2;\\\r\n\t}\\\r\n\t.ace-tm .ace_heading {\\\r\n\tcolor: rgb(12, 7, 255);\\\r\n\t}\\\r\n\t.ace-tm .ace_list {\\\r\n\tcolor:rgb(185, 6, 144);\\\r\n\t}\\\r\n\t.ace-tm .ace_meta.ace_tag {\\\r\n\tcolor:rgb(0, 22, 142);\\\r\n\t}\\\r\n\t.ace-tm .ace_string.ace_regex {\\\r\n\tcolor: rgb(255, 0, 0)\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_selection {\\\r\n\tbackground: rgb(181, 213, 255);\\\r\n\t}\\\r\n\t.ace-tm.ace_multiselect .ace_selection.ace_start {\\\r\n\tbox-shadow: 0 0 3px 0px white;\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_step {\\\r\n\tbackground: rgb(252, 255, 0);\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_stack {\\\r\n\tbackground: rgb(164, 229, 101);\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_bracket {\\\r\n\tmargin: -1px 0 0 -1px;\\\r\n\tborder: 1px solid rgb(192, 192, 192);\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_active-line {\\\r\n\tbackground: rgba(0, 0, 0, 0.07);\\\r\n\t}\\\r\n\t.ace-tm .ace_gutter-active-line {\\\r\n\tbackground-color : #dcdcdc;\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_selected-word {\\\r\n\tbackground: rgb(250, 250, 255);\\\r\n\tborder: 1px solid rgb(200, 200, 250);\\\r\n\t}\\\r\n\t.ace-tm .ace_indent-guide {\\\r\n\tbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\r\n\t}\\\r\n\t\";var dom=acequire(\"../lib/dom\");dom.importCssString(exports.cssText,exports.cssClass);});ace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/range\"],function(acequire,exports,module){\"use strict\";var oop=acequire(\"./lib/oop\");var dom=acequire(\"./lib/dom\");var Range=acequire(\"./range\").Range;function LineWidgets(session){this.session=session;this.session.widgetManager=this;this.session.getRowLength=this.getRowLength;this.session.$getWidgetScreenLength=this.$getWidgetScreenLength;this.updateOnChange=this.updateOnChange.bind(this);this.renderWidgets=this.renderWidgets.bind(this);this.measureWidgets=this.measureWidgets.bind(this);this.session._changedWidgets=[];this.$onChangeEditor=this.$onChangeEditor.bind(this);this.session.on(\"change\",this.updateOnChange);this.session.on(\"changeFold\",this.updateOnFold);this.session.on(\"changeEditor\",this.$onChangeEditor);}(function(){this.getRowLength=function(row){var h;if(this.lineWidgets)h=this.lineWidgets[row]&&this.lineWidgets[row].rowCount||0;else h=0;if(!this.$useWrapMode||!this.$wrapData[row]){return 1+h;}else{return this.$wrapData[row].length+1+h;}};this.$getWidgetScreenLength=function(){var screenRows=0;this.lineWidgets.forEach(function(w){if(w&&w.rowCount&&!w.hidden)screenRows+=w.rowCount;});return screenRows;};this.$onChangeEditor=function(e){this.attach(e.editor);};this.attach=function(editor){if(editor&&editor.widgetManager&&editor.widgetManager!=this)editor.widgetManager.detach();if(this.editor==editor)return;this.detach();this.editor=editor;if(editor){editor.widgetManager=this;editor.renderer.on(\"beforeRender\",this.measureWidgets);editor.renderer.on(\"afterRender\",this.renderWidgets);}};this.detach=function(e){var editor=this.editor;if(!editor)return;this.editor=null;editor.widgetManager=null;editor.renderer.off(\"beforeRender\",this.measureWidgets);editor.renderer.off(\"afterRender\",this.renderWidgets);var lineWidgets=this.session.lineWidgets;lineWidgets&&lineWidgets.forEach(function(w){if(w&&w.el&&w.el.parentNode){w._inDocument=false;w.el.parentNode.removeChild(w.el);}});};this.updateOnFold=function(e,session){var lineWidgets=session.lineWidgets;if(!lineWidgets||!e.action)return;var fold=e.data;var start=fold.start.row;var end=fold.end.row;var hide=e.action==\"add\";for(var i=start+1;i<end;i++){if(lineWidgets[i])lineWidgets[i].hidden=hide;}if(lineWidgets[end]){if(hide){if(!lineWidgets[start])lineWidgets[start]=lineWidgets[end];else lineWidgets[end].hidden=hide;}else{if(lineWidgets[start]==lineWidgets[end])lineWidgets[start]=undefined;lineWidgets[end].hidden=hide;}}};this.updateOnChange=function(delta){var lineWidgets=this.session.lineWidgets;if(!lineWidgets)return;var startRow=delta.start.row;var len=delta.end.row-startRow;if(len===0){}else if(delta.action=='remove'){var removed=lineWidgets.splice(startRow+1,len);removed.forEach(function(w){w&&this.removeLineWidget(w);},this);this.$updateRows();}else{var args=new Array(len);args.unshift(startRow,0);lineWidgets.splice.apply(lineWidgets,args);this.$updateRows();}};this.$updateRows=function(){var lineWidgets=this.session.lineWidgets;if(!lineWidgets)return;var noWidgets=true;lineWidgets.forEach(function(w,i){if(w){noWidgets=false;w.row=i;while(w.$oldWidget){w.$oldWidget.row=i;w=w.$oldWidget;}}});if(noWidgets)this.session.lineWidgets=null;};this.addLineWidget=function(w){if(!this.session.lineWidgets)this.session.lineWidgets=new Array(this.session.getLength());var old=this.session.lineWidgets[w.row];if(old){w.$oldWidget=old;if(old.el&&old.el.parentNode){old.el.parentNode.removeChild(old.el);old._inDocument=false;}}this.session.lineWidgets[w.row]=w;w.session=this.session;var renderer=this.editor.renderer;if(w.html&&!w.el){w.el=dom.createElement(\"div\");w.el.innerHTML=w.html;}if(w.el){dom.addCssClass(w.el,\"ace_lineWidgetContainer\");w.el.style.position=\"absolute\";w.el.style.zIndex=5;renderer.container.appendChild(w.el);w._inDocument=true;}if(!w.coverGutter){w.el.style.zIndex=3;}if(!w.pixelHeight){w.pixelHeight=w.el.offsetHeight;}if(w.rowCount==null){w.rowCount=w.pixelHeight/renderer.layerConfig.lineHeight;}var fold=this.session.getFoldAt(w.row,0);w.$fold=fold;if(fold){var lineWidgets=this.session.lineWidgets;if(w.row==fold.end.row&&!lineWidgets[fold.start.row])lineWidgets[fold.start.row]=w;else w.hidden=true;}this.session._emit(\"changeFold\",{data:{start:{row:w.row}}});this.$updateRows();this.renderWidgets(null,renderer);this.onWidgetChanged(w);return w;};this.removeLineWidget=function(w){w._inDocument=false;w.session=null;if(w.el&&w.el.parentNode)w.el.parentNode.removeChild(w.el);if(w.editor&&w.editor.destroy)try{w.editor.destroy();}catch(e){}if(this.session.lineWidgets){var w1=this.session.lineWidgets[w.row];if(w1==w){this.session.lineWidgets[w.row]=w.$oldWidget;if(w.$oldWidget)this.onWidgetChanged(w.$oldWidget);}else{while(w1){if(w1.$oldWidget==w){w1.$oldWidget=w.$oldWidget;break;}w1=w1.$oldWidget;}}}this.session._emit(\"changeFold\",{data:{start:{row:w.row}}});this.$updateRows();};this.getWidgetsAtRow=function(row){var lineWidgets=this.session.lineWidgets;var w=lineWidgets&&lineWidgets[row];var list=[];while(w){list.push(w);w=w.$oldWidget;}return list;};this.onWidgetChanged=function(w){this.session._changedWidgets.push(w);this.editor&&this.editor.renderer.updateFull();};this.measureWidgets=function(e,renderer){var changedWidgets=this.session._changedWidgets;var config=renderer.layerConfig;if(!changedWidgets||!changedWidgets.length)return;var min=Infinity;for(var i=0;i<changedWidgets.length;i++){var w=changedWidgets[i];if(!w||!w.el)continue;if(w.session!=this.session)continue;if(!w._inDocument){if(this.session.lineWidgets[w.row]!=w)continue;w._inDocument=true;renderer.container.appendChild(w.el);}w.h=w.el.offsetHeight;if(!w.fixedWidth){w.w=w.el.offsetWidth;w.screenWidth=Math.ceil(w.w/config.characterWidth);}var rowCount=w.h/config.lineHeight;if(w.coverLine){rowCount-=this.session.getRowLineCount(w.row);if(rowCount<0)rowCount=0;}if(w.rowCount!=rowCount){w.rowCount=rowCount;if(w.row<min)min=w.row;}}if(min!=Infinity){this.session._emit(\"changeFold\",{data:{start:{row:min}}});this.session.lineWidgetWidth=null;}this.session._changedWidgets=[];};this.renderWidgets=function(e,renderer){var config=renderer.layerConfig;var lineWidgets=this.session.lineWidgets;if(!lineWidgets)return;var first=Math.min(this.firstRow,config.firstRow);var last=Math.max(this.lastRow,config.lastRow,lineWidgets.length);while(first>0&&!lineWidgets[first])first--;this.firstRow=config.firstRow;this.lastRow=config.lastRow;renderer.$cursorLayer.config=config;for(var i=first;i<=last;i++){var w=lineWidgets[i];if(!w||!w.el)continue;if(w.hidden){w.el.style.top=-100-(w.pixelHeight||0)+\"px\";continue;}if(!w._inDocument){w._inDocument=true;renderer.container.appendChild(w.el);}var top=renderer.$cursorLayer.getPixelPosition({row:i,column:0},true).top;if(!w.coverLine)top+=config.lineHeight*this.session.getRowLineCount(w.row);w.el.style.top=top-config.offset+\"px\";var left=w.coverGutter?0:renderer.gutterWidth;if(!w.fixedWidth)left-=renderer.scrollLeft;w.el.style.left=left+\"px\";if(w.fullWidth&&w.screenWidth){w.el.style.minWidth=config.width+2*config.padding+\"px\";}if(w.fixedWidth){w.el.style.right=renderer.scrollBar.getWidth()+\"px\";}else{w.el.style.right=\"\";}}};}).call(LineWidgets.prototype);exports.LineWidgets=LineWidgets;});ace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\"],function(acequire,exports,module){\"use strict\";var LineWidgets=acequire(\"../line_widgets\").LineWidgets;var dom=acequire(\"../lib/dom\");var Range=acequire(\"../range\").Range;function binarySearch(array,needle,comparator){var first=0;var last=array.length-1;while(first<=last){var mid=first+last>>1;var c=comparator(needle,array[mid]);if(c>0)first=mid+1;else if(c<0)last=mid-1;else return mid;}return-(first+1);}function findAnnotations(session,row,dir){var annotations=session.getAnnotations().sort(Range.comparePoints);if(!annotations.length)return;var i=binarySearch(annotations,{row:row,column:-1},Range.comparePoints);if(i<0)i=-i-1;if(i>=annotations.length)i=dir>0?0:annotations.length-1;else if(i===0&&dir<0)i=annotations.length-1;var annotation=annotations[i];if(!annotation||!dir)return;if(annotation.row===row){do{annotation=annotations[i+=dir];}while(annotation&&annotation.row===row);if(!annotation)return annotations.slice();}var matched=[];row=annotation.row;do{matched[dir<0?\"unshift\":\"push\"](annotation);annotation=annotations[i+=dir];}while(annotation&&annotation.row==row);return matched.length&&matched;}exports.showErrorMarker=function(editor,dir){var session=editor.session;if(!session.widgetManager){session.widgetManager=new LineWidgets(session);session.widgetManager.attach(editor);}var pos=editor.getCursorPosition();var row=pos.row;var oldWidget=session.widgetManager.getWidgetsAtRow(row).filter(function(w){return w.type==\"errorMarker\";})[0];if(oldWidget){oldWidget.destroy();}else{row-=dir;}var annotations=findAnnotations(session,row,dir);var gutterAnno;if(annotations){var annotation=annotations[0];pos.column=(annotation.pos&&typeof annotation.column!=\"number\"?annotation.pos.sc:annotation.column)||0;pos.row=annotation.row;gutterAnno=editor.renderer.$gutterLayer.$annotations[pos.row];}else if(oldWidget){return;}else{gutterAnno={text:[\"Looks good!\"],className:\"ace_ok\"};}editor.session.unfold(pos.row);editor.selection.moveToPosition(pos);var w={row:pos.row,fixedWidth:true,coverGutter:true,el:dom.createElement(\"div\"),type:\"errorMarker\"};var el=w.el.appendChild(dom.createElement(\"div\"));var arrow=w.el.appendChild(dom.createElement(\"div\"));arrow.className=\"error_widget_arrow \"+gutterAnno.className;var left=editor.renderer.$cursorLayer.getPixelPosition(pos).left;arrow.style.left=left+editor.renderer.gutterWidth-5+\"px\";w.el.className=\"error_widget_wrapper\";el.className=\"error_widget \"+gutterAnno.className;el.innerHTML=gutterAnno.text.join(\"<br>\");el.appendChild(dom.createElement(\"div\"));var kb=function(_,hashId,keyString){if(hashId===0&&(keyString===\"esc\"||keyString===\"return\")){w.destroy();return{command:\"null\"};}};w.destroy=function(){if(editor.$mouseHandler.isMousePressed)return;editor.keyBinding.removeKeyboardHandler(kb);session.widgetManager.removeLineWidget(w);editor.off(\"changeSelection\",w.destroy);editor.off(\"changeSession\",w.destroy);editor.off(\"mouseup\",w.destroy);editor.off(\"change\",w.destroy);};editor.keyBinding.addKeyboardHandler(kb);editor.on(\"changeSelection\",w.destroy);editor.on(\"changeSession\",w.destroy);editor.on(\"mouseup\",w.destroy);editor.on(\"change\",w.destroy);editor.session.widgetManager.addLineWidget(w);w.el.onmousedown=editor.focus.bind(editor);editor.renderer.scrollCursorIntoView(null,0.5,{bottom:w.el.offsetHeight});};dom.importCssString(\"\\\r\n\t .error_widget_wrapper {\\\r\n\t background: inherit;\\\r\n\t color: inherit;\\\r\n\t border:none\\\r\n\t }\\\r\n\t .error_widget {\\\r\n\t border-top: solid 2px;\\\r\n\t border-bottom: solid 2px;\\\r\n\t margin: 5px 0;\\\r\n\t padding: 10px 40px;\\\r\n\t white-space: pre-wrap;\\\r\n\t }\\\r\n\t .error_widget.ace_error, .error_widget_arrow.ace_error{\\\r\n\t border-color: #ff5a5a\\\r\n\t }\\\r\n\t .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\\r\n\t border-color: #F1D817\\\r\n\t }\\\r\n\t .error_widget.ace_info, .error_widget_arrow.ace_info{\\\r\n\t border-color: #5a5a5a\\\r\n\t }\\\r\n\t .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\\r\n\t border-color: #5aaa5a\\\r\n\t }\\\r\n\t .error_widget_arrow {\\\r\n\t position: absolute;\\\r\n\t border: solid 5px;\\\r\n\t border-top-color: transparent!important;\\\r\n\t border-right-color: transparent!important;\\\r\n\t border-left-color: transparent!important;\\\r\n\t top: -5px;\\\r\n\t }\\\r\n\t\",\"\");});ace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\"],function(acequire,exports,module){\"use strict\";acequire(\"./lib/fixoldbrowsers\");var dom=acequire(\"./lib/dom\");var event=acequire(\"./lib/event\");var Editor=acequire(\"./editor\").Editor;var EditSession=acequire(\"./edit_session\").EditSession;var UndoManager=acequire(\"./undomanager\").UndoManager;var Renderer=acequire(\"./virtual_renderer\").VirtualRenderer;acequire(\"./worker/worker_client\");acequire(\"./keyboard/hash_handler\");acequire(\"./placeholder\");acequire(\"./multi_select\");acequire(\"./mode/folding/fold_mode\");acequire(\"./theme/textmate\");acequire(\"./ext/error_marker\");exports.config=acequire(\"./config\");exports.acequire=acequire;exports.edit=function(el){if(typeof el==\"string\"){var _id=el;el=document.getElementById(_id);if(!el)throw new Error(\"ace.edit can't find div #\"+_id);}if(el&&el.env&&el.env.editor instanceof Editor)return el.env.editor;var value=\"\";if(el&&/input|textarea/i.test(el.tagName)){var oldNode=el;value=oldNode.value;el=dom.createElement(\"pre\");oldNode.parentNode.replaceChild(el,oldNode);}else if(el){value=dom.getInnerText(el);el.innerHTML=\"\";}var doc=exports.createEditSession(value);var editor=new Editor(new Renderer(el));editor.setSession(doc);var env={document:doc,editor:editor,onResize:editor.resize.bind(editor,null)};if(oldNode)env.textarea=oldNode;event.addListener(window,\"resize\",env.onResize);editor.on(\"destroy\",function(){event.removeListener(window,\"resize\",env.onResize);env.editor.container.env=null;// prevent memory leak on old ie\n});editor.container.env=editor.env=env;return editor;};exports.createEditSession=function(text,mode){var doc=new EditSession(text,mode);doc.setUndoManager(new UndoManager());return doc;};exports.EditSession=EditSession;exports.UndoManager=UndoManager;exports.version=\"1.2.3\";});(function(){ace.acequire([\"ace/ace\"],function(a){a&&a.config.init(true);if(!window.ace)window.ace=a;for(var key in a)if(a.hasOwnProperty(key))window.ace[key]=a[key];});})();module.exports=window.ace.acequire(\"ace/ace\");/***/},/* 65 */ /***/function(module,exports){module.exports=function(){throw new Error(\"define cannot be used indirect\");};/***/},/* 66 */ /***/function(module,exports){/* WEBPACK VAR INJECTION */(function(global){module.exports=get_blob();function get_blob(){if(global.Blob){try{new Blob(['asdf'],{type:'text/plain'});return Blob;}catch(err){}}var Builder=global.WebKitBlobBuilder||global.MozBlobBuilder||global.MSBlobBuilder;return function(parts,bag){var builder=new Builder(),endings=bag.endings,type=bag.type;if(endings)for(var i=0,len=parts.length;i<len;++i){builder.append(parts[i],endings);}else for(var i=0,len=parts.length;i<len;++i){builder.append(parts[i]);}return type?builder.getBlob(type):builder.getBlob();};}/* WEBPACK VAR INJECTION */}).call(exports,function(){return this;}());/***/},/* 67 */ /***/function(module,exports,__webpack_require__){ace.define(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(acequire,exports,module){\"use strict\";var oop=acequire(\"../lib/oop\");var TextHighlightRules=acequire(\"./text_highlight_rules\").TextHighlightRules;var JsonHighlightRules=function(){this.$rules={\"start\":[{token:\"variable\",// single line\nregex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'},{token:\"string\",// single line\nregex:'\"',next:\"string\"},{token:\"constant.numeric\",// hex\nregex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",// float\nregex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:\"invalid.illegal\",// single quoted strings are not allowed\nregex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"invalid.illegal\",// comments are not allowed\nregex:\"\\\\/\\\\/.*$\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],\"string\":[{token:\"constant.language.escape\",regex:/\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/},{token:\"string\",regex:'[^\"\\\\\\\\]+'},{token:\"string\",regex:'\"',next:\"start\"},{token:\"string\",regex:\"\",next:\"start\"}]};};oop.inherits(JsonHighlightRules,TextHighlightRules);exports.JsonHighlightRules=JsonHighlightRules;});ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(acequire,exports,module){\"use strict\";var Range=acequire(\"../range\").Range;var MatchingBraceOutdent=function(){};(function(){this.checkOutdent=function(line,input){if(!/^\\s+$/.test(line))return false;return /^\\s*\\}/.test(input);};this.autoOutdent=function(doc,row){var line=doc.getLine(row);var match=line.match(/^(\\s*\\})/);if(!match)return 0;var column=match[1].length;var openBracePos=doc.findMatchingBracket({row:row,column:column});if(!openBracePos||openBracePos.row==row)return 0;var indent=this.$getIndent(doc.getLine(openBracePos.row));doc.replace(new Range(row,0,row,column-1),indent);};this.$getIndent=function(line){return line.match(/^\\s*/)[0];};}).call(MatchingBraceOutdent.prototype);exports.MatchingBraceOutdent=MatchingBraceOutdent;});ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(acequire,exports,module){\"use strict\";var oop=acequire(\"../../lib/oop\");var Behaviour=acequire(\"../behaviour\").Behaviour;var TokenIterator=acequire(\"../../token_iterator\").TokenIterator;var lang=acequire(\"../../lib/lang\");var SAFE_INSERT_IN_TOKENS=[\"text\",\"paren.rparen\",\"punctuation.operator\"];var SAFE_INSERT_BEFORE_TOKENS=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"];var context;var contextCache={};var initContext=function(editor){var id=-1;if(editor.multiSelect){id=editor.selection.index;if(contextCache.rangeCount!=editor.multiSelect.rangeCount)contextCache={rangeCount:editor.multiSelect.rangeCount};}if(contextCache[id])return context=contextCache[id];context=contextCache[id]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"};};var getWrapped=function(selection,selected,opening,closing){var rowDiff=selection.end.row-selection.start.row;return{text:opening+selected+closing,selection:[0,selection.start.column+1,rowDiff,selection.end.column+(rowDiff?0:1)]};};var CstyleBehaviour=function(){this.add(\"braces\",\"insertion\",function(state,action,editor,session,text){var cursor=editor.getCursorPosition();var line=session.doc.getLine(cursor.row);if(text=='{'){initContext(editor);var selection=editor.getSelectionRange();var selected=session.doc.getTextRange(selection);if(selected!==\"\"&&selected!==\"{\"&&editor.getWrapBehavioursEnabled()){return getWrapped(selection,selected,'{','}');}else if(CstyleBehaviour.isSaneInsertion(editor,session)){if(/[\\]\\}\\)]/.test(line[cursor.column])||editor.inMultiSelectMode){CstyleBehaviour.recordAutoInsert(editor,session,\"}\");return{text:'{}',selection:[1,1]};}else{CstyleBehaviour.recordMaybeInsert(editor,session,\"{\");return{text:'{',selection:[1,1]};}}}else if(text=='}'){initContext(editor);var rightChar=line.substring(cursor.column,cursor.column+1);if(rightChar=='}'){var matching=session.$findOpeningBracket('}',{column:cursor.column+1,row:cursor.row});if(matching!==null&&CstyleBehaviour.isAutoInsertedClosing(cursor,line,text)){CstyleBehaviour.popAutoInsertedClosing();return{text:'',selection:[1,1]};}}}else if(text==\"\\n\"||text==\"\\r\\n\"){initContext(editor);var closing=\"\";if(CstyleBehaviour.isMaybeInsertedClosing(cursor,line)){closing=lang.stringRepeat(\"}\",context.maybeInsertedBrackets);CstyleBehaviour.clearMaybeInsertedClosing();}var rightChar=line.substring(cursor.column,cursor.column+1);if(rightChar==='}'){var openBracePos=session.findMatchingBracket({row:cursor.row,column:cursor.column+1},'}');if(!openBracePos)return null;var next_indent=this.$getIndent(session.getLine(openBracePos.row));}else if(closing){var next_indent=this.$getIndent(line);}else{CstyleBehaviour.clearMaybeInsertedClosing();return;}var indent=next_indent+session.getTabString();return{text:'\\n'+indent+'\\n'+next_indent+closing,selection:[1,indent.length,1,indent.length]};}else{CstyleBehaviour.clearMaybeInsertedClosing();}});this.add(\"braces\",\"deletion\",function(state,action,editor,session,range){var selected=session.doc.getTextRange(range);if(!range.isMultiLine()&&selected=='{'){initContext(editor);var line=session.doc.getLine(range.start.row);var rightChar=line.substring(range.end.column,range.end.column+1);if(rightChar=='}'){range.end.column++;return range;}else{context.maybeInsertedBrackets--;}}});this.add(\"parens\",\"insertion\",function(state,action,editor,session,text){if(text=='('){initContext(editor);var selection=editor.getSelectionRange();var selected=session.doc.getTextRange(selection);if(selected!==\"\"&&editor.getWrapBehavioursEnabled()){return getWrapped(selection,selected,'(',')');}else if(CstyleBehaviour.isSaneInsertion(editor,session)){CstyleBehaviour.recordAutoInsert(editor,session,\")\");return{text:'()',selection:[1,1]};}}else if(text==')'){initContext(editor);var cursor=editor.getCursorPosition();var line=session.doc.getLine(cursor.row);var rightChar=line.substring(cursor.column,cursor.column+1);if(rightChar==')'){var matching=session.$findOpeningBracket(')',{column:cursor.column+1,row:cursor.row});if(matching!==null&&CstyleBehaviour.isAutoInsertedClosing(cursor,line,text)){CstyleBehaviour.popAutoInsertedClosing();return{text:'',selection:[1,1]};}}}});this.add(\"parens\",\"deletion\",function(state,action,editor,session,range){var selected=session.doc.getTextRange(range);if(!range.isMultiLine()&&selected=='('){initContext(editor);var line=session.doc.getLine(range.start.row);var rightChar=line.substring(range.start.column+1,range.start.column+2);if(rightChar==')'){range.end.column++;return range;}}});this.add(\"brackets\",\"insertion\",function(state,action,editor,session,text){if(text=='['){initContext(editor);var selection=editor.getSelectionRange();var selected=session.doc.getTextRange(selection);if(selected!==\"\"&&editor.getWrapBehavioursEnabled()){return getWrapped(selection,selected,'[',']');}else if(CstyleBehaviour.isSaneInsertion(editor,session)){CstyleBehaviour.recordAutoInsert(editor,session,\"]\");return{text:'[]',selection:[1,1]};}}else if(text==']'){initContext(editor);var cursor=editor.getCursorPosition();var line=session.doc.getLine(cursor.row);var rightChar=line.substring(cursor.column,cursor.column+1);if(rightChar==']'){var matching=session.$findOpeningBracket(']',{column:cursor.column+1,row:cursor.row});if(matching!==null&&CstyleBehaviour.isAutoInsertedClosing(cursor,line,text)){CstyleBehaviour.popAutoInsertedClosing();return{text:'',selection:[1,1]};}}}});this.add(\"brackets\",\"deletion\",function(state,action,editor,session,range){var selected=session.doc.getTextRange(range);if(!range.isMultiLine()&&selected=='['){initContext(editor);var line=session.doc.getLine(range.start.row);var rightChar=line.substring(range.start.column+1,range.start.column+2);if(rightChar==']'){range.end.column++;return range;}}});this.add(\"string_dquotes\",\"insertion\",function(state,action,editor,session,text){if(text=='\"'||text==\"'\"){initContext(editor);var quote=text;var selection=editor.getSelectionRange();var selected=session.doc.getTextRange(selection);if(selected!==\"\"&&selected!==\"'\"&&selected!='\"'&&editor.getWrapBehavioursEnabled()){return getWrapped(selection,selected,quote,quote);}else if(!selected){var cursor=editor.getCursorPosition();var line=session.doc.getLine(cursor.row);var leftChar=line.substring(cursor.column-1,cursor.column);var rightChar=line.substring(cursor.column,cursor.column+1);var token=session.getTokenAt(cursor.row,cursor.column);var rightToken=session.getTokenAt(cursor.row,cursor.column+1);if(leftChar==\"\\\\\"&&token&&/escape/.test(token.type))return null;var stringBefore=token&&/string|escape/.test(token.type);var stringAfter=!rightToken||/string|escape/.test(rightToken.type);var pair;if(rightChar==quote){pair=stringBefore!==stringAfter;}else{if(stringBefore&&!stringAfter)return null;// wrap string with different quote\nif(stringBefore&&stringAfter)return null;// do not pair quotes inside strings\nvar wordRe=session.$mode.tokenRe;wordRe.lastIndex=0;var isWordBefore=wordRe.test(leftChar);wordRe.lastIndex=0;var isWordAfter=wordRe.test(leftChar);if(isWordBefore||isWordAfter)return null;// before or after alphanumeric\nif(rightChar&&!/[\\s;,.})\\]\\\\]/.test(rightChar))return null;// there is rightChar and it isn't closing\npair=true;}return{text:pair?quote+quote:\"\",selection:[1,1]};}}});this.add(\"string_dquotes\",\"deletion\",function(state,action,editor,session,range){var selected=session.doc.getTextRange(range);if(!range.isMultiLine()&&(selected=='\"'||selected==\"'\")){initContext(editor);var line=session.doc.getLine(range.start.row);var rightChar=line.substring(range.start.column+1,range.start.column+2);if(rightChar==selected){range.end.column++;return range;}}});};CstyleBehaviour.isSaneInsertion=function(editor,session){var cursor=editor.getCursorPosition();var iterator=new TokenIterator(session,cursor.row,cursor.column);if(!this.$matchTokenType(iterator.getCurrentToken()||\"text\",SAFE_INSERT_IN_TOKENS)){var iterator2=new TokenIterator(session,cursor.row,cursor.column+1);if(!this.$matchTokenType(iterator2.getCurrentToken()||\"text\",SAFE_INSERT_IN_TOKENS))return false;}iterator.stepForward();return iterator.getCurrentTokenRow()!==cursor.row||this.$matchTokenType(iterator.getCurrentToken()||\"text\",SAFE_INSERT_BEFORE_TOKENS);};CstyleBehaviour.$matchTokenType=function(token,types){return types.indexOf(token.type||token)>-1;};CstyleBehaviour.recordAutoInsert=function(editor,session,bracket){var cursor=editor.getCursorPosition();var line=session.doc.getLine(cursor.row);if(!this.isAutoInsertedClosing(cursor,line,context.autoInsertedLineEnd[0]))context.autoInsertedBrackets=0;context.autoInsertedRow=cursor.row;context.autoInsertedLineEnd=bracket+line.substr(cursor.column);context.autoInsertedBrackets++;};CstyleBehaviour.recordMaybeInsert=function(editor,session,bracket){var cursor=editor.getCursorPosition();var line=session.doc.getLine(cursor.row);if(!this.isMaybeInsertedClosing(cursor,line))context.maybeInsertedBrackets=0;context.maybeInsertedRow=cursor.row;context.maybeInsertedLineStart=line.substr(0,cursor.column)+bracket;context.maybeInsertedLineEnd=line.substr(cursor.column);context.maybeInsertedBrackets++;};CstyleBehaviour.isAutoInsertedClosing=function(cursor,line,bracket){return context.autoInsertedBrackets>0&&cursor.row===context.autoInsertedRow&&bracket===context.autoInsertedLineEnd[0]&&line.substr(cursor.column)===context.autoInsertedLineEnd;};CstyleBehaviour.isMaybeInsertedClosing=function(cursor,line){return context.maybeInsertedBrackets>0&&cursor.row===context.maybeInsertedRow&&line.substr(cursor.column)===context.maybeInsertedLineEnd&&line.substr(0,cursor.column)==context.maybeInsertedLineStart;};CstyleBehaviour.popAutoInsertedClosing=function(){context.autoInsertedLineEnd=context.autoInsertedLineEnd.substr(1);context.autoInsertedBrackets--;};CstyleBehaviour.clearMaybeInsertedClosing=function(){if(context){context.maybeInsertedBrackets=0;context.maybeInsertedRow=-1;}};oop.inherits(CstyleBehaviour,Behaviour);exports.CstyleBehaviour=CstyleBehaviour;});ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(acequire,exports,module){\"use strict\";var oop=acequire(\"../../lib/oop\");var Range=acequire(\"../../range\").Range;var BaseFoldMode=acequire(\"./fold_mode\").FoldMode;var FoldMode=exports.FoldMode=function(commentRegex){if(commentRegex){this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+commentRegex.start));this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+commentRegex.end));}};oop.inherits(FoldMode,BaseFoldMode);(function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/;this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/;this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/;this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/;this._getFoldWidgetBase=this.getFoldWidget;this.getFoldWidget=function(session,foldStyle,row){var line=session.getLine(row);if(this.singleLineBlockCommentRe.test(line)){if(!this.startRegionRe.test(line)&&!this.tripleStarBlockCommentRe.test(line))return\"\";}var fw=this._getFoldWidgetBase(session,foldStyle,row);if(!fw&&this.startRegionRe.test(line))return\"start\";// lineCommentRegionStart\nreturn fw;};this.getFoldWidgetRange=function(session,foldStyle,row,forceMultiline){var line=session.getLine(row);if(this.startRegionRe.test(line))return this.getCommentRegionBlock(session,line,row);var match=line.match(this.foldingStartMarker);if(match){var i=match.index;if(match[1])return this.openingBracketBlock(session,match[1],row,i);var range=session.getCommentFoldRange(row,i+match[0].length,1);if(range&&!range.isMultiLine()){if(forceMultiline){range=this.getSectionRange(session,row);}else if(foldStyle!=\"all\")range=null;}return range;}if(foldStyle===\"markbegin\")return;var match=line.match(this.foldingStopMarker);if(match){var i=match.index+match[0].length;if(match[1])return this.closingBracketBlock(session,match[1],row,i);return session.getCommentFoldRange(row,i,-1);}};this.getSectionRange=function(session,row){var line=session.getLine(row);var startIndent=line.search(/\\S/);var startRow=row;var startColumn=line.length;row=row+1;var endRow=row;var maxRow=session.getLength();while(++row<maxRow){line=session.getLine(row);var indent=line.search(/\\S/);if(indent===-1)continue;if(startIndent>indent)break;var subRange=this.getFoldWidgetRange(session,\"all\",row);if(subRange){if(subRange.start.row<=startRow){break;}else if(subRange.isMultiLine()){row=subRange.end.row;}else if(startIndent==indent){break;}}endRow=row;}return new Range(startRow,startColumn,endRow,session.getLine(endRow).length);};this.getCommentRegionBlock=function(session,line,row){var startColumn=line.search(/\\s*$/);var maxRow=session.getLength();var startRow=row;var re=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;var depth=1;while(++row<maxRow){line=session.getLine(row);var m=re.exec(line);if(!m)continue;if(m[1])depth--;else depth++;if(!depth)break;}var endRow=row;if(endRow>startRow){return new Range(startRow,startColumn,endRow,line.length);}};}).call(FoldMode.prototype);});ace.define(\"ace/mode/json\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/json_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/worker/worker_client\"],function(acequire,exports,module){\"use strict\";var oop=acequire(\"../lib/oop\");var TextMode=acequire(\"./text\").Mode;var HighlightRules=acequire(\"./json_highlight_rules\").JsonHighlightRules;var MatchingBraceOutdent=acequire(\"./matching_brace_outdent\").MatchingBraceOutdent;var CstyleBehaviour=acequire(\"./behaviour/cstyle\").CstyleBehaviour;var CStyleFoldMode=acequire(\"./folding/cstyle\").FoldMode;var WorkerClient=acequire(\"../worker/worker_client\").WorkerClient;var Mode=function(){this.HighlightRules=HighlightRules;this.$outdent=new MatchingBraceOutdent();this.$behaviour=new CstyleBehaviour();this.foldingRules=new CStyleFoldMode();};oop.inherits(Mode,TextMode);(function(){this.getNextLineIndent=function(state,line,tab){var indent=this.$getIndent(line);if(state==\"start\"){var match=line.match(/^.*[\\{\\(\\[]\\s*$/);if(match){indent+=tab;}}return indent;};this.checkOutdent=function(state,line,input){return this.$outdent.checkOutdent(line,input);};this.autoOutdent=function(state,doc,row){this.$outdent.autoOutdent(doc,row);};this.createWorker=function(session){var worker=new WorkerClient([\"ace\"],__webpack_require__(68),\"JsonWorker\");worker.attachToDocument(session.getDocument());worker.on(\"annotate\",function(e){session.setAnnotations(e.data);});worker.on(\"terminate\",function(){session.clearAnnotations();});return worker;};this.$id=\"ace/mode/json\";}).call(Mode.prototype);exports.Mode=Mode;});/***/},/* 68 */ /***/function(module,exports){module.exports.id='ace/mode/json_worker';module.exports.src=\"\\\"no use strict\\\";(function(window){function resolveModuleId(id,paths){for(var testPath=id,tail=\\\"\\\";testPath;){var alias=paths[testPath];if(\\\"string\\\"==typeof alias)return alias+tail;if(alias)return alias.location.replace(/\\\\/*$/,\\\"/\\\")+(tail||alias.main||alias.name);if(alias===!1)return\\\"\\\";var i=testPath.lastIndexOf(\\\"/\\\");if(-1===i)break;tail=testPath.substr(i)+tail,testPath=testPath.slice(0,i)}return id}if(!(void 0!==window.window&&window.document||window.acequire&&window.define)){window.console||(window.console=function(){var msgs=Array.prototype.slice.call(arguments,0);postMessage({type:\\\"log\\\",data:msgs})},window.console.error=window.console.warn=window.console.log=window.console.trace=window.console),window.window=window,window.ace=window,window.onerror=function(message,file,line,col,err){postMessage({type:\\\"error\\\",data:{message:message,data:err.data,file:file,line:line,col:col,stack:err.stack}})},window.normalizeModule=function(parentId,moduleName){if(-1!==moduleName.indexOf(\\\"!\\\")){var chunks=moduleName.split(\\\"!\\\");return window.normalizeModule(parentId,chunks[0])+\\\"!\\\"+window.normalizeModule(parentId,chunks[1])}if(\\\".\\\"==moduleName.charAt(0)){var base=parentId.split(\\\"/\\\").slice(0,-1).join(\\\"/\\\");for(moduleName=(base?base+\\\"/\\\":\\\"\\\")+moduleName;-1!==moduleName.indexOf(\\\".\\\")&&previous!=moduleName;){var previous=moduleName;moduleName=moduleName.replace(/^\\\\.\\\\//,\\\"\\\").replace(/\\\\/\\\\.\\\\//,\\\"/\\\").replace(/[^\\\\/]+\\\\/\\\\.\\\\.\\\\//,\\\"\\\")}}return moduleName},window.acequire=function acequire(parentId,id){if(id||(id=parentId,parentId=null),!id.charAt)throw Error(\\\"worker.js acequire() accepts only (parentId, id) as arguments\\\");id=window.normalizeModule(parentId,id);var module=window.acequire.modules[id];if(module)return module.initialized||(module.initialized=!0,module.exports=module.factory().exports),module.exports;if(!window.acequire.tlns)return console.log(\\\"unable to load \\\"+id);var path=resolveModuleId(id,window.acequire.tlns);return\\\".js\\\"!=path.slice(-3)&&(path+=\\\".js\\\"),window.acequire.id=id,window.acequire.modules[id]={},importScripts(path),window.acequire(parentId,id)},window.acequire.modules={},window.acequire.tlns={},window.define=function(id,deps,factory){if(2==arguments.length?(factory=deps,\\\"string\\\"!=typeof id&&(deps=id,id=window.acequire.id)):1==arguments.length&&(factory=id,deps=[],id=window.acequire.id),\\\"function\\\"!=typeof factory)return window.acequire.modules[id]={exports:factory,initialized:!0},void 0;deps.length||(deps=[\\\"require\\\",\\\"exports\\\",\\\"module\\\"]);var req=function(childId){return window.acequire(id,childId)};window.acequire.modules[id]={exports:{},factory:function(){var module=this,returnExports=factory.apply(this,deps.map(function(dep){switch(dep){case\\\"require\\\":return req;case\\\"exports\\\":return module.exports;case\\\"module\\\":return module;default:return req(dep)}}));return returnExports&&(module.exports=returnExports),module}}},window.define.amd={},acequire.tlns={},window.initBaseUrls=function(topLevelNamespaces){for(var i in topLevelNamespaces)acequire.tlns[i]=topLevelNamespaces[i]},window.initSender=function(){var EventEmitter=window.acequire(\\\"ace/lib/event_emitter\\\").EventEmitter,oop=window.acequire(\\\"ace/lib/oop\\\"),Sender=function(){};return function(){oop.implement(this,EventEmitter),this.callback=function(data,callbackId){postMessage({type:\\\"call\\\",id:callbackId,data:data})},this.emit=function(name,data){postMessage({type:\\\"event\\\",name:name,data:data})}}.call(Sender.prototype),new Sender};var main=window.main=null,sender=window.sender=null;window.onmessage=function(e){var msg=e.data;if(msg.event&&sender)sender._signal(msg.event,msg.data);else if(msg.command)if(main[msg.command])main[msg.command].apply(main,msg.args);else{if(!window[msg.command])throw Error(\\\"Unknown command:\\\"+msg.command);window[msg.command].apply(window,msg.args)}else if(msg.init){window.initBaseUrls(msg.tlns),acequire(\\\"ace/lib/es5-shim\\\"),sender=window.sender=window.initSender();var clazz=acequire(msg.module)[msg.classname];main=window.main=new clazz(sender)}}}})(this),ace.define(\\\"ace/lib/oop\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";exports.inherits=function(ctor,superCtor){ctor.super_=superCtor,ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:!1,writable:!0,configurable:!0}})},exports.mixin=function(obj,mixin){for(var key in mixin)obj[key]=mixin[key];return obj},exports.implement=function(proto,mixin){exports.mixin(proto,mixin)}}),ace.define(\\\"ace/range\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";var comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},Range=function(startRow,startColumn,endRow,endColumn){this.start={row:startRow,column:startColumn},this.end={row:endRow,column:endColumn}};(function(){this.isEqual=function(range){return this.start.row===range.start.row&&this.end.row===range.end.row&&this.start.column===range.start.column&&this.end.column===range.end.column},this.toString=function(){return\\\"Range: [\\\"+this.start.row+\\\"/\\\"+this.start.column+\\\"] -> [\\\"+this.end.row+\\\"/\\\"+this.end.column+\\\"]\\\"},this.contains=function(row,column){return 0==this.compare(row,column)},this.compareRange=function(range){var cmp,end=range.end,start=range.start;return cmp=this.compare(end.row,end.column),1==cmp?(cmp=this.compare(start.row,start.column),1==cmp?2:0==cmp?1:0):-1==cmp?-2:(cmp=this.compare(start.row,start.column),-1==cmp?-1:1==cmp?42:0)},this.comparePoint=function(p){return this.compare(p.row,p.column)},this.containsRange=function(range){return 0==this.comparePoint(range.start)&&0==this.comparePoint(range.end)},this.intersects=function(range){var cmp=this.compareRange(range);return-1==cmp||0==cmp||1==cmp},this.isEnd=function(row,column){return this.end.row==row&&this.end.column==column},this.isStart=function(row,column){return this.start.row==row&&this.start.column==column},this.setStart=function(row,column){\\\"object\\\"==typeof row?(this.start.column=row.column,this.start.row=row.row):(this.start.row=row,this.start.column=column)},this.setEnd=function(row,column){\\\"object\\\"==typeof row?(this.end.column=row.column,this.end.row=row.row):(this.end.row=row,this.end.column=column)},this.inside=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)||this.isStart(row,column)?!1:!0:!1},this.insideStart=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)?!1:!0:!1},this.insideEnd=function(row,column){return 0==this.compare(row,column)?this.isStart(row,column)?!1:!0:!1},this.compare=function(row,column){return this.isMultiLine()||row!==this.start.row?this.start.row>row?-1:row>this.end.row?1:this.start.row===row?column>=this.start.column?0:-1:this.end.row===row?this.end.column>=column?0:1:0:this.start.column>column?-1:column>this.end.column?1:0},this.compareStart=function(row,column){return this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.compareEnd=function(row,column){return this.end.row==row&&this.end.column==column?1:this.compare(row,column)},this.compareInside=function(row,column){return this.end.row==row&&this.end.column==column?1:this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.clipRows=function(firstRow,lastRow){if(this.end.row>lastRow)var end={row:lastRow+1,column:0};else if(firstRow>this.end.row)var end={row:firstRow,column:0};if(this.start.row>lastRow)var start={row:lastRow+1,column:0};else if(firstRow>this.start.row)var start={row:firstRow,column:0};return Range.fromPoints(start||this.start,end||this.end)},this.extend=function(row,column){var cmp=this.compare(row,column);if(0==cmp)return this;if(-1==cmp)var start={row:row,column:column};else var end={row:row,column:column};return Range.fromPoints(start||this.start,end||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return Range.fromPoints(this.start,this.end)},this.collapseRows=function(){return 0==this.end.column?new Range(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new Range(this.start.row,0,this.end.row,0)},this.toScreenRange=function(session){var screenPosStart=session.documentToScreenPosition(this.start),screenPosEnd=session.documentToScreenPosition(this.end);return new Range(screenPosStart.row,screenPosStart.column,screenPosEnd.row,screenPosEnd.column)},this.moveBy=function(row,column){this.start.row+=row,this.start.column+=column,this.end.row+=row,this.end.column+=column}}).call(Range.prototype),Range.fromPoints=function(start,end){return new Range(start.row,start.column,end.row,end.column)},Range.comparePoints=comparePoints,Range.comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},exports.Range=Range}),ace.define(\\\"ace/apply_delta\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";exports.applyDelta=function(docLines,delta){var row=delta.start.row,startColumn=delta.start.column,line=docLines[row]||\\\"\\\";switch(delta.action){case\\\"insert\\\":var lines=delta.lines;if(1===lines.length)docLines[row]=line.substring(0,startColumn)+delta.lines[0]+line.substring(startColumn);else{var args=[row,1].concat(delta.lines);docLines.splice.apply(docLines,args),docLines[row]=line.substring(0,startColumn)+docLines[row],docLines[row+delta.lines.length-1]+=line.substring(startColumn)}break;case\\\"remove\\\":var endColumn=delta.end.column,endRow=delta.end.row;row===endRow?docLines[row]=line.substring(0,startColumn)+line.substring(endColumn):docLines.splice(row,endRow-row+1,line.substring(0,startColumn)+docLines[endRow].substring(endColumn))}}}),ace.define(\\\"ace/lib/event_emitter\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";var EventEmitter={},stopPropagation=function(){this.propagationStopped=!0},preventDefault=function(){this.defaultPrevented=!0};EventEmitter._emit=EventEmitter._dispatchEvent=function(eventName,e){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var listeners=this._eventRegistry[eventName]||[],defaultHandler=this._defaultHandlers[eventName];if(listeners.length||defaultHandler){\\\"object\\\"==typeof e&&e||(e={}),e.type||(e.type=eventName),e.stopPropagation||(e.stopPropagation=stopPropagation),e.preventDefault||(e.preventDefault=preventDefault),listeners=listeners.slice();for(var i=0;listeners.length>i&&(listeners[i](e,this),!e.propagationStopped);i++);return defaultHandler&&!e.defaultPrevented?defaultHandler(e,this):void 0}},EventEmitter._signal=function(eventName,e){var listeners=(this._eventRegistry||{})[eventName];if(listeners){listeners=listeners.slice();for(var i=0;listeners.length>i;i++)listeners[i](e,this)}},EventEmitter.once=function(eventName,callback){var _self=this;callback&&this.addEventListener(eventName,function newCallback(){_self.removeEventListener(eventName,newCallback),callback.apply(null,arguments)})},EventEmitter.setDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers||(handlers=this._defaultHandlers={_disabled_:{}}),handlers[eventName]){var old=handlers[eventName],disabled=handlers._disabled_[eventName];disabled||(handlers._disabled_[eventName]=disabled=[]),disabled.push(old);var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}handlers[eventName]=callback},EventEmitter.removeDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers){var disabled=handlers._disabled_[eventName];if(handlers[eventName]==callback)handlers[eventName],disabled&&this.setDefaultHandler(eventName,disabled.pop());else if(disabled){var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}}},EventEmitter.on=EventEmitter.addEventListener=function(eventName,callback,capturing){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];return listeners||(listeners=this._eventRegistry[eventName]=[]),-1==listeners.indexOf(callback)&&listeners[capturing?\\\"unshift\\\":\\\"push\\\"](callback),callback},EventEmitter.off=EventEmitter.removeListener=EventEmitter.removeEventListener=function(eventName,callback){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];if(listeners){var index=listeners.indexOf(callback);-1!==index&&listeners.splice(index,1)}},EventEmitter.removeAllListeners=function(eventName){this._eventRegistry&&(this._eventRegistry[eventName]=[])},exports.EventEmitter=EventEmitter}),ace.define(\\\"ace/anchor\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\",\\\"ace/lib/oop\\\",\\\"ace/lib/event_emitter\\\"],function(acequire,exports){\\\"use strict\\\";var oop=acequire(\\\"./lib/oop\\\"),EventEmitter=acequire(\\\"./lib/event_emitter\\\").EventEmitter,Anchor=exports.Anchor=function(doc,row,column){this.$onChange=this.onChange.bind(this),this.attach(doc),column===void 0?this.setPosition(row.row,row.column):this.setPosition(row,column)};(function(){function $pointsInOrder(point1,point2,equalPointsInOrder){var bColIsAfter=equalPointsInOrder?point1.column<=point2.column:point1.column<point2.column;return point1.row<point2.row||point1.row==point2.row&&bColIsAfter}function $getTransformedPoint(delta,point,moveIfEqual){var deltaIsInsert=\\\"insert\\\"==delta.action,deltaRowShift=(deltaIsInsert?1:-1)*(delta.end.row-delta.start.row),deltaColShift=(deltaIsInsert?1:-1)*(delta.end.column-delta.start.column),deltaStart=delta.start,deltaEnd=deltaIsInsert?deltaStart:delta.end;return $pointsInOrder(point,deltaStart,moveIfEqual)?{row:point.row,column:point.column}:$pointsInOrder(deltaEnd,point,!moveIfEqual)?{row:point.row+deltaRowShift,column:point.column+(point.row==deltaEnd.row?deltaColShift:0)}:{row:deltaStart.row,column:deltaStart.column}}oop.implement(this,EventEmitter),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(delta){if(!(delta.start.row==delta.end.row&&delta.start.row!=this.row||delta.start.row>this.row)){var point=$getTransformedPoint(delta,{row:this.row,column:this.column},this.$insertRight);this.setPosition(point.row,point.column,!0)}},this.setPosition=function(row,column,noClip){var pos;if(pos=noClip?{row:row,column:column}:this.$clipPositionToDocument(row,column),this.row!=pos.row||this.column!=pos.column){var old={row:this.row,column:this.column};this.row=pos.row,this.column=pos.column,this._signal(\\\"change\\\",{old:old,value:pos})}},this.detach=function(){this.document.removeEventListener(\\\"change\\\",this.$onChange)},this.attach=function(doc){this.document=doc||this.document,this.document.on(\\\"change\\\",this.$onChange)},this.$clipPositionToDocument=function(row,column){var pos={};return row>=this.document.getLength()?(pos.row=Math.max(0,this.document.getLength()-1),pos.column=this.document.getLine(pos.row).length):0>row?(pos.row=0,pos.column=0):(pos.row=row,pos.column=Math.min(this.document.getLine(pos.row).length,Math.max(0,column))),0>column&&(pos.column=0),pos}}).call(Anchor.prototype)}),ace.define(\\\"ace/document\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\",\\\"ace/lib/oop\\\",\\\"ace/apply_delta\\\",\\\"ace/lib/event_emitter\\\",\\\"ace/range\\\",\\\"ace/anchor\\\"],function(acequire,exports){\\\"use strict\\\";var oop=acequire(\\\"./lib/oop\\\"),applyDelta=acequire(\\\"./apply_delta\\\").applyDelta,EventEmitter=acequire(\\\"./lib/event_emitter\\\").EventEmitter,Range=acequire(\\\"./range\\\").Range,Anchor=acequire(\\\"./anchor\\\").Anchor,Document=function(textOrLines){this.$lines=[\\\"\\\"],0===textOrLines.length?this.$lines=[\\\"\\\"]:Array.isArray(textOrLines)?this.insertMergedLines({row:0,column:0},textOrLines):this.insert({row:0,column:0},textOrLines)};(function(){oop.implement(this,EventEmitter),this.setValue=function(text){var len=this.getLength()-1;this.remove(new Range(0,0,len,this.getLine(len).length)),this.insert({row:0,column:0},text)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(row,column){return new Anchor(this,row,column)},this.$split=0===\\\"aaa\\\".split(/a/).length?function(text){return text.replace(/\\\\r\\\\n|\\\\r/g,\\\"\\\\n\\\").split(\\\"\\\\n\\\")}:function(text){return text.split(/\\\\r\\\\n|\\\\r|\\\\n/)},this.$detectNewLine=function(text){var match=text.match(/^.*?(\\\\r\\\\n|\\\\r|\\\\n)/m);this.$autoNewLine=match?match[1]:\\\"\\\\n\\\",this._signal(\\\"changeNewLineMode\\\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\\\"windows\\\":return\\\"\\\\r\\\\n\\\";case\\\"unix\\\":return\\\"\\\\n\\\";default:return this.$autoNewLine||\\\"\\\\n\\\"}},this.$autoNewLine=\\\"\\\",this.$newLineMode=\\\"auto\\\",this.setNewLineMode=function(newLineMode){this.$newLineMode!==newLineMode&&(this.$newLineMode=newLineMode,this._signal(\\\"changeNewLineMode\\\"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(text){return\\\"\\\\r\\\\n\\\"==text||\\\"\\\\r\\\"==text||\\\"\\\\n\\\"==text},this.getLine=function(row){return this.$lines[row]||\\\"\\\"},this.getLines=function(firstRow,lastRow){return this.$lines.slice(firstRow,lastRow+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(range){return this.getLinesForRange(range).join(this.getNewLineCharacter())},this.getLinesForRange=function(range){var lines;if(range.start.row===range.end.row)lines=[this.getLine(range.start.row).substring(range.start.column,range.end.column)];else{lines=this.getLines(range.start.row,range.end.row),lines[0]=(lines[0]||\\\"\\\").substring(range.start.column);var l=lines.length-1;range.end.row-range.start.row==l&&(lines[l]=lines[l].substring(0,range.end.column))}return lines},this.insertLines=function(row,lines){return console.warn(\\\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\\\"),this.insertFullLines(row,lines)},this.removeLines=function(firstRow,lastRow){return console.warn(\\\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\\\"),this.removeFullLines(firstRow,lastRow)},this.insertNewLine=function(position){return console.warn(\\\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\\\"),this.insertMergedLines(position,[\\\"\\\",\\\"\\\"])},this.insert=function(position,text){return 1>=this.getLength()&&this.$detectNewLine(text),this.insertMergedLines(position,this.$split(text))},this.insertInLine=function(position,text){var start=this.clippedPos(position.row,position.column),end=this.pos(position.row,position.column+text.length);return this.applyDelta({start:start,end:end,action:\\\"insert\\\",lines:[text]},!0),this.clonePos(end)},this.clippedPos=function(row,column){var length=this.getLength();void 0===row?row=length:0>row?row=0:row>=length&&(row=length-1,column=void 0);var line=this.getLine(row);return void 0==column&&(column=line.length),column=Math.min(Math.max(column,0),line.length),{row:row,column:column}},this.clonePos=function(pos){return{row:pos.row,column:pos.column}},this.pos=function(row,column){return{row:row,column:column}},this.$clipPosition=function(position){var length=this.getLength();return position.row>=length?(position.row=Math.max(0,length-1),position.column=this.getLine(length-1).length):(position.row=Math.max(0,position.row),position.column=Math.min(Math.max(position.column,0),this.getLine(position.row).length)),position},this.insertFullLines=function(row,lines){row=Math.min(Math.max(row,0),this.getLength());var column=0;this.getLength()>row?(lines=lines.concat([\\\"\\\"]),column=0):(lines=[\\\"\\\"].concat(lines),row--,column=this.$lines[row].length),this.insertMergedLines({row:row,column:column},lines)},this.insertMergedLines=function(position,lines){var start=this.clippedPos(position.row,position.column),end={row:start.row+lines.length-1,column:(1==lines.length?start.column:0)+lines[lines.length-1].length};return this.applyDelta({start:start,end:end,action:\\\"insert\\\",lines:lines}),this.clonePos(end)},this.remove=function(range){var start=this.clippedPos(range.start.row,range.start.column),end=this.clippedPos(range.end.row,range.end.column);return this.applyDelta({start:start,end:end,action:\\\"remove\\\",lines:this.getLinesForRange({start:start,end:end})}),this.clonePos(start)},this.removeInLine=function(row,startColumn,endColumn){var start=this.clippedPos(row,startColumn),end=this.clippedPos(row,endColumn);return this.applyDelta({start:start,end:end,action:\\\"remove\\\",lines:this.getLinesForRange({start:start,end:end})},!0),this.clonePos(start)},this.removeFullLines=function(firstRow,lastRow){firstRow=Math.min(Math.max(0,firstRow),this.getLength()-1),lastRow=Math.min(Math.max(0,lastRow),this.getLength()-1);var deleteFirstNewLine=lastRow==this.getLength()-1&&firstRow>0,deleteLastNewLine=this.getLength()-1>lastRow,startRow=deleteFirstNewLine?firstRow-1:firstRow,startCol=deleteFirstNewLine?this.getLine(startRow).length:0,endRow=deleteLastNewLine?lastRow+1:lastRow,endCol=deleteLastNewLine?0:this.getLine(endRow).length,range=new Range(startRow,startCol,endRow,endCol),deletedLines=this.$lines.slice(firstRow,lastRow+1);return this.applyDelta({start:range.start,end:range.end,action:\\\"remove\\\",lines:this.getLinesForRange(range)}),deletedLines},this.removeNewLine=function(row){this.getLength()-1>row&&row>=0&&this.applyDelta({start:this.pos(row,this.getLine(row).length),end:this.pos(row+1,0),action:\\\"remove\\\",lines:[\\\"\\\",\\\"\\\"]})},this.replace=function(range,text){if(range instanceof Range||(range=Range.fromPoints(range.start,range.end)),0===text.length&&range.isEmpty())return range.start;if(text==this.getTextRange(range))return range.end;this.remove(range);var end;return end=text?this.insert(range.start,text):range.start},this.applyDeltas=function(deltas){for(var i=0;deltas.length>i;i++)this.applyDelta(deltas[i])},this.revertDeltas=function(deltas){for(var i=deltas.length-1;i>=0;i--)this.revertDelta(deltas[i])},this.applyDelta=function(delta,doNotValidate){var isInsert=\\\"insert\\\"==delta.action;(isInsert?1>=delta.lines.length&&!delta.lines[0]:!Range.comparePoints(delta.start,delta.end))||(isInsert&&delta.lines.length>2e4&&this.$splitAndapplyLargeDelta(delta,2e4),applyDelta(this.$lines,delta,doNotValidate),this._signal(\\\"change\\\",delta))},this.$splitAndapplyLargeDelta=function(delta,MAX){for(var lines=delta.lines,l=lines.length,row=delta.start.row,column=delta.start.column,from=0,to=0;;){from=to,to+=MAX-1;var chunk=lines.slice(from,to);if(to>l){delta.lines=chunk,delta.start.row=row+from,delta.start.column=column;break}chunk.push(\\\"\\\"),this.applyDelta({start:this.pos(row+from,column),end:this.pos(row+to,column=0),action:delta.action,lines:chunk},!0)}},this.revertDelta=function(delta){this.applyDelta({start:this.clonePos(delta.start),end:this.clonePos(delta.end),action:\\\"insert\\\"==delta.action?\\\"remove\\\":\\\"insert\\\",lines:delta.lines.slice()})},this.indexToPosition=function(index,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,i=startRow||0,l=lines.length;l>i;i++)if(index-=lines[i].length+newlineLength,0>index)return{row:i,column:index+lines[i].length+newlineLength};return{row:l-1,column:lines[l-1].length}},this.positionToIndex=function(pos,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,index=0,row=Math.min(pos.row,lines.length),i=startRow||0;row>i;++i)index+=lines[i].length+newlineLength;return index+pos.column}}).call(Document.prototype),exports.Document=Document}),ace.define(\\\"ace/lib/lang\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";exports.last=function(a){return a[a.length-1]},exports.stringReverse=function(string){return string.split(\\\"\\\").reverse().join(\\\"\\\")},exports.stringRepeat=function(string,count){for(var result=\\\"\\\";count>0;)1&count&&(result+=string),(count>>=1)&&(string+=string);return result};var trimBeginRegexp=/^\\\\s\\\\s*/,trimEndRegexp=/\\\\s\\\\s*$/;exports.stringTrimLeft=function(string){return string.replace(trimBeginRegexp,\\\"\\\")},exports.stringTrimRight=function(string){return string.replace(trimEndRegexp,\\\"\\\")},exports.copyObject=function(obj){var copy={};for(var key in obj)copy[key]=obj[key];return copy},exports.copyArray=function(array){for(var copy=[],i=0,l=array.length;l>i;i++)copy[i]=array[i]&&\\\"object\\\"==typeof array[i]?this.copyObject(array[i]):array[i];return copy},exports.deepCopy=function deepCopy(obj){if(\\\"object\\\"!=typeof obj||!obj)return obj;var copy;if(Array.isArray(obj)){copy=[];for(var key=0;obj.length>key;key++)copy[key]=deepCopy(obj[key]);return copy}var cons=obj.constructor;if(cons===RegExp)return obj;copy=cons();for(var key in obj)copy[key]=deepCopy(obj[key]);return copy},exports.arrayToMap=function(arr){for(var map={},i=0;arr.length>i;i++)map[arr[i]]=1;return map},exports.createMap=function(props){var map=Object.create(null);for(var i in props)map[i]=props[i];return map},exports.arrayRemove=function(array,value){for(var i=0;array.length>=i;i++)value===array[i]&&array.splice(i,1)},exports.escapeRegExp=function(str){return str.replace(/([.*+?^${}()|[\\\\]\\\\/\\\\\\\\])/g,\\\"\\\\\\\\$1\\\")},exports.escapeHTML=function(str){return str.replace(/&/g,\\\"&#38;\\\").replace(/\\\"/g,\\\"&#34;\\\").replace(/'/g,\\\"&#39;\\\").replace(/</g,\\\"&#60;\\\")},exports.getMatchOffsets=function(string,regExp){var matches=[];return string.replace(regExp,function(str){matches.push({offset:arguments[arguments.length-2],length:str.length})}),matches},exports.deferredCall=function(fcn){var timer=null,callback=function(){timer=null,fcn()},deferred=function(timeout){return deferred.cancel(),timer=setTimeout(callback,timeout||0),deferred};return deferred.schedule=deferred,deferred.call=function(){return this.cancel(),fcn(),deferred},deferred.cancel=function(){return clearTimeout(timer),timer=null,deferred},deferred.isPending=function(){return timer},deferred},exports.delayedCall=function(fcn,defaultTimeout){var timer=null,callback=function(){timer=null,fcn()},_self=function(timeout){null==timer&&(timer=setTimeout(callback,timeout||defaultTimeout))};return _self.delay=function(timeout){timer&&clearTimeout(timer),timer=setTimeout(callback,timeout||defaultTimeout)},_self.schedule=_self,_self.call=function(){this.cancel(),fcn()},_self.cancel=function(){timer&&clearTimeout(timer),timer=null},_self.isPending=function(){return timer},_self}}),ace.define(\\\"ace/worker/mirror\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\",\\\"ace/range\\\",\\\"ace/document\\\",\\\"ace/lib/lang\\\"],function(acequire,exports){\\\"use strict\\\";acequire(\\\"../range\\\").Range;var Document=acequire(\\\"../document\\\").Document,lang=acequire(\\\"../lib/lang\\\"),Mirror=exports.Mirror=function(sender){this.sender=sender;var doc=this.doc=new Document(\\\"\\\"),deferredUpdate=this.deferredUpdate=lang.delayedCall(this.onUpdate.bind(this)),_self=this;sender.on(\\\"change\\\",function(e){var data=e.data;if(data[0].start)doc.applyDeltas(data);else for(var i=0;data.length>i;i+=2){if(Array.isArray(data[i+1]))var d={action:\\\"insert\\\",start:data[i],lines:data[i+1]};else var d={action:\\\"remove\\\",start:data[i],end:data[i+1]};doc.applyDelta(d,!0)}return _self.$timeout?deferredUpdate.schedule(_self.$timeout):(_self.onUpdate(),void 0)})};(function(){this.$timeout=500,this.setTimeout=function(timeout){this.$timeout=timeout},this.setValue=function(value){this.doc.setValue(value),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(callbackId){this.sender.callback(this.doc.getValue(),callbackId)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(Mirror.prototype)}),ace.define(\\\"ace/mode/json/json_parse\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(){\\\"use strict\\\";var at,ch,text,value,escapee={'\\\"':'\\\"',\\\"\\\\\\\\\\\":\\\"\\\\\\\\\\\",\\\"/\\\":\\\"/\\\",b:\\\"\\\\b\\\",f:\\\"\\\\f\\\",n:\\\"\\\\n\\\",r:\\\"\\\\r\\\",t:\\\"\\t\\\"},error=function(m){throw{name:\\\"SyntaxError\\\",message:m,at:at,text:text}},next=function(c){return c&&c!==ch&&error(\\\"Expected '\\\"+c+\\\"' instead of '\\\"+ch+\\\"'\\\"),ch=text.charAt(at),at+=1,ch},number=function(){var number,string=\\\"\\\";for(\\\"-\\\"===ch&&(string=\\\"-\\\",next(\\\"-\\\"));ch>=\\\"0\\\"&&\\\"9\\\">=ch;)string+=ch,next();if(\\\".\\\"===ch)for(string+=\\\".\\\";next()&&ch>=\\\"0\\\"&&\\\"9\\\">=ch;)string+=ch;if(\\\"e\\\"===ch||\\\"E\\\"===ch)for(string+=ch,next(),(\\\"-\\\"===ch||\\\"+\\\"===ch)&&(string+=ch,next());ch>=\\\"0\\\"&&\\\"9\\\">=ch;)string+=ch,next();return number=+string,isNaN(number)?(error(\\\"Bad number\\\"),void 0):number},string=function(){var hex,i,uffff,string=\\\"\\\";if('\\\"'===ch)for(;next();){if('\\\"'===ch)return next(),string;if(\\\"\\\\\\\\\\\"===ch)if(next(),\\\"u\\\"===ch){for(uffff=0,i=0;4>i&&(hex=parseInt(next(),16),isFinite(hex));i+=1)uffff=16*uffff+hex;string+=String.fromCharCode(uffff)}else{if(\\\"string\\\"!=typeof escapee[ch])break;string+=escapee[ch]}else string+=ch}error(\\\"Bad string\\\")},white=function(){for(;ch&&\\\" \\\">=ch;)next()},word=function(){switch(ch){case\\\"t\\\":return next(\\\"t\\\"),next(\\\"r\\\"),next(\\\"u\\\"),next(\\\"e\\\"),!0;case\\\"f\\\":return next(\\\"f\\\"),next(\\\"a\\\"),next(\\\"l\\\"),next(\\\"s\\\"),next(\\\"e\\\"),!1;case\\\"n\\\":return next(\\\"n\\\"),next(\\\"u\\\"),next(\\\"l\\\"),next(\\\"l\\\"),null}error(\\\"Unexpected '\\\"+ch+\\\"'\\\")},array=function(){var array=[];if(\\\"[\\\"===ch){if(next(\\\"[\\\"),white(),\\\"]\\\"===ch)return next(\\\"]\\\"),array;for(;ch;){if(array.push(value()),white(),\\\"]\\\"===ch)return next(\\\"]\\\"),array;next(\\\",\\\"),white()}}error(\\\"Bad array\\\")},object=function(){var key,object={};if(\\\"{\\\"===ch){if(next(\\\"{\\\"),white(),\\\"}\\\"===ch)return next(\\\"}\\\"),object;for(;ch;){if(key=string(),white(),next(\\\":\\\"),Object.hasOwnProperty.call(object,key)&&error('Duplicate key \\\"'+key+'\\\"'),object[key]=value(),white(),\\\"}\\\"===ch)return next(\\\"}\\\"),object;next(\\\",\\\"),white()}}error(\\\"Bad object\\\")};return value=function(){switch(white(),ch){case\\\"{\\\":return object();case\\\"[\\\":return array();case'\\\"':return string();case\\\"-\\\":return number();default:return ch>=\\\"0\\\"&&\\\"9\\\">=ch?number():word()}},function(source,reviver){var result;return text=source,at=0,ch=\\\" \\\",result=value(),white(),ch&&error(\\\"Syntax error\\\"),\\\"function\\\"==typeof reviver?function walk(holder,key){var k,v,value=holder[key];if(value&&\\\"object\\\"==typeof value)for(k in value)Object.hasOwnProperty.call(value,k)&&(v=walk(value,k),void 0!==v?value[k]=v:delete value[k]);return reviver.call(holder,key,value)}({\\\"\\\":result},\\\"\\\"):result}}),ace.define(\\\"ace/mode/json_worker\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\",\\\"ace/lib/oop\\\",\\\"ace/worker/mirror\\\",\\\"ace/mode/json/json_parse\\\"],function(acequire,exports){\\\"use strict\\\";var oop=acequire(\\\"../lib/oop\\\"),Mirror=acequire(\\\"../worker/mirror\\\").Mirror,parse=acequire(\\\"./json/json_parse\\\"),JsonWorker=exports.JsonWorker=function(sender){Mirror.call(this,sender),this.setTimeout(200)};oop.inherits(JsonWorker,Mirror),function(){this.onUpdate=function(){var value=this.doc.getValue(),errors=[];try{value&&parse(value)}catch(e){var pos=this.doc.indexToPosition(e.at-1);errors.push({row:pos.row,column:pos.column,text:e.message,type:\\\"error\\\"})}this.sender.emit(\\\"annotate\\\",errors)}}.call(JsonWorker.prototype)}),ace.define(\\\"ace/lib/es5-shim\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(){function Empty(){}function doesDefinePropertyWork(object){try{return Object.defineProperty(object,\\\"sentinel\\\",{}),\\\"sentinel\\\"in object}catch(exception){}}function toInteger(n){return n=+n,n!==n?n=0:0!==n&&n!==1/0&&n!==-(1/0)&&(n=(n>0||-1)*Math.floor(Math.abs(n))),n}Function.prototype.bind||(Function.prototype.bind=function(that){var target=this;if(\\\"function\\\"!=typeof target)throw new TypeError(\\\"Function.prototype.bind called on incompatible \\\"+target);var args=slice.call(arguments,1),bound=function(){if(this instanceof bound){var result=target.apply(this,args.concat(slice.call(arguments)));return Object(result)===result?result:this}return target.apply(that,args.concat(slice.call(arguments)))};return target.prototype&&(Empty.prototype=target.prototype,bound.prototype=new Empty,Empty.prototype=null),bound});var defineGetter,defineSetter,lookupGetter,lookupSetter,supportsAccessors,call=Function.prototype.call,prototypeOfArray=Array.prototype,prototypeOfObject=Object.prototype,slice=prototypeOfArray.slice,_toString=call.bind(prototypeOfObject.toString),owns=call.bind(prototypeOfObject.hasOwnProperty);if((supportsAccessors=owns(prototypeOfObject,\\\"__defineGetter__\\\"))&&(defineGetter=call.bind(prototypeOfObject.__defineGetter__),defineSetter=call.bind(prototypeOfObject.__defineSetter__),lookupGetter=call.bind(prototypeOfObject.__lookupGetter__),lookupSetter=call.bind(prototypeOfObject.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function makeArray(l){var a=Array(l+2);return a[0]=a[1]=0,a}var lengthBefore,array=[];return array.splice.apply(array,makeArray(20)),array.splice.apply(array,makeArray(26)),lengthBefore=array.length,array.splice(5,0,\\\"XXX\\\"),lengthBefore+1==array.length,lengthBefore+1==array.length?!0:void 0\\n}()){var array_splice=Array.prototype.splice;Array.prototype.splice=function(start,deleteCount){return arguments.length?array_splice.apply(this,[void 0===start?0:start,void 0===deleteCount?this.length-start:deleteCount].concat(slice.call(arguments,2))):[]}}else Array.prototype.splice=function(pos,removeCount){var length=this.length;pos>0?pos>length&&(pos=length):void 0==pos?pos=0:0>pos&&(pos=Math.max(length+pos,0)),length>pos+removeCount||(removeCount=length-pos);var removed=this.slice(pos,pos+removeCount),insert=slice.call(arguments,2),add=insert.length;if(pos===length)add&&this.push.apply(this,insert);else{var remove=Math.min(removeCount,length-pos),tailOldPos=pos+remove,tailNewPos=tailOldPos+add-remove,tailCount=length-tailOldPos,lengthAfterRemove=length-remove;if(tailOldPos>tailNewPos)for(var i=0;tailCount>i;++i)this[tailNewPos+i]=this[tailOldPos+i];else if(tailNewPos>tailOldPos)for(i=tailCount;i--;)this[tailNewPos+i]=this[tailOldPos+i];if(add&&pos===lengthAfterRemove)this.length=lengthAfterRemove,this.push.apply(this,insert);else for(this.length=lengthAfterRemove+add,i=0;add>i;++i)this[pos+i]=insert[i]}return removed};Array.isArray||(Array.isArray=function(obj){return\\\"[object Array]\\\"==_toString(obj)});var boxedString=Object(\\\"a\\\"),splitString=\\\"a\\\"!=boxedString[0]||!(0 in boxedString);if(Array.prototype.forEach||(Array.prototype.forEach=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,thisp=arguments[1],i=-1,length=self.length>>>0;if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError;for(;length>++i;)i in self&&fun.call(thisp,self[i],i,object)}),Array.prototype.map||(Array.prototype.map=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0,result=Array(length),thisp=arguments[1];if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");for(var i=0;length>i;i++)i in self&&(result[i]=fun.call(thisp,self[i],i,object));return result}),Array.prototype.filter||(Array.prototype.filter=function(fun){var value,object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0,result=[],thisp=arguments[1];if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");for(var i=0;length>i;i++)i in self&&(value=self[i],fun.call(thisp,value,i,object)&&result.push(value));return result}),Array.prototype.every||(Array.prototype.every=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0,thisp=arguments[1];if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");for(var i=0;length>i;i++)if(i in self&&!fun.call(thisp,self[i],i,object))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0,thisp=arguments[1];if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");for(var i=0;length>i;i++)if(i in self&&fun.call(thisp,self[i],i,object))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0;if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");if(!length&&1==arguments.length)throw new TypeError(\\\"reduce of empty array with no initial value\\\");var result,i=0;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i++];break}if(++i>=length)throw new TypeError(\\\"reduce of empty array with no initial value\\\")}for(;length>i;i++)i in self&&(result=fun.call(void 0,result,self[i],i,object));return result}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0;if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");if(!length&&1==arguments.length)throw new TypeError(\\\"reduceRight of empty array with no initial value\\\");var result,i=length-1;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i--];break}if(0>--i)throw new TypeError(\\\"reduceRight of empty array with no initial value\\\")}do i in this&&(result=fun.call(void 0,result,self[i],i,object));while(i--);return result}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(sought){var self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):toObject(this),length=self.length>>>0;if(!length)return-1;var i=0;for(arguments.length>1&&(i=toInteger(arguments[1])),i=i>=0?i:Math.max(0,length+i);length>i;i++)if(i in self&&self[i]===sought)return i;return-1}),Array.prototype.lastIndexOf&&-1==[0,1].lastIndexOf(0,-3)||(Array.prototype.lastIndexOf=function(sought){var self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):toObject(this),length=self.length>>>0;if(!length)return-1;var i=length-1;for(arguments.length>1&&(i=Math.min(i,toInteger(arguments[1]))),i=i>=0?i:length-Math.abs(i);i>=0;i--)if(i in self&&sought===self[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(object){return object.__proto__||(object.constructor?object.constructor.prototype:prototypeOfObject)}),!Object.getOwnPropertyDescriptor){var ERR_NON_OBJECT=\\\"Object.getOwnPropertyDescriptor called on a non-object: \\\";Object.getOwnPropertyDescriptor=function(object,property){if(\\\"object\\\"!=typeof object&&\\\"function\\\"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT+object);if(owns(object,property)){var descriptor,getter,setter;if(descriptor={enumerable:!0,configurable:!0},supportsAccessors){var prototype=object.__proto__;object.__proto__=prototypeOfObject;var getter=lookupGetter(object,property),setter=lookupSetter(object,property);if(object.__proto__=prototype,getter||setter)return getter&&(descriptor.get=getter),setter&&(descriptor.set=setter),descriptor}return descriptor.value=object[property],descriptor}}}if(Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(object){return Object.keys(object)}),!Object.create){var createEmpty;createEmpty=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var empty={};for(var i in empty)empty[i]=null;return empty.constructor=empty.hasOwnProperty=empty.propertyIsEnumerable=empty.isPrototypeOf=empty.toLocaleString=empty.toString=empty.valueOf=empty.__proto__=null,empty},Object.create=function(prototype,properties){var object;if(null===prototype)object=createEmpty();else{if(\\\"object\\\"!=typeof prototype)throw new TypeError(\\\"typeof prototype[\\\"+typeof prototype+\\\"] != 'object'\\\");var Type=function(){};Type.prototype=prototype,object=new Type,object.__proto__=prototype}return void 0!==properties&&Object.defineProperties(object,properties),object}}if(Object.defineProperty){var definePropertyWorksOnObject=doesDefinePropertyWork({}),definePropertyWorksOnDom=\\\"undefined\\\"==typeof document||doesDefinePropertyWork(document.createElement(\\\"div\\\"));if(!definePropertyWorksOnObject||!definePropertyWorksOnDom)var definePropertyFallback=Object.defineProperty}if(!Object.defineProperty||definePropertyFallback){var ERR_NON_OBJECT_DESCRIPTOR=\\\"Property description must be an object: \\\",ERR_NON_OBJECT_TARGET=\\\"Object.defineProperty called on non-object: \\\",ERR_ACCESSORS_NOT_SUPPORTED=\\\"getters & setters can not be defined on this javascript engine\\\";Object.defineProperty=function(object,property,descriptor){if(\\\"object\\\"!=typeof object&&\\\"function\\\"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT_TARGET+object);if(\\\"object\\\"!=typeof descriptor&&\\\"function\\\"!=typeof descriptor||null===descriptor)throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR+descriptor);if(definePropertyFallback)try{return definePropertyFallback.call(Object,object,property,descriptor)}catch(exception){}if(owns(descriptor,\\\"value\\\"))if(supportsAccessors&&(lookupGetter(object,property)||lookupSetter(object,property))){var prototype=object.__proto__;object.__proto__=prototypeOfObject,delete object[property],object[property]=descriptor.value,object.__proto__=prototype}else object[property]=descriptor.value;else{if(!supportsAccessors)throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);owns(descriptor,\\\"get\\\")&&defineGetter(object,property,descriptor.get),owns(descriptor,\\\"set\\\")&&defineSetter(object,property,descriptor.set)}return object}}Object.defineProperties||(Object.defineProperties=function(object,properties){for(var property in properties)owns(properties,property)&&Object.defineProperty(object,property,properties[property]);return object}),Object.seal||(Object.seal=function(object){return object}),Object.freeze||(Object.freeze=function(object){return object});try{Object.freeze(function(){})}catch(exception){Object.freeze=function(freezeObject){return function(object){return\\\"function\\\"==typeof object?object:freezeObject(object)}}(Object.freeze)}if(Object.preventExtensions||(Object.preventExtensions=function(object){return object}),Object.isSealed||(Object.isSealed=function(){return!1}),Object.isFrozen||(Object.isFrozen=function(){return!1}),Object.isExtensible||(Object.isExtensible=function(object){if(Object(object)===object)throw new TypeError;for(var name=\\\"\\\";owns(object,name);)name+=\\\"?\\\";object[name]=!0;var returnValue=owns(object,name);return delete object[name],returnValue}),!Object.keys){var hasDontEnumBug=!0,dontEnums=[\\\"toString\\\",\\\"toLocaleString\\\",\\\"valueOf\\\",\\\"hasOwnProperty\\\",\\\"isPrototypeOf\\\",\\\"propertyIsEnumerable\\\",\\\"constructor\\\"],dontEnumsLength=dontEnums.length;for(var key in{toString:null})hasDontEnumBug=!1;Object.keys=function(object){if(\\\"object\\\"!=typeof object&&\\\"function\\\"!=typeof object||null===object)throw new TypeError(\\\"Object.keys called on a non-object\\\");var keys=[];for(var name in object)owns(object,name)&&keys.push(name);if(hasDontEnumBug)for(var i=0,ii=dontEnumsLength;ii>i;i++){var dontEnum=dontEnums[i];owns(object,dontEnum)&&keys.push(dontEnum)}return keys}}Date.now||(Date.now=function(){return(new Date).getTime()});var ws=\\\"\\t\\\\n\\u000b\\\\f\\\\r    \\\\u2028\\\\u2029\\\";if(!String.prototype.trim||ws.trim()){ws=\\\"[\\\"+ws+\\\"]\\\";var trimBeginRegexp=RegExp(\\\"^\\\"+ws+ws+\\\"*\\\"),trimEndRegexp=RegExp(ws+ws+\\\"*$\\\");String.prototype.trim=function(){return(this+\\\"\\\").replace(trimBeginRegexp,\\\"\\\").replace(trimEndRegexp,\\\"\\\")}}var toObject=function(o){if(null==o)throw new TypeError(\\\"can't convert \\\"+o+\\\" to object\\\");return Object(o)}});\";/***/},/* 69 */ /***/function(module,exports){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(acequire,exports,module){\"use strict\";var dom=acequire(\"../lib/dom\");var lang=acequire(\"../lib/lang\");var event=acequire(\"../lib/event\");var searchboxCss=\"\\\r\n\t.ace_search {\\\r\n\tbackground-color: #ddd;\\\r\n\tborder: 1px solid #cbcbcb;\\\r\n\tborder-top: 0 none;\\\r\n\tmax-width: 325px;\\\r\n\toverflow: hidden;\\\r\n\tmargin: 0;\\\r\n\tpadding: 4px;\\\r\n\tpadding-right: 6px;\\\r\n\tpadding-bottom: 0;\\\r\n\tposition: absolute;\\\r\n\ttop: 0px;\\\r\n\tz-index: 99;\\\r\n\twhite-space: normal;\\\r\n\t}\\\r\n\t.ace_search.left {\\\r\n\tborder-left: 0 none;\\\r\n\tborder-radius: 0px 0px 5px 0px;\\\r\n\tleft: 0;\\\r\n\t}\\\r\n\t.ace_search.right {\\\r\n\tborder-radius: 0px 0px 0px 5px;\\\r\n\tborder-right: 0 none;\\\r\n\tright: 0;\\\r\n\t}\\\r\n\t.ace_search_form, .ace_replace_form {\\\r\n\tborder-radius: 3px;\\\r\n\tborder: 1px solid #cbcbcb;\\\r\n\tfloat: left;\\\r\n\tmargin-bottom: 4px;\\\r\n\toverflow: hidden;\\\r\n\t}\\\r\n\t.ace_search_form.ace_nomatch {\\\r\n\toutline: 1px solid red;\\\r\n\t}\\\r\n\t.ace_search_field {\\\r\n\tbackground-color: white;\\\r\n\tborder-right: 1px solid #cbcbcb;\\\r\n\tborder: 0 none;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tfloat: left;\\\r\n\theight: 22px;\\\r\n\toutline: 0;\\\r\n\tpadding: 0 7px;\\\r\n\twidth: 214px;\\\r\n\tmargin: 0;\\\r\n\t}\\\r\n\t.ace_searchbtn,\\\r\n\t.ace_replacebtn {\\\r\n\tbackground: #fff;\\\r\n\tborder: 0 none;\\\r\n\tborder-left: 1px solid #dcdcdc;\\\r\n\tcursor: pointer;\\\r\n\tfloat: left;\\\r\n\theight: 22px;\\\r\n\tmargin: 0;\\\r\n\tposition: relative;\\\r\n\t}\\\r\n\t.ace_searchbtn:last-child,\\\r\n\t.ace_replacebtn:last-child {\\\r\n\tborder-top-right-radius: 3px;\\\r\n\tborder-bottom-right-radius: 3px;\\\r\n\t}\\\r\n\t.ace_searchbtn:disabled {\\\r\n\tbackground: none;\\\r\n\tcursor: default;\\\r\n\t}\\\r\n\t.ace_searchbtn {\\\r\n\tbackground-position: 50% 50%;\\\r\n\tbackground-repeat: no-repeat;\\\r\n\twidth: 27px;\\\r\n\t}\\\r\n\t.ace_searchbtn.prev {\\\r\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpiSU1NZUAC/6E0I0yACYskCpsJiySKIiY0SUZk40FyTEgCjGgKwTRAgAEAQJUIPCE+qfkAAAAASUVORK5CYII=); \\\r\n\t}\\\r\n\t.ace_searchbtn.next {\\\r\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpiTE1NZQCC/0DMyIAKwGJMUAYDEo3M/s+EpvM/mkKwCQxYjIeLMaELoLMBAgwAU7UJObTKsvAAAAAASUVORK5CYII=); \\\r\n\t}\\\r\n\t.ace_searchbtn_close {\\\r\n\tbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;\\\r\n\tborder-radius: 50%;\\\r\n\tborder: 0 none;\\\r\n\tcolor: #656565;\\\r\n\tcursor: pointer;\\\r\n\tfloat: right;\\\r\n\tfont: 16px/16px Arial;\\\r\n\theight: 14px;\\\r\n\tmargin: 5px 1px 9px 5px;\\\r\n\tpadding: 0;\\\r\n\ttext-align: center;\\\r\n\twidth: 14px;\\\r\n\t}\\\r\n\t.ace_searchbtn_close:hover {\\\r\n\tbackground-color: #656565;\\\r\n\tbackground-position: 50% 100%;\\\r\n\tcolor: white;\\\r\n\t}\\\r\n\t.ace_replacebtn.prev {\\\r\n\twidth: 54px\\\r\n\t}\\\r\n\t.ace_replacebtn.next {\\\r\n\twidth: 27px\\\r\n\t}\\\r\n\t.ace_button {\\\r\n\tmargin-left: 2px;\\\r\n\tcursor: pointer;\\\r\n\t-webkit-user-select: none;\\\r\n\t-moz-user-select: none;\\\r\n\t-o-user-select: none;\\\r\n\t-ms-user-select: none;\\\r\n\tuser-select: none;\\\r\n\toverflow: hidden;\\\r\n\topacity: 0.7;\\\r\n\tborder: 1px solid rgba(100,100,100,0.23);\\\r\n\tpadding: 1px;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tcolor: black;\\\r\n\t}\\\r\n\t.ace_button:hover {\\\r\n\tbackground-color: #eee;\\\r\n\topacity:1;\\\r\n\t}\\\r\n\t.ace_button:active {\\\r\n\tbackground-color: #ddd;\\\r\n\t}\\\r\n\t.ace_button.checked {\\\r\n\tborder-color: #3399ff;\\\r\n\topacity:1;\\\r\n\t}\\\r\n\t.ace_search_options{\\\r\n\tmargin-bottom: 3px;\\\r\n\ttext-align: right;\\\r\n\t-webkit-user-select: none;\\\r\n\t-moz-user-select: none;\\\r\n\t-o-user-select: none;\\\r\n\t-ms-user-select: none;\\\r\n\tuser-select: none;\\\r\n\t}\";var HashHandler=acequire(\"../keyboard/hash_handler\").HashHandler;var keyUtil=acequire(\"../lib/keys\");dom.importCssString(searchboxCss,\"ace_searchbox\");var html='<div class=\"ace_search right\">\\\r\n\t <button type=\"button\" action=\"hide\" class=\"ace_searchbtn_close\"></button>\\\r\n\t <div class=\"ace_search_form\">\\\r\n\t <input class=\"ace_search_field\" placeholder=\"Search for\" spellcheck=\"false\"></input>\\\r\n\t <button type=\"button\" action=\"findNext\" class=\"ace_searchbtn next\"></button>\\\r\n\t <button type=\"button\" action=\"findPrev\" class=\"ace_searchbtn prev\"></button>\\\r\n\t <button type=\"button\" action=\"findAll\" class=\"ace_searchbtn\" title=\"Alt-Enter\">All</button>\\\r\n\t </div>\\\r\n\t <div class=\"ace_replace_form\">\\\r\n\t <input class=\"ace_search_field\" placeholder=\"Replace with\" spellcheck=\"false\"></input>\\\r\n\t <button type=\"button\" action=\"replaceAndFindNext\" class=\"ace_replacebtn\">Replace</button>\\\r\n\t <button type=\"button\" action=\"replaceAll\" class=\"ace_replacebtn\">All</button>\\\r\n\t </div>\\\r\n\t <div class=\"ace_search_options\">\\\r\n\t <span action=\"toggleRegexpMode\" class=\"ace_button\" title=\"RegExp Search\">.*</span>\\\r\n\t <span action=\"toggleCaseSensitive\" class=\"ace_button\" title=\"CaseSensitive Search\">Aa</span>\\\r\n\t <span action=\"toggleWholeWords\" class=\"ace_button\" title=\"Whole Word Search\">\\\\b</span>\\\r\n\t </div>\\\r\n\t</div>'.replace(/>\\s+/g,\">\");var SearchBox=function(editor,range,showReplaceForm){var div=dom.createElement(\"div\");div.innerHTML=html;this.element=div.firstChild;this.$init();this.setEditor(editor);};(function(){this.setEditor=function(editor){editor.searchBox=this;editor.container.appendChild(this.element);this.editor=editor;};this.$initElements=function(sb){this.searchBox=sb.querySelector(\".ace_search_form\");this.replaceBox=sb.querySelector(\".ace_replace_form\");this.searchOptions=sb.querySelector(\".ace_search_options\");this.regExpOption=sb.querySelector(\"[action=toggleRegexpMode]\");this.caseSensitiveOption=sb.querySelector(\"[action=toggleCaseSensitive]\");this.wholeWordOption=sb.querySelector(\"[action=toggleWholeWords]\");this.searchInput=this.searchBox.querySelector(\".ace_search_field\");this.replaceInput=this.replaceBox.querySelector(\".ace_search_field\");};this.$init=function(){var sb=this.element;this.$initElements(sb);var _this=this;event.addListener(sb,\"mousedown\",function(e){setTimeout(function(){_this.activeInput.focus();},0);event.stopPropagation(e);});event.addListener(sb,\"click\",function(e){var t=e.target||e.srcElement;var action=t.getAttribute(\"action\");if(action&&_this[action])_this[action]();else if(_this.$searchBarKb.commands[action])_this.$searchBarKb.commands[action].exec(_this);event.stopPropagation(e);});event.addCommandKeyListener(sb,function(e,hashId,keyCode){var keyString=keyUtil.keyCodeToString(keyCode);var command=_this.$searchBarKb.findKeyCommand(hashId,keyString);if(command&&command.exec){command.exec(_this);event.stopEvent(e);}});this.$onChange=lang.delayedCall(function(){_this.find(false,false);});event.addListener(this.searchInput,\"input\",function(){_this.$onChange.schedule(20);});event.addListener(this.searchInput,\"focus\",function(){_this.activeInput=_this.searchInput;_this.searchInput.value&&_this.highlight();});event.addListener(this.replaceInput,\"focus\",function(){_this.activeInput=_this.replaceInput;_this.searchInput.value&&_this.highlight();});};this.$closeSearchBarKb=new HashHandler([{bindKey:\"Esc\",name:\"closeSearchBar\",exec:function(editor){editor.searchBox.hide();}}]);this.$searchBarKb=new HashHandler();this.$searchBarKb.bindKeys({\"Ctrl-f|Command-f\":function(sb){var isReplace=sb.isReplace=!sb.isReplace;sb.replaceBox.style.display=isReplace?\"\":\"none\";sb.searchInput.focus();},\"Ctrl-H|Command-Option-F\":function(sb){sb.replaceBox.style.display=\"\";sb.replaceInput.focus();},\"Ctrl-G|Command-G\":function(sb){sb.findNext();},\"Ctrl-Shift-G|Command-Shift-G\":function(sb){sb.findPrev();},\"esc\":function(sb){setTimeout(function(){sb.hide();});},\"Return\":function(sb){if(sb.activeInput==sb.replaceInput)sb.replace();sb.findNext();},\"Shift-Return\":function(sb){if(sb.activeInput==sb.replaceInput)sb.replace();sb.findPrev();},\"Alt-Return\":function(sb){if(sb.activeInput==sb.replaceInput)sb.replaceAll();sb.findAll();},\"Tab\":function(sb){(sb.activeInput==sb.replaceInput?sb.searchInput:sb.replaceInput).focus();}});this.$searchBarKb.addCommands([{name:\"toggleRegexpMode\",bindKey:{win:\"Alt-R|Alt-/\",mac:\"Ctrl-Alt-R|Ctrl-Alt-/\"},exec:function(sb){sb.regExpOption.checked=!sb.regExpOption.checked;sb.$syncOptions();}},{name:\"toggleCaseSensitive\",bindKey:{win:\"Alt-C|Alt-I\",mac:\"Ctrl-Alt-R|Ctrl-Alt-I\"},exec:function(sb){sb.caseSensitiveOption.checked=!sb.caseSensitiveOption.checked;sb.$syncOptions();}},{name:\"toggleWholeWords\",bindKey:{win:\"Alt-B|Alt-W\",mac:\"Ctrl-Alt-B|Ctrl-Alt-W\"},exec:function(sb){sb.wholeWordOption.checked=!sb.wholeWordOption.checked;sb.$syncOptions();}}]);this.$syncOptions=function(){dom.setCssClass(this.regExpOption,\"checked\",this.regExpOption.checked);dom.setCssClass(this.wholeWordOption,\"checked\",this.wholeWordOption.checked);dom.setCssClass(this.caseSensitiveOption,\"checked\",this.caseSensitiveOption.checked);this.find(false,false);};this.highlight=function(re){this.editor.session.highlight(re||this.editor.$search.$options.re);this.editor.renderer.updateBackMarkers();};this.find=function(skipCurrent,backwards,preventScroll){var range=this.editor.find(this.searchInput.value,{skipCurrent:skipCurrent,backwards:backwards,wrap:true,regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked,preventScroll:preventScroll});var noMatch=!range&&this.searchInput.value;dom.setCssClass(this.searchBox,\"ace_nomatch\",noMatch);this.editor._emit(\"findSearchBox\",{match:!noMatch});this.highlight();};this.findNext=function(){this.find(true,false);};this.findPrev=function(){this.find(true,true);};this.findAll=function(){var range=this.editor.findAll(this.searchInput.value,{regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked});var noMatch=!range&&this.searchInput.value;dom.setCssClass(this.searchBox,\"ace_nomatch\",noMatch);this.editor._emit(\"findSearchBox\",{match:!noMatch});this.highlight();this.hide();};this.replace=function(){if(!this.editor.getReadOnly())this.editor.replace(this.replaceInput.value);};this.replaceAndFindNext=function(){if(!this.editor.getReadOnly()){this.editor.replace(this.replaceInput.value);this.findNext();}};this.replaceAll=function(){if(!this.editor.getReadOnly())this.editor.replaceAll(this.replaceInput.value);};this.hide=function(){this.element.style.display=\"none\";this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb);this.editor.focus();};this.show=function(value,isReplace){this.element.style.display=\"\";this.replaceBox.style.display=isReplace?\"\":\"none\";this.isReplace=isReplace;if(value)this.searchInput.value=value;this.find(false,false,true);this.searchInput.focus();this.searchInput.select();this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb);};this.isFocused=function(){var el=document.activeElement;return el==this.searchInput||el==this.replaceInput;};}).call(SearchBox.prototype);exports.SearchBox=SearchBox;exports.Search=function(editor,isReplace){var sb=editor.searchBox||new SearchBox(editor);sb.show(editor.session.getTextRange(),isReplace);};});(function(){ace.acequire([\"ace/ext/searchbox\"],function(){});})();/***/},/* 70 */ /***/function(module,exports){/* ***** BEGIN LICENSE BLOCK *****\r\n\t * Distributed under the BSD license:\r\n\t *\r\n\t * Copyright (c) 2010, Ajax.org B.V.\r\n\t * All rights reserved.\r\n\t * \r\n\t * Redistribution and use in source and binary forms, with or without\r\n\t * modification, are permitted provided that the following conditions are met:\r\n\t * * Redistributions of source code must retain the above copyright\r\n\t * notice, this list of conditions and the following disclaimer.\r\n\t * * Redistributions in binary form must reproduce the above copyright\r\n\t * notice, this list of conditions and the following disclaimer in the\r\n\t * documentation and/or other materials provided with the distribution.\r\n\t * * Neither the name of Ajax.org B.V. nor the\r\n\t * names of its contributors may be used to endorse or promote products\r\n\t * derived from this software without specific prior written permission.\r\n\t * \r\n\t * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n\t * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n\t * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n\t * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\r\n\t * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n\t * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n\t * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\r\n\t * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n\t * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n\t * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n\t *\r\n\t * ***** END LICENSE BLOCK ***** */ace.define('ace/theme/jsoneditor',['require','exports','module','ace/lib/dom'],function(acequire,exports,module){exports.isDark=false;exports.cssClass=\"ace-jsoneditor\";exports.cssText=\".ace-jsoneditor .ace_gutter {\\\r\n\tbackground: #ebebeb;\\\r\n\tcolor: #333\\\r\n\t}\\\r\n\t\\\r\n\t.ace-jsoneditor.ace_editor {\\\r\n\tfont-family: droid sans mono, consolas, monospace, courier new, courier, sans-serif;\\\r\n\tline-height: 1.3;\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_print-margin {\\\r\n\twidth: 1px;\\\r\n\tbackground: #e8e8e8\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_scroller {\\\r\n\tbackground-color: #FFFFFF\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_text-layer {\\\r\n\tcolor: gray\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_variable {\\\r\n\tcolor: #1a1a1a\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_cursor {\\\r\n\tborder-left: 2px solid #000000\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_overwrite-cursors .ace_cursor {\\\r\n\tborder-left: 0px;\\\r\n\tborder-bottom: 1px solid #000000\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_marker-layer .ace_selection {\\\r\n\tbackground: lightgray\\\r\n\t}\\\r\n\t.ace-jsoneditor.ace_multiselect .ace_selection.ace_start {\\\r\n\tbox-shadow: 0 0 3px 0px #FFFFFF;\\\r\n\tborder-radius: 2px\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_marker-layer .ace_step {\\\r\n\tbackground: rgb(255, 255, 0)\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_marker-layer .ace_bracket {\\\r\n\tmargin: -1px 0 0 -1px;\\\r\n\tborder: 1px solid #BFBFBF\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_marker-layer .ace_active-line {\\\r\n\tbackground: #FFFBD1\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_gutter-active-line {\\\r\n\tbackground-color : #dcdcdc\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_marker-layer .ace_selected-word {\\\r\n\tborder: 1px solid lightgray\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_invisible {\\\r\n\tcolor: #BFBFBF\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_keyword,\\\r\n\t.ace-jsoneditor .ace_meta,\\\r\n\t.ace-jsoneditor .ace_support.ace_constant.ace_property-value {\\\r\n\tcolor: #AF956F\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_keyword.ace_operator {\\\r\n\tcolor: #484848\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_keyword.ace_other.ace_unit {\\\r\n\tcolor: #96DC5F\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_constant.ace_language {\\\r\n\tcolor: darkorange\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_constant.ace_numeric {\\\r\n\tcolor: red\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_constant.ace_character.ace_entity {\\\r\n\tcolor: #BF78CC\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_invalid {\\\r\n\tcolor: #FFFFFF;\\\r\n\tbackground-color: #FF002A;\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_fold {\\\r\n\tbackground-color: #AF956F;\\\r\n\tborder-color: #000000\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_storage,\\\r\n\t.ace-jsoneditor .ace_support.ace_class,\\\r\n\t.ace-jsoneditor .ace_support.ace_function,\\\r\n\t.ace-jsoneditor .ace_support.ace_other,\\\r\n\t.ace-jsoneditor .ace_support.ace_type {\\\r\n\tcolor: #C52727\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_string {\\\r\n\tcolor: green\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_comment {\\\r\n\tcolor: #BCC8BA\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_entity.ace_name.ace_tag,\\\r\n\t.ace-jsoneditor .ace_entity.ace_other.ace_attribute-name {\\\r\n\tcolor: #606060\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_markup.ace_underline {\\\r\n\ttext-decoration: underline\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_indent-guide {\\\r\n\tbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y\\\r\n\t}\";var dom=acequire(\"../lib/dom\");dom.importCssString(exports.cssText,exports.cssClass);});/***/}/******/]);});;","map":{"version":3,"names":["webpackUniversalModuleDefinition","root","factory","exports","module","define","amd","modules","installedModules","__webpack_require__","moduleId","id","loaded","call","m","c","p","Ajv","err","treemode","textmode","util","JSONEditor","container","options","json","Error","ieVersion","getInternetExplorerVersion","error","console","warn","onError","change","onChange","editable","onEditable","VALID_OPTIONS","Object","keys","forEach","option","indexOf","arguments","length","_create","modes","prototype","DEBOUNCE_INTERVAL","mode","setMode","destroy","set","get","setText","jsonText","parse","getText","JSON","stringify","setName","name","getName","extend","oldMode","data","config","asText","clear","mixin","create","load","onModeChange","_onError","getMode","setSchema","schema","ajv","allErrors","verbose","validateSchema","compile","validate","refresh","registerMode","i","prop","isArray","reserved","compileSchema","resolve","Cache","SchemaObject","stableStringify","formats","rules","v5","async","co","compileAsync","addKeyword","ValidationError","META_SCHEMA_ID","SCHEMA_URI_FORMAT","SCHEMA_URI_FORMAT_FUNC","str","test","META_IGNORE_OPTIONS","opts","self","_opts","copy","_schemas","_refs","_formats","format","_cache","cache","_loadingSchemas","RULES","addSchema","addMetaSchema","getSchema","removeSchema","addFormat","errorsText","_addSchema","_compile","loopRequired","Infinity","transpile","setup","beautify","indent_size","errorDataPath","_errorDataPathProperty","_metaOpts","getMetaSchemaOptions","addInitialSchemas","addInitialFormats","enable","meta","schemaKeyRef","v","schemaObj","valid","errors","key","_skipValidation","_meta","Array","undefined","normalizeId","checkUnique","skipValidation","throwOrLogError","$schema","defaultMeta","currentUriFormat","uri","message","keyRef","_getSchemaObj","_removeAllSchemas","del","jsonStr","RegExp","schemas","regex","shouldAddSchema","cached","addUsedSchema","localRefs","ids","put","compiling","callValidate","$async","currentOpts","refs","refVal","_validate","result","apply","separator","dataVar","text","e","dataPath","slice","metaSchema","optsSchemas","metaOpts","webpackMissingModule","code","js_beautify","validateGenerator","baseId","patterns","patternsHash","defaults","defaultsHash","customRules","localCompile","_schema","_root","isRoot","sourceCode","isTop","schemaPath","errSchemaPath","errorPath","resolveRef","usePattern","useDefault","useCustomRule","vars","refValCode","patternCode","defaultCode","customRuleCode","validateCode","_transpileFunc","eval","ref","url","refIndex","_refVal","refCode","resolvedRef","rootRefId","addLocalRef","localSchema","inlineRef","inlineRefs","replaceLocalRef","refId","inline","regexStr","index","value","toQuotedString","valueStr","rule","parentSchema","it","definition","macro","keyword","arr","statement","ucs2length","equal","fullPath","getFullPath","resolveUrl","resolveIds","res","_resolve","refPath","_getFullPath","resolveRecursive","getJsonPointer","parsedRef","PREVENT_SCOPE_CHANGE","toHash","hash","parts","split","part","unescapeFragment","$ref","SIMPLE_INLINED","limit","checkNoRef","countKeys","item","count","normalize","protocol","host","path","TRAILING_SLASH_HASH","replace","_resolveIds","escapeFragment","punycode","urlParse","urlResolve","resolveObject","urlResolveObject","urlFormat","Url","slashes","auth","port","hostname","search","query","pathname","href","protocolPattern","portPattern","delims","unwise","concat","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","hostlessProtocol","slashedProtocol","querystring","parseQueryString","slashesDenoteHost","isObject","u","isString","TypeError","rest","trim","proto","exec","lowerProto","toLowerCase","substr","match","hostEnd","hec","atSign","lastIndexOf","decodeURIComponent","parseHost","ipv6Hostname","hostparts","l","newpart","j","k","charCodeAt","validParts","notHost","bit","push","unshift","join","domainArray","newOut","s","encode","h","ae","esc","encodeURIComponent","escape","qm","obj","charAt","source","relative","rel","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","pop","isNullOrUndefined","authInHost","isNull","last","hasTrailingSlash","up","splice","isAbsolute","arg","__WEBPACK_AMD_DEFINE_RESULT__","global","freeExports","nodeType","freeModule","freeGlobal","window","maxInt","base","tMin","tMax","skew","damp","initialBias","initialN","delimiter","regexPunycode","regexNonASCII","regexSeparators","baseMinusTMin","floor","Math","stringFromCharCode","String","fromCharCode","type","RangeError","map","array","fn","mapDomain","string","labels","encoded","ucs2decode","output","counter","extra","ucs2encode","basicToDigit","codePoint","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","decode","input","inputLength","out","n","bias","basic","oldi","w","t","baseMinusT","handledCPCount","basicLength","q","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","toASCII","hasOwnProperty","webpackPolyfill","deprecate","paths","children","qs","sep","eq","regexp","maxKeys","len","x","idx","kstr","vstr","stringifyPrimitive","isFinite","ks","a","b","arrA","arrB","checkDataType","checkDataTypes","coerceToTypes","getProperty","escapeQuotes","varOccurences","varReplace","cleanUpCode","cleanUpVarErrors","schemaHasRules","getPathExpr","getPath","getData","escapeJsonPointer","o","to","dataType","negate","EQUAL","AND","OK","NOT","dataTypes","types","object","null","number","integer","COERCE_TO_TYPES","IDENTIFIER","SINGLE_QUOTE","pos","matches","expr","EMPTY_ELSE","EMPTY_IF_NO_ELSE","EMPTY_IF_WITH_ELSE","ERRORS_REGEXP","REMOVE_ERRORS","REMOVE_ERRORS_ASYNC","RETURN_VALID","RETURN_TRUE","RETURN_ASYNC","RETURN_TRUE_ASYNC","currentPath","jsonPointers","isNumber","joinPaths","RELATIVE_JSON_POINTER","$data","lvl","jsonPointer","segments","segment","unescapeJsonPointer","cmp","space","cycles","replacer","f","node","aobj","bobj","seen","parent","level","indent","colonSeparator","toJSON","objectKeys","sort","keyValue","toString","has","at","ch","escapee","r","next","hex","uffff","parseInt","white","word","reviver","walk","holder","cx","escapable","gap","rep","quote","lastIndex","mind","partial","setupAsync","ASYNC","checkGenerators","checkAsyncFunction","TRANSPILE","getNodent","getRegenerator","MODES","regenerator","nodent","required","check","runtime","regeneratorTranspile","log","dontInstallRequireHook","nodentTranspile","promises","sourcemap","callback","setTimeout","loadSchema","_compileAsync","firstCall","missingSchema","loadMissingSchema","deferCallback","missingRef","_callbacks","schemaLoaded","sch","generate_validate","$keyword","$top","$lvl","$dataLvl","dataLevel","rootId","$es7","yieldAwait","dataPathArr","$valid","$breakOnError","$closingBraces1","$closingBraces2","$errorKeyword","$typeSchema","$typeIsArray","coerceTypes","$coerceToTypes","$schemaPath","$errSchemaPath","$method","$dataType","$coerced","$bracesCoercion","arr1","$type","$i","l1","$$outStack","createErrors","messages","__err","compositeRule","$parentData","$dataProperty","arr2","$rulesGroup","i2","l2","$shouldUseGroup","useDefaults","properties","$schemaKeys","arr3","$propertyKey","i3","l3","$sch","default","$passData","items","arr4","l4","arr5","$rule","i5","l5","$shouldUseRule","custom","$ruleValidate","$ruleErrs","$errs","$ruleErr","$rDef","$asyncKeyword","$inline","$macro","statements","$it","$wasComposite","$code","passContext","$validateArgs","def_callRuleValidate","def_customError","$typeChecked","additionalProperties","patternProperties","patternGroups","wrap","createPromise","__generatorFunction__","gen","ctx","args","Promise","reject","onFulfilled","ret","onRejected","throw","done","toPromise","isPromise","then","isGeneratorFunction","isGenerator","thunkToPromise","arrayToPromise","objectToPromise","all","results","constructor","promise","defer","displayName","val","validation","Cache_put","Cache_get","Cache_del","Cache_clear","DATE","DAYS","TIME","HOSTNAME","URI","UUID","JSON_POINTER","formatDefs","fName","compare","fast","date","time","email","ipv4","ipv6","uuid","full","date_time","compareDate","compareTime","compareDateTime","month","day","hour","minute","second","timeZone","DATE_TIME_SEPARATOR","dateTime","NOT_URI_FRAGMENT","d1","d2","t1","t2","dt1","dt2","ruleModules","keywords","group","allOf","anyOf","dependencies","enum","maximum","minimum","maxItems","minItems","maxLength","minLength","maxProperties","minProperties","multipleOf","not","oneOf","pattern","uniqueItems","generate_ref","$refCode","$refVal","$message","missingRefs","$error","__callValidate","generate_allOf","$closingBraces","generate_anyOf","$noEmptySchema","every","generate_dependencies","$schemaDeps","$propertyDeps","$property","$deps","$currentErrorPath","_$property","$prop","$propertyPath","$missingProperty","generate_enum","$isData","$schemaValue","generate_format","$format","$isObject","$formatRef","generate_items","$dataNxt","$nextData","$additionalItems","additionalItems","$currErrSchemaPath","generate__limit","$isMax","$exclusiveKeyword","$schemaExcl","$isDataExcl","$op","$notOp","$schemaValueExcl","$exclusive","$opExpr","$opStr","generate__limitItems","generate__limitLength","unicode","generate__limitProperties","generate_multipleOf","multipleOfPrecision","generate_not","$allErrorsOption","generate_oneOf","generate_pattern","$regexp","generate_properties","$pProperties","$pPropertyKeys","$aProperties","$someProperties","$noAdditional","$additionalIsSchema","$removeAdditional","removeAdditional","$checkAdditional","$required","$requiredHash","$pgProperties","$pgPropertyKeys","i1","$pProperty","$pgProperty","$additionalProperty","$useDefaults","i4","$hasDefault","$useData","arr6","i6","l6","$pgSchema","$pgMin","$pgMax","$limit","$reason","$moreOrLess","generate_required","$propertySch","$loopRequired","generate_uniqueItems","enableV5","inlineFunctions","_addKeyword","containsMacro","_formatLimit","inlineFunc","generate_switch","$ifPassed","$shouldContinue","$caseIndex","if","continue","generate_constant","generate__formatLimit","$schemaFormat","$isDataFormat","$schemaValueFormat","$compare","$result","generate_patternRequired","$key","$matched","$missingPattern","_addRule","ruleGroup","rg","Highlighter","History","SearchBox","ContextMenu","Node","ModeSwitcher","dom","highlighter","selection","multiselection","nodes","errorNodes","focusTarget","_setOptions","history","_createFrame","_createTable","frame","parentNode","removeChild","_debouncedValidate","searchBox","modeSwitcher","debounce","bind","Function","content","table","params","field","_setRoot","recurse","expand","appendChild","getNodeFromTarget","blur","getValue","updateField","focus","querySelector","menu","collapse","tbody","getDom","expandAll","collapseAll","_onAction","action","add","_onChange","setError","duplicateErrors","schemaErrors","improveSchemaError","findNode","filter","hasNode","entry","reduce","expandParents","findParents","child","updateDom","startAutoScroll","mouseY","me","top","getAbsoluteTop","height","clientHeight","bottom","margin","interval","scrollTop","autoScrollStep","scrollHeight","autoScrollTimer","setInterval","stopAutoScroll","clearTimeout","setSelection","select","range","setSelectionOffset","getSelection","getSelectionOffset","nodeName","scrollTo","editor","animateTimeout","animateCallback","finalScrollTop","min","max","animate","diff","abs","document","createElement","className","onEvent","event","_onEvent","onclick","target","preventDefault","oninput","onchange","onkeydown","onkeyup","oncut","onpaste","onmousedown","onmouseup","onmouseover","onmouseout","addEventListener","onfocusin","onfocusout","title","undo","_onUndo","redo","_onRedo","disabled","canUndo","canRedo","onSwitch","_onKeyDown","_startDragDistance","_updateDragDistance","selected","showContextMenu","hasMoved","deselect","onDragStart","drag","_onMultiSelectStart","dragDistanceEvent","initialTarget","initialPageX","pageX","initialPageY","pageY","dragDistance","diffX","diffY","sqrt","start","end","mousemove","_onMultiSelect","mouseup","_onMultiSelectEnd","_findTopLevelNodes","removeEventListener","clearStartAndEnd","setSelected","first","startPath","getNodePath","endPath","startChild","endChild","childs","startIndex","endIndex","firstIndex","keynum","which","keyCode","ctrlKey","shiftKey","handled","selectContentEditable","previous","stopPropagation","contentOuter","col","colgroupContent","width","anchor","onClose","click","onDuplicate","onRemove","close","show","locked","highlight","setHighlight","_cancelUnhighlight","unhighlight","unhighlightTimer","lock","unlock","actions","oldValue","newValue","updateValue","changeType","oldType","newType","insertBefore","beforeNode","afterNode","insertAfter","append","oldBeforeNode","moveBefore","newBeforeNode","hideChilds","oldSort","oldChilds","showChilds","newSort","newChilds","Date","oldSelection","newSelection","jsonlint","jsonString","sanitize","jsString","chars","curr","prev","lastNonWhitespace","pp","skipBlockComment","skipComment","parseString","parseKey","specialValues","escapeUnicodeChars","Number","Boolean","isUrlRegex","isUrl","getAbsoluteLeft","elem","rect","getBoundingClientRect","left","pageXOffset","scrollLeft","pageYOffset","addClassName","classes","removeClassName","stripFormatting","divElement","childNodes","iMax","style","removeAttribute","attributes","attribute","specified","setEndOfContentEditable","contentEditableElement","createRange","selectNodeContents","removeAllRanges","addRange","sel","getRangeAt","rangeCount","startContainer","endContainer","startOffset","endOffset","firstChild","createTextNode","setStart","setEnd","getInnerText","element","buffer","flush","nodeValue","hasChildNodes","innerText","prevChild","prevName","_ieVersion","rv","navigator","appName","ua","userAgent","re","parseFloat","$1","isFirefox","listener","useCapture","attachEvent","detachEvent","parsePath","jsonPath","remainder","SyntaxError","substring","enums","more","additionalProperty","insideRect","_margin","right","func","wait","immediate","timeout","context","later","callNow","textDiff","oldText","newText","oldEnd","newEnd","parser","trace","yy","symbols_","terminals_","productions_","performAction","anonymous","yytext","yyleng","yylineno","yystate","$$","_$","$0","$","defaultActions","parseError","stack","vstack","lstack","recovering","TERROR","EOF","lexer","setInput","yylloc","yyloc","popStack","lex","token","symbol","preErrorSymbol","state","yyval","newState","expected","_handle_error","errStr","showPosition","line","loc","first_line","last_line","first_column","last_column","_input","_more","_less","matched","conditionStack","lines","unput","less","pastInput","past","upcomingInput","pre","tempMatch","_currentRules","flex","begin","condition","popState","conditions","topState","pushState","yy_","$avoiding_name_collisions","YY_START","YYSTATE","delay","lastText","tr","td","divInput","tableInput","tbodySearch","refreshSearch","_onDelayedSearch","_onSearch","_onKeyUp","searchNext","searchPrevious","resultIndex","_setActiveResult","activeResult","prevNode","prevElem","searchFieldActive","searchValueActive","_clearDelay","forceSearch","resultCount","innerHTML","eventListeners","list","focusButton","li","overflow","createMenuItems","domItems","domItem","button","hide","submenu","divIcon","buttonSubmenu","buttonExpand","submenuTitle","divExpand","_onExpandItem","domSubItems","subItems","ul","maxHeight","_getVisibleButtons","buttons","expandedItem","subItem","visibleMenu","contentWindow","showBelow","anchorRect","contentRect","anchorHeight","offsetHeight","mousedown","_isChildOf","keydown","alreadyVisible","padding","display","targetIndex","prevButton","nextButton","naturalSort","appendNodeFactory","expanded","setField","fieldEditable","setValue","_debouncedOnChangeValue","_onChangeValue","_debouncedOnChangeField","_onChangeField","_updateEditability","parents","tdError","tdValue","popover","onfocus","updateDirection","directions","direction","popoverRect","fit","showInvalidNode","getIndex","setParent","previousField","getField","_getDomField","childValue","_getType","childField","sortObjectKeys","previousValue","_getDomValue","getLevel","clone","fieldInnerText","valueInnerText","cloneChilds","childClone","getAppend","nextTr","nextSibling","_hasChilds","newTr","appendTr","trTemp","AppendNode","moveTo","currentIndex","searchField","searchValue","_updateDomField","childResults","_updateDomValue","offsetTop","focusElement","elementName","editableDiv","containsNode","_move","clearDom","removedNode","_remove","lastTr","_stringCast","silent","_unescapeHTML","undoDiff","redoDiff","domValue","classNames","isEmpty","checkbox","tdCheckbox","checked","getUTCMilliseconds","tdSelect","valueFieldHTML","visibility","domField","duplicateKeys","tdDrag","domDrag","tdMenu","tdField","tree","_createDomTree","firstNode","lastNode","draggedNode","_nextSibling","offsetY","onDrag","onDragEnd","oldCursor","body","cursor","mouseX","trThis","trPrev","trNext","trFirst","trLast","trRoot","nodePrev","nodeNext","topThis","topPrev","topFirst","heightThis","bottomNext","heightNext","moved","previousSibling","diffLevel","round","levelNext","isDraggedNode","some","_createDomField","isFirst","domTree","marginLeft","contentEditable","spellcheck","fieldText","_escapeHTML","_updateSchema","updateIndexes","_updateDomIndexes","_findSchema","_findEnum","composite","childSchema","_createDomValue","_createDomExpandButton","borderCollapse","tdExpand","tdSeparator","srcElement","expandable","_onExpand","open","offsetX","onKeyDown","altKey","nextNode","nextDom","nextDom2","selectedNodes","_onInsertBefore","_onInsertAfter","endNode","_lastNode","_getElementName","homeNode","_firstNode","prevElement","_previousElement","appendDom","nextNode2","_previousNode","nextElement","_nextElement","prevDom","isVisible","_nextNode","blurNodes","clones","newNode","_onAppend","_onChangeType","order","oldSortOrder","sortOrder","firstDom","lastDom","lastChild","TYPE_TITLES","titles","auto","lower","num","numFloat","isNaN","htmlEscaped","html","escapeUnicode","escapedText","_escapeJSON","escaped","sre","dre","hre","ore","insensitive","y","xN","yN","xD","yD","oFxNcL","oFyNcL","cLoc","numS","trAppend","tdAppend","domText","paddingLeft","current","availableModes","form","view","currentMode","currentTitle","box","position","ace","MAX_ERRORS","DEFAULT_THEME","indentation","_ace","theme","aceEditor","textarea","clientWidth","buttonFormat","buttonCompact","compact","editorDom","edit","$blockScrolling","setTheme","setShowPrintMargin","setFontSize","getSession","setTabSize","setUseSoftTabs","setUseWrapMode","commands","bindKey","defineProperty","poweredBy","on","resize","force","originalOnChange","validationErrors","marginBottom","paddingBottom","doValidate","hidden","ACE_NAMESPACE","acequirejs","deps","payload","original","payloads","_acequire","parentId","lookup","dep","acequire","packagedModule","normalizeModule","moduleName","chunks","mod","packaged","req","returnValue","exportAce","ns","real","compliantExecNpcg","compliantLastIndexIncrement","r2","getNativeFlags","_xregexp","captureNames","ignoreCase","multiline","extended","sticky","from","Empty","that","bound","prototypeOfArray","prototypeOfObject","_toString","owns","defineGetter","defineSetter","lookupGetter","lookupSetter","supportsAccessors","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","makeArray","lengthBefore","array_splice","deleteCount","removeCount","removed","insert","remove","tailOldPos","tailNewPos","tailCount","lengthAfterRemove","boxedString","splitString","fun","toObject","thisp","reduceRight","sought","toInteger","getPrototypeOf","__proto__","getOwnPropertyDescriptor","ERR_NON_OBJECT","property","descriptor","getter","setter","enumerable","configurable","getOwnPropertyNames","createEmpty","empty","propertyIsEnumerable","isPrototypeOf","toLocaleString","valueOf","Type","defineProperties","doesDefinePropertyWork","exception","definePropertyWorksOnObject","definePropertyWorksOnDom","definePropertyFallback","ERR_NON_OBJECT_DESCRIPTOR","ERR_NON_OBJECT_TARGET","ERR_ACCESSORS_NOT_SUPPORTED","seal","freeze","freezeObject","preventExtensions","isSealed","isFrozen","isExtensible","hasDontEnumBug","dontEnums","dontEnumsLength","ii","dontEnum","now","getTime","ws","trimBeginRegexp","trimEndRegexp","isPrimitive","toPrimitive","XHTML_NS","getDocumentHead","doc","head","getElementsByTagName","documentElement","tag","createElementNS","hasCssClass","el","addCssClass","removeCssClass","toggleCssClass","setCssClass","include","hasCssString","sheets","createStyleSheet","styleSheets","owningElement","importCssString","cssText","importCssStylsheet","link","getInnerWidth","computedStyle","getInnerHeight","scrollbarWidth","inner","minWidth","outer","noScrollbar","offsetWidth","withScrollbar","getPageScrollTop","getPageScrollLeft","getComputedStyle","currentStyle","setInnerHtml","innerHtml","cloneNode","replaceChild","setInnerText","textContent","getParentWindow","defaultView","parentWindow","inherits","ctor","superCtor","super_","writable","implement","oop","Keys","MODIFIER_KEYS","KEY_MODS","FUNCTION_KEYS","PRINTABLE_KEYS","enter","mods","pow","keyCodeToString","keyString","OS","LINUX","MAC","WINDOWS","getOS","isMac","isLinux","os","platform","isWin","isIE","isOldIE","isGecko","isMozilla","Controllers","controllers","product","isOldGecko","isOpera","opera","isWebKit","isChrome","isAIR","isIPad","isTouchPad","isChromeOS","useragent","pressedKeys","ts","addListener","wrapper","_wrapper","removeListener","stopEvent","cancelBubble","getButton","capture","eventHandler","releaseCaptureHandler","onMouseUp","addTouchMoveListener","startx","starty","touchObj","changedTouches","clientX","clientY","factor","wheelX","wheelY","addMouseWheelListener","wheelDeltaX","wheelDeltaY","wheelDelta","deltaMode","DOM_DELTA_PIXEL","deltaX","deltaY","DOM_DELTA_LINE","DOM_DELTA_PAGE","axis","HORIZONTAL_AXIS","detail","addMultiMouseDownListener","elements","timeouts","callbackName","clicks","startX","startY","timer","eventNames","onMousedown","isNewClick","_clicks","onDblclick","getModifierHash","metaKey","getModifierString","normalizeCommandKeys","hashId","OSKey","altGr","location","keyLocation","timeStamp","dt","defaultPrevented","addCommandKeyListener","lastKeyDownKeyCode","lastDefaultPrevented","lastT","resetPressedKeys","postMessage","postMessageId","nextTick","win","messageName","nextFrame","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","oRequestAnimationFrame","stringReverse","reverse","stringRepeat","stringTrimLeft","stringTrimRight","copyObject","copyArray","deepCopy","cons","arrayToMap","createMap","props","arrayRemove","escapeRegExp","escapeHTML","getMatchOffsets","regExp","offset","deferredCall","fcn","deferred","cancel","schedule","isPending","delayedCall","defaultTimeout","_self","lang","BROKEN_SETDATA","USE_IE_MIME_TYPE","TextInput","setAttribute","opacity","PLACEHOLDER","copied","pasted","inComposition","tempStyle","isSelectionEmpty","isFocused","activeElement","onBlur","onFocus","resetSelection","syncSelection","syncValue","inputHandler","selectionStart","selectionEnd","setSelectionRange","resetValue","isAllSelected","createTextRange","moveStart","moveEnd","ownerDocument","parentElement","inPropertyChange","onPropertyChange","syncProperty","sendText","keytable","onCompositionEnd","onCompositionUpdate","onCompositionStart","onSelect","selectAll","setInputHandler","cb","getInputHandler","afterContextMenu","onPaste","execCommand","onTextInput","onInput","handleClipboardData","clipboardData","mime","setData","doCopy","isCut","getCopyText","onCut","onCopy","onCommandKey","$readOnly","session","markUndoGroup","clearSelection","lastValue","getRange","setRange","compositionInputHandler","syncComposition","getElement","setReadOnly","readOnly","onContextMenu","_emit","domEvent","moveToMouse","bringToFront","borderTopWidth","borderLeftWidth","maxTop","move","renderer","$keepTextAreaAtCursor","closeTimeout","onContextMenuClose","$moveTextAreaToCursor","textInput","scroller","DRAG_OFFSET","DefaultHandlers","mouseHandler","$clickSelection","setDefaultHandler","onMouseDown","onDoubleClick","onTripleClick","onQuadClick","onMouseWheel","onTouchMove","selectByLines","extendSelectionBy","selectByWords","ev","inSelection","getDocumentPosition","mousedownEvent","selectionRange","getSelectionRange","selectionEmpty","moveToPosition","$focusTimout","inMultiSelectMode","setState","captureMouse","startSelect","waitForClickSelection","screenToTextCoordinates","getShiftKey","selectToPosition","setCapture","setStyle","comparePoint","orientedRange","calcRangeOrientation","setSelectionAnchor","row","column","scrollCursorIntoView","unitName","cmpStart","cmpEnd","selectEnd","selectAllEnd","selectByWordsEnd","selectByLinesEnd","unsetStyle","releaseCapture","focusWait","distance","calcDistance","getBracketRange","getWordRange","isMultiLine","contains","getLineRange","getAccelKey","$lastScrollTime","isScrolable","isScrollableBy","speed","scrollBy","stop","ax","ay","bx","by","Tooltip","isOpen","$element","$parentNode","$init","setHtml","setPosition","setClassName","getHeight","getWidth","GutterHandler","gutter","$gutterLayer","tooltip","GutterTooltip","gutterRegion","getRegion","selectTo","tooltipTimeout","mouseEvent","tooltipAnnotation","showTooltip","annotation","$annotations","hideTooltip","maxRow","getLength","screenRow","pixelToScreenCoordinates","$pos","documentToScreenRow","$tooltipFollowsMouse","moveTooltip","gutterElement","isMousePressed","$gutter","windowWidth","innerWidth","windowHeight","innerHeight","MouseEvent","$inSelection","propagationStopped","AUTOSCROLL_DELAY","SCROLL_CURSOR_DELAY","SCROLL_CURSOR_HYSTERESIS","DragdropHandler","blankImage","src","mouseTarget","dragSelectionMarker","timerId","dragCursor","dragOperation","isInternal","autoScrollStartTime","cursorMovedTime","cursorPointOnCaretMoved","cancelDrag","draggable","dataTransfer","effectAllowed","getReadOnly","setDragImage","clearData","getTextRange","dropEffect","$cursorLayer","setBlinking","setCursorStyle","onDragEnter","canAccept","addDragMarker","getDropEffect","onDragOver","onMouseMoveTimer","onDragLeave","clearDragMarker","onDrop","moveText","dropData","prevCursor","vMovement","hMovement","moveCursorToPosition","autoScroll","lineHeight","layerConfig","characterWidth","editorRect","offsets","nearestXOffset","nearestYOffset","scrollCursor","vScroll","hScroll","onDragInterval","toOrientedRange","addMarker","getSelectionStyle","clearInterval","onMouseMove","removeMarker","fromOrientedRange","copyAllowed","moveAllowed","copyModifierState","dragWait","getDragDelay","startDrag","dragWaitEnd","dragReadyEnd","cursorStyle","onMouseDrag","dragDrop","$dragEnabled","clickCount","eventTarget","unselectable","xhr","XMLHttpRequest","onreadystatechange","readyState","responseText","send","loadScript","onload","_","isAbort","qualifyURL","EventEmitter","_dispatchEvent","eventName","_eventRegistry","_defaultHandlers","listeners","defaultHandler","_signal","once","newCallback","handlers","_disabled_","old","removeDefaultHandler","capturing","off","removeAllListeners","optionsProvider","setOptions","optList","setOption","getOptions","optionNames","$options","getOption","opt","forwardTo","handlesSet","reportError","msg","AppConfig","$defaultOptions","defineOptions","initialValue","resetOptions","setDefaultValue","setDefaultValues","optionHash","net","workerPath","modePath","themePath","basePath","suffix","$moduleUrls","moduleUrl","component","setModuleUrl","subst","$loading","loadModule","onLoad","moduleType","afterLoad","init","scriptOptions","scriptUrl","currentScript","_currentScript","currentDocument","scripts","script","getAttribute","attr","deHyphenate","m1","toUpperCase","DefaultGutterHandler","MouseHandler","focusEditor","windowBlurred","hasFocus","getMouseEventTarget","onMouseEvent","scrollBarV","scrollBarH","gutterEl","$dragDelay","character","insideStart","$scrollSpeed","mouseMoveHandler","releaseMouse","$mouseMoved","onCaptureEnd","onCaptureInterval","$onCaptureMouseMove","cancelContextMenu","scrollSpeed","dragDelay","dragEnabled","focusTimout","tooltipFollowsMouse","FoldHandler","fold","getFoldAt","removeFold","expandFold","foldWidgets","onFoldWidgetClick","getParentFoldRangeData","firstRange","getLine","addFold","keyUtil","KeyBinding","$editor","$handlers","kb","removeKeyboardHandler","$defaultHandler","addKeyboardHandler","setKeyboardHandler","handleKeyboard","attach","detach","getKeyboardHandler","getStatusText","$callKeyboardHandlers","toExecute","success","command","passEvent","comparePoints","p1","p2","Range","startRow","startColumn","endRow","endColumn","isEqual","compareRange","containsRange","intersects","isEnd","isStart","inside","insideEnd","compareStart","compareEnd","compareInside","clipRows","firstRow","lastRow","fromPoints","collapseRows","toScreenRange","screenPosStart","documentToScreenPosition","screenPosEnd","moveBy","Selection","getDocument","lead","selectionLead","createAnchor","selectionAnchor","$isEmpty","$keepDesiredColumnOnChange","$desiredColumn","getCursor","getPosition","getSelectionAnchor","getSelectionLead","shiftSelection","columns","moveCursorTo","isBackwards","$moveSelection","mover","selectUp","moveCursorUp","selectDown","moveCursorDown","selectRight","moveCursorRight","selectLeft","moveCursorLeft","selectLineStart","moveCursorLineStart","selectLineEnd","moveCursorLineEnd","selectFileEnd","moveCursorFileEnd","selectFileStart","moveCursorFileStart","selectWordRight","moveCursorWordRight","selectWordLeft","moveCursorWordLeft","selectWord","selectAWord","getAWordRange","excludeLastChar","rowStart","rowEnd","foldLine","getFoldLine","selectLine","moveCursorBy","tabSize","getTabSize","isTabStop","firstColumnPosition","screenToDocumentPosition","beforeCursor","getDisplayLine","leadingSpace","$useEmacsStyleLineStart","lineEnd","getDocumentLastRowColumnPosition","textEnd","moveCursorLongWordRight","rightOfCursor","nonTokenRe","tokenRe","moveCursorLongWordLeft","getFoldStringAt","leftOfCursor","$shortWordEndIndex","whitespaceRe","moveCursorShortWordRight","moveCursorShortWordLeft","$selectLongWords","rows","screenPos","docPos","lineWidgets","keepDesiredColumn","moveCursorToScreen","desiredColumn","getRangeOfMovements","ranges","r1","fromJSON","rangeList","toSingleRange","MAX_TOKEN_COUNT","Tokenizer","states","regExps","matchMappings","ruleRegExps","matchTotal","mapping","defaultToken","splitterRurles","caseInsensitive","adjustedregex","matchcount","groupCount","tokenArray","onMatch","$arrayTokens","$applyToken","removeCapturingGroups","splitRegex","createSplitterRegexp","$setMaxTokenCount","values","tokens","inChClass","lastCapture","parenOpen","parenClose","square","getLineTokens","startState","currentState","matchAttempts","skipped","merge","TextHighlightRules","$rules","addRules","prefix","nextState","getRules","embedRules","HighlightRules","escapeRules","$embeds","getEmbeds","normalizeRules","processState","processed","stateName","includeName","toInsert","noEscape","keywordMap","createKeywordMapper","splitChar","$keywordList","getKeywords","$keywords","Behaviour","$behaviours","addBehaviours","behaviours","inherit","getBehaviours","packages","addUnicodePackage","L","Ll","Lu","Lt","Lm","Lo","M","Mn","Mc","Me","N","Nd","Nl","No","P","Pd","Ps","Pe","Pi","Pf","Pc","Po","S","Sm","Sc","Sk","So","Z","Zs","Zl","Zp","C","Cc","Cf","Co","Cs","Cn","pack","TokenIterator","initialRow","initialColumn","$session","$row","$rowTokens","getTokens","getTokenAt","$tokenIndex","stepBackward","stepForward","rowCount","getCurrentToken","getCurrentTokenRow","getCurrentTokenColumn","rowTokens","tokenIndex","getCurrentTokenPosition","Mode","$behaviour","getTokenizer","$tokenizer","$highlightRules","lineCommentStart","blockComment","toggleCommentLines","ignoreBlankLines","shouldRemove","minIndent","insertAtTabStop","lineCommentEnd","regexpStart","regexpEnd","comment","testRemove","insertInLine","uncomment","removeInLine","getUseSoftTabs","shouldInsertSpace","commentWithSpace","before","after","spaces","iter","minEmptyLength","toggleBlockComment","iterator","initialRange","colDiff","startRange","endRange","getNextLineIndent","tab","$getIndent","checkOutdent","autoOutdent","createWorker","createModeDelegates","$modes","delegations","scope","functionName","$delegator","method","transformAction","param","completionKeywords","ruleItr","aLength","$createKeywordList","getCompletions","score","$id","throwDeltaError","errorText","positionInDocument","docLines","validateDelta","numRangeRows","numRangeLastLineChars","applyDelta","doNotValidate","Anchor","$onChange","$clipPositionToDocument","$insertRight","point","$getTransformedPoint","$pointsInOrder","point1","point2","equalPointsInOrder","bColIsAfter","moveIfEqual","deltaIsInsert","deltaRowShift","deltaColShift","deltaStart","deltaEnd","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","startCol","endCol","deletedLines","removeNewLine","applyDeltas","deltas","revertDeltas","revertDelta","isInsert","$splitAndapplyLargeDelta","MAX","chunk","indexToPosition","newlineLength","positionToIndex","BackgroundTokenizer","tokenizer","running","currentLine","$worker","workerStart","endLine","startLine","processedLines","$tokenizeRow","fireUpdateEvent","setTokenizer","setDocument","scheduleStart","$updateOnChange","getState","SearchHighlight","clazz","setRegexp","MAX_RANGES","update","markerLayer","drawSingleLineMarker","FoldLine","foldData","folds","setFoldLine","shiftRow","sameRow","containsRow","lastEnd","isNewRow","placeholder","getNextFoldTo","kind","addRemoveChars","foldBefore","newFoldLine","foldLineNext","idxToPosition","lastFoldEndColumn","RangeList","pointIndex","excludeEdges","addList","substractPoint","containsPoint","rangeAtPoint","clipped","removeAll","lineDif","Fold","subFolds","subFold","collapseChildren","addSubFold","consumeRange","afterStart","afterEnd","consumedFolds","restoreRange","consumePoint","restorePoint","Folding","side","getFoldsInRange","foldLines","$foldData","foundFolds","getFoldsInRangeList","getAllFolds","lastFold","docRow","startFoldLine","getNextFoldLine","getFoldedRowCount","$addFoldLine","added","$clipRangeToDocument","startFold","endFold","removeFolds","$useWrapMode","$updateWrapData","$updateRowLengthCache","$modified","addFolds","$updating","cloneFolds","foldAll","expandFolds","unfold","expandInner","isRowFolded","startFoldRow","getRowFoldEnd","getRowFoldStart","getFoldDisplayLine","textLine","lastColumn","$cloneFoldData","fd","toggleFold","tryToUnfold","bracketPos","findMatchingBracket","getCommentFoldRange","dir","depth","getFoldWidget","getFoldWidgetRange","$foldStyles","$foldStyle","setFoldStyle","$foldMode","$setFolding","foldMode","$updateFoldWidgets","$tokenizerUpdateFoldWidgets","updateFoldWidgets","tokenizerUpdateFoldWidgets","ignoreCurrent","fw","siblings","$toggleFoldWidget","toggleFoldWidget","toggleParent","BracketMatch","chr","charBeforeCursor","$findClosingBracket","$findOpeningBracket","$brackets","bracket","typeRe","openBracket","valueIndex","closingBracket","valueLength","TextMode","EditSession","$breakpoints","$decorations","$frontMarkers","$backMarkers","$markerId","$undoSelect","onChangeFold","bgTokenizer","resetCaches","$resetRowCache","$docRowCache","$screenRowCache","$getRowCacheIndex","cacheArray","low","hi","mid","$wrapData","$rowLengthCache","removedFolds","$updateInternalDataOnChange","$fromUndo","$undoManager","ignore","$deltasDoc","$deltasFold","$informUndoManager","$deltas","setUndoManager","getUndoManager","reset","undoManager","$syncInformUndoManager","execute","mergeUndoDeltas","$defaultUndoManager","getTabString","$useSoftTabs","$mode","$indentWithTabs","$tabSize","$overwrite","setOverwrite","overwrite","getOverwrite","toggleOverwrite","addGutterDecoration","removeGutterDecoration","getBreakpoints","setBreakpoints","clearBreakpoints","setBreakpoint","clearBreakpoint","inFront","marker","addDynamicMarker","markerId","markers","getMarkers","$searchHighlight","highlightLines","setAnnotations","annotations","getAnnotations","clearAnnotations","inToken","wordRange","setUseWorker","useWorker","getUseWorker","$useWorker","onReloadTokenizer","$modeId","$onChangeMode","$isPlaceholder","$stopWorker","$startWorker","attachToSession","wrapMethod","$wrapMethod","foldingRules","terminate","$scrollTop","setScrollTop","getScrollTop","$scrollLeft","setScrollLeft","getScrollLeft","getScreenWidth","$computeWidth","getLineWidgetMaxWidth","screenWidth","lineWidgetsWidth","lineWidgetWidth","$wrapLimit","longestScreenLine","foldIndex","foldStart","$getStringScreenWidth","undoChanges","dontSelect","lastUndoRange","$getUndoSelection","foldDelta","redoChanges","setUndoSelect","isUndo","lastDeltaIsInsert","fromRange","toPosition","toRange","rowDiff","collDiff","oldStart","newStart","indentRows","indentString","outdentRows","rowRange","deleteRange","size","$moveLines","$clipRowToDocument","MAX_VALUE","moveLinesUp","moveLinesDown","duplicateLines","$clipColumnToRow","$wrapLimitRange","useWrapMode","getUseWrapMode","setWrapLimitRange","adjustWrapLimit","desiredLimit","$printMargin","limits","wrapLimit","$constrainWrapLimit","getWrapLimit","setWrapLimit","getWrapLimitRange","foldLineBefore","wrapData","$getDisplayTokens","$computeWrapSplits","walkTokens","PLACEHOLDER_START","PLACEHOLDER_BODY","CHAR","CHAR_EXT","PUNCTUATION","SPACE","TAB","TAB_SPACE","splits","displayLength","lastSplit","lastDocSplit","isCode","$wrapAsCode","indentedSoftWrap","$indentedSoftWrap","maxIndent","getWrapIndent","addSplit","displayed","minSplit","getScreenTabSize","isFullWidth","maxScreenColumn","screenColumn","getRowLength","getRowLineCount","getRowWrapIndent","getScreenLastRowColumn","documentToScreenColumn","getDocumentLastRowColumn","docColumn","getRowSplitData","screenToDocumentRow","screenToDocumentColumn","rowLength","rowCache","doCache","wrapIndent","splitIndex","foldStartRow","wrapRow","screenRowOffset","getScreenLength","screenRows","$getWidgetScreenLength","$setFontMetrics","fm","$enableVarChar","getCharacterWidth","$wrap","firstLineNumber","useSoftTabs","Search","find","$matchIterator","skipCurrent","findAll","needle","$assembleRegExp","$isMultiLine","prevRange","replacement","preserveCase","matchIterator","backwards","lineIterator","$lineIterator","_callback","$disableFakeMultiline","wholeWord","modifier","caseSensitive","$assembleMultilineRegExp","HashHandler","commandKeyBinding","addCommands","$singleCommand","MultiHashHandler","addCommand","removeCommand","_buildKeyHash","keepCommand","ckb","keyId","cmdGroup","keyPart","chain","binding","parseKeys","_addCommandToBinding","isDefault","other","otherPos","removeCommands","bindKeys","keyList","findKeyCommand","$keyChain","CommandManager","byName","toggleRecording","$inReplay","recording","$addCommandToMacro","oldMacro","replay","trimMacro","mac","showSettingsMenu","showErrorMarker","scrollIntoView","centerSelection","prompt","gotoLine","multiSelectAction","getAllRanges","findNext","findPrevious","aceCommandGroup","navigateFileStart","navigateUp","times","navigateFileEnd","navigateDown","navigateWordLeft","navigateLineStart","navigateLeft","navigateWordRight","navigateLineEnd","navigateRight","selectPageDown","scrollPageDown","gotoPageDown","selectPageUp","scrollPageUp","gotoPageUp","jumpToMatching","$handlePaste","duplicateSelection","sortLines","modifyNumber","copyLinesUp","copyLinesDown","removeToLineStart","removeToLineEnd","removeWordLeft","removeWordRight","blockOutdent","blockIndent","splitLine","transposeLetters","transposeSelections","firstLineEndCol","selectedText","selectedCount","insertLine","curLine","newRanges","exitMultiSelectMode","defaultCommands","Editor","getContainerElement","getTextAreaContainer","keyBinding","$mouseHandler","$search","$historyTracker","$initOperationListeners","_$emitInputEvent","setSession","selections","startOperation","endOperation","$opResetTimer","curOp","docChanged","selectionChanged","prevOp","commadEvent","previousCommand","scrollSelectionIntoView","animateScrolling","$mergeableCommands","$mergeUndoDeltas","mergeableCommands","shouldMerge","mergeNextCommand","sequenceStartTime","keyboardHandler","$keybindingId","handler","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","cursorPos","onResize","getTheme","getFontSize","$highlightBrackets","$bracketHighlight","$highlightPending","getCursorPosition","getMatching","$highlightTags","$highlightTagPending","$tagHighlight","prevToken","$isFocused","showCursor","visualizeFocus","hideCursor","visualizeBlur","$cursorChange","updateCursor","updateLines","$updateHighlightActiveLine","scrollToY","scrollToX","$highlightActiveLine","$selectionStyle","$maxLines","$minLines","$highlightLineMarker","$selectionMarker","$highlightSelectedWord","$getSelectionHighLightRegexp","startOuter","endOuter","lineCols","updateFrontMarkers","updateBackMarkers","updateBreakpoints","updateText","getSelectedText","inVirtualSelectionMode","getBehavioursEnabled","transform","$mergeNextCommand","d","lineState","shouldOutdent","lineIndent","setScrollSpeed","getScrollSpeed","setDragDelay","setSelectionStyle","setHighlightActiveLine","shouldHighlight","getHighlightActiveLine","setHighlightGutterLine","getHighlightGutterLine","setHighlightSelectedWord","getHighlightSelectedWord","setAnimatedScroll","shouldAnimate","getAnimatedScroll","setShowInvisibles","showInvisibles","getShowInvisibles","setDisplayIndentGuides","getDisplayIndentGuides","showPrintMargin","getShowPrintMargin","setPrintMarginColumn","getPrintMarginColumn","setBehavioursEnabled","enabled","setWrapBehavioursEnabled","getWrapBehavioursEnabled","setShowFoldWidgets","getShowFoldWidgets","setFadeFoldWidgets","fade","getFadeFoldWidgets","new_range","swap","originalRange","$getSelectedRows","getNumberAt","_numberRx","amount","charRange","nr","fp","decimals","nnr","toFixed","replaceRange","endPoint","totalDiff","rangeIndex","subRows","showComposition","setCompositionText","hideComposition","getFirstVisibleRow","getLastVisibleRow","isRowVisible","isRowFullyVisible","getFirstFullyVisibleRow","getLastFullyVisibleRow","$getVisibleRowCount","getScrollBottomRow","getScrollTopRow","$moveByPage","scrollToRow","scrollToLine","center","alignCursor","getCursorPositionScreen","matchType","found","bracketType","brackets","lineNumber","navigateTo","replaced","$tryReplace","replaceAll","getLastSearchOptions","newRange","preventScroll","revealRange","setAutoScrollEditorIntoView","shouldScroll","$scrollAnchor","scrollAnchor","onChangeSelection","onBeforeRender","onAfterRender","$pixelPos","$resetCursorStyle","$cursorStyle","cursorLayer","setSmoothBlinking","isBlinking","selectionStyle","highlightActiveLine","highlightSelectedWord","behavioursEnabled","wrapBehavioursEnabled","autoScrollEditorIntoView","keybindingId","hScrollBarAlwaysVisible","vScrollBarAlwaysVisible","highlightGutterLine","animatedScroll","printMarginColumn","printMargin","fadeFoldWidgets","showFoldWidgets","showLineNumbers","showGutter","displayIndentGuides","fontSize","fontFamily","maxLines","minLines","scrollPastEnd","fixedWidthGutter","foldStyle","UndoManager","deltaSets","$doc","hasUndo","dirtyCounter","$undoStack","$redoStack","NaN","undoSelectionRange","redoSelectionRange","$deserializeDeltas","hasRedo","markClean","isClean","$serializeDeltas","cloneDeltaSetsObj","$serializeDelta","$deserializeDelta","deltaSets_old","fnGetModifiedDelta","deltaSets_new","deltaSet_old","deltaSet_new","delta_old","Gutter","parentEl","$showFoldWidgets","gutterWidth","$updateAnnotations","$cells","rowInfo","annoText","gutterOffset","breakpoints","decorations","$firstLineNumber","lastLineNumber","gutterRenderer","$renderer","cell","textNode","foldWidget","minHeight","$fixedWidth","$padding","$computePadding","ceil","$showLineNumbers","setShowLineNumbers","getShowLineNumbers","paddingRight","Marker","setPadding","setMarkers","$getTop","drawFullLineMarker","drawScreenLineMarker","drawTextMarker","drawMultiLineMarker","firstRowScreen","getBorderClass","tl","br","bl","stringBuilder","extraStyle","lineRange","radiusClass","extraLength","Text","$updateEolChar","EOF_CHAR","EOL_CHAR_LF","EOL_CHAR_CRLF","EOL_CHAR","TAB_CHAR","SPACE_CHAR","getLineHeight","$fontMetrics","$characterSize","measure","$pollSizeChanges","checkForSizeChanges","$pollSizeChangesTimer","$computeTabString","$tabStrings","tabStr","$indentGuideRe","spaceClass","tabClass","spaceContent","tabContent","scrollLines","lineElements","lineElementsIdx","lineElement","$renderLine","$useLineGroups","oldConfig","fragment","$renderLinesFragment","createDocumentFragment","$textToken","$renderToken","replaceReg","replaceFunc","tabIdx","idx4","classToUse","renderIndentGuide","cols","$renderWrappedLine","onlyContents","splitChars","$renderSimpleLine","$getFoldLineTokens","renderTokens","addTokens","$measureNode","isIE8","Cursor","blinkInterval","smoothBlinking","cursors","addCursor","$updateCursors","$updateVisibility","$updateOpacity","blinking","restartTimer","setBlinkInterval","removeCursor","intervalId","timeoutId","blink","getPixelPosition","onScreen","cursorLeft","cursorTop","$selectionMarkers","cursorIndex","pixelPos","drawCursor","$setOverwrite","ScrollBar","classSuffix","setVisible","skipEvent","onScroll","VScrollBar","$scrollbarWidth","setHeight","setInnerHeight","setScrollHeight","HScrollBar","setWidth","setInnerWidth","setScrollWidth","ScrollBarV","ScrollBarH","RenderLoop","onRender","pending","changes","CHAR_COUNT","FontMetrics","$setMeasureNodeStyles","$main","$testFractionalRect","whiteSpace","font","$measureSizes","fontWeight","boldSize","charSizes","allowBoldFonts","setPolling","$measureCharWidth","GutterLayer","MarkerLayer","TextLayer","CursorLayer","editorCss","VirtualRenderer","onGutterResize","$markerBack","textLayer","$textLayer","canvas","$markerFront","$horizScroll","$vScroll","scrollBar","$scrollAnimation","scrollMargin","updateCharacterSize","$size","scrollerHeight","scrollerWidth","$dirty","$loop","$renderChanges","CHANGE_FULL","CHANGE_CURSOR","CHANGE_MARKER","CHANGE_GUTTER","CHANGE_SCROLL","CHANGE_LINES","CHANGE_TEXT","CHANGE_SIZE","CHANGE_MARKER_BACK","CHANGE_MARKER_FRONT","CHANGE_H_SCROLL","$allowBoldFonts","$updatePrintMargin","onChangeNewLineMode","$changedLines","updateFontSize","$changes","$updateSizeAsync","resizing","scrollWidth","$updateCachedSize","$extraHeight","oldSize","$showGutter","$computeLayerConfig","availableWidth","$showPrintMargin","$printMarginColumn","$animatedScroll","getShowGutter","setShowGutter","$updateGutterLineHighlight","$gutterLineHighlight","$printMarginEl","containerEl","posTop","posLeft","$composition","setScrollMargin","sm","getHScrollBarAlwaysVisible","$hScrollBarAlwaysVisible","setHScrollBarAlwaysVisible","alwaysVisible","getVScrollBarAlwaysVisible","$vScrollBarAlwaysVisible","setVScrollBarAlwaysVisible","$updateScrollBarV","$scrollPastEnd","$updateScrollBarH","$frozen","unfreeze","st","marginTop","$highlightGutterLine","$updateLines","$autosize","desiredHeight","$gutterWidth","hideScrollbars","screenLines","longestLine","$getLongestLine","horizScroll","hScrollChanged","vScrollBefore","vScrollChanged","lineCount","firstRowHeight","charCount","$viewMargin","topMargin","bottomMargin","alignment","STEPS","$calcSteps","fromValue","toValue","steps","x_min","dx","initialScroll","oldSteps","$timer","canvasPos","textToScreenCoordinates","keepTextAreaAtCursor","$themeId","cssClass","$theme","isDark","setMouseCursor","WorkerClient","topLevelNamespaces","classname","workerUrl","$sendDeltaQueue","changeListener","onMessage","nameToUrl","toUrl","normalizePath","$normalizePath","tlns","workerSrc","Blob","blob","blobUrl","URL","webkitURL","createObjectURL","Worker","DOMException","$workerBlob","blobURL","revokeObjectURL","callbackId","callbacks","onmessage","deltaQueue","cmd","emit","ex","attachToDocument","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","blobBuilder","getBlob","UIWorkerClient","messageBuffer","main","emitSync","sender","processNext","setEmitSync","Main","PlaceHolder","others","mainClass","othersClass","$onUpdate","onUpdate","$others","undoStack","$undostack","$undoStackDepth","selectionBefore","showOtherMarkers","othersActive","hideOtherMarkers","updateAnchors","lengthDiff","inMainRange","distanceFromStart","newPos","updateMarkers","updateMarker","undosRequired","isSamePoint","alt","ctrl","accel","isMultiSelect","onMouseSelection","screenAnchor","screenCursor","selectionMode","$enableJumpToDef","$blockSelectEnabled","addSelectionMarker","oldRange","removeSelectionMarker","tmpSel","rectSel","blockSelect","newCursor","removeSelectionMarkers","rectangularRangeBlock","updateSelectionMarkers","onMouseSelectionEnd","onSelectionInterval","selectMoreLines","selectMore","multiSelect","splitIntoLines","alignCursors","multiSelectCommands","isAvailable","getSelectionMarkers","$blockChangeEvents","$onAddRange","$onRemoveRange","mergeOverlappingRanges","lastRange","$initRangeList","toggleBlockSelection","includeEmptyLines","xBackwards","yBackwards","docEnd","selectionMarkerCount","markerList","$onMultiSelect","$onMultiSelectExec","$onSingleSelect","inVirtualMode","forEachSelection","keepOrder","$byLines","reg","cmdResult","anim","buf","nl","$checkMultiselectChange","additive","skip","screenLead","toRemove","tmp","words","stopAtFirst","sameRowRanges","fr","lr","guessRange","$reAlignText","maxCol","minSpace","spaceOffsets","spaceOffset","forceLeft","isLeftAligned","isRightAligned","startW","textW","endW","alignLeft","alignRight","unAlign","onSessionChange","MultiSelect","$multiselectOnSessionChange","addAltCursorListeners","altCursor","altDown","enableMultiselect","enableBlockSelect","FoldMode","foldingStartMarker","foldingStopMarker","indentationBlock","startLevel","openingBracketBlock","closingBracketBlock","LineWidgets","widgetManager","updateOnChange","renderWidgets","measureWidgets","_changedWidgets","$onChangeEditor","updateOnFold","_inDocument","removeLineWidget","$updateRows","noWidgets","$oldWidget","addLineWidget","zIndex","coverGutter","pixelHeight","$fold","onWidgetChanged","w1","getWidgetsAtRow","changedWidgets","fixedWidth","coverLine","fullWidth","binarySearch","comparator","findAnnotations","oldWidget","gutterAnno","sc","arrow","Renderer","_id","getElementById","env","tagName","oldNode","createEditSession","version","get_blob","Builder","MSBlobBuilder","bag","builder","endings","JsonHighlightRules","MatchingBraceOutdent","openBracePos","SAFE_INSERT_IN_TOKENS","SAFE_INSERT_BEFORE_TOKENS","contextCache","initContext","autoInsertedBrackets","autoInsertedRow","autoInsertedLineEnd","maybeInsertedBrackets","maybeInsertedRow","maybeInsertedLineStart","maybeInsertedLineEnd","getWrapped","opening","closing","CstyleBehaviour","isSaneInsertion","recordAutoInsert","recordMaybeInsert","rightChar","matching","isAutoInsertedClosing","popAutoInsertedClosing","isMaybeInsertedClosing","clearMaybeInsertedClosing","next_indent","leftChar","rightToken","stringBefore","stringAfter","pair","wordRe","isWordBefore","isWordAfter","$matchTokenType","iterator2","BaseFoldMode","commentRegex","singleLineBlockCommentRe","tripleStarBlockCommentRe","startRegionRe","_getFoldWidgetBase","forceMultiline","getCommentRegionBlock","getSectionRange","startIndent","subRange","CStyleFoldMode","$outdent","worker","searchboxCss","showReplaceForm","div","setEditor","$initElements","sb","replaceBox","searchOptions","regExpOption","caseSensitiveOption","wholeWordOption","searchInput","replaceInput","_this","activeInput","$searchBarKb","$closeSearchBarKb","Ctrl-f|Command-f","isReplace","Ctrl-H|Command-Option-F","Ctrl-G|Command-G","Ctrl-Shift-G|Command-Shift-G","findPrev","Return","Shift-Return","Alt-Return","Tab","$syncOptions","noMatch","replaceAndFindNext"],"sources":["/Users/xubincheng/Desktop/job/zero_code_all/zero_project/Project1/main/client/node_modules/vue-json-editor/assets/jsoneditor.js"],"sourcesContent":["/*!\r\n * jsoneditor.js\r\n *\r\n * @brief\r\n * JSONEditor is a web-based tool to view, edit, format, and validate JSON.\r\n * It has various modes such as a tree editor, a code editor, and a plain text\r\n * editor.\r\n *\r\n * Supported browsers: Chrome, Firefox, Safari, Opera, Internet Explorer 8+\r\n *\r\n * @license\r\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\r\n * use this file except in compliance with the License. You may obtain a copy\r\n * of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\r\n * License for the specific language governing permissions and limitations under\r\n * the License.\r\n *\r\n * Copyright (c) 2011-2017 Jos de Jong, http://jsoneditoronline.org\r\n *\r\n * @author Jos de Jong, <wjosdejong@gmail.com>\r\n * @version 5.5.11\r\n * @date 2017-01-06\r\n */\r\n(function webpackUniversalModuleDefinition(root, factory) {\r\n\tif(typeof exports === 'object' && typeof module === 'object')\r\n\t\tmodule.exports = factory();\r\n\telse if(typeof define === 'function' && define.amd)\r\n\t\tdefine([], factory);\r\n\telse if(typeof exports === 'object')\r\n\t\texports[\"JSONEditor\"] = factory();\r\n\telse\r\n\t\troot[\"JSONEditor\"] = factory();\r\n})(this, function() {\r\nreturn /******/ (function(modules) { // webpackBootstrap\r\n/******/ \t// The module cache\r\n/******/ \tvar installedModules = {};\r\n\r\n/******/ \t// The require function\r\n/******/ \tfunction __webpack_require__(moduleId) {\r\n\r\n/******/ \t\t// Check if module is in cache\r\n/******/ \t\tif(installedModules[moduleId])\r\n/******/ \t\t\treturn installedModules[moduleId].exports;\r\n\r\n/******/ \t\t// Create a new module (and put it into the cache)\r\n/******/ \t\tvar module = installedModules[moduleId] = {\r\n/******/ \t\t\texports: {},\r\n/******/ \t\t\tid: moduleId,\r\n/******/ \t\t\tloaded: false\r\n/******/ \t\t};\r\n\r\n/******/ \t\t// Execute the module function\r\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\r\n\r\n/******/ \t\t// Flag the module as loaded\r\n/******/ \t\tmodule.loaded = true;\r\n\r\n/******/ \t\t// Return the exports of the module\r\n/******/ \t\treturn module.exports;\r\n/******/ \t}\r\n\r\n\r\n/******/ \t// expose the modules object (__webpack_modules__)\r\n/******/ \t__webpack_require__.m = modules;\r\n\r\n/******/ \t// expose the module cache\r\n/******/ \t__webpack_require__.c = installedModules;\r\n\r\n/******/ \t// __webpack_public_path__\r\n/******/ \t__webpack_require__.p = \"\";\r\n\r\n/******/ \t// Load entry module and return exports\r\n/******/ \treturn __webpack_require__(0);\r\n/******/ })\r\n/************************************************************************/\r\n/******/ ([\r\n/* 0 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar Ajv;\r\n\ttry {\r\n\t Ajv = __webpack_require__(1);\r\n\t}\r\n\tcatch (err) {\r\n\t // no problem... when we need Ajv we will throw a neat exception\r\n\t}\r\n\r\n\tvar treemode = __webpack_require__(51);\r\n\tvar textmode = __webpack_require__(62);\r\n\tvar util = __webpack_require__(54);\r\n\r\n\t/**\r\n\t * @constructor JSONEditor\r\n\t * @param {Element} container Container element\r\n\t * @param {Object} [options] Object with options. available options:\r\n\t * {String} mode Editor mode. Available values:\r\n\t * 'tree' (default), 'view',\r\n\t * 'form', 'text', and 'code'.\r\n\t * {function} onChange Callback method, triggered\r\n\t * on change of contents\r\n\t * {function} onError Callback method, triggered\r\n\t * when an error occurs\r\n\t * {Boolean} search Enable search box.\r\n\t * True by default\r\n\t * Only applicable for modes\r\n\t * 'tree', 'view', and 'form'\r\n\t * {Boolean} history Enable history (undo/redo).\r\n\t * True by default\r\n\t * Only applicable for modes\r\n\t * 'tree', 'view', and 'form'\r\n\t * {String} name Field name for the root node.\r\n\t * Only applicable for modes\r\n\t * 'tree', 'view', and 'form'\r\n\t * {Number} indentation Number of indentation\r\n\t * spaces. 4 by default.\r\n\t * Only applicable for\r\n\t * modes 'text' and 'code'\r\n\t * {boolean} escapeUnicode If true, unicode\r\n\t * characters are escaped.\r\n\t * false by default.\r\n\t * {boolean} sortObjectKeys If true, object keys are\r\n\t * sorted before display.\r\n\t * false by default.\r\n\t * @param {Object | undefined} json JSON object\r\n\t */\r\n\tfunction JSONEditor (container, options, json) {\r\n\t if (!(this instanceof JSONEditor)) {\r\n\t throw new Error('JSONEditor constructor called without \"new\".');\r\n\t }\r\n\r\n\t // check for unsupported browser (IE8 and older)\r\n\t var ieVersion = util.getInternetExplorerVersion();\r\n\t if (ieVersion != -1 && ieVersion < 9) {\r\n\t throw new Error('Unsupported browser, IE9 or newer required. ' +\r\n\t 'Please install the newest version of your browser.');\r\n\t }\r\n\r\n\t if (options) {\r\n\t // check for deprecated options\r\n\t if (options.error) {\r\n\t console.warn('Option \"error\" has been renamed to \"onError\"');\r\n\t options.onError = options.error;\r\n\t delete options.error;\r\n\t }\r\n\t if (options.change) {\r\n\t console.warn('Option \"change\" has been renamed to \"onChange\"');\r\n\t options.onChange = options.change;\r\n\t delete options.change;\r\n\t }\r\n\t if (options.editable) {\r\n\t console.warn('Option \"editable\" has been renamed to \"onEditable\"');\r\n\t options.onEditable = options.editable;\r\n\t delete options.editable;\r\n\t }\r\n\r\n\t // validate options\r\n\t if (options) {\r\n\t var VALID_OPTIONS = [\r\n\t 'ace', 'theme',\r\n\t 'ajv', 'schema',\r\n\t 'onChange', 'onEditable', 'onError', 'onModeChange',\r\n\t 'escapeUnicode', 'history', 'search', 'mode', 'modes', 'name', 'indentation', 'sortObjectKeys'\r\n\t ];\r\n\r\n\t Object.keys(options).forEach(function (option) {\r\n\t if (VALID_OPTIONS.indexOf(option) === -1) {\r\n\t console.warn('Unknown option \"' + option + '\". This option will be ignored');\r\n\t }\r\n\t });\r\n\t }\r\n\t }\r\n\r\n\t if (arguments.length) {\r\n\t this._create(container, options, json);\r\n\t }\r\n\t}\r\n\r\n\t/**\r\n\t * Configuration for all registered modes. Example:\r\n\t * {\r\n\t * tree: {\r\n\t * mixin: TreeEditor,\r\n\t * data: 'json'\r\n\t * },\r\n\t * text: {\r\n\t * mixin: TextEditor,\r\n\t * data: 'text'\r\n\t * }\r\n\t * }\r\n\t *\r\n\t * @type { Object.<String, {mixin: Object, data: String} > }\r\n\t */\r\n\tJSONEditor.modes = {};\r\n\r\n\t// debounce interval for JSON schema vaidation in milliseconds\r\n\tJSONEditor.prototype.DEBOUNCE_INTERVAL = 150;\r\n\r\n\t/**\r\n\t * Create the JSONEditor\r\n\t * @param {Element} container Container element\r\n\t * @param {Object} [options] See description in constructor\r\n\t * @param {Object | undefined} json JSON object\r\n\t * @private\r\n\t */\r\n\tJSONEditor.prototype._create = function (container, options, json) {\r\n\t this.container = container;\r\n\t this.options = options || {};\r\n\t this.json = json || {};\r\n\r\n\t var mode = this.options.mode || 'tree';\r\n\t this.setMode(mode);\r\n\t};\r\n\r\n\t/**\r\n\t * Destroy the editor. Clean up DOM, event listeners, and web workers.\r\n\t */\r\n\tJSONEditor.prototype.destroy = function () {};\r\n\r\n\t/**\r\n\t * Set JSON object in editor\r\n\t * @param {Object | undefined} json JSON data\r\n\t */\r\n\tJSONEditor.prototype.set = function (json) {\r\n\t this.json = json;\r\n\t};\r\n\r\n\t/**\r\n\t * Get JSON from the editor\r\n\t * @returns {Object} json\r\n\t */\r\n\tJSONEditor.prototype.get = function () {\r\n\t return this.json;\r\n\t};\r\n\r\n\t/**\r\n\t * Set string containing JSON for the editor\r\n\t * @param {String | undefined} jsonText\r\n\t */\r\n\tJSONEditor.prototype.setText = function (jsonText) {\r\n\t this.json = util.parse(jsonText);\r\n\t};\r\n\r\n\t/**\r\n\t * Get stringified JSON contents from the editor\r\n\t * @returns {String} jsonText\r\n\t */\r\n\tJSONEditor.prototype.getText = function () {\r\n\t return JSON.stringify(this.json);\r\n\t};\r\n\r\n\t/**\r\n\t * Set a field name for the root node.\r\n\t * @param {String | undefined} name\r\n\t */\r\n\tJSONEditor.prototype.setName = function (name) {\r\n\t if (!this.options) {\r\n\t this.options = {};\r\n\t }\r\n\t this.options.name = name;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the field name for the root node.\r\n\t * @return {String | undefined} name\r\n\t */\r\n\tJSONEditor.prototype.getName = function () {\r\n\t return this.options && this.options.name;\r\n\t};\r\n\r\n\t/**\r\n\t * Change the mode of the editor.\r\n\t * JSONEditor will be extended with all methods needed for the chosen mode.\r\n\t * @param {String} mode Available modes: 'tree' (default), 'view', 'form',\r\n\t * 'text', and 'code'.\r\n\t */\r\n\tJSONEditor.prototype.setMode = function (mode) {\r\n\t var container = this.container;\r\n\t var options = util.extend({}, this.options);\r\n\t var oldMode = options.mode;\r\n\t var data;\r\n\t var name;\r\n\r\n\t options.mode = mode;\r\n\t var config = JSONEditor.modes[mode];\r\n\t if (config) {\r\n\t try {\r\n\t var asText = (config.data == 'text');\r\n\t name = this.getName();\r\n\t data = this[asText ? 'getText' : 'get'](); // get text or json\r\n\r\n\t this.destroy();\r\n\t util.clear(this);\r\n\t util.extend(this, config.mixin);\r\n\t this.create(container, options);\r\n\r\n\t this.setName(name);\r\n\t this[asText ? 'setText' : 'set'](data); // set text or json\r\n\r\n\t if (typeof config.load === 'function') {\r\n\t try {\r\n\t config.load.call(this);\r\n\t }\r\n\t catch (err) {\r\n\t console.error(err);\r\n\t }\r\n\t }\r\n\r\n\t if (typeof options.onModeChange === 'function' && mode !== oldMode) {\r\n\t try {\r\n\t options.onModeChange(mode, oldMode);\r\n\t }\r\n\t catch (err) {\r\n\t console.error(err);\r\n\t }\r\n\t }\r\n\t }\r\n\t catch (err) {\r\n\t this._onError(err);\r\n\t }\r\n\t }\r\n\t else {\r\n\t throw new Error('Unknown mode \"' + options.mode + '\"');\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the current mode\r\n\t * @return {string}\r\n\t */\r\n\tJSONEditor.prototype.getMode = function () {\r\n\t return this.options.mode;\r\n\t};\r\n\r\n\t/**\r\n\t * Throw an error. If an error callback is configured in options.error, this\r\n\t * callback will be invoked. Else, a regular error is thrown.\r\n\t * @param {Error} err\r\n\t * @private\r\n\t */\r\n\tJSONEditor.prototype._onError = function(err) {\r\n\t if (this.options && typeof this.options.onError === 'function') {\r\n\t this.options.onError(err);\r\n\t }\r\n\t else {\r\n\t throw err;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Set a JSON schema for validation of the JSON object.\r\n\t * To remove the schema, call JSONEditor.setSchema(null)\r\n\t * @param {Object | null} schema\r\n\t */\r\n\tJSONEditor.prototype.setSchema = function (schema) {\r\n\t // compile a JSON schema validator if a JSON schema is provided\r\n\t if (schema) {\r\n\t var ajv;\r\n\t try {\r\n\t // grab ajv from options if provided, else create a new instance\r\n\t ajv = this.options.ajv || Ajv({ allErrors: true, verbose: true });\r\n\r\n\t }\r\n\t catch (err) {\r\n\t console.warn('Failed to create an instance of Ajv, JSON Schema validation is not available. Please use a JSONEditor bundle including Ajv, or pass an instance of Ajv as via the configuration option `ajv`.');\r\n\t }\r\n\r\n\t if (ajv) {\r\n\t this.validateSchema = ajv.compile(schema);\r\n\r\n\t // add schema to the options, so that when switching to an other mode,\r\n\t // the set schema is not lost\r\n\t this.options.schema = schema;\r\n\r\n\t // validate now\r\n\t this.validate();\r\n\t }\r\n\r\n\t this.refresh(); // update DOM\r\n\t }\r\n\t else {\r\n\t // remove current schema\r\n\t this.validateSchema = null;\r\n\t this.options.schema = null;\r\n\t this.validate(); // to clear current error messages\r\n\t this.refresh(); // update DOM\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Validate current JSON object against the configured JSON schema\r\n\t * Throws an exception when no JSON schema is configured\r\n\t */\r\n\tJSONEditor.prototype.validate = function () {\r\n\t // must be implemented by treemode and textmode\r\n\t};\r\n\r\n\t/**\r\n\t * Refresh the rendered contents\r\n\t */\r\n\tJSONEditor.prototype.refresh = function () {\r\n\t // can be implemented by treemode and textmode\r\n\t};\r\n\r\n\t/**\r\n\t * Register a plugin with one ore multiple modes for the JSON Editor.\r\n\t *\r\n\t * A mode is described as an object with properties:\r\n\t *\r\n\t * - `mode: String` The name of the mode.\r\n\t * - `mixin: Object` An object containing the mixin functions which\r\n\t * will be added to the JSONEditor. Must contain functions\r\n\t * create, get, getText, set, and setText. May have\r\n\t * additional functions.\r\n\t * When the JSONEditor switches to a mixin, all mixin\r\n\t * functions are added to the JSONEditor, and then\r\n\t * the function `create(container, options)` is executed.\r\n\t * - `data: 'text' | 'json'` The type of data that will be used to load the mixin.\r\n\t * - `[load: function]` An optional function called after the mixin\r\n\t * has been loaded.\r\n\t *\r\n\t * @param {Object | Array} mode A mode object or an array with multiple mode objects.\r\n\t */\r\n\tJSONEditor.registerMode = function (mode) {\r\n\t var i, prop;\r\n\r\n\t if (util.isArray(mode)) {\r\n\t // multiple modes\r\n\t for (i = 0; i < mode.length; i++) {\r\n\t JSONEditor.registerMode(mode[i]);\r\n\t }\r\n\t }\r\n\t else {\r\n\t // validate the new mode\r\n\t if (!('mode' in mode)) throw new Error('Property \"mode\" missing');\r\n\t if (!('mixin' in mode)) throw new Error('Property \"mixin\" missing');\r\n\t if (!('data' in mode)) throw new Error('Property \"data\" missing');\r\n\t var name = mode.mode;\r\n\t if (name in JSONEditor.modes) {\r\n\t throw new Error('Mode \"' + name + '\" already registered');\r\n\t }\r\n\r\n\t // validate the mixin\r\n\t if (typeof mode.mixin.create !== 'function') {\r\n\t throw new Error('Required function \"create\" missing on mixin');\r\n\t }\r\n\t var reserved = ['setMode', 'registerMode', 'modes'];\r\n\t for (i = 0; i < reserved.length; i++) {\r\n\t prop = reserved[i];\r\n\t if (prop in mode.mixin) {\r\n\t throw new Error('Reserved property \"' + prop + '\" not allowed in mixin');\r\n\t }\r\n\t }\r\n\r\n\t JSONEditor.modes[name] = mode;\r\n\t }\r\n\t};\r\n\r\n\t// register tree and text modes\r\n\tJSONEditor.registerMode(treemode);\r\n\tJSONEditor.registerMode(textmode);\r\n\r\n\tmodule.exports = JSONEditor;\r\n\r\n\r\n/***/ },\r\n/* 1 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar compileSchema = __webpack_require__(2)\r\n\t , resolve = __webpack_require__(3)\r\n\t , Cache = __webpack_require__(21)\r\n\t , SchemaObject = __webpack_require__(16)\r\n\t , stableStringify = __webpack_require__(12)\r\n\t , formats = __webpack_require__(22)\r\n\t , rules = __webpack_require__(23)\r\n\t , v5 = __webpack_require__(43)\r\n\t , util = __webpack_require__(11)\r\n\t , async = __webpack_require__(17)\r\n\t , co = __webpack_require__(19);\r\n\r\n\tmodule.exports = Ajv;\r\n\r\n\tAjv.prototype.compileAsync = async.compile;\r\n\tAjv.prototype.addKeyword = __webpack_require__(49);\r\n\tAjv.ValidationError = __webpack_require__(20);\r\n\r\n\tvar META_SCHEMA_ID = 'http://json-schema.org/draft-04/schema';\r\n\tvar SCHEMA_URI_FORMAT = /^(?:(?:[a-z][a-z0-9+-.]*:)?\\/\\/)?[^\\s]*$/i;\r\n\tfunction SCHEMA_URI_FORMAT_FUNC(str) {\r\n\t return SCHEMA_URI_FORMAT.test(str);\r\n\t}\r\n\r\n\tvar META_IGNORE_OPTIONS = [ 'removeAdditional', 'useDefaults', 'coerceTypes' ];\r\n\r\n\t/**\r\n\t * Creates validator instance.\r\n\t * Usage: `Ajv(opts)`\r\n\t * @param {Object} opts optional options\r\n\t * @return {Object} ajv instance\r\n\t */\r\n\tfunction Ajv(opts) {\r\n\t if (!(this instanceof Ajv)) return new Ajv(opts);\r\n\t var self = this;\r\n\r\n\t opts = this._opts = util.copy(opts) || {};\r\n\t this._schemas = {};\r\n\t this._refs = {};\r\n\t this._formats = formats(opts.format);\r\n\t this._cache = opts.cache || new Cache;\r\n\t this._loadingSchemas = {};\r\n\t this.RULES = rules();\r\n\r\n\t // this is done on purpose, so that methods are bound to the instance\r\n\t // (without using bind) so that they can be used without the instance\r\n\t this.validate = validate;\r\n\t this.compile = compile;\r\n\t this.addSchema = addSchema;\r\n\t this.addMetaSchema = addMetaSchema;\r\n\t this.validateSchema = validateSchema;\r\n\t this.getSchema = getSchema;\r\n\t this.removeSchema = removeSchema;\r\n\t this.addFormat = addFormat;\r\n\t this.errorsText = errorsText;\r\n\r\n\t this._addSchema = _addSchema;\r\n\t this._compile = _compile;\r\n\r\n\t opts.loopRequired = opts.loopRequired || Infinity;\r\n\t if (opts.async || opts.transpile) async.setup(opts);\r\n\t if (opts.beautify === true) opts.beautify = { indent_size: 2 };\r\n\t if (opts.errorDataPath == 'property') opts._errorDataPathProperty = true;\r\n\t this._metaOpts = getMetaSchemaOptions();\r\n\r\n\t addInitialSchemas();\r\n\t if (opts.formats) addInitialFormats();\r\n\t if (opts.v5) v5.enable(this);\r\n\t if (typeof opts.meta == 'object') addMetaSchema(opts.meta);\r\n\r\n\r\n\t /**\r\n\t * Validate data using schema\r\n\t * Schema will be compiled and cached (using serialized JSON as key. [json-stable-stringify](https://github.com/substack/json-stable-stringify) is used to serialize.\r\n\t * @param {String|Object} schemaKeyRef key, ref or schema object\r\n\t * @param {Any} data to be validated\r\n\t * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`).\r\n\t */\r\n\t function validate(schemaKeyRef, data) {\r\n\t var v;\r\n\t if (typeof schemaKeyRef == 'string') {\r\n\t v = getSchema(schemaKeyRef);\r\n\t if (!v) throw new Error('no schema with key or ref \"' + schemaKeyRef + '\"');\r\n\t } else {\r\n\t var schemaObj = _addSchema(schemaKeyRef);\r\n\t v = schemaObj.validate || _compile(schemaObj);\r\n\t }\r\n\r\n\t var valid = v(data);\r\n\t if (v.async) return self._opts.async == '*' ? co(valid) : valid;\r\n\t self.errors = v.errors;\r\n\t return valid;\r\n\t }\r\n\r\n\r\n\t /**\r\n\t * Create validating function for passed schema.\r\n\t * @param {Object} schema schema object\r\n\t * @return {Function} validating function\r\n\t */\r\n\t function compile(schema) {\r\n\t var schemaObj = _addSchema(schema);\r\n\t return schemaObj.validate || _compile(schemaObj);\r\n\t }\r\n\r\n\r\n\t /**\r\n\t * Adds schema to the instance.\r\n\t * @param {Object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored.\r\n\t * @param {String} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\r\n\t * @param {Boolean} _skipValidation true to skip schema validation. Used internally, option validateSchema should be used instead.\r\n\t * @param {Boolean} _meta true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\r\n\t */\r\n\t function addSchema(schema, key, _skipValidation, _meta) {\r\n\t if (Array.isArray(schema)){\r\n\t for (var i=0; i<schema.length; i++) addSchema(schema[i], undefined, _skipValidation, _meta);\r\n\t return;\r\n\t }\r\n\t // can key/id have # inside?\r\n\t key = resolve.normalizeId(key || schema.id);\r\n\t checkUnique(key);\r\n\t var schemaObj = self._schemas[key] = _addSchema(schema, _skipValidation, true);\r\n\t schemaObj.meta = _meta;\r\n\t }\r\n\r\n\r\n\t /**\r\n\t * Add schema that will be used to validate other schemas\r\n\t * options in META_IGNORE_OPTIONS are alway set to false\r\n\t * @param {Object} schema schema object\r\n\t * @param {String} key optional schema key\r\n\t * @param {Boolean} skipValidation true to skip schema validation, can be used to override validateSchema option for meta-schema\r\n\t */\r\n\t function addMetaSchema(schema, key, skipValidation) {\r\n\t addSchema(schema, key, skipValidation, true);\r\n\t }\r\n\r\n\r\n\t /**\r\n\t * Validate schema\r\n\t * @param {Object} schema schema to validate\r\n\t * @param {Boolean} throwOrLogError pass true to throw (or log) an error if invalid\r\n\t * @return {Boolean} true if schema is valid\r\n\t */\r\n\t function validateSchema(schema, throwOrLogError) {\r\n\t var $schema = schema.$schema || self._opts.defaultMeta || defaultMeta();\r\n\t var currentUriFormat = self._formats.uri;\r\n\t self._formats.uri = typeof currentUriFormat == 'function'\r\n\t ? SCHEMA_URI_FORMAT_FUNC\r\n\t : SCHEMA_URI_FORMAT;\r\n\t var valid = validate($schema, schema);\r\n\t self._formats.uri = currentUriFormat;\r\n\t if (!valid && throwOrLogError) {\r\n\t var message = 'schema is invalid:' + errorsText();\r\n\t if (self._opts.validateSchema == 'log') console.error(message);\r\n\t else throw new Error(message);\r\n\t }\r\n\t return valid;\r\n\t }\r\n\r\n\r\n\t function defaultMeta() {\r\n\t var meta = self._opts.meta;\r\n\t self._opts.defaultMeta = typeof meta == 'object'\r\n\t ? meta.id || meta\r\n\t : self._opts.v5\r\n\t ? v5.META_SCHEMA_ID\r\n\t : META_SCHEMA_ID;\r\n\t return self._opts.defaultMeta;\r\n\t }\r\n\r\n\r\n\t /**\r\n\t * Get compiled schema from the instance by `key` or `ref`.\r\n\t * @param {String} keyRef `key` that was passed to `addSchema` or full schema reference (`schema.id` or resolved id).\r\n\t * @return {Function} schema validating function (with property `schema`).\r\n\t */\r\n\t function getSchema(keyRef) {\r\n\t var schemaObj = _getSchemaObj(keyRef);\r\n\t switch (typeof schemaObj) {\r\n\t case 'object': return schemaObj.validate || _compile(schemaObj);\r\n\t case 'string': return getSchema(schemaObj);\r\n\t }\r\n\t }\r\n\r\n\r\n\t function _getSchemaObj(keyRef) {\r\n\t keyRef = resolve.normalizeId(keyRef);\r\n\t return self._schemas[keyRef] || self._refs[keyRef];\r\n\t }\r\n\r\n\r\n\t /**\r\n\t * Remove cached schema(s).\r\n\t * If no parameter is passed all schemas but meta-schemas are removed.\r\n\t * If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.\r\n\t * Even if schema is referenced by other schemas it still can be removed as other schemas have local references.\r\n\t * @param {String|Object|RegExp} schemaKeyRef key, ref, pattern to match key/ref or schema object\r\n\t */\r\n\t function removeSchema(schemaKeyRef) {\r\n\t switch (typeof schemaKeyRef) {\r\n\t case 'undefined':\r\n\t _removeAllSchemas(self._schemas);\r\n\t _removeAllSchemas(self._refs);\r\n\t self._cache.clear();\r\n\t return;\r\n\t case 'string':\r\n\t var schemaObj = _getSchemaObj(schemaKeyRef);\r\n\t if (schemaObj) self._cache.del(schemaObj.jsonStr);\r\n\t delete self._schemas[schemaKeyRef];\r\n\t delete self._refs[schemaKeyRef];\r\n\t return;\r\n\t case 'object':\r\n\t if (schemaKeyRef instanceof RegExp) {\r\n\t _removeAllSchemas(self._schemas, schemaKeyRef);\r\n\t _removeAllSchemas(self._refs, schemaKeyRef);\r\n\t return;\r\n\t }\r\n\t var jsonStr = stableStringify(schemaKeyRef);\r\n\t self._cache.del(jsonStr);\r\n\t var id = schemaKeyRef.id;\r\n\t if (id) {\r\n\t id = resolve.normalizeId(id);\r\n\t delete self._schemas[id];\r\n\t delete self._refs[id];\r\n\t }\r\n\t }\r\n\r\n\t }\r\n\r\n\r\n\t function _removeAllSchemas(schemas, regex) {\r\n\t for (var keyRef in schemas) {\r\n\t var schemaObj = schemas[keyRef];\r\n\t if (!schemaObj.meta && (!regex || regex.test(keyRef))) {\r\n\t self._cache.del(schemaObj.jsonStr);\r\n\t delete schemas[keyRef];\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\r\n\t function _addSchema(schema, skipValidation, shouldAddSchema) {\r\n\t if (typeof schema != 'object') throw new Error('schema should be object');\r\n\t var jsonStr = stableStringify(schema);\r\n\t var cached = self._cache.get(jsonStr);\r\n\t if (cached) return cached;\r\n\r\n\t shouldAddSchema = shouldAddSchema || self._opts.addUsedSchema !== false;\r\n\r\n\t var id = resolve.normalizeId(schema.id);\r\n\t if (id && shouldAddSchema) checkUnique(id);\r\n\r\n\t if (self._opts.validateSchema !== false && !skipValidation)\r\n\t validateSchema(schema, true);\r\n\r\n\t var localRefs = resolve.ids.call(self, schema);\r\n\r\n\t var schemaObj = new SchemaObject({\r\n\t id: id,\r\n\t schema: schema,\r\n\t localRefs: localRefs,\r\n\t jsonStr: jsonStr\r\n\t });\r\n\r\n\t if (id[0] != '#' && shouldAddSchema) self._refs[id] = schemaObj;\r\n\t self._cache.put(jsonStr, schemaObj);\r\n\r\n\t return schemaObj;\r\n\t }\r\n\r\n\r\n\t function _compile(schemaObj, root) {\r\n\t if (schemaObj.compiling) {\r\n\t schemaObj.validate = callValidate;\r\n\t callValidate.schema = schemaObj.schema;\r\n\t callValidate.errors = null;\r\n\t callValidate.root = root ? root : callValidate;\r\n\t if (schemaObj.schema.$async === true)\r\n\t callValidate.async = true;\r\n\t return callValidate;\r\n\t }\r\n\t schemaObj.compiling = true;\r\n\r\n\t var currentOpts;\r\n\t if (schemaObj.meta) {\r\n\t currentOpts = self._opts;\r\n\t self._opts = self._metaOpts;\r\n\t }\r\n\r\n\t var v;\r\n\t try { v = compileSchema.call(self, schemaObj.schema, root, schemaObj.localRefs); }\r\n\t finally {\r\n\t schemaObj.compiling = false;\r\n\t if (schemaObj.meta) self._opts = currentOpts;\r\n\t }\r\n\r\n\t schemaObj.validate = v;\r\n\t schemaObj.refs = v.refs;\r\n\t schemaObj.refVal = v.refVal;\r\n\t schemaObj.root = v.root;\r\n\t return v;\r\n\r\n\r\n\t function callValidate() {\r\n\t var _validate = schemaObj.validate;\r\n\t var result = _validate.apply(null, arguments);\r\n\t callValidate.errors = _validate.errors;\r\n\t return result;\r\n\t }\r\n\t }\r\n\r\n\r\n\t /**\r\n\t * Convert array of error message objects to string\r\n\t * @param {Array<Object>} errors optional array of validation errors, if not passed errors from the instance are used.\r\n\t * @param {Object} options optional options with properties `separator` and `dataVar`.\r\n\t * @return {String} human readable string with all errors descriptions\r\n\t */\r\n\t function errorsText(errors, options) {\r\n\t errors = errors || self.errors;\r\n\t if (!errors) return 'No errors';\r\n\t options = options || {};\r\n\t var separator = options.separator === undefined ? ', ' : options.separator;\r\n\t var dataVar = options.dataVar === undefined ? 'data' : options.dataVar;\r\n\r\n\t var text = '';\r\n\t for (var i=0; i<errors.length; i++) {\r\n\t var e = errors[i];\r\n\t if (e) text += dataVar + e.dataPath + ' ' + e.message + separator;\r\n\t }\r\n\t return text.slice(0, -separator.length);\r\n\t }\r\n\r\n\r\n\t /**\r\n\t * Add custom format\r\n\t * @param {String} name format name\r\n\t * @param {String|RegExp|Function} format string is converted to RegExp; function should return boolean (true when valid)\r\n\t */\r\n\t function addFormat(name, format) {\r\n\t if (typeof format == 'string') format = new RegExp(format);\r\n\t self._formats[name] = format;\r\n\t }\r\n\r\n\r\n\t function addInitialSchemas() {\r\n\t if (self._opts.meta !== false) {\r\n\t var metaSchema = __webpack_require__(50);\r\n\t addMetaSchema(metaSchema, META_SCHEMA_ID, true);\r\n\t self._refs['http://json-schema.org/schema'] = META_SCHEMA_ID;\r\n\t }\r\n\r\n\t var optsSchemas = self._opts.schemas;\r\n\t if (!optsSchemas) return;\r\n\t if (Array.isArray(optsSchemas)) addSchema(optsSchemas);\r\n\t else for (var key in optsSchemas) addSchema(optsSchemas[key], key);\r\n\t }\r\n\r\n\r\n\t function addInitialFormats() {\r\n\t for (var name in self._opts.formats) {\r\n\t var format = self._opts.formats[name];\r\n\t addFormat(name, format);\r\n\t }\r\n\t }\r\n\r\n\r\n\t function checkUnique(id) {\r\n\t if (self._schemas[id] || self._refs[id])\r\n\t throw new Error('schema with key or id \"' + id + '\" already exists');\r\n\t }\r\n\r\n\r\n\t function getMetaSchemaOptions() {\r\n\t var metaOpts = util.copy(self._opts);\r\n\t for (var i=0; i<META_IGNORE_OPTIONS.length; i++)\r\n\t delete metaOpts[META_IGNORE_OPTIONS[i]];\r\n\t return metaOpts;\r\n\t }\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 2 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar resolve = __webpack_require__(3)\r\n\t , util = __webpack_require__(11)\r\n\t , stableStringify = __webpack_require__(12)\r\n\t , async = __webpack_require__(17);\r\n\r\n\tvar beautify = (function() { try { return __webpack_require__(!(function webpackMissingModule() { var e = new Error(\"Cannot find module \\\"js-beautify\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e; }())).js_beautify; } catch(e) {/*empty*/} })();\r\n\r\n\tvar validateGenerator = __webpack_require__(18);\r\n\r\n\tmodule.exports = compile;\r\n\r\n\r\n\t/**\r\n\t * Compiles schema to validation function\r\n\t * @this Ajv\r\n\t * @param {Object} schema schema object\r\n\t * @param {Object} root object with information about the root schema for this schema\r\n\t * @param {Object} localRefs the hash of local references inside the schema (created by resolve.id), used for inline resolution\r\n\t * @param {String} baseId base ID for IDs in the schema\r\n\t * @return {Function} validation function\r\n\t */\r\n\tfunction compile(schema, root, localRefs, baseId) {\r\n\t /* jshint validthis: true, evil: true */\r\n\t /* eslint no-shadow: 0 */\r\n\t var self = this\r\n\t , opts = this._opts\r\n\t , refVal = [ undefined ]\r\n\t , refs = {}\r\n\t , patterns = []\r\n\t , patternsHash = {}\r\n\t , defaults = []\r\n\t , defaultsHash = {}\r\n\t , customRules = [];\r\n\r\n\t root = root || { schema: schema, refVal: refVal, refs: refs };\r\n\r\n\t var formats = this._formats;\r\n\t var RULES = this.RULES;\r\n\r\n\t return localCompile(schema, root, localRefs, baseId);\r\n\r\n\r\n\t function localCompile(_schema, _root, localRefs, baseId) {\r\n\t var isRoot = !_root || (_root && _root.schema == _schema);\r\n\t if (_root.schema != root.schema)\r\n\t return compile.call(self, _schema, _root, localRefs, baseId);\r\n\r\n\t var $async = _schema.$async === true;\r\n\t if ($async && !opts.transpile) async.setup(opts);\r\n\r\n\t var sourceCode = validateGenerator({\r\n\t isTop: true,\r\n\t schema: _schema,\r\n\t isRoot: isRoot,\r\n\t baseId: baseId,\r\n\t root: _root,\r\n\t schemaPath: '',\r\n\t errSchemaPath: '#',\r\n\t errorPath: '\"\"',\r\n\t RULES: RULES,\r\n\t validate: validateGenerator,\r\n\t util: util,\r\n\t resolve: resolve,\r\n\t resolveRef: resolveRef,\r\n\t usePattern: usePattern,\r\n\t useDefault: useDefault,\r\n\t useCustomRule: useCustomRule,\r\n\t opts: opts,\r\n\t formats: formats,\r\n\t self: self\r\n\t });\r\n\r\n\t sourceCode = vars(refVal, refValCode) + vars(patterns, patternCode)\r\n\t + vars(defaults, defaultCode) + vars(customRules, customRuleCode)\r\n\t + sourceCode;\r\n\r\n\t if (opts.beautify) {\r\n\t /* istanbul ignore else */\r\n\t if (beautify) sourceCode = beautify(sourceCode, opts.beautify);\r\n\t else console.error('\"npm install js-beautify\" to use beautify option');\r\n\t }\r\n\t // console.log('\\n\\n\\n *** \\n', sourceCode);\r\n\t var validate, validateCode\r\n\t , transpile = opts._transpileFunc;\r\n\t try {\r\n\t validateCode = $async && transpile\r\n\t ? transpile(sourceCode)\r\n\t : sourceCode;\r\n\t eval(validateCode);\r\n\t refVal[0] = validate;\r\n\t } catch(e) {\r\n\t console.error('Error compiling schema, function code:', validateCode);\r\n\t throw e;\r\n\t }\r\n\r\n\t validate.schema = _schema;\r\n\t validate.errors = null;\r\n\t validate.refs = refs;\r\n\t validate.refVal = refVal;\r\n\t validate.root = isRoot ? validate : _root;\r\n\t if ($async) validate.async = true;\r\n\t validate.sourceCode = sourceCode;\r\n\r\n\t return validate;\r\n\t }\r\n\r\n\t function resolveRef(baseId, ref, isRoot) {\r\n\t ref = resolve.url(baseId, ref);\r\n\t var refIndex = refs[ref];\r\n\t var _refVal, refCode;\r\n\t if (refIndex !== undefined) {\r\n\t _refVal = refVal[refIndex];\r\n\t refCode = 'refVal[' + refIndex + ']';\r\n\t return resolvedRef(_refVal, refCode);\r\n\t }\r\n\t if (!isRoot) {\r\n\t var rootRefId = root.refs[ref];\r\n\t if (rootRefId !== undefined) {\r\n\t _refVal = root.refVal[rootRefId];\r\n\t refCode = addLocalRef(ref, _refVal);\r\n\t return resolvedRef(_refVal, refCode);\r\n\t }\r\n\t }\r\n\r\n\t refCode = addLocalRef(ref);\r\n\t var v = resolve.call(self, localCompile, root, ref);\r\n\t if (!v) {\r\n\t var localSchema = localRefs && localRefs[ref];\r\n\t if (localSchema) {\r\n\t v = resolve.inlineRef(localSchema, opts.inlineRefs)\r\n\t ? localSchema\r\n\t : compile.call(self, localSchema, root, localRefs, baseId);\r\n\t }\r\n\t }\r\n\r\n\t if (v) {\r\n\t replaceLocalRef(ref, v);\r\n\t return resolvedRef(v, refCode);\r\n\t }\r\n\t }\r\n\r\n\t function addLocalRef(ref, v) {\r\n\t var refId = refVal.length;\r\n\t refVal[refId] = v;\r\n\t refs[ref] = refId;\r\n\t return 'refVal' + refId;\r\n\t }\r\n\r\n\t function replaceLocalRef(ref, v) {\r\n\t var refId = refs[ref];\r\n\t refVal[refId] = v;\r\n\t }\r\n\r\n\t function resolvedRef(refVal, code) {\r\n\t return typeof refVal == 'object'\r\n\t ? { code: code, schema: refVal, inline: true }\r\n\t : { code: code, async: refVal && refVal.async };\r\n\t }\r\n\r\n\t function usePattern(regexStr) {\r\n\t var index = patternsHash[regexStr];\r\n\t if (index === undefined) {\r\n\t index = patternsHash[regexStr] = patterns.length;\r\n\t patterns[index] = regexStr;\r\n\t }\r\n\t return 'pattern' + index;\r\n\t }\r\n\r\n\t function useDefault(value) {\r\n\t switch (typeof value) {\r\n\t case 'boolean':\r\n\t case 'number':\r\n\t return '' + value;\r\n\t case 'string':\r\n\t return util.toQuotedString(value);\r\n\t case 'object':\r\n\t if (value === null) return 'null';\r\n\t var valueStr = stableStringify(value);\r\n\t var index = defaultsHash[valueStr];\r\n\t if (index === undefined) {\r\n\t index = defaultsHash[valueStr] = defaults.length;\r\n\t defaults[index] = value;\r\n\t }\r\n\t return 'default' + index;\r\n\t }\r\n\t }\r\n\r\n\t function useCustomRule(rule, schema, parentSchema, it) {\r\n\t var compile = rule.definition.compile\r\n\t , inline = rule.definition.inline\r\n\t , macro = rule.definition.macro;\r\n\r\n\t var validate;\r\n\t if (compile) {\r\n\t validate = compile.call(self, schema, parentSchema);\r\n\t } else if (macro) {\r\n\t validate = macro.call(self, schema, parentSchema);\r\n\t if (opts.validateSchema !== false) self.validateSchema(validate, true);\r\n\t } else if (inline) {\r\n\t validate = inline.call(self, it, rule.keyword, schema, parentSchema);\r\n\t } else {\r\n\t validate = rule.definition.validate;\r\n\t }\r\n\r\n\t var index = customRules.length;\r\n\t customRules[index] = validate;\r\n\r\n\t return {\r\n\t code: 'customRule' + index,\r\n\t validate: validate\r\n\t };\r\n\t }\r\n\t}\r\n\r\n\r\n\tfunction patternCode(i, patterns) {\r\n\t return 'var pattern' + i + ' = new RegExp(' + util.toQuotedString(patterns[i]) + ');';\r\n\t}\r\n\r\n\r\n\tfunction defaultCode(i) {\r\n\t return 'var default' + i + ' = defaults[' + i + '];';\r\n\t}\r\n\r\n\r\n\tfunction refValCode(i, refVal) {\r\n\t return refVal[i] ? 'var refVal' + i + ' = refVal[' + i + '];' : '';\r\n\t}\r\n\r\n\r\n\tfunction customRuleCode(i) {\r\n\t return 'var customRule' + i + ' = customRules[' + i + '];';\r\n\t}\r\n\r\n\r\n\tfunction vars(arr, statement) {\r\n\t if (!arr.length) return '';\r\n\t var code = '';\r\n\t for (var i=0; i<arr.length; i++)\r\n\t code += statement(i, arr);\r\n\t return code;\r\n\t}\r\n\r\n\r\n\t/*eslint-disable no-unused-vars */\r\n\r\n\t/**\r\n\t * Functions below are used inside compiled validations function\r\n\t */\r\n\r\n\tvar co = __webpack_require__(19);\r\n\r\n\tvar ucs2length = util.ucs2length;\r\n\r\n\tvar equal = __webpack_require__(10);\r\n\r\n\t// this error is thrown by async schemas to return validation errors via exception\r\n\tvar ValidationError = __webpack_require__(20);\r\n\r\n\t/*eslint-enable no-unused-vars */\r\n\r\n\r\n/***/ },\r\n/* 3 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar url = __webpack_require__(4)\r\n\t , equal = __webpack_require__(10)\r\n\t , util = __webpack_require__(11)\r\n\t , SchemaObject = __webpack_require__(16);\r\n\r\n\tmodule.exports = resolve;\r\n\r\n\tresolve.normalizeId = normalizeId;\r\n\tresolve.fullPath = getFullPath;\r\n\tresolve.url = resolveUrl;\r\n\tresolve.ids = resolveIds;\r\n\tresolve.inlineRef = inlineRef;\r\n\r\n\t/**\r\n\t * [resolve and compile the references ($ref)]\r\n\t * @this Ajv\r\n\t * @param {Function} compile reference to schema compilation funciton (localCompile)\r\n\t * @param {Object} root object with information about the root schema for the current schema\r\n\t * @param {String} ref reference to resolve\r\n\t * @return {Object|Function} schema object (if the schema can be inlined) or validation function\r\n\t */\r\n\tfunction resolve(compile, root, ref) {\r\n\t /* jshint validthis: true */\r\n\t var refVal = this._refs[ref];\r\n\t if (typeof refVal == 'string') {\r\n\t if (this._refs[refVal]) refVal = this._refs[refVal];\r\n\t else return resolve.call(this, compile, root, refVal);\r\n\t }\r\n\r\n\t refVal = refVal || this._schemas[ref];\r\n\t if (refVal instanceof SchemaObject) {\r\n\t return inlineRef(refVal.schema, this._opts.inlineRefs)\r\n\t ? refVal.schema\r\n\t : refVal.validate || this._compile(refVal);\r\n\t }\r\n\r\n\t var res = _resolve.call(this, root, ref);\r\n\t var schema, v, baseId;\r\n\t if (res) {\r\n\t schema = res.schema;\r\n\t root = res.root;\r\n\t baseId = res.baseId;\r\n\t }\r\n\r\n\t if (schema instanceof SchemaObject) {\r\n\t v = schema.validate || compile.call(this, schema.schema, root, undefined, baseId);\r\n\t } else if (schema) {\r\n\t v = inlineRef(schema, this._opts.inlineRefs)\r\n\t ? schema\r\n\t : compile.call(this, schema, root, undefined, baseId);\r\n\t }\r\n\r\n\t return v;\r\n\t}\r\n\r\n\r\n\t/* @this Ajv */\r\n\tfunction _resolve(root, ref) {\r\n\t /* jshint validthis: true */\r\n\t var p = url.parse(ref, false, true)\r\n\t , refPath = _getFullPath(p)\r\n\t , baseId = getFullPath(root.schema.id);\r\n\t if (refPath !== baseId) {\r\n\t var id = normalizeId(refPath);\r\n\t var refVal = this._refs[id];\r\n\t if (typeof refVal == 'string') {\r\n\t return resolveRecursive.call(this, root, refVal, p);\r\n\t } else if (refVal instanceof SchemaObject) {\r\n\t if (!refVal.validate) this._compile(refVal);\r\n\t root = refVal;\r\n\t } else {\r\n\t refVal = this._schemas[id];\r\n\t if (refVal instanceof SchemaObject) {\r\n\t if (!refVal.validate) this._compile(refVal);\r\n\t if (id == normalizeId(ref))\r\n\t return { schema: refVal, root: root, baseId: baseId };\r\n\t root = refVal;\r\n\t }\r\n\t }\r\n\t if (!root.schema) return;\r\n\t baseId = getFullPath(root.schema.id);\r\n\t }\r\n\t return getJsonPointer.call(this, p, baseId, root.schema, root);\r\n\t}\r\n\r\n\r\n\t/* @this Ajv */\r\n\tfunction resolveRecursive(root, ref, parsedRef) {\r\n\t /* jshint validthis: true */\r\n\t var res = _resolve.call(this, root, ref);\r\n\t if (res) {\r\n\t var schema = res.schema;\r\n\t var baseId = res.baseId;\r\n\t root = res.root;\r\n\t if (schema.id) baseId = resolveUrl(baseId, schema.id);\r\n\t return getJsonPointer.call(this, parsedRef, baseId, schema, root);\r\n\t }\r\n\t}\r\n\r\n\r\n\tvar PREVENT_SCOPE_CHANGE = util.toHash(['properties', 'patternProperties', 'enum', 'dependencies', 'definitions']);\r\n\t/* @this Ajv */\r\n\tfunction getJsonPointer(parsedRef, baseId, schema, root) {\r\n\t /* jshint validthis: true */\r\n\t parsedRef.hash = parsedRef.hash || '';\r\n\t if (parsedRef.hash.slice(0,2) != '#/') return;\r\n\t var parts = parsedRef.hash.split('/');\r\n\r\n\t for (var i = 1; i < parts.length; i++) {\r\n\t var part = parts[i];\r\n\t if (part) {\r\n\t part = util.unescapeFragment(part);\r\n\t schema = schema[part];\r\n\t if (!schema) break;\r\n\t if (schema.id && !PREVENT_SCOPE_CHANGE[part]) baseId = resolveUrl(baseId, schema.id);\r\n\t if (schema.$ref) {\r\n\t var $ref = resolveUrl(baseId, schema.$ref);\r\n\t var res = _resolve.call(this, root, $ref);\r\n\t if (res) {\r\n\t schema = res.schema;\r\n\t root = res.root;\r\n\t baseId = res.baseId;\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t if (schema && schema != root.schema)\r\n\t return { schema: schema, root: root, baseId: baseId };\r\n\t}\r\n\r\n\r\n\tvar SIMPLE_INLINED = util.toHash([\r\n\t 'type', 'format', 'pattern',\r\n\t 'maxLength', 'minLength',\r\n\t 'maxProperties', 'minProperties',\r\n\t 'maxItems', 'minItems',\r\n\t 'maximum', 'minimum',\r\n\t 'uniqueItems', 'multipleOf',\r\n\t 'required', 'enum'\r\n\t]);\r\n\tfunction inlineRef(schema, limit) {\r\n\t if (limit === false) return false;\r\n\t if (limit === undefined || limit === true) return checkNoRef(schema);\r\n\t else if (limit) return countKeys(schema) <= limit;\r\n\t}\r\n\r\n\r\n\tfunction checkNoRef(schema) {\r\n\t var item;\r\n\t if (Array.isArray(schema)) {\r\n\t for (var i=0; i<schema.length; i++) {\r\n\t item = schema[i];\r\n\t if (typeof item == 'object' && !checkNoRef(item)) return false;\r\n\t }\r\n\t } else {\r\n\t for (var key in schema) {\r\n\t if (key == '$ref') return false;\r\n\t item = schema[key];\r\n\t if (typeof item == 'object' && !checkNoRef(item)) return false;\r\n\t }\r\n\t }\r\n\t return true;\r\n\t}\r\n\r\n\r\n\tfunction countKeys(schema) {\r\n\t var count = 0, item;\r\n\t if (Array.isArray(schema)) {\r\n\t for (var i=0; i<schema.length; i++) {\r\n\t item = schema[i];\r\n\t if (typeof item == 'object') count += countKeys(item);\r\n\t if (count == Infinity) return Infinity;\r\n\t }\r\n\t } else {\r\n\t for (var key in schema) {\r\n\t if (key == '$ref') return Infinity;\r\n\t if (SIMPLE_INLINED[key]) {\r\n\t count++;\r\n\t } else {\r\n\t item = schema[key];\r\n\t if (typeof item == 'object') count += countKeys(item) + 1;\r\n\t if (count == Infinity) return Infinity;\r\n\t }\r\n\t }\r\n\t }\r\n\t return count;\r\n\t}\r\n\r\n\r\n\tfunction getFullPath(id, normalize) {\r\n\t if (normalize !== false) id = normalizeId(id);\r\n\t var p = url.parse(id, false, true);\r\n\t return _getFullPath(p);\r\n\t}\r\n\r\n\r\n\tfunction _getFullPath(p) {\r\n\t return (p.protocol||'') + (p.protocol?'//':'') + (p.host||'') + (p.path||'') + '#';\r\n\t}\r\n\r\n\r\n\tvar TRAILING_SLASH_HASH = /#\\/?$/;\r\n\tfunction normalizeId(id) {\r\n\t return id ? id.replace(TRAILING_SLASH_HASH, '') : '';\r\n\t}\r\n\r\n\r\n\tfunction resolveUrl(baseId, id) {\r\n\t id = normalizeId(id);\r\n\t return url.resolve(baseId, id);\r\n\t}\r\n\r\n\r\n\t/* @this Ajv */\r\n\tfunction resolveIds(schema) {\r\n\t /* eslint no-shadow: 0 */\r\n\t /* jshint validthis: true */\r\n\t var id = normalizeId(schema.id);\r\n\t var localRefs = {};\r\n\t _resolveIds.call(this, schema, getFullPath(id, false), id);\r\n\t return localRefs;\r\n\r\n\t function _resolveIds(schema, fullPath, baseId) {\r\n\t /* jshint validthis: true */\r\n\t if (Array.isArray(schema)) {\r\n\t for (var i=0; i<schema.length; i++)\r\n\t _resolveIds.call(this, schema[i], fullPath+'/'+i, baseId);\r\n\t } else if (schema && typeof schema == 'object') {\r\n\t if (typeof schema.id == 'string') {\r\n\t var id = baseId = baseId\r\n\t ? url.resolve(baseId, schema.id)\r\n\t : schema.id;\r\n\t id = normalizeId(id);\r\n\r\n\t var refVal = this._refs[id];\r\n\t if (typeof refVal == 'string') refVal = this._refs[refVal];\r\n\t if (refVal && refVal.schema) {\r\n\t if (!equal(schema, refVal.schema))\r\n\t throw new Error('id \"' + id + '\" resolves to more than one schema');\r\n\t } else if (id != normalizeId(fullPath)) {\r\n\t if (id[0] == '#') {\r\n\t if (localRefs[id] && !equal(schema, localRefs[id]))\r\n\t throw new Error('id \"' + id + '\" resolves to more than one schema');\r\n\t localRefs[id] = schema;\r\n\t } else {\r\n\t this._refs[id] = fullPath;\r\n\t }\r\n\t }\r\n\t }\r\n\t for (var key in schema)\r\n\t _resolveIds.call(this, schema[key], fullPath+'/'+util.escapeFragment(key), baseId);\r\n\t }\r\n\t }\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 4 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t// Copyright Joyent, Inc. and other Node contributors.\r\n\t//\r\n\t// Permission is hereby granted, free of charge, to any person obtaining a\r\n\t// copy of this software and associated documentation files (the\r\n\t// \"Software\"), to deal in the Software without restriction, including\r\n\t// without limitation the rights to use, copy, modify, merge, publish,\r\n\t// distribute, sublicense, and/or sell copies of the Software, and to permit\r\n\t// persons to whom the Software is furnished to do so, subject to the\r\n\t// following conditions:\r\n\t//\r\n\t// The above copyright notice and this permission notice shall be included\r\n\t// in all copies or substantial portions of the Software.\r\n\t//\r\n\t// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r\n\t// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n\t// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\r\n\t// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\r\n\t// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\r\n\t// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\n\t// USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n\tvar punycode = __webpack_require__(5);\r\n\r\n\texports.parse = urlParse;\r\n\texports.resolve = urlResolve;\r\n\texports.resolveObject = urlResolveObject;\r\n\texports.format = urlFormat;\r\n\r\n\texports.Url = Url;\r\n\r\n\tfunction Url() {\r\n\t this.protocol = null;\r\n\t this.slashes = null;\r\n\t this.auth = null;\r\n\t this.host = null;\r\n\t this.port = null;\r\n\t this.hostname = null;\r\n\t this.hash = null;\r\n\t this.search = null;\r\n\t this.query = null;\r\n\t this.pathname = null;\r\n\t this.path = null;\r\n\t this.href = null;\r\n\t}\r\n\r\n\t// Reference: RFC 3986, RFC 1808, RFC 2396\r\n\r\n\t// define these here so at least they only have to be\r\n\t// compiled once on the first module load.\r\n\tvar protocolPattern = /^([a-z0-9.+-]+:)/i,\r\n\t portPattern = /:[0-9]*$/,\r\n\r\n\t // RFC 2396: characters reserved for delimiting URLs.\r\n\t // We actually just auto-escape these.\r\n\t delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\r\n\r\n\t // RFC 2396: characters not allowed for various reasons.\r\n\t unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\r\n\r\n\t // Allowed by RFCs, but cause of XSS attacks. Always escape these.\r\n\t autoEscape = ['\\''].concat(unwise),\r\n\t // Characters that are never ever allowed in a hostname.\r\n\t // Note that any invalid chars are also handled, but these\r\n\t // are the ones that are *expected* to be seen, so we fast-path\r\n\t // them.\r\n\t nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\r\n\t hostEndingChars = ['/', '?', '#'],\r\n\t hostnameMaxLen = 255,\r\n\t hostnamePartPattern = /^[a-z0-9A-Z_-]{0,63}$/,\r\n\t hostnamePartStart = /^([a-z0-9A-Z_-]{0,63})(.*)$/,\r\n\t // protocols that can allow \"unsafe\" and \"unwise\" chars.\r\n\t unsafeProtocol = {\r\n\t 'javascript': true,\r\n\t 'javascript:': true\r\n\t },\r\n\t // protocols that never have a hostname.\r\n\t hostlessProtocol = {\r\n\t 'javascript': true,\r\n\t 'javascript:': true\r\n\t },\r\n\t // protocols that always contain a // bit.\r\n\t slashedProtocol = {\r\n\t 'http': true,\r\n\t 'https': true,\r\n\t 'ftp': true,\r\n\t 'gopher': true,\r\n\t 'file': true,\r\n\t 'http:': true,\r\n\t 'https:': true,\r\n\t 'ftp:': true,\r\n\t 'gopher:': true,\r\n\t 'file:': true\r\n\t },\r\n\t querystring = __webpack_require__(7);\r\n\r\n\tfunction urlParse(url, parseQueryString, slashesDenoteHost) {\r\n\t if (url && isObject(url) && url instanceof Url) return url;\r\n\r\n\t var u = new Url;\r\n\t u.parse(url, parseQueryString, slashesDenoteHost);\r\n\t return u;\r\n\t}\r\n\r\n\tUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\r\n\t if (!isString(url)) {\r\n\t throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\r\n\t }\r\n\r\n\t var rest = url;\r\n\r\n\t // trim before proceeding.\r\n\t // This is to support parse stuff like \" http://foo.com \\n\"\r\n\t rest = rest.trim();\r\n\r\n\t var proto = protocolPattern.exec(rest);\r\n\t if (proto) {\r\n\t proto = proto[0];\r\n\t var lowerProto = proto.toLowerCase();\r\n\t this.protocol = lowerProto;\r\n\t rest = rest.substr(proto.length);\r\n\t }\r\n\r\n\t // figure out if it's got a host\r\n\t // user@server is *always* interpreted as a hostname, and url\r\n\t // resolution will treat //foo/bar as host=foo,path=bar because that's\r\n\t // how the browser resolves relative URLs.\r\n\t if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\r\n\t var slashes = rest.substr(0, 2) === '//';\r\n\t if (slashes && !(proto && hostlessProtocol[proto])) {\r\n\t rest = rest.substr(2);\r\n\t this.slashes = true;\r\n\t }\r\n\t }\r\n\r\n\t if (!hostlessProtocol[proto] &&\r\n\t (slashes || (proto && !slashedProtocol[proto]))) {\r\n\r\n\t // there's a hostname.\r\n\t // the first instance of /, ?, ;, or # ends the host.\r\n\t //\r\n\t // If there is an @ in the hostname, then non-host chars *are* allowed\r\n\t // to the left of the last @ sign, unless some host-ending character\r\n\t // comes *before* the @-sign.\r\n\t // URLs are obnoxious.\r\n\t //\r\n\t // ex:\r\n\t // http://a@b@c/ => user:a@b host:c\r\n\t // http://a@b?@c => user:a host:c path:/?@c\r\n\r\n\t // v0.12 TODO(isaacs): This is not quite how Chrome does things.\r\n\t // Review our test case against browsers more comprehensively.\r\n\r\n\t // find the first instance of any hostEndingChars\r\n\t var hostEnd = -1;\r\n\t for (var i = 0; i < hostEndingChars.length; i++) {\r\n\t var hec = rest.indexOf(hostEndingChars[i]);\r\n\t if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\r\n\t hostEnd = hec;\r\n\t }\r\n\r\n\t // at this point, either we have an explicit point where the\r\n\t // auth portion cannot go past, or the last @ char is the decider.\r\n\t var auth, atSign;\r\n\t if (hostEnd === -1) {\r\n\t // atSign can be anywhere.\r\n\t atSign = rest.lastIndexOf('@');\r\n\t } else {\r\n\t // atSign must be in auth portion.\r\n\t // http://a@b/c@d => host:b auth:a path:/c@d\r\n\t atSign = rest.lastIndexOf('@', hostEnd);\r\n\t }\r\n\r\n\t // Now we have a portion which is definitely the auth.\r\n\t // Pull that off.\r\n\t if (atSign !== -1) {\r\n\t auth = rest.slice(0, atSign);\r\n\t rest = rest.slice(atSign + 1);\r\n\t this.auth = decodeURIComponent(auth);\r\n\t }\r\n\r\n\t // the host is the remaining to the left of the first non-host char\r\n\t hostEnd = -1;\r\n\t for (var i = 0; i < nonHostChars.length; i++) {\r\n\t var hec = rest.indexOf(nonHostChars[i]);\r\n\t if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\r\n\t hostEnd = hec;\r\n\t }\r\n\t // if we still have not hit it, then the entire thing is a host.\r\n\t if (hostEnd === -1)\r\n\t hostEnd = rest.length;\r\n\r\n\t this.host = rest.slice(0, hostEnd);\r\n\t rest = rest.slice(hostEnd);\r\n\r\n\t // pull out port.\r\n\t this.parseHost();\r\n\r\n\t // we've indicated that there is a hostname,\r\n\t // so even if it's empty, it has to be present.\r\n\t this.hostname = this.hostname || '';\r\n\r\n\t // if hostname begins with [ and ends with ]\r\n\t // assume that it's an IPv6 address.\r\n\t var ipv6Hostname = this.hostname[0] === '[' &&\r\n\t this.hostname[this.hostname.length - 1] === ']';\r\n\r\n\t // validate a little.\r\n\t if (!ipv6Hostname) {\r\n\t var hostparts = this.hostname.split(/\\./);\r\n\t for (var i = 0, l = hostparts.length; i < l; i++) {\r\n\t var part = hostparts[i];\r\n\t if (!part) continue;\r\n\t if (!part.match(hostnamePartPattern)) {\r\n\t var newpart = '';\r\n\t for (var j = 0, k = part.length; j < k; j++) {\r\n\t if (part.charCodeAt(j) > 127) {\r\n\t // we replace non-ASCII char with a temporary placeholder\r\n\t // we need this to make sure size of hostname is not\r\n\t // broken by replacing non-ASCII by nothing\r\n\t newpart += 'x';\r\n\t } else {\r\n\t newpart += part[j];\r\n\t }\r\n\t }\r\n\t // we test again with ASCII char only\r\n\t if (!newpart.match(hostnamePartPattern)) {\r\n\t var validParts = hostparts.slice(0, i);\r\n\t var notHost = hostparts.slice(i + 1);\r\n\t var bit = part.match(hostnamePartStart);\r\n\t if (bit) {\r\n\t validParts.push(bit[1]);\r\n\t notHost.unshift(bit[2]);\r\n\t }\r\n\t if (notHost.length) {\r\n\t rest = '/' + notHost.join('.') + rest;\r\n\t }\r\n\t this.hostname = validParts.join('.');\r\n\t break;\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t if (this.hostname.length > hostnameMaxLen) {\r\n\t this.hostname = '';\r\n\t } else {\r\n\t // hostnames are always lower case.\r\n\t this.hostname = this.hostname.toLowerCase();\r\n\t }\r\n\r\n\t if (!ipv6Hostname) {\r\n\t // IDNA Support: Returns a puny coded representation of \"domain\".\r\n\t // It only converts the part of the domain name that\r\n\t // has non ASCII characters. I.e. it dosent matter if\r\n\t // you call it with a domain that already is in ASCII.\r\n\t var domainArray = this.hostname.split('.');\r\n\t var newOut = [];\r\n\t for (var i = 0; i < domainArray.length; ++i) {\r\n\t var s = domainArray[i];\r\n\t newOut.push(s.match(/[^A-Za-z0-9_-]/) ?\r\n\t 'xn--' + punycode.encode(s) : s);\r\n\t }\r\n\t this.hostname = newOut.join('.');\r\n\t }\r\n\r\n\t var p = this.port ? ':' + this.port : '';\r\n\t var h = this.hostname || '';\r\n\t this.host = h + p;\r\n\t this.href += this.host;\r\n\r\n\t // strip [ and ] from the hostname\r\n\t // the host field still retains them, though\r\n\t if (ipv6Hostname) {\r\n\t this.hostname = this.hostname.substr(1, this.hostname.length - 2);\r\n\t if (rest[0] !== '/') {\r\n\t rest = '/' + rest;\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t // now rest is set to the post-host stuff.\r\n\t // chop off any delim chars.\r\n\t if (!unsafeProtocol[lowerProto]) {\r\n\r\n\t // First, make 100% sure that any \"autoEscape\" chars get\r\n\t // escaped, even if encodeURIComponent doesn't think they\r\n\t // need to be.\r\n\t for (var i = 0, l = autoEscape.length; i < l; i++) {\r\n\t var ae = autoEscape[i];\r\n\t var esc = encodeURIComponent(ae);\r\n\t if (esc === ae) {\r\n\t esc = escape(ae);\r\n\t }\r\n\t rest = rest.split(ae).join(esc);\r\n\t }\r\n\t }\r\n\r\n\r\n\t // chop off from the tail first.\r\n\t var hash = rest.indexOf('#');\r\n\t if (hash !== -1) {\r\n\t // got a fragment string.\r\n\t this.hash = rest.substr(hash);\r\n\t rest = rest.slice(0, hash);\r\n\t }\r\n\t var qm = rest.indexOf('?');\r\n\t if (qm !== -1) {\r\n\t this.search = rest.substr(qm);\r\n\t this.query = rest.substr(qm + 1);\r\n\t if (parseQueryString) {\r\n\t this.query = querystring.parse(this.query);\r\n\t }\r\n\t rest = rest.slice(0, qm);\r\n\t } else if (parseQueryString) {\r\n\t // no query string, but parseQueryString still requested\r\n\t this.search = '';\r\n\t this.query = {};\r\n\t }\r\n\t if (rest) this.pathname = rest;\r\n\t if (slashedProtocol[lowerProto] &&\r\n\t this.hostname && !this.pathname) {\r\n\t this.pathname = '/';\r\n\t }\r\n\r\n\t //to support http.request\r\n\t if (this.pathname || this.search) {\r\n\t var p = this.pathname || '';\r\n\t var s = this.search || '';\r\n\t this.path = p + s;\r\n\t }\r\n\r\n\t // finally, reconstruct the href based on what has been validated.\r\n\t this.href = this.format();\r\n\t return this;\r\n\t};\r\n\r\n\t// format a parsed object into a url string\r\n\tfunction urlFormat(obj) {\r\n\t // ensure it's an object, and not a string url.\r\n\t // If it's an obj, this is a no-op.\r\n\t // this way, you can call url_format() on strings\r\n\t // to clean up potentially wonky urls.\r\n\t if (isString(obj)) obj = urlParse(obj);\r\n\t if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\r\n\t return obj.format();\r\n\t}\r\n\r\n\tUrl.prototype.format = function() {\r\n\t var auth = this.auth || '';\r\n\t if (auth) {\r\n\t auth = encodeURIComponent(auth);\r\n\t auth = auth.replace(/%3A/i, ':');\r\n\t auth += '@';\r\n\t }\r\n\r\n\t var protocol = this.protocol || '',\r\n\t pathname = this.pathname || '',\r\n\t hash = this.hash || '',\r\n\t host = false,\r\n\t query = '';\r\n\r\n\t if (this.host) {\r\n\t host = auth + this.host;\r\n\t } else if (this.hostname) {\r\n\t host = auth + (this.hostname.indexOf(':') === -1 ?\r\n\t this.hostname :\r\n\t '[' + this.hostname + ']');\r\n\t if (this.port) {\r\n\t host += ':' + this.port;\r\n\t }\r\n\t }\r\n\r\n\t if (this.query &&\r\n\t isObject(this.query) &&\r\n\t Object.keys(this.query).length) {\r\n\t query = querystring.stringify(this.query);\r\n\t }\r\n\r\n\t var search = this.search || (query && ('?' + query)) || '';\r\n\r\n\t if (protocol && protocol.substr(-1) !== ':') protocol += ':';\r\n\r\n\t // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\r\n\t // unless they had them to begin with.\r\n\t if (this.slashes ||\r\n\t (!protocol || slashedProtocol[protocol]) && host !== false) {\r\n\t host = '//' + (host || '');\r\n\t if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\r\n\t } else if (!host) {\r\n\t host = '';\r\n\t }\r\n\r\n\t if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\r\n\t if (search && search.charAt(0) !== '?') search = '?' + search;\r\n\r\n\t pathname = pathname.replace(/[?#]/g, function(match) {\r\n\t return encodeURIComponent(match);\r\n\t });\r\n\t search = search.replace('#', '%23');\r\n\r\n\t return protocol + host + pathname + search + hash;\r\n\t};\r\n\r\n\tfunction urlResolve(source, relative) {\r\n\t return urlParse(source, false, true).resolve(relative);\r\n\t}\r\n\r\n\tUrl.prototype.resolve = function(relative) {\r\n\t return this.resolveObject(urlParse(relative, false, true)).format();\r\n\t};\r\n\r\n\tfunction urlResolveObject(source, relative) {\r\n\t if (!source) return relative;\r\n\t return urlParse(source, false, true).resolveObject(relative);\r\n\t}\r\n\r\n\tUrl.prototype.resolveObject = function(relative) {\r\n\t if (isString(relative)) {\r\n\t var rel = new Url();\r\n\t rel.parse(relative, false, true);\r\n\t relative = rel;\r\n\t }\r\n\r\n\t var result = new Url();\r\n\t Object.keys(this).forEach(function(k) {\r\n\t result[k] = this[k];\r\n\t }, this);\r\n\r\n\t // hash is always overridden, no matter what.\r\n\t // even href=\"\" will remove it.\r\n\t result.hash = relative.hash;\r\n\r\n\t // if the relative url is empty, then there's nothing left to do here.\r\n\t if (relative.href === '') {\r\n\t result.href = result.format();\r\n\t return result;\r\n\t }\r\n\r\n\t // hrefs like //foo/bar always cut to the protocol.\r\n\t if (relative.slashes && !relative.protocol) {\r\n\t // take everything except the protocol from relative\r\n\t Object.keys(relative).forEach(function(k) {\r\n\t if (k !== 'protocol')\r\n\t result[k] = relative[k];\r\n\t });\r\n\r\n\t //urlParse appends trailing / to urls like http://www.example.com\r\n\t if (slashedProtocol[result.protocol] &&\r\n\t result.hostname && !result.pathname) {\r\n\t result.path = result.pathname = '/';\r\n\t }\r\n\r\n\t result.href = result.format();\r\n\t return result;\r\n\t }\r\n\r\n\t if (relative.protocol && relative.protocol !== result.protocol) {\r\n\t // if it's a known url protocol, then changing\r\n\t // the protocol does weird things\r\n\t // first, if it's not file:, then we MUST have a host,\r\n\t // and if there was a path\r\n\t // to begin with, then we MUST have a path.\r\n\t // if it is file:, then the host is dropped,\r\n\t // because that's known to be hostless.\r\n\t // anything else is assumed to be absolute.\r\n\t if (!slashedProtocol[relative.protocol]) {\r\n\t Object.keys(relative).forEach(function(k) {\r\n\t result[k] = relative[k];\r\n\t });\r\n\t result.href = result.format();\r\n\t return result;\r\n\t }\r\n\r\n\t result.protocol = relative.protocol;\r\n\t if (!relative.host && !hostlessProtocol[relative.protocol]) {\r\n\t var relPath = (relative.pathname || '').split('/');\r\n\t while (relPath.length && !(relative.host = relPath.shift()));\r\n\t if (!relative.host) relative.host = '';\r\n\t if (!relative.hostname) relative.hostname = '';\r\n\t if (relPath[0] !== '') relPath.unshift('');\r\n\t if (relPath.length < 2) relPath.unshift('');\r\n\t result.pathname = relPath.join('/');\r\n\t } else {\r\n\t result.pathname = relative.pathname;\r\n\t }\r\n\t result.search = relative.search;\r\n\t result.query = relative.query;\r\n\t result.host = relative.host || '';\r\n\t result.auth = relative.auth;\r\n\t result.hostname = relative.hostname || relative.host;\r\n\t result.port = relative.port;\r\n\t // to support http.request\r\n\t if (result.pathname || result.search) {\r\n\t var p = result.pathname || '';\r\n\t var s = result.search || '';\r\n\t result.path = p + s;\r\n\t }\r\n\t result.slashes = result.slashes || relative.slashes;\r\n\t result.href = result.format();\r\n\t return result;\r\n\t }\r\n\r\n\t var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\r\n\t isRelAbs = (\r\n\t relative.host ||\r\n\t relative.pathname && relative.pathname.charAt(0) === '/'\r\n\t ),\r\n\t mustEndAbs = (isRelAbs || isSourceAbs ||\r\n\t (result.host && relative.pathname)),\r\n\t removeAllDots = mustEndAbs,\r\n\t srcPath = result.pathname && result.pathname.split('/') || [],\r\n\t relPath = relative.pathname && relative.pathname.split('/') || [],\r\n\t psychotic = result.protocol && !slashedProtocol[result.protocol];\r\n\r\n\t // if the url is a non-slashed url, then relative\r\n\t // links like ../.. should be able\r\n\t // to crawl up to the hostname, as well. This is strange.\r\n\t // result.protocol has already been set by now.\r\n\t // Later on, put the first path part into the host field.\r\n\t if (psychotic) {\r\n\t result.hostname = '';\r\n\t result.port = null;\r\n\t if (result.host) {\r\n\t if (srcPath[0] === '') srcPath[0] = result.host;\r\n\t else srcPath.unshift(result.host);\r\n\t }\r\n\t result.host = '';\r\n\t if (relative.protocol) {\r\n\t relative.hostname = null;\r\n\t relative.port = null;\r\n\t if (relative.host) {\r\n\t if (relPath[0] === '') relPath[0] = relative.host;\r\n\t else relPath.unshift(relative.host);\r\n\t }\r\n\t relative.host = null;\r\n\t }\r\n\t mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\r\n\t }\r\n\r\n\t if (isRelAbs) {\r\n\t // it's absolute.\r\n\t result.host = (relative.host || relative.host === '') ?\r\n\t relative.host : result.host;\r\n\t result.hostname = (relative.hostname || relative.hostname === '') ?\r\n\t relative.hostname : result.hostname;\r\n\t result.search = relative.search;\r\n\t result.query = relative.query;\r\n\t srcPath = relPath;\r\n\t // fall through to the dot-handling below.\r\n\t } else if (relPath.length) {\r\n\t // it's relative\r\n\t // throw away the existing file, and take the new path instead.\r\n\t if (!srcPath) srcPath = [];\r\n\t srcPath.pop();\r\n\t srcPath = srcPath.concat(relPath);\r\n\t result.search = relative.search;\r\n\t result.query = relative.query;\r\n\t } else if (!isNullOrUndefined(relative.search)) {\r\n\t // just pull out the search.\r\n\t // like href='?foo'.\r\n\t // Put this after the other two cases because it simplifies the booleans\r\n\t if (psychotic) {\r\n\t result.hostname = result.host = srcPath.shift();\r\n\t //occationaly the auth can get stuck only in host\r\n\t //this especialy happens in cases like\r\n\t //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\r\n\t var authInHost = result.host && result.host.indexOf('@') > 0 ?\r\n\t result.host.split('@') : false;\r\n\t if (authInHost) {\r\n\t result.auth = authInHost.shift();\r\n\t result.host = result.hostname = authInHost.shift();\r\n\t }\r\n\t }\r\n\t result.search = relative.search;\r\n\t result.query = relative.query;\r\n\t //to support http.request\r\n\t if (!isNull(result.pathname) || !isNull(result.search)) {\r\n\t result.path = (result.pathname ? result.pathname : '') +\r\n\t (result.search ? result.search : '');\r\n\t }\r\n\t result.href = result.format();\r\n\t return result;\r\n\t }\r\n\r\n\t if (!srcPath.length) {\r\n\t // no path at all. easy.\r\n\t // we've already handled the other stuff above.\r\n\t result.pathname = null;\r\n\t //to support http.request\r\n\t if (result.search) {\r\n\t result.path = '/' + result.search;\r\n\t } else {\r\n\t result.path = null;\r\n\t }\r\n\t result.href = result.format();\r\n\t return result;\r\n\t }\r\n\r\n\t // if a url ENDs in . or .., then it must get a trailing slash.\r\n\t // however, if it ends in anything else non-slashy,\r\n\t // then it must NOT get a trailing slash.\r\n\t var last = srcPath.slice(-1)[0];\r\n\t var hasTrailingSlash = (\r\n\t (result.host || relative.host) && (last === '.' || last === '..') ||\r\n\t last === '');\r\n\r\n\t // strip single dots, resolve double dots to parent dir\r\n\t // if the path tries to go above the root, `up` ends up > 0\r\n\t var up = 0;\r\n\t for (var i = srcPath.length; i >= 0; i--) {\r\n\t last = srcPath[i];\r\n\t if (last == '.') {\r\n\t srcPath.splice(i, 1);\r\n\t } else if (last === '..') {\r\n\t srcPath.splice(i, 1);\r\n\t up++;\r\n\t } else if (up) {\r\n\t srcPath.splice(i, 1);\r\n\t up--;\r\n\t }\r\n\t }\r\n\r\n\t // if the path is allowed to go above the root, restore leading ..s\r\n\t if (!mustEndAbs && !removeAllDots) {\r\n\t for (; up--; up) {\r\n\t srcPath.unshift('..');\r\n\t }\r\n\t }\r\n\r\n\t if (mustEndAbs && srcPath[0] !== '' &&\r\n\t (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\r\n\t srcPath.unshift('');\r\n\t }\r\n\r\n\t if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\r\n\t srcPath.push('');\r\n\t }\r\n\r\n\t var isAbsolute = srcPath[0] === '' ||\r\n\t (srcPath[0] && srcPath[0].charAt(0) === '/');\r\n\r\n\t // put the host back\r\n\t if (psychotic) {\r\n\t result.hostname = result.host = isAbsolute ? '' :\r\n\t srcPath.length ? srcPath.shift() : '';\r\n\t //occationaly the auth can get stuck only in host\r\n\t //this especialy happens in cases like\r\n\t //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\r\n\t var authInHost = result.host && result.host.indexOf('@') > 0 ?\r\n\t result.host.split('@') : false;\r\n\t if (authInHost) {\r\n\t result.auth = authInHost.shift();\r\n\t result.host = result.hostname = authInHost.shift();\r\n\t }\r\n\t }\r\n\r\n\t mustEndAbs = mustEndAbs || (result.host && srcPath.length);\r\n\r\n\t if (mustEndAbs && !isAbsolute) {\r\n\t srcPath.unshift('');\r\n\t }\r\n\r\n\t if (!srcPath.length) {\r\n\t result.pathname = null;\r\n\t result.path = null;\r\n\t } else {\r\n\t result.pathname = srcPath.join('/');\r\n\t }\r\n\r\n\t //to support request.http\r\n\t if (!isNull(result.pathname) || !isNull(result.search)) {\r\n\t result.path = (result.pathname ? result.pathname : '') +\r\n\t (result.search ? result.search : '');\r\n\t }\r\n\t result.auth = relative.auth || result.auth;\r\n\t result.slashes = result.slashes || relative.slashes;\r\n\t result.href = result.format();\r\n\t return result;\r\n\t};\r\n\r\n\tUrl.prototype.parseHost = function() {\r\n\t var host = this.host;\r\n\t var port = portPattern.exec(host);\r\n\t if (port) {\r\n\t port = port[0];\r\n\t if (port !== ':') {\r\n\t this.port = port.substr(1);\r\n\t }\r\n\t host = host.substr(0, host.length - port.length);\r\n\t }\r\n\t if (host) this.hostname = host;\r\n\t};\r\n\r\n\tfunction isString(arg) {\r\n\t return typeof arg === \"string\";\r\n\t}\r\n\r\n\tfunction isObject(arg) {\r\n\t return typeof arg === 'object' && arg !== null;\r\n\t}\r\n\r\n\tfunction isNull(arg) {\r\n\t return arg === null;\r\n\t}\r\n\tfunction isNullOrUndefined(arg) {\r\n\t return arg == null;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 5 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\tvar __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(module, global) {/*! https://mths.be/punycode v1.3.2 by @mathias */\r\n\t;(function(root) {\r\n\r\n\t\t/** Detect free variables */\r\n\t\tvar freeExports = typeof exports == 'object' && exports &&\r\n\t\t\t!exports.nodeType && exports;\r\n\t\tvar freeModule = typeof module == 'object' && module &&\r\n\t\t\t!module.nodeType && module;\r\n\t\tvar freeGlobal = typeof global == 'object' && global;\r\n\t\tif (\r\n\t\t\tfreeGlobal.global === freeGlobal ||\r\n\t\t\tfreeGlobal.window === freeGlobal ||\r\n\t\t\tfreeGlobal.self === freeGlobal\r\n\t\t) {\r\n\t\t\troot = freeGlobal;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * The `punycode` object.\r\n\t\t * @name punycode\r\n\t\t * @type Object\r\n\t\t */\r\n\t\tvar punycode,\r\n\r\n\t\t/** Highest positive signed 32-bit float value */\r\n\t\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\r\n\r\n\t\t/** Bootstring parameters */\r\n\t\tbase = 36,\r\n\t\ttMin = 1,\r\n\t\ttMax = 26,\r\n\t\tskew = 38,\r\n\t\tdamp = 700,\r\n\t\tinitialBias = 72,\r\n\t\tinitialN = 128, // 0x80\r\n\t\tdelimiter = '-', // '\\x2D'\r\n\r\n\t\t/** Regular expressions */\r\n\t\tregexPunycode = /^xn--/,\r\n\t\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\r\n\t\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\r\n\r\n\t\t/** Error messages */\r\n\t\terrors = {\r\n\t\t\t'overflow': 'Overflow: input needs wider integers to process',\r\n\t\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\r\n\t\t\t'invalid-input': 'Invalid input'\r\n\t\t},\r\n\r\n\t\t/** Convenience shortcuts */\r\n\t\tbaseMinusTMin = base - tMin,\r\n\t\tfloor = Math.floor,\r\n\t\tstringFromCharCode = String.fromCharCode,\r\n\r\n\t\t/** Temporary variable */\r\n\t\tkey;\r\n\r\n\t\t/*--------------------------------------------------------------------------*/\r\n\r\n\t\t/**\r\n\t\t * A generic error utility function.\r\n\t\t * @private\r\n\t\t * @param {String} type The error type.\r\n\t\t * @returns {Error} Throws a `RangeError` with the applicable error message.\r\n\t\t */\r\n\t\tfunction error(type) {\r\n\t\t\tthrow RangeError(errors[type]);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * A generic `Array#map` utility function.\r\n\t\t * @private\r\n\t\t * @param {Array} array The array to iterate over.\r\n\t\t * @param {Function} callback The function that gets called for every array\r\n\t\t * item.\r\n\t\t * @returns {Array} A new array of values returned by the callback function.\r\n\t\t */\r\n\t\tfunction map(array, fn) {\r\n\t\t\tvar length = array.length;\r\n\t\t\tvar result = [];\r\n\t\t\twhile (length--) {\r\n\t\t\t\tresult[length] = fn(array[length]);\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * A simple `Array#map`-like wrapper to work with domain name strings or email\r\n\t\t * addresses.\r\n\t\t * @private\r\n\t\t * @param {String} domain The domain name or email address.\r\n\t\t * @param {Function} callback The function that gets called for every\r\n\t\t * character.\r\n\t\t * @returns {Array} A new string of characters returned by the callback\r\n\t\t * function.\r\n\t\t */\r\n\t\tfunction mapDomain(string, fn) {\r\n\t\t\tvar parts = string.split('@');\r\n\t\t\tvar result = '';\r\n\t\t\tif (parts.length > 1) {\r\n\t\t\t\t// In email addresses, only the domain name should be punycoded. Leave\r\n\t\t\t\t// the local part (i.e. everything up to `@`) intact.\r\n\t\t\t\tresult = parts[0] + '@';\r\n\t\t\t\tstring = parts[1];\r\n\t\t\t}\r\n\t\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\r\n\t\t\tstring = string.replace(regexSeparators, '\\x2E');\r\n\t\t\tvar labels = string.split('.');\r\n\t\t\tvar encoded = map(labels, fn).join('.');\r\n\t\t\treturn result + encoded;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Creates an array containing the numeric code points of each Unicode\r\n\t\t * character in the string. While JavaScript uses UCS-2 internally,\r\n\t\t * this function will convert a pair of surrogate halves (each of which\r\n\t\t * UCS-2 exposes as separate characters) into a single code point,\r\n\t\t * matching UTF-16.\r\n\t\t * @see `punycode.ucs2.encode`\r\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\r\n\t\t * @memberOf punycode.ucs2\r\n\t\t * @name decode\r\n\t\t * @param {String} string The Unicode input string (UCS-2).\r\n\t\t * @returns {Array} The new array of code points.\r\n\t\t */\r\n\t\tfunction ucs2decode(string) {\r\n\t\t\tvar output = [],\r\n\t\t\t counter = 0,\r\n\t\t\t length = string.length,\r\n\t\t\t value,\r\n\t\t\t extra;\r\n\t\t\twhile (counter < length) {\r\n\t\t\t\tvalue = string.charCodeAt(counter++);\r\n\t\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\r\n\t\t\t\t\t// high surrogate, and there is a next character\r\n\t\t\t\t\textra = string.charCodeAt(counter++);\r\n\t\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\r\n\t\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\r\n\t\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\r\n\t\t\t\t\t\toutput.push(value);\r\n\t\t\t\t\t\tcounter--;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\toutput.push(value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn output;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Creates a string based on an array of numeric code points.\r\n\t\t * @see `punycode.ucs2.decode`\r\n\t\t * @memberOf punycode.ucs2\r\n\t\t * @name encode\r\n\t\t * @param {Array} codePoints The array of numeric code points.\r\n\t\t * @returns {String} The new Unicode string (UCS-2).\r\n\t\t */\r\n\t\tfunction ucs2encode(array) {\r\n\t\t\treturn map(array, function(value) {\r\n\t\t\t\tvar output = '';\r\n\t\t\t\tif (value > 0xFFFF) {\r\n\t\t\t\t\tvalue -= 0x10000;\r\n\t\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\r\n\t\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\r\n\t\t\t\t}\r\n\t\t\t\toutput += stringFromCharCode(value);\r\n\t\t\t\treturn output;\r\n\t\t\t}).join('');\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Converts a basic code point into a digit/integer.\r\n\t\t * @see `digitToBasic()`\r\n\t\t * @private\r\n\t\t * @param {Number} codePoint The basic numeric code point value.\r\n\t\t * @returns {Number} The numeric value of a basic code point (for use in\r\n\t\t * representing integers) in the range `0` to `base - 1`, or `base` if\r\n\t\t * the code point does not represent a value.\r\n\t\t */\r\n\t\tfunction basicToDigit(codePoint) {\r\n\t\t\tif (codePoint - 48 < 10) {\r\n\t\t\t\treturn codePoint - 22;\r\n\t\t\t}\r\n\t\t\tif (codePoint - 65 < 26) {\r\n\t\t\t\treturn codePoint - 65;\r\n\t\t\t}\r\n\t\t\tif (codePoint - 97 < 26) {\r\n\t\t\t\treturn codePoint - 97;\r\n\t\t\t}\r\n\t\t\treturn base;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Converts a digit/integer into a basic code point.\r\n\t\t * @see `basicToDigit()`\r\n\t\t * @private\r\n\t\t * @param {Number} digit The numeric value of a basic code point.\r\n\t\t * @returns {Number} The basic code point whose value (when used for\r\n\t\t * representing integers) is `digit`, which needs to be in the range\r\n\t\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\r\n\t\t * used; else, the lowercase form is used. The behavior is undefined\r\n\t\t * if `flag` is non-zero and `digit` has no uppercase form.\r\n\t\t */\r\n\t\tfunction digitToBasic(digit, flag) {\r\n\t\t\t// 0..25 map to ASCII a..z or A..Z\r\n\t\t\t// 26..35 map to ASCII 0..9\r\n\t\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Bias adaptation function as per section 3.4 of RFC 3492.\r\n\t\t * http://tools.ietf.org/html/rfc3492#section-3.4\r\n\t\t * @private\r\n\t\t */\r\n\t\tfunction adapt(delta, numPoints, firstTime) {\r\n\t\t\tvar k = 0;\r\n\t\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\r\n\t\t\tdelta += floor(delta / numPoints);\r\n\t\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\r\n\t\t\t\tdelta = floor(delta / baseMinusTMin);\r\n\t\t\t}\r\n\t\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\r\n\t\t * symbols.\r\n\t\t * @memberOf punycode\r\n\t\t * @param {String} input The Punycode string of ASCII-only symbols.\r\n\t\t * @returns {String} The resulting string of Unicode symbols.\r\n\t\t */\r\n\t\tfunction decode(input) {\r\n\t\t\t// Don't use UCS-2\r\n\t\t\tvar output = [],\r\n\t\t\t inputLength = input.length,\r\n\t\t\t out,\r\n\t\t\t i = 0,\r\n\t\t\t n = initialN,\r\n\t\t\t bias = initialBias,\r\n\t\t\t basic,\r\n\t\t\t j,\r\n\t\t\t index,\r\n\t\t\t oldi,\r\n\t\t\t w,\r\n\t\t\t k,\r\n\t\t\t digit,\r\n\t\t\t t,\r\n\t\t\t /** Cached calculation results */\r\n\t\t\t baseMinusT;\r\n\r\n\t\t\t// Handle the basic code points: let `basic` be the number of input code\r\n\t\t\t// points before the last delimiter, or `0` if there is none, then copy\r\n\t\t\t// the first basic code points to the output.\r\n\r\n\t\t\tbasic = input.lastIndexOf(delimiter);\r\n\t\t\tif (basic < 0) {\r\n\t\t\t\tbasic = 0;\r\n\t\t\t}\r\n\r\n\t\t\tfor (j = 0; j < basic; ++j) {\r\n\t\t\t\t// if it's not a basic code point\r\n\t\t\t\tif (input.charCodeAt(j) >= 0x80) {\r\n\t\t\t\t\terror('not-basic');\r\n\t\t\t\t}\r\n\t\t\t\toutput.push(input.charCodeAt(j));\r\n\t\t\t}\r\n\r\n\t\t\t// Main decoding loop: start just after the last delimiter if any basic code\r\n\t\t\t// points were copied; start at the beginning otherwise.\r\n\r\n\t\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\r\n\r\n\t\t\t\t// `index` is the index of the next character to be consumed.\r\n\t\t\t\t// Decode a generalized variable-length integer into `delta`,\r\n\t\t\t\t// which gets added to `i`. The overflow checking is easier\r\n\t\t\t\t// if we increase `i` as we go, then subtract off its starting\r\n\t\t\t\t// value at the end to obtain `delta`.\r\n\t\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\r\n\r\n\t\t\t\t\tif (index >= inputLength) {\r\n\t\t\t\t\t\terror('invalid-input');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\r\n\r\n\t\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\r\n\t\t\t\t\t\terror('overflow');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ti += digit * w;\r\n\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\r\n\r\n\t\t\t\t\tif (digit < t) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbaseMinusT = base - t;\r\n\t\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\r\n\t\t\t\t\t\terror('overflow');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tw *= baseMinusT;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tout = output.length + 1;\r\n\t\t\t\tbias = adapt(i - oldi, out, oldi == 0);\r\n\r\n\t\t\t\t// `i` was supposed to wrap around from `out` to `0`,\r\n\t\t\t\t// incrementing `n` each time, so we'll fix that now:\r\n\t\t\t\tif (floor(i / out) > maxInt - n) {\r\n\t\t\t\t\terror('overflow');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tn += floor(i / out);\r\n\t\t\t\ti %= out;\r\n\r\n\t\t\t\t// Insert `n` at position `i` of the output\r\n\t\t\t\toutput.splice(i++, 0, n);\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn ucs2encode(output);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\r\n\t\t * Punycode string of ASCII-only symbols.\r\n\t\t * @memberOf punycode\r\n\t\t * @param {String} input The string of Unicode symbols.\r\n\t\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\r\n\t\t */\r\n\t\tfunction encode(input) {\r\n\t\t\tvar n,\r\n\t\t\t delta,\r\n\t\t\t handledCPCount,\r\n\t\t\t basicLength,\r\n\t\t\t bias,\r\n\t\t\t j,\r\n\t\t\t m,\r\n\t\t\t q,\r\n\t\t\t k,\r\n\t\t\t t,\r\n\t\t\t currentValue,\r\n\t\t\t output = [],\r\n\t\t\t /** `inputLength` will hold the number of code points in `input`. */\r\n\t\t\t inputLength,\r\n\t\t\t /** Cached calculation results */\r\n\t\t\t handledCPCountPlusOne,\r\n\t\t\t baseMinusT,\r\n\t\t\t qMinusT;\r\n\r\n\t\t\t// Convert the input in UCS-2 to Unicode\r\n\t\t\tinput = ucs2decode(input);\r\n\r\n\t\t\t// Cache the length\r\n\t\t\tinputLength = input.length;\r\n\r\n\t\t\t// Initialize the state\r\n\t\t\tn = initialN;\r\n\t\t\tdelta = 0;\r\n\t\t\tbias = initialBias;\r\n\r\n\t\t\t// Handle the basic code points\r\n\t\t\tfor (j = 0; j < inputLength; ++j) {\r\n\t\t\t\tcurrentValue = input[j];\r\n\t\t\t\tif (currentValue < 0x80) {\r\n\t\t\t\t\toutput.push(stringFromCharCode(currentValue));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\thandledCPCount = basicLength = output.length;\r\n\r\n\t\t\t// `handledCPCount` is the number of code points that have been handled;\r\n\t\t\t// `basicLength` is the number of basic code points.\r\n\r\n\t\t\t// Finish the basic string - if it is not empty - with a delimiter\r\n\t\t\tif (basicLength) {\r\n\t\t\t\toutput.push(delimiter);\r\n\t\t\t}\r\n\r\n\t\t\t// Main encoding loop:\r\n\t\t\twhile (handledCPCount < inputLength) {\r\n\r\n\t\t\t\t// All non-basic code points < n have been handled already. Find the next\r\n\t\t\t\t// larger one:\r\n\t\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\r\n\t\t\t\t\tcurrentValue = input[j];\r\n\t\t\t\t\tif (currentValue >= n && currentValue < m) {\r\n\t\t\t\t\t\tm = currentValue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\r\n\t\t\t\t// but guard against overflow\r\n\t\t\t\thandledCPCountPlusOne = handledCPCount + 1;\r\n\t\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\r\n\t\t\t\t\terror('overflow');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdelta += (m - n) * handledCPCountPlusOne;\r\n\t\t\t\tn = m;\r\n\r\n\t\t\t\tfor (j = 0; j < inputLength; ++j) {\r\n\t\t\t\t\tcurrentValue = input[j];\r\n\r\n\t\t\t\t\tif (currentValue < n && ++delta > maxInt) {\r\n\t\t\t\t\t\terror('overflow');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (currentValue == n) {\r\n\t\t\t\t\t\t// Represent delta as a generalized variable-length integer\r\n\t\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\r\n\t\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\r\n\t\t\t\t\t\t\tif (q < t) {\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tqMinusT = q - t;\r\n\t\t\t\t\t\t\tbaseMinusT = base - t;\r\n\t\t\t\t\t\t\toutput.push(\r\n\t\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\r\n\t\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\r\n\t\t\t\t\t\tdelta = 0;\r\n\t\t\t\t\t\t++handledCPCount;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t++delta;\r\n\t\t\t\t++n;\r\n\r\n\t\t\t}\r\n\t\t\treturn output.join('');\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Converts a Punycode string representing a domain name or an email address\r\n\t\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\r\n\t\t * it doesn't matter if you call it on a string that has already been\r\n\t\t * converted to Unicode.\r\n\t\t * @memberOf punycode\r\n\t\t * @param {String} input The Punycoded domain name or email address to\r\n\t\t * convert to Unicode.\r\n\t\t * @returns {String} The Unicode representation of the given Punycode\r\n\t\t * string.\r\n\t\t */\r\n\t\tfunction toUnicode(input) {\r\n\t\t\treturn mapDomain(input, function(string) {\r\n\t\t\t\treturn regexPunycode.test(string)\r\n\t\t\t\t\t? decode(string.slice(4).toLowerCase())\r\n\t\t\t\t\t: string;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Converts a Unicode string representing a domain name or an email address to\r\n\t\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\r\n\t\t * i.e. it doesn't matter if you call it with a domain that's already in\r\n\t\t * ASCII.\r\n\t\t * @memberOf punycode\r\n\t\t * @param {String} input The domain name or email address to convert, as a\r\n\t\t * Unicode string.\r\n\t\t * @returns {String} The Punycode representation of the given domain name or\r\n\t\t * email address.\r\n\t\t */\r\n\t\tfunction toASCII(input) {\r\n\t\t\treturn mapDomain(input, function(string) {\r\n\t\t\t\treturn regexNonASCII.test(string)\r\n\t\t\t\t\t? 'xn--' + encode(string)\r\n\t\t\t\t\t: string;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t/*--------------------------------------------------------------------------*/\r\n\r\n\t\t/** Define the public API */\r\n\t\tpunycode = {\r\n\t\t\t/**\r\n\t\t\t * A string representing the current Punycode.js version number.\r\n\t\t\t * @memberOf punycode\r\n\t\t\t * @type String\r\n\t\t\t */\r\n\t\t\t'version': '1.3.2',\r\n\t\t\t/**\r\n\t\t\t * An object of methods to convert from JavaScript's internal character\r\n\t\t\t * representation (UCS-2) to Unicode code points, and back.\r\n\t\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\r\n\t\t\t * @memberOf punycode\r\n\t\t\t * @type Object\r\n\t\t\t */\r\n\t\t\t'ucs2': {\r\n\t\t\t\t'decode': ucs2decode,\r\n\t\t\t\t'encode': ucs2encode\r\n\t\t\t},\r\n\t\t\t'decode': decode,\r\n\t\t\t'encode': encode,\r\n\t\t\t'toASCII': toASCII,\r\n\t\t\t'toUnicode': toUnicode\r\n\t\t};\r\n\r\n\t\t/** Expose `punycode` */\r\n\t\t// Some AMD build optimizers, like r.js, check for specific condition patterns\r\n\t\t// like the following:\r\n\t\tif (\r\n\t\t\ttrue\r\n\t\t) {\r\n\t\t\t!(__WEBPACK_AMD_DEFINE_RESULT__ = function() {\r\n\t\t\t\treturn punycode;\r\n\t\t\t}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n\t\t} else if (freeExports && freeModule) {\r\n\t\t\tif (module.exports == freeExports) { // in Node.js or RingoJS v0.8.0+\r\n\t\t\t\tfreeModule.exports = punycode;\r\n\t\t\t} else { // in Narwhal or RingoJS v0.7.0-\r\n\t\t\t\tfor (key in punycode) {\r\n\t\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else { // in Rhino or a web browser\r\n\t\t\troot.punycode = punycode;\r\n\t\t}\r\n\r\n\t}(this));\r\n\r\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)(module), (function() { return this; }())))\r\n\r\n/***/ },\r\n/* 6 */\r\n/***/ function(module, exports) {\r\n\r\n\tmodule.exports = function(module) {\r\n\t\tif(!module.webpackPolyfill) {\r\n\t\t\tmodule.deprecate = function() {};\r\n\t\t\tmodule.paths = [];\r\n\t\t\t// module.parent = undefined by default\r\n\t\t\tmodule.children = [];\r\n\t\t\tmodule.webpackPolyfill = 1;\r\n\t\t}\r\n\t\treturn module;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 7 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\texports.decode = exports.parse = __webpack_require__(8);\r\n\texports.encode = exports.stringify = __webpack_require__(9);\r\n\r\n\r\n/***/ },\r\n/* 8 */\r\n/***/ function(module, exports) {\r\n\r\n\t// Copyright Joyent, Inc. and other Node contributors.\r\n\t//\r\n\t// Permission is hereby granted, free of charge, to any person obtaining a\r\n\t// copy of this software and associated documentation files (the\r\n\t// \"Software\"), to deal in the Software without restriction, including\r\n\t// without limitation the rights to use, copy, modify, merge, publish,\r\n\t// distribute, sublicense, and/or sell copies of the Software, and to permit\r\n\t// persons to whom the Software is furnished to do so, subject to the\r\n\t// following conditions:\r\n\t//\r\n\t// The above copyright notice and this permission notice shall be included\r\n\t// in all copies or substantial portions of the Software.\r\n\t//\r\n\t// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r\n\t// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n\t// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\r\n\t// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\r\n\t// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\r\n\t// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\n\t// USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n\t'use strict';\r\n\r\n\t// If obj.hasOwnProperty has been overridden, then calling\r\n\t// obj.hasOwnProperty(prop) will break.\r\n\t// See: https://github.com/joyent/node/issues/1707\r\n\tfunction hasOwnProperty(obj, prop) {\r\n\t return Object.prototype.hasOwnProperty.call(obj, prop);\r\n\t}\r\n\r\n\tmodule.exports = function(qs, sep, eq, options) {\r\n\t sep = sep || '&';\r\n\t eq = eq || '=';\r\n\t var obj = {};\r\n\r\n\t if (typeof qs !== 'string' || qs.length === 0) {\r\n\t return obj;\r\n\t }\r\n\r\n\t var regexp = /\\+/g;\r\n\t qs = qs.split(sep);\r\n\r\n\t var maxKeys = 1000;\r\n\t if (options && typeof options.maxKeys === 'number') {\r\n\t maxKeys = options.maxKeys;\r\n\t }\r\n\r\n\t var len = qs.length;\r\n\t // maxKeys <= 0 means that we should not limit keys count\r\n\t if (maxKeys > 0 && len > maxKeys) {\r\n\t len = maxKeys;\r\n\t }\r\n\r\n\t for (var i = 0; i < len; ++i) {\r\n\t var x = qs[i].replace(regexp, '%20'),\r\n\t idx = x.indexOf(eq),\r\n\t kstr, vstr, k, v;\r\n\r\n\t if (idx >= 0) {\r\n\t kstr = x.substr(0, idx);\r\n\t vstr = x.substr(idx + 1);\r\n\t } else {\r\n\t kstr = x;\r\n\t vstr = '';\r\n\t }\r\n\r\n\t k = decodeURIComponent(kstr);\r\n\t v = decodeURIComponent(vstr);\r\n\r\n\t if (!hasOwnProperty(obj, k)) {\r\n\t obj[k] = v;\r\n\t } else if (Array.isArray(obj[k])) {\r\n\t obj[k].push(v);\r\n\t } else {\r\n\t obj[k] = [obj[k], v];\r\n\t }\r\n\t }\r\n\r\n\t return obj;\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 9 */\r\n/***/ function(module, exports) {\r\n\r\n\t// Copyright Joyent, Inc. and other Node contributors.\r\n\t//\r\n\t// Permission is hereby granted, free of charge, to any person obtaining a\r\n\t// copy of this software and associated documentation files (the\r\n\t// \"Software\"), to deal in the Software without restriction, including\r\n\t// without limitation the rights to use, copy, modify, merge, publish,\r\n\t// distribute, sublicense, and/or sell copies of the Software, and to permit\r\n\t// persons to whom the Software is furnished to do so, subject to the\r\n\t// following conditions:\r\n\t//\r\n\t// The above copyright notice and this permission notice shall be included\r\n\t// in all copies or substantial portions of the Software.\r\n\t//\r\n\t// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r\n\t// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n\t// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\r\n\t// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\r\n\t// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\r\n\t// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\n\t// USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n\t'use strict';\r\n\r\n\tvar stringifyPrimitive = function(v) {\r\n\t switch (typeof v) {\r\n\t case 'string':\r\n\t return v;\r\n\r\n\t case 'boolean':\r\n\t return v ? 'true' : 'false';\r\n\r\n\t case 'number':\r\n\t return isFinite(v) ? v : '';\r\n\r\n\t default:\r\n\t return '';\r\n\t }\r\n\t};\r\n\r\n\tmodule.exports = function(obj, sep, eq, name) {\r\n\t sep = sep || '&';\r\n\t eq = eq || '=';\r\n\t if (obj === null) {\r\n\t obj = undefined;\r\n\t }\r\n\r\n\t if (typeof obj === 'object') {\r\n\t return Object.keys(obj).map(function(k) {\r\n\t var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\r\n\t if (Array.isArray(obj[k])) {\r\n\t return obj[k].map(function(v) {\r\n\t return ks + encodeURIComponent(stringifyPrimitive(v));\r\n\t }).join(sep);\r\n\t } else {\r\n\t return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\r\n\t }\r\n\t }).join(sep);\r\n\r\n\t }\r\n\r\n\t if (!name) return '';\r\n\t return encodeURIComponent(stringifyPrimitive(name)) + eq +\r\n\t encodeURIComponent(stringifyPrimitive(obj));\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 10 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\r\n\tmodule.exports = function equal(a, b) {\r\n\t if (a === b) return true;\r\n\r\n\t var arrA = Array.isArray(a)\r\n\t , arrB = Array.isArray(b)\r\n\t , i;\r\n\r\n\t if (arrA && arrB) {\r\n\t if (a.length != b.length) return false;\r\n\t for (i = 0; i < a.length; i++)\r\n\t if (!equal(a[i], b[i])) return false;\r\n\t return true;\r\n\t }\r\n\r\n\t if (arrA != arrB) return false;\r\n\r\n\t if (a && b && typeof a === 'object' && typeof b === 'object') {\r\n\t var keys = Object.keys(a);\r\n\r\n\t if (keys.length !== Object.keys(b).length) return false;\r\n\r\n\t for (i = 0; i < keys.length; i++)\r\n\t if (b[keys[i]] === undefined) return false;\r\n\r\n\t for (i = 0; i < keys.length; i++)\r\n\t if(!equal(a[keys[i]], b[keys[i]])) return false;\r\n\r\n\t return true;\r\n\t }\r\n\r\n\t return false;\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 11 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\r\n\tmodule.exports = {\r\n\t copy: copy,\r\n\t checkDataType: checkDataType,\r\n\t checkDataTypes: checkDataTypes,\r\n\t coerceToTypes: coerceToTypes,\r\n\t toHash: toHash,\r\n\t getProperty: getProperty,\r\n\t escapeQuotes: escapeQuotes,\r\n\t ucs2length: ucs2length,\r\n\t varOccurences: varOccurences,\r\n\t varReplace: varReplace,\r\n\t cleanUpCode: cleanUpCode,\r\n\t cleanUpVarErrors: cleanUpVarErrors,\r\n\t schemaHasRules: schemaHasRules,\r\n\t stableStringify: __webpack_require__(12),\r\n\t toQuotedString: toQuotedString,\r\n\t getPathExpr: getPathExpr,\r\n\t getPath: getPath,\r\n\t getData: getData,\r\n\t unescapeFragment: unescapeFragment,\r\n\t escapeFragment: escapeFragment,\r\n\t escapeJsonPointer: escapeJsonPointer\r\n\t};\r\n\r\n\r\n\tfunction copy(o, to) {\r\n\t to = to || {};\r\n\t for (var key in o) to[key] = o[key];\r\n\t return to;\r\n\t}\r\n\r\n\r\n\tfunction checkDataType(dataType, data, negate) {\r\n\t var EQUAL = negate ? ' !== ' : ' === '\r\n\t , AND = negate ? ' || ' : ' && '\r\n\t , OK = negate ? '!' : ''\r\n\t , NOT = negate ? '' : '!';\r\n\t switch (dataType) {\r\n\t case 'null': return data + EQUAL + 'null';\r\n\t case 'array': return OK + 'Array.isArray(' + data + ')';\r\n\t case 'object': return '(' + OK + data + AND +\r\n\t 'typeof ' + data + EQUAL + '\"object\"' + AND +\r\n\t NOT + 'Array.isArray(' + data + '))';\r\n\t case 'integer': return '(typeof ' + data + EQUAL + '\"number\"' + AND +\r\n\t NOT + '(' + data + ' % 1))';\r\n\t default: return 'typeof ' + data + EQUAL + '\"' + dataType + '\"';\r\n\t }\r\n\t}\r\n\r\n\r\n\tfunction checkDataTypes(dataTypes, data) {\r\n\t switch (dataTypes.length) {\r\n\t case 1: return checkDataType(dataTypes[0], data, true);\r\n\t default:\r\n\t var code = '';\r\n\t var types = toHash(dataTypes);\r\n\t if (types.array && types.object) {\r\n\t code = types.null ? '(': '(!' + data + ' || ';\r\n\t code += 'typeof ' + data + ' !== \"object\")';\r\n\t delete types.null;\r\n\t delete types.array;\r\n\t delete types.object;\r\n\t }\r\n\t if (types.number) delete types.integer;\r\n\t for (var t in types)\r\n\t code += (code ? ' && ' : '' ) + checkDataType(t, data, true);\r\n\r\n\t return code;\r\n\t }\r\n\t}\r\n\r\n\r\n\tvar COERCE_TO_TYPES = toHash([ 'string', 'number', 'integer', 'boolean', 'null' ]);\r\n\tfunction coerceToTypes(dataTypes) {\r\n\t if (Array.isArray(dataTypes)) {\r\n\t var types = [];\r\n\t for (var i=0; i<dataTypes.length; i++) {\r\n\t var t = dataTypes[i];\r\n\t if (COERCE_TO_TYPES[t]) types[types.length] = t;\r\n\t }\r\n\t if (types.length) return types;\r\n\t } else if (COERCE_TO_TYPES[dataTypes]) {\r\n\t return [dataTypes];\r\n\t }\r\n\t}\r\n\r\n\r\n\tfunction toHash(arr) {\r\n\t var hash = {};\r\n\t for (var i=0; i<arr.length; i++) hash[arr[i]] = true;\r\n\t return hash;\r\n\t}\r\n\r\n\r\n\tvar IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i;\r\n\tvar SINGLE_QUOTE = /'|\\\\/g;\r\n\tfunction getProperty(key) {\r\n\t return typeof key == 'number'\r\n\t ? '[' + key + ']'\r\n\t : IDENTIFIER.test(key)\r\n\t ? '.' + key\r\n\t : \"['\" + key.replace(SINGLE_QUOTE, '\\\\$&') + \"']\";\r\n\t}\r\n\r\n\r\n\tfunction escapeQuotes(str) {\r\n\t return str.replace(SINGLE_QUOTE, '\\\\$&');\r\n\t}\r\n\r\n\r\n\t// https://mathiasbynens.be/notes/javascript-encoding\r\n\t// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode\r\n\tfunction ucs2length(str) {\r\n\t var length = 0\r\n\t , len = str.length\r\n\t , pos = 0\r\n\t , value;\r\n\t while (pos < len) {\r\n\t length++;\r\n\t value = str.charCodeAt(pos++);\r\n\t if (value >= 0xD800 && value <= 0xDBFF && pos < len) {\r\n\t // high surrogate, and there is a next character\r\n\t value = str.charCodeAt(pos);\r\n\t if ((value & 0xFC00) == 0xDC00) pos++; // low surrogate\r\n\t }\r\n\t }\r\n\t return length;\r\n\t}\r\n\r\n\r\n\tfunction varOccurences(str, dataVar) {\r\n\t dataVar += '[^0-9]';\r\n\t var matches = str.match(new RegExp(dataVar, 'g'));\r\n\t return matches ? matches.length : 0;\r\n\t}\r\n\r\n\r\n\tfunction varReplace(str, dataVar, expr) {\r\n\t dataVar += '([^0-9])';\r\n\t expr = expr.replace(/\\$/g, '$$$$');\r\n\t return str.replace(new RegExp(dataVar, 'g'), expr + '$1');\r\n\t}\r\n\r\n\r\n\tvar EMPTY_ELSE = /else\\s*{\\s*}/g\r\n\t , EMPTY_IF_NO_ELSE = /if\\s*\\([^)]+\\)\\s*\\{\\s*\\}(?!\\s*else)/g\r\n\t , EMPTY_IF_WITH_ELSE = /if\\s*\\(([^)]+)\\)\\s*\\{\\s*\\}\\s*else(?!\\s*if)/g;\r\n\tfunction cleanUpCode(out) {\r\n\t return out.replace(EMPTY_ELSE, '')\r\n\t .replace(EMPTY_IF_NO_ELSE, '')\r\n\t .replace(EMPTY_IF_WITH_ELSE, 'if (!($1))');\r\n\t}\r\n\r\n\r\n\tvar ERRORS_REGEXP = /[^v\\.]errors/g\r\n\t , REMOVE_ERRORS = /var errors = 0;|var vErrors = null;|validate.errors = vErrors;/g\r\n\t , REMOVE_ERRORS_ASYNC = /var errors = 0;|var vErrors = null;/g\r\n\t , RETURN_VALID = 'return errors === 0;'\r\n\t , RETURN_TRUE = 'validate.errors = null; return true;'\r\n\t , RETURN_ASYNC = /if \\(errors === 0\\) return true;\\s*else throw new ValidationError\\(vErrors\\);/\r\n\t , RETURN_TRUE_ASYNC = 'return true;';\r\n\r\n\tfunction cleanUpVarErrors(out, async) {\r\n\t var matches = out.match(ERRORS_REGEXP);\r\n\t if (!matches || matches.length !== 2) return out;\r\n\t return async\r\n\t ? out.replace(REMOVE_ERRORS_ASYNC, '')\r\n\t .replace(RETURN_ASYNC, RETURN_TRUE_ASYNC)\r\n\t : out.replace(REMOVE_ERRORS, '')\r\n\t .replace(RETURN_VALID, RETURN_TRUE);\r\n\t}\r\n\r\n\r\n\tfunction schemaHasRules(schema, rules) {\r\n\t for (var key in schema) if (rules[key]) return true;\r\n\t}\r\n\r\n\r\n\tfunction toQuotedString(str) {\r\n\t return '\\'' + escapeQuotes(str) + '\\'';\r\n\t}\r\n\r\n\r\n\tfunction getPathExpr(currentPath, expr, jsonPointers, isNumber) {\r\n\t var path = jsonPointers // false by default\r\n\t ? '\\'/\\' + ' + expr + (isNumber ? '' : '.replace(/~/g, \\'~0\\').replace(/\\\\//g, \\'~1\\')')\r\n\t : (isNumber ? '\\'[\\' + ' + expr + ' + \\']\\'' : '\\'[\\\\\\'\\' + ' + expr + ' + \\'\\\\\\']\\'');\r\n\t return joinPaths(currentPath, path);\r\n\t}\r\n\r\n\r\n\tfunction getPath(currentPath, prop, jsonPointers) {\r\n\t var path = jsonPointers // false by default\r\n\t ? toQuotedString('/' + escapeJsonPointer(prop))\r\n\t : toQuotedString(getProperty(prop));\r\n\t return joinPaths(currentPath, path);\r\n\t}\r\n\r\n\r\n\tvar RELATIVE_JSON_POINTER = /^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/;\r\n\tfunction getData($data, lvl, paths) {\r\n\t var matches = $data.match(RELATIVE_JSON_POINTER);\r\n\t if (!matches) throw new Error('Invalid relative JSON-pointer: ' + $data);\r\n\t var up = +matches[1];\r\n\t var jsonPointer = matches[2];\r\n\t if (jsonPointer == '#') {\r\n\t if (up >= lvl) throw new Error('Cannot access property/index ' + up + ' levels up, current level is ' + lvl);\r\n\t return paths[lvl - up];\r\n\t }\r\n\r\n\t if (up > lvl) throw new Error('Cannot access data ' + up + ' levels up, current level is ' + lvl);\r\n\t var data = 'data' + ((lvl - up) || '');\r\n\t if (!jsonPointer) return data;\r\n\r\n\t var expr = data;\r\n\t var segments = jsonPointer.split('/');\r\n\t for (var i=0; i<segments.length; i++) {\r\n\t var segment = segments[i];\r\n\t if (segment) {\r\n\t data += getProperty(unescapeJsonPointer(segment));\r\n\t expr += ' && ' + data;\r\n\t }\r\n\t }\r\n\t return expr;\r\n\t}\r\n\r\n\r\n\tfunction joinPaths (a, b) {\r\n\t if (a == '\"\"') return b;\r\n\t return (a + ' + ' + b).replace(/' \\+ '/g, '');\r\n\t}\r\n\r\n\r\n\tfunction unescapeFragment(str) {\r\n\t return unescapeJsonPointer(decodeURIComponent(str));\r\n\t}\r\n\r\n\r\n\tfunction escapeFragment(str) {\r\n\t return encodeURIComponent(escapeJsonPointer(str));\r\n\t}\r\n\r\n\r\n\tfunction escapeJsonPointer(str) {\r\n\t return str.replace(/~/g, '~0').replace(/\\//g, '~1');\r\n\t}\r\n\r\n\r\n\tfunction unescapeJsonPointer(str) {\r\n\t return str.replace(/~1/g, '/').replace(/~0/g, '~');\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 12 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\tvar json = typeof JSON !== 'undefined' ? JSON : __webpack_require__(13);\r\n\r\n\tmodule.exports = function (obj, opts) {\r\n\t if (!opts) opts = {};\r\n\t if (typeof opts === 'function') opts = { cmp: opts };\r\n\t var space = opts.space || '';\r\n\t if (typeof space === 'number') space = Array(space+1).join(' ');\r\n\t var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false;\r\n\t var replacer = opts.replacer || function(key, value) { return value; };\r\n\r\n\t var cmp = opts.cmp && (function (f) {\r\n\t return function (node) {\r\n\t return function (a, b) {\r\n\t var aobj = { key: a, value: node[a] };\r\n\t var bobj = { key: b, value: node[b] };\r\n\t return f(aobj, bobj);\r\n\t };\r\n\t };\r\n\t })(opts.cmp);\r\n\r\n\t var seen = [];\r\n\t return (function stringify (parent, key, node, level) {\r\n\t var indent = space ? ('\\n' + new Array(level + 1).join(space)) : '';\r\n\t var colonSeparator = space ? ': ' : ':';\r\n\r\n\t if (node && node.toJSON && typeof node.toJSON === 'function') {\r\n\t node = node.toJSON();\r\n\t }\r\n\r\n\t node = replacer.call(parent, key, node);\r\n\r\n\t if (node === undefined) {\r\n\t return;\r\n\t }\r\n\t if (typeof node !== 'object' || node === null) {\r\n\t return json.stringify(node);\r\n\t }\r\n\t if (isArray(node)) {\r\n\t var out = [];\r\n\t for (var i = 0; i < node.length; i++) {\r\n\t var item = stringify(node, i, node[i], level+1) || json.stringify(null);\r\n\t out.push(indent + space + item);\r\n\t }\r\n\t return '[' + out.join(',') + indent + ']';\r\n\t }\r\n\t else {\r\n\t if (seen.indexOf(node) !== -1) {\r\n\t if (cycles) return json.stringify('__cycle__');\r\n\t throw new TypeError('Converting circular structure to JSON');\r\n\t }\r\n\t else seen.push(node);\r\n\r\n\t var keys = objectKeys(node).sort(cmp && cmp(node));\r\n\t var out = [];\r\n\t for (var i = 0; i < keys.length; i++) {\r\n\t var key = keys[i];\r\n\t var value = stringify(node, key, node[key], level+1);\r\n\r\n\t if(!value) continue;\r\n\r\n\t var keyValue = json.stringify(key)\r\n\t + colonSeparator\r\n\t + value;\r\n\t ;\r\n\t out.push(indent + space + keyValue);\r\n\t }\r\n\t seen.splice(seen.indexOf(node), 1);\r\n\t return '{' + out.join(',') + indent + '}';\r\n\t }\r\n\t })({ '': obj }, '', obj, 0);\r\n\t};\r\n\r\n\tvar isArray = Array.isArray || function (x) {\r\n\t return {}.toString.call(x) === '[object Array]';\r\n\t};\r\n\r\n\tvar objectKeys = Object.keys || function (obj) {\r\n\t var has = Object.prototype.hasOwnProperty || function () { return true };\r\n\t var keys = [];\r\n\t for (var key in obj) {\r\n\t if (has.call(obj, key)) keys.push(key);\r\n\t }\r\n\t return keys;\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 13 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\texports.parse = __webpack_require__(14);\r\n\texports.stringify = __webpack_require__(15);\r\n\r\n\r\n/***/ },\r\n/* 14 */\r\n/***/ function(module, exports) {\r\n\r\n\tvar at, // The index of the current character\r\n\t ch, // The current character\r\n\t escapee = {\r\n\t '\"': '\"',\r\n\t '\\\\': '\\\\',\r\n\t '/': '/',\r\n\t b: '\\b',\r\n\t f: '\\f',\r\n\t n: '\\n',\r\n\t r: '\\r',\r\n\t t: '\\t'\r\n\t },\r\n\t text,\r\n\r\n\t error = function (m) {\r\n\t // Call error when something is wrong.\r\n\t throw {\r\n\t name: 'SyntaxError',\r\n\t message: m,\r\n\t at: at,\r\n\t text: text\r\n\t };\r\n\t },\r\n\t \r\n\t next = function (c) {\r\n\t // If a c parameter is provided, verify that it matches the current character.\r\n\t if (c && c !== ch) {\r\n\t error(\"Expected '\" + c + \"' instead of '\" + ch + \"'\");\r\n\t }\r\n\t \r\n\t // Get the next character. When there are no more characters,\r\n\t // return the empty string.\r\n\t \r\n\t ch = text.charAt(at);\r\n\t at += 1;\r\n\t return ch;\r\n\t },\r\n\t \r\n\t number = function () {\r\n\t // Parse a number value.\r\n\t var number,\r\n\t string = '';\r\n\t \r\n\t if (ch === '-') {\r\n\t string = '-';\r\n\t next('-');\r\n\t }\r\n\t while (ch >= '0' && ch <= '9') {\r\n\t string += ch;\r\n\t next();\r\n\t }\r\n\t if (ch === '.') {\r\n\t string += '.';\r\n\t while (next() && ch >= '0' && ch <= '9') {\r\n\t string += ch;\r\n\t }\r\n\t }\r\n\t if (ch === 'e' || ch === 'E') {\r\n\t string += ch;\r\n\t next();\r\n\t if (ch === '-' || ch === '+') {\r\n\t string += ch;\r\n\t next();\r\n\t }\r\n\t while (ch >= '0' && ch <= '9') {\r\n\t string += ch;\r\n\t next();\r\n\t }\r\n\t }\r\n\t number = +string;\r\n\t if (!isFinite(number)) {\r\n\t error(\"Bad number\");\r\n\t } else {\r\n\t return number;\r\n\t }\r\n\t },\r\n\t \r\n\t string = function () {\r\n\t // Parse a string value.\r\n\t var hex,\r\n\t i,\r\n\t string = '',\r\n\t uffff;\r\n\t \r\n\t // When parsing for string values, we must look for \" and \\ characters.\r\n\t if (ch === '\"') {\r\n\t while (next()) {\r\n\t if (ch === '\"') {\r\n\t next();\r\n\t return string;\r\n\t } else if (ch === '\\\\') {\r\n\t next();\r\n\t if (ch === 'u') {\r\n\t uffff = 0;\r\n\t for (i = 0; i < 4; i += 1) {\r\n\t hex = parseInt(next(), 16);\r\n\t if (!isFinite(hex)) {\r\n\t break;\r\n\t }\r\n\t uffff = uffff * 16 + hex;\r\n\t }\r\n\t string += String.fromCharCode(uffff);\r\n\t } else if (typeof escapee[ch] === 'string') {\r\n\t string += escapee[ch];\r\n\t } else {\r\n\t break;\r\n\t }\r\n\t } else {\r\n\t string += ch;\r\n\t }\r\n\t }\r\n\t }\r\n\t error(\"Bad string\");\r\n\t },\r\n\r\n\t white = function () {\r\n\r\n\t// Skip whitespace.\r\n\r\n\t while (ch && ch <= ' ') {\r\n\t next();\r\n\t }\r\n\t },\r\n\r\n\t word = function () {\r\n\r\n\t// true, false, or null.\r\n\r\n\t switch (ch) {\r\n\t case 't':\r\n\t next('t');\r\n\t next('r');\r\n\t next('u');\r\n\t next('e');\r\n\t return true;\r\n\t case 'f':\r\n\t next('f');\r\n\t next('a');\r\n\t next('l');\r\n\t next('s');\r\n\t next('e');\r\n\t return false;\r\n\t case 'n':\r\n\t next('n');\r\n\t next('u');\r\n\t next('l');\r\n\t next('l');\r\n\t return null;\r\n\t }\r\n\t error(\"Unexpected '\" + ch + \"'\");\r\n\t },\r\n\r\n\t value, // Place holder for the value function.\r\n\r\n\t array = function () {\r\n\r\n\t// Parse an array value.\r\n\r\n\t var array = [];\r\n\r\n\t if (ch === '[') {\r\n\t next('[');\r\n\t white();\r\n\t if (ch === ']') {\r\n\t next(']');\r\n\t return array; // empty array\r\n\t }\r\n\t while (ch) {\r\n\t array.push(value());\r\n\t white();\r\n\t if (ch === ']') {\r\n\t next(']');\r\n\t return array;\r\n\t }\r\n\t next(',');\r\n\t white();\r\n\t }\r\n\t }\r\n\t error(\"Bad array\");\r\n\t },\r\n\r\n\t object = function () {\r\n\r\n\t// Parse an object value.\r\n\r\n\t var key,\r\n\t object = {};\r\n\r\n\t if (ch === '{') {\r\n\t next('{');\r\n\t white();\r\n\t if (ch === '}') {\r\n\t next('}');\r\n\t return object; // empty object\r\n\t }\r\n\t while (ch) {\r\n\t key = string();\r\n\t white();\r\n\t next(':');\r\n\t if (Object.hasOwnProperty.call(object, key)) {\r\n\t error('Duplicate key \"' + key + '\"');\r\n\t }\r\n\t object[key] = value();\r\n\t white();\r\n\t if (ch === '}') {\r\n\t next('}');\r\n\t return object;\r\n\t }\r\n\t next(',');\r\n\t white();\r\n\t }\r\n\t }\r\n\t error(\"Bad object\");\r\n\t };\r\n\r\n\tvalue = function () {\r\n\r\n\t// Parse a JSON value. It could be an object, an array, a string, a number,\r\n\t// or a word.\r\n\r\n\t white();\r\n\t switch (ch) {\r\n\t case '{':\r\n\t return object();\r\n\t case '[':\r\n\t return array();\r\n\t case '\"':\r\n\t return string();\r\n\t case '-':\r\n\t return number();\r\n\t default:\r\n\t return ch >= '0' && ch <= '9' ? number() : word();\r\n\t }\r\n\t};\r\n\r\n\t// Return the json_parse function. It will have access to all of the above\r\n\t// functions and variables.\r\n\r\n\tmodule.exports = function (source, reviver) {\r\n\t var result;\r\n\t \r\n\t text = source;\r\n\t at = 0;\r\n\t ch = ' ';\r\n\t result = value();\r\n\t white();\r\n\t if (ch) {\r\n\t error(\"Syntax error\");\r\n\t }\r\n\r\n\t // If there is a reviver function, we recursively walk the new structure,\r\n\t // passing each name/value pair to the reviver function for possible\r\n\t // transformation, starting with a temporary root object that holds the result\r\n\t // in an empty key. If there is not a reviver function, we simply return the\r\n\t // result.\r\n\r\n\t return typeof reviver === 'function' ? (function walk(holder, key) {\r\n\t var k, v, value = holder[key];\r\n\t if (value && typeof value === 'object') {\r\n\t for (k in value) {\r\n\t if (Object.prototype.hasOwnProperty.call(value, k)) {\r\n\t v = walk(value, k);\r\n\t if (v !== undefined) {\r\n\t value[k] = v;\r\n\t } else {\r\n\t delete value[k];\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t return reviver.call(holder, key, value);\r\n\t }({'': result}, '')) : result;\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 15 */\r\n/***/ function(module, exports) {\r\n\r\n\tvar cx = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\r\n\t escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\r\n\t gap,\r\n\t indent,\r\n\t meta = { // table of character substitutions\r\n\t '\\b': '\\\\b',\r\n\t '\\t': '\\\\t',\r\n\t '\\n': '\\\\n',\r\n\t '\\f': '\\\\f',\r\n\t '\\r': '\\\\r',\r\n\t '\"' : '\\\\\"',\r\n\t '\\\\': '\\\\\\\\'\r\n\t },\r\n\t rep;\r\n\r\n\tfunction quote(string) {\r\n\t // If the string contains no control characters, no quote characters, and no\r\n\t // backslash characters, then we can safely slap some quotes around it.\r\n\t // Otherwise we must also replace the offending characters with safe escape\r\n\t // sequences.\r\n\t \r\n\t escapable.lastIndex = 0;\r\n\t return escapable.test(string) ? '\"' + string.replace(escapable, function (a) {\r\n\t var c = meta[a];\r\n\t return typeof c === 'string' ? c :\r\n\t '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\r\n\t }) + '\"' : '\"' + string + '\"';\r\n\t}\r\n\r\n\tfunction str(key, holder) {\r\n\t // Produce a string from holder[key].\r\n\t var i, // The loop counter.\r\n\t k, // The member key.\r\n\t v, // The member value.\r\n\t length,\r\n\t mind = gap,\r\n\t partial,\r\n\t value = holder[key];\r\n\t \r\n\t // If the value has a toJSON method, call it to obtain a replacement value.\r\n\t if (value && typeof value === 'object' &&\r\n\t typeof value.toJSON === 'function') {\r\n\t value = value.toJSON(key);\r\n\t }\r\n\t \r\n\t // If we were called with a replacer function, then call the replacer to\r\n\t // obtain a replacement value.\r\n\t if (typeof rep === 'function') {\r\n\t value = rep.call(holder, key, value);\r\n\t }\r\n\t \r\n\t // What happens next depends on the value's type.\r\n\t switch (typeof value) {\r\n\t case 'string':\r\n\t return quote(value);\r\n\t \r\n\t case 'number':\r\n\t // JSON numbers must be finite. Encode non-finite numbers as null.\r\n\t return isFinite(value) ? String(value) : 'null';\r\n\t \r\n\t case 'boolean':\r\n\t case 'null':\r\n\t // If the value is a boolean or null, convert it to a string. Note:\r\n\t // typeof null does not produce 'null'. The case is included here in\r\n\t // the remote chance that this gets fixed someday.\r\n\t return String(value);\r\n\t \r\n\t case 'object':\r\n\t if (!value) return 'null';\r\n\t gap += indent;\r\n\t partial = [];\r\n\t \r\n\t // Array.isArray\r\n\t if (Object.prototype.toString.apply(value) === '[object Array]') {\r\n\t length = value.length;\r\n\t for (i = 0; i < length; i += 1) {\r\n\t partial[i] = str(i, value) || 'null';\r\n\t }\r\n\t \r\n\t // Join all of the elements together, separated with commas, and\r\n\t // wrap them in brackets.\r\n\t v = partial.length === 0 ? '[]' : gap ?\r\n\t '[\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + ']' :\r\n\t '[' + partial.join(',') + ']';\r\n\t gap = mind;\r\n\t return v;\r\n\t }\r\n\t \r\n\t // If the replacer is an array, use it to select the members to be\r\n\t // stringified.\r\n\t if (rep && typeof rep === 'object') {\r\n\t length = rep.length;\r\n\t for (i = 0; i < length; i += 1) {\r\n\t k = rep[i];\r\n\t if (typeof k === 'string') {\r\n\t v = str(k, value);\r\n\t if (v) {\r\n\t partial.push(quote(k) + (gap ? ': ' : ':') + v);\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t else {\r\n\t // Otherwise, iterate through all of the keys in the object.\r\n\t for (k in value) {\r\n\t if (Object.prototype.hasOwnProperty.call(value, k)) {\r\n\t v = str(k, value);\r\n\t if (v) {\r\n\t partial.push(quote(k) + (gap ? ': ' : ':') + v);\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t \r\n\t // Join all of the member texts together, separated with commas,\r\n\t // and wrap them in braces.\r\n\r\n\t v = partial.length === 0 ? '{}' : gap ?\r\n\t '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + '}' :\r\n\t '{' + partial.join(',') + '}';\r\n\t gap = mind;\r\n\t return v;\r\n\t }\r\n\t}\r\n\r\n\tmodule.exports = function (value, replacer, space) {\r\n\t var i;\r\n\t gap = '';\r\n\t indent = '';\r\n\t \r\n\t // If the space parameter is a number, make an indent string containing that\r\n\t // many spaces.\r\n\t if (typeof space === 'number') {\r\n\t for (i = 0; i < space; i += 1) {\r\n\t indent += ' ';\r\n\t }\r\n\t }\r\n\t // If the space parameter is a string, it will be used as the indent string.\r\n\t else if (typeof space === 'string') {\r\n\t indent = space;\r\n\t }\r\n\r\n\t // If there is a replacer, it must be a function or an array.\r\n\t // Otherwise, throw an error.\r\n\t rep = replacer;\r\n\t if (replacer && typeof replacer !== 'function'\r\n\t && (typeof replacer !== 'object' || typeof replacer.length !== 'number')) {\r\n\t throw new Error('JSON.stringify');\r\n\t }\r\n\t \r\n\t // Make a fake root object containing our value under the key of ''.\r\n\t // Return the result of stringifying the value.\r\n\t return str('', {'': value});\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 16 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar util = __webpack_require__(11);\r\n\r\n\tmodule.exports = SchemaObject;\r\n\r\n\tfunction SchemaObject(obj) {\r\n\t util.copy(obj, this);\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 17 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tmodule.exports = {\r\n\t setup: setupAsync,\r\n\t compile: compileAsync\r\n\t};\r\n\r\n\r\n\tvar util = __webpack_require__(11);\r\n\r\n\tvar ASYNC = {\r\n\t '*': checkGenerators,\r\n\t 'co*': checkGenerators,\r\n\t 'es7': checkAsyncFunction\r\n\t};\r\n\r\n\tvar TRANSPILE = {\r\n\t 'nodent': getNodent,\r\n\t 'regenerator': getRegenerator\r\n\t};\r\n\r\n\tvar MODES = [\r\n\t { async: 'co*' },\r\n\t { async: 'es7', transpile: 'nodent' },\r\n\t { async: 'co*', transpile: 'regenerator' }\r\n\t];\r\n\r\n\r\n\tvar regenerator, nodent;\r\n\r\n\r\n\tfunction setupAsync(opts, required) {\r\n\t if (required !== false) required = true;\r\n\t var async = opts.async\r\n\t , transpile = opts.transpile\r\n\t , check;\r\n\r\n\t switch (typeof transpile) {\r\n\t case 'string':\r\n\t var get = TRANSPILE[transpile];\r\n\t if (!get) throw new Error('bad transpiler: ' + transpile);\r\n\t return (opts._transpileFunc = get(opts, required));\r\n\t case 'undefined':\r\n\t case 'boolean':\r\n\t if (typeof async == 'string') {\r\n\t check = ASYNC[async];\r\n\t if (!check) throw new Error('bad async mode: ' + async);\r\n\t return (opts.transpile = check(opts, required));\r\n\t }\r\n\r\n\t for (var i=0; i<MODES.length; i++) {\r\n\t var _opts = MODES[i];\r\n\t if (setupAsync(_opts, false)) {\r\n\t util.copy(_opts, opts);\r\n\t return opts.transpile;\r\n\t }\r\n\t }\r\n\t /* istanbul ignore next */\r\n\t throw new Error('generators, nodent and regenerator are not available');\r\n\t case 'function':\r\n\t return (opts._transpileFunc = opts.transpile);\r\n\t default:\r\n\t throw new Error('bad transpiler: ' + transpile);\r\n\t }\r\n\t}\r\n\r\n\r\n\tfunction checkGenerators(opts, required) {\r\n\t /* jshint evil: true */\r\n\t try {\r\n\t eval('(function*(){})()');\r\n\t return true;\r\n\t } catch(e) {\r\n\t /* istanbul ignore next */\r\n\t if (required) throw new Error('generators not supported');\r\n\t }\r\n\t}\r\n\r\n\r\n\tfunction checkAsyncFunction(opts, required) {\r\n\t /* jshint evil: true */\r\n\t try {\r\n\t eval('(async function(){})()');\r\n\t /* istanbul ignore next */\r\n\t return true;\r\n\t } catch(e) {\r\n\t if (required) throw new Error('es7 async functions not supported');\r\n\t }\r\n\t}\r\n\r\n\r\n\tfunction getRegenerator(opts, required) {\r\n\t try {\r\n\t if (!regenerator) {\r\n\t regenerator = __webpack_require__(!(function webpackMissingModule() { var e = new Error(\"Cannot find module \\\"regenerator\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e; }()));\r\n\t regenerator.runtime();\r\n\t }\r\n\t if (!opts.async || opts.async === true)\r\n\t opts.async = 'es7';\r\n\t return regeneratorTranspile;\r\n\t } catch(e) {\r\n\t /* istanbul ignore next */\r\n\t if (required) throw new Error('regenerator not available');\r\n\t }\r\n\t}\r\n\r\n\r\n\tfunction regeneratorTranspile(code) {\r\n\t return regenerator.compile(code).code;\r\n\t}\r\n\r\n\r\n\tfunction getNodent(opts, required) {\r\n\t /* jshint evil: true */\r\n\t try {\r\n\t if (!nodent) nodent = __webpack_require__(!(function webpackMissingModule() { var e = new Error(\"Cannot find module \\\"nodent\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e; }()))({ log: false, dontInstallRequireHook: true });\r\n\t if (opts.async != 'es7') {\r\n\t if (opts.async && opts.async !== true) console.warn('nodent transpiles only es7 async functions');\r\n\t opts.async = 'es7';\r\n\t }\r\n\t return nodentTranspile;\r\n\t } catch(e) {\r\n\t /* istanbul ignore next */\r\n\t if (required) throw new Error('nodent not available');\r\n\t }\r\n\t}\r\n\r\n\r\n\tfunction nodentTranspile(code) {\r\n\t return nodent.compile(code, '', { promises: true, sourcemap: false }).code;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Creates validating function for passed schema with asynchronous loading of missing schemas.\r\n\t * `loadSchema` option should be a function that accepts schema uri and node-style callback.\r\n\t * @this Ajv\r\n\t * @param {Object} schema schema object\r\n\t * @param {Function} callback node-style callback, it is always called with 2 parameters: error (or null) and validating function.\r\n\t */\r\n\tfunction compileAsync(schema, callback) {\r\n\t /* eslint no-shadow: 0 */\r\n\t /* jshint validthis: true */\r\n\t var schemaObj;\r\n\t var self = this;\r\n\t try {\r\n\t schemaObj = this._addSchema(schema);\r\n\t } catch(e) {\r\n\t setTimeout(function() { callback(e); });\r\n\t return;\r\n\t }\r\n\t if (schemaObj.validate) {\r\n\t setTimeout(function() { callback(null, schemaObj.validate); });\r\n\t } else {\r\n\t if (typeof this._opts.loadSchema != 'function')\r\n\t throw new Error('options.loadSchema should be a function');\r\n\t _compileAsync(schema, callback, true);\r\n\t }\r\n\r\n\r\n\t function _compileAsync(schema, callback, firstCall) {\r\n\t var validate;\r\n\t try { validate = self.compile(schema); }\r\n\t catch(e) {\r\n\t if (e.missingSchema) loadMissingSchema(e);\r\n\t else deferCallback(e);\r\n\t return;\r\n\t }\r\n\t deferCallback(null, validate);\r\n\r\n\t function loadMissingSchema(e) {\r\n\t var ref = e.missingSchema;\r\n\t if (self._refs[ref] || self._schemas[ref])\r\n\t return callback(new Error('Schema ' + ref + ' is loaded but' + e.missingRef + 'cannot be resolved'));\r\n\t var _callbacks = self._loadingSchemas[ref];\r\n\t if (_callbacks) {\r\n\t if (typeof _callbacks == 'function')\r\n\t self._loadingSchemas[ref] = [_callbacks, schemaLoaded];\r\n\t else\r\n\t _callbacks[_callbacks.length] = schemaLoaded;\r\n\t } else {\r\n\t self._loadingSchemas[ref] = schemaLoaded;\r\n\t self._opts.loadSchema(ref, function (err, sch) {\r\n\t var _callbacks = self._loadingSchemas[ref];\r\n\t delete self._loadingSchemas[ref];\r\n\t if (typeof _callbacks == 'function') {\r\n\t _callbacks(err, sch);\r\n\t } else {\r\n\t for (var i=0; i<_callbacks.length; i++)\r\n\t _callbacks[i](err, sch);\r\n\t }\r\n\t });\r\n\t }\r\n\r\n\t function schemaLoaded(err, sch) {\r\n\t if (err) return callback(err);\r\n\t if (!(self._refs[ref] || self._schemas[ref])) {\r\n\t try {\r\n\t self.addSchema(sch, ref);\r\n\t } catch(e) {\r\n\t callback(e);\r\n\t return;\r\n\t }\r\n\t }\r\n\t _compileAsync(schema, callback);\r\n\t }\r\n\t }\r\n\r\n\t function deferCallback(err, validate) {\r\n\t if (firstCall) setTimeout(function() { callback(err, validate); });\r\n\t else return callback(err, validate);\r\n\t }\r\n\t }\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 18 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_validate(it, $keyword) {\r\n\t var out = '';\r\n\t var $async = it.schema.$async === true;\r\n\t if (it.isTop) {\r\n\t var $top = it.isTop,\r\n\t $lvl = it.level = 0,\r\n\t $dataLvl = it.dataLevel = 0,\r\n\t $data = 'data';\r\n\t it.rootId = it.resolve.fullPath(it.root.schema.id);\r\n\t it.baseId = it.baseId || it.rootId;\r\n\t if ($async) {\r\n\t it.async = true;\r\n\t var $es7 = it.opts.async == 'es7';\r\n\t it.yieldAwait = $es7 ? 'await' : 'yield';\r\n\t }\r\n\t delete it.isTop;\r\n\t it.dataPathArr = [undefined];\r\n\t out += ' validate = ';\r\n\t if ($async) {\r\n\t if ($es7) {\r\n\t out += ' (async function ';\r\n\t } else {\r\n\t if (it.opts.async == 'co*') {\r\n\t out += 'co.wrap';\r\n\t }\r\n\t out += '(function* ';\r\n\t }\r\n\t } else {\r\n\t out += ' (function ';\r\n\t }\r\n\t out += ' (data, dataPath, parentData, parentDataProperty) { \\'use strict\\'; var vErrors = null; ';\r\n\t out += ' var errors = 0; ';\r\n\t } else {\r\n\t var $lvl = it.level,\r\n\t $dataLvl = it.dataLevel,\r\n\t $data = 'data' + ($dataLvl || '');\r\n\t if (it.schema.id) it.baseId = it.resolve.url(it.baseId, it.schema.id);\r\n\t if ($async && !it.async) throw new Error('async schema in sync schema');\r\n\t out += ' var errs_' + ($lvl) + ' = errors;';\r\n\t }\r\n\t var $valid = 'valid' + $lvl,\r\n\t $breakOnError = !it.opts.allErrors,\r\n\t $closingBraces1 = '',\r\n\t $closingBraces2 = '',\r\n\t $errorKeyword;\r\n\t var $typeSchema = it.schema.type,\r\n\t $typeIsArray = Array.isArray($typeSchema);\r\n\t if ($typeSchema && it.opts.coerceTypes) {\r\n\t var $coerceToTypes = it.util.coerceToTypes($typeSchema);\r\n\t if ($coerceToTypes) {\r\n\t var $schemaPath = it.schemaPath + '.type',\r\n\t $errSchemaPath = it.errSchemaPath + '/type',\r\n\t $method = $typeIsArray ? 'checkDataTypes' : 'checkDataType';\r\n\t out += ' if (' + (it.util[$method]($typeSchema, $data, true)) + ') { ';\r\n\t var $dataType = 'dataType' + $lvl,\r\n\t $coerced = 'coerced' + $lvl;\r\n\t out += ' var ' + ($dataType) + ' = typeof ' + ($data) + '; var ' + ($coerced) + ' = undefined; ';\r\n\t var $bracesCoercion = '';\r\n\t var arr1 = $coerceToTypes;\r\n\t if (arr1) {\r\n\t var $type, $i = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while ($i < l1) {\r\n\t $type = arr1[$i += 1];\r\n\t if ($i) {\r\n\t out += ' if (' + ($coerced) + ' === undefined) { ';\r\n\t $bracesCoercion += '}';\r\n\t }\r\n\t if ($type == 'string') {\r\n\t out += ' if (' + ($dataType) + ' == \\'number\\' || ' + ($dataType) + ' == \\'boolean\\') ' + ($coerced) + ' = \\'\\' + ' + ($data) + '; else if (' + ($data) + ' === null) ' + ($coerced) + ' = \\'\\'; ';\r\n\t } else if ($type == 'number' || $type == 'integer') {\r\n\t out += ' if (' + ($dataType) + ' == \\'boolean\\' || ' + ($data) + ' === null || (' + ($dataType) + ' == \\'string\\' && ' + ($data) + ' && ' + ($data) + ' == +' + ($data) + ' ';\r\n\t if ($type == 'integer') {\r\n\t out += ' && !(' + ($data) + ' % 1)';\r\n\t }\r\n\t out += ')) ' + ($coerced) + ' = +' + ($data) + '; ';\r\n\t } else if ($type == 'boolean') {\r\n\t out += ' if (' + ($data) + ' === \\'false\\' || ' + ($data) + ' === 0 || ' + ($data) + ' === null) ' + ($coerced) + ' = false; else if (' + ($data) + ' === \\'true\\' || ' + ($data) + ' === 1) ' + ($coerced) + ' = true; ';\r\n\t } else if ($type == 'null') {\r\n\t out += ' if (' + ($data) + ' === \\'\\' || ' + ($data) + ' === 0 || ' + ($data) + ' === false) ' + ($coerced) + ' = null; ';\r\n\t }\r\n\t }\r\n\t }\r\n\t out += ' ' + ($bracesCoercion) + ' if (' + ($coerced) + ' === undefined) { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'type') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { type: \\'';\r\n\t if ($typeIsArray) {\r\n\t out += '' + ($typeSchema.join(\",\"));\r\n\t } else {\r\n\t out += '' + ($typeSchema);\r\n\t }\r\n\t out += '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should be ';\r\n\t if ($typeIsArray) {\r\n\t out += '' + ($typeSchema.join(\",\"));\r\n\t } else {\r\n\t out += '' + ($typeSchema);\r\n\t }\r\n\t out += '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } else { ';\r\n\t if ($dataLvl) {\r\n\t var $parentData = 'data' + (($dataLvl - 1) || ''),\r\n\t $dataProperty = it.dataPathArr[$dataLvl];\r\n\t out += ' ' + ($data) + ' = ' + ($parentData) + '[' + ($dataProperty) + '] = ' + ($coerced) + '; ';\r\n\t } else {\r\n\t out += ' data = ' + ($coerced) + '; if (parentData !== undefined) parentData[parentDataProperty] = ' + ($coerced) + '; ';\r\n\t }\r\n\t out += ' } } ';\r\n\t }\r\n\t }\r\n\t var arr2 = it.RULES;\r\n\t if (arr2) {\r\n\t var $rulesGroup, i2 = -1,\r\n\t l2 = arr2.length - 1;\r\n\t while (i2 < l2) {\r\n\t $rulesGroup = arr2[i2 += 1];\r\n\t if ($shouldUseGroup($rulesGroup)) {\r\n\t if ($rulesGroup.type) {\r\n\t out += ' if (' + (it.util.checkDataType($rulesGroup.type, $data)) + ') { ';\r\n\t }\r\n\t if (it.opts.useDefaults && !it.compositeRule) {\r\n\t if ($rulesGroup.type == 'object' && it.schema.properties) {\r\n\t var $schema = it.schema.properties,\r\n\t $schemaKeys = Object.keys($schema);\r\n\t var arr3 = $schemaKeys;\r\n\t if (arr3) {\r\n\t var $propertyKey, i3 = -1,\r\n\t l3 = arr3.length - 1;\r\n\t while (i3 < l3) {\r\n\t $propertyKey = arr3[i3 += 1];\r\n\t var $sch = $schema[$propertyKey];\r\n\t if ($sch.default !== undefined) {\r\n\t var $passData = $data + it.util.getProperty($propertyKey);\r\n\t out += ' if (' + ($passData) + ' === undefined) ' + ($passData) + ' = ';\r\n\t if (it.opts.useDefaults == 'clone') {\r\n\t out += ' ' + (JSON.stringify($sch.default)) + ' ';\r\n\t } else {\r\n\t out += ' ' + (it.useDefault($sch.default)) + ' ';\r\n\t }\r\n\t out += '; ';\r\n\t }\r\n\t }\r\n\t }\r\n\t } else if ($rulesGroup.type == 'array' && Array.isArray(it.schema.items)) {\r\n\t var arr4 = it.schema.items;\r\n\t if (arr4) {\r\n\t var $sch, $i = -1,\r\n\t l4 = arr4.length - 1;\r\n\t while ($i < l4) {\r\n\t $sch = arr4[$i += 1];\r\n\t if ($sch.default !== undefined) {\r\n\t var $passData = $data + '[' + $i + ']';\r\n\t out += ' if (' + ($passData) + ' === undefined) ' + ($passData) + ' = ';\r\n\t if (it.opts.useDefaults == 'clone') {\r\n\t out += ' ' + (JSON.stringify($sch.default)) + ' ';\r\n\t } else {\r\n\t out += ' ' + (it.useDefault($sch.default)) + ' ';\r\n\t }\r\n\t out += '; ';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t var arr5 = $rulesGroup.rules;\r\n\t if (arr5) {\r\n\t var $rule, i5 = -1,\r\n\t l5 = arr5.length - 1;\r\n\t while (i5 < l5) {\r\n\t $rule = arr5[i5 += 1];\r\n\t if ($shouldUseRule($rule)) {\r\n\t if ($rule.custom) {\r\n\t var $schema = it.schema[$rule.keyword],\r\n\t $ruleValidate = it.useCustomRule($rule, $schema, it.schema, it),\r\n\t $ruleErrs = $ruleValidate.code + '.errors',\r\n\t $schemaPath = it.schemaPath + '.' + $rule.keyword,\r\n\t $errSchemaPath = it.errSchemaPath + '/' + $rule.keyword,\r\n\t $errs = 'errs' + $lvl,\r\n\t $i = 'i' + $lvl,\r\n\t $ruleErr = 'ruleErr' + $lvl,\r\n\t $rDef = $rule.definition,\r\n\t $asyncKeyword = $rDef.async,\r\n\t $inline = $rDef.inline,\r\n\t $macro = $rDef.macro;\r\n\t if ($asyncKeyword && !it.async) throw new Error('async keyword in sync schema');\r\n\t if (!($inline || $macro)) {\r\n\t out += '' + ($ruleErrs) + ' = null;';\r\n\t }\r\n\t out += 'var ' + ($errs) + ' = errors;var valid' + ($lvl) + ';';\r\n\t if ($inline && $rDef.statements) {\r\n\t out += ' ' + ($ruleValidate.validate);\r\n\t } else if ($macro) {\r\n\t var $it = it.util.copy(it);\r\n\t $it.level++;\r\n\t $it.schema = $ruleValidate.validate;\r\n\t $it.schemaPath = '';\r\n\t var $wasComposite = it.compositeRule;\r\n\t it.compositeRule = $it.compositeRule = true;\r\n\t var $code = it.validate($it).replace(/validate\\.schema/g, $ruleValidate.code);\r\n\t it.compositeRule = $it.compositeRule = $wasComposite;\r\n\t out += ' ' + ($code);\r\n\t } else if ($rDef.compile || $rDef.validate) {\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = '';\r\n\t out += ' ' + ($ruleValidate.code) + '.call( ';\r\n\t if (it.opts.passContext) {\r\n\t out += 'this';\r\n\t } else {\r\n\t out += 'self';\r\n\t }\r\n\t var $validateArgs = $ruleValidate.validate.length;\r\n\t if ($rDef.compile || $rDef.schema === false) {\r\n\t out += ' , ' + ($data) + ' ';\r\n\t } else {\r\n\t out += ' , validate.schema' + ($schemaPath) + ' , ' + ($data) + ' , validate.schema' + (it.schemaPath) + ' ';\r\n\t }\r\n\t out += ' , (dataPath || \\'\\')';\r\n\t if (it.errorPath != '\"\"') {\r\n\t out += ' + ' + (it.errorPath);\r\n\t }\r\n\t if ($dataLvl) {\r\n\t out += ' , data' + (($dataLvl - 1) || '') + ' , ' + (it.dataPathArr[$dataLvl]) + ' ';\r\n\t } else {\r\n\t out += ' , parentData , parentDataProperty ';\r\n\t }\r\n\t out += ' ) ';\r\n\t var def_callRuleValidate = out;\r\n\t out = $$outStack.pop();\r\n\t if ($rDef.errors !== false) {\r\n\t if ($asyncKeyword) {\r\n\t $ruleErrs = 'customErrors' + $lvl;\r\n\t out += ' var ' + ($ruleErrs) + ' = null; try { valid' + ($lvl) + ' = ' + (it.yieldAwait) + (def_callRuleValidate) + '; } catch (e) { valid' + ($lvl) + ' = false; if (e instanceof ValidationError) ' + ($ruleErrs) + ' = e.errors; else throw e; } ';\r\n\t } else {\r\n\t out += ' ' + ($ruleValidate.code) + '.errors = null; ';\r\n\t }\r\n\t }\r\n\t }\r\n\t out += 'if (! ';\r\n\t if ($inline) {\r\n\t if ($rDef.statements) {\r\n\t out += ' valid' + ($lvl) + ' ';\r\n\t } else {\r\n\t out += ' (' + ($ruleValidate.validate) + ') ';\r\n\t }\r\n\t } else if ($macro) {\r\n\t out += ' valid' + ($it.level) + ' ';\r\n\t } else {\r\n\t if ($asyncKeyword) {\r\n\t if ($rDef.errors === false) {\r\n\t out += ' (' + (it.yieldAwait) + (def_callRuleValidate) + ') ';\r\n\t } else {\r\n\t out += ' valid' + ($lvl) + ' ';\r\n\t }\r\n\t } else {\r\n\t out += ' ' + (def_callRuleValidate) + ' ';\r\n\t }\r\n\t }\r\n\t out += ') { ';\r\n\t $errorKeyword = $rule.keyword;\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = '';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'custom') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { keyword: \\'' + ($rule.keyword) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should pass \"' + ($rule.keyword) + '\" keyword validation\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t var def_customError = out;\r\n\t out = $$outStack.pop();\r\n\t if ($inline) {\r\n\t if ($rDef.errors) {\r\n\t if ($rDef.errors != 'full') {\r\n\t out += ' for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) { ' + ($ruleErr) + '.dataPath = (dataPath || \\'\\') + ' + (it.errorPath) + '; } if (' + ($ruleErr) + '.schemaPath === undefined) { ' + ($ruleErr) + '.schemaPath = \"' + ($errSchemaPath) + '\"; } ';\r\n\t if (it.opts.verbose) {\r\n\t out += ' ' + ($ruleErr) + '.schema = validate.schema' + ($schemaPath) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; ';\r\n\t }\r\n\t out += ' } ';\r\n\t }\r\n\t } else {\r\n\t if ($rDef.errors === false) {\r\n\t out += ' ' + (def_customError) + ' ';\r\n\t } else {\r\n\t out += ' if (' + ($errs) + ' == errors) { ' + (def_customError) + ' } else { for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) { ' + ($ruleErr) + '.dataPath = (dataPath || \\'\\') + ' + (it.errorPath) + '; } if (' + ($ruleErr) + '.schemaPath === undefined) { ' + ($ruleErr) + '.schemaPath = \"' + ($errSchemaPath) + '\"; } ';\r\n\t if (it.opts.verbose) {\r\n\t out += ' ' + ($ruleErr) + '.schema = validate.schema' + ($schemaPath) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; ';\r\n\t }\r\n\t out += ' } } ';\r\n\t }\r\n\t }\r\n\t } else if ($macro) {\r\n\t out += ' var err = '; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'custom') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { keyword: \\'' + ($rule.keyword) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should pass \"' + ($rule.keyword) + '\" keyword validation\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError(vErrors); ';\r\n\t } else {\r\n\t out += ' validate.errors = vErrors; return false ';\r\n\t }\r\n\t }\r\n\t } else {\r\n\t if ($rDef.errors === false) {\r\n\t out += ' ' + (def_customError) + ' ';\r\n\t } else {\r\n\t out += ' if (Array.isArray(' + ($ruleErrs) + ')) { if (vErrors === null) vErrors = ' + ($ruleErrs) + '; else vErrors.concat(' + ($ruleErrs) + '); errors = vErrors.length; for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; ' + ($ruleErr) + '.dataPath = (dataPath || \\'\\') + ' + (it.errorPath) + '; ' + ($ruleErr) + '.schemaPath = \"' + ($errSchemaPath) + '\"; ';\r\n\t if (it.opts.verbose) {\r\n\t out += ' ' + ($ruleErr) + '.schema = validate.schema' + ($schemaPath) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; ';\r\n\t }\r\n\t out += ' } } else { ' + (def_customError) + ' } ';\r\n\t }\r\n\t }\r\n\t $errorKeyword = undefined;\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t } else {\r\n\t out += ' ' + ($rule.code(it, $rule.keyword)) + ' ';\r\n\t }\r\n\t if ($breakOnError) {\r\n\t $closingBraces1 += '}';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' ' + ($closingBraces1) + ' ';\r\n\t $closingBraces1 = '';\r\n\t }\r\n\t if ($rulesGroup.type) {\r\n\t out += ' } ';\r\n\t if ($typeSchema && $typeSchema === $rulesGroup.type) {\r\n\t var $typeChecked = true;\r\n\t out += ' else { ';\r\n\t var $schemaPath = it.schemaPath + '.type',\r\n\t $errSchemaPath = it.errSchemaPath + '/type';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'type') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { type: \\'';\r\n\t if ($typeIsArray) {\r\n\t out += '' + ($typeSchema.join(\",\"));\r\n\t } else {\r\n\t out += '' + ($typeSchema);\r\n\t }\r\n\t out += '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should be ';\r\n\t if ($typeIsArray) {\r\n\t out += '' + ($typeSchema.join(\",\"));\r\n\t } else {\r\n\t out += '' + ($typeSchema);\r\n\t }\r\n\t out += '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } ';\r\n\t }\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' if (errors === ';\r\n\t if ($top) {\r\n\t out += '0';\r\n\t } else {\r\n\t out += 'errs_' + ($lvl);\r\n\t }\r\n\t out += ') { ';\r\n\t $closingBraces2 += '}';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t if ($typeSchema && !$typeChecked && !(it.opts.coerceTypes && $coerceToTypes)) {\r\n\t var $schemaPath = it.schemaPath + '.type',\r\n\t $errSchemaPath = it.errSchemaPath + '/type',\r\n\t $method = $typeIsArray ? 'checkDataTypes' : 'checkDataType';\r\n\t out += ' if (' + (it.util[$method]($typeSchema, $data, true)) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'type') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { type: \\'';\r\n\t if ($typeIsArray) {\r\n\t out += '' + ($typeSchema.join(\",\"));\r\n\t } else {\r\n\t out += '' + ($typeSchema);\r\n\t }\r\n\t out += '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should be ';\r\n\t if ($typeIsArray) {\r\n\t out += '' + ($typeSchema.join(\",\"));\r\n\t } else {\r\n\t out += '' + ($typeSchema);\r\n\t }\r\n\t out += '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' }';\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' ' + ($closingBraces2) + ' ';\r\n\t }\r\n\t if ($top) {\r\n\t if ($async) {\r\n\t out += ' if (errors === 0) return true; ';\r\n\t out += ' else throw new ValidationError(vErrors); ';\r\n\t } else {\r\n\t out += ' validate.errors = vErrors; ';\r\n\t out += ' return errors === 0; ';\r\n\t }\r\n\t out += ' });';\r\n\t } else {\r\n\t out += ' var ' + ($valid) + ' = errors === errs_' + ($lvl) + ';';\r\n\t }\r\n\t out = it.util.cleanUpCode(out);\r\n\t if ($top && $breakOnError) {\r\n\t out = it.util.cleanUpVarErrors(out, $async);\r\n\t }\r\n\r\n\t function $shouldUseGroup($rulesGroup) {\r\n\t for (var i = 0; i < $rulesGroup.rules.length; i++)\r\n\t if ($shouldUseRule($rulesGroup.rules[i])) return true;\r\n\t }\r\n\r\n\t function $shouldUseRule($rule) {\r\n\t return it.schema[$rule.keyword] !== undefined || ($rule.keyword == 'properties' && (it.schema.additionalProperties === false || typeof it.schema.additionalProperties == 'object' || (it.schema.patternProperties && Object.keys(it.schema.patternProperties).length) || (it.opts.v5 && it.schema.patternGroups && Object.keys(it.schema.patternGroups).length)));\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 19 */\r\n/***/ function(module, exports) {\r\n\r\n\t\r\n\t/**\r\n\t * slice() reference.\r\n\t */\r\n\r\n\tvar slice = Array.prototype.slice;\r\n\r\n\t/**\r\n\t * Expose `co`.\r\n\t */\r\n\r\n\tmodule.exports = co['default'] = co.co = co;\r\n\r\n\t/**\r\n\t * Wrap the given generator `fn` into a\r\n\t * function that returns a promise.\r\n\t * This is a separate function so that\r\n\t * every `co()` call doesn't create a new,\r\n\t * unnecessary closure.\r\n\t *\r\n\t * @param {GeneratorFunction} fn\r\n\t * @return {Function}\r\n\t * @api public\r\n\t */\r\n\r\n\tco.wrap = function (fn) {\r\n\t createPromise.__generatorFunction__ = fn;\r\n\t return createPromise;\r\n\t function createPromise() {\r\n\t return co.call(this, fn.apply(this, arguments));\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Execute the generator function or a generator\r\n\t * and return a promise.\r\n\t *\r\n\t * @param {Function} fn\r\n\t * @return {Promise}\r\n\t * @api public\r\n\t */\r\n\r\n\tfunction co(gen) {\r\n\t var ctx = this;\r\n\t var args = slice.call(arguments, 1)\r\n\r\n\t // we wrap everything in a promise to avoid promise chaining,\r\n\t // which leads to memory leak errors.\r\n\t // see https://github.com/tj/co/issues/180\r\n\t return new Promise(function(resolve, reject) {\r\n\t if (typeof gen === 'function') gen = gen.apply(ctx, args);\r\n\t if (!gen || typeof gen.next !== 'function') return resolve(gen);\r\n\r\n\t onFulfilled();\r\n\r\n\t /**\r\n\t * @param {Mixed} res\r\n\t * @return {Promise}\r\n\t * @api private\r\n\t */\r\n\r\n\t function onFulfilled(res) {\r\n\t var ret;\r\n\t try {\r\n\t ret = gen.next(res);\r\n\t } catch (e) {\r\n\t return reject(e);\r\n\t }\r\n\t next(ret);\r\n\t }\r\n\r\n\t /**\r\n\t * @param {Error} err\r\n\t * @return {Promise}\r\n\t * @api private\r\n\t */\r\n\r\n\t function onRejected(err) {\r\n\t var ret;\r\n\t try {\r\n\t ret = gen.throw(err);\r\n\t } catch (e) {\r\n\t return reject(e);\r\n\t }\r\n\t next(ret);\r\n\t }\r\n\r\n\t /**\r\n\t * Get the next value in the generator,\r\n\t * return a promise.\r\n\t *\r\n\t * @param {Object} ret\r\n\t * @return {Promise}\r\n\t * @api private\r\n\t */\r\n\r\n\t function next(ret) {\r\n\t if (ret.done) return resolve(ret.value);\r\n\t var value = toPromise.call(ctx, ret.value);\r\n\t if (value && isPromise(value)) return value.then(onFulfilled, onRejected);\r\n\t return onRejected(new TypeError('You may only yield a function, promise, generator, array, or object, '\r\n\t + 'but the following object was passed: \"' + String(ret.value) + '\"'));\r\n\t }\r\n\t });\r\n\t}\r\n\r\n\t/**\r\n\t * Convert a `yield`ed value into a promise.\r\n\t *\r\n\t * @param {Mixed} obj\r\n\t * @return {Promise}\r\n\t * @api private\r\n\t */\r\n\r\n\tfunction toPromise(obj) {\r\n\t if (!obj) return obj;\r\n\t if (isPromise(obj)) return obj;\r\n\t if (isGeneratorFunction(obj) || isGenerator(obj)) return co.call(this, obj);\r\n\t if ('function' == typeof obj) return thunkToPromise.call(this, obj);\r\n\t if (Array.isArray(obj)) return arrayToPromise.call(this, obj);\r\n\t if (isObject(obj)) return objectToPromise.call(this, obj);\r\n\t return obj;\r\n\t}\r\n\r\n\t/**\r\n\t * Convert a thunk to a promise.\r\n\t *\r\n\t * @param {Function}\r\n\t * @return {Promise}\r\n\t * @api private\r\n\t */\r\n\r\n\tfunction thunkToPromise(fn) {\r\n\t var ctx = this;\r\n\t return new Promise(function (resolve, reject) {\r\n\t fn.call(ctx, function (err, res) {\r\n\t if (err) return reject(err);\r\n\t if (arguments.length > 2) res = slice.call(arguments, 1);\r\n\t resolve(res);\r\n\t });\r\n\t });\r\n\t}\r\n\r\n\t/**\r\n\t * Convert an array of \"yieldables\" to a promise.\r\n\t * Uses `Promise.all()` internally.\r\n\t *\r\n\t * @param {Array} obj\r\n\t * @return {Promise}\r\n\t * @api private\r\n\t */\r\n\r\n\tfunction arrayToPromise(obj) {\r\n\t return Promise.all(obj.map(toPromise, this));\r\n\t}\r\n\r\n\t/**\r\n\t * Convert an object of \"yieldables\" to a promise.\r\n\t * Uses `Promise.all()` internally.\r\n\t *\r\n\t * @param {Object} obj\r\n\t * @return {Promise}\r\n\t * @api private\r\n\t */\r\n\r\n\tfunction objectToPromise(obj){\r\n\t var results = new obj.constructor();\r\n\t var keys = Object.keys(obj);\r\n\t var promises = [];\r\n\t for (var i = 0; i < keys.length; i++) {\r\n\t var key = keys[i];\r\n\t var promise = toPromise.call(this, obj[key]);\r\n\t if (promise && isPromise(promise)) defer(promise, key);\r\n\t else results[key] = obj[key];\r\n\t }\r\n\t return Promise.all(promises).then(function () {\r\n\t return results;\r\n\t });\r\n\r\n\t function defer(promise, key) {\r\n\t // predefine the key in the result\r\n\t results[key] = undefined;\r\n\t promises.push(promise.then(function (res) {\r\n\t results[key] = res;\r\n\t }));\r\n\t }\r\n\t}\r\n\r\n\t/**\r\n\t * Check if `obj` is a promise.\r\n\t *\r\n\t * @param {Object} obj\r\n\t * @return {Boolean}\r\n\t * @api private\r\n\t */\r\n\r\n\tfunction isPromise(obj) {\r\n\t return 'function' == typeof obj.then;\r\n\t}\r\n\r\n\t/**\r\n\t * Check if `obj` is a generator.\r\n\t *\r\n\t * @param {Mixed} obj\r\n\t * @return {Boolean}\r\n\t * @api private\r\n\t */\r\n\r\n\tfunction isGenerator(obj) {\r\n\t return 'function' == typeof obj.next && 'function' == typeof obj.throw;\r\n\t}\r\n\r\n\t/**\r\n\t * Check if `obj` is a generator function.\r\n\t *\r\n\t * @param {Mixed} obj\r\n\t * @return {Boolean}\r\n\t * @api private\r\n\t */\r\n\tfunction isGeneratorFunction(obj) {\r\n\t var constructor = obj.constructor;\r\n\t if (!constructor) return false;\r\n\t if ('GeneratorFunction' === constructor.name || 'GeneratorFunction' === constructor.displayName) return true;\r\n\t return isGenerator(constructor.prototype);\r\n\t}\r\n\r\n\t/**\r\n\t * Check for plain object.\r\n\t *\r\n\t * @param {Mixed} val\r\n\t * @return {Boolean}\r\n\t * @api private\r\n\t */\r\n\r\n\tfunction isObject(val) {\r\n\t return Object == val.constructor;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 20 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\r\n\tmodule.exports = ValidationError;\r\n\r\n\r\n\tfunction ValidationError(errors) {\r\n\t this.message = 'validation failed';\r\n\t this.errors = errors;\r\n\t this.ajv = this.validation = true;\r\n\t}\r\n\r\n\r\n\tValidationError.prototype = Object.create(Error.prototype);\r\n\tValidationError.prototype.constructor = ValidationError;\r\n\r\n\r\n/***/ },\r\n/* 21 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\r\n\r\n\tvar Cache = module.exports = function Cache() {\r\n\t this._cache = {};\r\n\t};\r\n\r\n\r\n\tCache.prototype.put = function Cache_put(key, value) {\r\n\t this._cache[key] = value;\r\n\t};\r\n\r\n\r\n\tCache.prototype.get = function Cache_get(key) {\r\n\t return this._cache[key];\r\n\t};\r\n\r\n\r\n\tCache.prototype.del = function Cache_del(key) {\r\n\t delete this._cache[key];\r\n\t};\r\n\r\n\r\n\tCache.prototype.clear = function Cache_clear() {\r\n\t this._cache = {};\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 22 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar util = __webpack_require__(11);\r\n\r\n\tvar DATE = /^\\d\\d\\d\\d-(\\d\\d)-(\\d\\d)$/;\r\n\tvar DAYS = [0,31,29,31,30,31,30,31,31,30,31,30,31];\r\n\tvar TIME = /^(\\d\\d):(\\d\\d):(\\d\\d)(\\.\\d+)?(z|[+-]\\d\\d:\\d\\d)?$/i;\r\n\tvar HOSTNAME = /^[a-z](?:(?:[-0-9a-z]{0,61})?[0-9a-z])?(\\.[a-z](?:(?:[-0-9a-z]{0,61})?[0-9a-z])?)*$/i;\r\n\tvar URI = /^(?:[a-z][a-z0-9+\\-.]*:)?(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\\?(?:[a-z0-9\\-._~!$&'()*+,;=:@\\/?]|%[0-9a-f]{2})*)?(?:\\#(?:[a-z0-9\\-._~!$&'()*+,;=:@\\/?]|%[0-9a-f]{2})*)?$/i;\r\n\tvar UUID = /^(?:urn\\:uuid\\:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i;\r\n\tvar JSON_POINTER = /^(?:\\/(?:[^~\\/]|~0|~1)+)*(?:\\/)?$|^\\#(?:\\/(?:[a-z0-9_\\-\\.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)+)*(?:\\/)?$/i;\r\n\tvar RELATIVE_JSON_POINTER = /^(?:0|[1-9][0-9]*)(?:\\#|(?:\\/(?:[^~\\/]|~0|~1)+)*(?:\\/)?)$/;\r\n\r\n\r\n\tmodule.exports = formats;\r\n\r\n\tfunction formats(mode) {\r\n\t mode = mode == 'full' ? 'full' : 'fast';\r\n\t var formatDefs = util.copy(formats[mode]);\r\n\t for (var fName in formats.compare) {\r\n\t formatDefs[fName] = {\r\n\t validate: formatDefs[fName],\r\n\t compare: formats.compare[fName]\r\n\t };\r\n\t }\r\n\t return formatDefs;\r\n\t}\r\n\r\n\r\n\tformats.fast = {\r\n\t // date: http://tools.ietf.org/html/rfc3339#section-5.6\r\n\t date: /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d$/,\r\n\t // date-time: http://tools.ietf.org/html/rfc3339#section-5.6\r\n\t time: /^[0-2]\\d:[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:z|[+-]\\d\\d:\\d\\d)?$/i,\r\n\t 'date-time': /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d[t\\s][0-2]\\d:[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:z|[+-]\\d\\d:\\d\\d)$/i,\r\n\t // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js\r\n\t uri: /^(?:[a-z][a-z0-9+-.]*)?(?:\\:|\\/)\\/?[^\\s]*$/i,\r\n\t // email (sources from jsen validator):\r\n\t // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363\r\n\t // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'willful violation')\r\n\t email: /^[a-z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,\r\n\t hostname: HOSTNAME,\r\n\t // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html\r\n\t ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\r\n\t // optimized http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses\r\n\t ipv6: /^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,\r\n\t regex: regex,\r\n\t // uuid: http://tools.ietf.org/html/rfc4122\r\n\t uuid: UUID,\r\n\t // JSON-pointer: https://tools.ietf.org/html/rfc6901\r\n\t // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A\r\n\t 'json-pointer': JSON_POINTER,\r\n\t // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00\r\n\t 'relative-json-pointer': RELATIVE_JSON_POINTER\r\n\t};\r\n\r\n\r\n\tformats.full = {\r\n\t date: date,\r\n\t time: time,\r\n\t 'date-time': date_time,\r\n\t uri: uri,\r\n\t email: /^[a-z0-9!#$%&'*+\\/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&''*+\\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,\r\n\t hostname: hostname,\r\n\t ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\r\n\t ipv6: /^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,\r\n\t regex: regex,\r\n\t uuid: UUID,\r\n\t 'json-pointer': JSON_POINTER,\r\n\t 'relative-json-pointer': RELATIVE_JSON_POINTER\r\n\t};\r\n\r\n\r\n\tformats.compare = {\r\n\t date: compareDate,\r\n\t time: compareTime,\r\n\t 'date-time': compareDateTime\r\n\t};\r\n\r\n\r\n\tfunction date(str) {\r\n\t // full-date from http://tools.ietf.org/html/rfc3339#section-5.6\r\n\t var matches = str.match(DATE);\r\n\t if (!matches) return false;\r\n\r\n\t var month = +matches[1];\r\n\t var day = +matches[2];\r\n\t return month >= 1 && month <= 12 && day >= 1 && day <= DAYS[month];\r\n\t}\r\n\r\n\r\n\tfunction time(str, full) {\r\n\t var matches = str.match(TIME);\r\n\t if (!matches) return false;\r\n\r\n\t var hour = matches[1];\r\n\t var minute = matches[2];\r\n\t var second = matches[3];\r\n\t var timeZone = matches[5];\r\n\t return hour <= 23 && minute <= 59 && second <= 59 && (!full || timeZone);\r\n\t}\r\n\r\n\r\n\tvar DATE_TIME_SEPARATOR = /t|\\s/i;\r\n\tfunction date_time(str) {\r\n\t // http://tools.ietf.org/html/rfc3339#section-5.6\r\n\t var dateTime = str.split(DATE_TIME_SEPARATOR);\r\n\t return date(dateTime[0]) && time(dateTime[1], true);\r\n\t}\r\n\r\n\r\n\tfunction hostname(str) {\r\n\t // http://tools.ietf.org/html/rfc1034#section-3.5\r\n\t return str.length <= 255 && HOSTNAME.test(str);\r\n\t}\r\n\r\n\r\n\tvar NOT_URI_FRAGMENT = /\\/|\\:/;\r\n\tfunction uri(str) {\r\n\t // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required \".\"\r\n\t return NOT_URI_FRAGMENT.test(str) && URI.test(str);\r\n\t}\r\n\r\n\r\n\tfunction regex(str) {\r\n\t try {\r\n\t new RegExp(str);\r\n\t return true;\r\n\t } catch(e) {\r\n\t return false;\r\n\t }\r\n\t}\r\n\r\n\r\n\tfunction compareDate(d1, d2) {\r\n\t if (!(d1 && d2)) return;\r\n\t if (d1 > d2) return 1;\r\n\t if (d1 < d2) return -1;\r\n\t if (d1 === d2) return 0;\r\n\t}\r\n\r\n\r\n\tfunction compareTime(t1, t2) {\r\n\t if (!(t1 && t2)) return;\r\n\t t1 = t1.match(TIME);\r\n\t t2 = t2.match(TIME);\r\n\t if (!(t1 && t2)) return;\r\n\t t1 = t1[1] + t1[2] + t1[3] + (t1[4]||'');\r\n\t t2 = t2[1] + t2[2] + t2[3] + (t2[4]||'');\r\n\t if (t1 > t2) return 1;\r\n\t if (t1 < t2) return -1;\r\n\t if (t1 === t2) return 0;\r\n\t}\r\n\r\n\r\n\tfunction compareDateTime(dt1, dt2) {\r\n\t if (!(dt1 && dt2)) return;\r\n\t dt1 = dt1.split(DATE_TIME_SEPARATOR);\r\n\t dt2 = dt2.split(DATE_TIME_SEPARATOR);\r\n\t var res = compareDate(dt1[0], dt2[0]);\r\n\t if (res === undefined) return;\r\n\t return res || compareTime(dt1[1], dt2[1]);\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 23 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar ruleModules = __webpack_require__(24)\r\n\t , util = __webpack_require__(11);\r\n\r\n\tmodule.exports = function rules() {\r\n\t var RULES = [\r\n\t { type: 'number',\r\n\t rules: [ 'maximum', 'minimum', 'multipleOf'] },\r\n\t { type: 'string',\r\n\t rules: [ 'maxLength', 'minLength', 'pattern', 'format' ] },\r\n\t { type: 'array',\r\n\t rules: [ 'maxItems', 'minItems', 'uniqueItems', 'items' ] },\r\n\t { type: 'object',\r\n\t rules: [ 'maxProperties', 'minProperties', 'required', 'dependencies', 'properties' ] },\r\n\t { rules: [ '$ref', 'enum', 'not', 'anyOf', 'oneOf', 'allOf' ] }\r\n\t ];\r\n\r\n\t RULES.all = [ 'type', 'additionalProperties', 'patternProperties' ];\r\n\t RULES.keywords = [ 'additionalItems', '$schema', 'id', 'title', 'description', 'default' ];\r\n\t RULES.types = [ 'number', 'integer', 'string', 'array', 'object', 'boolean', 'null' ];\r\n\r\n\t RULES.forEach(function (group) {\r\n\t group.rules = group.rules.map(function (keyword) {\r\n\t RULES.all.push(keyword);\r\n\t return {\r\n\t keyword: keyword,\r\n\t code: ruleModules[keyword]\r\n\t };\r\n\t });\r\n\t });\r\n\r\n\t RULES.keywords = util.toHash(RULES.all.concat(RULES.keywords));\r\n\t RULES.all = util.toHash(RULES.all);\r\n\t RULES.types = util.toHash(RULES.types);\r\n\r\n\t return RULES;\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 24 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\t//all requires must be explicit because browserify won't work with dynamic requires\r\n\tmodule.exports = {\r\n\t '$ref': __webpack_require__(25),\r\n\t allOf: __webpack_require__(26),\r\n\t anyOf: __webpack_require__(27),\r\n\t dependencies: __webpack_require__(28),\r\n\t enum: __webpack_require__(29),\r\n\t format: __webpack_require__(30),\r\n\t items: __webpack_require__(31),\r\n\t maximum: __webpack_require__(32),\r\n\t minimum: __webpack_require__(32),\r\n\t maxItems: __webpack_require__(33),\r\n\t minItems: __webpack_require__(33),\r\n\t maxLength: __webpack_require__(34),\r\n\t minLength: __webpack_require__(34),\r\n\t maxProperties: __webpack_require__(35),\r\n\t minProperties: __webpack_require__(35),\r\n\t multipleOf: __webpack_require__(36),\r\n\t not: __webpack_require__(37),\r\n\t oneOf: __webpack_require__(38),\r\n\t pattern: __webpack_require__(39),\r\n\t properties: __webpack_require__(40),\r\n\t required: __webpack_require__(41),\r\n\t uniqueItems: __webpack_require__(42),\r\n\t validate: __webpack_require__(18)\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 25 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_ref(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $async, $refCode;\r\n\t if ($schema == '#' || $schema == '#/') {\r\n\t if (it.isRoot) {\r\n\t $async = it.async;\r\n\t $refCode = 'validate';\r\n\t } else {\r\n\t $async = it.root.schema.$async === true;\r\n\t $refCode = 'root.refVal[0]';\r\n\t }\r\n\t } else {\r\n\t var $refVal = it.resolveRef(it.baseId, $schema, it.isRoot);\r\n\t if ($refVal === undefined) {\r\n\t var $message = 'can\\'t resolve reference ' + $schema + ' from id ' + it.baseId;\r\n\t if (it.opts.missingRefs == 'fail') {\r\n\t console.log($message);\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '$ref') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { ref: \\'' + (it.util.escapeQuotes($schema)) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'can\\\\\\'t resolve reference ' + (it.util.escapeQuotes($schema)) + '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ' + (it.util.toQuotedString($schema)) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' if (false) { ';\r\n\t }\r\n\t } else if (it.opts.missingRefs == 'ignore') {\r\n\t console.log($message);\r\n\t if ($breakOnError) {\r\n\t out += ' if (true) { ';\r\n\t }\r\n\t } else {\r\n\t var $error = new Error($message);\r\n\t $error.missingRef = it.resolve.url(it.baseId, $schema);\r\n\t $error.missingSchema = it.resolve.normalizeId(it.resolve.fullPath($error.missingRef));\r\n\t throw $error;\r\n\t }\r\n\t } else if ($refVal.inline) {\r\n\t var $it = it.util.copy(it);\r\n\t $it.level++;\r\n\t $it.schema = $refVal.schema;\r\n\t $it.schemaPath = '';\r\n\t $it.errSchemaPath = $schema;\r\n\t var $code = it.validate($it).replace(/validate\\.schema/g, $refVal.code);\r\n\t out += ' ' + ($code) + ' ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t }\r\n\t } else {\r\n\t $async = $refVal.async;\r\n\t $refCode = $refVal.code;\r\n\t }\r\n\t }\r\n\t if ($refCode) {\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = '';\r\n\t if (it.opts.passContext) {\r\n\t out += ' ' + ($refCode) + '.call(this, ';\r\n\t } else {\r\n\t out += ' ' + ($refCode) + '( ';\r\n\t }\r\n\t out += ' ' + ($data) + ', (dataPath || \\'\\')';\r\n\t if (it.errorPath != '\"\"') {\r\n\t out += ' + ' + (it.errorPath);\r\n\t }\r\n\t if ($dataLvl) {\r\n\t out += ' , data' + (($dataLvl - 1) || '') + ' , ' + (it.dataPathArr[$dataLvl]) + ' ';\r\n\t } else {\r\n\t out += ' , parentData , parentDataProperty ';\r\n\t }\r\n\t out += ') ';\r\n\t var __callValidate = out;\r\n\t out = $$outStack.pop();\r\n\t if ($async) {\r\n\t if (!it.async) throw new Error('async schema referenced by sync schema');\r\n\t out += ' try { ';\r\n\t if ($breakOnError) {\r\n\t out += 'var ' + ($valid) + ' =';\r\n\t }\r\n\t out += ' ' + (it.yieldAwait) + ' ' + (__callValidate) + '; } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (' + ($valid) + ') { ';\r\n\t }\r\n\t } else {\r\n\t out += ' if (!' + (__callValidate) + ') { if (vErrors === null) vErrors = ' + ($refCode) + '.errors; else vErrors = vErrors.concat(' + ($refCode) + '.errors); errors = vErrors.length; } ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t }\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 26 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_allOf(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $it = it.util.copy(it);\r\n\t var $closingBraces = '';\r\n\t $it.level++;\r\n\t var arr1 = $schema;\r\n\t if (arr1) {\r\n\t var $sch, $i = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while ($i < l1) {\r\n\t $sch = arr1[$i += 1];\r\n\t if (it.util.schemaHasRules($sch, it.RULES.all)) {\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = $schemaPath + '[' + $i + ']';\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + $i;\r\n\t out += ' ' + (it.validate($it)) + ' ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' ' + ($closingBraces.slice(0, -1));\r\n\t }\r\n\t out = it.util.cleanUpCode(out);\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 27 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_anyOf(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $errs = 'errs__' + $lvl;\r\n\t var $it = it.util.copy(it);\r\n\t var $closingBraces = '';\r\n\t $it.level++;\r\n\t var $noEmptySchema = $schema.every(function($sch) {\r\n\t return it.util.schemaHasRules($sch, it.RULES.all);\r\n\t });\r\n\t if ($noEmptySchema) {\r\n\t out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = false; ';\r\n\t var $wasComposite = it.compositeRule;\r\n\t it.compositeRule = $it.compositeRule = true;\r\n\t var arr1 = $schema;\r\n\t if (arr1) {\r\n\t var $sch, $i = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while ($i < l1) {\r\n\t $sch = arr1[$i += 1];\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = $schemaPath + '[' + $i + ']';\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + $i;\r\n\t out += ' ' + (it.validate($it)) + ' ' + ($valid) + ' = ' + ($valid) + ' || valid' + ($it.level) + '; if (!' + ($valid) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t it.compositeRule = $it.compositeRule = $wasComposite;\r\n\t out += ' ' + ($closingBraces) + ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'anyOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: {} ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should match some schema in anyOf\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\r\n\t if (it.opts.allErrors) {\r\n\t out += ' } ';\r\n\t }\r\n\t out = it.util.cleanUpCode(out);\r\n\t } else {\r\n\t if ($breakOnError) {\r\n\t out += ' if (true) { ';\r\n\t }\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 28 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_dependencies(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $errs = 'errs__' + $lvl;\r\n\t var $it = it.util.copy(it);\r\n\t var $closingBraces = '';\r\n\t $it.level++;\r\n\t var $schemaDeps = {},\r\n\t $propertyDeps = {};\r\n\t for ($property in $schema) {\r\n\t var $sch = $schema[$property];\r\n\t var $deps = Array.isArray($sch) ? $propertyDeps : $schemaDeps;\r\n\t $deps[$property] = $sch;\r\n\t }\r\n\t out += 'var ' + ($errs) + ' = errors;';\r\n\t var $currentErrorPath = it.errorPath;\r\n\t out += 'var missing' + ($lvl) + ';';\r\n\t for (var $property in $propertyDeps) {\r\n\t $deps = $propertyDeps[$property];\r\n\t out += ' if (' + ($data) + (it.util.getProperty($property)) + ' !== undefined && ( ';\r\n\t var arr1 = $deps;\r\n\t if (arr1) {\r\n\t var _$property, $i = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while ($i < l1) {\r\n\t _$property = arr1[$i += 1];\r\n\t if ($i) {\r\n\t out += ' || ';\r\n\t }\r\n\t var $prop = it.util.getProperty(_$property);\r\n\t out += ' ( ' + ($data) + ($prop) + ' === undefined && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? _$property : $prop)) + ') ) ';\r\n\t }\r\n\t }\r\n\t out += ')) { ';\r\n\t var $propertyPath = 'missing' + $lvl,\r\n\t $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;\r\n\t }\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'dependencies') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { property: \\'' + (it.util.escapeQuotes($property)) + '\\', missingProperty: \\'' + ($missingProperty) + '\\', depsCount: ' + ($deps.length) + ', deps: \\'' + (it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(\", \"))) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should have ';\r\n\t if ($deps.length == 1) {\r\n\t out += 'property ' + (it.util.escapeQuotes($deps[0]));\r\n\t } else {\r\n\t out += 'properties ' + (it.util.escapeQuotes($deps.join(\", \")));\r\n\t }\r\n\t out += ' when property ' + (it.util.escapeQuotes($property)) + ' is present\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t $closingBraces += '}';\r\n\t out += ' else { ';\r\n\t }\r\n\t }\r\n\t it.errorPath = $currentErrorPath;\r\n\t for (var $property in $schemaDeps) {\r\n\t var $sch = $schemaDeps[$property];\r\n\t if (it.util.schemaHasRules($sch, it.RULES.all)) {\r\n\t out += ' valid' + ($it.level) + ' = true; if (' + ($data) + '[\\'' + ($property) + '\\'] !== undefined) { ';\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = $schemaPath + it.util.getProperty($property);\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($property);\r\n\t out += ' ' + (it.validate($it)) + ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\r\n\t }\r\n\t out = it.util.cleanUpCode(out);\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 29 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_enum(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t var $i = 'i' + $lvl;\r\n\t if (!$isData) {\r\n\t out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + ';';\r\n\t }\r\n\t out += 'var ' + ($valid) + ';';\r\n\t if ($isData) {\r\n\t out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';\r\n\t }\r\n\t out += '' + ($valid) + ' = false;for (var ' + ($i) + '=0; ' + ($i) + '<schema' + ($lvl) + '.length; ' + ($i) + '++) if (equal(' + ($data) + ', schema' + ($lvl) + '[' + ($i) + '])) { ' + ($valid) + ' = true; break; }';\r\n\t if ($isData) {\r\n\t out += ' } ';\r\n\t }\r\n\t out += ' if (!' + ($valid) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'enum') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: {} ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should be equal to one of the allowed values\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' }';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 30 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_format(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t if (it.opts.format === false) {\r\n\t if ($breakOnError) {\r\n\t out += ' if (true) { ';\r\n\t }\r\n\t return out;\r\n\t }\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t if ($isData) {\r\n\t var $format = 'format' + $lvl;\r\n\t out += ' var ' + ($format) + ' = formats[' + ($schemaValue) + ']; var isObject' + ($lvl) + ' = typeof ' + ($format) + ' == \\'object\\' && !(' + ($format) + ' instanceof RegExp) && ' + ($format) + '.validate; if (isObject' + ($lvl) + ') { var async' + ($lvl) + ' = ' + ($format) + '.async; ' + ($format) + ' = ' + ($format) + '.validate; } if ( ';\r\n\t if ($isData) {\r\n\t out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'string\\') || ';\r\n\t }\r\n\t out += ' (' + ($format) + ' && !(typeof ' + ($format) + ' == \\'function\\' ? ';\r\n\t if (it.async) {\r\n\t out += ' (async' + ($lvl) + ' ? ' + (it.yieldAwait) + ' ' + ($format) + '(' + ($data) + ') : ' + ($format) + '(' + ($data) + ')) ';\r\n\t } else {\r\n\t out += ' ' + ($format) + '(' + ($data) + ') ';\r\n\t }\r\n\t out += ' : ' + ($format) + '.test(' + ($data) + ')))) {';\r\n\t } else {\r\n\t var $format = it.formats[$schema];\r\n\t if (!$format) {\r\n\t if ($breakOnError) {\r\n\t out += ' if (true) { ';\r\n\t }\r\n\t return out;\r\n\t }\r\n\t var $isObject = typeof $format == 'object' && !($format instanceof RegExp) && $format.validate;\r\n\t if ($isObject) {\r\n\t var $async = $format.async === true;\r\n\t $format = $format.validate;\r\n\t }\r\n\t if ($async) {\r\n\t if (!it.async) throw new Error('async format in sync schema');\r\n\t var $formatRef = 'formats' + it.util.getProperty($schema) + '.validate';\r\n\t out += ' if (!(' + (it.yieldAwait) + ' ' + ($formatRef) + '(' + ($data) + '))) { ';\r\n\t } else {\r\n\t out += ' if (! ';\r\n\t var $formatRef = 'formats' + it.util.getProperty($schema);\r\n\t if ($isObject) $formatRef += '.validate';\r\n\t if (typeof $format == 'function') {\r\n\t out += ' ' + ($formatRef) + '(' + ($data) + ') ';\r\n\t } else {\r\n\t out += ' ' + ($formatRef) + '.test(' + ($data) + ') ';\r\n\t }\r\n\t out += ') { ';\r\n\t }\r\n\t }\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'format') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { format: ';\r\n\t if ($isData) {\r\n\t out += '' + ($schemaValue);\r\n\t } else {\r\n\t out += '' + (it.util.toQuotedString($schema));\r\n\t }\r\n\t out += ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should match format \"';\r\n\t if ($isData) {\r\n\t out += '\\' + ' + ($schemaValue) + ' + \\'';\r\n\t } else {\r\n\t out += '' + (it.util.escapeQuotes($schema));\r\n\t }\r\n\t out += '\"\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + (it.util.toQuotedString($schema));\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 31 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_items(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $errs = 'errs__' + $lvl;\r\n\t var $it = it.util.copy(it);\r\n\t var $closingBraces = '';\r\n\t $it.level++;\r\n\t var $dataNxt = $it.dataLevel = it.dataLevel + 1,\r\n\t $nextData = 'data' + $dataNxt;\r\n\t out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';\r\n\t if (Array.isArray($schema)) {\r\n\t var $additionalItems = it.schema.additionalItems;\r\n\t if ($additionalItems === false) {\r\n\t out += ' ' + ($valid) + ' = ' + ($data) + '.length <= ' + ($schema.length) + '; ';\r\n\t var $currErrSchemaPath = $errSchemaPath;\r\n\t $errSchemaPath = it.errSchemaPath + '/additionalItems';\r\n\t out += ' if (!' + ($valid) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'additionalItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { limit: ' + ($schema.length) + ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT have more than ' + ($schema.length) + ' items\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } ';\r\n\t $errSchemaPath = $currErrSchemaPath;\r\n\t if ($breakOnError) {\r\n\t $closingBraces += '}';\r\n\t out += ' else { ';\r\n\t }\r\n\t }\r\n\t var arr1 = $schema;\r\n\t if (arr1) {\r\n\t var $sch, $i = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while ($i < l1) {\r\n\t $sch = arr1[$i += 1];\r\n\t if (it.util.schemaHasRules($sch, it.RULES.all)) {\r\n\t out += ' valid' + ($it.level) + ' = true; if (' + ($data) + '.length > ' + ($i) + ') { ';\r\n\t var $passData = $data + '[' + $i + ']';\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = $schemaPath + '[' + $i + ']';\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + $i;\r\n\t $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true);\r\n\t $it.dataPathArr[$dataNxt] = $i;\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\r\n\t } else {\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t if (typeof $additionalItems == 'object' && it.util.schemaHasRules($additionalItems, it.RULES.all)) {\r\n\t $it.schema = $additionalItems;\r\n\t $it.schemaPath = it.schemaPath + '.additionalItems';\r\n\t $it.errSchemaPath = it.errSchemaPath + '/additionalItems';\r\n\t out += ' valid' + ($it.level) + ' = true; if (' + ($data) + '.length > ' + ($schema.length) + ') { for (var i' + ($lvl) + ' = ' + ($schema.length) + '; i' + ($lvl) + ' < ' + ($data) + '.length; i' + ($lvl) + '++) { ';\r\n\t $it.errorPath = it.util.getPathExpr(it.errorPath, 'i' + $lvl, it.opts.jsonPointers, true);\r\n\t var $passData = $data + '[i' + $lvl + ']';\r\n\t $it.dataPathArr[$dataNxt] = 'i' + $lvl;\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\r\n\t } else {\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' if (!valid' + ($it.level) + ') break; ';\r\n\t }\r\n\t out += ' } } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t } else if (it.util.schemaHasRules($schema, it.RULES.all)) {\r\n\t $it.schema = $schema;\r\n\t $it.schemaPath = $schemaPath;\r\n\t $it.errSchemaPath = $errSchemaPath;\r\n\t out += ' for (var i' + ($lvl) + ' = ' + (0) + '; i' + ($lvl) + ' < ' + ($data) + '.length; i' + ($lvl) + '++) { ';\r\n\t $it.errorPath = it.util.getPathExpr(it.errorPath, 'i' + $lvl, it.opts.jsonPointers, true);\r\n\t var $passData = $data + '[i' + $lvl + ']';\r\n\t $it.dataPathArr[$dataNxt] = 'i' + $lvl;\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\r\n\t } else {\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' if (!valid' + ($it.level) + ') break; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\r\n\t }\r\n\t out = it.util.cleanUpCode(out);\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 32 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate__limit(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t var $isMax = $keyword == 'maximum',\r\n\t $exclusiveKeyword = $isMax ? 'exclusiveMaximum' : 'exclusiveMinimum',\r\n\t $schemaExcl = it.schema[$exclusiveKeyword],\r\n\t $isDataExcl = it.opts.v5 && $schemaExcl && $schemaExcl.$data,\r\n\t $op = $isMax ? '<' : '>',\r\n\t $notOp = $isMax ? '>' : '<';\r\n\t if ($isDataExcl) {\r\n\t var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr),\r\n\t $exclusive = 'exclusive' + $lvl,\r\n\t $opExpr = 'op' + $lvl,\r\n\t $opStr = '\\' + ' + $opExpr + ' + \\'';\r\n\t out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; ';\r\n\t $schemaValueExcl = 'schemaExcl' + $lvl;\r\n\t out += ' var exclusive' + ($lvl) + '; if (typeof ' + ($schemaValueExcl) + ' != \\'boolean\\' && typeof ' + ($schemaValueExcl) + ' != \\'undefined\\') { ';\r\n\t var $errorKeyword = $exclusiveKeyword;\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '_exclusiveLimit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: {} ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'' + ($exclusiveKeyword) + ' should be boolean\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } else if( ';\r\n\t if ($isData) {\r\n\t out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\r\n\t }\r\n\t out += ' ((exclusive' + ($lvl) + ' = ' + ($schemaValueExcl) + ' === true) ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValue) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ')) { var op' + ($lvl) + ' = exclusive' + ($lvl) + ' ? \\'' + ($op) + '\\' : \\'' + ($op) + '=\\';';\r\n\t } else {\r\n\t var $exclusive = $schemaExcl === true,\r\n\t $opStr = $op;\r\n\t if (!$exclusive) $opStr += '=';\r\n\t var $opExpr = '\\'' + $opStr + '\\'';\r\n\t out += ' if ( ';\r\n\t if ($isData) {\r\n\t out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\r\n\t }\r\n\t out += ' ' + ($data) + ' ' + ($notOp);\r\n\t if ($exclusive) {\r\n\t out += '=';\r\n\t }\r\n\t out += ' ' + ($schemaValue) + ') {';\r\n\t }\r\n\t var $errorKeyword = $keyword;\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '_limit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { comparison: ' + ($opExpr) + ', limit: ' + ($schemaValue) + ', exclusive: ' + ($exclusive) + ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should be ' + ($opStr) + ' ';\r\n\t if ($isData) {\r\n\t out += '\\' + ' + ($schemaValue);\r\n\t } else {\r\n\t out += '' + ($schema) + '\\'';\r\n\t }\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 33 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate__limitItems(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t var $op = $keyword == 'maxItems' ? '>' : '<';\r\n\t out += 'if ( ';\r\n\t if ($isData) {\r\n\t out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\r\n\t }\r\n\t out += ' ' + ($data) + '.length ' + ($op) + ' ' + ($schemaValue) + ') { ';\r\n\t var $errorKeyword = $keyword;\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '_limitItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { limit: ' + ($schemaValue) + ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT have ';\r\n\t if ($keyword == 'maxItems') {\r\n\t out += 'more';\r\n\t } else {\r\n\t out += 'less';\r\n\t }\r\n\t out += ' than ';\r\n\t if ($isData) {\r\n\t out += '\\' + ' + ($schemaValue) + ' + \\'';\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' items\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += '} ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 34 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate__limitLength(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t var $op = $keyword == 'maxLength' ? '>' : '<';\r\n\t out += 'if ( ';\r\n\t if ($isData) {\r\n\t out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\r\n\t }\r\n\t if (it.opts.unicode === false) {\r\n\t out += ' ' + ($data) + '.length ';\r\n\t } else {\r\n\t out += ' ucs2length(' + ($data) + ') ';\r\n\t }\r\n\t out += ' ' + ($op) + ' ' + ($schemaValue) + ') { ';\r\n\t var $errorKeyword = $keyword;\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '_limitLength') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { limit: ' + ($schemaValue) + ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT be ';\r\n\t if ($keyword == 'maxLength') {\r\n\t out += 'longer';\r\n\t } else {\r\n\t out += 'shorter';\r\n\t }\r\n\t out += ' than ';\r\n\t if ($isData) {\r\n\t out += '\\' + ' + ($schemaValue) + ' + \\'';\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' characters\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += '} ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 35 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate__limitProperties(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t var $op = $keyword == 'maxProperties' ? '>' : '<';\r\n\t out += 'if ( ';\r\n\t if ($isData) {\r\n\t out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\r\n\t }\r\n\t out += ' Object.keys(' + ($data) + ').length ' + ($op) + ' ' + ($schemaValue) + ') { ';\r\n\t var $errorKeyword = $keyword;\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '_limitProperties') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { limit: ' + ($schemaValue) + ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT have ';\r\n\t if ($keyword == 'maxProperties') {\r\n\t out += 'more';\r\n\t } else {\r\n\t out += 'less';\r\n\t }\r\n\t out += ' than ';\r\n\t if ($isData) {\r\n\t out += '\\' + ' + ($schemaValue) + ' + \\'';\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' properties\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += '} ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 36 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_multipleOf(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t out += 'var division' + ($lvl) + ';if (';\r\n\t if ($isData) {\r\n\t out += ' ' + ($schemaValue) + ' !== undefined && ( typeof ' + ($schemaValue) + ' != \\'number\\' || ';\r\n\t }\r\n\t out += ' (division' + ($lvl) + ' = ' + ($data) + ' / ' + ($schemaValue) + ', ';\r\n\t if (it.opts.multipleOfPrecision) {\r\n\t out += ' Math.abs(Math.round(division' + ($lvl) + ') - division' + ($lvl) + ') > 1e-' + (it.opts.multipleOfPrecision) + ' ';\r\n\t } else {\r\n\t out += ' division' + ($lvl) + ' !== parseInt(division' + ($lvl) + ') ';\r\n\t }\r\n\t out += ' ) ';\r\n\t if ($isData) {\r\n\t out += ' ) ';\r\n\t }\r\n\t out += ' ) { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'multipleOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { multipleOf: ' + ($schemaValue) + ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should be multiple of ';\r\n\t if ($isData) {\r\n\t out += '\\' + ' + ($schemaValue);\r\n\t } else {\r\n\t out += '' + ($schema) + '\\'';\r\n\t }\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += '} ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 37 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_not(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $errs = 'errs__' + $lvl;\r\n\t var $it = it.util.copy(it);\r\n\t $it.level++;\r\n\t if (it.util.schemaHasRules($schema, it.RULES.all)) {\r\n\t $it.schema = $schema;\r\n\t $it.schemaPath = $schemaPath;\r\n\t $it.errSchemaPath = $errSchemaPath;\r\n\t out += ' var ' + ($errs) + ' = errors; ';\r\n\t var $wasComposite = it.compositeRule;\r\n\t it.compositeRule = $it.compositeRule = true;\r\n\t $it.createErrors = false;\r\n\t var $allErrorsOption;\r\n\t if ($it.opts.allErrors) {\r\n\t $allErrorsOption = $it.opts.allErrors;\r\n\t $it.opts.allErrors = false;\r\n\t }\r\n\t out += ' ' + (it.validate($it)) + ' ';\r\n\t $it.createErrors = true;\r\n\t if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption;\r\n\t it.compositeRule = $it.compositeRule = $wasComposite;\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'not') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: {} ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT be valid\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\r\n\t if (it.opts.allErrors) {\r\n\t out += ' } ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = '; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'not') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: {} ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT be valid\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (false) { ';\r\n\t }\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 38 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_oneOf(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $errs = 'errs__' + $lvl;\r\n\t var $it = it.util.copy(it);\r\n\t var $closingBraces = '';\r\n\t $it.level++;\r\n\t out += 'var ' + ($errs) + ' = errors;var prevValid' + ($lvl) + ' = false;var ' + ($valid) + ' = false; ';\r\n\t var $wasComposite = it.compositeRule;\r\n\t it.compositeRule = $it.compositeRule = true;\r\n\t var arr1 = $schema;\r\n\t if (arr1) {\r\n\t var $sch, $i = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while ($i < l1) {\r\n\t $sch = arr1[$i += 1];\r\n\t if (it.util.schemaHasRules($sch, it.RULES.all)) {\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = $schemaPath + '[' + $i + ']';\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + $i;\r\n\t out += ' ' + (it.validate($it)) + ' ';\r\n\t } else {\r\n\t out += ' var valid' + ($it.level) + ' = true; ';\r\n\t }\r\n\t if ($i) {\r\n\t out += ' if (valid' + ($it.level) + ' && prevValid' + ($lvl) + ') ' + ($valid) + ' = false; else { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t out += ' if (valid' + ($it.level) + ') ' + ($valid) + ' = prevValid' + ($lvl) + ' = true;';\r\n\t }\r\n\t }\r\n\t it.compositeRule = $it.compositeRule = $wasComposite;\r\n\t out += '' + ($closingBraces) + 'if (!' + ($valid) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'oneOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: {} ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should match exactly one schema in oneOf\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += '} else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }';\r\n\t if (it.opts.allErrors) {\r\n\t out += ' } ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 39 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_pattern(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t var $regexp = $isData ? '(new RegExp(' + $schemaValue + '))' : it.usePattern($schema);\r\n\t out += 'if ( ';\r\n\t if ($isData) {\r\n\t out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'string\\') || ';\r\n\t }\r\n\t out += ' !' + ($regexp) + '.test(' + ($data) + ') ) { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'pattern') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { pattern: ';\r\n\t if ($isData) {\r\n\t out += '' + ($schemaValue);\r\n\t } else {\r\n\t out += '' + (it.util.toQuotedString($schema));\r\n\t }\r\n\t out += ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should match pattern \"';\r\n\t if ($isData) {\r\n\t out += '\\' + ' + ($schemaValue) + ' + \\'';\r\n\t } else {\r\n\t out += '' + (it.util.escapeQuotes($schema));\r\n\t }\r\n\t out += '\"\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + (it.util.toQuotedString($schema));\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += '} ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 40 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_properties(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $errs = 'errs__' + $lvl;\r\n\t var $it = it.util.copy(it);\r\n\t var $closingBraces = '';\r\n\t $it.level++;\r\n\t var $dataNxt = $it.dataLevel = it.dataLevel + 1,\r\n\t $nextData = 'data' + $dataNxt;\r\n\t var $schemaKeys = Object.keys($schema || {}),\r\n\t $pProperties = it.schema.patternProperties || {},\r\n\t $pPropertyKeys = Object.keys($pProperties),\r\n\t $aProperties = it.schema.additionalProperties,\r\n\t $someProperties = $schemaKeys.length || $pPropertyKeys.length,\r\n\t $noAdditional = $aProperties === false,\r\n\t $additionalIsSchema = typeof $aProperties == 'object' && Object.keys($aProperties).length,\r\n\t $removeAdditional = it.opts.removeAdditional,\r\n\t $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional;\r\n\t var $required = it.schema.required;\r\n\t if ($required && !(it.opts.v5 && $required.$data) && $required.length < it.opts.loopRequired) var $requiredHash = it.util.toHash($required);\r\n\t if (it.opts.v5) {\r\n\t var $pgProperties = it.schema.patternGroups || {},\r\n\t $pgPropertyKeys = Object.keys($pgProperties);\r\n\t }\r\n\t out += 'var ' + ($errs) + ' = errors;var valid' + ($it.level) + ' = true;';\r\n\t if ($checkAdditional) {\r\n\t out += ' for (var key' + ($lvl) + ' in ' + ($data) + ') { ';\r\n\t if ($someProperties) {\r\n\t out += ' var isAdditional' + ($lvl) + ' = !(false ';\r\n\t if ($schemaKeys.length) {\r\n\t if ($schemaKeys.length > 5) {\r\n\t out += ' || validate.schema' + ($schemaPath) + '[key' + ($lvl) + '] ';\r\n\t } else {\r\n\t var arr1 = $schemaKeys;\r\n\t if (arr1) {\r\n\t var $propertyKey, i1 = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while (i1 < l1) {\r\n\t $propertyKey = arr1[i1 += 1];\r\n\t out += ' || key' + ($lvl) + ' == ' + (it.util.toQuotedString($propertyKey)) + ' ';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t if ($pPropertyKeys.length) {\r\n\t var arr2 = $pPropertyKeys;\r\n\t if (arr2) {\r\n\t var $pProperty, $i = -1,\r\n\t l2 = arr2.length - 1;\r\n\t while ($i < l2) {\r\n\t $pProperty = arr2[$i += 1];\r\n\t out += ' || ' + (it.usePattern($pProperty)) + '.test(key' + ($lvl) + ') ';\r\n\t }\r\n\t }\r\n\t }\r\n\t if (it.opts.v5 && $pgPropertyKeys && $pgPropertyKeys.length) {\r\n\t var arr3 = $pgPropertyKeys;\r\n\t if (arr3) {\r\n\t var $pgProperty, $i = -1,\r\n\t l3 = arr3.length - 1;\r\n\t while ($i < l3) {\r\n\t $pgProperty = arr3[$i += 1];\r\n\t out += ' || ' + (it.usePattern($pgProperty)) + '.test(key' + ($lvl) + ') ';\r\n\t }\r\n\t }\r\n\t }\r\n\t out += ' ); if (isAdditional' + ($lvl) + ') { ';\r\n\t }\r\n\t if ($removeAdditional == 'all') {\r\n\t out += ' delete ' + ($data) + '[key' + ($lvl) + ']; ';\r\n\t } else {\r\n\t var $currentErrorPath = it.errorPath;\r\n\t var $additionalProperty = '\\' + key' + $lvl + ' + \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t it.errorPath = it.util.getPathExpr(it.errorPath, 'key' + $lvl, it.opts.jsonPointers);\r\n\t }\r\n\t if ($noAdditional) {\r\n\t if ($removeAdditional) {\r\n\t out += ' delete ' + ($data) + '[key' + ($lvl) + ']; ';\r\n\t } else {\r\n\t out += ' valid' + ($it.level) + ' = false; ';\r\n\t var $currErrSchemaPath = $errSchemaPath;\r\n\t $errSchemaPath = it.errSchemaPath + '/additionalProperties';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'additionalProperties') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { additionalProperty: \\'' + ($additionalProperty) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT have additional properties\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t $errSchemaPath = $currErrSchemaPath;\r\n\t if ($breakOnError) {\r\n\t out += ' break; ';\r\n\t }\r\n\t }\r\n\t } else if ($additionalIsSchema) {\r\n\t if ($removeAdditional == 'failing') {\r\n\t out += ' var ' + ($errs) + ' = errors; ';\r\n\t var $wasComposite = it.compositeRule;\r\n\t it.compositeRule = $it.compositeRule = true;\r\n\t $it.schema = $aProperties;\r\n\t $it.schemaPath = it.schemaPath + '.additionalProperties';\r\n\t $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';\r\n\t $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, 'key' + $lvl, it.opts.jsonPointers);\r\n\t var $passData = $data + '[key' + $lvl + ']';\r\n\t $it.dataPathArr[$dataNxt] = 'key' + $lvl;\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\r\n\t } else {\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\r\n\t }\r\n\t out += ' if (!valid' + ($it.level) + ') { errors = ' + ($errs) + '; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete ' + ($data) + '[key' + ($lvl) + ']; } ';\r\n\t it.compositeRule = $it.compositeRule = $wasComposite;\r\n\t } else {\r\n\t $it.schema = $aProperties;\r\n\t $it.schemaPath = it.schemaPath + '.additionalProperties';\r\n\t $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';\r\n\t $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, 'key' + $lvl, it.opts.jsonPointers);\r\n\t var $passData = $data + '[key' + $lvl + ']';\r\n\t $it.dataPathArr[$dataNxt] = 'key' + $lvl;\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\r\n\t } else {\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' if (!valid' + ($it.level) + ') break; ';\r\n\t }\r\n\t }\r\n\t }\r\n\t it.errorPath = $currentErrorPath;\r\n\t }\r\n\t if ($someProperties) {\r\n\t out += ' } ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t var $useDefaults = it.opts.useDefaults && !it.compositeRule;\r\n\t if ($schemaKeys.length) {\r\n\t var arr4 = $schemaKeys;\r\n\t if (arr4) {\r\n\t var $propertyKey, i4 = -1,\r\n\t l4 = arr4.length - 1;\r\n\t while (i4 < l4) {\r\n\t $propertyKey = arr4[i4 += 1];\r\n\t var $sch = $schema[$propertyKey];\r\n\t if (it.util.schemaHasRules($sch, it.RULES.all)) {\r\n\t var $prop = it.util.getProperty($propertyKey),\r\n\t $passData = $data + $prop,\r\n\t $hasDefault = $useDefaults && $sch.default !== undefined;\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = $schemaPath + $prop;\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey);\r\n\t $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers);\r\n\t $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey);\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t $code = it.util.varReplace($code, $nextData, $passData);\r\n\t var $useData = $passData;\r\n\t } else {\r\n\t var $useData = $nextData;\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ';\r\n\t }\r\n\t if ($hasDefault) {\r\n\t out += ' ' + ($code) + ' ';\r\n\t } else {\r\n\t if ($requiredHash && $requiredHash[$propertyKey]) {\r\n\t out += ' if (' + ($useData) + ' === undefined) { valid' + ($it.level) + ' = false; ';\r\n\t var $currentErrorPath = it.errorPath,\r\n\t $currErrSchemaPath = $errSchemaPath,\r\n\t $missingProperty = it.util.escapeQuotes($propertyKey);\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);\r\n\t }\r\n\t $errSchemaPath = it.errSchemaPath + '/required';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t out += 'is a required property';\r\n\t } else {\r\n\t out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\r\n\t }\r\n\t out += '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t $errSchemaPath = $currErrSchemaPath;\r\n\t it.errorPath = $currentErrorPath;\r\n\t out += ' } else { ';\r\n\t } else {\r\n\t if ($breakOnError) {\r\n\t out += ' if (' + ($useData) + ' === undefined) { valid' + ($it.level) + ' = true; } else { ';\r\n\t } else {\r\n\t out += ' if (' + ($useData) + ' !== undefined) { ';\r\n\t }\r\n\t }\r\n\t out += ' ' + ($code) + ' } ';\r\n\t }\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t var arr5 = $pPropertyKeys;\r\n\t if (arr5) {\r\n\t var $pProperty, i5 = -1,\r\n\t l5 = arr5.length - 1;\r\n\t while (i5 < l5) {\r\n\t $pProperty = arr5[i5 += 1];\r\n\t var $sch = $pProperties[$pProperty];\r\n\t if (it.util.schemaHasRules($sch, it.RULES.all)) {\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty);\r\n\t $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' + it.util.escapeFragment($pProperty);\r\n\t out += ' for (var key' + ($lvl) + ' in ' + ($data) + ') { if (' + (it.usePattern($pProperty)) + '.test(key' + ($lvl) + ')) { ';\r\n\t $it.errorPath = it.util.getPathExpr(it.errorPath, 'key' + $lvl, it.opts.jsonPointers);\r\n\t var $passData = $data + '[key' + $lvl + ']';\r\n\t $it.dataPathArr[$dataNxt] = 'key' + $lvl;\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\r\n\t } else {\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' if (!valid' + ($it.level) + ') break; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' else valid' + ($it.level) + ' = true; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t if (it.opts.v5) {\r\n\t var arr6 = $pgPropertyKeys;\r\n\t if (arr6) {\r\n\t var $pgProperty, i6 = -1,\r\n\t l6 = arr6.length - 1;\r\n\t while (i6 < l6) {\r\n\t $pgProperty = arr6[i6 += 1];\r\n\t var $pgSchema = $pgProperties[$pgProperty],\r\n\t $sch = $pgSchema.schema;\r\n\t if (it.util.schemaHasRules($sch, it.RULES.all)) {\r\n\t $it.schema = $sch;\r\n\t $it.schemaPath = it.schemaPath + '.patternGroups' + it.util.getProperty($pgProperty) + '.schema';\r\n\t $it.errSchemaPath = it.errSchemaPath + '/patternGroups/' + it.util.escapeFragment($pgProperty) + '/schema';\r\n\t out += ' var pgPropCount' + ($lvl) + ' = 0; for (var key' + ($lvl) + ' in ' + ($data) + ') { if (' + (it.usePattern($pgProperty)) + '.test(key' + ($lvl) + ')) { pgPropCount' + ($lvl) + '++; ';\r\n\t $it.errorPath = it.util.getPathExpr(it.errorPath, 'key' + $lvl, it.opts.jsonPointers);\r\n\t var $passData = $data + '[key' + $lvl + ']';\r\n\t $it.dataPathArr[$dataNxt] = 'key' + $lvl;\r\n\t var $code = it.validate($it);\r\n\t if (it.util.varOccurences($code, $nextData) < 2) {\r\n\t out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\r\n\t } else {\r\n\t out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' if (!valid' + ($it.level) + ') break; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' else valid' + ($it.level) + ' = true; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' if (valid' + ($it.level) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t var $pgMin = $pgSchema.minimum,\r\n\t $pgMax = $pgSchema.maximum;\r\n\t if ($pgMin !== undefined || $pgMax !== undefined) {\r\n\t out += ' var ' + ($valid) + ' = true; ';\r\n\t var $currErrSchemaPath = $errSchemaPath;\r\n\t if ($pgMin !== undefined) {\r\n\t var $limit = $pgMin,\r\n\t $reason = 'minimum',\r\n\t $moreOrLess = 'less';\r\n\t out += ' ' + ($valid) + ' = pgPropCount' + ($lvl) + ' >= ' + ($pgMin) + '; ';\r\n\t $errSchemaPath = it.errSchemaPath + '/patternGroups/minimum';\r\n\t out += ' if (!' + ($valid) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'patternGroups') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { reason: \\'' + ($reason) + '\\', limit: ' + ($limit) + ', pattern: \\'' + (it.util.escapeQuotes($pgProperty)) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT have ' + ($moreOrLess) + ' than ' + ($limit) + ' properties matching pattern \"' + (it.util.escapeQuotes($pgProperty)) + '\"\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($pgMax !== undefined) {\r\n\t out += ' else ';\r\n\t }\r\n\t }\r\n\t if ($pgMax !== undefined) {\r\n\t var $limit = $pgMax,\r\n\t $reason = 'maximum',\r\n\t $moreOrLess = 'more';\r\n\t out += ' ' + ($valid) + ' = pgPropCount' + ($lvl) + ' <= ' + ($pgMax) + '; ';\r\n\t $errSchemaPath = it.errSchemaPath + '/patternGroups/maximum';\r\n\t out += ' if (!' + ($valid) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'patternGroups') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { reason: \\'' + ($reason) + '\\', limit: ' + ($limit) + ', pattern: \\'' + (it.util.escapeQuotes($pgProperty)) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT have ' + ($moreOrLess) + ' than ' + ($limit) + ' properties matching pattern \"' + (it.util.escapeQuotes($pgProperty)) + '\"\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } ';\r\n\t }\r\n\t $errSchemaPath = $currErrSchemaPath;\r\n\t if ($breakOnError) {\r\n\t out += ' if (' + ($valid) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t if ($breakOnError) {\r\n\t out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\r\n\t }\r\n\t out = it.util.cleanUpCode(out);\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 41 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_required(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t if (!$isData) {\r\n\t if ($schema.length < it.opts.loopRequired && it.schema.properties && Object.keys(it.schema.properties).length) {\r\n\t var $required = [];\r\n\t var arr1 = $schema;\r\n\t if (arr1) {\r\n\t var $property, i1 = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while (i1 < l1) {\r\n\t $property = arr1[i1 += 1];\r\n\t var $propertySch = it.schema.properties[$property];\r\n\t if (!($propertySch && it.util.schemaHasRules($propertySch, it.RULES.all))) {\r\n\t $required[$required.length] = $property;\r\n\t }\r\n\t }\r\n\t }\r\n\t } else {\r\n\t var $required = $schema;\r\n\t }\r\n\t }\r\n\t if ($isData || $required.length) {\r\n\t var $currentErrorPath = it.errorPath,\r\n\t $loopRequired = $isData || $required.length >= it.opts.loopRequired;\r\n\t if ($breakOnError) {\r\n\t out += ' var missing' + ($lvl) + '; ';\r\n\t if ($loopRequired) {\r\n\t if (!$isData) {\r\n\t out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + '; ';\r\n\t }\r\n\t var $i = 'i' + $lvl,\r\n\t $propertyPath = 'schema' + $lvl + '[' + $i + ']',\r\n\t $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);\r\n\t }\r\n\t out += ' var ' + ($valid) + ' = true; ';\r\n\t if ($isData) {\r\n\t out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';\r\n\t }\r\n\t out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < schema' + ($lvl) + '.length; ' + ($i) + '++) { ' + ($valid) + ' = ' + ($data) + '[schema' + ($lvl) + '[' + ($i) + ']] !== undefined; if (!' + ($valid) + ') break; } ';\r\n\t if ($isData) {\r\n\t out += ' } ';\r\n\t }\r\n\t out += ' if (!' + ($valid) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t out += 'is a required property';\r\n\t } else {\r\n\t out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\r\n\t }\r\n\t out += '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } else { ';\r\n\t } else {\r\n\t out += ' if ( ';\r\n\t var arr2 = $required;\r\n\t if (arr2) {\r\n\t var _$property, $i = -1,\r\n\t l2 = arr2.length - 1;\r\n\t while ($i < l2) {\r\n\t _$property = arr2[$i += 1];\r\n\t if ($i) {\r\n\t out += ' || ';\r\n\t }\r\n\t var $prop = it.util.getProperty(_$property);\r\n\t out += ' ( ' + ($data) + ($prop) + ' === undefined && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? _$property : $prop)) + ') ) ';\r\n\t }\r\n\t }\r\n\t out += ') { ';\r\n\t var $propertyPath = 'missing' + $lvl,\r\n\t $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;\r\n\t }\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t out += 'is a required property';\r\n\t } else {\r\n\t out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\r\n\t }\r\n\t out += '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } else { ';\r\n\t }\r\n\t } else {\r\n\t if ($loopRequired) {\r\n\t if (!$isData) {\r\n\t out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + '; ';\r\n\t }\r\n\t var $i = 'i' + $lvl,\r\n\t $propertyPath = 'schema' + $lvl + '[' + $i + ']',\r\n\t $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);\r\n\t }\r\n\t if ($isData) {\r\n\t out += ' if (schema' + ($lvl) + ' && !Array.isArray(schema' + ($lvl) + ')) { var err = '; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t out += 'is a required property';\r\n\t } else {\r\n\t out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\r\n\t }\r\n\t out += '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (schema' + ($lvl) + ' !== undefined) { ';\r\n\t }\r\n\t out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < schema' + ($lvl) + '.length; ' + ($i) + '++) { if (' + ($data) + '[schema' + ($lvl) + '[' + ($i) + ']] === undefined) { var err = '; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t out += 'is a required property';\r\n\t } else {\r\n\t out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\r\n\t }\r\n\t out += '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } ';\r\n\t if ($isData) {\r\n\t out += ' } ';\r\n\t }\r\n\t } else {\r\n\t var arr3 = $required;\r\n\t if (arr3) {\r\n\t var $property, $i = -1,\r\n\t l3 = arr3.length - 1;\r\n\t while ($i < l3) {\r\n\t $property = arr3[$i += 1];\r\n\t var $prop = it.util.getProperty($property),\r\n\t $missingProperty = it.util.escapeQuotes($property);\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t it.errorPath = it.util.getPath($currentErrorPath, $property, it.opts.jsonPointers);\r\n\t }\r\n\t out += ' if (' + ($data) + ($prop) + ' === undefined) { var err = '; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'';\r\n\t if (it.opts._errorDataPathProperty) {\r\n\t out += 'is a required property';\r\n\t } else {\r\n\t out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\r\n\t }\r\n\t out += '\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t it.errorPath = $currentErrorPath;\r\n\t } else if ($breakOnError) {\r\n\t out += ' if (true) {';\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 42 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_uniqueItems(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t if (($schema || $isData) && it.opts.uniqueItems !== false) {\r\n\t if ($isData) {\r\n\t out += ' var ' + ($valid) + '; if (' + ($schemaValue) + ' === false || ' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \\'boolean\\') ' + ($valid) + ' = false; else { ';\r\n\t }\r\n\t out += ' var ' + ($valid) + ' = true; if (' + ($data) + '.length > 1) { var i = ' + ($data) + '.length, j; outer: for (;i--;) { for (j = i; j--;) { if (equal(' + ($data) + '[i], ' + ($data) + '[j])) { ' + ($valid) + ' = false; break outer; } } } } ';\r\n\t if ($isData) {\r\n\t out += ' } ';\r\n\t }\r\n\t out += ' if (!' + ($valid) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'uniqueItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { i: i, j: j } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should NOT have duplicate items (items ## \\' + j + \\' and \\' + i + \\' are identical)\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + ($schema);\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t out += ' else { ';\r\n\t }\r\n\t } else {\r\n\t if ($breakOnError) {\r\n\t out += ' if (true) { ';\r\n\t }\r\n\t }\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 43 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar META_SCHEMA_ID = 'https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/json-schema-v5.json';\r\n\r\n\tmodule.exports = {\r\n\t enable: enableV5,\r\n\t META_SCHEMA_ID: META_SCHEMA_ID\r\n\t};\r\n\r\n\r\n\tfunction enableV5(ajv) {\r\n\t var inlineFunctions = {\r\n\t 'switch': __webpack_require__(44),\r\n\t 'constant': __webpack_require__(45),\r\n\t '_formatLimit': __webpack_require__(46),\r\n\t 'patternRequired': __webpack_require__(47)\r\n\t };\r\n\r\n\t if (ajv._opts.meta !== false) {\r\n\t var metaSchema = __webpack_require__(48);\r\n\t ajv.addMetaSchema(metaSchema, META_SCHEMA_ID);\r\n\t }\r\n\t _addKeyword('constant');\r\n\t ajv.addKeyword('contains', { type: 'array', macro: containsMacro });\r\n\r\n\t _addKeyword('formatMaximum', 'string', inlineFunctions._formatLimit);\r\n\t _addKeyword('formatMinimum', 'string', inlineFunctions._formatLimit);\r\n\t ajv.addKeyword('exclusiveFormatMaximum');\r\n\t ajv.addKeyword('exclusiveFormatMinimum');\r\n\r\n\t ajv.addKeyword('patternGroups'); // implemented in properties.jst\r\n\t _addKeyword('patternRequired', 'object');\r\n\t _addKeyword('switch');\r\n\r\n\r\n\t function _addKeyword(keyword, types, inlineFunc) {\r\n\t var definition = {\r\n\t inline: inlineFunc || inlineFunctions[keyword],\r\n\t statements: true,\r\n\t errors: 'full'\r\n\t };\r\n\t if (types) definition.type = types;\r\n\t ajv.addKeyword(keyword, definition);\r\n\t }\r\n\t}\r\n\r\n\r\n\tfunction containsMacro(schema) {\r\n\t return {\r\n\t not: { items: { not: schema } }\r\n\t };\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 44 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_switch(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $errs = 'errs__' + $lvl;\r\n\t var $it = it.util.copy(it);\r\n\t var $closingBraces = '';\r\n\t $it.level++;\r\n\t var $ifPassed = 'ifPassed' + it.level,\r\n\t $shouldContinue;\r\n\t out += 'var ' + ($ifPassed) + ';';\r\n\t var arr1 = $schema;\r\n\t if (arr1) {\r\n\t var $sch, $caseIndex = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while ($caseIndex < l1) {\r\n\t $sch = arr1[$caseIndex += 1];\r\n\t if ($caseIndex && !$shouldContinue) {\r\n\t out += ' if (!' + ($ifPassed) + ') { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t if ($sch.if && it.util.schemaHasRules($sch.if, it.RULES.all)) {\r\n\t out += ' var ' + ($errs) + ' = errors; ';\r\n\t var $wasComposite = it.compositeRule;\r\n\t it.compositeRule = $it.compositeRule = true;\r\n\t $it.createErrors = false;\r\n\t $it.schema = $sch.if;\r\n\t $it.schemaPath = $schemaPath + '[' + $caseIndex + '].if';\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + $caseIndex + '/if';\r\n\t out += ' ' + (it.validate($it)) + ' ';\r\n\t $it.createErrors = true;\r\n\t it.compositeRule = $it.compositeRule = $wasComposite;\r\n\t out += ' ' + ($ifPassed) + ' = valid' + ($it.level) + '; if (' + ($ifPassed) + ') { ';\r\n\t if (typeof $sch.then == 'boolean') {\r\n\t if ($sch.then === false) {\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'switch') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { caseIndex: ' + ($caseIndex) + ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should pass \"switch\" keyword validation\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t }\r\n\t out += ' var valid' + ($it.level) + ' = ' + ($sch.then) + '; ';\r\n\t } else {\r\n\t $it.schema = $sch.then;\r\n\t $it.schemaPath = $schemaPath + '[' + $caseIndex + '].then';\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + $caseIndex + '/then';\r\n\t out += ' ' + (it.validate($it)) + ' ';\r\n\t }\r\n\t out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } } ';\r\n\t } else {\r\n\t out += ' ' + ($ifPassed) + ' = true; ';\r\n\t if (typeof $sch.then == 'boolean') {\r\n\t if ($sch.then === false) {\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'switch') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { caseIndex: ' + ($caseIndex) + ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should pass \"switch\" keyword validation\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t }\r\n\t out += ' var valid' + ($it.level) + ' = ' + ($sch.then) + '; ';\r\n\t } else {\r\n\t $it.schema = $sch.then;\r\n\t $it.schemaPath = $schemaPath + '[' + $caseIndex + '].then';\r\n\t $it.errSchemaPath = $errSchemaPath + '/' + $caseIndex + '/then';\r\n\t out += ' ' + (it.validate($it)) + ' ';\r\n\t }\r\n\t }\r\n\t $shouldContinue = $sch.continue\r\n\t }\r\n\t }\r\n\t out += '' + ($closingBraces) + 'var ' + ($valid) + ' = valid' + ($it.level) + '; ';\r\n\t out = it.util.cleanUpCode(out);\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 45 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_constant(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t if (!$isData) {\r\n\t out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + ';';\r\n\t }\r\n\t out += 'var ' + ($valid) + ' = equal(' + ($data) + ', schema' + ($lvl) + '); if (!' + ($valid) + ') { ';\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'constant') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: {} ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should be equal to constant\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' }';\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 46 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate__formatLimit(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t out += 'var ' + ($valid) + ' = undefined;';\r\n\t if (it.opts.format === false) {\r\n\t out += ' ' + ($valid) + ' = true; ';\r\n\t return out;\r\n\t }\r\n\t var $schemaFormat = it.schema.format,\r\n\t $isDataFormat = it.opts.v5 && $schemaFormat.$data,\r\n\t $closingBraces = '';\r\n\t if ($isDataFormat) {\r\n\t var $schemaValueFormat = it.util.getData($schemaFormat.$data, $dataLvl, it.dataPathArr),\r\n\t $format = 'format' + $lvl,\r\n\t $compare = 'compare' + $lvl;\r\n\t out += ' var ' + ($format) + ' = formats[' + ($schemaValueFormat) + '] , ' + ($compare) + ' = ' + ($format) + ' && ' + ($format) + '.compare;';\r\n\t } else {\r\n\t var $format = it.formats[$schemaFormat];\r\n\t if (!($format && $format.compare)) {\r\n\t out += ' ' + ($valid) + ' = true; ';\r\n\t return out;\r\n\t }\r\n\t var $compare = 'formats' + it.util.getProperty($schemaFormat) + '.compare';\r\n\t }\r\n\t var $isMax = $keyword == 'formatMaximum',\r\n\t $exclusiveKeyword = 'exclusiveFormat' + ($isMax ? 'Maximum' : 'Minimum'),\r\n\t $schemaExcl = it.schema[$exclusiveKeyword],\r\n\t $isDataExcl = it.opts.v5 && $schemaExcl && $schemaExcl.$data,\r\n\t $op = $isMax ? '<' : '>',\r\n\t $result = 'result' + $lvl;\r\n\t var $isData = it.opts.v5 && $schema.$data;\r\n\t var $schemaValue = $isData ? it.util.getData($schema.$data, $dataLvl, it.dataPathArr) : $schema;\r\n\t if ($isData) {\r\n\t out += ' var schema' + ($lvl) + ' = ' + ($schemaValue) + '; ';\r\n\t $schemaValue = 'schema' + $lvl;\r\n\t }\r\n\t if ($isDataExcl) {\r\n\t var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr),\r\n\t $exclusive = 'exclusive' + $lvl,\r\n\t $opExpr = 'op' + $lvl,\r\n\t $opStr = '\\' + ' + $opExpr + ' + \\'';\r\n\t out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; ';\r\n\t $schemaValueExcl = 'schemaExcl' + $lvl;\r\n\t out += ' if (typeof ' + ($schemaValueExcl) + ' != \\'boolean\\' && ' + ($schemaValueExcl) + ' !== undefined) { ' + ($valid) + ' = false; ';\r\n\t var $errorKeyword = $exclusiveKeyword;\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '_exclusiveFormatLimit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: {} ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'' + ($exclusiveKeyword) + ' should be boolean\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += ' } ';\r\n\t if ($breakOnError) {\r\n\t $closingBraces += '}';\r\n\t out += ' else { ';\r\n\t }\r\n\t if ($isData) {\r\n\t out += ' if (' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \\'string\\') ' + ($valid) + ' = false; else { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t if ($isDataFormat) {\r\n\t out += ' if (!' + ($compare) + ') ' + ($valid) + ' = true; else { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t out += ' var ' + ($result) + ' = ' + ($compare) + '(' + ($data) + ', ';\r\n\t if ($isData) {\r\n\t out += '' + ($schemaValue);\r\n\t } else {\r\n\t out += '' + (it.util.toQuotedString($schema));\r\n\t }\r\n\t out += ' ); if (' + ($result) + ' === undefined) ' + ($valid) + ' = false; var exclusive' + ($lvl) + ' = ' + ($schemaValueExcl) + ' === true; if (' + ($valid) + ' === undefined) { ' + ($valid) + ' = exclusive' + ($lvl) + ' ? ' + ($result) + ' ' + ($op) + ' 0 : ' + ($result) + ' ' + ($op) + '= 0; } if (!' + ($valid) + ') var op' + ($lvl) + ' = exclusive' + ($lvl) + ' ? \\'' + ($op) + '\\' : \\'' + ($op) + '=\\';';\r\n\t } else {\r\n\t var $exclusive = $schemaExcl === true,\r\n\t $opStr = $op;\r\n\t if (!$exclusive) $opStr += '=';\r\n\t var $opExpr = '\\'' + $opStr + '\\'';\r\n\t if ($isData) {\r\n\t out += ' if (' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \\'string\\') ' + ($valid) + ' = false; else { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t if ($isDataFormat) {\r\n\t out += ' if (!' + ($compare) + ') ' + ($valid) + ' = true; else { ';\r\n\t $closingBraces += '}';\r\n\t }\r\n\t out += ' var ' + ($result) + ' = ' + ($compare) + '(' + ($data) + ', ';\r\n\t if ($isData) {\r\n\t out += '' + ($schemaValue);\r\n\t } else {\r\n\t out += '' + (it.util.toQuotedString($schema));\r\n\t }\r\n\t out += ' ); if (' + ($result) + ' === undefined) ' + ($valid) + ' = false; if (' + ($valid) + ' === undefined) ' + ($valid) + ' = ' + ($result) + ' ' + ($op);\r\n\t if (!$exclusive) {\r\n\t out += '=';\r\n\t }\r\n\t out += ' 0;';\r\n\t }\r\n\t out += '' + ($closingBraces) + 'if (!' + ($valid) + ') { ';\r\n\t var $errorKeyword = $keyword;\r\n\t var $$outStack = $$outStack || [];\r\n\t $$outStack.push(out);\r\n\t out = ''; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || '_formatLimit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { limit: ';\r\n\t if ($isData) {\r\n\t out += '' + ($schemaValue);\r\n\t } else {\r\n\t out += '' + (it.util.toQuotedString($schema));\r\n\t }\r\n\t out += ' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should be ' + ($opStr) + ' \"';\r\n\t if ($isData) {\r\n\t out += '\\' + ' + ($schemaValue) + ' + \\'';\r\n\t } else {\r\n\t out += '' + (it.util.escapeQuotes($schema));\r\n\t }\r\n\t out += '\"\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: ';\r\n\t if ($isData) {\r\n\t out += 'validate.schema' + ($schemaPath);\r\n\t } else {\r\n\t out += '' + (it.util.toQuotedString($schema));\r\n\t }\r\n\t out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t var __err = out;\r\n\t out = $$outStack.pop();\r\n\t if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\r\n\t if (it.async) {\r\n\t out += ' throw new ValidationError([' + (__err) + ']); ';\r\n\t } else {\r\n\t out += ' validate.errors = [' + (__err) + ']; return false; ';\r\n\t }\r\n\t } else {\r\n\t out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\r\n\t }\r\n\t out += '}';\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 47 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\tmodule.exports = function generate_patternRequired(it, $keyword) {\r\n\t var out = ' ';\r\n\t var $lvl = it.level;\r\n\t var $dataLvl = it.dataLevel;\r\n\t var $schema = it.schema[$keyword];\r\n\t var $schemaPath = it.schemaPath + '.' + $keyword;\r\n\t var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\r\n\t var $breakOnError = !it.opts.allErrors;\r\n\t var $errorKeyword;\r\n\t var $data = 'data' + ($dataLvl || '');\r\n\t var $valid = 'valid' + $lvl;\r\n\t var $key = 'key' + $lvl,\r\n\t $matched = 'patternMatched' + $lvl,\r\n\t $closingBraces = '';\r\n\t out += 'var ' + ($valid) + ' = true;';\r\n\t var arr1 = $schema;\r\n\t if (arr1) {\r\n\t var $pProperty, i1 = -1,\r\n\t l1 = arr1.length - 1;\r\n\t while (i1 < l1) {\r\n\t $pProperty = arr1[i1 += 1];\r\n\t out += ' var ' + ($matched) + ' = false; for (var ' + ($key) + ' in ' + ($data) + ') { ' + ($matched) + ' = ' + (it.usePattern($pProperty)) + '.test(' + ($key) + '); if (' + ($matched) + ') break; } ';\r\n\t var $missingPattern = it.util.escapeQuotes($pProperty);\r\n\t out += ' if (!' + ($matched) + ') { ' + ($valid) + ' = false; var err = '; /* istanbul ignore else */\r\n\t if (it.createErrors !== false) {\r\n\t out += ' { keyword: \\'' + ($errorKeyword || 'patternRequired') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: \"' + ($errSchemaPath) + '\" , params: { missingPattern: \\'' + ($missingPattern) + '\\' } ';\r\n\t if (it.opts.messages !== false) {\r\n\t out += ' , message: \\'should have property matching pattern \\\\\\'' + ($missingPattern) + '\\\\\\'\\' ';\r\n\t }\r\n\t if (it.opts.verbose) {\r\n\t out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\r\n\t }\r\n\t out += ' } ';\r\n\t } else {\r\n\t out += ' {} ';\r\n\t }\r\n\t out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';\r\n\t if ($breakOnError) {\r\n\t $closingBraces += '}';\r\n\t out += ' else { ';\r\n\t }\r\n\t }\r\n\t }\r\n\t out += '' + ($closingBraces);\r\n\t return out;\r\n\t}\r\n\r\n\r\n/***/ },\r\n/* 48 */\r\n/***/ function(module, exports) {\r\n\r\n\tmodule.exports = {\r\n\t\t\"id\": \"https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/json-schema-v5.json#\",\r\n\t\t\"$schema\": \"http://json-schema.org/draft-04/schema#\",\r\n\t\t\"description\": \"Core schema meta-schema (v5 proposals)\",\r\n\t\t\"definitions\": {\r\n\t\t\t\"schemaArray\": {\r\n\t\t\t\t\"type\": \"array\",\r\n\t\t\t\t\"minItems\": 1,\r\n\t\t\t\t\"items\": {\r\n\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\"positiveInteger\": {\r\n\t\t\t\t\"type\": \"integer\",\r\n\t\t\t\t\"minimum\": 0\r\n\t\t\t},\r\n\t\t\t\"positiveIntegerDefault0\": {\r\n\t\t\t\t\"allOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveInteger\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"default\": 0\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"simpleTypes\": {\r\n\t\t\t\t\"enum\": [\r\n\t\t\t\t\t\"array\",\r\n\t\t\t\t\t\"boolean\",\r\n\t\t\t\t\t\"integer\",\r\n\t\t\t\t\t\"null\",\r\n\t\t\t\t\t\"number\",\r\n\t\t\t\t\t\"object\",\r\n\t\t\t\t\t\"string\"\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"stringArray\": {\r\n\t\t\t\t\"type\": \"array\",\r\n\t\t\t\t\"items\": {\r\n\t\t\t\t\t\"type\": \"string\"\r\n\t\t\t\t},\r\n\t\t\t\t\"minItems\": 1,\r\n\t\t\t\t\"uniqueItems\": true\r\n\t\t\t},\r\n\t\t\t\"$data\": {\r\n\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\"required\": [\r\n\t\t\t\t\t\"$data\"\r\n\t\t\t\t],\r\n\t\t\t\t\"properties\": {\r\n\t\t\t\t\t\"$data\": {\r\n\t\t\t\t\t\t\"type\": \"string\",\r\n\t\t\t\t\t\t\"format\": \"relative-json-pointer\"\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t\"additionalProperties\": false\r\n\t\t\t}\r\n\t\t},\r\n\t\t\"type\": \"object\",\r\n\t\t\"properties\": {\r\n\t\t\t\"id\": {\r\n\t\t\t\t\"type\": \"string\",\r\n\t\t\t\t\"format\": \"uri\"\r\n\t\t\t},\r\n\t\t\t\"$schema\": {\r\n\t\t\t\t\"type\": \"string\",\r\n\t\t\t\t\"format\": \"uri\"\r\n\t\t\t},\r\n\t\t\t\"title\": {\r\n\t\t\t\t\"type\": \"string\"\r\n\t\t\t},\r\n\t\t\t\"description\": {\r\n\t\t\t\t\"type\": \"string\"\r\n\t\t\t},\r\n\t\t\t\"default\": {},\r\n\t\t\t\"multipleOf\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"number\",\r\n\t\t\t\t\t\t\"minimum\": 0,\r\n\t\t\t\t\t\t\"exclusiveMinimum\": true\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"maximum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"number\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"exclusiveMaximum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\",\r\n\t\t\t\t\t\t\"default\": false\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"minimum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"number\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"exclusiveMinimum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\",\r\n\t\t\t\t\t\t\"default\": false\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"maxLength\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveInteger\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"minLength\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveIntegerDefault0\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"pattern\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"string\",\r\n\t\t\t\t\t\t\"format\": \"regex\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"additionalItems\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t],\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"items\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/schemaArray\"\r\n\t\t\t\t\t}\r\n\t\t\t\t],\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"maxItems\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveInteger\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"minItems\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveIntegerDefault0\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"uniqueItems\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\",\r\n\t\t\t\t\t\t\"default\": false\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"maxProperties\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveInteger\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"minProperties\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveIntegerDefault0\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"required\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/stringArray\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"additionalProperties\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t],\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"definitions\": {\r\n\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\"additionalProperties\": {\r\n\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t},\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"properties\": {\r\n\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\"additionalProperties\": {\r\n\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t},\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"patternProperties\": {\r\n\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\"additionalProperties\": {\r\n\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t},\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"dependencies\": {\r\n\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\"additionalProperties\": {\r\n\t\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\"$ref\": \"#/definitions/stringArray\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t]\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\"enum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"array\",\r\n\t\t\t\t\t\t\"minItems\": 1,\r\n\t\t\t\t\t\t\"uniqueItems\": true\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"type\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/simpleTypes\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"array\",\r\n\t\t\t\t\t\t\"items\": {\r\n\t\t\t\t\t\t\t\"$ref\": \"#/definitions/simpleTypes\"\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"minItems\": 1,\r\n\t\t\t\t\t\t\"uniqueItems\": true\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"allOf\": {\r\n\t\t\t\t\"$ref\": \"#/definitions/schemaArray\"\r\n\t\t\t},\r\n\t\t\t\"anyOf\": {\r\n\t\t\t\t\"$ref\": \"#/definitions/schemaArray\"\r\n\t\t\t},\r\n\t\t\t\"oneOf\": {\r\n\t\t\t\t\"$ref\": \"#/definitions/schemaArray\"\r\n\t\t\t},\r\n\t\t\t\"not\": {\r\n\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t},\r\n\t\t\t\"format\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"string\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"formatMaximum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"string\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"formatMinimum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"string\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"exclusiveFormatMaximum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\",\r\n\t\t\t\t\t\t\"default\": false\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"exclusiveFormatMinimum\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\",\r\n\t\t\t\t\t\t\"default\": false\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"constant\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"contains\": {\r\n\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t},\r\n\t\t\t\"patternGroups\": {\r\n\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\"additionalProperties\": {\r\n\t\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\t\"required\": [\r\n\t\t\t\t\t\t\"schema\"\r\n\t\t\t\t\t],\r\n\t\t\t\t\t\"properties\": {\r\n\t\t\t\t\t\t\"maximum\": {\r\n\t\t\t\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveInteger\"\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"minimum\": {\r\n\t\t\t\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveIntegerDefault0\"\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\"$ref\": \"#/definitions/$data\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"schema\": {\r\n\t\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t\"additionalProperties\": false\r\n\t\t\t\t},\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"switch\": {\r\n\t\t\t\t\"type\": \"array\",\r\n\t\t\t\t\"items\": {\r\n\t\t\t\t\t\"required\": [\r\n\t\t\t\t\t\t\"then\"\r\n\t\t\t\t\t],\r\n\t\t\t\t\t\"properties\": {\r\n\t\t\t\t\t\t\"if\": {\r\n\t\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"then\": {\r\n\t\t\t\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\"type\": \"boolean\"\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"continue\": {\r\n\t\t\t\t\t\t\t\"type\": \"boolean\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t\"additionalProperties\": false,\r\n\t\t\t\t\t\"dependencies\": {\r\n\t\t\t\t\t\t\"continue\": [\r\n\t\t\t\t\t\t\t\"if\"\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\"dependencies\": {\r\n\t\t\t\"exclusiveMaximum\": [\r\n\t\t\t\t\"maximum\"\r\n\t\t\t],\r\n\t\t\t\"exclusiveMinimum\": [\r\n\t\t\t\t\"minimum\"\r\n\t\t\t],\r\n\t\t\t\"formatMaximum\": [\r\n\t\t\t\t\"format\"\r\n\t\t\t],\r\n\t\t\t\"formatMinimum\": [\r\n\t\t\t\t\"format\"\r\n\t\t\t],\r\n\t\t\t\"exclusiveFormatMaximum\": [\r\n\t\t\t\t\"formatMaximum\"\r\n\t\t\t],\r\n\t\t\t\"exclusiveFormatMinimum\": [\r\n\t\t\t\t\"formatMinimum\"\r\n\t\t\t]\r\n\t\t},\r\n\t\t\"default\": {}\r\n\t};\r\n\r\n/***/ },\r\n/* 49 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\r\n\tvar IDENTIFIER = /^[a-z_$][a-z0-9_$]*$/i;\r\n\r\n\t/**\r\n\t * Define custom keyword\r\n\t * @this Ajv\r\n\t * @param {String} keyword custom keyword, should be a valid identifier, should be different from all standard, custom and macro keywords.\r\n\t * @param {Object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`.\r\n\t */\r\n\tmodule.exports = function addKeyword(keyword, definition) {\r\n\t /* eslint no-shadow: 0 */\r\n\t var self = this;\r\n\t if (this.RULES.keywords[keyword])\r\n\t throw new Error('Keyword ' + keyword + ' is already defined');\r\n\r\n\t if (!IDENTIFIER.test(keyword))\r\n\t throw new Error('Keyword ' + keyword + ' is not a valid identifier');\r\n\r\n\t if (definition) {\r\n\t var dataType = definition.type;\r\n\t if (Array.isArray(dataType)) {\r\n\t var i, len = dataType.length;\r\n\t for (i=0; i<len; i++) checkDataType(dataType[i]);\r\n\t for (i=0; i<len; i++) _addRule(keyword, dataType[i], definition);\r\n\t } else {\r\n\t if (dataType) checkDataType(dataType);\r\n\t _addRule(keyword, dataType, definition);\r\n\t }\r\n\t }\r\n\r\n\t this.RULES.keywords[keyword] = true;\r\n\t this.RULES.all[keyword] = true;\r\n\r\n\r\n\t function _addRule(keyword, dataType, definition) {\r\n\t var ruleGroup;\r\n\t for (var i=0; i<self.RULES.length; i++) {\r\n\t var rg = self.RULES[i];\r\n\t if (rg.type == dataType) {\r\n\t ruleGroup = rg;\r\n\t break;\r\n\t }\r\n\t }\r\n\r\n\t if (!ruleGroup) {\r\n\t ruleGroup = { type: dataType, rules: [] };\r\n\t self.RULES.push(ruleGroup);\r\n\t }\r\n\r\n\t var rule = { keyword: keyword, definition: definition, custom: true };\r\n\t ruleGroup.rules.push(rule);\r\n\t }\r\n\r\n\r\n\t function checkDataType(dataType) {\r\n\t if (!self.RULES.types[dataType]) throw new Error('Unknown type ' + dataType);\r\n\t }\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 50 */\r\n/***/ function(module, exports) {\r\n\r\n\tmodule.exports = {\r\n\t\t\"id\": \"http://json-schema.org/draft-04/schema#\",\r\n\t\t\"$schema\": \"http://json-schema.org/draft-04/schema#\",\r\n\t\t\"description\": \"Core schema meta-schema\",\r\n\t\t\"definitions\": {\r\n\t\t\t\"schemaArray\": {\r\n\t\t\t\t\"type\": \"array\",\r\n\t\t\t\t\"minItems\": 1,\r\n\t\t\t\t\"items\": {\r\n\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\"positiveInteger\": {\r\n\t\t\t\t\"type\": \"integer\",\r\n\t\t\t\t\"minimum\": 0\r\n\t\t\t},\r\n\t\t\t\"positiveIntegerDefault0\": {\r\n\t\t\t\t\"allOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/positiveInteger\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"default\": 0\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"simpleTypes\": {\r\n\t\t\t\t\"enum\": [\r\n\t\t\t\t\t\"array\",\r\n\t\t\t\t\t\"boolean\",\r\n\t\t\t\t\t\"integer\",\r\n\t\t\t\t\t\"null\",\r\n\t\t\t\t\t\"number\",\r\n\t\t\t\t\t\"object\",\r\n\t\t\t\t\t\"string\"\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"stringArray\": {\r\n\t\t\t\t\"type\": \"array\",\r\n\t\t\t\t\"items\": {\r\n\t\t\t\t\t\"type\": \"string\"\r\n\t\t\t\t},\r\n\t\t\t\t\"minItems\": 1,\r\n\t\t\t\t\"uniqueItems\": true\r\n\t\t\t}\r\n\t\t},\r\n\t\t\"type\": \"object\",\r\n\t\t\"properties\": {\r\n\t\t\t\"id\": {\r\n\t\t\t\t\"type\": \"string\",\r\n\t\t\t\t\"format\": \"uri\"\r\n\t\t\t},\r\n\t\t\t\"$schema\": {\r\n\t\t\t\t\"type\": \"string\",\r\n\t\t\t\t\"format\": \"uri\"\r\n\t\t\t},\r\n\t\t\t\"title\": {\r\n\t\t\t\t\"type\": \"string\"\r\n\t\t\t},\r\n\t\t\t\"description\": {\r\n\t\t\t\t\"type\": \"string\"\r\n\t\t\t},\r\n\t\t\t\"default\": {},\r\n\t\t\t\"multipleOf\": {\r\n\t\t\t\t\"type\": \"number\",\r\n\t\t\t\t\"minimum\": 0,\r\n\t\t\t\t\"exclusiveMinimum\": true\r\n\t\t\t},\r\n\t\t\t\"maximum\": {\r\n\t\t\t\t\"type\": \"number\"\r\n\t\t\t},\r\n\t\t\t\"exclusiveMaximum\": {\r\n\t\t\t\t\"type\": \"boolean\",\r\n\t\t\t\t\"default\": false\r\n\t\t\t},\r\n\t\t\t\"minimum\": {\r\n\t\t\t\t\"type\": \"number\"\r\n\t\t\t},\r\n\t\t\t\"exclusiveMinimum\": {\r\n\t\t\t\t\"type\": \"boolean\",\r\n\t\t\t\t\"default\": false\r\n\t\t\t},\r\n\t\t\t\"maxLength\": {\r\n\t\t\t\t\"$ref\": \"#/definitions/positiveInteger\"\r\n\t\t\t},\r\n\t\t\t\"minLength\": {\r\n\t\t\t\t\"$ref\": \"#/definitions/positiveIntegerDefault0\"\r\n\t\t\t},\r\n\t\t\t\"pattern\": {\r\n\t\t\t\t\"type\": \"string\",\r\n\t\t\t\t\"format\": \"regex\"\r\n\t\t\t},\r\n\t\t\t\"additionalItems\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t}\r\n\t\t\t\t],\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"items\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/schemaArray\"\r\n\t\t\t\t\t}\r\n\t\t\t\t],\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"maxItems\": {\r\n\t\t\t\t\"$ref\": \"#/definitions/positiveInteger\"\r\n\t\t\t},\r\n\t\t\t\"minItems\": {\r\n\t\t\t\t\"$ref\": \"#/definitions/positiveIntegerDefault0\"\r\n\t\t\t},\r\n\t\t\t\"uniqueItems\": {\r\n\t\t\t\t\"type\": \"boolean\",\r\n\t\t\t\t\"default\": false\r\n\t\t\t},\r\n\t\t\t\"maxProperties\": {\r\n\t\t\t\t\"$ref\": \"#/definitions/positiveInteger\"\r\n\t\t\t},\r\n\t\t\t\"minProperties\": {\r\n\t\t\t\t\"$ref\": \"#/definitions/positiveIntegerDefault0\"\r\n\t\t\t},\r\n\t\t\t\"required\": {\r\n\t\t\t\t\"$ref\": \"#/definitions/stringArray\"\r\n\t\t\t},\r\n\t\t\t\"additionalProperties\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"boolean\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t}\r\n\t\t\t\t],\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"definitions\": {\r\n\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\"additionalProperties\": {\r\n\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t},\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"properties\": {\r\n\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\"additionalProperties\": {\r\n\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t},\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"patternProperties\": {\r\n\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\"additionalProperties\": {\r\n\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t},\r\n\t\t\t\t\"default\": {}\r\n\t\t\t},\r\n\t\t\t\"dependencies\": {\r\n\t\t\t\t\"type\": \"object\",\r\n\t\t\t\t\"additionalProperties\": {\r\n\t\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\"$ref\": \"#/definitions/stringArray\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t]\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\"enum\": {\r\n\t\t\t\t\"type\": \"array\",\r\n\t\t\t\t\"minItems\": 1,\r\n\t\t\t\t\"uniqueItems\": true\r\n\t\t\t},\r\n\t\t\t\"type\": {\r\n\t\t\t\t\"anyOf\": [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"$ref\": \"#/definitions/simpleTypes\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\"type\": \"array\",\r\n\t\t\t\t\t\t\"items\": {\r\n\t\t\t\t\t\t\t\"$ref\": \"#/definitions/simpleTypes\"\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"minItems\": 1,\r\n\t\t\t\t\t\t\"uniqueItems\": true\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t\"allOf\": {\r\n\t\t\t\t\"$ref\": \"#/definitions/schemaArray\"\r\n\t\t\t},\r\n\t\t\t\"anyOf\": {\r\n\t\t\t\t\"$ref\": \"#/definitions/schemaArray\"\r\n\t\t\t},\r\n\t\t\t\"oneOf\": {\r\n\t\t\t\t\"$ref\": \"#/definitions/schemaArray\"\r\n\t\t\t},\r\n\t\t\t\"not\": {\r\n\t\t\t\t\"$ref\": \"#\"\r\n\t\t\t}\r\n\t\t},\r\n\t\t\"dependencies\": {\r\n\t\t\t\"exclusiveMaximum\": [\r\n\t\t\t\t\"maximum\"\r\n\t\t\t],\r\n\t\t\t\"exclusiveMinimum\": [\r\n\t\t\t\t\"minimum\"\r\n\t\t\t]\r\n\t\t},\r\n\t\t\"default\": {}\r\n\t};\r\n\r\n/***/ },\r\n/* 51 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\r\n\tvar Highlighter = __webpack_require__(52);\r\n\tvar History = __webpack_require__(53);\r\n\tvar SearchBox = __webpack_require__(56);\r\n\tvar ContextMenu = __webpack_require__(57);\r\n\tvar Node = __webpack_require__(58);\r\n\tvar ModeSwitcher = __webpack_require__(61);\r\n\tvar util = __webpack_require__(54);\r\n\r\n\t// create a mixin with the functions for tree mode\r\n\tvar treemode = {};\r\n\r\n\t/**\r\n\t * Create a tree editor\r\n\t * @param {Element} container Container element\r\n\t * @param {Object} [options] Object with options. available options:\r\n\t * {String} mode Editor mode. Available values:\r\n\t * 'tree' (default), 'view',\r\n\t * and 'form'.\r\n\t * {Boolean} search Enable search box.\r\n\t * True by default\r\n\t * {Boolean} history Enable history (undo/redo).\r\n\t * True by default\r\n\t * {function} onChange Callback method, triggered\r\n\t * on change of contents\r\n\t * {String} name Field name for the root node.\r\n\t * {boolean} escapeUnicode If true, unicode\r\n\t * characters are escaped.\r\n\t * false by default.\r\n\t * {Object} schema A JSON Schema for validation\r\n\t * @private\r\n\t */\r\n\ttreemode.create = function (container, options) {\r\n\t if (!container) {\r\n\t throw new Error('No container element provided.');\r\n\t }\r\n\t this.container = container;\r\n\t this.dom = {};\r\n\t this.highlighter = new Highlighter();\r\n\t this.selection = undefined; // will hold the last input selection\r\n\t this.multiselection = {\r\n\t nodes: []\r\n\t };\r\n\t this.validateSchema = null; // will be set in .setSchema(schema)\r\n\t this.errorNodes = [];\r\n\r\n\t this.node = null;\r\n\t this.focusTarget = null;\r\n\r\n\t this._setOptions(options);\r\n\r\n\t if (this.options.history && this.options.mode !== 'view') {\r\n\t this.history = new History(this);\r\n\t }\r\n\r\n\t this._createFrame();\r\n\t this._createTable();\r\n\t};\r\n\r\n\t/**\r\n\t * Destroy the editor. Clean up DOM, event listeners, and web workers.\r\n\t */\r\n\ttreemode.destroy = function () {\r\n\t if (this.frame && this.container && this.frame.parentNode == this.container) {\r\n\t this.container.removeChild(this.frame);\r\n\t this.frame = null;\r\n\t }\r\n\t this.container = null;\r\n\r\n\t this.dom = null;\r\n\r\n\t this.clear();\r\n\t this.node = null;\r\n\t this.focusTarget = null;\r\n\t this.selection = null;\r\n\t this.multiselection = null;\r\n\t this.errorNodes = null;\r\n\t this.validateSchema = null;\r\n\t this._debouncedValidate = null;\r\n\r\n\t if (this.history) {\r\n\t this.history.destroy();\r\n\t this.history = null;\r\n\t }\r\n\r\n\t if (this.searchBox) {\r\n\t this.searchBox.destroy();\r\n\t this.searchBox = null;\r\n\t }\r\n\r\n\t if (this.modeSwitcher) {\r\n\t this.modeSwitcher.destroy();\r\n\t this.modeSwitcher = null;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Initialize and set default options\r\n\t * @param {Object} [options] See description in constructor\r\n\t * @private\r\n\t */\r\n\ttreemode._setOptions = function (options) {\r\n\t this.options = {\r\n\t search: true,\r\n\t history: true,\r\n\t mode: 'tree',\r\n\t name: undefined, // field name of root node\r\n\t schema: null\r\n\t };\r\n\r\n\t // copy all options\r\n\t if (options) {\r\n\t for (var prop in options) {\r\n\t if (options.hasOwnProperty(prop)) {\r\n\t this.options[prop] = options[prop];\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t // compile a JSON schema validator if a JSON schema is provided\r\n\t this.setSchema(this.options.schema);\r\n\r\n\t // create a debounced validate function\r\n\t this._debouncedValidate = util.debounce(this.validate.bind(this), this.DEBOUNCE_INTERVAL);\r\n\t};\r\n\r\n\t/**\r\n\t * Set JSON object in editor\r\n\t * @param {Object | undefined} json JSON data\r\n\t * @param {String} [name] Optional field name for the root node.\r\n\t * Can also be set using setName(name).\r\n\t */\r\n\ttreemode.set = function (json, name) {\r\n\t // adjust field name for root node\r\n\t if (name) {\r\n\t // TODO: deprecated since version 2.2.0. Cleanup some day.\r\n\t console.warn('Second parameter \"name\" is deprecated. Use setName(name) instead.');\r\n\t this.options.name = name;\r\n\t }\r\n\r\n\t // verify if json is valid JSON, ignore when a function\r\n\t if (json instanceof Function || (json === undefined)) {\r\n\t this.clear();\r\n\t }\r\n\t else {\r\n\t this.content.removeChild(this.table); // Take the table offline\r\n\r\n\t // replace the root node\r\n\t var params = {\r\n\t field: this.options.name,\r\n\t value: json\r\n\t };\r\n\t var node = new Node(this, params);\r\n\t this._setRoot(node);\r\n\r\n\t // validate JSON schema (if configured)\r\n\t this.validate();\r\n\r\n\t // expand\r\n\t var recurse = false;\r\n\t this.node.expand(recurse);\r\n\r\n\t this.content.appendChild(this.table); // Put the table online again\r\n\t }\r\n\r\n\t // TODO: maintain history, store last state and previous document\r\n\t if (this.history) {\r\n\t this.history.clear();\r\n\t }\r\n\r\n\t // clear search\r\n\t if (this.searchBox) {\r\n\t this.searchBox.clear();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get JSON object from editor\r\n\t * @return {Object | undefined} json\r\n\t */\r\n\ttreemode.get = function () {\r\n\t // remove focus from currently edited node\r\n\t if (this.focusTarget) {\r\n\t var node = Node.getNodeFromTarget(this.focusTarget);\r\n\t if (node) {\r\n\t node.blur();\r\n\t }\r\n\t }\r\n\r\n\t if (this.node) {\r\n\t return this.node.getValue();\r\n\t }\r\n\t else {\r\n\t return undefined;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the text contents of the editor\r\n\t * @return {String} jsonText\r\n\t */\r\n\ttreemode.getText = function() {\r\n\t return JSON.stringify(this.get());\r\n\t};\r\n\r\n\t/**\r\n\t * Set the text contents of the editor\r\n\t * @param {String} jsonText\r\n\t */\r\n\ttreemode.setText = function(jsonText) {\r\n\t this.set(util.parse(jsonText));\r\n\t};\r\n\r\n\t/**\r\n\t * Set a field name for the root node.\r\n\t * @param {String | undefined} name\r\n\t */\r\n\ttreemode.setName = function (name) {\r\n\t this.options.name = name;\r\n\t if (this.node) {\r\n\t this.node.updateField(this.options.name);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the field name for the root node.\r\n\t * @return {String | undefined} name\r\n\t */\r\n\ttreemode.getName = function () {\r\n\t return this.options.name;\r\n\t};\r\n\r\n\t/**\r\n\t * Set focus to the editor. Focus will be set to:\r\n\t * - the first editable field or value, or else\r\n\t * - to the expand button of the root node, or else\r\n\t * - to the context menu button of the root node, or else\r\n\t * - to the first button in the top menu\r\n\t */\r\n\ttreemode.focus = function () {\r\n\t var input = this.content.querySelector('[contenteditable=true]');\r\n\t if (input) {\r\n\t input.focus();\r\n\t }\r\n\t else if (this.node.dom.expand) {\r\n\t this.node.dom.expand.focus();\r\n\t }\r\n\t else if (this.node.dom.menu) {\r\n\t this.node.dom.menu.focus();\r\n\t }\r\n\t else {\r\n\t // focus to the first button in the menu\r\n\t input = this.frame.querySelector('button');\r\n\t if (input) {\r\n\t input.focus();\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Remove the root node from the editor\r\n\t */\r\n\ttreemode.clear = function () {\r\n\t if (this.node) {\r\n\t this.node.collapse();\r\n\t this.tbody.removeChild(this.node.getDom());\r\n\t delete this.node;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Set the root node for the json editor\r\n\t * @param {Node} node\r\n\t * @private\r\n\t */\r\n\ttreemode._setRoot = function (node) {\r\n\t this.clear();\r\n\r\n\t this.node = node;\r\n\r\n\t // append to the dom\r\n\t this.tbody.appendChild(node.getDom());\r\n\t};\r\n\r\n\t/**\r\n\t * Search text in all nodes\r\n\t * The nodes will be expanded when the text is found one of its childs,\r\n\t * else it will be collapsed. Searches are case insensitive.\r\n\t * @param {String} text\r\n\t * @return {Object[]} results Array with nodes containing the search results\r\n\t * The result objects contains fields:\r\n\t * - {Node} node,\r\n\t * - {String} elem the dom element name where\r\n\t * the result is found ('field' or\r\n\t * 'value')\r\n\t */\r\n\ttreemode.search = function (text) {\r\n\t var results;\r\n\t if (this.node) {\r\n\t this.content.removeChild(this.table); // Take the table offline\r\n\t results = this.node.search(text);\r\n\t this.content.appendChild(this.table); // Put the table online again\r\n\t }\r\n\t else {\r\n\t results = [];\r\n\t }\r\n\r\n\t return results;\r\n\t};\r\n\r\n\t/**\r\n\t * Expand all nodes\r\n\t */\r\n\ttreemode.expandAll = function () {\r\n\t if (this.node) {\r\n\t this.content.removeChild(this.table); // Take the table offline\r\n\t this.node.expand();\r\n\t this.content.appendChild(this.table); // Put the table online again\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Collapse all nodes\r\n\t */\r\n\ttreemode.collapseAll = function () {\r\n\t if (this.node) {\r\n\t this.content.removeChild(this.table); // Take the table offline\r\n\t this.node.collapse();\r\n\t this.content.appendChild(this.table); // Put the table online again\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * The method onChange is called whenever a field or value is changed, created,\r\n\t * deleted, duplicated, etc.\r\n\t * @param {String} action Change action. Available values: \"editField\",\r\n\t * \"editValue\", \"changeType\", \"appendNode\",\r\n\t * \"removeNode\", \"duplicateNode\", \"moveNode\", \"expand\",\r\n\t * \"collapse\".\r\n\t * @param {Object} params Object containing parameters describing the change.\r\n\t * The parameters in params depend on the action (for\r\n\t * example for \"editValue\" the Node, old value, and new\r\n\t * value are provided). params contains all information\r\n\t * needed to undo or redo the action.\r\n\t * @private\r\n\t */\r\n\ttreemode._onAction = function (action, params) {\r\n\t // add an action to the history\r\n\t if (this.history) {\r\n\t this.history.add(action, params);\r\n\t }\r\n\r\n\t this._onChange();\r\n\t};\r\n\r\n\t/**\r\n\t * Handle a change:\r\n\t * - Validate JSON schema\r\n\t * - Send a callback to the onChange listener if provided\r\n\t * @private\r\n\t */\r\n\ttreemode._onChange = function () {\r\n\t // validate JSON schema (if configured)\r\n\t this._debouncedValidate();\r\n\r\n\t // trigger the onChange callback\r\n\t if (this.options.onChange) {\r\n\t try {\r\n\t this.options.onChange();\r\n\t }\r\n\t catch (err) {\r\n\t console.error('Error in onChange callback: ', err);\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Validate current JSON object against the configured JSON schema\r\n\t * Throws an exception when no JSON schema is configured\r\n\t */\r\n\ttreemode.validate = function () {\r\n\t // clear all current errors\r\n\t if (this.errorNodes) {\r\n\t this.errorNodes.forEach(function (node) {\r\n\t node.setError(null);\r\n\t });\r\n\t }\r\n\r\n\t var root = this.node;\r\n\t if (!root) { // TODO: this should be redundant but is needed on mode switch\r\n\t return;\r\n\t }\r\n\r\n\t // check for duplicate keys\r\n\t var duplicateErrors = root.validate();\r\n\r\n\t // validate the JSON\r\n\t var schemaErrors = [];\r\n\t if (this.validateSchema) {\r\n\t var valid = this.validateSchema(root.getValue());\r\n\t if (!valid) {\r\n\t // apply all new errors\r\n\t schemaErrors = this.validateSchema.errors\r\n\t .map(function (error) {\r\n\t return util.improveSchemaError(error);\r\n\t })\r\n\t .map(function findNode (error) {\r\n\t return {\r\n\t node: root.findNode(error.dataPath),\r\n\t error: error\r\n\t }\r\n\t })\r\n\t .filter(function hasNode (entry) {\r\n\t return entry.node != null\r\n\t });\r\n\t }\r\n\t }\r\n\r\n\t // display the error in the nodes with a problem\r\n\t this.errorNodes = duplicateErrors\r\n\t .concat(schemaErrors)\r\n\t .reduce(function expandParents (all, entry) {\r\n\t // expand parents, then merge such that parents come first and\r\n\t // original entries last\r\n\t return entry.node\r\n\t .findParents()\r\n\t .map(function (parent) {\r\n\t return {\r\n\t node: parent,\r\n\t child: entry.node,\r\n\t error: {\r\n\t message: parent.type === 'object'\r\n\t ? 'Contains invalid properties' // object\r\n\t : 'Contains invalid items' // array\r\n\t }\r\n\t };\r\n\t })\r\n\t .concat(all, [entry]);\r\n\t }, [])\r\n\t // TODO: dedupe the parent nodes\r\n\t .map(function setError (entry) {\r\n\t entry.node.setError(entry.error, entry.child);\r\n\t return entry.node;\r\n\t });\r\n\t};\r\n\r\n\t/**\r\n\t * Refresh the rendered contents\r\n\t */\r\n\ttreemode.refresh = function () {\r\n\t if (this.node) {\r\n\t this.node.updateDom({recurse: true});\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Start autoscrolling when given mouse position is above the top of the\r\n\t * editor contents, or below the bottom.\r\n\t * @param {Number} mouseY Absolute mouse position in pixels\r\n\t */\r\n\ttreemode.startAutoScroll = function (mouseY) {\r\n\t var me = this;\r\n\t var content = this.content;\r\n\t var top = util.getAbsoluteTop(content);\r\n\t var height = content.clientHeight;\r\n\t var bottom = top + height;\r\n\t var margin = 24;\r\n\t var interval = 50; // ms\r\n\r\n\t if ((mouseY < top + margin) && content.scrollTop > 0) {\r\n\t this.autoScrollStep = ((top + margin) - mouseY) / 3;\r\n\t }\r\n\t else if (mouseY > bottom - margin &&\r\n\t height + content.scrollTop < content.scrollHeight) {\r\n\t this.autoScrollStep = ((bottom - margin) - mouseY) / 3;\r\n\t }\r\n\t else {\r\n\t this.autoScrollStep = undefined;\r\n\t }\r\n\r\n\t if (this.autoScrollStep) {\r\n\t if (!this.autoScrollTimer) {\r\n\t this.autoScrollTimer = setInterval(function () {\r\n\t if (me.autoScrollStep) {\r\n\t content.scrollTop -= me.autoScrollStep;\r\n\t }\r\n\t else {\r\n\t me.stopAutoScroll();\r\n\t }\r\n\t }, interval);\r\n\t }\r\n\t }\r\n\t else {\r\n\t this.stopAutoScroll();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Stop auto scrolling. Only applicable when scrolling\r\n\t */\r\n\ttreemode.stopAutoScroll = function () {\r\n\t if (this.autoScrollTimer) {\r\n\t clearTimeout(this.autoScrollTimer);\r\n\t delete this.autoScrollTimer;\r\n\t }\r\n\t if (this.autoScrollStep) {\r\n\t delete this.autoScrollStep;\r\n\t }\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Set the focus to an element in the editor, set text selection, and\r\n\t * set scroll position.\r\n\t * @param {Object} selection An object containing fields:\r\n\t * {Element | undefined} dom The dom element\r\n\t * which has focus\r\n\t * {Range | TextRange} range A text selection\r\n\t * {Node[]} nodes Nodes in case of multi selection\r\n\t * {Number} scrollTop Scroll position\r\n\t */\r\n\ttreemode.setSelection = function (selection) {\r\n\t if (!selection) {\r\n\t return;\r\n\t }\r\n\r\n\t if ('scrollTop' in selection && this.content) {\r\n\t // TODO: animated scroll\r\n\t this.content.scrollTop = selection.scrollTop;\r\n\t }\r\n\t if (selection.nodes) {\r\n\t // multi-select\r\n\t this.select(selection.nodes);\r\n\t }\r\n\t if (selection.range) {\r\n\t util.setSelectionOffset(selection.range);\r\n\t }\r\n\t if (selection.dom) {\r\n\t selection.dom.focus();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the current focus\r\n\t * @return {Object} selection An object containing fields:\r\n\t * {Element | undefined} dom The dom element\r\n\t * which has focus\r\n\t * {Range | TextRange} range A text selection\r\n\t * {Node[]} nodes Nodes in case of multi selection\r\n\t * {Number} scrollTop Scroll position\r\n\t */\r\n\ttreemode.getSelection = function () {\r\n\t var range = util.getSelectionOffset();\r\n\t if (range && range.container.nodeName !== 'DIV') { // filter on (editable) divs)\r\n\t range = null;\r\n\t }\r\n\r\n\t return {\r\n\t dom: this.focusTarget,\r\n\t range: range,\r\n\t nodes: this.multiselection.nodes.slice(0),\r\n\t scrollTop: this.content ? this.content.scrollTop : 0\r\n\t };\r\n\t};\r\n\r\n\t/**\r\n\t * Adjust the scroll position such that given top position is shown at 1/4\r\n\t * of the window height.\r\n\t * @param {Number} top\r\n\t * @param {function(boolean)} [callback] Callback, executed when animation is\r\n\t * finished. The callback returns true\r\n\t * when animation is finished, or false\r\n\t * when not.\r\n\t */\r\n\ttreemode.scrollTo = function (top, callback) {\r\n\t var content = this.content;\r\n\t if (content) {\r\n\t var editor = this;\r\n\t // cancel any running animation\r\n\t if (editor.animateTimeout) {\r\n\t clearTimeout(editor.animateTimeout);\r\n\t delete editor.animateTimeout;\r\n\t }\r\n\t if (editor.animateCallback) {\r\n\t editor.animateCallback(false);\r\n\t delete editor.animateCallback;\r\n\t }\r\n\r\n\t // calculate final scroll position\r\n\t var height = content.clientHeight;\r\n\t var bottom = content.scrollHeight - height;\r\n\t var finalScrollTop = Math.min(Math.max(top - height / 4, 0), bottom);\r\n\r\n\t // animate towards the new scroll position\r\n\t var animate = function () {\r\n\t var scrollTop = content.scrollTop;\r\n\t var diff = (finalScrollTop - scrollTop);\r\n\t if (Math.abs(diff) > 3) {\r\n\t content.scrollTop += diff / 3;\r\n\t editor.animateCallback = callback;\r\n\t editor.animateTimeout = setTimeout(animate, 50);\r\n\t }\r\n\t else {\r\n\t // finished\r\n\t if (callback) {\r\n\t callback(true);\r\n\t }\r\n\t content.scrollTop = finalScrollTop;\r\n\t delete editor.animateTimeout;\r\n\t delete editor.animateCallback;\r\n\t }\r\n\t };\r\n\t animate();\r\n\t }\r\n\t else {\r\n\t if (callback) {\r\n\t callback(false);\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Create main frame\r\n\t * @private\r\n\t */\r\n\ttreemode._createFrame = function () {\r\n\t // create the frame\r\n\t this.frame = document.createElement('div');\r\n\t this.frame.className = 'jsoneditor jsoneditor-mode-' + this.options.mode;\r\n\t this.container.appendChild(this.frame);\r\n\r\n\t // create one global event listener to handle all events from all nodes\r\n\t var editor = this;\r\n\t function onEvent(event) {\r\n\t // when switching to mode \"code\" or \"text\" via the menu, some events\r\n\t // are still fired whilst the _onEvent methods is already removed.\r\n\t if (editor._onEvent) {\r\n\t editor._onEvent(event);\r\n\t }\r\n\t }\r\n\t this.frame.onclick = function (event) {\r\n\t var target = event.target;// || event.srcElement;\r\n\r\n\t onEvent(event);\r\n\r\n\t // prevent default submit action of buttons when editor is located\r\n\t // inside a form\r\n\t if (target.nodeName == 'BUTTON') {\r\n\t event.preventDefault();\r\n\t }\r\n\t };\r\n\t this.frame.oninput = onEvent;\r\n\t this.frame.onchange = onEvent;\r\n\t this.frame.onkeydown = onEvent;\r\n\t this.frame.onkeyup = onEvent;\r\n\t this.frame.oncut = onEvent;\r\n\t this.frame.onpaste = onEvent;\r\n\t this.frame.onmousedown = onEvent;\r\n\t this.frame.onmouseup = onEvent;\r\n\t this.frame.onmouseover = onEvent;\r\n\t this.frame.onmouseout = onEvent;\r\n\t // Note: focus and blur events do not propagate, therefore they defined\r\n\t // using an eventListener with useCapture=true\r\n\t // see http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html\r\n\t util.addEventListener(this.frame, 'focus', onEvent, true);\r\n\t util.addEventListener(this.frame, 'blur', onEvent, true);\r\n\t this.frame.onfocusin = onEvent; // for IE\r\n\t this.frame.onfocusout = onEvent; // for IE\r\n\r\n\t // create menu\r\n\t this.menu = document.createElement('div');\r\n\t this.menu.className = 'jsoneditor-menu';\r\n\t this.frame.appendChild(this.menu);\r\n\r\n\t // create expand all button\r\n\t var expandAll = document.createElement('button');\r\n\t expandAll.type = 'button';\r\n\t expandAll.className = 'jsoneditor-expand-all';\r\n\t expandAll.title = 'Expand all fields';\r\n\t expandAll.onclick = function () {\r\n\t editor.expandAll();\r\n\t };\r\n\t this.menu.appendChild(expandAll);\r\n\r\n\t // create expand all button\r\n\t var collapseAll = document.createElement('button');\r\n\t collapseAll.type = 'button';\r\n\t collapseAll.title = 'Collapse all fields';\r\n\t collapseAll.className = 'jsoneditor-collapse-all';\r\n\t collapseAll.onclick = function () {\r\n\t editor.collapseAll();\r\n\t };\r\n\t this.menu.appendChild(collapseAll);\r\n\r\n\t // create undo/redo buttons\r\n\t if (this.history) {\r\n\t // create undo button\r\n\t var undo = document.createElement('button');\r\n\t undo.type = 'button';\r\n\t undo.className = 'jsoneditor-undo jsoneditor-separator';\r\n\t undo.title = 'Undo last action (Ctrl+Z)';\r\n\t undo.onclick = function () {\r\n\t editor._onUndo();\r\n\t };\r\n\t this.menu.appendChild(undo);\r\n\t this.dom.undo = undo;\r\n\r\n\t // create redo button\r\n\t var redo = document.createElement('button');\r\n\t redo.type = 'button';\r\n\t redo.className = 'jsoneditor-redo';\r\n\t redo.title = 'Redo (Ctrl+Shift+Z)';\r\n\t redo.onclick = function () {\r\n\t editor._onRedo();\r\n\t };\r\n\t this.menu.appendChild(redo);\r\n\t this.dom.redo = redo;\r\n\r\n\t // register handler for onchange of history\r\n\t this.history.onChange = function () {\r\n\t undo.disabled = !editor.history.canUndo();\r\n\t redo.disabled = !editor.history.canRedo();\r\n\t };\r\n\t this.history.onChange();\r\n\t }\r\n\r\n\t // create mode box\r\n\t if (this.options && this.options.modes && this.options.modes.length) {\r\n\t var me = this;\r\n\t this.modeSwitcher = new ModeSwitcher(this.menu, this.options.modes, this.options.mode, function onSwitch(mode) {\r\n\t me.modeSwitcher.destroy();\r\n\r\n\t // switch mode and restore focus\r\n\t me.setMode(mode);\r\n\t me.modeSwitcher.focus();\r\n\t });\r\n\t }\r\n\r\n\t // create search box\r\n\t if (this.options.search) {\r\n\t this.searchBox = new SearchBox(this, this.menu);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Perform an undo action\r\n\t * @private\r\n\t */\r\n\ttreemode._onUndo = function () {\r\n\t if (this.history) {\r\n\t // undo last action\r\n\t this.history.undo();\r\n\r\n\t // fire change event\r\n\t this._onChange();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Perform a redo action\r\n\t * @private\r\n\t */\r\n\ttreemode._onRedo = function () {\r\n\t if (this.history) {\r\n\t // redo last action\r\n\t this.history.redo();\r\n\r\n\t // fire change event\r\n\t this._onChange();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Event handler\r\n\t * @param event\r\n\t * @private\r\n\t */\r\n\ttreemode._onEvent = function (event) {\r\n\t if (event.type == 'keydown') {\r\n\t this._onKeyDown(event);\r\n\t }\r\n\r\n\t if (event.type == 'focus') {\r\n\t this.focusTarget = event.target;\r\n\t }\r\n\r\n\t if (event.type == 'mousedown') {\r\n\t this._startDragDistance(event);\r\n\t }\r\n\t if (event.type == 'mousemove' || event.type == 'mouseup' || event.type == 'click') {\r\n\t this._updateDragDistance(event);\r\n\t }\r\n\r\n\t var node = Node.getNodeFromTarget(event.target);\r\n\r\n\t if (node && node.selected) {\r\n\t if (event.type == 'click') {\r\n\t if (event.target == node.dom.menu) {\r\n\t this.showContextMenu(event.target);\r\n\r\n\t // stop propagation (else we will open the context menu of a single node)\r\n\t return;\r\n\t }\r\n\r\n\t // deselect a multi selection\r\n\t if (!event.hasMoved) {\r\n\t this.deselect();\r\n\t }\r\n\t }\r\n\r\n\t if (event.type == 'mousedown') {\r\n\t // drag multiple nodes\r\n\t Node.onDragStart(this.multiselection.nodes, event);\r\n\t }\r\n\t }\r\n\t else {\r\n\t if (event.type == 'mousedown') {\r\n\t this.deselect();\r\n\r\n\t if (node && event.target == node.dom.drag) {\r\n\t // drag a singe node\r\n\t Node.onDragStart(node, event);\r\n\t }\r\n\t else if (!node || (event.target != node.dom.field && event.target != node.dom.value && event.target != node.dom.select)) {\r\n\t // select multiple nodes\r\n\t this._onMultiSelectStart(event);\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t if (node) {\r\n\t node.onEvent(event);\r\n\t }\r\n\t};\r\n\r\n\ttreemode._startDragDistance = function (event) {\r\n\t this.dragDistanceEvent = {\r\n\t initialTarget: event.target,\r\n\t initialPageX: event.pageX,\r\n\t initialPageY: event.pageY,\r\n\t dragDistance: 0,\r\n\t hasMoved: false\r\n\t };\r\n\t};\r\n\r\n\ttreemode._updateDragDistance = function (event) {\r\n\t if (!this.dragDistanceEvent) {\r\n\t this._startDragDistance(event);\r\n\t }\r\n\r\n\t var diffX = event.pageX - this.dragDistanceEvent.initialPageX;\r\n\t var diffY = event.pageY - this.dragDistanceEvent.initialPageY;\r\n\r\n\t this.dragDistanceEvent.dragDistance = Math.sqrt(diffX * diffX + diffY * diffY);\r\n\t this.dragDistanceEvent.hasMoved =\r\n\t this.dragDistanceEvent.hasMoved || this.dragDistanceEvent.dragDistance > 10;\r\n\r\n\t event.dragDistance = this.dragDistanceEvent.dragDistance;\r\n\t event.hasMoved = this.dragDistanceEvent.hasMoved;\r\n\r\n\t return event.dragDistance;\r\n\t};\r\n\r\n\t/**\r\n\t * Start multi selection of nodes by dragging the mouse\r\n\t * @param event\r\n\t * @private\r\n\t */\r\n\ttreemode._onMultiSelectStart = function (event) {\r\n\t var node = Node.getNodeFromTarget(event.target);\r\n\r\n\t if (this.options.mode !== 'tree' || this.options.onEditable !== undefined) {\r\n\t // dragging not allowed in modes 'view' and 'form'\r\n\t // TODO: allow multiselection of items when option onEditable is specified\r\n\t return;\r\n\t }\r\n\r\n\t this.multiselection = {\r\n\t start: node || null,\r\n\t end: null,\r\n\t nodes: []\r\n\t };\r\n\r\n\t this._startDragDistance(event);\r\n\r\n\t var editor = this;\r\n\t if (!this.mousemove) {\r\n\t this.mousemove = util.addEventListener(window, 'mousemove', function (event) {\r\n\t editor._onMultiSelect(event);\r\n\t });\r\n\t }\r\n\t if (!this.mouseup) {\r\n\t this.mouseup = util.addEventListener(window, 'mouseup', function (event ) {\r\n\t editor._onMultiSelectEnd(event);\r\n\t });\r\n\t }\r\n\r\n\t};\r\n\r\n\t/**\r\n\t * Multiselect nodes by dragging\r\n\t * @param event\r\n\t * @private\r\n\t */\r\n\ttreemode._onMultiSelect = function (event) {\r\n\t event.preventDefault();\r\n\r\n\t this._updateDragDistance(event);\r\n\t if (!event.hasMoved) {\r\n\t return;\r\n\t }\r\n\r\n\t var node = Node.getNodeFromTarget(event.target);\r\n\r\n\t if (node) {\r\n\t if (this.multiselection.start == null) {\r\n\t this.multiselection.start = node;\r\n\t }\r\n\t this.multiselection.end = node;\r\n\t }\r\n\r\n\t // deselect previous selection\r\n\t this.deselect();\r\n\r\n\t // find the selected nodes in the range from first to last\r\n\t var start = this.multiselection.start;\r\n\t var end = this.multiselection.end || this.multiselection.start;\r\n\t if (start && end) {\r\n\t // find the top level childs, all having the same parent\r\n\t this.multiselection.nodes = this._findTopLevelNodes(start, end);\r\n\t this.select(this.multiselection.nodes);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * End of multiselect nodes by dragging\r\n\t * @param event\r\n\t * @private\r\n\t */\r\n\ttreemode._onMultiSelectEnd = function (event) {\r\n\t // set focus to the context menu button of the first node\r\n\t if (this.multiselection.nodes[0]) {\r\n\t this.multiselection.nodes[0].dom.menu.focus();\r\n\t }\r\n\r\n\t this.multiselection.start = null;\r\n\t this.multiselection.end = null;\r\n\r\n\t // cleanup global event listeners\r\n\t if (this.mousemove) {\r\n\t util.removeEventListener(window, 'mousemove', this.mousemove);\r\n\t delete this.mousemove;\r\n\t }\r\n\t if (this.mouseup) {\r\n\t util.removeEventListener(window, 'mouseup', this.mouseup);\r\n\t delete this.mouseup;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * deselect currently selected nodes\r\n\t * @param {boolean} [clearStartAndEnd=false] If true, the `start` and `end`\r\n\t * state is cleared too.\r\n\t */\r\n\ttreemode.deselect = function (clearStartAndEnd) {\r\n\t this.multiselection.nodes.forEach(function (node) {\r\n\t node.setSelected(false);\r\n\t });\r\n\t this.multiselection.nodes = [];\r\n\r\n\t if (clearStartAndEnd) {\r\n\t this.multiselection.start = null;\r\n\t this.multiselection.end = null;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * select nodes\r\n\t * @param {Node[] | Node} nodes\r\n\t */\r\n\ttreemode.select = function (nodes) {\r\n\t if (!Array.isArray(nodes)) {\r\n\t return this.select([nodes]);\r\n\t }\r\n\r\n\t if (nodes) {\r\n\t this.deselect();\r\n\r\n\t this.multiselection.nodes = nodes.slice(0);\r\n\r\n\t var first = nodes[0];\r\n\t nodes.forEach(function (node) {\r\n\t node.setSelected(true, node === first);\r\n\t });\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * From two arbitrary selected nodes, find their shared parent node.\r\n\t * From that parent node, select the two child nodes in the brances going to\r\n\t * nodes `start` and `end`, and select all childs in between.\r\n\t * @param {Node} start\r\n\t * @param {Node} end\r\n\t * @return {Array.<Node>} Returns an ordered list with child nodes\r\n\t * @private\r\n\t */\r\n\ttreemode._findTopLevelNodes = function (start, end) {\r\n\t var startPath = start.getNodePath();\r\n\t var endPath = end.getNodePath();\r\n\t var i = 0;\r\n\t while (i < startPath.length && startPath[i] === endPath[i]) {\r\n\t i++;\r\n\t }\r\n\t var root = startPath[i - 1];\r\n\t var startChild = startPath[i];\r\n\t var endChild = endPath[i];\r\n\r\n\t if (!startChild || !endChild) {\r\n\t if (root.parent) {\r\n\t // startChild is a parent of endChild or vice versa\r\n\t startChild = root;\r\n\t endChild = root;\r\n\t root = root.parent\r\n\t }\r\n\t else {\r\n\t // we have selected the root node (which doesn't have a parent)\r\n\t startChild = root.childs[0];\r\n\t endChild = root.childs[root.childs.length - 1];\r\n\t }\r\n\t }\r\n\r\n\t if (root && startChild && endChild) {\r\n\t var startIndex = root.childs.indexOf(startChild);\r\n\t var endIndex = root.childs.indexOf(endChild);\r\n\t var firstIndex = Math.min(startIndex, endIndex);\r\n\t var lastIndex = Math.max(startIndex, endIndex);\r\n\r\n\t return root.childs.slice(firstIndex, lastIndex + 1);\r\n\t }\r\n\t else {\r\n\t return [];\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Event handler for keydown. Handles shortcut keys\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */\r\n\ttreemode._onKeyDown = function (event) {\r\n\t var keynum = event.which || event.keyCode;\r\n\t var ctrlKey = event.ctrlKey;\r\n\t var shiftKey = event.shiftKey;\r\n\t var handled = false;\r\n\r\n\t if (keynum == 9) { // Tab or Shift+Tab\r\n\t var me = this;\r\n\t setTimeout(function () {\r\n\t // select all text when moving focus to an editable div\r\n\t util.selectContentEditable(me.focusTarget);\r\n\t }, 0);\r\n\t }\r\n\r\n\t if (this.searchBox) {\r\n\t if (ctrlKey && keynum == 70) { // Ctrl+F\r\n\t this.searchBox.dom.search.focus();\r\n\t this.searchBox.dom.search.select();\r\n\t handled = true;\r\n\t }\r\n\t else if (keynum == 114 || (ctrlKey && keynum == 71)) { // F3 or Ctrl+G\r\n\t var focus = true;\r\n\t if (!shiftKey) {\r\n\t // select next search result (F3 or Ctrl+G)\r\n\t this.searchBox.next(focus);\r\n\t }\r\n\t else {\r\n\t // select previous search result (Shift+F3 or Ctrl+Shift+G)\r\n\t this.searchBox.previous(focus);\r\n\t }\r\n\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\r\n\t if (this.history) {\r\n\t if (ctrlKey && !shiftKey && keynum == 90) { // Ctrl+Z\r\n\t // undo\r\n\t this._onUndo();\r\n\t handled = true;\r\n\t }\r\n\t else if (ctrlKey && shiftKey && keynum == 90) { // Ctrl+Shift+Z\r\n\t // redo\r\n\t this._onRedo();\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\r\n\t if (handled) {\r\n\t event.preventDefault();\r\n\t event.stopPropagation();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Create main table\r\n\t * @private\r\n\t */\r\n\ttreemode._createTable = function () {\r\n\t var contentOuter = document.createElement('div');\r\n\t contentOuter.className = 'jsoneditor-outer';\r\n\t this.contentOuter = contentOuter;\r\n\r\n\t this.content = document.createElement('div');\r\n\t this.content.className = 'jsoneditor-tree';\r\n\t contentOuter.appendChild(this.content);\r\n\r\n\t this.table = document.createElement('table');\r\n\t this.table.className = 'jsoneditor-tree';\r\n\t this.content.appendChild(this.table);\r\n\r\n\t // create colgroup where the first two columns don't have a fixed\r\n\t // width, and the edit columns do have a fixed width\r\n\t var col;\r\n\t this.colgroupContent = document.createElement('colgroup');\r\n\t if (this.options.mode === 'tree') {\r\n\t col = document.createElement('col');\r\n\t col.width = \"24px\";\r\n\t this.colgroupContent.appendChild(col);\r\n\t }\r\n\t col = document.createElement('col');\r\n\t col.width = \"24px\";\r\n\t this.colgroupContent.appendChild(col);\r\n\t col = document.createElement('col');\r\n\t this.colgroupContent.appendChild(col);\r\n\t this.table.appendChild(this.colgroupContent);\r\n\r\n\t this.tbody = document.createElement('tbody');\r\n\t this.table.appendChild(this.tbody);\r\n\r\n\t this.frame.appendChild(contentOuter);\r\n\t};\r\n\r\n\t/**\r\n\t * Show a contextmenu for this node.\r\n\t * Used for multiselection\r\n\t * @param {HTMLElement} anchor Anchor element to attache the context menu to.\r\n\t * @param {function} [onClose] Callback method called when the context menu\r\n\t * is being closed.\r\n\t */\r\n\ttreemode.showContextMenu = function (anchor, onClose) {\r\n\t var items = [];\r\n\t var editor = this;\r\n\r\n\t // create duplicate button\r\n\t items.push({\r\n\t text: 'Duplicate',\r\n\t title: 'Duplicate selected fields (Ctrl+D)',\r\n\t className: 'jsoneditor-duplicate',\r\n\t click: function () {\r\n\t Node.onDuplicate(editor.multiselection.nodes);\r\n\t }\r\n\t });\r\n\r\n\t // create remove button\r\n\t items.push({\r\n\t text: 'Remove',\r\n\t title: 'Remove selected fields (Ctrl+Del)',\r\n\t className: 'jsoneditor-remove',\r\n\t click: function () {\r\n\t Node.onRemove(editor.multiselection.nodes);\r\n\t }\r\n\t });\r\n\r\n\t var menu = new ContextMenu(items, {close: onClose});\r\n\t menu.show(anchor, this.content);\r\n\t};\r\n\r\n\r\n\t// define modes\r\n\tmodule.exports = [\r\n\t {\r\n\t mode: 'tree',\r\n\t mixin: treemode,\r\n\t data: 'json'\r\n\t },\r\n\t {\r\n\t mode: 'view',\r\n\t mixin: treemode,\r\n\t data: 'json'\r\n\t },\r\n\t {\r\n\t mode: 'form',\r\n\t mixin: treemode,\r\n\t data: 'json'\r\n\t }\r\n\t];\r\n\r\n\r\n/***/ },\r\n/* 52 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\r\n\t/**\r\n\t * The highlighter can highlight/unhighlight a node, and\r\n\t * animate the visibility of a context menu.\r\n\t * @constructor Highlighter\r\n\t */\r\n\tfunction Highlighter () {\r\n\t this.locked = false;\r\n\t}\r\n\r\n\t/**\r\n\t * Hightlight given node and its childs\r\n\t * @param {Node} node\r\n\t */\r\n\tHighlighter.prototype.highlight = function (node) {\r\n\t if (this.locked) {\r\n\t return;\r\n\t }\r\n\r\n\t if (this.node != node) {\r\n\t // unhighlight current node\r\n\t if (this.node) {\r\n\t this.node.setHighlight(false);\r\n\t }\r\n\r\n\t // highlight new node\r\n\t this.node = node;\r\n\t this.node.setHighlight(true);\r\n\t }\r\n\r\n\t // cancel any current timeout\r\n\t this._cancelUnhighlight();\r\n\t};\r\n\r\n\t/**\r\n\t * Unhighlight currently highlighted node.\r\n\t * Will be done after a delay\r\n\t */\r\n\tHighlighter.prototype.unhighlight = function () {\r\n\t if (this.locked) {\r\n\t return;\r\n\t }\r\n\r\n\t var me = this;\r\n\t if (this.node) {\r\n\t this._cancelUnhighlight();\r\n\r\n\t // do the unhighlighting after a small delay, to prevent re-highlighting\r\n\t // the same node when moving from the drag-icon to the contextmenu-icon\r\n\t // or vice versa.\r\n\t this.unhighlightTimer = setTimeout(function () {\r\n\t me.node.setHighlight(false);\r\n\t me.node = undefined;\r\n\t me.unhighlightTimer = undefined;\r\n\t }, 0);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Cancel an unhighlight action (if before the timeout of the unhighlight action)\r\n\t * @private\r\n\t */\r\n\tHighlighter.prototype._cancelUnhighlight = function () {\r\n\t if (this.unhighlightTimer) {\r\n\t clearTimeout(this.unhighlightTimer);\r\n\t this.unhighlightTimer = undefined;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Lock highlighting or unhighlighting nodes.\r\n\t * methods highlight and unhighlight do not work while locked.\r\n\t */\r\n\tHighlighter.prototype.lock = function () {\r\n\t this.locked = true;\r\n\t};\r\n\r\n\t/**\r\n\t * Unlock highlighting or unhighlighting nodes\r\n\t */\r\n\tHighlighter.prototype.unlock = function () {\r\n\t this.locked = false;\r\n\t};\r\n\r\n\tmodule.exports = Highlighter;\r\n\r\n\r\n/***/ },\r\n/* 53 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar util = __webpack_require__(54);\r\n\r\n\t/**\r\n\t * @constructor History\r\n\t * Store action history, enables undo and redo\r\n\t * @param {JSONEditor} editor\r\n\t */\r\n\tfunction History (editor) {\r\n\t this.editor = editor;\r\n\t this.history = [];\r\n\t this.index = -1;\r\n\r\n\t this.clear();\r\n\r\n\t // map with all supported actions\r\n\t this.actions = {\r\n\t 'editField': {\r\n\t 'undo': function (params) {\r\n\t params.node.updateField(params.oldValue);\r\n\t },\r\n\t 'redo': function (params) {\r\n\t params.node.updateField(params.newValue);\r\n\t }\r\n\t },\r\n\t 'editValue': {\r\n\t 'undo': function (params) {\r\n\t params.node.updateValue(params.oldValue);\r\n\t },\r\n\t 'redo': function (params) {\r\n\t params.node.updateValue(params.newValue);\r\n\t }\r\n\t },\r\n\t 'changeType': {\r\n\t 'undo': function (params) {\r\n\t params.node.changeType(params.oldType);\r\n\t },\r\n\t 'redo': function (params) {\r\n\t params.node.changeType(params.newType);\r\n\t }\r\n\t },\r\n\r\n\t 'appendNodes': {\r\n\t 'undo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.removeChild(node);\r\n\t });\r\n\t },\r\n\t 'redo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.appendChild(node);\r\n\t });\r\n\t }\r\n\t },\r\n\t 'insertBeforeNodes': {\r\n\t 'undo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.removeChild(node);\r\n\t });\r\n\t },\r\n\t 'redo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.insertBefore(node, params.beforeNode);\r\n\t });\r\n\t }\r\n\t },\r\n\t 'insertAfterNodes': {\r\n\t 'undo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.removeChild(node);\r\n\t });\r\n\t },\r\n\t 'redo': function (params) {\r\n\t var afterNode = params.afterNode;\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.insertAfter(params.node, afterNode);\r\n\t afterNode = node;\r\n\t });\r\n\t }\r\n\t },\r\n\t 'removeNodes': {\r\n\t 'undo': function (params) {\r\n\t var parent = params.parent;\r\n\t var beforeNode = parent.childs[params.index] || parent.append;\r\n\t params.nodes.forEach(function (node) {\r\n\t parent.insertBefore(node, beforeNode);\r\n\t });\r\n\t },\r\n\t 'redo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.removeChild(node);\r\n\t });\r\n\t }\r\n\t },\r\n\t 'duplicateNodes': {\r\n\t 'undo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.removeChild(node);\r\n\t });\r\n\t },\r\n\t 'redo': function (params) {\r\n\t var afterNode = params.afterNode;\r\n\t params.nodes.forEach(function (node) {\r\n\t params.parent.insertAfter(node, afterNode);\r\n\t afterNode = node;\r\n\t });\r\n\t }\r\n\t },\r\n\t 'moveNodes': {\r\n\t 'undo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.oldBeforeNode.parent.moveBefore(node, params.oldBeforeNode);\r\n\t });\r\n\t },\r\n\t 'redo': function (params) {\r\n\t params.nodes.forEach(function (node) {\r\n\t params.newBeforeNode.parent.moveBefore(node, params.newBeforeNode);\r\n\t });\r\n\t }\r\n\t },\r\n\r\n\t 'sort': {\r\n\t 'undo': function (params) {\r\n\t var node = params.node;\r\n\t node.hideChilds();\r\n\t node.sort = params.oldSort;\r\n\t node.childs = params.oldChilds;\r\n\t node.showChilds();\r\n\t },\r\n\t 'redo': function (params) {\r\n\t var node = params.node;\r\n\t node.hideChilds();\r\n\t node.sort = params.newSort;\r\n\t node.childs = params.newChilds;\r\n\t node.showChilds();\r\n\t }\r\n\t }\r\n\r\n\t // TODO: restore the original caret position and selection with each undo\r\n\t // TODO: implement history for actions \"expand\", \"collapse\", \"scroll\", \"setDocument\"\r\n\t };\r\n\t}\r\n\r\n\t/**\r\n\t * The method onChange is executed when the History is changed, and can\r\n\t * be overloaded.\r\n\t */\r\n\tHistory.prototype.onChange = function () {};\r\n\r\n\t/**\r\n\t * Add a new action to the history\r\n\t * @param {String} action The executed action. Available actions: \"editField\",\r\n\t * \"editValue\", \"changeType\", \"appendNode\",\r\n\t * \"removeNode\", \"duplicateNode\", \"moveNode\"\r\n\t * @param {Object} params Object containing parameters describing the change.\r\n\t * The parameters in params depend on the action (for\r\n\t * example for \"editValue\" the Node, old value, and new\r\n\t * value are provided). params contains all information\r\n\t * needed to undo or redo the action.\r\n\t */\r\n\tHistory.prototype.add = function (action, params) {\r\n\t this.index++;\r\n\t this.history[this.index] = {\r\n\t 'action': action,\r\n\t 'params': params,\r\n\t 'timestamp': new Date()\r\n\t };\r\n\r\n\t // remove redo actions which are invalid now\r\n\t if (this.index < this.history.length - 1) {\r\n\t this.history.splice(this.index + 1, this.history.length - this.index - 1);\r\n\t }\r\n\r\n\t // fire onchange event\r\n\t this.onChange();\r\n\t};\r\n\r\n\t/**\r\n\t * Clear history\r\n\t */\r\n\tHistory.prototype.clear = function () {\r\n\t this.history = [];\r\n\t this.index = -1;\r\n\r\n\t // fire onchange event\r\n\t this.onChange();\r\n\t};\r\n\r\n\t/**\r\n\t * Check if there is an action available for undo\r\n\t * @return {Boolean} canUndo\r\n\t */\r\n\tHistory.prototype.canUndo = function () {\r\n\t return (this.index >= 0);\r\n\t};\r\n\r\n\t/**\r\n\t * Check if there is an action available for redo\r\n\t * @return {Boolean} canRedo\r\n\t */\r\n\tHistory.prototype.canRedo = function () {\r\n\t return (this.index < this.history.length - 1);\r\n\t};\r\n\r\n\t/**\r\n\t * Undo the last action\r\n\t */\r\n\tHistory.prototype.undo = function () {\r\n\t if (this.canUndo()) {\r\n\t var obj = this.history[this.index];\r\n\t if (obj) {\r\n\t var action = this.actions[obj.action];\r\n\t if (action && action.undo) {\r\n\t action.undo(obj.params);\r\n\t if (obj.params.oldSelection) {\r\n\t this.editor.setSelection(obj.params.oldSelection);\r\n\t }\r\n\t }\r\n\t else {\r\n\t console.error(new Error('unknown action \"' + obj.action + '\"'));\r\n\t }\r\n\t }\r\n\t this.index--;\r\n\r\n\t // fire onchange event\r\n\t this.onChange();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Redo the last action\r\n\t */\r\n\tHistory.prototype.redo = function () {\r\n\t if (this.canRedo()) {\r\n\t this.index++;\r\n\r\n\t var obj = this.history[this.index];\r\n\t if (obj) {\r\n\t var action = this.actions[obj.action];\r\n\t if (action && action.redo) {\r\n\t action.redo(obj.params);\r\n\t if (obj.params.newSelection) {\r\n\t this.editor.setSelection(obj.params.newSelection);\r\n\t }\r\n\t }\r\n\t else {\r\n\t console.error(new Error('unknown action \"' + obj.action + '\"'));\r\n\t }\r\n\t }\r\n\r\n\t // fire onchange event\r\n\t this.onChange();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Destroy history\r\n\t */\r\n\tHistory.prototype.destroy = function () {\r\n\t this.editor = null;\r\n\r\n\t this.history = [];\r\n\t this.index = -1;\r\n\t};\r\n\r\n\tmodule.exports = History;\r\n\r\n\r\n/***/ },\r\n/* 54 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar jsonlint = __webpack_require__(55);\r\n\r\n\t/**\r\n\t * Parse JSON using the parser built-in in the browser.\r\n\t * On exception, the jsonString is validated and a detailed error is thrown.\r\n\t * @param {String} jsonString\r\n\t * @return {JSON} json\r\n\t */\r\n\texports.parse = function parse(jsonString) {\r\n\t try {\r\n\t return JSON.parse(jsonString);\r\n\t }\r\n\t catch (err) {\r\n\t // try to throw a more detailed error message using validate\r\n\t exports.validate(jsonString);\r\n\r\n\t // rethrow the original error\r\n\t throw err;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Sanitize a JSON-like string containing. For example changes JavaScript\r\n\t * notation into JSON notation.\r\n\t * This function for example changes a string like \"{a: 2, 'b': {c: 'd'}\"\r\n\t * into '{\"a\": 2, \"b\": {\"c\": \"d\"}'\r\n\t * @param {string} jsString\r\n\t * @returns {string} json\r\n\t */\r\n\texports.sanitize = function (jsString) {\r\n\t // escape all single and double quotes inside strings\r\n\t var chars = [];\r\n\t var i = 0;\r\n\r\n\t //If JSON starts with a function (characters/digits/\"_-\"), remove this function.\r\n\t //This is useful for \"stripping\" JSONP objects to become JSON\r\n\t //For example: /* some comment */ function_12321321 ( [{\"a\":\"b\"}] ); => [{\"a\":\"b\"}]\r\n\t var match = jsString.match(/^\\s*(\\/\\*(.|[\\r\\n])*?\\*\\/)?\\s*[\\da-zA-Z_$]+\\s*\\(([\\s\\S]*)\\)\\s*;?\\s*$/);\r\n\t if (match) {\r\n\t jsString = match[3];\r\n\t }\r\n\r\n\t // helper functions to get the current/prev/next character\r\n\t function curr () { return jsString.charAt(i); }\r\n\t function next() { return jsString.charAt(i + 1); }\r\n\t function prev() { return jsString.charAt(i - 1); }\r\n\r\n\t // get the last parsed non-whitespace character\r\n\t function lastNonWhitespace () {\r\n\t var p = chars.length - 1;\r\n\r\n\t while (p >= 0) {\r\n\t var pp = chars[p];\r\n\t if (pp !== ' ' && pp !== '\\n' && pp !== '\\r' && pp !== '\\t') { // non whitespace\r\n\t return pp;\r\n\t }\r\n\t p--;\r\n\t }\r\n\r\n\t return '';\r\n\t }\r\n\r\n\t // skip a block comment '/* ... */'\r\n\t function skipBlockComment () {\r\n\t i += 2;\r\n\t while (i < jsString.length && (curr() !== '*' || next() !== '/')) {\r\n\t i++;\r\n\t }\r\n\t i += 2;\r\n\t }\r\n\r\n\t // skip a comment '// ...'\r\n\t function skipComment () {\r\n\t i += 2;\r\n\t while (i < jsString.length && (curr() !== '\\n')) {\r\n\t i++;\r\n\t }\r\n\t }\r\n\r\n\t // parse single or double quoted string\r\n\t function parseString(quote) {\r\n\t chars.push('\"');\r\n\t i++;\r\n\t var c = curr();\r\n\t while (i < jsString.length && c !== quote) {\r\n\t if (c === '\"' && prev() !== '\\\\') {\r\n\t // unescaped double quote, escape it\r\n\t chars.push('\\\\');\r\n\t }\r\n\r\n\t // handle escape character\r\n\t if (c === '\\\\') {\r\n\t i++;\r\n\t c = curr();\r\n\r\n\t // remove the escape character when followed by a single quote ', not needed\r\n\t if (c !== '\\'') {\r\n\t chars.push('\\\\');\r\n\t }\r\n\t }\r\n\t chars.push(c);\r\n\r\n\t i++;\r\n\t c = curr();\r\n\t }\r\n\t if (c === quote) {\r\n\t chars.push('\"');\r\n\t i++;\r\n\t }\r\n\t }\r\n\r\n\t // parse an unquoted key\r\n\t function parseKey() {\r\n\t var specialValues = ['null', 'true', 'false'];\r\n\t var key = '';\r\n\t var c = curr();\r\n\r\n\t var regexp = /[a-zA-Z_$\\d]/; // letter, number, underscore, dollar character\r\n\t while (regexp.test(c)) {\r\n\t key += c;\r\n\t i++;\r\n\t c = curr();\r\n\t }\r\n\r\n\t if (specialValues.indexOf(key) === -1) {\r\n\t chars.push('\"' + key + '\"');\r\n\t }\r\n\t else {\r\n\t chars.push(key);\r\n\t }\r\n\t }\r\n\r\n\t while(i < jsString.length) {\r\n\t var c = curr();\r\n\r\n\t if (c === '/' && next() === '*') {\r\n\t skipBlockComment();\r\n\t }\r\n\t else if (c === '/' && next() === '/') {\r\n\t skipComment();\r\n\t }\r\n\t else if (c === '\\'' || c === '\"') {\r\n\t parseString(c);\r\n\t }\r\n\t else if (/[a-zA-Z_$]/.test(c) && ['{', ','].indexOf(lastNonWhitespace()) !== -1) {\r\n\t // an unquoted object key (like a in '{a:2}')\r\n\t parseKey();\r\n\t }\r\n\t else {\r\n\t chars.push(c);\r\n\t i++;\r\n\t }\r\n\t }\r\n\r\n\t return chars.join('');\r\n\t};\r\n\r\n\t/**\r\n\t * Escape unicode characters.\r\n\t * For example input '\\u2661' (length 1) will output '\\\\u2661' (length 5).\r\n\t * @param {string} text\r\n\t * @return {string}\r\n\t */\r\n\texports.escapeUnicodeChars = function (text) {\r\n\t // see https://www.wikiwand.com/en/UTF-16\r\n\t // note: we leave surrogate pairs as two individual chars,\r\n\t // as JSON doesn't interpret them as a single unicode char.\r\n\t return text.replace(/[\\u007F-\\uFFFF]/g, function(c) {\r\n\t return '\\\\u'+('0000' + c.charCodeAt(0).toString(16)).slice(-4);\r\n\t })\r\n\t};\r\n\r\n\t/**\r\n\t * Validate a string containing a JSON object\r\n\t * This method uses JSONLint to validate the String. If JSONLint is not\r\n\t * available, the built-in JSON parser of the browser is used.\r\n\t * @param {String} jsonString String with an (invalid) JSON object\r\n\t * @throws Error\r\n\t */\r\n\texports.validate = function validate(jsonString) {\r\n\t if (typeof(jsonlint) != 'undefined') {\r\n\t jsonlint.parse(jsonString);\r\n\t }\r\n\t else {\r\n\t JSON.parse(jsonString);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Extend object a with the properties of object b\r\n\t * @param {Object} a\r\n\t * @param {Object} b\r\n\t * @return {Object} a\r\n\t */\r\n\texports.extend = function extend(a, b) {\r\n\t for (var prop in b) {\r\n\t if (b.hasOwnProperty(prop)) {\r\n\t a[prop] = b[prop];\r\n\t }\r\n\t }\r\n\t return a;\r\n\t};\r\n\r\n\t/**\r\n\t * Remove all properties from object a\r\n\t * @param {Object} a\r\n\t * @return {Object} a\r\n\t */\r\n\texports.clear = function clear (a) {\r\n\t for (var prop in a) {\r\n\t if (a.hasOwnProperty(prop)) {\r\n\t delete a[prop];\r\n\t }\r\n\t }\r\n\t return a;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the type of an object\r\n\t * @param {*} object\r\n\t * @return {String} type\r\n\t */\r\n\texports.type = function type (object) {\r\n\t if (object === null) {\r\n\t return 'null';\r\n\t }\r\n\t if (object === undefined) {\r\n\t return 'undefined';\r\n\t }\r\n\t if ((object instanceof Number) || (typeof object === 'number')) {\r\n\t return 'number';\r\n\t }\r\n\t if ((object instanceof String) || (typeof object === 'string')) {\r\n\t return 'string';\r\n\t }\r\n\t if ((object instanceof Boolean) || (typeof object === 'boolean')) {\r\n\t return 'boolean';\r\n\t }\r\n\t if ((object instanceof RegExp) || (typeof object === 'regexp')) {\r\n\t return 'regexp';\r\n\t }\r\n\t if (exports.isArray(object)) {\r\n\t return 'array';\r\n\t }\r\n\r\n\t return 'object';\r\n\t};\r\n\r\n\t/**\r\n\t * Test whether a text contains a url (matches when a string starts\r\n\t * with 'http://*' or 'https://*' and has no whitespace characters)\r\n\t * @param {String} text\r\n\t */\r\n\tvar isUrlRegex = /^https?:\\/\\/\\S+$/;\r\n\texports.isUrl = function isUrl (text) {\r\n\t return (typeof text == 'string' || text instanceof String) &&\r\n\t isUrlRegex.test(text);\r\n\t};\r\n\r\n\t/**\r\n\t * Tes whether given object is an Array\r\n\t * @param {*} obj\r\n\t * @returns {boolean} returns true when obj is an array\r\n\t */\r\n\texports.isArray = function (obj) {\r\n\t return Object.prototype.toString.call(obj) === '[object Array]';\r\n\t};\r\n\r\n\t/**\r\n\t * Retrieve the absolute left value of a DOM element\r\n\t * @param {Element} elem A dom element, for example a div\r\n\t * @return {Number} left The absolute left position of this element\r\n\t * in the browser page.\r\n\t */\r\n\texports.getAbsoluteLeft = function getAbsoluteLeft(elem) {\r\n\t var rect = elem.getBoundingClientRect();\r\n\t return rect.left + window.pageXOffset || document.scrollLeft || 0;\r\n\t};\r\n\r\n\t/**\r\n\t * Retrieve the absolute top value of a DOM element\r\n\t * @param {Element} elem A dom element, for example a div\r\n\t * @return {Number} top The absolute top position of this element\r\n\t * in the browser page.\r\n\t */\r\n\texports.getAbsoluteTop = function getAbsoluteTop(elem) {\r\n\t var rect = elem.getBoundingClientRect();\r\n\t return rect.top + window.pageYOffset || document.scrollTop || 0;\r\n\t};\r\n\r\n\t/**\r\n\t * add a className to the given elements style\r\n\t * @param {Element} elem\r\n\t * @param {String} className\r\n\t */\r\n\texports.addClassName = function addClassName(elem, className) {\r\n\t var classes = elem.className.split(' ');\r\n\t if (classes.indexOf(className) == -1) {\r\n\t classes.push(className); // add the class to the array\r\n\t elem.className = classes.join(' ');\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * add a className to the given elements style\r\n\t * @param {Element} elem\r\n\t * @param {String} className\r\n\t */\r\n\texports.removeClassName = function removeClassName(elem, className) {\r\n\t var classes = elem.className.split(' ');\r\n\t var index = classes.indexOf(className);\r\n\t if (index != -1) {\r\n\t classes.splice(index, 1); // remove the class from the array\r\n\t elem.className = classes.join(' ');\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Strip the formatting from the contents of a div\r\n\t * the formatting from the div itself is not stripped, only from its childs.\r\n\t * @param {Element} divElement\r\n\t */\r\n\texports.stripFormatting = function stripFormatting(divElement) {\r\n\t var childs = divElement.childNodes;\r\n\t for (var i = 0, iMax = childs.length; i < iMax; i++) {\r\n\t var child = childs[i];\r\n\r\n\t // remove the style\r\n\t if (child.style) {\r\n\t // TODO: test if child.attributes does contain style\r\n\t child.removeAttribute('style');\r\n\t }\r\n\r\n\t // remove all attributes\r\n\t var attributes = child.attributes;\r\n\t if (attributes) {\r\n\t for (var j = attributes.length - 1; j >= 0; j--) {\r\n\t var attribute = attributes[j];\r\n\t if (attribute.specified === true) {\r\n\t child.removeAttribute(attribute.name);\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t // recursively strip childs\r\n\t exports.stripFormatting(child);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Set focus to the end of an editable div\r\n\t * code from Nico Burns\r\n\t * http://stackoverflow.com/users/140293/nico-burns\r\n\t * http://stackoverflow.com/questions/1125292/how-to-move-cursor-to-end-of-contenteditable-entity\r\n\t * @param {Element} contentEditableElement A content editable div\r\n\t */\r\n\texports.setEndOfContentEditable = function setEndOfContentEditable(contentEditableElement) {\r\n\t var range, selection;\r\n\t if(document.createRange) {\r\n\t range = document.createRange();//Create a range (a range is a like the selection but invisible)\r\n\t range.selectNodeContents(contentEditableElement);//Select the entire contents of the element with the range\r\n\t range.collapse(false);//collapse the range to the end point. false means collapse to end rather than the start\r\n\t selection = window.getSelection();//get the selection object (allows you to change selection)\r\n\t selection.removeAllRanges();//remove any selections already made\r\n\t selection.addRange(range);//make the range you have just created the visible selection\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Select all text of a content editable div.\r\n\t * http://stackoverflow.com/a/3806004/1262753\r\n\t * @param {Element} contentEditableElement A content editable div\r\n\t */\r\n\texports.selectContentEditable = function selectContentEditable(contentEditableElement) {\r\n\t if (!contentEditableElement || contentEditableElement.nodeName != 'DIV') {\r\n\t return;\r\n\t }\r\n\r\n\t var sel, range;\r\n\t if (window.getSelection && document.createRange) {\r\n\t range = document.createRange();\r\n\t range.selectNodeContents(contentEditableElement);\r\n\t sel = window.getSelection();\r\n\t sel.removeAllRanges();\r\n\t sel.addRange(range);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get text selection\r\n\t * http://stackoverflow.com/questions/4687808/contenteditable-selected-text-save-and-restore\r\n\t * @return {Range | TextRange | null} range\r\n\t */\r\n\texports.getSelection = function getSelection() {\r\n\t if (window.getSelection) {\r\n\t var sel = window.getSelection();\r\n\t if (sel.getRangeAt && sel.rangeCount) {\r\n\t return sel.getRangeAt(0);\r\n\t }\r\n\t }\r\n\t return null;\r\n\t};\r\n\r\n\t/**\r\n\t * Set text selection\r\n\t * http://stackoverflow.com/questions/4687808/contenteditable-selected-text-save-and-restore\r\n\t * @param {Range | TextRange | null} range\r\n\t */\r\n\texports.setSelection = function setSelection(range) {\r\n\t if (range) {\r\n\t if (window.getSelection) {\r\n\t var sel = window.getSelection();\r\n\t sel.removeAllRanges();\r\n\t sel.addRange(range);\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get selected text range\r\n\t * @return {Object} params object containing parameters:\r\n\t * {Number} startOffset\r\n\t * {Number} endOffset\r\n\t * {Element} container HTML element holding the\r\n\t * selected text element\r\n\t * Returns null if no text selection is found\r\n\t */\r\n\texports.getSelectionOffset = function getSelectionOffset() {\r\n\t var range = exports.getSelection();\r\n\r\n\t if (range && 'startOffset' in range && 'endOffset' in range &&\r\n\t range.startContainer && (range.startContainer == range.endContainer)) {\r\n\t return {\r\n\t startOffset: range.startOffset,\r\n\t endOffset: range.endOffset,\r\n\t container: range.startContainer.parentNode\r\n\t };\r\n\t }\r\n\r\n\t return null;\r\n\t};\r\n\r\n\t/**\r\n\t * Set selected text range in given element\r\n\t * @param {Object} params An object containing:\r\n\t * {Element} container\r\n\t * {Number} startOffset\r\n\t * {Number} endOffset\r\n\t */\r\n\texports.setSelectionOffset = function setSelectionOffset(params) {\r\n\t if (document.createRange && window.getSelection) {\r\n\t var selection = window.getSelection();\r\n\t if(selection) {\r\n\t var range = document.createRange();\r\n\r\n\t if (!params.container.firstChild) {\r\n\t params.container.appendChild(document.createTextNode(''));\r\n\t }\r\n\r\n\t // TODO: do not suppose that the first child of the container is a textnode,\r\n\t // but recursively find the textnodes\r\n\t range.setStart(params.container.firstChild, params.startOffset);\r\n\t range.setEnd(params.container.firstChild, params.endOffset);\r\n\r\n\t exports.setSelection(range);\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the inner text of an HTML element (for example a div element)\r\n\t * @param {Element} element\r\n\t * @param {Object} [buffer]\r\n\t * @return {String} innerText\r\n\t */\r\n\texports.getInnerText = function getInnerText(element, buffer) {\r\n\t var first = (buffer == undefined);\r\n\t if (first) {\r\n\t buffer = {\r\n\t 'text': '',\r\n\t 'flush': function () {\r\n\t var text = this.text;\r\n\t this.text = '';\r\n\t return text;\r\n\t },\r\n\t 'set': function (text) {\r\n\t this.text = text;\r\n\t }\r\n\t };\r\n\t }\r\n\r\n\t // text node\r\n\t if (element.nodeValue) {\r\n\t return buffer.flush() + element.nodeValue;\r\n\t }\r\n\r\n\t // divs or other HTML elements\r\n\t if (element.hasChildNodes()) {\r\n\t var childNodes = element.childNodes;\r\n\t var innerText = '';\r\n\r\n\t for (var i = 0, iMax = childNodes.length; i < iMax; i++) {\r\n\t var child = childNodes[i];\r\n\r\n\t if (child.nodeName == 'DIV' || child.nodeName == 'P') {\r\n\t var prevChild = childNodes[i - 1];\r\n\t var prevName = prevChild ? prevChild.nodeName : undefined;\r\n\t if (prevName && prevName != 'DIV' && prevName != 'P' && prevName != 'BR') {\r\n\t innerText += '\\n';\r\n\t buffer.flush();\r\n\t }\r\n\t innerText += exports.getInnerText(child, buffer);\r\n\t buffer.set('\\n');\r\n\t }\r\n\t else if (child.nodeName == 'BR') {\r\n\t innerText += buffer.flush();\r\n\t buffer.set('\\n');\r\n\t }\r\n\t else {\r\n\t innerText += exports.getInnerText(child, buffer);\r\n\t }\r\n\t }\r\n\r\n\t return innerText;\r\n\t }\r\n\t else {\r\n\t if (element.nodeName == 'P' && exports.getInternetExplorerVersion() != -1) {\r\n\t // On Internet Explorer, a <p> with hasChildNodes()==false is\r\n\t // rendered with a new line. Note that a <p> with\r\n\t // hasChildNodes()==true is rendered without a new line\r\n\t // Other browsers always ensure there is a <br> inside the <p>,\r\n\t // and if not, the <p> does not render a new line\r\n\t return buffer.flush();\r\n\t }\r\n\t }\r\n\r\n\t // br or unknown\r\n\t return '';\r\n\t};\r\n\r\n\t/**\r\n\t * Returns the version of Internet Explorer or a -1\r\n\t * (indicating the use of another browser).\r\n\t * Source: http://msdn.microsoft.com/en-us/library/ms537509(v=vs.85).aspx\r\n\t * @return {Number} Internet Explorer version, or -1 in case of an other browser\r\n\t */\r\n\texports.getInternetExplorerVersion = function getInternetExplorerVersion() {\r\n\t if (_ieVersion == -1) {\r\n\t var rv = -1; // Return value assumes failure.\r\n\t if (navigator.appName == 'Microsoft Internet Explorer')\r\n\t {\r\n\t var ua = navigator.userAgent;\r\n\t var re = new RegExp(\"MSIE ([0-9]{1,}[\\.0-9]{0,})\");\r\n\t if (re.exec(ua) != null) {\r\n\t rv = parseFloat( RegExp.$1 );\r\n\t }\r\n\t }\r\n\r\n\t _ieVersion = rv;\r\n\t }\r\n\r\n\t return _ieVersion;\r\n\t};\r\n\r\n\t/**\r\n\t * Test whether the current browser is Firefox\r\n\t * @returns {boolean} isFirefox\r\n\t */\r\n\texports.isFirefox = function isFirefox () {\r\n\t return (navigator.userAgent.indexOf(\"Firefox\") != -1);\r\n\t};\r\n\r\n\t/**\r\n\t * cached internet explorer version\r\n\t * @type {Number}\r\n\t * @private\r\n\t */\r\n\tvar _ieVersion = -1;\r\n\r\n\t/**\r\n\t * Add and event listener. Works for all browsers\r\n\t * @param {Element} element An html element\r\n\t * @param {string} action The action, for example \"click\",\r\n\t * without the prefix \"on\"\r\n\t * @param {function} listener The callback function to be executed\r\n\t * @param {boolean} [useCapture] false by default\r\n\t * @return {function} the created event listener\r\n\t */\r\n\texports.addEventListener = function addEventListener(element, action, listener, useCapture) {\r\n\t if (element.addEventListener) {\r\n\t if (useCapture === undefined)\r\n\t useCapture = false;\r\n\r\n\t if (action === \"mousewheel\" && exports.isFirefox()) {\r\n\t action = \"DOMMouseScroll\"; // For Firefox\r\n\t }\r\n\r\n\t element.addEventListener(action, listener, useCapture);\r\n\t return listener;\r\n\t } else if (element.attachEvent) {\r\n\t // Old IE browsers\r\n\t var f = function () {\r\n\t return listener.call(element, window.event);\r\n\t };\r\n\t element.attachEvent(\"on\" + action, f);\r\n\t return f;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Remove an event listener from an element\r\n\t * @param {Element} element An html dom element\r\n\t * @param {string} action The name of the event, for example \"mousedown\"\r\n\t * @param {function} listener The listener function\r\n\t * @param {boolean} [useCapture] false by default\r\n\t */\r\n\texports.removeEventListener = function removeEventListener(element, action, listener, useCapture) {\r\n\t if (element.removeEventListener) {\r\n\t if (useCapture === undefined)\r\n\t useCapture = false;\r\n\r\n\t if (action === \"mousewheel\" && exports.isFirefox()) {\r\n\t action = \"DOMMouseScroll\"; // For Firefox\r\n\t }\r\n\r\n\t element.removeEventListener(action, listener, useCapture);\r\n\t } else if (element.detachEvent) {\r\n\t // Old IE browsers\r\n\t element.detachEvent(\"on\" + action, listener);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Parse a JSON path like '.items[3].name' into an array\r\n\t * @param {string} jsonPath\r\n\t * @return {Array}\r\n\t */\r\n\texports.parsePath = function parsePath(jsonPath) {\r\n\t var prop, remainder;\r\n\r\n\t if (jsonPath.length === 0) {\r\n\t return [];\r\n\t }\r\n\r\n\t // find a match like '.prop'\r\n\t var match = jsonPath.match(/^\\.(\\w+)/);\r\n\t if (match) {\r\n\t prop = match[1];\r\n\t remainder = jsonPath.substr(prop.length + 1);\r\n\t }\r\n\t else if (jsonPath[0] === '[') {\r\n\t // find a match like\r\n\t var end = jsonPath.indexOf(']');\r\n\t if (end === -1) {\r\n\t throw new SyntaxError('Character ] expected in path');\r\n\t }\r\n\t if (end === 1) {\r\n\t throw new SyntaxError('Index expected after [');\r\n\t }\r\n\r\n\t var value = jsonPath.substring(1, end);\r\n\t if (value[0] === '\\'') {\r\n\t // ajv produces string prop names with single quotes, so we need\r\n\t // to reformat them into valid double-quoted JSON strings\r\n\t value = '\\\"' + value.substring(1, value.length - 1) + '\\\"';\r\n\t }\r\n\r\n\t prop = value === '*' ? value : JSON.parse(value); // parse string and number\r\n\t remainder = jsonPath.substr(end + 1);\r\n\t }\r\n\t else {\r\n\t throw new SyntaxError('Failed to parse path');\r\n\t }\r\n\r\n\t return [prop].concat(parsePath(remainder))\r\n\t};\r\n\r\n\t/**\r\n\t * Improve the error message of a JSON schema error\r\n\t * @param {Object} error\r\n\t * @return {Object} The error\r\n\t */\r\n\texports.improveSchemaError = function (error) {\r\n\t if (error.keyword === 'enum' && Array.isArray(error.schema)) {\r\n\t var enums = error.schema;\r\n\t if (enums) {\r\n\t enums = enums.map(function (value) {\r\n\t return JSON.stringify(value);\r\n\t });\r\n\r\n\t if (enums.length > 5) {\r\n\t var more = ['(' + (enums.length - 5) + ' more...)'];\r\n\t enums = enums.slice(0, 5);\r\n\t enums.push(more);\r\n\t }\r\n\t error.message = 'should be equal to one of: ' + enums.join(', ');\r\n\t }\r\n\t }\r\n\r\n\t if (error.keyword === 'additionalProperties') {\r\n\t error.message = 'should NOT have additional property: ' + error.params.additionalProperty;\r\n\t }\r\n\r\n\t return error;\r\n\t};\r\n\r\n\t/**\r\n\t * Test whether the child rect fits completely inside the parent rect.\r\n\t * @param {ClientRect} parent\r\n\t * @param {ClientRect} child\r\n\t * @param {number} margin\r\n\t */\r\n\texports.insideRect = function (parent, child, margin) {\r\n\t var _margin = margin !== undefined ? margin : 0;\r\n\t return child.left - _margin >= parent.left\r\n\t && child.right + _margin <= parent.right\r\n\t && child.top - _margin >= parent.top\r\n\t && child.bottom + _margin <= parent.bottom;\r\n\t};\r\n\r\n\t/**\r\n\t * Returns a function, that, as long as it continues to be invoked, will not\r\n\t * be triggered. The function will be called after it stops being called for\r\n\t * N milliseconds.\r\n\t *\r\n\t * Source: https://davidwalsh.name/javascript-debounce-function\r\n\t *\r\n\t * @param {function} func\r\n\t * @param {number} wait Number in milliseconds\r\n\t * @param {boolean} [immediate=false] If `immediate` is passed, trigger the\r\n\t * function on the leading edge, instead\r\n\t * of the trailing.\r\n\t * @return {function} Return the debounced function\r\n\t */\r\n\texports.debounce = function debounce(func, wait, immediate) {\r\n\t var timeout;\r\n\t return function() {\r\n\t var context = this, args = arguments;\r\n\t var later = function() {\r\n\t timeout = null;\r\n\t if (!immediate) func.apply(context, args);\r\n\t };\r\n\t var callNow = immediate && !timeout;\r\n\t clearTimeout(timeout);\r\n\t timeout = setTimeout(later, wait);\r\n\t if (callNow) func.apply(context, args);\r\n\t };\r\n\t};\r\n\r\n\t/**\r\n\t * Determines the difference between two texts.\r\n\t * Can only detect one removed or inserted block of characters.\r\n\t * @param {string} oldText\r\n\t * @param {string} newText\r\n\t * @return {{start: number, end: number}} Returns the start and end\r\n\t * of the changed part in newText.\r\n\t */\r\n\texports.textDiff = function textDiff(oldText, newText) {\r\n\t var len = newText.length;\r\n\t var start = 0;\r\n\t var oldEnd = oldText.length;\r\n\t var newEnd = newText.length;\r\n\r\n\t while (newText.charAt(start) === oldText.charAt(start)\r\n\t && start < len) {\r\n\t start++;\r\n\t }\r\n\r\n\t while (newText.charAt(newEnd - 1) === oldText.charAt(oldEnd - 1)\r\n\t && newEnd > start && oldEnd > 0) {\r\n\t newEnd--;\r\n\t oldEnd--;\r\n\t }\r\n\r\n\t return {start: start, end: newEnd};\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 55 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t/* Jison generated parser */\r\n\tvar jsonlint = (function(){\r\n\tvar parser = {trace: function trace() { },\r\n\tyy: {},\r\n\tsymbols_: {\"error\":2,\"JSONString\":3,\"STRING\":4,\"JSONNumber\":5,\"NUMBER\":6,\"JSONNullLiteral\":7,\"NULL\":8,\"JSONBooleanLiteral\":9,\"TRUE\":10,\"FALSE\":11,\"JSONText\":12,\"JSONValue\":13,\"EOF\":14,\"JSONObject\":15,\"JSONArray\":16,\"{\":17,\"}\":18,\"JSONMemberList\":19,\"JSONMember\":20,\":\":21,\",\":22,\"[\":23,\"]\":24,\"JSONElementList\":25,\"$accept\":0,\"$end\":1},\r\n\tterminals_: {2:\"error\",4:\"STRING\",6:\"NUMBER\",8:\"NULL\",10:\"TRUE\",11:\"FALSE\",14:\"EOF\",17:\"{\",18:\"}\",21:\":\",22:\",\",23:\"[\",24:\"]\"},\r\n\tproductions_: [0,[3,1],[5,1],[7,1],[9,1],[9,1],[12,2],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[15,2],[15,3],[20,3],[19,1],[19,3],[16,2],[16,3],[25,1],[25,3]],\r\n\tperformAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {\r\n\r\n\tvar $0 = $$.length - 1;\r\n\tswitch (yystate) {\r\n\tcase 1: // replace escaped characters with actual character\r\n\t this.$ = yytext.replace(/\\\\(\\\\|\")/g, \"$\"+\"1\")\r\n\t .replace(/\\\\n/g,'\\n')\r\n\t .replace(/\\\\r/g,'\\r')\r\n\t .replace(/\\\\t/g,'\\t')\r\n\t .replace(/\\\\v/g,'\\v')\r\n\t .replace(/\\\\f/g,'\\f')\r\n\t .replace(/\\\\b/g,'\\b');\r\n\t \r\n\tbreak;\r\n\tcase 2:this.$ = Number(yytext);\r\n\tbreak;\r\n\tcase 3:this.$ = null;\r\n\tbreak;\r\n\tcase 4:this.$ = true;\r\n\tbreak;\r\n\tcase 5:this.$ = false;\r\n\tbreak;\r\n\tcase 6:return this.$ = $$[$0-1];\r\n\tbreak;\r\n\tcase 13:this.$ = {};\r\n\tbreak;\r\n\tcase 14:this.$ = $$[$0-1];\r\n\tbreak;\r\n\tcase 15:this.$ = [$$[$0-2], $$[$0]];\r\n\tbreak;\r\n\tcase 16:this.$ = {}; this.$[$$[$0][0]] = $$[$0][1];\r\n\tbreak;\r\n\tcase 17:this.$ = $$[$0-2]; $$[$0-2][$$[$0][0]] = $$[$0][1];\r\n\tbreak;\r\n\tcase 18:this.$ = [];\r\n\tbreak;\r\n\tcase 19:this.$ = $$[$0-1];\r\n\tbreak;\r\n\tcase 20:this.$ = [$$[$0]];\r\n\tbreak;\r\n\tcase 21:this.$ = $$[$0-2]; $$[$0-2].push($$[$0]);\r\n\tbreak;\r\n\t}\r\n\t},\r\n\ttable: [{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],12:1,13:2,15:7,16:8,17:[1,14],23:[1,15]},{1:[3]},{14:[1,16]},{14:[2,7],18:[2,7],22:[2,7],24:[2,7]},{14:[2,8],18:[2,8],22:[2,8],24:[2,8]},{14:[2,9],18:[2,9],22:[2,9],24:[2,9]},{14:[2,10],18:[2,10],22:[2,10],24:[2,10]},{14:[2,11],18:[2,11],22:[2,11],24:[2,11]},{14:[2,12],18:[2,12],22:[2,12],24:[2,12]},{14:[2,3],18:[2,3],22:[2,3],24:[2,3]},{14:[2,4],18:[2,4],22:[2,4],24:[2,4]},{14:[2,5],18:[2,5],22:[2,5],24:[2,5]},{14:[2,1],18:[2,1],21:[2,1],22:[2,1],24:[2,1]},{14:[2,2],18:[2,2],22:[2,2],24:[2,2]},{3:20,4:[1,12],18:[1,17],19:18,20:19},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:23,15:7,16:8,17:[1,14],23:[1,15],24:[1,21],25:22},{1:[2,6]},{14:[2,13],18:[2,13],22:[2,13],24:[2,13]},{18:[1,24],22:[1,25]},{18:[2,16],22:[2,16]},{21:[1,26]},{14:[2,18],18:[2,18],22:[2,18],24:[2,18]},{22:[1,28],24:[1,27]},{22:[2,20],24:[2,20]},{14:[2,14],18:[2,14],22:[2,14],24:[2,14]},{3:20,4:[1,12],20:29},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:30,15:7,16:8,17:[1,14],23:[1,15]},{14:[2,19],18:[2,19],22:[2,19],24:[2,19]},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:31,15:7,16:8,17:[1,14],23:[1,15]},{18:[2,17],22:[2,17]},{18:[2,15],22:[2,15]},{22:[2,21],24:[2,21]}],\r\n\tdefaultActions: {16:[2,6]},\r\n\tparseError: function parseError(str, hash) {\r\n\t throw new Error(str);\r\n\t},\r\n\tparse: function parse(input) {\r\n\t var self = this,\r\n\t stack = [0],\r\n\t vstack = [null], // semantic value stack\r\n\t lstack = [], // location stack\r\n\t table = this.table,\r\n\t yytext = '',\r\n\t yylineno = 0,\r\n\t yyleng = 0,\r\n\t recovering = 0,\r\n\t TERROR = 2,\r\n\t EOF = 1;\r\n\r\n\t //this.reductionCount = this.shiftCount = 0;\r\n\r\n\t this.lexer.setInput(input);\r\n\t this.lexer.yy = this.yy;\r\n\t this.yy.lexer = this.lexer;\r\n\t if (typeof this.lexer.yylloc == 'undefined')\r\n\t this.lexer.yylloc = {};\r\n\t var yyloc = this.lexer.yylloc;\r\n\t lstack.push(yyloc);\r\n\r\n\t if (typeof this.yy.parseError === 'function')\r\n\t this.parseError = this.yy.parseError;\r\n\r\n\t function popStack (n) {\r\n\t stack.length = stack.length - 2*n;\r\n\t vstack.length = vstack.length - n;\r\n\t lstack.length = lstack.length - n;\r\n\t }\r\n\r\n\t function lex() {\r\n\t var token;\r\n\t token = self.lexer.lex() || 1; // $end = 1\r\n\t // if token isn't its numeric value, convert\r\n\t if (typeof token !== 'number') {\r\n\t token = self.symbols_[token] || token;\r\n\t }\r\n\t return token;\r\n\t }\r\n\r\n\t var symbol, preErrorSymbol, state, action, a, r, yyval={},p,len,newState, expected;\r\n\t while (true) {\r\n\t // retreive state number from top of stack\r\n\t state = stack[stack.length-1];\r\n\r\n\t // use default actions if available\r\n\t if (this.defaultActions[state]) {\r\n\t action = this.defaultActions[state];\r\n\t } else {\r\n\t if (symbol == null)\r\n\t symbol = lex();\r\n\t // read action for current state and first input\r\n\t action = table[state] && table[state][symbol];\r\n\t }\r\n\r\n\t // handle parse error\r\n\t _handle_error:\r\n\t if (typeof action === 'undefined' || !action.length || !action[0]) {\r\n\r\n\t if (!recovering) {\r\n\t // Report error\r\n\t expected = [];\r\n\t for (p in table[state]) if (this.terminals_[p] && p > 2) {\r\n\t expected.push(\"'\"+this.terminals_[p]+\"'\");\r\n\t }\r\n\t var errStr = '';\r\n\t if (this.lexer.showPosition) {\r\n\t errStr = 'Parse error on line '+(yylineno+1)+\":\\n\"+this.lexer.showPosition()+\"\\nExpecting \"+expected.join(', ') + \", got '\" + this.terminals_[symbol]+ \"'\";\r\n\t } else {\r\n\t errStr = 'Parse error on line '+(yylineno+1)+\": Unexpected \" +\r\n\t (symbol == 1 /*EOF*/ ? \"end of input\" :\r\n\t (\"'\"+(this.terminals_[symbol] || symbol)+\"'\"));\r\n\t }\r\n\t this.parseError(errStr,\r\n\t {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});\r\n\t }\r\n\r\n\t // just recovered from another error\r\n\t if (recovering == 3) {\r\n\t if (symbol == EOF) {\r\n\t throw new Error(errStr || 'Parsing halted.');\r\n\t }\r\n\r\n\t // discard current lookahead and grab another\r\n\t yyleng = this.lexer.yyleng;\r\n\t yytext = this.lexer.yytext;\r\n\t yylineno = this.lexer.yylineno;\r\n\t yyloc = this.lexer.yylloc;\r\n\t symbol = lex();\r\n\t }\r\n\r\n\t // try to recover from error\r\n\t while (1) {\r\n\t // check for error recovery rule in this state\r\n\t if ((TERROR.toString()) in table[state]) {\r\n\t break;\r\n\t }\r\n\t if (state == 0) {\r\n\t throw new Error(errStr || 'Parsing halted.');\r\n\t }\r\n\t popStack(1);\r\n\t state = stack[stack.length-1];\r\n\t }\r\n\r\n\t preErrorSymbol = symbol; // save the lookahead token\r\n\t symbol = TERROR; // insert generic error symbol as new lookahead\r\n\t state = stack[stack.length-1];\r\n\t action = table[state] && table[state][TERROR];\r\n\t recovering = 3; // allow 3 real symbols to be shifted before reporting a new error\r\n\t }\r\n\r\n\t // this shouldn't happen, unless resolve defaults are off\r\n\t if (action[0] instanceof Array && action.length > 1) {\r\n\t throw new Error('Parse Error: multiple actions possible at state: '+state+', token: '+symbol);\r\n\t }\r\n\r\n\t switch (action[0]) {\r\n\r\n\t case 1: // shift\r\n\t //this.shiftCount++;\r\n\r\n\t stack.push(symbol);\r\n\t vstack.push(this.lexer.yytext);\r\n\t lstack.push(this.lexer.yylloc);\r\n\t stack.push(action[1]); // push state\r\n\t symbol = null;\r\n\t if (!preErrorSymbol) { // normal execution/no error\r\n\t yyleng = this.lexer.yyleng;\r\n\t yytext = this.lexer.yytext;\r\n\t yylineno = this.lexer.yylineno;\r\n\t yyloc = this.lexer.yylloc;\r\n\t if (recovering > 0)\r\n\t recovering--;\r\n\t } else { // error just occurred, resume old lookahead f/ before error\r\n\t symbol = preErrorSymbol;\r\n\t preErrorSymbol = null;\r\n\t }\r\n\t break;\r\n\r\n\t case 2: // reduce\r\n\t //this.reductionCount++;\r\n\r\n\t len = this.productions_[action[1]][1];\r\n\r\n\t // perform semantic action\r\n\t yyval.$ = vstack[vstack.length-len]; // default to $$ = $1\r\n\t // default location, uses first token for firsts, last for lasts\r\n\t yyval._$ = {\r\n\t first_line: lstack[lstack.length-(len||1)].first_line,\r\n\t last_line: lstack[lstack.length-1].last_line,\r\n\t first_column: lstack[lstack.length-(len||1)].first_column,\r\n\t last_column: lstack[lstack.length-1].last_column\r\n\t };\r\n\t r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);\r\n\r\n\t if (typeof r !== 'undefined') {\r\n\t return r;\r\n\t }\r\n\r\n\t // pop off stack\r\n\t if (len) {\r\n\t stack = stack.slice(0,-1*len*2);\r\n\t vstack = vstack.slice(0, -1*len);\r\n\t lstack = lstack.slice(0, -1*len);\r\n\t }\r\n\r\n\t stack.push(this.productions_[action[1]][0]); // push nonterminal (reduce)\r\n\t vstack.push(yyval.$);\r\n\t lstack.push(yyval._$);\r\n\t // goto new state = table[STATE][NONTERMINAL]\r\n\t newState = table[stack[stack.length-2]][stack[stack.length-1]];\r\n\t stack.push(newState);\r\n\t break;\r\n\r\n\t case 3: // accept\r\n\t return true;\r\n\t }\r\n\r\n\t }\r\n\r\n\t return true;\r\n\t}};\r\n\t/* Jison generated lexer */\r\n\tvar lexer = (function(){\r\n\tvar lexer = ({EOF:1,\r\n\tparseError:function parseError(str, hash) {\r\n\t if (this.yy.parseError) {\r\n\t this.yy.parseError(str, hash);\r\n\t } else {\r\n\t throw new Error(str);\r\n\t }\r\n\t },\r\n\tsetInput:function (input) {\r\n\t this._input = input;\r\n\t this._more = this._less = this.done = false;\r\n\t this.yylineno = this.yyleng = 0;\r\n\t this.yytext = this.matched = this.match = '';\r\n\t this.conditionStack = ['INITIAL'];\r\n\t this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0};\r\n\t return this;\r\n\t },\r\n\tinput:function () {\r\n\t var ch = this._input[0];\r\n\t this.yytext+=ch;\r\n\t this.yyleng++;\r\n\t this.match+=ch;\r\n\t this.matched+=ch;\r\n\t var lines = ch.match(/\\n/);\r\n\t if (lines) this.yylineno++;\r\n\t this._input = this._input.slice(1);\r\n\t return ch;\r\n\t },\r\n\tunput:function (ch) {\r\n\t this._input = ch + this._input;\r\n\t return this;\r\n\t },\r\n\tmore:function () {\r\n\t this._more = true;\r\n\t return this;\r\n\t },\r\n\tless:function (n) {\r\n\t this._input = this.match.slice(n) + this._input;\r\n\t },\r\n\tpastInput:function () {\r\n\t var past = this.matched.substr(0, this.matched.length - this.match.length);\r\n\t return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\r\n\t },\r\n\tupcomingInput:function () {\r\n\t var next = this.match;\r\n\t if (next.length < 20) {\r\n\t next += this._input.substr(0, 20-next.length);\r\n\t }\r\n\t return (next.substr(0,20)+(next.length > 20 ? '...':'')).replace(/\\n/g, \"\");\r\n\t },\r\n\tshowPosition:function () {\r\n\t var pre = this.pastInput();\r\n\t var c = new Array(pre.length + 1).join(\"-\");\r\n\t return pre + this.upcomingInput() + \"\\n\" + c+\"^\";\r\n\t },\r\n\tnext:function () {\r\n\t if (this.done) {\r\n\t return this.EOF;\r\n\t }\r\n\t if (!this._input) this.done = true;\r\n\r\n\t var token,\r\n\t match,\r\n\t tempMatch,\r\n\t index,\r\n\t col,\r\n\t lines;\r\n\t if (!this._more) {\r\n\t this.yytext = '';\r\n\t this.match = '';\r\n\t }\r\n\t var rules = this._currentRules();\r\n\t for (var i=0;i < rules.length; i++) {\r\n\t tempMatch = this._input.match(this.rules[rules[i]]);\r\n\t if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\r\n\t match = tempMatch;\r\n\t index = i;\r\n\t if (!this.options.flex) break;\r\n\t }\r\n\t }\r\n\t if (match) {\r\n\t lines = match[0].match(/\\n.*/g);\r\n\t if (lines) this.yylineno += lines.length;\r\n\t this.yylloc = {first_line: this.yylloc.last_line,\r\n\t last_line: this.yylineno+1,\r\n\t first_column: this.yylloc.last_column,\r\n\t last_column: lines ? lines[lines.length-1].length-1 : this.yylloc.last_column + match[0].length}\r\n\t this.yytext += match[0];\r\n\t this.match += match[0];\r\n\t this.yyleng = this.yytext.length;\r\n\t this._more = false;\r\n\t this._input = this._input.slice(match[0].length);\r\n\t this.matched += match[0];\r\n\t token = this.performAction.call(this, this.yy, this, rules[index],this.conditionStack[this.conditionStack.length-1]);\r\n\t if (this.done && this._input) this.done = false;\r\n\t if (token) return token;\r\n\t else return;\r\n\t }\r\n\t if (this._input === \"\") {\r\n\t return this.EOF;\r\n\t } else {\r\n\t this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\\n'+this.showPosition(), \r\n\t {text: \"\", token: null, line: this.yylineno});\r\n\t }\r\n\t },\r\n\tlex:function lex() {\r\n\t var r = this.next();\r\n\t if (typeof r !== 'undefined') {\r\n\t return r;\r\n\t } else {\r\n\t return this.lex();\r\n\t }\r\n\t },\r\n\tbegin:function begin(condition) {\r\n\t this.conditionStack.push(condition);\r\n\t },\r\n\tpopState:function popState() {\r\n\t return this.conditionStack.pop();\r\n\t },\r\n\t_currentRules:function _currentRules() {\r\n\t return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules;\r\n\t },\r\n\ttopState:function () {\r\n\t return this.conditionStack[this.conditionStack.length-2];\r\n\t },\r\n\tpushState:function begin(condition) {\r\n\t this.begin(condition);\r\n\t }});\r\n\tlexer.options = {};\r\n\tlexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\r\n\r\n\tvar YYSTATE=YY_START\r\n\tswitch($avoiding_name_collisions) {\r\n\tcase 0:/* skip whitespace */\r\n\tbreak;\r\n\tcase 1:return 6\r\n\tbreak;\r\n\tcase 2:yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2); return 4\r\n\tbreak;\r\n\tcase 3:return 17\r\n\tbreak;\r\n\tcase 4:return 18\r\n\tbreak;\r\n\tcase 5:return 23\r\n\tbreak;\r\n\tcase 6:return 24\r\n\tbreak;\r\n\tcase 7:return 22\r\n\tbreak;\r\n\tcase 8:return 21\r\n\tbreak;\r\n\tcase 9:return 10\r\n\tbreak;\r\n\tcase 10:return 11\r\n\tbreak;\r\n\tcase 11:return 8\r\n\tbreak;\r\n\tcase 12:return 14\r\n\tbreak;\r\n\tcase 13:return 'INVALID'\r\n\tbreak;\r\n\t}\r\n\t};\r\n\tlexer.rules = [/^(?:\\s+)/,/^(?:(-?([0-9]|[1-9][0-9]+))(\\.[0-9]+)?([eE][-+]?[0-9]+)?\\b)/,/^(?:\"(?:\\\\[\\\\\"bfnrt/]|\\\\u[a-fA-F0-9]{4}|[^\\\\\\0-\\x09\\x0a-\\x1f\"])*\")/,/^(?:\\{)/,/^(?:\\})/,/^(?:\\[)/,/^(?:\\])/,/^(?:,)/,/^(?::)/,/^(?:true\\b)/,/^(?:false\\b)/,/^(?:null\\b)/,/^(?:$)/,/^(?:.)/];\r\n\tlexer.conditions = {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13],\"inclusive\":true}};\r\n\r\n\r\n\t;\r\n\treturn lexer;})()\r\n\tparser.lexer = lexer;\r\n\treturn parser;\r\n\t})();\r\n\tif (true) {\r\n\t exports.parser = jsonlint;\r\n\t exports.parse = jsonlint.parse.bind(jsonlint);\r\n\t}\r\n\r\n/***/ },\r\n/* 56 */\r\n/***/ function(module, exports) {\r\n\r\n\t'use strict';\r\n\r\n\t/**\r\n\t * @constructor SearchBox\r\n\t * Create a search box in given HTML container\r\n\t * @param {JSONEditor} editor The JSON Editor to attach to\r\n\t * @param {Element} container HTML container element of where to\r\n\t * create the search box\r\n\t */\r\n\tfunction SearchBox (editor, container) {\r\n\t var searchBox = this;\r\n\r\n\t this.editor = editor;\r\n\t this.timeout = undefined;\r\n\t this.delay = 200; // ms\r\n\t this.lastText = undefined;\r\n\r\n\t this.dom = {};\r\n\t this.dom.container = container;\r\n\r\n\t var table = document.createElement('table');\r\n\t this.dom.table = table;\r\n\t table.className = 'jsoneditor-search';\r\n\t container.appendChild(table);\r\n\t var tbody = document.createElement('tbody');\r\n\t this.dom.tbody = tbody;\r\n\t table.appendChild(tbody);\r\n\t var tr = document.createElement('tr');\r\n\t tbody.appendChild(tr);\r\n\r\n\t var td = document.createElement('td');\r\n\t tr.appendChild(td);\r\n\t var results = document.createElement('div');\r\n\t this.dom.results = results;\r\n\t results.className = 'jsoneditor-results';\r\n\t td.appendChild(results);\r\n\r\n\t td = document.createElement('td');\r\n\t tr.appendChild(td);\r\n\t var divInput = document.createElement('div');\r\n\t this.dom.input = divInput;\r\n\t divInput.className = 'jsoneditor-frame';\r\n\t divInput.title = 'Search fields and values';\r\n\t td.appendChild(divInput);\r\n\r\n\t // table to contain the text input and search button\r\n\t var tableInput = document.createElement('table');\r\n\t divInput.appendChild(tableInput);\r\n\t var tbodySearch = document.createElement('tbody');\r\n\t tableInput.appendChild(tbodySearch);\r\n\t tr = document.createElement('tr');\r\n\t tbodySearch.appendChild(tr);\r\n\r\n\t var refreshSearch = document.createElement('button');\r\n\t refreshSearch.type = 'button';\r\n\t refreshSearch.className = 'jsoneditor-refresh';\r\n\t td = document.createElement('td');\r\n\t td.appendChild(refreshSearch);\r\n\t tr.appendChild(td);\r\n\r\n\t var search = document.createElement('input');\r\n\t // search.type = 'button';\r\n\t this.dom.search = search;\r\n\t search.oninput = function (event) {\r\n\t searchBox._onDelayedSearch(event);\r\n\t };\r\n\t search.onchange = function (event) { // For IE 9\r\n\t searchBox._onSearch();\r\n\t };\r\n\t search.onkeydown = function (event) {\r\n\t searchBox._onKeyDown(event);\r\n\t };\r\n\t search.onkeyup = function (event) {\r\n\t searchBox._onKeyUp(event);\r\n\t };\r\n\t refreshSearch.onclick = function (event) {\r\n\t search.select();\r\n\t };\r\n\r\n\t // TODO: ESC in FF restores the last input, is a FF bug, https://bugzilla.mozilla.org/show_bug.cgi?id=598819\r\n\t td = document.createElement('td');\r\n\t td.appendChild(search);\r\n\t tr.appendChild(td);\r\n\r\n\t var searchNext = document.createElement('button');\r\n\t searchNext.type = 'button';\r\n\t searchNext.title = 'Next result (Enter)';\r\n\t searchNext.className = 'jsoneditor-next';\r\n\t searchNext.onclick = function () {\r\n\t searchBox.next();\r\n\t };\r\n\t td = document.createElement('td');\r\n\t td.appendChild(searchNext);\r\n\t tr.appendChild(td);\r\n\r\n\t var searchPrevious = document.createElement('button');\r\n\t searchPrevious.type = 'button';\r\n\t searchPrevious.title = 'Previous result (Shift+Enter)';\r\n\t searchPrevious.className = 'jsoneditor-previous';\r\n\t searchPrevious.onclick = function () {\r\n\t searchBox.previous();\r\n\t };\r\n\t td = document.createElement('td');\r\n\t td.appendChild(searchPrevious);\r\n\t tr.appendChild(td);\r\n\t}\r\n\r\n\t/**\r\n\t * Go to the next search result\r\n\t * @param {boolean} [focus] If true, focus will be set to the next result\r\n\t * focus is false by default.\r\n\t */\r\n\tSearchBox.prototype.next = function(focus) {\r\n\t if (this.results != undefined) {\r\n\t var index = (this.resultIndex != undefined) ? this.resultIndex + 1 : 0;\r\n\t if (index > this.results.length - 1) {\r\n\t index = 0;\r\n\t }\r\n\t this._setActiveResult(index, focus);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Go to the prevous search result\r\n\t * @param {boolean} [focus] If true, focus will be set to the next result\r\n\t * focus is false by default.\r\n\t */\r\n\tSearchBox.prototype.previous = function(focus) {\r\n\t if (this.results != undefined) {\r\n\t var max = this.results.length - 1;\r\n\t var index = (this.resultIndex != undefined) ? this.resultIndex - 1 : max;\r\n\t if (index < 0) {\r\n\t index = max;\r\n\t }\r\n\t this._setActiveResult(index, focus);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Set new value for the current active result\r\n\t * @param {Number} index\r\n\t * @param {boolean} [focus] If true, focus will be set to the next result.\r\n\t * focus is false by default.\r\n\t * @private\r\n\t */\r\n\tSearchBox.prototype._setActiveResult = function(index, focus) {\r\n\t // de-activate current active result\r\n\t if (this.activeResult) {\r\n\t var prevNode = this.activeResult.node;\r\n\t var prevElem = this.activeResult.elem;\r\n\t if (prevElem == 'field') {\r\n\t delete prevNode.searchFieldActive;\r\n\t }\r\n\t else {\r\n\t delete prevNode.searchValueActive;\r\n\t }\r\n\t prevNode.updateDom();\r\n\t }\r\n\r\n\t if (!this.results || !this.results[index]) {\r\n\t // out of range, set to undefined\r\n\t this.resultIndex = undefined;\r\n\t this.activeResult = undefined;\r\n\t return;\r\n\t }\r\n\r\n\t this.resultIndex = index;\r\n\r\n\t // set new node active\r\n\t var node = this.results[this.resultIndex].node;\r\n\t var elem = this.results[this.resultIndex].elem;\r\n\t if (elem == 'field') {\r\n\t node.searchFieldActive = true;\r\n\t }\r\n\t else {\r\n\t node.searchValueActive = true;\r\n\t }\r\n\t this.activeResult = this.results[this.resultIndex];\r\n\t node.updateDom();\r\n\r\n\t // TODO: not so nice that the focus is only set after the animation is finished\r\n\t node.scrollTo(function () {\r\n\t if (focus) {\r\n\t node.focus(elem);\r\n\t }\r\n\t });\r\n\t};\r\n\r\n\t/**\r\n\t * Cancel any running onDelayedSearch.\r\n\t * @private\r\n\t */\r\n\tSearchBox.prototype._clearDelay = function() {\r\n\t if (this.timeout != undefined) {\r\n\t clearTimeout(this.timeout);\r\n\t delete this.timeout;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Start a timer to execute a search after a short delay.\r\n\t * Used for reducing the number of searches while typing.\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */\r\n\tSearchBox.prototype._onDelayedSearch = function (event) {\r\n\t // execute the search after a short delay (reduces the number of\r\n\t // search actions while typing in the search text box)\r\n\t this._clearDelay();\r\n\t var searchBox = this;\r\n\t this.timeout = setTimeout(function (event) {\r\n\t searchBox._onSearch();\r\n\t },\r\n\t this.delay);\r\n\t};\r\n\r\n\t/**\r\n\t * Handle onSearch event\r\n\t * @param {boolean} [forceSearch] If true, search will be executed again even\r\n\t * when the search text is not changed.\r\n\t * Default is false.\r\n\t * @private\r\n\t */\r\n\tSearchBox.prototype._onSearch = function (forceSearch) {\r\n\t this._clearDelay();\r\n\r\n\t var value = this.dom.search.value;\r\n\t var text = (value.length > 0) ? value : undefined;\r\n\t if (text != this.lastText || forceSearch) {\r\n\t // only search again when changed\r\n\t this.lastText = text;\r\n\t this.results = this.editor.search(text);\r\n\t this._setActiveResult(undefined);\r\n\r\n\t // display search results\r\n\t if (text != undefined) {\r\n\t var resultCount = this.results.length;\r\n\t switch (resultCount) {\r\n\t case 0: this.dom.results.innerHTML = 'no&nbsp;results'; break;\r\n\t case 1: this.dom.results.innerHTML = '1&nbsp;result'; break;\r\n\t default: this.dom.results.innerHTML = resultCount + '&nbsp;results'; break;\r\n\t }\r\n\t }\r\n\t else {\r\n\t this.dom.results.innerHTML = '';\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Handle onKeyDown event in the input box\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */\r\n\tSearchBox.prototype._onKeyDown = function (event) {\r\n\t var keynum = event.which;\r\n\t if (keynum == 27) { // ESC\r\n\t this.dom.search.value = ''; // clear search\r\n\t this._onSearch();\r\n\t event.preventDefault();\r\n\t event.stopPropagation();\r\n\t }\r\n\t else if (keynum == 13) { // Enter\r\n\t if (event.ctrlKey) {\r\n\t // force to search again\r\n\t this._onSearch(true);\r\n\t }\r\n\t else if (event.shiftKey) {\r\n\t // move to the previous search result\r\n\t this.previous();\r\n\t }\r\n\t else {\r\n\t // move to the next search result\r\n\t this.next();\r\n\t }\r\n\t event.preventDefault();\r\n\t event.stopPropagation();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Handle onKeyUp event in the input box\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */\r\n\tSearchBox.prototype._onKeyUp = function (event) {\r\n\t var keynum = event.keyCode;\r\n\t if (keynum != 27 && keynum != 13) { // !show and !Enter\r\n\t this._onDelayedSearch(event); // For IE 9\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Clear the search results\r\n\t */\r\n\tSearchBox.prototype.clear = function () {\r\n\t this.dom.search.value = '';\r\n\t this._onSearch();\r\n\t};\r\n\r\n\t/**\r\n\t * Destroy the search box\r\n\t */\r\n\tSearchBox.prototype.destroy = function () {\r\n\t this.editor = null;\r\n\t this.dom.container.removeChild(this.dom.table);\r\n\t this.dom = null;\r\n\r\n\t this.results = null;\r\n\t this.activeResult = null;\r\n\r\n\t this._clearDelay();\r\n\r\n\t};\r\n\r\n\tmodule.exports = SearchBox;\r\n\r\n\r\n/***/ },\r\n/* 57 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar util = __webpack_require__(54);\r\n\r\n\t/**\r\n\t * A context menu\r\n\t * @param {Object[]} items Array containing the menu structure\r\n\t * TODO: describe structure\r\n\t * @param {Object} [options] Object with options. Available options:\r\n\t * {function} close Callback called when the\r\n\t * context menu is being closed.\r\n\t * @constructor\r\n\t */\r\n\tfunction ContextMenu (items, options) {\r\n\t this.dom = {};\r\n\r\n\t var me = this;\r\n\t var dom = this.dom;\r\n\t this.anchor = undefined;\r\n\t this.items = items;\r\n\t this.eventListeners = {};\r\n\t this.selection = undefined; // holds the selection before the menu was opened\r\n\t this.onClose = options ? options.close : undefined;\r\n\r\n\t // create root element\r\n\t var root = document.createElement('div');\r\n\t root.className = 'jsoneditor-contextmenu-root';\r\n\t dom.root = root;\r\n\r\n\t // create a container element\r\n\t var menu = document.createElement('div');\r\n\t menu.className = 'jsoneditor-contextmenu';\r\n\t dom.menu = menu;\r\n\t root.appendChild(menu);\r\n\r\n\t // create a list to hold the menu items\r\n\t var list = document.createElement('ul');\r\n\t list.className = 'jsoneditor-menu';\r\n\t menu.appendChild(list);\r\n\t dom.list = list;\r\n\t dom.items = []; // list with all buttons\r\n\r\n\t // create a (non-visible) button to set the focus to the menu\r\n\t var focusButton = document.createElement('button');\r\n\t focusButton.type = 'button';\r\n\t dom.focusButton = focusButton;\r\n\t var li = document.createElement('li');\r\n\t li.style.overflow = 'hidden';\r\n\t li.style.height = '0';\r\n\t li.appendChild(focusButton);\r\n\t list.appendChild(li);\r\n\r\n\t function createMenuItems (list, domItems, items) {\r\n\t items.forEach(function (item) {\r\n\t if (item.type == 'separator') {\r\n\t // create a separator\r\n\t var separator = document.createElement('div');\r\n\t separator.className = 'jsoneditor-separator';\r\n\t li = document.createElement('li');\r\n\t li.appendChild(separator);\r\n\t list.appendChild(li);\r\n\t }\r\n\t else {\r\n\t var domItem = {};\r\n\r\n\t // create a menu item\r\n\t var li = document.createElement('li');\r\n\t list.appendChild(li);\r\n\r\n\t // create a button in the menu item\r\n\t var button = document.createElement('button');\r\n\t button.type = 'button';\r\n\t button.className = item.className;\r\n\t domItem.button = button;\r\n\t if (item.title) {\r\n\t button.title = item.title;\r\n\t }\r\n\t if (item.click) {\r\n\t button.onclick = function (event) {\r\n\t event.preventDefault();\r\n\t me.hide();\r\n\t item.click();\r\n\t };\r\n\t }\r\n\t li.appendChild(button);\r\n\r\n\t // create the contents of the button\r\n\t if (item.submenu) {\r\n\t // add the icon to the button\r\n\t var divIcon = document.createElement('div');\r\n\t divIcon.className = 'jsoneditor-icon';\r\n\t button.appendChild(divIcon);\r\n\t button.appendChild(document.createTextNode(item.text));\r\n\r\n\t var buttonSubmenu;\r\n\t if (item.click) {\r\n\t // submenu and a button with a click handler\r\n\t button.className += ' jsoneditor-default';\r\n\r\n\t var buttonExpand = document.createElement('button');\r\n\t buttonExpand.type = 'button';\r\n\t domItem.buttonExpand = buttonExpand;\r\n\t buttonExpand.className = 'jsoneditor-expand';\r\n\t buttonExpand.innerHTML = '<div class=\"jsoneditor-expand\"></div>';\r\n\t li.appendChild(buttonExpand);\r\n\t if (item.submenuTitle) {\r\n\t buttonExpand.title = item.submenuTitle;\r\n\t }\r\n\r\n\t buttonSubmenu = buttonExpand;\r\n\t }\r\n\t else {\r\n\t // submenu and a button without a click handler\r\n\t var divExpand = document.createElement('div');\r\n\t divExpand.className = 'jsoneditor-expand';\r\n\t button.appendChild(divExpand);\r\n\r\n\t buttonSubmenu = button;\r\n\t }\r\n\r\n\t // attach a handler to expand/collapse the submenu\r\n\t buttonSubmenu.onclick = function (event) {\r\n\t event.preventDefault();\r\n\t me._onExpandItem(domItem);\r\n\t buttonSubmenu.focus();\r\n\t };\r\n\r\n\t // create the submenu\r\n\t var domSubItems = [];\r\n\t domItem.subItems = domSubItems;\r\n\t var ul = document.createElement('ul');\r\n\t domItem.ul = ul;\r\n\t ul.className = 'jsoneditor-menu';\r\n\t ul.style.height = '0';\r\n\t li.appendChild(ul);\r\n\t createMenuItems(ul, domSubItems, item.submenu);\r\n\t }\r\n\t else {\r\n\t // no submenu, just a button with clickhandler\r\n\t button.innerHTML = '<div class=\"jsoneditor-icon\"></div>' + item.text;\r\n\t }\r\n\r\n\t domItems.push(domItem);\r\n\t }\r\n\t });\r\n\t }\r\n\t createMenuItems(list, this.dom.items, items);\r\n\r\n\t // TODO: when the editor is small, show the submenu on the right instead of inline?\r\n\r\n\t // calculate the max height of the menu with one submenu expanded\r\n\t this.maxHeight = 0; // height in pixels\r\n\t items.forEach(function (item) {\r\n\t var height = (items.length + (item.submenu ? item.submenu.length : 0)) * 24;\r\n\t me.maxHeight = Math.max(me.maxHeight, height);\r\n\t });\r\n\t}\r\n\r\n\t/**\r\n\t * Get the currently visible buttons\r\n\t * @return {Array.<HTMLElement>} buttons\r\n\t * @private\r\n\t */\r\n\tContextMenu.prototype._getVisibleButtons = function () {\r\n\t var buttons = [];\r\n\t var me = this;\r\n\t this.dom.items.forEach(function (item) {\r\n\t buttons.push(item.button);\r\n\t if (item.buttonExpand) {\r\n\t buttons.push(item.buttonExpand);\r\n\t }\r\n\t if (item.subItems && item == me.expandedItem) {\r\n\t item.subItems.forEach(function (subItem) {\r\n\t buttons.push(subItem.button);\r\n\t if (subItem.buttonExpand) {\r\n\t buttons.push(subItem.buttonExpand);\r\n\t }\r\n\t // TODO: change to fully recursive method\r\n\t });\r\n\t }\r\n\t });\r\n\r\n\t return buttons;\r\n\t};\r\n\r\n\t// currently displayed context menu, a singleton. We may only have one visible context menu\r\n\tContextMenu.visibleMenu = undefined;\r\n\r\n\t/**\r\n\t * Attach the menu to an anchor\r\n\t * @param {HTMLElement} anchor Anchor where the menu will be attached\r\n\t * as sibling.\r\n\t * @param {HTMLElement} [contentWindow] The DIV with with the (scrollable) contents\r\n\t */\r\n\tContextMenu.prototype.show = function (anchor, contentWindow) {\r\n\t this.hide();\r\n\r\n\t // determine whether to display the menu below or above the anchor\r\n\t var showBelow = true;\r\n\t if (contentWindow) {\r\n\t var anchorRect = anchor.getBoundingClientRect();\r\n\t var contentRect = contentWindow.getBoundingClientRect();\r\n\r\n\t if (anchorRect.bottom + this.maxHeight < contentRect.bottom) {\r\n\t // fits below -> show below\r\n\t }\r\n\t else if (anchorRect.top - this.maxHeight > contentRect.top) {\r\n\t // fits above -> show above\r\n\t showBelow = false;\r\n\t }\r\n\t else {\r\n\t // doesn't fit above nor below -> show below\r\n\t }\r\n\t }\r\n\r\n\t // position the menu\r\n\t if (showBelow) {\r\n\t // display the menu below the anchor\r\n\t var anchorHeight = anchor.offsetHeight;\r\n\t this.dom.menu.style.left = '0px';\r\n\t this.dom.menu.style.top = anchorHeight + 'px';\r\n\t this.dom.menu.style.bottom = '';\r\n\t }\r\n\t else {\r\n\t // display the menu above the anchor\r\n\t this.dom.menu.style.left = '0px';\r\n\t this.dom.menu.style.top = '';\r\n\t this.dom.menu.style.bottom = '0px';\r\n\t }\r\n\r\n\t // attach the menu to the parent of the anchor\r\n\t var parent = anchor.parentNode;\r\n\t parent.insertBefore(this.dom.root, parent.firstChild);\r\n\r\n\t // create and attach event listeners\r\n\t var me = this;\r\n\t var list = this.dom.list;\r\n\t this.eventListeners.mousedown = util.addEventListener(window, 'mousedown', function (event) {\r\n\t // hide menu on click outside of the menu\r\n\t var target = event.target;\r\n\t if ((target != list) && !me._isChildOf(target, list)) {\r\n\t me.hide();\r\n\t event.stopPropagation();\r\n\t event.preventDefault();\r\n\t }\r\n\t });\r\n\t this.eventListeners.keydown = util.addEventListener(window, 'keydown', function (event) {\r\n\t me._onKeyDown(event);\r\n\t });\r\n\r\n\t // move focus to the first button in the context menu\r\n\t this.selection = util.getSelection();\r\n\t this.anchor = anchor;\r\n\t setTimeout(function () {\r\n\t me.dom.focusButton.focus();\r\n\t }, 0);\r\n\r\n\t if (ContextMenu.visibleMenu) {\r\n\t ContextMenu.visibleMenu.hide();\r\n\t }\r\n\t ContextMenu.visibleMenu = this;\r\n\t};\r\n\r\n\t/**\r\n\t * Hide the context menu if visible\r\n\t */\r\n\tContextMenu.prototype.hide = function () {\r\n\t // remove the menu from the DOM\r\n\t if (this.dom.root.parentNode) {\r\n\t this.dom.root.parentNode.removeChild(this.dom.root);\r\n\t if (this.onClose) {\r\n\t this.onClose();\r\n\t }\r\n\t }\r\n\r\n\t // remove all event listeners\r\n\t // all event listeners are supposed to be attached to document.\r\n\t for (var name in this.eventListeners) {\r\n\t if (this.eventListeners.hasOwnProperty(name)) {\r\n\t var fn = this.eventListeners[name];\r\n\t if (fn) {\r\n\t util.removeEventListener(window, name, fn);\r\n\t }\r\n\t delete this.eventListeners[name];\r\n\t }\r\n\t }\r\n\r\n\t if (ContextMenu.visibleMenu == this) {\r\n\t ContextMenu.visibleMenu = undefined;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Expand a submenu\r\n\t * Any currently expanded submenu will be hided.\r\n\t * @param {Object} domItem\r\n\t * @private\r\n\t */\r\n\tContextMenu.prototype._onExpandItem = function (domItem) {\r\n\t var me = this;\r\n\t var alreadyVisible = (domItem == this.expandedItem);\r\n\r\n\t // hide the currently visible submenu\r\n\t var expandedItem = this.expandedItem;\r\n\t if (expandedItem) {\r\n\t //var ul = expandedItem.ul;\r\n\t expandedItem.ul.style.height = '0';\r\n\t expandedItem.ul.style.padding = '';\r\n\t setTimeout(function () {\r\n\t if (me.expandedItem != expandedItem) {\r\n\t expandedItem.ul.style.display = '';\r\n\t util.removeClassName(expandedItem.ul.parentNode, 'jsoneditor-selected');\r\n\t }\r\n\t }, 300); // timeout duration must match the css transition duration\r\n\t this.expandedItem = undefined;\r\n\t }\r\n\r\n\t if (!alreadyVisible) {\r\n\t var ul = domItem.ul;\r\n\t ul.style.display = 'block';\r\n\t var height = ul.clientHeight; // force a reflow in Firefox\r\n\t setTimeout(function () {\r\n\t if (me.expandedItem == domItem) {\r\n\t ul.style.height = (ul.childNodes.length * 24) + 'px';\r\n\t ul.style.padding = '5px 10px';\r\n\t }\r\n\t }, 0);\r\n\t util.addClassName(ul.parentNode, 'jsoneditor-selected');\r\n\t this.expandedItem = domItem;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Handle onkeydown event\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */\r\n\tContextMenu.prototype._onKeyDown = function (event) {\r\n\t var target = event.target;\r\n\t var keynum = event.which;\r\n\t var handled = false;\r\n\t var buttons, targetIndex, prevButton, nextButton;\r\n\r\n\t if (keynum == 27) { // ESC\r\n\t // hide the menu on ESC key\r\n\r\n\t // restore previous selection and focus\r\n\t if (this.selection) {\r\n\t util.setSelection(this.selection);\r\n\t }\r\n\t if (this.anchor) {\r\n\t this.anchor.focus();\r\n\t }\r\n\r\n\t this.hide();\r\n\r\n\t handled = true;\r\n\t }\r\n\t else if (keynum == 9) { // Tab\r\n\t if (!event.shiftKey) { // Tab\r\n\t buttons = this._getVisibleButtons();\r\n\t targetIndex = buttons.indexOf(target);\r\n\t if (targetIndex == buttons.length - 1) {\r\n\t // move to first button\r\n\t buttons[0].focus();\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else { // Shift+Tab\r\n\t buttons = this._getVisibleButtons();\r\n\t targetIndex = buttons.indexOf(target);\r\n\t if (targetIndex == 0) {\r\n\t // move to last button\r\n\t buttons[buttons.length - 1].focus();\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t }\r\n\t else if (keynum == 37) { // Arrow Left\r\n\t if (target.className == 'jsoneditor-expand') {\r\n\t buttons = this._getVisibleButtons();\r\n\t targetIndex = buttons.indexOf(target);\r\n\t prevButton = buttons[targetIndex - 1];\r\n\t if (prevButton) {\r\n\t prevButton.focus();\r\n\t }\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (keynum == 38) { // Arrow Up\r\n\t buttons = this._getVisibleButtons();\r\n\t targetIndex = buttons.indexOf(target);\r\n\t prevButton = buttons[targetIndex - 1];\r\n\t if (prevButton && prevButton.className == 'jsoneditor-expand') {\r\n\t // skip expand button\r\n\t prevButton = buttons[targetIndex - 2];\r\n\t }\r\n\t if (!prevButton) {\r\n\t // move to last button\r\n\t prevButton = buttons[buttons.length - 1];\r\n\t }\r\n\t if (prevButton) {\r\n\t prevButton.focus();\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (keynum == 39) { // Arrow Right\r\n\t buttons = this._getVisibleButtons();\r\n\t targetIndex = buttons.indexOf(target);\r\n\t nextButton = buttons[targetIndex + 1];\r\n\t if (nextButton && nextButton.className == 'jsoneditor-expand') {\r\n\t nextButton.focus();\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (keynum == 40) { // Arrow Down\r\n\t buttons = this._getVisibleButtons();\r\n\t targetIndex = buttons.indexOf(target);\r\n\t nextButton = buttons[targetIndex + 1];\r\n\t if (nextButton && nextButton.className == 'jsoneditor-expand') {\r\n\t // skip expand button\r\n\t nextButton = buttons[targetIndex + 2];\r\n\t }\r\n\t if (!nextButton) {\r\n\t // move to first button\r\n\t nextButton = buttons[0];\r\n\t }\r\n\t if (nextButton) {\r\n\t nextButton.focus();\r\n\t handled = true;\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t // TODO: arrow left and right\r\n\r\n\t if (handled) {\r\n\t event.stopPropagation();\r\n\t event.preventDefault();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Test if an element is a child of a parent element.\r\n\t * @param {Element} child\r\n\t * @param {Element} parent\r\n\t * @return {boolean} isChild\r\n\t */\r\n\tContextMenu.prototype._isChildOf = function (child, parent) {\r\n\t var e = child.parentNode;\r\n\t while (e) {\r\n\t if (e == parent) {\r\n\t return true;\r\n\t }\r\n\t e = e.parentNode;\r\n\t }\r\n\r\n\t return false;\r\n\t};\r\n\r\n\tmodule.exports = ContextMenu;\r\n\r\n\r\n/***/ },\r\n/* 58 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar naturalSort = __webpack_require__(59);\r\n\tvar ContextMenu = __webpack_require__(57);\r\n\tvar appendNodeFactory = __webpack_require__(60);\r\n\tvar util = __webpack_require__(54);\r\n\r\n\t/**\r\n\t * @constructor Node\r\n\t * Create a new Node\r\n\t * @param {./treemode} editor\r\n\t * @param {Object} [params] Can contain parameters:\r\n\t * {string} field\r\n\t * {boolean} fieldEditable\r\n\t * {*} value\r\n\t * {String} type Can have values 'auto', 'array',\r\n\t * 'object', or 'string'.\r\n\t */\r\n\tfunction Node (editor, params) {\r\n\t /** @type {./treemode} */\r\n\t this.editor = editor;\r\n\t this.dom = {};\r\n\t this.expanded = false;\r\n\r\n\t if(params && (params instanceof Object)) {\r\n\t this.setField(params.field, params.fieldEditable);\r\n\t this.setValue(params.value, params.type);\r\n\t }\r\n\t else {\r\n\t this.setField('');\r\n\t this.setValue(null);\r\n\t }\r\n\r\n\t this._debouncedOnChangeValue = util.debounce(this._onChangeValue.bind(this), Node.prototype.DEBOUNCE_INTERVAL);\r\n\t this._debouncedOnChangeField = util.debounce(this._onChangeField.bind(this), Node.prototype.DEBOUNCE_INTERVAL);\r\n\t}\r\n\r\n\t// debounce interval for keyboard input in milliseconds\r\n\tNode.prototype.DEBOUNCE_INTERVAL = 150;\r\n\r\n\t/**\r\n\t * Determine whether the field and/or value of this node are editable\r\n\t * @private\r\n\t */\r\n\tNode.prototype._updateEditability = function () {\r\n\t this.editable = {\r\n\t field: true,\r\n\t value: true\r\n\t };\r\n\r\n\t if (this.editor) {\r\n\t this.editable.field = this.editor.options.mode === 'tree';\r\n\t this.editable.value = this.editor.options.mode !== 'view';\r\n\r\n\t if ((this.editor.options.mode === 'tree' || this.editor.options.mode === 'form') &&\r\n\t (typeof this.editor.options.onEditable === 'function')) {\r\n\t var editable = this.editor.options.onEditable({\r\n\t field: this.field,\r\n\t value: this.value,\r\n\t path: this.getPath()\r\n\t });\r\n\r\n\t if (typeof editable === 'boolean') {\r\n\t this.editable.field = editable;\r\n\t this.editable.value = editable;\r\n\t }\r\n\t else {\r\n\t if (typeof editable.field === 'boolean') this.editable.field = editable.field;\r\n\t if (typeof editable.value === 'boolean') this.editable.value = editable.value;\r\n\t }\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the path of this node\r\n\t * @return {String[]} Array containing the path to this node\r\n\t */\r\n\tNode.prototype.getPath = function () {\r\n\t var node = this;\r\n\t var path = [];\r\n\t while (node) {\r\n\t var field = !node.parent\r\n\t ? undefined // do not add an (optional) field name of the root node\r\n\t : (node.parent.type != 'array')\r\n\t ? node.field\r\n\t : node.index;\r\n\r\n\t if (field !== undefined) {\r\n\t path.unshift(field);\r\n\t }\r\n\t node = node.parent;\r\n\t }\r\n\t return path;\r\n\t};\r\n\r\n\t/**\r\n\t * Find a Node from a JSON path like '.items[3].name'\r\n\t * @param {string} jsonPath\r\n\t * @return {Node | null} Returns the Node when found, returns null if not found\r\n\t */\r\n\tNode.prototype.findNode = function (jsonPath) {\r\n\t var path = util.parsePath(jsonPath);\r\n\t var node = this;\r\n\t while (node && path.length > 0) {\r\n\t var prop = path.shift();\r\n\t if (typeof prop === 'number') {\r\n\t if (node.type !== 'array') {\r\n\t throw new Error('Cannot get child node at index ' + prop + ': node is no array');\r\n\t }\r\n\t node = node.childs[prop];\r\n\t }\r\n\t else { // string\r\n\t if (node.type !== 'object') {\r\n\t throw new Error('Cannot get child node ' + prop + ': node is no object');\r\n\t }\r\n\t node = node.childs.filter(function (child) {\r\n\t return child.field === prop;\r\n\t })[0];\r\n\t }\r\n\t }\r\n\r\n\t return node;\r\n\t};\r\n\r\n\t/**\r\n\t * Find all parents of this node. The parents are ordered from root node towards\r\n\t * the original node.\r\n\t * @return {Array.<Node>}\r\n\t */\r\n\tNode.prototype.findParents = function () {\r\n\t var parents = [];\r\n\t var parent = this.parent;\r\n\t while (parent) {\r\n\t parents.unshift(parent);\r\n\t parent = parent.parent;\r\n\t }\r\n\t return parents;\r\n\t};\r\n\r\n\t/**\r\n\t *\r\n\t * @param {{dataPath: string, keyword: string, message: string, params: Object, schemaPath: string} | null} error\r\n\t * @param {Node} [child] When this is the error of a parent node, pointing\r\n\t * to an invalid child node, the child node itself\r\n\t * can be provided. If provided, clicking the error\r\n\t * icon will set focus to the invalid child node.\r\n\t */\r\n\tNode.prototype.setError = function (error, child) {\r\n\t // ensure the dom exists\r\n\t this.getDom();\r\n\r\n\t this.error = error;\r\n\t var tdError = this.dom.tdError;\r\n\t if (error) {\r\n\t if (!tdError) {\r\n\t tdError = document.createElement('td');\r\n\t this.dom.tdError = tdError;\r\n\t this.dom.tdValue.parentNode.appendChild(tdError);\r\n\t }\r\n\r\n\t var popover = document.createElement('div');\r\n\t popover.className = 'jsoneditor-popover jsoneditor-right';\r\n\t popover.appendChild(document.createTextNode(error.message));\r\n\r\n\t var button = document.createElement('button');\r\n\t button.type = 'button';\r\n\t button.className = 'jsoneditor-schema-error';\r\n\t button.appendChild(popover);\r\n\r\n\t // update the direction of the popover\r\n\t button.onmouseover = button.onfocus = function updateDirection() {\r\n\t var directions = ['right', 'above', 'below', 'left'];\r\n\t for (var i = 0; i < directions.length; i++) {\r\n\t var direction = directions[i];\r\n\t popover.className = 'jsoneditor-popover jsoneditor-' + direction;\r\n\r\n\t var contentRect = this.editor.content.getBoundingClientRect();\r\n\t var popoverRect = popover.getBoundingClientRect();\r\n\t var margin = 20; // account for a scroll bar\r\n\t var fit = util.insideRect(contentRect, popoverRect, margin);\r\n\r\n\t if (fit) {\r\n\t break;\r\n\t }\r\n\t }\r\n\t }.bind(this);\r\n\r\n\t // when clicking the error icon, expand all nodes towards the invalid\r\n\t // child node, and set focus to the child node\r\n\t if (child) {\r\n\t button.onclick = function showInvalidNode() {\r\n\t child.findParents().forEach(function (parent) {\r\n\t parent.expand(false);\r\n\t });\r\n\r\n\t child.scrollTo(function () {\r\n\t child.focus();\r\n\t });\r\n\t };\r\n\t }\r\n\r\n\t // apply the error message to the node\r\n\t while (tdError.firstChild) {\r\n\t tdError.removeChild(tdError.firstChild);\r\n\t }\r\n\t tdError.appendChild(button);\r\n\t }\r\n\t else {\r\n\t if (tdError) {\r\n\t this.dom.tdError.parentNode.removeChild(this.dom.tdError);\r\n\t delete this.dom.tdError;\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the index of this node: the index in the list of childs where this\r\n\t * node is part of\r\n\t * @return {number} Returns the index, or -1 if this is the root node\r\n\t */\r\n\tNode.prototype.getIndex = function () {\r\n\t return this.parent ? this.parent.childs.indexOf(this) : -1;\r\n\t};\r\n\r\n\t/**\r\n\t * Set parent node\r\n\t * @param {Node} parent\r\n\t */\r\n\tNode.prototype.setParent = function(parent) {\r\n\t this.parent = parent;\r\n\t};\r\n\r\n\t/**\r\n\t * Set field\r\n\t * @param {String} field\r\n\t * @param {boolean} [fieldEditable]\r\n\t */\r\n\tNode.prototype.setField = function(field, fieldEditable) {\r\n\t this.field = field;\r\n\t this.previousField = field;\r\n\t this.fieldEditable = (fieldEditable === true);\r\n\t};\r\n\r\n\t/**\r\n\t * Get field\r\n\t * @return {String}\r\n\t */\r\n\tNode.prototype.getField = function() {\r\n\t if (this.field === undefined) {\r\n\t this._getDomField();\r\n\t }\r\n\r\n\t return this.field;\r\n\t};\r\n\r\n\t/**\r\n\t * Set value. Value is a JSON structure or an element String, Boolean, etc.\r\n\t * @param {*} value\r\n\t * @param {String} [type] Specify the type of the value. Can be 'auto',\r\n\t * 'array', 'object', or 'string'\r\n\t */\r\n\tNode.prototype.setValue = function(value, type) {\r\n\t var childValue, child;\r\n\r\n\t // first clear all current childs (if any)\r\n\t var childs = this.childs;\r\n\t if (childs) {\r\n\t while (childs.length) {\r\n\t this.removeChild(childs[0]);\r\n\t }\r\n\t }\r\n\r\n\t // TODO: remove the DOM of this Node\r\n\r\n\t this.type = this._getType(value);\r\n\r\n\t // check if type corresponds with the provided type\r\n\t if (type && type != this.type) {\r\n\t if (type == 'string' && this.type == 'auto') {\r\n\t this.type = type;\r\n\t }\r\n\t else {\r\n\t throw new Error('Type mismatch: ' +\r\n\t 'cannot cast value of type \"' + this.type +\r\n\t ' to the specified type \"' + type + '\"');\r\n\t }\r\n\t }\r\n\r\n\t if (this.type == 'array') {\r\n\t // array\r\n\t this.childs = [];\r\n\t for (var i = 0, iMax = value.length; i < iMax; i++) {\r\n\t childValue = value[i];\r\n\t if (childValue !== undefined && !(childValue instanceof Function)) {\r\n\t // ignore undefined and functions\r\n\t child = new Node(this.editor, {\r\n\t value: childValue\r\n\t });\r\n\t this.appendChild(child);\r\n\t }\r\n\t }\r\n\t this.value = '';\r\n\t }\r\n\t else if (this.type == 'object') {\r\n\t // object\r\n\t this.childs = [];\r\n\t for (var childField in value) {\r\n\t if (value.hasOwnProperty(childField)) {\r\n\t childValue = value[childField];\r\n\t if (childValue !== undefined && !(childValue instanceof Function)) {\r\n\t // ignore undefined and functions\r\n\t child = new Node(this.editor, {\r\n\t field: childField,\r\n\t value: childValue\r\n\t });\r\n\t this.appendChild(child);\r\n\t }\r\n\t }\r\n\t }\r\n\t this.value = '';\r\n\r\n\t // sort object keys\r\n\t if (this.editor.options.sortObjectKeys === true) {\r\n\t this.sort('asc');\r\n\t }\r\n\t }\r\n\t else {\r\n\t // value\r\n\t this.childs = undefined;\r\n\t this.value = value;\r\n\t }\r\n\r\n\t this.previousValue = this.value;\r\n\t};\r\n\r\n\t/**\r\n\t * Get value. Value is a JSON structure\r\n\t * @return {*} value\r\n\t */\r\n\tNode.prototype.getValue = function() {\r\n\t //var childs, i, iMax;\r\n\r\n\t if (this.type == 'array') {\r\n\t var arr = [];\r\n\t this.childs.forEach (function (child) {\r\n\t arr.push(child.getValue());\r\n\t });\r\n\t return arr;\r\n\t }\r\n\t else if (this.type == 'object') {\r\n\t var obj = {};\r\n\t this.childs.forEach (function (child) {\r\n\t obj[child.getField()] = child.getValue();\r\n\t });\r\n\t return obj;\r\n\t }\r\n\t else {\r\n\t if (this.value === undefined) {\r\n\t this._getDomValue();\r\n\t }\r\n\r\n\t return this.value;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the nesting level of this node\r\n\t * @return {Number} level\r\n\t */\r\n\tNode.prototype.getLevel = function() {\r\n\t return (this.parent ? this.parent.getLevel() + 1 : 0);\r\n\t};\r\n\r\n\t/**\r\n\t * Get path of the root node till the current node\r\n\t * @return {Node[]} Returns an array with nodes\r\n\t */\r\n\tNode.prototype.getNodePath = function() {\r\n\t var path = this.parent ? this.parent.getNodePath() : [];\r\n\t path.push(this);\r\n\t return path;\r\n\t};\r\n\r\n\t/**\r\n\t * Create a clone of a node\r\n\t * The complete state of a clone is copied, including whether it is expanded or\r\n\t * not. The DOM elements are not cloned.\r\n\t * @return {Node} clone\r\n\t */\r\n\tNode.prototype.clone = function() {\r\n\t var clone = new Node(this.editor);\r\n\t clone.type = this.type;\r\n\t clone.field = this.field;\r\n\t clone.fieldInnerText = this.fieldInnerText;\r\n\t clone.fieldEditable = this.fieldEditable;\r\n\t clone.value = this.value;\r\n\t clone.valueInnerText = this.valueInnerText;\r\n\t clone.expanded = this.expanded;\r\n\r\n\t if (this.childs) {\r\n\t // an object or array\r\n\t var cloneChilds = [];\r\n\t this.childs.forEach(function (child) {\r\n\t var childClone = child.clone();\r\n\t childClone.setParent(clone);\r\n\t cloneChilds.push(childClone);\r\n\t });\r\n\t clone.childs = cloneChilds;\r\n\t }\r\n\t else {\r\n\t // a value\r\n\t clone.childs = undefined;\r\n\t }\r\n\r\n\t return clone;\r\n\t};\r\n\r\n\t/**\r\n\t * Expand this node and optionally its childs.\r\n\t * @param {boolean} [recurse] Optional recursion, true by default. When\r\n\t * true, all childs will be expanded recursively\r\n\t */\r\n\tNode.prototype.expand = function(recurse) {\r\n\t if (!this.childs) {\r\n\t return;\r\n\t }\r\n\r\n\t // set this node expanded\r\n\t this.expanded = true;\r\n\t if (this.dom.expand) {\r\n\t this.dom.expand.className = 'jsoneditor-expanded';\r\n\t }\r\n\r\n\t this.showChilds();\r\n\r\n\t if (recurse !== false) {\r\n\t this.childs.forEach(function (child) {\r\n\t child.expand(recurse);\r\n\t });\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Collapse this node and optionally its childs.\r\n\t * @param {boolean} [recurse] Optional recursion, true by default. When\r\n\t * true, all childs will be collapsed recursively\r\n\t */\r\n\tNode.prototype.collapse = function(recurse) {\r\n\t if (!this.childs) {\r\n\t return;\r\n\t }\r\n\r\n\t this.hideChilds();\r\n\r\n\t // collapse childs in case of recurse\r\n\t if (recurse !== false) {\r\n\t this.childs.forEach(function (child) {\r\n\t child.collapse(recurse);\r\n\t });\r\n\r\n\t }\r\n\r\n\t // make this node collapsed\r\n\t if (this.dom.expand) {\r\n\t this.dom.expand.className = 'jsoneditor-collapsed';\r\n\t }\r\n\t this.expanded = false;\r\n\t};\r\n\r\n\t/**\r\n\t * Recursively show all childs when they are expanded\r\n\t */\r\n\tNode.prototype.showChilds = function() {\r\n\t var childs = this.childs;\r\n\t if (!childs) {\r\n\t return;\r\n\t }\r\n\t if (!this.expanded) {\r\n\t return;\r\n\t }\r\n\r\n\t var tr = this.dom.tr;\r\n\t var table = tr ? tr.parentNode : undefined;\r\n\t if (table) {\r\n\t // show row with append button\r\n\t var append = this.getAppend();\r\n\t var nextTr = tr.nextSibling;\r\n\t if (nextTr) {\r\n\t table.insertBefore(append, nextTr);\r\n\t }\r\n\t else {\r\n\t table.appendChild(append);\r\n\t }\r\n\r\n\t // show childs\r\n\t this.childs.forEach(function (child) {\r\n\t table.insertBefore(child.getDom(), append);\r\n\t child.showChilds();\r\n\t });\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Hide the node with all its childs\r\n\t */\r\n\tNode.prototype.hide = function() {\r\n\t var tr = this.dom.tr;\r\n\t var table = tr ? tr.parentNode : undefined;\r\n\t if (table) {\r\n\t table.removeChild(tr);\r\n\t }\r\n\t this.hideChilds();\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Recursively hide all childs\r\n\t */\r\n\tNode.prototype.hideChilds = function() {\r\n\t var childs = this.childs;\r\n\t if (!childs) {\r\n\t return;\r\n\t }\r\n\t if (!this.expanded) {\r\n\t return;\r\n\t }\r\n\r\n\t // hide append row\r\n\t var append = this.getAppend();\r\n\t if (append.parentNode) {\r\n\t append.parentNode.removeChild(append);\r\n\t }\r\n\r\n\t // hide childs\r\n\t this.childs.forEach(function (child) {\r\n\t child.hide();\r\n\t });\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Add a new child to the node.\r\n\t * Only applicable when Node value is of type array or object\r\n\t * @param {Node} node\r\n\t */\r\n\tNode.prototype.appendChild = function(node) {\r\n\t if (this._hasChilds()) {\r\n\t // adjust the link to the parent\r\n\t node.setParent(this);\r\n\t node.fieldEditable = (this.type == 'object');\r\n\t if (this.type == 'array') {\r\n\t node.index = this.childs.length;\r\n\t }\r\n\t this.childs.push(node);\r\n\r\n\t if (this.expanded) {\r\n\t // insert into the DOM, before the appendRow\r\n\t var newTr = node.getDom();\r\n\t var appendTr = this.getAppend();\r\n\t var table = appendTr ? appendTr.parentNode : undefined;\r\n\t if (appendTr && table) {\r\n\t table.insertBefore(newTr, appendTr);\r\n\t }\r\n\r\n\t node.showChilds();\r\n\t }\r\n\r\n\t this.updateDom({'updateIndexes': true});\r\n\t node.updateDom({'recurse': true});\r\n\t }\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Move a node from its current parent to this node\r\n\t * Only applicable when Node value is of type array or object\r\n\t * @param {Node} node\r\n\t * @param {Node} beforeNode\r\n\t */\r\n\tNode.prototype.moveBefore = function(node, beforeNode) {\r\n\t if (this._hasChilds()) {\r\n\t // create a temporary row, to prevent the scroll position from jumping\r\n\t // when removing the node\r\n\t var tbody = (this.dom.tr) ? this.dom.tr.parentNode : undefined;\r\n\t if (tbody) {\r\n\t var trTemp = document.createElement('tr');\r\n\t trTemp.style.height = tbody.clientHeight + 'px';\r\n\t tbody.appendChild(trTemp);\r\n\t }\r\n\r\n\t if (node.parent) {\r\n\t node.parent.removeChild(node);\r\n\t }\r\n\r\n\t if (beforeNode instanceof AppendNode) {\r\n\t this.appendChild(node);\r\n\t }\r\n\t else {\r\n\t this.insertBefore(node, beforeNode);\r\n\t }\r\n\r\n\t if (tbody) {\r\n\t tbody.removeChild(trTemp);\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Move a node from its current parent to this node\r\n\t * Only applicable when Node value is of type array or object.\r\n\t * If index is out of range, the node will be appended to the end\r\n\t * @param {Node} node\r\n\t * @param {Number} index\r\n\t */\r\n\tNode.prototype.moveTo = function (node, index) {\r\n\t if (node.parent == this) {\r\n\t // same parent\r\n\t var currentIndex = this.childs.indexOf(node);\r\n\t if (currentIndex < index) {\r\n\t // compensate the index for removal of the node itself\r\n\t index++;\r\n\t }\r\n\t }\r\n\r\n\t var beforeNode = this.childs[index] || this.append;\r\n\t this.moveBefore(node, beforeNode);\r\n\t};\r\n\r\n\t/**\r\n\t * Insert a new child before a given node\r\n\t * Only applicable when Node value is of type array or object\r\n\t * @param {Node} node\r\n\t * @param {Node} beforeNode\r\n\t */\r\n\tNode.prototype.insertBefore = function(node, beforeNode) {\r\n\t if (this._hasChilds()) {\r\n\t if (beforeNode == this.append) {\r\n\t // append to the child nodes\r\n\r\n\t // adjust the link to the parent\r\n\t node.setParent(this);\r\n\t node.fieldEditable = (this.type == 'object');\r\n\t this.childs.push(node);\r\n\t }\r\n\t else {\r\n\t // insert before a child node\r\n\t var index = this.childs.indexOf(beforeNode);\r\n\t if (index == -1) {\r\n\t throw new Error('Node not found');\r\n\t }\r\n\r\n\t // adjust the link to the parent\r\n\t node.setParent(this);\r\n\t node.fieldEditable = (this.type == 'object');\r\n\t this.childs.splice(index, 0, node);\r\n\t }\r\n\r\n\t if (this.expanded) {\r\n\t // insert into the DOM\r\n\t var newTr = node.getDom();\r\n\t var nextTr = beforeNode.getDom();\r\n\t var table = nextTr ? nextTr.parentNode : undefined;\r\n\t if (nextTr && table) {\r\n\t table.insertBefore(newTr, nextTr);\r\n\t }\r\n\r\n\t node.showChilds();\r\n\t }\r\n\r\n\t this.updateDom({'updateIndexes': true});\r\n\t node.updateDom({'recurse': true});\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Insert a new child before a given node\r\n\t * Only applicable when Node value is of type array or object\r\n\t * @param {Node} node\r\n\t * @param {Node} afterNode\r\n\t */\r\n\tNode.prototype.insertAfter = function(node, afterNode) {\r\n\t if (this._hasChilds()) {\r\n\t var index = this.childs.indexOf(afterNode);\r\n\t var beforeNode = this.childs[index + 1];\r\n\t if (beforeNode) {\r\n\t this.insertBefore(node, beforeNode);\r\n\t }\r\n\t else {\r\n\t this.appendChild(node);\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Search in this node\r\n\t * The node will be expanded when the text is found one of its childs, else\r\n\t * it will be collapsed. Searches are case insensitive.\r\n\t * @param {String} text\r\n\t * @return {Node[]} results Array with nodes containing the search text\r\n\t */\r\n\tNode.prototype.search = function(text) {\r\n\t var results = [];\r\n\t var index;\r\n\t var search = text ? text.toLowerCase() : undefined;\r\n\r\n\t // delete old search data\r\n\t delete this.searchField;\r\n\t delete this.searchValue;\r\n\r\n\t // search in field\r\n\t if (this.field != undefined) {\r\n\t var field = String(this.field).toLowerCase();\r\n\t index = field.indexOf(search);\r\n\t if (index != -1) {\r\n\t this.searchField = true;\r\n\t results.push({\r\n\t 'node': this,\r\n\t 'elem': 'field'\r\n\t });\r\n\t }\r\n\r\n\t // update dom\r\n\t this._updateDomField();\r\n\t }\r\n\r\n\t // search in value\r\n\t if (this._hasChilds()) {\r\n\t // array, object\r\n\r\n\t // search the nodes childs\r\n\t if (this.childs) {\r\n\t var childResults = [];\r\n\t this.childs.forEach(function (child) {\r\n\t childResults = childResults.concat(child.search(text));\r\n\t });\r\n\t results = results.concat(childResults);\r\n\t }\r\n\r\n\t // update dom\r\n\t if (search != undefined) {\r\n\t var recurse = false;\r\n\t if (childResults.length == 0) {\r\n\t this.collapse(recurse);\r\n\t }\r\n\t else {\r\n\t this.expand(recurse);\r\n\t }\r\n\t }\r\n\t }\r\n\t else {\r\n\t // string, auto\r\n\t if (this.value != undefined ) {\r\n\t var value = String(this.value).toLowerCase();\r\n\t index = value.indexOf(search);\r\n\t if (index != -1) {\r\n\t this.searchValue = true;\r\n\t results.push({\r\n\t 'node': this,\r\n\t 'elem': 'value'\r\n\t });\r\n\t }\r\n\t }\r\n\r\n\t // update dom\r\n\t this._updateDomValue();\r\n\t }\r\n\r\n\t return results;\r\n\t};\r\n\r\n\t/**\r\n\t * Move the scroll position such that this node is in the visible area.\r\n\t * The node will not get the focus\r\n\t * @param {function(boolean)} [callback]\r\n\t */\r\n\tNode.prototype.scrollTo = function(callback) {\r\n\t if (!this.dom.tr || !this.dom.tr.parentNode) {\r\n\t // if the node is not visible, expand its parents\r\n\t var parent = this.parent;\r\n\t var recurse = false;\r\n\t while (parent) {\r\n\t parent.expand(recurse);\r\n\t parent = parent.parent;\r\n\t }\r\n\t }\r\n\r\n\t if (this.dom.tr && this.dom.tr.parentNode) {\r\n\t this.editor.scrollTo(this.dom.tr.offsetTop, callback);\r\n\t }\r\n\t};\r\n\r\n\r\n\t// stores the element name currently having the focus\r\n\tNode.focusElement = undefined;\r\n\r\n\t/**\r\n\t * Set focus to this node\r\n\t * @param {String} [elementName] The field name of the element to get the\r\n\t * focus available values: 'drag', 'menu',\r\n\t * 'expand', 'field', 'value' (default)\r\n\t */\r\n\tNode.prototype.focus = function(elementName) {\r\n\t Node.focusElement = elementName;\r\n\r\n\t if (this.dom.tr && this.dom.tr.parentNode) {\r\n\t var dom = this.dom;\r\n\r\n\t switch (elementName) {\r\n\t case 'drag':\r\n\t if (dom.drag) {\r\n\t dom.drag.focus();\r\n\t }\r\n\t else {\r\n\t dom.menu.focus();\r\n\t }\r\n\t break;\r\n\r\n\t case 'menu':\r\n\t dom.menu.focus();\r\n\t break;\r\n\r\n\t case 'expand':\r\n\t if (this._hasChilds()) {\r\n\t dom.expand.focus();\r\n\t }\r\n\t else if (dom.field && this.fieldEditable) {\r\n\t dom.field.focus();\r\n\t util.selectContentEditable(dom.field);\r\n\t }\r\n\t else if (dom.value && !this._hasChilds()) {\r\n\t dom.value.focus();\r\n\t util.selectContentEditable(dom.value);\r\n\t }\r\n\t else {\r\n\t dom.menu.focus();\r\n\t }\r\n\t break;\r\n\r\n\t case 'field':\r\n\t if (dom.field && this.fieldEditable) {\r\n\t dom.field.focus();\r\n\t util.selectContentEditable(dom.field);\r\n\t }\r\n\t else if (dom.value && !this._hasChilds()) {\r\n\t dom.value.focus();\r\n\t util.selectContentEditable(dom.value);\r\n\t }\r\n\t else if (this._hasChilds()) {\r\n\t dom.expand.focus();\r\n\t }\r\n\t else {\r\n\t dom.menu.focus();\r\n\t }\r\n\t break;\r\n\r\n\t case 'value':\r\n\t default:\r\n\t if (dom.value && !this._hasChilds()) {\r\n\t dom.value.focus();\r\n\t util.selectContentEditable(dom.value);\r\n\t }\r\n\t else if (dom.field && this.fieldEditable) {\r\n\t dom.field.focus();\r\n\t util.selectContentEditable(dom.field);\r\n\t }\r\n\t else if (this._hasChilds()) {\r\n\t dom.expand.focus();\r\n\t }\r\n\t else {\r\n\t dom.menu.focus();\r\n\t }\r\n\t break;\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Select all text in an editable div after a delay of 0 ms\r\n\t * @param {Element} editableDiv\r\n\t */\r\n\tNode.select = function(editableDiv) {\r\n\t setTimeout(function () {\r\n\t util.selectContentEditable(editableDiv);\r\n\t }, 0);\r\n\t};\r\n\r\n\t/**\r\n\t * Update the values from the DOM field and value of this node\r\n\t */\r\n\tNode.prototype.blur = function() {\r\n\t // retrieve the actual field and value from the DOM.\r\n\t this._getDomValue(false);\r\n\t this._getDomField(false);\r\n\t};\r\n\r\n\t/**\r\n\t * Check if given node is a child. The method will check recursively to find\r\n\t * this node.\r\n\t * @param {Node} node\r\n\t * @return {boolean} containsNode\r\n\t */\r\n\tNode.prototype.containsNode = function(node) {\r\n\t if (this == node) {\r\n\t return true;\r\n\t }\r\n\r\n\t var childs = this.childs;\r\n\t if (childs) {\r\n\t // TODO: use the js5 Array.some() here?\r\n\t for (var i = 0, iMax = childs.length; i < iMax; i++) {\r\n\t if (childs[i].containsNode(node)) {\r\n\t return true;\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t return false;\r\n\t};\r\n\r\n\t/**\r\n\t * Move given node into this node\r\n\t * @param {Node} node the childNode to be moved\r\n\t * @param {Node} beforeNode node will be inserted before given\r\n\t * node. If no beforeNode is given,\r\n\t * the node is appended at the end\r\n\t * @private\r\n\t */\r\n\tNode.prototype._move = function(node, beforeNode) {\r\n\t if (node == beforeNode) {\r\n\t // nothing to do...\r\n\t return;\r\n\t }\r\n\r\n\t // check if this node is not a child of the node to be moved here\r\n\t if (node.containsNode(this)) {\r\n\t throw new Error('Cannot move a field into a child of itself');\r\n\t }\r\n\r\n\t // remove the original node\r\n\t if (node.parent) {\r\n\t node.parent.removeChild(node);\r\n\t }\r\n\r\n\t // create a clone of the node\r\n\t var clone = node.clone();\r\n\t node.clearDom();\r\n\r\n\t // insert or append the node\r\n\t if (beforeNode) {\r\n\t this.insertBefore(clone, beforeNode);\r\n\t }\r\n\t else {\r\n\t this.appendChild(clone);\r\n\t }\r\n\r\n\t /* TODO: adjust the field name (to prevent equal field names)\r\n\t if (this.type == 'object') {\r\n\t }\r\n\t */\r\n\t};\r\n\r\n\t/**\r\n\t * Remove a child from the node.\r\n\t * Only applicable when Node value is of type array or object\r\n\t * @param {Node} node The child node to be removed;\r\n\t * @return {Node | undefined} node The removed node on success,\r\n\t * else undefined\r\n\t */\r\n\tNode.prototype.removeChild = function(node) {\r\n\t if (this.childs) {\r\n\t var index = this.childs.indexOf(node);\r\n\r\n\t if (index != -1) {\r\n\t node.hide();\r\n\r\n\t // delete old search results\r\n\t delete node.searchField;\r\n\t delete node.searchValue;\r\n\r\n\t var removedNode = this.childs.splice(index, 1)[0];\r\n\t removedNode.parent = null;\r\n\r\n\t this.updateDom({'updateIndexes': true});\r\n\r\n\t return removedNode;\r\n\t }\r\n\t }\r\n\r\n\t return undefined;\r\n\t};\r\n\r\n\t/**\r\n\t * Remove a child node node from this node\r\n\t * This method is equal to Node.removeChild, except that _remove fire an\r\n\t * onChange event.\r\n\t * @param {Node} node\r\n\t * @private\r\n\t */\r\n\tNode.prototype._remove = function (node) {\r\n\t this.removeChild(node);\r\n\t};\r\n\r\n\t/**\r\n\t * Change the type of the value of this Node\r\n\t * @param {String} newType\r\n\t */\r\n\tNode.prototype.changeType = function (newType) {\r\n\t var oldType = this.type;\r\n\r\n\t if (oldType == newType) {\r\n\t // type is not changed\r\n\t return;\r\n\t }\r\n\r\n\t if ((newType == 'string' || newType == 'auto') &&\r\n\t (oldType == 'string' || oldType == 'auto')) {\r\n\t // this is an easy change\r\n\t this.type = newType;\r\n\t }\r\n\t else {\r\n\t // change from array to object, or from string/auto to object/array\r\n\t var table = this.dom.tr ? this.dom.tr.parentNode : undefined;\r\n\t var lastTr;\r\n\t if (this.expanded) {\r\n\t lastTr = this.getAppend();\r\n\t }\r\n\t else {\r\n\t lastTr = this.getDom();\r\n\t }\r\n\t var nextTr = (lastTr && lastTr.parentNode) ? lastTr.nextSibling : undefined;\r\n\r\n\t // hide current field and all its childs\r\n\t this.hide();\r\n\t this.clearDom();\r\n\r\n\t // adjust the field and the value\r\n\t this.type = newType;\r\n\r\n\t // adjust childs\r\n\t if (newType == 'object') {\r\n\t if (!this.childs) {\r\n\t this.childs = [];\r\n\t }\r\n\r\n\t this.childs.forEach(function (child, index) {\r\n\t child.clearDom();\r\n\t delete child.index;\r\n\t child.fieldEditable = true;\r\n\t if (child.field == undefined) {\r\n\t child.field = '';\r\n\t }\r\n\t });\r\n\r\n\t if (oldType == 'string' || oldType == 'auto') {\r\n\t this.expanded = true;\r\n\t }\r\n\t }\r\n\t else if (newType == 'array') {\r\n\t if (!this.childs) {\r\n\t this.childs = [];\r\n\t }\r\n\r\n\t this.childs.forEach(function (child, index) {\r\n\t child.clearDom();\r\n\t child.fieldEditable = false;\r\n\t child.index = index;\r\n\t });\r\n\r\n\t if (oldType == 'string' || oldType == 'auto') {\r\n\t this.expanded = true;\r\n\t }\r\n\t }\r\n\t else {\r\n\t this.expanded = false;\r\n\t }\r\n\r\n\t // create new DOM\r\n\t if (table) {\r\n\t if (nextTr) {\r\n\t table.insertBefore(this.getDom(), nextTr);\r\n\t }\r\n\t else {\r\n\t table.appendChild(this.getDom());\r\n\t }\r\n\t }\r\n\t this.showChilds();\r\n\t }\r\n\r\n\t if (newType == 'auto' || newType == 'string') {\r\n\t // cast value to the correct type\r\n\t if (newType == 'string') {\r\n\t this.value = String(this.value);\r\n\t }\r\n\t else {\r\n\t this.value = this._stringCast(String(this.value));\r\n\t }\r\n\r\n\t this.focus();\r\n\t }\r\n\r\n\t this.updateDom({'updateIndexes': true});\r\n\t};\r\n\r\n\t/**\r\n\t * Retrieve value from DOM\r\n\t * @param {boolean} [silent] If true (default), no errors will be thrown in\r\n\t * case of invalid data\r\n\t * @private\r\n\t */\r\n\tNode.prototype._getDomValue = function(silent) {\r\n\t if (this.dom.value && this.type != 'array' && this.type != 'object') {\r\n\t this.valueInnerText = util.getInnerText(this.dom.value);\r\n\t }\r\n\r\n\t if (this.valueInnerText != undefined) {\r\n\t try {\r\n\t // retrieve the value\r\n\t var value;\r\n\t if (this.type == 'string') {\r\n\t value = this._unescapeHTML(this.valueInnerText);\r\n\t }\r\n\t else {\r\n\t var str = this._unescapeHTML(this.valueInnerText);\r\n\t value = this._stringCast(str);\r\n\t }\r\n\t if (value !== this.value) {\r\n\t this.value = value;\r\n\t this._debouncedOnChangeValue();\r\n\t }\r\n\t }\r\n\t catch (err) {\r\n\t this.value = undefined;\r\n\t // TODO: sent an action with the new, invalid value?\r\n\t if (silent !== true) {\r\n\t throw err;\r\n\t }\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Handle a changed value\r\n\t * @private\r\n\t */\r\n\tNode.prototype._onChangeValue = function () {\r\n\t // get current selection, then override the range such that we can select\r\n\t // the added/removed text on undo/redo\r\n\t var oldSelection = this.editor.getSelection();\r\n\t if (oldSelection.range) {\r\n\t var undoDiff = util.textDiff(String(this.value), String(this.previousValue));\r\n\t oldSelection.range.startOffset = undoDiff.start;\r\n\t oldSelection.range.endOffset = undoDiff.end;\r\n\t }\r\n\t var newSelection = this.editor.getSelection();\r\n\t if (newSelection.range) {\r\n\t var redoDiff = util.textDiff(String(this.previousValue), String(this.value));\r\n\t newSelection.range.startOffset = redoDiff.start;\r\n\t newSelection.range.endOffset = redoDiff.end;\r\n\t }\r\n\r\n\t this.editor._onAction('editValue', {\r\n\t node: this,\r\n\t oldValue: this.previousValue,\r\n\t newValue: this.value,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\r\n\t this.previousValue = this.value;\r\n\t};\r\n\r\n\t/**\r\n\t * Handle a changed field\r\n\t * @private\r\n\t */\r\n\tNode.prototype._onChangeField = function () {\r\n\t // get current selection, then override the range such that we can select\r\n\t // the added/removed text on undo/redo\r\n\t var oldSelection = this.editor.getSelection();\r\n\t if (oldSelection.range) {\r\n\t var undoDiff = util.textDiff(this.field, this.previousField);\r\n\t oldSelection.range.startOffset = undoDiff.start;\r\n\t oldSelection.range.endOffset = undoDiff.end;\r\n\t }\r\n\t var newSelection = this.editor.getSelection();\r\n\t if (newSelection.range) {\r\n\t var redoDiff = util.textDiff(this.previousField, this.field);\r\n\t newSelection.range.startOffset = redoDiff.start;\r\n\t newSelection.range.endOffset = redoDiff.end;\r\n\t }\r\n\r\n\t this.editor._onAction('editField', {\r\n\t node: this,\r\n\t oldValue: this.previousField,\r\n\t newValue: this.field,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\r\n\t this.previousField = this.field;\r\n\t};\r\n\r\n\t/**\r\n\t * Update dom value:\r\n\t * - the text color of the value, depending on the type of the value\r\n\t * - the height of the field, depending on the width\r\n\t * - background color in case it is empty\r\n\t * @private\r\n\t */\r\n\tNode.prototype._updateDomValue = function () {\r\n\t var domValue = this.dom.value;\r\n\t if (domValue) {\r\n\t var classNames = ['jsoneditor-value'];\r\n\r\n\r\n\t // set text color depending on value type\r\n\t var value = this.value;\r\n\t var type = (this.type == 'auto') ? util.type(value) : this.type;\r\n\t var isUrl = type == 'string' && util.isUrl(value);\r\n\t classNames.push('jsoneditor-' + type);\r\n\t if (isUrl) {\r\n\t classNames.push('jsoneditor-url');\r\n\t }\r\n\r\n\t // visual styling when empty\r\n\t var isEmpty = (String(this.value) == '' && this.type != 'array' && this.type != 'object');\r\n\t if (isEmpty) {\r\n\t classNames.push('jsoneditor-empty');\r\n\t }\r\n\r\n\t // highlight when there is a search result\r\n\t if (this.searchValueActive) {\r\n\t classNames.push('jsoneditor-highlight-active');\r\n\t }\r\n\t if (this.searchValue) {\r\n\t classNames.push('jsoneditor-highlight');\r\n\t }\r\n\r\n\t domValue.className = classNames.join(' ');\r\n\r\n\t // update title\r\n\t if (type == 'array' || type == 'object') {\r\n\t var count = this.childs ? this.childs.length : 0;\r\n\t domValue.title = this.type + ' containing ' + count + ' items';\r\n\t }\r\n\t else if (isUrl && this.editable.value) {\r\n\t domValue.title = 'Ctrl+Click or Ctrl+Enter to open url in new window';\r\n\t }\r\n\t else {\r\n\t domValue.title = '';\r\n\t }\r\n\r\n\t // show checkbox when the value is a boolean\r\n\t if (type === 'boolean' && this.editable.value) {\r\n\t if (!this.dom.checkbox) {\r\n\t this.dom.checkbox = document.createElement('input');\r\n\t this.dom.checkbox.type = 'checkbox';\r\n\t this.dom.tdCheckbox = document.createElement('td');\r\n\t this.dom.tdCheckbox.className = 'jsoneditor-tree';\r\n\t this.dom.tdCheckbox.appendChild(this.dom.checkbox);\r\n\r\n\t this.dom.tdValue.parentNode.insertBefore(this.dom.tdCheckbox, this.dom.tdValue);\r\n\t }\r\n\r\n\t this.dom.checkbox.checked = this.value;\r\n\t }\r\n\t else {\r\n\t // cleanup checkbox when displayed\r\n\t if (this.dom.tdCheckbox) {\r\n\t this.dom.tdCheckbox.parentNode.removeChild(this.dom.tdCheckbox);\r\n\t delete this.dom.tdCheckbox;\r\n\t delete this.dom.checkbox;\r\n\t }\r\n\t }\r\n\r\n\t if (this.enum && this.editable.value) {\r\n\t // create select box when this node has an enum object\r\n\t if (!this.dom.select) {\r\n\t this.dom.select = document.createElement('select');\r\n\t this.id = this.field + \"_\" + new Date().getUTCMilliseconds();\r\n\t this.dom.select.id = this.id;\r\n\t this.dom.select.name = this.dom.select.id;\r\n\r\n\t //Create the default empty option\r\n\t this.dom.select.option = document.createElement('option');\r\n\t this.dom.select.option.value = '';\r\n\t this.dom.select.option.innerHTML = '--';\r\n\t this.dom.select.appendChild(this.dom.select.option);\r\n\r\n\t //Iterate all enum values and add them as options\r\n\t for(var i = 0; i < this.enum.length; i++) {\r\n\t this.dom.select.option = document.createElement('option');\r\n\t this.dom.select.option.value = this.enum[i];\r\n\t this.dom.select.option.innerHTML = this.enum[i];\r\n\t if(this.dom.select.option.value == this.value){\r\n\t this.dom.select.option.selected = true;\r\n\t }\r\n\t this.dom.select.appendChild(this.dom.select.option);\r\n\t }\r\n\r\n\t this.dom.tdSelect = document.createElement('td');\r\n\t this.dom.tdSelect.className = 'jsoneditor-tree';\r\n\t this.dom.tdSelect.appendChild(this.dom.select);\r\n\t this.dom.tdValue.parentNode.insertBefore(this.dom.tdSelect, this.dom.tdValue);\r\n\t }\r\n\r\n\t // If the enum is inside a composite type display\r\n\t // both the simple input and the dropdown field\r\n\t if(this.schema && (\r\n\t !this.schema.hasOwnProperty(\"oneOf\") &&\r\n\t !this.schema.hasOwnProperty(\"anyOf\") &&\r\n\t !this.schema.hasOwnProperty(\"allOf\"))\r\n\t ) {\r\n\t this.valueFieldHTML = this.dom.tdValue.innerHTML;\r\n\t this.dom.tdValue.style.visibility = 'hidden';\r\n\t this.dom.tdValue.innerHTML = '';\r\n\t } else {\r\n\t delete this.valueFieldHTML;\r\n\t }\r\n\t }\r\n\t else {\r\n\t // cleanup select box when displayed\r\n\t if (this.dom.tdSelect) {\r\n\t this.dom.tdSelect.parentNode.removeChild(this.dom.tdSelect);\r\n\t delete this.dom.tdSelect;\r\n\t delete this.dom.select;\r\n\t this.dom.tdValue.innerHTML = this.valueFieldHTML;\r\n\t this.dom.tdValue.style.visibility = '';\r\n\t delete this.valueFieldHTML;\r\n\t }\r\n\t }\r\n\r\n\t // strip formatting from the contents of the editable div\r\n\t util.stripFormatting(domValue);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Update dom field:\r\n\t * - the text color of the field, depending on the text\r\n\t * - the height of the field, depending on the width\r\n\t * - background color in case it is empty\r\n\t * @private\r\n\t */\r\n\tNode.prototype._updateDomField = function () {\r\n\t var domField = this.dom.field;\r\n\t if (domField) {\r\n\t // make backgound color lightgray when empty\r\n\t var isEmpty = (String(this.field) == '' && this.parent.type != 'array');\r\n\t if (isEmpty) {\r\n\t util.addClassName(domField, 'jsoneditor-empty');\r\n\t }\r\n\t else {\r\n\t util.removeClassName(domField, 'jsoneditor-empty');\r\n\t }\r\n\r\n\t // highlight when there is a search result\r\n\t if (this.searchFieldActive) {\r\n\t util.addClassName(domField, 'jsoneditor-highlight-active');\r\n\t }\r\n\t else {\r\n\t util.removeClassName(domField, 'jsoneditor-highlight-active');\r\n\t }\r\n\t if (this.searchField) {\r\n\t util.addClassName(domField, 'jsoneditor-highlight');\r\n\t }\r\n\t else {\r\n\t util.removeClassName(domField, 'jsoneditor-highlight');\r\n\t }\r\n\r\n\t // strip formatting from the contents of the editable div\r\n\t util.stripFormatting(domField);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Retrieve field from DOM\r\n\t * @param {boolean} [silent] If true (default), no errors will be thrown in\r\n\t * case of invalid data\r\n\t * @private\r\n\t */\r\n\tNode.prototype._getDomField = function(silent) {\r\n\t if (this.dom.field && this.fieldEditable) {\r\n\t this.fieldInnerText = util.getInnerText(this.dom.field);\r\n\t }\r\n\r\n\t if (this.fieldInnerText != undefined) {\r\n\t try {\r\n\t var field = this._unescapeHTML(this.fieldInnerText);\r\n\r\n\t if (field !== this.field) {\r\n\t this.field = field;\r\n\t this._debouncedOnChangeField();\r\n\t }\r\n\t }\r\n\t catch (err) {\r\n\t this.field = undefined;\r\n\t // TODO: sent an action here, with the new, invalid value?\r\n\t if (silent !== true) {\r\n\t throw err;\r\n\t }\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Validate this node and all it's childs\r\n\t * @return {Array.<{node: Node, error: {message: string}}>} Returns a list with duplicates\r\n\t */\r\n\tNode.prototype.validate = function () {\r\n\t var errors = [];\r\n\r\n\t // find duplicate keys\r\n\t if (this.type === 'object') {\r\n\t var keys = {};\r\n\t var duplicateKeys = [];\r\n\t for (var i = 0; i < this.childs.length; i++) {\r\n\t var child = this.childs[i];\r\n\t if (keys.hasOwnProperty(child.field)) {\r\n\t duplicateKeys.push(child.field);\r\n\t }\r\n\t keys[child.field] = true;\r\n\t }\r\n\r\n\t if (duplicateKeys.length > 0) {\r\n\t errors = this.childs\r\n\t .filter(function (node) {\r\n\t return duplicateKeys.indexOf(node.field) !== -1;\r\n\t })\r\n\t .map(function (node) {\r\n\t return {\r\n\t node: node,\r\n\t error: {\r\n\t message: 'duplicate key \"' + node.field + '\"'\r\n\t }\r\n\t }\r\n\t });\r\n\t }\r\n\t }\r\n\r\n\t // recurse over the childs\r\n\t if (this.childs) {\r\n\t for (var i = 0; i < this.childs.length; i++) {\r\n\t var e = this.childs[i].validate();\r\n\t if (e.length > 0) {\r\n\t errors = errors.concat(e);\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t return errors;\r\n\t};\r\n\r\n\t/**\r\n\t * Clear the dom of the node\r\n\t */\r\n\tNode.prototype.clearDom = function() {\r\n\t // TODO: hide the node first?\r\n\t //this.hide();\r\n\t // TODO: recursively clear dom?\r\n\r\n\t this.dom = {};\r\n\t};\r\n\r\n\t/**\r\n\t * Get the HTML DOM TR element of the node.\r\n\t * The dom will be generated when not yet created\r\n\t * @return {Element} tr HTML DOM TR Element\r\n\t */\r\n\tNode.prototype.getDom = function() {\r\n\t var dom = this.dom;\r\n\t if (dom.tr) {\r\n\t return dom.tr;\r\n\t }\r\n\r\n\t this._updateEditability();\r\n\r\n\t // create row\r\n\t dom.tr = document.createElement('tr');\r\n\t dom.tr.node = this;\r\n\r\n\t if (this.editor.options.mode === 'tree') { // note: we take here the global setting\r\n\t var tdDrag = document.createElement('td');\r\n\t if (this.editable.field) {\r\n\t // create draggable area\r\n\t if (this.parent) {\r\n\t var domDrag = document.createElement('button');\r\n\t domDrag.type = 'button';\r\n\t dom.drag = domDrag;\r\n\t domDrag.className = 'jsoneditor-dragarea';\r\n\t domDrag.title = 'Drag to move this field (Alt+Shift+Arrows)';\r\n\t tdDrag.appendChild(domDrag);\r\n\t }\r\n\t }\r\n\t dom.tr.appendChild(tdDrag);\r\n\r\n\t // create context menu\r\n\t var tdMenu = document.createElement('td');\r\n\t var menu = document.createElement('button');\r\n\t menu.type = 'button';\r\n\t dom.menu = menu;\r\n\t menu.className = 'jsoneditor-contextmenu';\r\n\t menu.title = 'Click to open the actions menu (Ctrl+M)';\r\n\t tdMenu.appendChild(dom.menu);\r\n\t dom.tr.appendChild(tdMenu);\r\n\t }\r\n\r\n\t // create tree and field\r\n\t var tdField = document.createElement('td');\r\n\t dom.tr.appendChild(tdField);\r\n\t dom.tree = this._createDomTree();\r\n\t tdField.appendChild(dom.tree);\r\n\r\n\t this.updateDom({'updateIndexes': true});\r\n\r\n\t return dom.tr;\r\n\t};\r\n\r\n\t/**\r\n\t * DragStart event, fired on mousedown on the dragarea at the left side of a Node\r\n\t * @param {Node[] | Node} nodes\r\n\t * @param {Event} event\r\n\t */\r\n\tNode.onDragStart = function (nodes, event) {\r\n\t if (!Array.isArray(nodes)) {\r\n\t return Node.onDragStart([nodes], event);\r\n\t }\r\n\t if (nodes.length === 0) {\r\n\t return;\r\n\t }\r\n\r\n\t var firstNode = nodes[0];\r\n\t var lastNode = nodes[nodes.length - 1];\r\n\t var draggedNode = Node.getNodeFromTarget(event.target);\r\n\t var beforeNode = lastNode._nextSibling();\r\n\t var editor = firstNode.editor;\r\n\r\n\t // in case of multiple selected nodes, offsetY prevents the selection from\r\n\t // jumping when you start dragging one of the lower down nodes in the selection\r\n\t var offsetY = util.getAbsoluteTop(draggedNode.dom.tr) - util.getAbsoluteTop(firstNode.dom.tr);\r\n\r\n\t if (!editor.mousemove) {\r\n\t editor.mousemove = util.addEventListener(window, 'mousemove', function (event) {\r\n\t Node.onDrag(nodes, event);\r\n\t });\r\n\t }\r\n\r\n\t if (!editor.mouseup) {\r\n\t editor.mouseup = util.addEventListener(window, 'mouseup',function (event ) {\r\n\t Node.onDragEnd(nodes, event);\r\n\t });\r\n\t }\r\n\r\n\t editor.highlighter.lock();\r\n\t editor.drag = {\r\n\t oldCursor: document.body.style.cursor,\r\n\t oldSelection: editor.getSelection(),\r\n\t oldBeforeNode: beforeNode,\r\n\t mouseX: event.pageX,\r\n\t offsetY: offsetY,\r\n\t level: firstNode.getLevel()\r\n\t };\r\n\t document.body.style.cursor = 'move';\r\n\r\n\t event.preventDefault();\r\n\t};\r\n\r\n\t/**\r\n\t * Drag event, fired when moving the mouse while dragging a Node\r\n\t * @param {Node[] | Node} nodes\r\n\t * @param {Event} event\r\n\t */\r\n\tNode.onDrag = function (nodes, event) {\r\n\t if (!Array.isArray(nodes)) {\r\n\t return Node.onDrag([nodes], event);\r\n\t }\r\n\t if (nodes.length === 0) {\r\n\t return;\r\n\t }\r\n\r\n\t // TODO: this method has grown too large. Split it in a number of methods\r\n\t var editor = nodes[0].editor;\r\n\t var mouseY = event.pageY - editor.drag.offsetY;\r\n\t var mouseX = event.pageX;\r\n\t var trThis, trPrev, trNext, trFirst, trLast, trRoot;\r\n\t var nodePrev, nodeNext;\r\n\t var topThis, topPrev, topFirst, heightThis, bottomNext, heightNext;\r\n\t var moved = false;\r\n\r\n\t // TODO: add an ESC option, which resets to the original position\r\n\r\n\t // move up/down\r\n\t var firstNode = nodes[0];\r\n\t trThis = firstNode.dom.tr;\r\n\t topThis = util.getAbsoluteTop(trThis);\r\n\t heightThis = trThis.offsetHeight;\r\n\t if (mouseY < topThis) {\r\n\t // move up\r\n\t trPrev = trThis;\r\n\t do {\r\n\t trPrev = trPrev.previousSibling;\r\n\t nodePrev = Node.getNodeFromTarget(trPrev);\r\n\t topPrev = trPrev ? util.getAbsoluteTop(trPrev) : 0;\r\n\t }\r\n\t while (trPrev && mouseY < topPrev);\r\n\r\n\t if (nodePrev && !nodePrev.parent) {\r\n\t nodePrev = undefined;\r\n\t }\r\n\r\n\t if (!nodePrev) {\r\n\t // move to the first node\r\n\t trRoot = trThis.parentNode.firstChild;\r\n\t trPrev = trRoot ? trRoot.nextSibling : undefined;\r\n\t nodePrev = Node.getNodeFromTarget(trPrev);\r\n\t if (nodePrev == firstNode) {\r\n\t nodePrev = undefined;\r\n\t }\r\n\t }\r\n\r\n\t if (nodePrev) {\r\n\t // check if mouseY is really inside the found node\r\n\t trPrev = nodePrev.dom.tr;\r\n\t topPrev = trPrev ? util.getAbsoluteTop(trPrev) : 0;\r\n\t if (mouseY > topPrev + heightThis) {\r\n\t nodePrev = undefined;\r\n\t }\r\n\t }\r\n\r\n\t if (nodePrev) {\r\n\t nodes.forEach(function (node) {\r\n\t nodePrev.parent.moveBefore(node, nodePrev);\r\n\t });\r\n\t moved = true;\r\n\t }\r\n\t }\r\n\t else {\r\n\t // move down\r\n\t var lastNode = nodes[nodes.length - 1];\r\n\t trLast = (lastNode.expanded && lastNode.append) ? lastNode.append.getDom() : lastNode.dom.tr;\r\n\t trFirst = trLast ? trLast.nextSibling : undefined;\r\n\t if (trFirst) {\r\n\t topFirst = util.getAbsoluteTop(trFirst);\r\n\t trNext = trFirst;\r\n\t do {\r\n\t nodeNext = Node.getNodeFromTarget(trNext);\r\n\t if (trNext) {\r\n\t bottomNext = trNext.nextSibling ?\r\n\t util.getAbsoluteTop(trNext.nextSibling) : 0;\r\n\t heightNext = trNext ? (bottomNext - topFirst) : 0;\r\n\r\n\t if (nodeNext.parent.childs.length == nodes.length &&\r\n\t nodeNext.parent.childs[nodes.length - 1] == lastNode) {\r\n\t // We are about to remove the last child of this parent,\r\n\t // which will make the parents appendNode visible.\r\n\t topThis += 27;\r\n\t // TODO: dangerous to suppose the height of the appendNode a constant of 27 px.\r\n\t }\r\n\t }\r\n\r\n\t trNext = trNext.nextSibling;\r\n\t }\r\n\t while (trNext && mouseY > topThis + heightNext);\r\n\r\n\t if (nodeNext && nodeNext.parent) {\r\n\t // calculate the desired level\r\n\t var diffX = (mouseX - editor.drag.mouseX);\r\n\t var diffLevel = Math.round(diffX / 24 / 2);\r\n\t var level = editor.drag.level + diffLevel; // desired level\r\n\t var levelNext = nodeNext.getLevel(); // level to be\r\n\r\n\t // find the best fitting level (move upwards over the append nodes)\r\n\t trPrev = nodeNext.dom.tr.previousSibling;\r\n\t while (levelNext < level && trPrev) {\r\n\t nodePrev = Node.getNodeFromTarget(trPrev);\r\n\r\n\t var isDraggedNode = nodes.some(function (node) {\r\n\t return node === nodePrev || nodePrev._isChildOf(node);\r\n\t });\r\n\r\n\t if (isDraggedNode) {\r\n\t // neglect the dragged nodes themselves and their childs\r\n\t }\r\n\t else if (nodePrev instanceof AppendNode) {\r\n\t var childs = nodePrev.parent.childs;\r\n\t if (childs.length != nodes.length || childs[nodes.length - 1] != lastNode) {\r\n\t // non-visible append node of a list of childs\r\n\t // consisting of not only this node (else the\r\n\t // append node will change into a visible \"empty\"\r\n\t // text when removing this node).\r\n\t nodeNext = Node.getNodeFromTarget(trPrev);\r\n\t levelNext = nodeNext.getLevel();\r\n\t }\r\n\t else {\r\n\t break;\r\n\t }\r\n\t }\r\n\t else {\r\n\t break;\r\n\t }\r\n\r\n\t trPrev = trPrev.previousSibling;\r\n\t }\r\n\r\n\t // move the node when its position is changed\r\n\t if (trLast.nextSibling != nodeNext.dom.tr) {\r\n\t nodes.forEach(function (node) {\r\n\t nodeNext.parent.moveBefore(node, nodeNext);\r\n\t });\r\n\t moved = true;\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t if (moved) {\r\n\t // update the dragging parameters when moved\r\n\t editor.drag.mouseX = mouseX;\r\n\t editor.drag.level = firstNode.getLevel();\r\n\t }\r\n\r\n\t // auto scroll when hovering around the top of the editor\r\n\t editor.startAutoScroll(mouseY);\r\n\r\n\t event.preventDefault();\r\n\t};\r\n\r\n\t/**\r\n\t * Drag event, fired on mouseup after having dragged a node\r\n\t * @param {Node[] | Node} nodes\r\n\t * @param {Event} event\r\n\t */\r\n\tNode.onDragEnd = function (nodes, event) {\r\n\t if (!Array.isArray(nodes)) {\r\n\t return Node.onDrag([nodes], event);\r\n\t }\r\n\t if (nodes.length === 0) {\r\n\t return;\r\n\t }\r\n\r\n\t var firstNode = nodes[0];\r\n\t var editor = firstNode.editor;\r\n\t var parent = firstNode.parent;\r\n\t var firstIndex = parent.childs.indexOf(firstNode);\r\n\t var beforeNode = parent.childs[firstIndex + nodes.length] || parent.append;\r\n\r\n\t // set focus to the context menu button of the first node\r\n\t if (nodes[0]) {\r\n\t nodes[0].dom.menu.focus();\r\n\t }\r\n\r\n\t var params = {\r\n\t nodes: nodes,\r\n\t oldSelection: editor.drag.oldSelection,\r\n\t newSelection: editor.getSelection(),\r\n\t oldBeforeNode: editor.drag.oldBeforeNode,\r\n\t newBeforeNode: beforeNode\r\n\t };\r\n\r\n\t if (params.oldBeforeNode != params.newBeforeNode) {\r\n\t // only register this action if the node is actually moved to another place\r\n\t editor._onAction('moveNodes', params);\r\n\t }\r\n\r\n\t document.body.style.cursor = editor.drag.oldCursor;\r\n\t editor.highlighter.unlock();\r\n\t nodes.forEach(function (node) {\r\n\t if (event.target !== node.dom.drag && event.target !== node.dom.menu) {\r\n\t editor.highlighter.unhighlight();\r\n\t }\r\n\t });\r\n\t delete editor.drag;\r\n\r\n\t if (editor.mousemove) {\r\n\t util.removeEventListener(window, 'mousemove', editor.mousemove);\r\n\t delete editor.mousemove;\r\n\t }\r\n\t if (editor.mouseup) {\r\n\t util.removeEventListener(window, 'mouseup', editor.mouseup);\r\n\t delete editor.mouseup;\r\n\t }\r\n\r\n\t // Stop any running auto scroll\r\n\t editor.stopAutoScroll();\r\n\r\n\t event.preventDefault();\r\n\t};\r\n\r\n\t/**\r\n\t * Test if this node is a child of an other node\r\n\t * @param {Node} node\r\n\t * @return {boolean} isChild\r\n\t * @private\r\n\t */\r\n\tNode.prototype._isChildOf = function (node) {\r\n\t var n = this.parent;\r\n\t while (n) {\r\n\t if (n == node) {\r\n\t return true;\r\n\t }\r\n\t n = n.parent;\r\n\t }\r\n\r\n\t return false;\r\n\t};\r\n\r\n\t/**\r\n\t * Create an editable field\r\n\t * @return {Element} domField\r\n\t * @private\r\n\t */\r\n\tNode.prototype._createDomField = function () {\r\n\t return document.createElement('div');\r\n\t};\r\n\r\n\t/**\r\n\t * Set highlighting for this node and all its childs.\r\n\t * Only applied to the currently visible (expanded childs)\r\n\t * @param {boolean} highlight\r\n\t */\r\n\tNode.prototype.setHighlight = function (highlight) {\r\n\t if (this.dom.tr) {\r\n\t if (highlight) {\r\n\t util.addClassName(this.dom.tr, 'jsoneditor-highlight');\r\n\t }\r\n\t else {\r\n\t util.removeClassName(this.dom.tr, 'jsoneditor-highlight');\r\n\t }\r\n\r\n\t if (this.append) {\r\n\t this.append.setHighlight(highlight);\r\n\t }\r\n\r\n\t if (this.childs) {\r\n\t this.childs.forEach(function (child) {\r\n\t child.setHighlight(highlight);\r\n\t });\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Select or deselect a node\r\n\t * @param {boolean} selected\r\n\t * @param {boolean} [isFirst]\r\n\t */\r\n\tNode.prototype.setSelected = function (selected, isFirst) {\r\n\t this.selected = selected;\r\n\r\n\t if (this.dom.tr) {\r\n\t if (selected) {\r\n\t util.addClassName(this.dom.tr, 'jsoneditor-selected');\r\n\t }\r\n\t else {\r\n\t util.removeClassName(this.dom.tr, 'jsoneditor-selected');\r\n\t }\r\n\r\n\t if (isFirst) {\r\n\t util.addClassName(this.dom.tr, 'jsoneditor-first');\r\n\t }\r\n\t else {\r\n\t util.removeClassName(this.dom.tr, 'jsoneditor-first');\r\n\t }\r\n\r\n\t if (this.append) {\r\n\t this.append.setSelected(selected);\r\n\t }\r\n\r\n\t if (this.childs) {\r\n\t this.childs.forEach(function (child) {\r\n\t child.setSelected(selected);\r\n\t });\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Update the value of the node. Only primitive types are allowed, no Object\r\n\t * or Array is allowed.\r\n\t * @param {String | Number | Boolean | null} value\r\n\t */\r\n\tNode.prototype.updateValue = function (value) {\r\n\t this.value = value;\r\n\t this.updateDom();\r\n\t};\r\n\r\n\t/**\r\n\t * Update the field of the node.\r\n\t * @param {String} field\r\n\t */\r\n\tNode.prototype.updateField = function (field) {\r\n\t this.field = field;\r\n\t this.updateDom();\r\n\t};\r\n\r\n\t/**\r\n\t * Update the HTML DOM, optionally recursing through the childs\r\n\t * @param {Object} [options] Available parameters:\r\n\t * {boolean} [recurse] If true, the\r\n\t * DOM of the childs will be updated recursively.\r\n\t * False by default.\r\n\t * {boolean} [updateIndexes] If true, the childs\r\n\t * indexes of the node will be updated too. False by\r\n\t * default.\r\n\t */\r\n\tNode.prototype.updateDom = function (options) {\r\n\t // update level indentation\r\n\t var domTree = this.dom.tree;\r\n\t if (domTree) {\r\n\t domTree.style.marginLeft = this.getLevel() * 24 + 'px';\r\n\t }\r\n\r\n\t // apply field to DOM\r\n\t var domField = this.dom.field;\r\n\t if (domField) {\r\n\t if (this.fieldEditable) {\r\n\t // parent is an object\r\n\t domField.contentEditable = this.editable.field;\r\n\t domField.spellcheck = false;\r\n\t domField.className = 'jsoneditor-field';\r\n\t }\r\n\t else {\r\n\t // parent is an array this is the root node\r\n\t domField.className = 'jsoneditor-readonly';\r\n\t }\r\n\r\n\t var fieldText;\r\n\t if (this.index != undefined) {\r\n\t fieldText = this.index;\r\n\t }\r\n\t else if (this.field != undefined) {\r\n\t fieldText = this.field;\r\n\t }\r\n\t else if (this._hasChilds()) {\r\n\t fieldText = this.type;\r\n\t }\r\n\t else {\r\n\t fieldText = '';\r\n\t }\r\n\t domField.innerHTML = this._escapeHTML(fieldText);\r\n\r\n\t this._updateSchema();\r\n\t }\r\n\r\n\t // apply value to DOM\r\n\t var domValue = this.dom.value;\r\n\t if (domValue) {\r\n\t var count = this.childs ? this.childs.length : 0;\r\n\t if (this.type == 'array') {\r\n\t domValue.innerHTML = '[' + count + ']';\r\n\t util.addClassName(this.dom.tr, 'jsoneditor-expandable');\r\n\t }\r\n\t else if (this.type == 'object') {\r\n\t domValue.innerHTML = '{' + count + '}';\r\n\t util.addClassName(this.dom.tr, 'jsoneditor-expandable');\r\n\t }\r\n\t else {\r\n\t domValue.innerHTML = this._escapeHTML(this.value);\r\n\t util.removeClassName(this.dom.tr, 'jsoneditor-expandable');\r\n\t }\r\n\t }\r\n\r\n\t // update field and value\r\n\t this._updateDomField();\r\n\t this._updateDomValue();\r\n\r\n\t // update childs indexes\r\n\t if (options && options.updateIndexes === true) {\r\n\t // updateIndexes is true or undefined\r\n\t this._updateDomIndexes();\r\n\t }\r\n\r\n\t if (options && options.recurse === true) {\r\n\t // recurse is true or undefined. update childs recursively\r\n\t if (this.childs) {\r\n\t this.childs.forEach(function (child) {\r\n\t child.updateDom(options);\r\n\t });\r\n\t }\r\n\t }\r\n\r\n\t // update row with append button\r\n\t if (this.append) {\r\n\t this.append.updateDom();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Locate the JSON schema of the node and check for any enum type\r\n\t * @private\r\n\t */\r\n\tNode.prototype._updateSchema = function () {\r\n\t //Locating the schema of the node and checking for any enum type\r\n\t if(this.editor && this.editor.options) {\r\n\t // find the part of the json schema matching this nodes path\r\n\t this.schema = Node._findSchema(this.editor.options.schema, this.getPath());\r\n\t if (this.schema) {\r\n\t this.enum = Node._findEnum(this.schema);\r\n\t }\r\n\t else {\r\n\t delete this.enum;\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * find an enum definition in a JSON schema, as property `enum` or inside\r\n\t * one of the schemas composites (`oneOf`, `anyOf`, `allOf`)\r\n\t * @param {Object} schema\r\n\t * @return {Array | null} Returns the enum when found, null otherwise.\r\n\t * @private\r\n\t */\r\n\tNode._findEnum = function (schema) {\r\n\t if (schema.enum) {\r\n\t return schema.enum;\r\n\t }\r\n\r\n\t var composite = schema.oneOf || schema.anyOf || schema.allOf;\r\n\t if (composite) {\r\n\t var match = composite.filter(function (entry) {return entry.enum});\r\n\t if (match.length > 0) {\r\n\t return match[0].enum;\r\n\t }\r\n\t }\r\n\r\n\t return null\r\n\t};\r\n\r\n\t/**\r\n\t * Return the part of a JSON schema matching given path.\r\n\t * @param {Object} schema\r\n\t * @param {Array.<string | number>} path\r\n\t * @return {Object | null}\r\n\t * @private\r\n\t */\r\n\tNode._findSchema = function (schema, path) {\r\n\t var childSchema = schema;\r\n\r\n\t for (var i = 0; i < path.length && childSchema; i++) {\r\n\t var key = path[i];\r\n\t if (typeof key === 'string' && childSchema.properties) {\r\n\t childSchema = childSchema.properties[key] || null\r\n\t }\r\n\t else if (typeof key === 'number' && childSchema.items) {\r\n\t childSchema = childSchema.items\r\n\t }\r\n\t }\r\n\r\n\t return childSchema\r\n\t};\r\n\r\n\t/**\r\n\t * Update the DOM of the childs of a node: update indexes and undefined field\r\n\t * names.\r\n\t * Only applicable when structure is an array or object\r\n\t * @private\r\n\t */\r\n\tNode.prototype._updateDomIndexes = function () {\r\n\t var domValue = this.dom.value;\r\n\t var childs = this.childs;\r\n\t if (domValue && childs) {\r\n\t if (this.type == 'array') {\r\n\t childs.forEach(function (child, index) {\r\n\t child.index = index;\r\n\t var childField = child.dom.field;\r\n\t if (childField) {\r\n\t childField.innerHTML = index;\r\n\t }\r\n\t });\r\n\t }\r\n\t else if (this.type == 'object') {\r\n\t childs.forEach(function (child) {\r\n\t if (child.index != undefined) {\r\n\t delete child.index;\r\n\r\n\t if (child.field == undefined) {\r\n\t child.field = '';\r\n\t }\r\n\t }\r\n\t });\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Create an editable value\r\n\t * @private\r\n\t */\r\n\tNode.prototype._createDomValue = function () {\r\n\t var domValue;\r\n\r\n\t if (this.type == 'array') {\r\n\t domValue = document.createElement('div');\r\n\t domValue.innerHTML = '[...]';\r\n\t }\r\n\t else if (this.type == 'object') {\r\n\t domValue = document.createElement('div');\r\n\t domValue.innerHTML = '{...}';\r\n\t }\r\n\t else {\r\n\t if (!this.editable.value && util.isUrl(this.value)) {\r\n\t // create a link in case of read-only editor and value containing an url\r\n\t domValue = document.createElement('a');\r\n\t domValue.href = this.value;\r\n\t domValue.target = '_blank';\r\n\t domValue.innerHTML = this._escapeHTML(this.value);\r\n\t }\r\n\t else {\r\n\t // create an editable or read-only div\r\n\t domValue = document.createElement('div');\r\n\t domValue.contentEditable = this.editable.value;\r\n\t domValue.spellcheck = false;\r\n\t domValue.innerHTML = this._escapeHTML(this.value);\r\n\t }\r\n\t }\r\n\r\n\t return domValue;\r\n\t};\r\n\r\n\t/**\r\n\t * Create an expand/collapse button\r\n\t * @return {Element} expand\r\n\t * @private\r\n\t */\r\n\tNode.prototype._createDomExpandButton = function () {\r\n\t // create expand button\r\n\t var expand = document.createElement('button');\r\n\t expand.type = 'button';\r\n\t if (this._hasChilds()) {\r\n\t expand.className = this.expanded ? 'jsoneditor-expanded' : 'jsoneditor-collapsed';\r\n\t expand.title =\r\n\t 'Click to expand/collapse this field (Ctrl+E). \\n' +\r\n\t 'Ctrl+Click to expand/collapse including all childs.';\r\n\t }\r\n\t else {\r\n\t expand.className = 'jsoneditor-invisible';\r\n\t expand.title = '';\r\n\t }\r\n\r\n\t return expand;\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Create a DOM tree element, containing the expand/collapse button\r\n\t * @return {Element} domTree\r\n\t * @private\r\n\t */\r\n\tNode.prototype._createDomTree = function () {\r\n\t var dom = this.dom;\r\n\t var domTree = document.createElement('table');\r\n\t var tbody = document.createElement('tbody');\r\n\t domTree.style.borderCollapse = 'collapse'; // TODO: put in css\r\n\t domTree.className = 'jsoneditor-values';\r\n\t domTree.appendChild(tbody);\r\n\t var tr = document.createElement('tr');\r\n\t tbody.appendChild(tr);\r\n\r\n\t // create expand button\r\n\t var tdExpand = document.createElement('td');\r\n\t tdExpand.className = 'jsoneditor-tree';\r\n\t tr.appendChild(tdExpand);\r\n\t dom.expand = this._createDomExpandButton();\r\n\t tdExpand.appendChild(dom.expand);\r\n\t dom.tdExpand = tdExpand;\r\n\r\n\t // create the field\r\n\t var tdField = document.createElement('td');\r\n\t tdField.className = 'jsoneditor-tree';\r\n\t tr.appendChild(tdField);\r\n\t dom.field = this._createDomField();\r\n\t tdField.appendChild(dom.field);\r\n\t dom.tdField = tdField;\r\n\r\n\t // create a separator\r\n\t var tdSeparator = document.createElement('td');\r\n\t tdSeparator.className = 'jsoneditor-tree';\r\n\t tr.appendChild(tdSeparator);\r\n\t if (this.type != 'object' && this.type != 'array') {\r\n\t tdSeparator.appendChild(document.createTextNode(':'));\r\n\t tdSeparator.className = 'jsoneditor-separator';\r\n\t }\r\n\t dom.tdSeparator = tdSeparator;\r\n\r\n\t // create the value\r\n\t var tdValue = document.createElement('td');\r\n\t tdValue.className = 'jsoneditor-tree';\r\n\t tr.appendChild(tdValue);\r\n\t dom.value = this._createDomValue();\r\n\t tdValue.appendChild(dom.value);\r\n\t dom.tdValue = tdValue;\r\n\r\n\t return domTree;\r\n\t};\r\n\r\n\t/**\r\n\t * Handle an event. The event is caught centrally by the editor\r\n\t * @param {Event} event\r\n\t */\r\n\tNode.prototype.onEvent = function (event) {\r\n\t var type = event.type,\r\n\t target = event.target || event.srcElement,\r\n\t dom = this.dom,\r\n\t node = this,\r\n\t expandable = this._hasChilds();\r\n\r\n\t // check if mouse is on menu or on dragarea.\r\n\t // If so, highlight current row and its childs\r\n\t if (target == dom.drag || target == dom.menu) {\r\n\t if (type == 'mouseover') {\r\n\t this.editor.highlighter.highlight(this);\r\n\t }\r\n\t else if (type == 'mouseout') {\r\n\t this.editor.highlighter.unhighlight();\r\n\t }\r\n\t }\r\n\r\n\t // context menu events\r\n\t if (type == 'click' && target == dom.menu) {\r\n\t var highlighter = node.editor.highlighter;\r\n\t highlighter.highlight(node);\r\n\t highlighter.lock();\r\n\t util.addClassName(dom.menu, 'jsoneditor-selected');\r\n\t this.showContextMenu(dom.menu, function () {\r\n\t util.removeClassName(dom.menu, 'jsoneditor-selected');\r\n\t highlighter.unlock();\r\n\t highlighter.unhighlight();\r\n\t });\r\n\t }\r\n\r\n\t // expand events\r\n\t if (type == 'click') {\r\n\t if (target == dom.expand ||\r\n\t ((node.editor.options.mode === 'view' || node.editor.options.mode === 'form') && target.nodeName === 'DIV')) {\r\n\t if (expandable) {\r\n\t var recurse = event.ctrlKey; // with ctrl-key, expand/collapse all\r\n\t this._onExpand(recurse);\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t // swap the value of a boolean when the checkbox displayed left is clicked\r\n\t if (type == 'change' && target == dom.checkbox) {\r\n\t this.dom.value.innerHTML = !this.value;\r\n\t this._getDomValue();\r\n\t }\r\n\r\n\t // update the value of the node based on the selected option\r\n\t if (type == 'change' && target == dom.select) {\r\n\t this.dom.value.innerHTML = dom.select.value;\r\n\t this._getDomValue();\r\n\t this._updateDomValue();\r\n\t }\r\n\r\n\t // value events\r\n\t var domValue = dom.value;\r\n\t if (target == domValue) {\r\n\t //noinspection FallthroughInSwitchStatementJS\r\n\t switch (type) {\r\n\t case 'blur':\r\n\t case 'change':\r\n\t this._getDomValue(true);\r\n\t this._updateDomValue();\r\n\t if (this.value) {\r\n\t domValue.innerHTML = this._escapeHTML(this.value);\r\n\t }\r\n\t break;\r\n\r\n\t case 'input':\r\n\t //this._debouncedGetDomValue(true); // TODO\r\n\t this._getDomValue(true);\r\n\t this._updateDomValue();\r\n\t break;\r\n\r\n\t case 'keydown':\r\n\t case 'mousedown':\r\n\t // TODO: cleanup\r\n\t this.editor.selection = this.editor.getSelection();\r\n\t break;\r\n\r\n\t case 'click':\r\n\t if (event.ctrlKey || !this.editable.value) {\r\n\t if (util.isUrl(this.value)) {\r\n\t window.open(this.value, '_blank');\r\n\t }\r\n\t }\r\n\t break;\r\n\r\n\t case 'keyup':\r\n\t //this._debouncedGetDomValue(true); // TODO\r\n\t this._getDomValue(true);\r\n\t this._updateDomValue();\r\n\t break;\r\n\r\n\t case 'cut':\r\n\t case 'paste':\r\n\t setTimeout(function () {\r\n\t node._getDomValue(true);\r\n\t node._updateDomValue();\r\n\t }, 1);\r\n\t break;\r\n\t }\r\n\t }\r\n\r\n\t // field events\r\n\t var domField = dom.field;\r\n\t if (target == domField) {\r\n\t switch (type) {\r\n\t case 'blur':\r\n\t case 'change':\r\n\t this._getDomField(true);\r\n\t this._updateDomField();\r\n\t if (this.field) {\r\n\t domField.innerHTML = this._escapeHTML(this.field);\r\n\t }\r\n\t break;\r\n\r\n\t case 'input':\r\n\t this._getDomField(true);\r\n\t this._updateSchema();\r\n\t this._updateDomField();\r\n\t this._updateDomValue();\r\n\t break;\r\n\r\n\t case 'keydown':\r\n\t case 'mousedown':\r\n\t this.editor.selection = this.editor.getSelection();\r\n\t break;\r\n\r\n\t case 'keyup':\r\n\t this._getDomField(true);\r\n\t this._updateDomField();\r\n\t break;\r\n\r\n\t case 'cut':\r\n\t case 'paste':\r\n\t setTimeout(function () {\r\n\t node._getDomField(true);\r\n\t node._updateDomField();\r\n\t }, 1);\r\n\t break;\r\n\t }\r\n\t }\r\n\r\n\t // focus\r\n\t // when clicked in whitespace left or right from the field or value, set focus\r\n\t var domTree = dom.tree;\r\n\t if (target == domTree.parentNode && type == 'click' && !event.hasMoved) {\r\n\t var left = (event.offsetX != undefined) ?\r\n\t (event.offsetX < (this.getLevel() + 1) * 24) :\r\n\t (event.pageX < util.getAbsoluteLeft(dom.tdSeparator));// for FF\r\n\t if (left || expandable) {\r\n\t // node is expandable when it is an object or array\r\n\t if (domField) {\r\n\t util.setEndOfContentEditable(domField);\r\n\t domField.focus();\r\n\t }\r\n\t }\r\n\t else {\r\n\t if (domValue && !this.enum) {\r\n\t util.setEndOfContentEditable(domValue);\r\n\t domValue.focus();\r\n\t }\r\n\t }\r\n\t }\r\n\t if (((target == dom.tdExpand && !expandable) || target == dom.tdField || target == dom.tdSeparator) &&\r\n\t (type == 'click' && !event.hasMoved)) {\r\n\t if (domField) {\r\n\t util.setEndOfContentEditable(domField);\r\n\t domField.focus();\r\n\t }\r\n\t }\r\n\r\n\t if (type == 'keydown') {\r\n\t this.onKeyDown(event);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Key down event handler\r\n\t * @param {Event} event\r\n\t */\r\n\tNode.prototype.onKeyDown = function (event) {\r\n\t var keynum = event.which || event.keyCode;\r\n\t var target = event.target || event.srcElement;\r\n\t var ctrlKey = event.ctrlKey;\r\n\t var shiftKey = event.shiftKey;\r\n\t var altKey = event.altKey;\r\n\t var handled = false;\r\n\t var prevNode, nextNode, nextDom, nextDom2;\r\n\t var editable = this.editor.options.mode === 'tree';\r\n\t var oldSelection;\r\n\t var oldBeforeNode;\r\n\t var nodes;\r\n\t var multiselection;\r\n\t var selectedNodes = this.editor.multiselection.nodes.length > 0\r\n\t ? this.editor.multiselection.nodes\r\n\t : [this];\r\n\t var firstNode = selectedNodes[0];\r\n\t var lastNode = selectedNodes[selectedNodes.length - 1];\r\n\r\n\t // console.log(ctrlKey, keynum, event.charCode); // TODO: cleanup\r\n\t if (keynum == 13) { // Enter\r\n\t if (target == this.dom.value) {\r\n\t if (!this.editable.value || event.ctrlKey) {\r\n\t if (util.isUrl(this.value)) {\r\n\t window.open(this.value, '_blank');\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t }\r\n\t else if (target == this.dom.expand) {\r\n\t var expandable = this._hasChilds();\r\n\t if (expandable) {\r\n\t var recurse = event.ctrlKey; // with ctrl-key, expand/collapse all\r\n\t this._onExpand(recurse);\r\n\t target.focus();\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t }\r\n\t else if (keynum == 68) { // D\r\n\t if (ctrlKey && editable) { // Ctrl+D\r\n\t Node.onDuplicate(selectedNodes);\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 69) { // E\r\n\t if (ctrlKey) { // Ctrl+E and Ctrl+Shift+E\r\n\t this._onExpand(shiftKey); // recurse = shiftKey\r\n\t target.focus(); // TODO: should restore focus in case of recursing expand (which takes DOM offline)\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 77 && editable) { // M\r\n\t if (ctrlKey) { // Ctrl+M\r\n\t this.showContextMenu(target);\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 46 && editable) { // Del\r\n\t if (ctrlKey) { // Ctrl+Del\r\n\t Node.onRemove(selectedNodes);\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 45 && editable) { // Ins\r\n\t if (ctrlKey && !shiftKey) { // Ctrl+Ins\r\n\t this._onInsertBefore();\r\n\t handled = true;\r\n\t }\r\n\t else if (ctrlKey && shiftKey) { // Ctrl+Shift+Ins\r\n\t this._onInsertAfter();\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 35) { // End\r\n\t if (altKey) { // Alt+End\r\n\t // find the last node\r\n\t var endNode = this._lastNode();\r\n\t if (endNode) {\r\n\t endNode.focus(Node.focusElement || this._getElementName(target));\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 36) { // Home\r\n\t if (altKey) { // Alt+Home\r\n\t // find the first node\r\n\t var homeNode = this._firstNode();\r\n\t if (homeNode) {\r\n\t homeNode.focus(Node.focusElement || this._getElementName(target));\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 37) { // Arrow Left\r\n\t if (altKey && !shiftKey) { // Alt + Arrow Left\r\n\t // move to left element\r\n\t var prevElement = this._previousElement(target);\r\n\t if (prevElement) {\r\n\t this.focus(this._getElementName(prevElement));\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (altKey && shiftKey && editable) { // Alt + Shift + Arrow left\r\n\t if (lastNode.expanded) {\r\n\t var appendDom = lastNode.getAppend();\r\n\t nextDom = appendDom ? appendDom.nextSibling : undefined;\r\n\t }\r\n\t else {\r\n\t var dom = lastNode.getDom();\r\n\t nextDom = dom.nextSibling;\r\n\t }\r\n\t if (nextDom) {\r\n\t nextNode = Node.getNodeFromTarget(nextDom);\r\n\t nextDom2 = nextDom.nextSibling;\r\n\t nextNode2 = Node.getNodeFromTarget(nextDom2);\r\n\t if (nextNode && nextNode instanceof AppendNode &&\r\n\t !(lastNode.parent.childs.length == 1) &&\r\n\t nextNode2 && nextNode2.parent) {\r\n\t oldSelection = this.editor.getSelection();\r\n\t oldBeforeNode = lastNode._nextSibling();\r\n\r\n\t selectedNodes.forEach(function (node) {\r\n\t nextNode2.parent.moveBefore(node, nextNode2);\r\n\t });\r\n\t this.focus(Node.focusElement || this._getElementName(target));\r\n\r\n\t this.editor._onAction('moveNodes', {\r\n\t nodes: selectedNodes,\r\n\t oldBeforeNode: oldBeforeNode,\r\n\t newBeforeNode: nextNode2,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: this.editor.getSelection()\r\n\t });\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t else if (keynum == 38) { // Arrow Up\r\n\t if (altKey && !shiftKey) { // Alt + Arrow Up\r\n\t // find the previous node\r\n\t prevNode = this._previousNode();\r\n\t if (prevNode) {\r\n\t this.editor.deselect(true);\r\n\t prevNode.focus(Node.focusElement || this._getElementName(target));\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (!altKey && ctrlKey && shiftKey && editable) { // Ctrl + Shift + Arrow Up\r\n\t // select multiple nodes\r\n\t prevNode = this._previousNode();\r\n\t if (prevNode) {\r\n\t multiselection = this.editor.multiselection;\r\n\t multiselection.start = multiselection.start || this;\r\n\t multiselection.end = prevNode;\r\n\t nodes = this.editor._findTopLevelNodes(multiselection.start, multiselection.end);\r\n\r\n\t this.editor.select(nodes);\r\n\t prevNode.focus('field'); // select field as we know this always exists\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (altKey && shiftKey && editable) { // Alt + Shift + Arrow Up\r\n\t // find the previous node\r\n\t prevNode = firstNode._previousNode();\r\n\t if (prevNode && prevNode.parent) {\r\n\t oldSelection = this.editor.getSelection();\r\n\t oldBeforeNode = lastNode._nextSibling();\r\n\r\n\t selectedNodes.forEach(function (node) {\r\n\t prevNode.parent.moveBefore(node, prevNode);\r\n\t });\r\n\t this.focus(Node.focusElement || this._getElementName(target));\r\n\r\n\t this.editor._onAction('moveNodes', {\r\n\t nodes: selectedNodes,\r\n\t oldBeforeNode: oldBeforeNode,\r\n\t newBeforeNode: prevNode,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: this.editor.getSelection()\r\n\t });\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\t else if (keynum == 39) { // Arrow Right\r\n\t if (altKey && !shiftKey) { // Alt + Arrow Right\r\n\t // move to right element\r\n\t var nextElement = this._nextElement(target);\r\n\t if (nextElement) {\r\n\t this.focus(this._getElementName(nextElement));\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (altKey && shiftKey && editable) { // Alt + Shift + Arrow Right\r\n\t dom = firstNode.getDom();\r\n\t var prevDom = dom.previousSibling;\r\n\t if (prevDom) {\r\n\t prevNode = Node.getNodeFromTarget(prevDom);\r\n\t if (prevNode && prevNode.parent &&\r\n\t (prevNode instanceof AppendNode)\r\n\t && !prevNode.isVisible()) {\r\n\t oldSelection = this.editor.getSelection();\r\n\t oldBeforeNode = lastNode._nextSibling();\r\n\r\n\t selectedNodes.forEach(function (node) {\r\n\t prevNode.parent.moveBefore(node, prevNode);\r\n\t });\r\n\t this.focus(Node.focusElement || this._getElementName(target));\r\n\r\n\t this.editor._onAction('moveNodes', {\r\n\t nodes: selectedNodes,\r\n\t oldBeforeNode: oldBeforeNode,\r\n\t newBeforeNode: prevNode,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: this.editor.getSelection()\r\n\t });\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t else if (keynum == 40) { // Arrow Down\r\n\t if (altKey && !shiftKey) { // Alt + Arrow Down\r\n\t // find the next node\r\n\t nextNode = this._nextNode();\r\n\t if (nextNode) {\r\n\t this.editor.deselect(true);\r\n\t nextNode.focus(Node.focusElement || this._getElementName(target));\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (!altKey && ctrlKey && shiftKey && editable) { // Ctrl + Shift + Arrow Down\r\n\t // select multiple nodes\r\n\t nextNode = this._nextNode();\r\n\t if (nextNode) {\r\n\t multiselection = this.editor.multiselection;\r\n\t multiselection.start = multiselection.start || this;\r\n\t multiselection.end = nextNode;\r\n\t nodes = this.editor._findTopLevelNodes(multiselection.start, multiselection.end);\r\n\r\n\t this.editor.select(nodes);\r\n\t nextNode.focus('field'); // select field as we know this always exists\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t else if (altKey && shiftKey && editable) { // Alt + Shift + Arrow Down\r\n\t // find the 2nd next node and move before that one\r\n\t if (lastNode.expanded) {\r\n\t nextNode = lastNode.append ? lastNode.append._nextNode() : undefined;\r\n\t }\r\n\t else {\r\n\t nextNode = lastNode._nextNode();\r\n\t }\r\n\t var nextNode2 = nextNode && (nextNode._nextNode() || nextNode.parent.append);\r\n\t if (nextNode2 && nextNode2.parent) {\r\n\t oldSelection = this.editor.getSelection();\r\n\t oldBeforeNode = lastNode._nextSibling();\r\n\r\n\t selectedNodes.forEach(function (node) {\r\n\t nextNode2.parent.moveBefore(node, nextNode2);\r\n\t });\r\n\t this.focus(Node.focusElement || this._getElementName(target));\r\n\r\n\t this.editor._onAction('moveNodes', {\r\n\t nodes: selectedNodes,\r\n\t oldBeforeNode: oldBeforeNode,\r\n\t newBeforeNode: nextNode2,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: this.editor.getSelection()\r\n\t });\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\t }\r\n\r\n\t if (handled) {\r\n\t event.preventDefault();\r\n\t event.stopPropagation();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Handle the expand event, when clicked on the expand button\r\n\t * @param {boolean} recurse If true, child nodes will be expanded too\r\n\t * @private\r\n\t */\r\n\tNode.prototype._onExpand = function (recurse) {\r\n\t if (recurse) {\r\n\t // Take the table offline\r\n\t var table = this.dom.tr.parentNode; // TODO: not nice to access the main table like this\r\n\t var frame = table.parentNode;\r\n\t var scrollTop = frame.scrollTop;\r\n\t frame.removeChild(table);\r\n\t }\r\n\r\n\t if (this.expanded) {\r\n\t this.collapse(recurse);\r\n\t }\r\n\t else {\r\n\t this.expand(recurse);\r\n\t }\r\n\r\n\t if (recurse) {\r\n\t // Put the table online again\r\n\t frame.appendChild(table);\r\n\t frame.scrollTop = scrollTop;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Remove nodes\r\n\t * @param {Node[] | Node} nodes\r\n\t */\r\n\tNode.onRemove = function(nodes) {\r\n\t if (!Array.isArray(nodes)) {\r\n\t return Node.onRemove([nodes]);\r\n\t }\r\n\r\n\t if (nodes && nodes.length > 0) {\r\n\t var firstNode = nodes[0];\r\n\t var parent = firstNode.parent;\r\n\t var editor = firstNode.editor;\r\n\t var firstIndex = firstNode.getIndex();\r\n\t editor.highlighter.unhighlight();\r\n\r\n\t // adjust the focus\r\n\t var oldSelection = editor.getSelection();\r\n\t Node.blurNodes(nodes);\r\n\t var newSelection = editor.getSelection();\r\n\r\n\t // remove the nodes\r\n\t nodes.forEach(function (node) {\r\n\t node.parent._remove(node);\r\n\t });\r\n\r\n\t // store history action\r\n\t editor._onAction('removeNodes', {\r\n\t nodes: nodes.slice(0), // store a copy of the array!\r\n\t parent: parent,\r\n\t index: firstIndex,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\t }\r\n\t};\r\n\r\n\r\n\t/**\r\n\t * Duplicate nodes\r\n\t * duplicated nodes will be added right after the original nodes\r\n\t * @param {Node[] | Node} nodes\r\n\t */\r\n\tNode.onDuplicate = function(nodes) {\r\n\t if (!Array.isArray(nodes)) {\r\n\t return Node.onDuplicate([nodes]);\r\n\t }\r\n\r\n\t if (nodes && nodes.length > 0) {\r\n\t var lastNode = nodes[nodes.length - 1];\r\n\t var parent = lastNode.parent;\r\n\t var editor = lastNode.editor;\r\n\r\n\t editor.deselect(editor.multiselection.nodes);\r\n\r\n\t // duplicate the nodes\r\n\t var oldSelection = editor.getSelection();\r\n\t var afterNode = lastNode;\r\n\t var clones = nodes.map(function (node) {\r\n\t var clone = node.clone();\r\n\t parent.insertAfter(clone, afterNode);\r\n\t afterNode = clone;\r\n\t return clone;\r\n\t });\r\n\r\n\t // set selection to the duplicated nodes\r\n\t if (nodes.length === 1) {\r\n\t clones[0].focus();\r\n\t }\r\n\t else {\r\n\t editor.select(clones);\r\n\t }\r\n\t var newSelection = editor.getSelection();\r\n\r\n\t editor._onAction('duplicateNodes', {\r\n\t afterNode: lastNode,\r\n\t nodes: clones,\r\n\t parent: parent,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Handle insert before event\r\n\t * @param {String} [field]\r\n\t * @param {*} [value]\r\n\t * @param {String} [type] Can be 'auto', 'array', 'object', or 'string'\r\n\t * @private\r\n\t */\r\n\tNode.prototype._onInsertBefore = function (field, value, type) {\r\n\t var oldSelection = this.editor.getSelection();\r\n\r\n\t var newNode = new Node(this.editor, {\r\n\t field: (field != undefined) ? field : '',\r\n\t value: (value != undefined) ? value : '',\r\n\t type: type\r\n\t });\r\n\t newNode.expand(true);\r\n\t this.parent.insertBefore(newNode, this);\r\n\t this.editor.highlighter.unhighlight();\r\n\t newNode.focus('field');\r\n\t var newSelection = this.editor.getSelection();\r\n\r\n\t this.editor._onAction('insertBeforeNodes', {\r\n\t nodes: [newNode],\r\n\t beforeNode: this,\r\n\t parent: this.parent,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\t};\r\n\r\n\t/**\r\n\t * Handle insert after event\r\n\t * @param {String} [field]\r\n\t * @param {*} [value]\r\n\t * @param {String} [type] Can be 'auto', 'array', 'object', or 'string'\r\n\t * @private\r\n\t */\r\n\tNode.prototype._onInsertAfter = function (field, value, type) {\r\n\t var oldSelection = this.editor.getSelection();\r\n\r\n\t var newNode = new Node(this.editor, {\r\n\t field: (field != undefined) ? field : '',\r\n\t value: (value != undefined) ? value : '',\r\n\t type: type\r\n\t });\r\n\t newNode.expand(true);\r\n\t this.parent.insertAfter(newNode, this);\r\n\t this.editor.highlighter.unhighlight();\r\n\t newNode.focus('field');\r\n\t var newSelection = this.editor.getSelection();\r\n\r\n\t this.editor._onAction('insertAfterNodes', {\r\n\t nodes: [newNode],\r\n\t afterNode: this,\r\n\t parent: this.parent,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\t};\r\n\r\n\t/**\r\n\t * Handle append event\r\n\t * @param {String} [field]\r\n\t * @param {*} [value]\r\n\t * @param {String} [type] Can be 'auto', 'array', 'object', or 'string'\r\n\t * @private\r\n\t */\r\n\tNode.prototype._onAppend = function (field, value, type) {\r\n\t var oldSelection = this.editor.getSelection();\r\n\r\n\t var newNode = new Node(this.editor, {\r\n\t field: (field != undefined) ? field : '',\r\n\t value: (value != undefined) ? value : '',\r\n\t type: type\r\n\t });\r\n\t newNode.expand(true);\r\n\t this.parent.appendChild(newNode);\r\n\t this.editor.highlighter.unhighlight();\r\n\t newNode.focus('field');\r\n\t var newSelection = this.editor.getSelection();\r\n\r\n\t this.editor._onAction('appendNodes', {\r\n\t nodes: [newNode],\r\n\t parent: this.parent,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\t};\r\n\r\n\t/**\r\n\t * Change the type of the node's value\r\n\t * @param {String} newType\r\n\t * @private\r\n\t */\r\n\tNode.prototype._onChangeType = function (newType) {\r\n\t var oldType = this.type;\r\n\t if (newType != oldType) {\r\n\t var oldSelection = this.editor.getSelection();\r\n\t this.changeType(newType);\r\n\t var newSelection = this.editor.getSelection();\r\n\r\n\t this.editor._onAction('changeType', {\r\n\t node: this,\r\n\t oldType: oldType,\r\n\t newType: newType,\r\n\t oldSelection: oldSelection,\r\n\t newSelection: newSelection\r\n\t });\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Sort the child's of the node. Only applicable when the node has type 'object'\r\n\t * or 'array'.\r\n\t * @param {String} direction Sorting direction. Available values: \"asc\", \"desc\"\r\n\t * @private\r\n\t */\r\n\tNode.prototype.sort = function (direction) {\r\n\t if (!this._hasChilds()) {\r\n\t return;\r\n\t }\r\n\r\n\t var order = (direction == 'desc') ? -1 : 1;\r\n\t var prop = (this.type == 'array') ? 'value': 'field';\r\n\t this.hideChilds();\r\n\r\n\t var oldChilds = this.childs;\r\n\t var oldSortOrder = this.sortOrder;\r\n\r\n\t // copy the array (the old one will be kept for an undo action\r\n\t this.childs = this.childs.concat();\r\n\r\n\t // sort the arrays\r\n\t this.childs.sort(function (a, b) {\r\n\t return order * naturalSort(a[prop], b[prop]);\r\n\t });\r\n\t this.sortOrder = (order == 1) ? 'asc' : 'desc';\r\n\r\n\t this.editor._onAction('sort', {\r\n\t node: this,\r\n\t oldChilds: oldChilds,\r\n\t oldSort: oldSortOrder,\r\n\t newChilds: this.childs,\r\n\t newSort: this.sortOrder\r\n\t });\r\n\r\n\t this.showChilds();\r\n\t};\r\n\r\n\t/**\r\n\t * Create a table row with an append button.\r\n\t * @return {HTMLElement | undefined} buttonAppend or undefined when inapplicable\r\n\t */\r\n\tNode.prototype.getAppend = function () {\r\n\t if (!this.append) {\r\n\t this.append = new AppendNode(this.editor);\r\n\t this.append.setParent(this);\r\n\t }\r\n\t return this.append.getDom();\r\n\t};\r\n\r\n\t/**\r\n\t * Find the node from an event target\r\n\t * @param {Node} target\r\n\t * @return {Node | undefined} node or undefined when not found\r\n\t * @static\r\n\t */\r\n\tNode.getNodeFromTarget = function (target) {\r\n\t while (target) {\r\n\t if (target.node) {\r\n\t return target.node;\r\n\t }\r\n\t target = target.parentNode;\r\n\t }\r\n\r\n\t return undefined;\r\n\t};\r\n\r\n\t/**\r\n\t * Remove the focus of given nodes, and move the focus to the (a) node before,\r\n\t * (b) the node after, or (c) the parent node.\r\n\t * @param {Array.<Node> | Node} nodes\r\n\t */\r\n\tNode.blurNodes = function (nodes) {\r\n\t if (!Array.isArray(nodes)) {\r\n\t Node.blurNodes([nodes]);\r\n\t return;\r\n\t }\r\n\r\n\t var firstNode = nodes[0];\r\n\t var parent = firstNode.parent;\r\n\t var firstIndex = firstNode.getIndex();\r\n\r\n\t if (parent.childs[firstIndex + nodes.length]) {\r\n\t parent.childs[firstIndex + nodes.length].focus();\r\n\t }\r\n\t else if (parent.childs[firstIndex - 1]) {\r\n\t parent.childs[firstIndex - 1].focus();\r\n\t }\r\n\t else {\r\n\t parent.focus();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the next sibling of current node\r\n\t * @return {Node} nextSibling\r\n\t * @private\r\n\t */\r\n\tNode.prototype._nextSibling = function () {\r\n\t var index = this.parent.childs.indexOf(this);\r\n\t return this.parent.childs[index + 1] || this.parent.append;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the previously rendered node\r\n\t * @return {Node | null} previousNode\r\n\t * @private\r\n\t */\r\n\tNode.prototype._previousNode = function () {\r\n\t var prevNode = null;\r\n\t var dom = this.getDom();\r\n\t if (dom && dom.parentNode) {\r\n\t // find the previous field\r\n\t var prevDom = dom;\r\n\t do {\r\n\t prevDom = prevDom.previousSibling;\r\n\t prevNode = Node.getNodeFromTarget(prevDom);\r\n\t }\r\n\t while (prevDom && (prevNode instanceof AppendNode && !prevNode.isVisible()));\r\n\t }\r\n\t return prevNode;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the next rendered node\r\n\t * @return {Node | null} nextNode\r\n\t * @private\r\n\t */\r\n\tNode.prototype._nextNode = function () {\r\n\t var nextNode = null;\r\n\t var dom = this.getDom();\r\n\t if (dom && dom.parentNode) {\r\n\t // find the previous field\r\n\t var nextDom = dom;\r\n\t do {\r\n\t nextDom = nextDom.nextSibling;\r\n\t nextNode = Node.getNodeFromTarget(nextDom);\r\n\t }\r\n\t while (nextDom && (nextNode instanceof AppendNode && !nextNode.isVisible()));\r\n\t }\r\n\r\n\t return nextNode;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the first rendered node\r\n\t * @return {Node | null} firstNode\r\n\t * @private\r\n\t */\r\n\tNode.prototype._firstNode = function () {\r\n\t var firstNode = null;\r\n\t var dom = this.getDom();\r\n\t if (dom && dom.parentNode) {\r\n\t var firstDom = dom.parentNode.firstChild;\r\n\t firstNode = Node.getNodeFromTarget(firstDom);\r\n\t }\r\n\r\n\t return firstNode;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the last rendered node\r\n\t * @return {Node | null} lastNode\r\n\t * @private\r\n\t */\r\n\tNode.prototype._lastNode = function () {\r\n\t var lastNode = null;\r\n\t var dom = this.getDom();\r\n\t if (dom && dom.parentNode) {\r\n\t var lastDom = dom.parentNode.lastChild;\r\n\t lastNode = Node.getNodeFromTarget(lastDom);\r\n\t while (lastDom && (lastNode instanceof AppendNode && !lastNode.isVisible())) {\r\n\t lastDom = lastDom.previousSibling;\r\n\t lastNode = Node.getNodeFromTarget(lastDom);\r\n\t }\r\n\t }\r\n\t return lastNode;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the next element which can have focus.\r\n\t * @param {Element} elem\r\n\t * @return {Element | null} nextElem\r\n\t * @private\r\n\t */\r\n\tNode.prototype._previousElement = function (elem) {\r\n\t var dom = this.dom;\r\n\t // noinspection FallthroughInSwitchStatementJS\r\n\t switch (elem) {\r\n\t case dom.value:\r\n\t if (this.fieldEditable) {\r\n\t return dom.field;\r\n\t }\r\n\t // intentional fall through\r\n\t case dom.field:\r\n\t if (this._hasChilds()) {\r\n\t return dom.expand;\r\n\t }\r\n\t // intentional fall through\r\n\t case dom.expand:\r\n\t return dom.menu;\r\n\t case dom.menu:\r\n\t if (dom.drag) {\r\n\t return dom.drag;\r\n\t }\r\n\t // intentional fall through\r\n\t default:\r\n\t return null;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the next element which can have focus.\r\n\t * @param {Element} elem\r\n\t * @return {Element | null} nextElem\r\n\t * @private\r\n\t */\r\n\tNode.prototype._nextElement = function (elem) {\r\n\t var dom = this.dom;\r\n\t // noinspection FallthroughInSwitchStatementJS\r\n\t switch (elem) {\r\n\t case dom.drag:\r\n\t return dom.menu;\r\n\t case dom.menu:\r\n\t if (this._hasChilds()) {\r\n\t return dom.expand;\r\n\t }\r\n\t // intentional fall through\r\n\t case dom.expand:\r\n\t if (this.fieldEditable) {\r\n\t return dom.field;\r\n\t }\r\n\t // intentional fall through\r\n\t case dom.field:\r\n\t if (!this._hasChilds()) {\r\n\t return dom.value;\r\n\t }\r\n\t default:\r\n\t return null;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Get the dom name of given element. returns null if not found.\r\n\t * For example when element == dom.field, \"field\" is returned.\r\n\t * @param {Element} element\r\n\t * @return {String | null} elementName Available elements with name: 'drag',\r\n\t * 'menu', 'expand', 'field', 'value'\r\n\t * @private\r\n\t */\r\n\tNode.prototype._getElementName = function (element) {\r\n\t var dom = this.dom;\r\n\t for (var name in dom) {\r\n\t if (dom.hasOwnProperty(name)) {\r\n\t if (dom[name] == element) {\r\n\t return name;\r\n\t }\r\n\t }\r\n\t }\r\n\t return null;\r\n\t};\r\n\r\n\t/**\r\n\t * Test if this node has childs. This is the case when the node is an object\r\n\t * or array.\r\n\t * @return {boolean} hasChilds\r\n\t * @private\r\n\t */\r\n\tNode.prototype._hasChilds = function () {\r\n\t return this.type == 'array' || this.type == 'object';\r\n\t};\r\n\r\n\t// titles with explanation for the different types\r\n\tNode.TYPE_TITLES = {\r\n\t 'auto': 'Field type \"auto\". ' +\r\n\t 'The field type is automatically determined from the value ' +\r\n\t 'and can be a string, number, boolean, or null.',\r\n\t 'object': 'Field type \"object\". ' +\r\n\t 'An object contains an unordered set of key/value pairs.',\r\n\t 'array': 'Field type \"array\". ' +\r\n\t 'An array contains an ordered collection of values.',\r\n\t 'string': 'Field type \"string\". ' +\r\n\t 'Field type is not determined from the value, ' +\r\n\t 'but always returned as string.'\r\n\t};\r\n\r\n\t/**\r\n\t * Show a contextmenu for this node\r\n\t * @param {HTMLElement} anchor Anchor element to attach the context menu to\r\n\t * as sibling.\r\n\t * @param {function} [onClose] Callback method called when the context menu\r\n\t * is being closed.\r\n\t */\r\n\tNode.prototype.showContextMenu = function (anchor, onClose) {\r\n\t var node = this;\r\n\t var titles = Node.TYPE_TITLES;\r\n\t var items = [];\r\n\r\n\t if (this.editable.value) {\r\n\t items.push({\r\n\t text: 'Type',\r\n\t title: 'Change the type of this field',\r\n\t className: 'jsoneditor-type-' + this.type,\r\n\t submenu: [\r\n\t {\r\n\t text: 'Auto',\r\n\t className: 'jsoneditor-type-auto' +\r\n\t (this.type == 'auto' ? ' jsoneditor-selected' : ''),\r\n\t title: titles.auto,\r\n\t click: function () {\r\n\t node._onChangeType('auto');\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'Array',\r\n\t className: 'jsoneditor-type-array' +\r\n\t (this.type == 'array' ? ' jsoneditor-selected' : ''),\r\n\t title: titles.array,\r\n\t click: function () {\r\n\t node._onChangeType('array');\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'Object',\r\n\t className: 'jsoneditor-type-object' +\r\n\t (this.type == 'object' ? ' jsoneditor-selected' : ''),\r\n\t title: titles.object,\r\n\t click: function () {\r\n\t node._onChangeType('object');\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'String',\r\n\t className: 'jsoneditor-type-string' +\r\n\t (this.type == 'string' ? ' jsoneditor-selected' : ''),\r\n\t title: titles.string,\r\n\t click: function () {\r\n\t node._onChangeType('string');\r\n\t }\r\n\t }\r\n\t ]\r\n\t });\r\n\t }\r\n\r\n\t if (this._hasChilds()) {\r\n\t var direction = ((this.sortOrder == 'asc') ? 'desc': 'asc');\r\n\t items.push({\r\n\t text: 'Sort',\r\n\t title: 'Sort the childs of this ' + this.type,\r\n\t className: 'jsoneditor-sort-' + direction,\r\n\t click: function () {\r\n\t node.sort(direction);\r\n\t },\r\n\t submenu: [\r\n\t {\r\n\t text: 'Ascending',\r\n\t className: 'jsoneditor-sort-asc',\r\n\t title: 'Sort the childs of this ' + this.type + ' in ascending order',\r\n\t click: function () {\r\n\t node.sort('asc');\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'Descending',\r\n\t className: 'jsoneditor-sort-desc',\r\n\t title: 'Sort the childs of this ' + this.type +' in descending order',\r\n\t click: function () {\r\n\t node.sort('desc');\r\n\t }\r\n\t }\r\n\t ]\r\n\t });\r\n\t }\r\n\r\n\t if (this.parent && this.parent._hasChilds()) {\r\n\t if (items.length) {\r\n\t // create a separator\r\n\t items.push({\r\n\t 'type': 'separator'\r\n\t });\r\n\t }\r\n\r\n\t // create append button (for last child node only)\r\n\t var childs = node.parent.childs;\r\n\t if (node == childs[childs.length - 1]) {\r\n\t items.push({\r\n\t text: 'Append',\r\n\t title: 'Append a new field with type \\'auto\\' after this field (Ctrl+Shift+Ins)',\r\n\t submenuTitle: 'Select the type of the field to be appended',\r\n\t className: 'jsoneditor-append',\r\n\t click: function () {\r\n\t node._onAppend('', '', 'auto');\r\n\t },\r\n\t submenu: [\r\n\t {\r\n\t text: 'Auto',\r\n\t className: 'jsoneditor-type-auto',\r\n\t title: titles.auto,\r\n\t click: function () {\r\n\t node._onAppend('', '', 'auto');\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'Array',\r\n\t className: 'jsoneditor-type-array',\r\n\t title: titles.array,\r\n\t click: function () {\r\n\t node._onAppend('', []);\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'Object',\r\n\t className: 'jsoneditor-type-object',\r\n\t title: titles.object,\r\n\t click: function () {\r\n\t node._onAppend('', {});\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'String',\r\n\t className: 'jsoneditor-type-string',\r\n\t title: titles.string,\r\n\t click: function () {\r\n\t node._onAppend('', '', 'string');\r\n\t }\r\n\t }\r\n\t ]\r\n\t });\r\n\t }\r\n\r\n\t // create insert button\r\n\t items.push({\r\n\t text: 'Insert',\r\n\t title: 'Insert a new field with type \\'auto\\' before this field (Ctrl+Ins)',\r\n\t submenuTitle: 'Select the type of the field to be inserted',\r\n\t className: 'jsoneditor-insert',\r\n\t click: function () {\r\n\t node._onInsertBefore('', '', 'auto');\r\n\t },\r\n\t submenu: [\r\n\t {\r\n\t text: 'Auto',\r\n\t className: 'jsoneditor-type-auto',\r\n\t title: titles.auto,\r\n\t click: function () {\r\n\t node._onInsertBefore('', '', 'auto');\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'Array',\r\n\t className: 'jsoneditor-type-array',\r\n\t title: titles.array,\r\n\t click: function () {\r\n\t node._onInsertBefore('', []);\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'Object',\r\n\t className: 'jsoneditor-type-object',\r\n\t title: titles.object,\r\n\t click: function () {\r\n\t node._onInsertBefore('', {});\r\n\t }\r\n\t },\r\n\t {\r\n\t text: 'String',\r\n\t className: 'jsoneditor-type-string',\r\n\t title: titles.string,\r\n\t click: function () {\r\n\t node._onInsertBefore('', '', 'string');\r\n\t }\r\n\t }\r\n\t ]\r\n\t });\r\n\r\n\t if (this.editable.field) {\r\n\t // create duplicate button\r\n\t items.push({\r\n\t text: 'Duplicate',\r\n\t title: 'Duplicate this field (Ctrl+D)',\r\n\t className: 'jsoneditor-duplicate',\r\n\t click: function () {\r\n\t Node.onDuplicate(node);\r\n\t }\r\n\t });\r\n\r\n\t // create remove button\r\n\t items.push({\r\n\t text: 'Remove',\r\n\t title: 'Remove this field (Ctrl+Del)',\r\n\t className: 'jsoneditor-remove',\r\n\t click: function () {\r\n\t Node.onRemove(node);\r\n\t }\r\n\t });\r\n\t }\r\n\t }\r\n\r\n\t var menu = new ContextMenu(items, {close: onClose});\r\n\t menu.show(anchor, this.editor.content);\r\n\t};\r\n\r\n\t/**\r\n\t * get the type of a value\r\n\t * @param {*} value\r\n\t * @return {String} type Can be 'object', 'array', 'string', 'auto'\r\n\t * @private\r\n\t */\r\n\tNode.prototype._getType = function(value) {\r\n\t if (value instanceof Array) {\r\n\t return 'array';\r\n\t }\r\n\t if (value instanceof Object) {\r\n\t return 'object';\r\n\t }\r\n\t if (typeof(value) == 'string' && typeof(this._stringCast(value)) != 'string') {\r\n\t return 'string';\r\n\t }\r\n\r\n\t return 'auto';\r\n\t};\r\n\r\n\t/**\r\n\t * cast contents of a string to the correct type. This can be a string,\r\n\t * a number, a boolean, etc\r\n\t * @param {String} str\r\n\t * @return {*} castedStr\r\n\t * @private\r\n\t */\r\n\tNode.prototype._stringCast = function(str) {\r\n\t var lower = str.toLowerCase(),\r\n\t num = Number(str), // will nicely fail with '123ab'\r\n\t numFloat = parseFloat(str); // will nicely fail with ' '\r\n\r\n\t if (str == '') {\r\n\t return '';\r\n\t }\r\n\t else if (lower == 'null') {\r\n\t return null;\r\n\t }\r\n\t else if (lower == 'true') {\r\n\t return true;\r\n\t }\r\n\t else if (lower == 'false') {\r\n\t return false;\r\n\t }\r\n\t else if (!isNaN(num) && !isNaN(numFloat)) {\r\n\t return num;\r\n\t }\r\n\t else {\r\n\t return str;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * escape a text, such that it can be displayed safely in an HTML element\r\n\t * @param {String} text\r\n\t * @return {String} escapedText\r\n\t * @private\r\n\t */\r\n\tNode.prototype._escapeHTML = function (text) {\r\n\t if (typeof text !== 'string') {\r\n\t return String(text);\r\n\t }\r\n\t else {\r\n\t var htmlEscaped = String(text)\r\n\t .replace(/&/g, '&amp;') // must be replaced first!\r\n\t .replace(/</g, '&lt;')\r\n\t .replace(/>/g, '&gt;')\r\n\t .replace(/ /g, ' &nbsp;') // replace double space with an nbsp and space\r\n\t .replace(/^ /, '&nbsp;') // space at start\r\n\t .replace(/ $/, '&nbsp;'); // space at end\r\n\r\n\t var json = JSON.stringify(htmlEscaped);\r\n\t var html = json.substring(1, json.length - 1);\r\n\t if (this.editor.options.escapeUnicode === true) {\r\n\t html = util.escapeUnicodeChars(html);\r\n\t }\r\n\t return html;\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * unescape a string.\r\n\t * @param {String} escapedText\r\n\t * @return {String} text\r\n\t * @private\r\n\t */\r\n\tNode.prototype._unescapeHTML = function (escapedText) {\r\n\t var json = '\"' + this._escapeJSON(escapedText) + '\"';\r\n\t var htmlEscaped = util.parse(json);\r\n\r\n\t return htmlEscaped\r\n\t .replace(/&lt;/g, '<')\r\n\t .replace(/&gt;/g, '>')\r\n\t .replace(/&nbsp;|\\u00A0/g, ' ')\r\n\t .replace(/&amp;/g, '&'); // must be replaced last\r\n\t};\r\n\r\n\t/**\r\n\t * escape a text to make it a valid JSON string. The method will:\r\n\t * - replace unescaped double quotes with '\\\"'\r\n\t * - replace unescaped backslash with '\\\\'\r\n\t * - replace returns with '\\n'\r\n\t * @param {String} text\r\n\t * @return {String} escapedText\r\n\t * @private\r\n\t */\r\n\tNode.prototype._escapeJSON = function (text) {\r\n\t // TODO: replace with some smart regex (only when a new solution is faster!)\r\n\t var escaped = '';\r\n\t var i = 0;\r\n\t while (i < text.length) {\r\n\t var c = text.charAt(i);\r\n\t if (c == '\\n') {\r\n\t escaped += '\\\\n';\r\n\t }\r\n\t else if (c == '\\\\') {\r\n\t escaped += c;\r\n\t i++;\r\n\r\n\t c = text.charAt(i);\r\n\t if (c === '' || '\"\\\\/bfnrtu'.indexOf(c) == -1) {\r\n\t escaped += '\\\\'; // no valid escape character\r\n\t }\r\n\t escaped += c;\r\n\t }\r\n\t else if (c == '\"') {\r\n\t escaped += '\\\\\"';\r\n\t }\r\n\t else {\r\n\t escaped += c;\r\n\t }\r\n\t i++;\r\n\t }\r\n\r\n\t return escaped;\r\n\t};\r\n\r\n\t// TODO: find a nicer solution to resolve this circular dependency between Node and AppendNode\r\n\tvar AppendNode = appendNodeFactory(Node);\r\n\r\n\tmodule.exports = Node;\r\n\r\n\r\n/***/ },\r\n/* 59 */\r\n/***/ function(module, exports) {\r\n\r\n\t/*\r\n\t * Natural Sort algorithm for Javascript - Version 0.7 - Released under MIT license\r\n\t * Author: Jim Palmer (based on chunking idea from Dave Koelle)\r\n\t */\r\n\t/*jshint unused:false */\r\n\tmodule.exports = function naturalSort (a, b) {\r\n\t\t\"use strict\";\r\n\t\tvar re = /(^([+\\-]?(?:0|[1-9]\\d*)(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)?$|^0x[0-9a-f]+$|\\d+)/gi,\r\n\t\t\tsre = /(^[ ]*|[ ]*$)/g,\r\n\t\t\tdre = /(^([\\w ]+,?[\\w ]+)?[\\w ]+,?[\\w ]+\\d+:\\d+(:\\d+)?[\\w ]?|^\\d{1,4}[\\/\\-]\\d{1,4}[\\/\\-]\\d{1,4}|^\\w+, \\w+ \\d+, \\d{4})/,\r\n\t\t\thre = /^0x[0-9a-f]+$/i,\r\n\t\t\tore = /^0/,\r\n\t\t\ti = function(s) { return naturalSort.insensitive && ('' + s).toLowerCase() || '' + s; },\r\n\t\t\t// convert all to strings strip whitespace\r\n\t\t\tx = i(a).replace(sre, '') || '',\r\n\t\t\ty = i(b).replace(sre, '') || '',\r\n\t\t\t// chunk/tokenize\r\n\t\t\txN = x.replace(re, '\\0$1\\0').replace(/\\0$/,'').replace(/^\\0/,'').split('\\0'),\r\n\t\t\tyN = y.replace(re, '\\0$1\\0').replace(/\\0$/,'').replace(/^\\0/,'').split('\\0'),\r\n\t\t\t// numeric, hex or date detection\r\n\t\t\txD = parseInt(x.match(hre), 16) || (xN.length !== 1 && x.match(dre) && Date.parse(x)),\r\n\t\t\tyD = parseInt(y.match(hre), 16) || xD && y.match(dre) && Date.parse(y) || null,\r\n\t\t\toFxNcL, oFyNcL;\r\n\t\t// first try and sort Hex codes or Dates\r\n\t\tif (yD) {\r\n\t\t\tif ( xD < yD ) { return -1; }\r\n\t\t\telse if ( xD > yD ) { return 1; }\r\n\t\t}\r\n\t\t// natural sorting through split numeric strings and default strings\r\n\t\tfor(var cLoc=0, numS=Math.max(xN.length, yN.length); cLoc < numS; cLoc++) {\r\n\t\t\t// find floats not starting with '0', string or 0 if not defined (Clint Priest)\r\n\t\t\toFxNcL = !(xN[cLoc] || '').match(ore) && parseFloat(xN[cLoc]) || xN[cLoc] || 0;\r\n\t\t\toFyNcL = !(yN[cLoc] || '').match(ore) && parseFloat(yN[cLoc]) || yN[cLoc] || 0;\r\n\t\t\t// handle numeric vs string comparison - number < string - (Kyle Adams)\r\n\t\t\tif (isNaN(oFxNcL) !== isNaN(oFyNcL)) { return (isNaN(oFxNcL)) ? 1 : -1; }\r\n\t\t\t// rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'\r\n\t\t\telse if (typeof oFxNcL !== typeof oFyNcL) {\r\n\t\t\t\toFxNcL += '';\r\n\t\t\t\toFyNcL += '';\r\n\t\t\t}\r\n\t\t\tif (oFxNcL < oFyNcL) { return -1; }\r\n\t\t\tif (oFxNcL > oFyNcL) { return 1; }\r\n\t\t}\r\n\t\treturn 0;\r\n\t};\r\n\r\n\r\n/***/ },\r\n/* 60 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar util = __webpack_require__(54);\r\n\tvar ContextMenu = __webpack_require__(57);\r\n\r\n\t/**\r\n\t * A factory function to create an AppendNode, which depends on a Node\r\n\t * @param {Node} Node\r\n\t */\r\n\tfunction appendNodeFactory(Node) {\r\n\t /**\r\n\t * @constructor AppendNode\r\n\t * @extends Node\r\n\t * @param {TreeEditor} editor\r\n\t * Create a new AppendNode. This is a special node which is created at the\r\n\t * end of the list with childs for an object or array\r\n\t */\r\n\t function AppendNode (editor) {\r\n\t /** @type {TreeEditor} */\r\n\t this.editor = editor;\r\n\t this.dom = {};\r\n\t }\r\n\r\n\t AppendNode.prototype = new Node();\r\n\r\n\t /**\r\n\t * Return a table row with an append button.\r\n\t * @return {Element} dom TR element\r\n\t */\r\n\t AppendNode.prototype.getDom = function () {\r\n\t // TODO: implement a new solution for the append node\r\n\t var dom = this.dom;\r\n\r\n\t if (dom.tr) {\r\n\t return dom.tr;\r\n\t }\r\n\r\n\t this._updateEditability();\r\n\r\n\t // a row for the append button\r\n\t var trAppend = document.createElement('tr');\r\n\t trAppend.node = this;\r\n\t dom.tr = trAppend;\r\n\r\n\t // TODO: consistent naming\r\n\r\n\t if (this.editor.options.mode === 'tree') {\r\n\t // a cell for the dragarea column\r\n\t dom.tdDrag = document.createElement('td');\r\n\r\n\t // create context menu\r\n\t var tdMenu = document.createElement('td');\r\n\t dom.tdMenu = tdMenu;\r\n\t var menu = document.createElement('button');\r\n\t menu.type = 'button';\r\n\t menu.className = 'jsoneditor-contextmenu';\r\n\t menu.title = 'Click to open the actions menu (Ctrl+M)';\r\n\t dom.menu = menu;\r\n\t tdMenu.appendChild(dom.menu);\r\n\t }\r\n\r\n\t // a cell for the contents (showing text 'empty')\r\n\t var tdAppend = document.createElement('td');\r\n\t var domText = document.createElement('div');\r\n\t domText.innerHTML = '(empty)';\r\n\t domText.className = 'jsoneditor-readonly';\r\n\t tdAppend.appendChild(domText);\r\n\t dom.td = tdAppend;\r\n\t dom.text = domText;\r\n\r\n\t this.updateDom();\r\n\r\n\t return trAppend;\r\n\t };\r\n\r\n\t /**\r\n\t * Update the HTML dom of the Node\r\n\t */\r\n\t AppendNode.prototype.updateDom = function () {\r\n\t var dom = this.dom;\r\n\t var tdAppend = dom.td;\r\n\t if (tdAppend) {\r\n\t tdAppend.style.paddingLeft = (this.getLevel() * 24 + 26) + 'px';\r\n\t // TODO: not so nice hard coded offset\r\n\t }\r\n\r\n\t var domText = dom.text;\r\n\t if (domText) {\r\n\t domText.innerHTML = '(empty ' + this.parent.type + ')';\r\n\t }\r\n\r\n\t // attach or detach the contents of the append node:\r\n\t // hide when the parent has childs, show when the parent has no childs\r\n\t var trAppend = dom.tr;\r\n\t if (!this.isVisible()) {\r\n\t if (dom.tr.firstChild) {\r\n\t if (dom.tdDrag) {\r\n\t trAppend.removeChild(dom.tdDrag);\r\n\t }\r\n\t if (dom.tdMenu) {\r\n\t trAppend.removeChild(dom.tdMenu);\r\n\t }\r\n\t trAppend.removeChild(tdAppend);\r\n\t }\r\n\t }\r\n\t else {\r\n\t if (!dom.tr.firstChild) {\r\n\t if (dom.tdDrag) {\r\n\t trAppend.appendChild(dom.tdDrag);\r\n\t }\r\n\t if (dom.tdMenu) {\r\n\t trAppend.appendChild(dom.tdMenu);\r\n\t }\r\n\t trAppend.appendChild(tdAppend);\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t /**\r\n\t * Check whether the AppendNode is currently visible.\r\n\t * the AppendNode is visible when its parent has no childs (i.e. is empty).\r\n\t * @return {boolean} isVisible\r\n\t */\r\n\t AppendNode.prototype.isVisible = function () {\r\n\t return (this.parent.childs.length == 0);\r\n\t };\r\n\r\n\t /**\r\n\t * Show a contextmenu for this node\r\n\t * @param {HTMLElement} anchor The element to attach the menu to.\r\n\t * @param {function} [onClose] Callback method called when the context menu\r\n\t * is being closed.\r\n\t */\r\n\t AppendNode.prototype.showContextMenu = function (anchor, onClose) {\r\n\t var node = this;\r\n\t var titles = Node.TYPE_TITLES;\r\n\t var items = [\r\n\t // create append button\r\n\t {\r\n\t 'text': 'Append',\r\n\t 'title': 'Append a new field with type \\'auto\\' (Ctrl+Shift+Ins)',\r\n\t 'submenuTitle': 'Select the type of the field to be appended',\r\n\t 'className': 'jsoneditor-insert',\r\n\t 'click': function () {\r\n\t node._onAppend('', '', 'auto');\r\n\t },\r\n\t 'submenu': [\r\n\t {\r\n\t 'text': 'Auto',\r\n\t 'className': 'jsoneditor-type-auto',\r\n\t 'title': titles.auto,\r\n\t 'click': function () {\r\n\t node._onAppend('', '', 'auto');\r\n\t }\r\n\t },\r\n\t {\r\n\t 'text': 'Array',\r\n\t 'className': 'jsoneditor-type-array',\r\n\t 'title': titles.array,\r\n\t 'click': function () {\r\n\t node._onAppend('', []);\r\n\t }\r\n\t },\r\n\t {\r\n\t 'text': 'Object',\r\n\t 'className': 'jsoneditor-type-object',\r\n\t 'title': titles.object,\r\n\t 'click': function () {\r\n\t node._onAppend('', {});\r\n\t }\r\n\t },\r\n\t {\r\n\t 'text': 'String',\r\n\t 'className': 'jsoneditor-type-string',\r\n\t 'title': titles.string,\r\n\t 'click': function () {\r\n\t node._onAppend('', '', 'string');\r\n\t }\r\n\t }\r\n\t ]\r\n\t }\r\n\t ];\r\n\r\n\t var menu = new ContextMenu(items, {close: onClose});\r\n\t menu.show(anchor, this.editor.content);\r\n\t };\r\n\r\n\t /**\r\n\t * Handle an event. The event is catched centrally by the editor\r\n\t * @param {Event} event\r\n\t */\r\n\t AppendNode.prototype.onEvent = function (event) {\r\n\t var type = event.type;\r\n\t var target = event.target || event.srcElement;\r\n\t var dom = this.dom;\r\n\r\n\t // highlight the append nodes parent\r\n\t var menu = dom.menu;\r\n\t if (target == menu) {\r\n\t if (type == 'mouseover') {\r\n\t this.editor.highlighter.highlight(this.parent);\r\n\t }\r\n\t else if (type == 'mouseout') {\r\n\t this.editor.highlighter.unhighlight();\r\n\t }\r\n\t }\r\n\r\n\t // context menu events\r\n\t if (type == 'click' && target == dom.menu) {\r\n\t var highlighter = this.editor.highlighter;\r\n\t highlighter.highlight(this.parent);\r\n\t highlighter.lock();\r\n\t util.addClassName(dom.menu, 'jsoneditor-selected');\r\n\t this.showContextMenu(dom.menu, function () {\r\n\t util.removeClassName(dom.menu, 'jsoneditor-selected');\r\n\t highlighter.unlock();\r\n\t highlighter.unhighlight();\r\n\t });\r\n\t }\r\n\r\n\t if (type == 'keydown') {\r\n\t this.onKeyDown(event);\r\n\t }\r\n\t };\r\n\r\n\t return AppendNode;\r\n\t}\r\n\r\n\tmodule.exports = appendNodeFactory;\r\n\r\n\r\n/***/ },\r\n/* 61 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar ContextMenu = __webpack_require__(57);\r\n\r\n\t/**\r\n\t * Create a select box to be used in the editor menu's, which allows to switch mode\r\n\t * @param {HTMLElement} container\r\n\t * @param {String[]} modes Available modes: 'code', 'form', 'text', 'tree', 'view'\r\n\t * @param {String} current Available modes: 'code', 'form', 'text', 'tree', 'view'\r\n\t * @param {function(mode: string)} onSwitch Callback invoked on switch\r\n\t * @constructor\r\n\t */\r\n\tfunction ModeSwitcher(container, modes, current, onSwitch) {\r\n\t // available modes\r\n\t var availableModes = {\r\n\t code: {\r\n\t 'text': 'Code',\r\n\t 'title': 'Switch to code highlighter',\r\n\t 'click': function () {\r\n\t onSwitch('code')\r\n\t }\r\n\t },\r\n\t form: {\r\n\t 'text': 'Form',\r\n\t 'title': 'Switch to form editor',\r\n\t 'click': function () {\r\n\t onSwitch('form');\r\n\t }\r\n\t },\r\n\t text: {\r\n\t 'text': 'Text',\r\n\t 'title': 'Switch to plain text editor',\r\n\t 'click': function () {\r\n\t onSwitch('text');\r\n\t }\r\n\t },\r\n\t tree: {\r\n\t 'text': 'Tree',\r\n\t 'title': 'Switch to tree editor',\r\n\t 'click': function () {\r\n\t onSwitch('tree');\r\n\t }\r\n\t },\r\n\t view: {\r\n\t 'text': 'View',\r\n\t 'title': 'Switch to tree view',\r\n\t 'click': function () {\r\n\t onSwitch('view');\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t // list the selected modes\r\n\t var items = [];\r\n\t for (var i = 0; i < modes.length; i++) {\r\n\t var mode = modes[i];\r\n\t var item = availableModes[mode];\r\n\t if (!item) {\r\n\t throw new Error('Unknown mode \"' + mode + '\"');\r\n\t }\r\n\r\n\t item.className = 'jsoneditor-type-modes' + ((current == mode) ? ' jsoneditor-selected' : '');\r\n\t items.push(item);\r\n\t }\r\n\r\n\t // retrieve the title of current mode\r\n\t var currentMode = availableModes[current];\r\n\t if (!currentMode) {\r\n\t throw new Error('Unknown mode \"' + current + '\"');\r\n\t }\r\n\t var currentTitle = currentMode.text;\r\n\r\n\t // create the html element\r\n\t var box = document.createElement('button');\r\n\t box.type = 'button';\r\n\t box.className = 'jsoneditor-modes jsoneditor-separator';\r\n\t box.innerHTML = currentTitle + ' &#x25BE;';\r\n\t box.title = 'Switch editor mode';\r\n\t box.onclick = function () {\r\n\t var menu = new ContextMenu(items);\r\n\t menu.show(box);\r\n\t };\r\n\r\n\t var frame = document.createElement('div');\r\n\t frame.className = 'jsoneditor-modes';\r\n\t frame.style.position = 'relative';\r\n\t frame.appendChild(box);\r\n\r\n\t container.appendChild(frame);\r\n\r\n\t this.dom = {\r\n\t container: container,\r\n\t box: box,\r\n\t frame: frame\r\n\t };\r\n\t}\r\n\r\n\t/**\r\n\t * Set focus to switcher\r\n\t */\r\n\tModeSwitcher.prototype.focus = function () {\r\n\t this.dom.box.focus();\r\n\t};\r\n\r\n\t/**\r\n\t * Destroy the ModeSwitcher, remove from DOM\r\n\t */\r\n\tModeSwitcher.prototype.destroy = function () {\r\n\t if (this.dom && this.dom.frame && this.dom.frame.parentNode) {\r\n\t this.dom.frame.parentNode.removeChild(this.dom.frame);\r\n\t }\r\n\t this.dom = null;\r\n\t};\r\n\r\n\tmodule.exports = ModeSwitcher;\r\n\r\n\r\n/***/ },\r\n/* 62 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t'use strict';\r\n\r\n\tvar ace;\r\n\ttry {\r\n\t ace = __webpack_require__(63);\r\n\t}\r\n\tcatch (err) {\r\n\t // failed to load ace, no problem, we will fall back to plain text\r\n\t}\r\n\r\n\tvar ModeSwitcher = __webpack_require__(61);\r\n\tvar util = __webpack_require__(54);\r\n\r\n\t// create a mixin with the functions for text mode\r\n\tvar textmode = {};\r\n\r\n\tvar MAX_ERRORS = 3; // maximum number of displayed errors at the bottom\r\n\r\n\tvar DEFAULT_THEME = 'ace/theme/jsoneditor';\r\n\r\n\t/**\r\n\t * Create a text editor\r\n\t * @param {Element} container\r\n\t * @param {Object} [options] Object with options. available options:\r\n\t * {String} mode Available values:\r\n\t * \"text\" (default)\r\n\t * or \"code\".\r\n\t * {Number} indentation Number of indentation\r\n\t * spaces. 2 by default.\r\n\t * {function} onChange Callback method\r\n\t * triggered on change\r\n\t * {function} onModeChange Callback method\r\n\t * triggered after setMode\r\n\t * {Object} ace A custom instance of\r\n\t * Ace editor.\r\n\t * {boolean} escapeUnicode If true, unicode\r\n\t * characters are escaped.\r\n\t * false by default.\r\n\t * @private\r\n\t */\r\n\ttextmode.create = function (container, options) {\r\n\t // read options\r\n\t options = options || {};\r\n\t this.options = options;\r\n\r\n\t // indentation\r\n\t if (options.indentation) {\r\n\t this.indentation = Number(options.indentation);\r\n\t }\r\n\t else {\r\n\t this.indentation = 2; // number of spaces\r\n\t }\r\n\r\n\t // grab ace from options if provided\r\n\t var _ace = options.ace ? options.ace : ace;\r\n\r\n\t // determine mode\r\n\t this.mode = (options.mode == 'code') ? 'code' : 'text';\r\n\t if (this.mode == 'code') {\r\n\t // verify whether Ace editor is available and supported\r\n\t if (typeof _ace === 'undefined') {\r\n\t this.mode = 'text';\r\n\t console.warn('Failed to load Ace editor, falling back to plain text mode. Please use a JSONEditor bundle including Ace, or pass Ace as via the configuration option `ace`.');\r\n\t }\r\n\t }\r\n\r\n\t // determine theme\r\n\t this.theme = options.theme || DEFAULT_THEME;\r\n\t if (this.theme === DEFAULT_THEME && window.ace) {\r\n\t __webpack_require__(70);\r\n\t }\r\n\r\n\t var me = this;\r\n\t this.container = container;\r\n\t this.dom = {};\r\n\t this.aceEditor = undefined; // ace code editor\r\n\t this.textarea = undefined; // plain text editor (fallback when Ace is not available)\r\n\t this.validateSchema = null;\r\n\r\n\t // create a debounced validate function\r\n\t this._debouncedValidate = util.debounce(this.validate.bind(this), this.DEBOUNCE_INTERVAL);\r\n\r\n\t this.width = container.clientWidth;\r\n\t this.height = container.clientHeight;\r\n\r\n\t this.frame = document.createElement('div');\r\n\t this.frame.className = 'jsoneditor jsoneditor-mode-' + this.options.mode;\r\n\t this.frame.onclick = function (event) {\r\n\t // prevent default submit action when the editor is located inside a form\r\n\t event.preventDefault();\r\n\t };\r\n\t this.frame.onkeydown = function (event) {\r\n\t me._onKeyDown(event);\r\n\t };\r\n\r\n\t // create menu\r\n\t this.menu = document.createElement('div');\r\n\t this.menu.className = 'jsoneditor-menu';\r\n\t this.frame.appendChild(this.menu);\r\n\r\n\t // create format button\r\n\t var buttonFormat = document.createElement('button');\r\n\t buttonFormat.type = 'button';\r\n\t buttonFormat.className = 'jsoneditor-format';\r\n\t buttonFormat.title = 'Format JSON data, with proper indentation and line feeds (Ctrl+\\\\)';\r\n\t this.menu.appendChild(buttonFormat);\r\n\t buttonFormat.onclick = function () {\r\n\t try {\r\n\t me.format();\r\n\t me._onChange();\r\n\t }\r\n\t catch (err) {\r\n\t me._onError(err);\r\n\t }\r\n\t };\r\n\r\n\t // create compact button\r\n\t var buttonCompact = document.createElement('button');\r\n\t buttonCompact.type = 'button';\r\n\t buttonCompact.className = 'jsoneditor-compact';\r\n\t buttonCompact.title = 'Compact JSON data, remove all whitespaces (Ctrl+Shift+\\\\)';\r\n\t this.menu.appendChild(buttonCompact);\r\n\t buttonCompact.onclick = function () {\r\n\t try {\r\n\t me.compact();\r\n\t me._onChange();\r\n\t }\r\n\t catch (err) {\r\n\t me._onError(err);\r\n\t }\r\n\t };\r\n\r\n\t // create mode box\r\n\t if (this.options && this.options.modes && this.options.modes.length) {\r\n\t this.modeSwitcher = new ModeSwitcher(this.menu, this.options.modes, this.options.mode, function onSwitch(mode) {\r\n\t // switch mode and restore focus\r\n\t me.setMode(mode);\r\n\t me.modeSwitcher.focus();\r\n\t });\r\n\t }\r\n\r\n\t this.content = document.createElement('div');\r\n\t this.content.className = 'jsoneditor-outer';\r\n\t this.frame.appendChild(this.content);\r\n\r\n\t this.container.appendChild(this.frame);\r\n\r\n\t if (this.mode == 'code') {\r\n\t this.editorDom = document.createElement('div');\r\n\t this.editorDom.style.height = '100%'; // TODO: move to css\r\n\t this.editorDom.style.width = '100%'; // TODO: move to css\r\n\t this.content.appendChild(this.editorDom);\r\n\r\n\t var aceEditor = _ace.edit(this.editorDom);\r\n\t aceEditor.$blockScrolling = Infinity;\r\n\t aceEditor.setTheme(this.theme);\r\n\t aceEditor.setShowPrintMargin(false);\r\n\t aceEditor.setFontSize(13);\r\n\t aceEditor.getSession().setMode('ace/mode/json');\r\n\t aceEditor.getSession().setTabSize(this.indentation);\r\n\t aceEditor.getSession().setUseSoftTabs(true);\r\n\t aceEditor.getSession().setUseWrapMode(true);\r\n\t aceEditor.commands.bindKey('Ctrl-L', null); // disable Ctrl+L (is used by the browser to select the address bar)\r\n\t aceEditor.commands.bindKey('Command-L', null); // disable Ctrl+L (is used by the browser to select the address bar)\r\n\t this.aceEditor = aceEditor;\r\n\r\n\t // TODO: deprecated since v5.0.0. Cleanup backward compatibility some day\r\n\t if (!this.hasOwnProperty('editor')) {\r\n\t Object.defineProperty(this, 'editor', {\r\n\t get: function () {\r\n\t console.warn('Property \"editor\" has been renamed to \"aceEditor\".');\r\n\t return me.aceEditor;\r\n\t },\r\n\t set: function (aceEditor) {\r\n\t console.warn('Property \"editor\" has been renamed to \"aceEditor\".');\r\n\t me.aceEditor = aceEditor;\r\n\t }\r\n\t });\r\n\t }\r\n\r\n\t var poweredBy = document.createElement('a');\r\n\t poweredBy.appendChild(document.createTextNode('powered by ace'));\r\n\t poweredBy.href = 'http://ace.ajax.org';\r\n\t poweredBy.target = '_blank';\r\n\t poweredBy.className = 'jsoneditor-poweredBy';\r\n\t poweredBy.onclick = function () {\r\n\t // TODO: this anchor falls below the margin of the content,\r\n\t // therefore the normal a.href does not work. We use a click event\r\n\t // for now, but this should be fixed.\r\n\t window.open(poweredBy.href, poweredBy.target);\r\n\t };\r\n\t this.menu.appendChild(poweredBy);\r\n\r\n\t // register onchange event\r\n\t aceEditor.on('change', this._onChange.bind(this));\r\n\t }\r\n\t else {\r\n\t // load a plain text textarea\r\n\t var textarea = document.createElement('textarea');\r\n\t textarea.className = 'jsoneditor-text';\r\n\t textarea.spellcheck = false;\r\n\t this.content.appendChild(textarea);\r\n\t this.textarea = textarea;\r\n\r\n\t // register onchange event\r\n\t if (this.textarea.oninput === null) {\r\n\t this.textarea.oninput = this._onChange.bind(this);\r\n\t }\r\n\t else {\r\n\t // oninput is undefined. For IE8-\r\n\t this.textarea.onchange = this._onChange.bind(this);\r\n\t }\r\n\t }\r\n\r\n\t this.setSchema(this.options.schema);\r\n\t};\r\n\r\n\t/**\r\n\t * Handle a change:\r\n\t * - Validate JSON schema\r\n\t * - Send a callback to the onChange listener if provided\r\n\t * @private\r\n\t */\r\n\ttextmode._onChange = function () {\r\n\t // validate JSON schema (if configured)\r\n\t this._debouncedValidate();\r\n\r\n\t // trigger the onChange callback\r\n\t if (this.options.onChange) {\r\n\t try {\r\n\t this.options.onChange();\r\n\t }\r\n\t catch (err) {\r\n\t console.error('Error in onChange callback: ', err);\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Event handler for keydown. Handles shortcut keys\r\n\t * @param {Event} event\r\n\t * @private\r\n\t */\r\n\ttextmode._onKeyDown = function (event) {\r\n\t var keynum = event.which || event.keyCode;\r\n\t var handled = false;\r\n\r\n\t if (keynum == 220 && event.ctrlKey) {\r\n\t if (event.shiftKey) { // Ctrl+Shift+\\\r\n\t this.compact();\r\n\t this._onChange();\r\n\t }\r\n\t else { // Ctrl+\\\r\n\t this.format();\r\n\t this._onChange();\r\n\t }\r\n\t handled = true;\r\n\t }\r\n\r\n\t if (handled) {\r\n\t event.preventDefault();\r\n\t event.stopPropagation();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Destroy the editor. Clean up DOM, event listeners, and web workers.\r\n\t */\r\n\ttextmode.destroy = function () {\r\n\t // remove old ace editor\r\n\t if (this.aceEditor) {\r\n\t this.aceEditor.destroy();\r\n\t this.aceEditor = null;\r\n\t }\r\n\r\n\t if (this.frame && this.container && this.frame.parentNode == this.container) {\r\n\t this.container.removeChild(this.frame);\r\n\t }\r\n\r\n\t if (this.modeSwitcher) {\r\n\t this.modeSwitcher.destroy();\r\n\t this.modeSwitcher = null;\r\n\t }\r\n\r\n\t this.textarea = null;\r\n\t \r\n\t this._debouncedValidate = null;\r\n\t};\r\n\r\n\t/**\r\n\t * Compact the code in the formatter\r\n\t */\r\n\ttextmode.compact = function () {\r\n\t var json = this.get();\r\n\t var text = JSON.stringify(json);\r\n\t this.setText(text);\r\n\t};\r\n\r\n\t/**\r\n\t * Format the code in the formatter\r\n\t */\r\n\ttextmode.format = function () {\r\n\t var json = this.get();\r\n\t var text = JSON.stringify(json, null, this.indentation);\r\n\t this.setText(text);\r\n\t};\r\n\r\n\t/**\r\n\t * Set focus to the formatter\r\n\t */\r\n\ttextmode.focus = function () {\r\n\t if (this.textarea) {\r\n\t this.textarea.focus();\r\n\t }\r\n\t if (this.aceEditor) {\r\n\t this.aceEditor.focus();\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Resize the formatter\r\n\t */\r\n\ttextmode.resize = function () {\r\n\t if (this.aceEditor) {\r\n\t var force = false;\r\n\t this.aceEditor.resize(force);\r\n\t }\r\n\t};\r\n\r\n\t/**\r\n\t * Set json data in the formatter\r\n\t * @param {Object} json\r\n\t */\r\n\ttextmode.set = function(json) {\r\n\t this.setText(JSON.stringify(json, null, this.indentation));\r\n\t};\r\n\r\n\t/**\r\n\t * Get json data from the formatter\r\n\t * @return {Object} json\r\n\t */\r\n\ttextmode.get = function() {\r\n\t var text = this.getText();\r\n\t var json;\r\n\r\n\t try {\r\n\t json = util.parse(text); // this can throw an error\r\n\t }\r\n\t catch (err) {\r\n\t // try to sanitize json, replace JavaScript notation with JSON notation\r\n\t text = util.sanitize(text);\r\n\r\n\t // try to parse again\r\n\t json = util.parse(text); // this can throw an error\r\n\t }\r\n\r\n\t return json;\r\n\t};\r\n\r\n\t/**\r\n\t * Get the text contents of the editor\r\n\t * @return {String} jsonText\r\n\t */\r\n\ttextmode.getText = function() {\r\n\t if (this.textarea) {\r\n\t return this.textarea.value;\r\n\t }\r\n\t if (this.aceEditor) {\r\n\t return this.aceEditor.getValue();\r\n\t }\r\n\t return '';\r\n\t};\r\n\r\n\t/**\r\n\t * Set the text contents of the editor\r\n\t * @param {String} jsonText\r\n\t */\r\n\ttextmode.setText = function(jsonText) {\r\n\t var text;\r\n\r\n\t if (this.options.escapeUnicode === true) {\r\n\t text = util.escapeUnicodeChars(jsonText);\r\n\t }\r\n\t else {\r\n\t text = jsonText;\r\n\t }\r\n\r\n\t if (this.textarea) {\r\n\t this.textarea.value = text;\r\n\t }\r\n\t if (this.aceEditor) {\r\n\t // prevent emitting onChange events while setting new text\r\n\t var originalOnChange = this.options.onChange;\r\n\t this.options.onChange = null;\r\n\r\n\t this.aceEditor.setValue(text, -1);\r\n\r\n\t this.options.onChange = originalOnChange;\r\n\t }\r\n\r\n\t // validate JSON schema\r\n\t this.validate();\r\n\t};\r\n\r\n\t/**\r\n\t * Validate current JSON object against the configured JSON schema\r\n\t * Throws an exception when no JSON schema is configured\r\n\t */\r\n\ttextmode.validate = function () {\r\n\t // clear all current errors\r\n\t if (this.dom.validationErrors) {\r\n\t this.dom.validationErrors.parentNode.removeChild(this.dom.validationErrors);\r\n\t this.dom.validationErrors = null;\r\n\r\n\t this.content.style.marginBottom = '';\r\n\t this.content.style.paddingBottom = '';\r\n\t }\r\n\r\n\t var doValidate = false;\r\n\t var errors = [];\r\n\t var json;\r\n\t try {\r\n\t json = this.get(); // this can fail when there is no valid json\r\n\t doValidate = true;\r\n\t }\r\n\t catch (err) {\r\n\t // no valid JSON, don't validate\r\n\t }\r\n\r\n\t // only validate the JSON when parsing the JSON succeeded\r\n\t if (doValidate && this.validateSchema) {\r\n\t var valid = this.validateSchema(json);\r\n\t if (!valid) {\r\n\t errors = this.validateSchema.errors.map(function (error) {\r\n\t return util.improveSchemaError(error);\r\n\t });\r\n\t }\r\n\t }\r\n\r\n\t if (errors.length > 0) {\r\n\t // limit the number of displayed errors\r\n\t var limit = errors.length > MAX_ERRORS;\r\n\t if (limit) {\r\n\t errors = errors.slice(0, MAX_ERRORS);\r\n\t var hidden = this.validateSchema.errors.length - MAX_ERRORS;\r\n\t errors.push('(' + hidden + ' more errors...)')\r\n\t }\r\n\r\n\t var validationErrors = document.createElement('div');\r\n\t validationErrors.innerHTML = '<table class=\"jsoneditor-text-errors\">' +\r\n\t '<tbody>' +\r\n\t errors.map(function (error) {\r\n\t var message;\r\n\t if (typeof error === 'string') {\r\n\t message = '<td colspan=\"2\"><pre>' + error + '</pre></td>';\r\n\t }\r\n\t else {\r\n\t message = '<td>' + error.dataPath + '</td>' +\r\n\t '<td>' + error.message + '</td>';\r\n\t }\r\n\r\n\t return '<tr><td><button class=\"jsoneditor-schema-error\"></button></td>' + message + '</tr>'\r\n\t }).join('') +\r\n\t '</tbody>' +\r\n\t '</table>';\r\n\r\n\t this.dom.validationErrors = validationErrors;\r\n\t this.frame.appendChild(validationErrors);\r\n\r\n\t var height = validationErrors.clientHeight;\r\n\t this.content.style.marginBottom = (-height) + 'px';\r\n\t this.content.style.paddingBottom = height + 'px';\r\n\t }\r\n\r\n\t // update the height of the ace editor\r\n\t if (this.aceEditor) {\r\n\t var force = false;\r\n\t this.aceEditor.resize(force);\r\n\t }\r\n\t};\r\n\r\n\t// define modes\r\n\tmodule.exports = [\r\n\t {\r\n\t mode: 'text',\r\n\t mixin: textmode,\r\n\t data: 'text',\r\n\t load: textmode.format\r\n\t },\r\n\t {\r\n\t mode: 'code',\r\n\t mixin: textmode,\r\n\t data: 'text',\r\n\t load: textmode.format\r\n\t }\r\n\t];\r\n\r\n\r\n/***/ },\r\n/* 63 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t// load brace\r\n\tvar ace = __webpack_require__(64);\r\n\r\n\t// load required ace modules\r\n\t__webpack_require__(67);\r\n\t__webpack_require__(69);\r\n\r\n\tmodule.exports = ace;\r\n\r\n\r\n/***/ },\r\n/* 64 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\t/* ***** BEGIN LICENSE BLOCK *****\r\n\t * Distributed under the BSD license:\r\n\t *\r\n\t * Copyright (c) 2010, Ajax.org B.V.\r\n\t * All rights reserved.\r\n\t *\r\n\t * Redistribution and use in source and binary forms, with or without\r\n\t * modification, are permitted provided that the following conditions are met:\r\n\t * * Redistributions of source code must retain the above copyright\r\n\t * notice, this list of conditions and the following disclaimer.\r\n\t * * Redistributions in binary form must reproduce the above copyright\r\n\t * notice, this list of conditions and the following disclaimer in the\r\n\t * documentation and/or other materials provided with the distribution.\r\n\t * * Neither the name of Ajax.org B.V. nor the\r\n\t * names of its contributors may be used to endorse or promote products\r\n\t * derived from this software without specific prior written permission.\r\n\t *\r\n\t * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n\t * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n\t * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n\t * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\r\n\t * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n\t * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n\t * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\r\n\t * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n\t * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n\t * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n\t *\r\n\t * ***** END LICENSE BLOCK ***** */\r\n\r\n\t/**\r\n\t * Define a module along with a payload\r\n\t * @param module a name for the payload\r\n\t * @param payload a function to call with (acequire, exports, module) params\r\n\t */\r\n\r\n\t(function() {\r\n\r\n\tvar ACE_NAMESPACE = \"ace\";\r\n\r\n\tvar global = (function() { return this; })();\r\n\tif (!global && typeof window != \"undefined\") global = window; // strict mode\r\n\r\n\r\n\tif (!ACE_NAMESPACE && typeof acequirejs !== \"undefined\")\r\n\t return;\r\n\r\n\r\n\tvar define = function(module, deps, payload) {\r\n\t if (typeof module !== \"string\") {\r\n\t if (define.original)\r\n\t define.original.apply(this, arguments);\r\n\t else {\r\n\t console.error(\"dropping module because define wasn\\'t a string.\");\r\n\t console.trace();\r\n\t }\r\n\t return;\r\n\t }\r\n\t if (arguments.length == 2)\r\n\t payload = deps;\r\n\t if (!define.modules[module]) {\r\n\t define.payloads[module] = payload;\r\n\t define.modules[module] = null;\r\n\t }\r\n\t};\r\n\r\n\tdefine.modules = {};\r\n\tdefine.payloads = {};\r\n\r\n\t/**\r\n\t * Get at functionality define()ed using the function above\r\n\t */\r\n\tvar _acequire = function(parentId, module, callback) {\r\n\t if (typeof module === \"string\") {\r\n\t var payload = lookup(parentId, module);\r\n\t if (payload != undefined) {\r\n\t callback && callback();\r\n\t return payload;\r\n\t }\r\n\t } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\r\n\t var params = [];\r\n\t for (var i = 0, l = module.length; i < l; ++i) {\r\n\t var dep = lookup(parentId, module[i]);\r\n\t if (dep == undefined && acequire.original)\r\n\t return;\r\n\t params.push(dep);\r\n\t }\r\n\t return callback && callback.apply(null, params) || true;\r\n\t }\r\n\t};\r\n\r\n\tvar acequire = function(module, callback) {\r\n\t var packagedModule = _acequire(\"\", module, callback);\r\n\t if (packagedModule == undefined && acequire.original)\r\n\t return acequire.original.apply(this, arguments);\r\n\t return packagedModule;\r\n\t};\r\n\r\n\tvar normalizeModule = function(parentId, moduleName) {\r\n\t // normalize plugin acequires\r\n\t if (moduleName.indexOf(\"!\") !== -1) {\r\n\t var chunks = moduleName.split(\"!\");\r\n\t return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\r\n\t }\r\n\t // normalize relative acequires\r\n\t if (moduleName.charAt(0) == \".\") {\r\n\t var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\r\n\t moduleName = base + \"/\" + moduleName;\r\n\r\n\t while(moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\r\n\t var previous = moduleName;\r\n\t moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\r\n\t }\r\n\t }\r\n\t return moduleName;\r\n\t};\r\n\r\n\t/**\r\n\t * Internal function to lookup moduleNames and resolve them by calling the\r\n\t * definition function if needed.\r\n\t */\r\n\tvar lookup = function(parentId, moduleName) {\r\n\t moduleName = normalizeModule(parentId, moduleName);\r\n\r\n\t var module = define.modules[moduleName];\r\n\t if (!module) {\r\n\t module = define.payloads[moduleName];\r\n\t if (typeof module === 'function') {\r\n\t var exports = {};\r\n\t var mod = {\r\n\t id: moduleName,\r\n\t uri: '',\r\n\t exports: exports,\r\n\t packaged: true\r\n\t };\r\n\r\n\t var req = function(module, callback) {\r\n\t return _acequire(moduleName, module, callback);\r\n\t };\r\n\r\n\t var returnValue = module(req, exports, mod);\r\n\t exports = returnValue || mod.exports;\r\n\t define.modules[moduleName] = exports;\r\n\t delete define.payloads[moduleName];\r\n\t }\r\n\t module = define.modules[moduleName] = exports || module;\r\n\t }\r\n\t return module;\r\n\t};\r\n\r\n\tfunction exportAce(ns) {\r\n\t var root = global;\r\n\t if (ns) {\r\n\t if (!global[ns])\r\n\t global[ns] = {};\r\n\t root = global[ns];\r\n\t }\r\n\r\n\t if (!root.define || !root.define.packaged) {\r\n\t define.original = root.define;\r\n\t root.define = define;\r\n\t root.define.packaged = true;\r\n\t }\r\n\r\n\t if (!root.acequire || !root.acequire.packaged) {\r\n\t acequire.original = root.acequire;\r\n\t root.acequire = acequire;\r\n\t root.acequire.packaged = true;\r\n\t }\r\n\t}\r\n\r\n\texportAce(ACE_NAMESPACE);\r\n\r\n\t})();\r\n\r\n\tace.define(\"ace/lib/regexp\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\t var real = {\r\n\t exec: RegExp.prototype.exec,\r\n\t test: RegExp.prototype.test,\r\n\t match: String.prototype.match,\r\n\t replace: String.prototype.replace,\r\n\t split: String.prototype.split\r\n\t },\r\n\t compliantExecNpcg = real.exec.call(/()??/, \"\")[1] === undefined, // check `exec` handling of nonparticipating capturing groups\r\n\t compliantLastIndexIncrement = function () {\r\n\t var x = /^/g;\r\n\t real.test.call(x, \"\");\r\n\t return !x.lastIndex;\r\n\t }();\r\n\r\n\t if (compliantLastIndexIncrement && compliantExecNpcg)\r\n\t return;\r\n\t RegExp.prototype.exec = function (str) {\r\n\t var match = real.exec.apply(this, arguments),\r\n\t name, r2;\r\n\t if ( typeof(str) == 'string' && match) {\r\n\t if (!compliantExecNpcg && match.length > 1 && indexOf(match, \"\") > -1) {\r\n\t r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), \"g\", \"\"));\r\n\t real.replace.call(str.slice(match.index), r2, function () {\r\n\t for (var i = 1; i < arguments.length - 2; i++) {\r\n\t if (arguments[i] === undefined)\r\n\t match[i] = undefined;\r\n\t }\r\n\t });\r\n\t }\r\n\t if (this._xregexp && this._xregexp.captureNames) {\r\n\t for (var i = 1; i < match.length; i++) {\r\n\t name = this._xregexp.captureNames[i - 1];\r\n\t if (name)\r\n\t match[name] = match[i];\r\n\t }\r\n\t }\r\n\t if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))\r\n\t this.lastIndex--;\r\n\t }\r\n\t return match;\r\n\t };\r\n\t if (!compliantLastIndexIncrement) {\r\n\t RegExp.prototype.test = function (str) {\r\n\t var match = real.exec.call(this, str);\r\n\t if (match && this.global && !match[0].length && (this.lastIndex > match.index))\r\n\t this.lastIndex--;\r\n\t return !!match;\r\n\t };\r\n\t }\r\n\r\n\t function getNativeFlags (regex) {\r\n\t return (regex.global ? \"g\" : \"\") +\r\n\t (regex.ignoreCase ? \"i\" : \"\") +\r\n\t (regex.multiline ? \"m\" : \"\") +\r\n\t (regex.extended ? \"x\" : \"\") + // Proposed for ES4; included in AS3\r\n\t (regex.sticky ? \"y\" : \"\");\r\n\t }\r\n\r\n\t function indexOf (array, item, from) {\r\n\t if (Array.prototype.indexOf) // Use the native array method if available\r\n\t return array.indexOf(item, from);\r\n\t for (var i = from || 0; i < array.length; i++) {\r\n\t if (array[i] === item)\r\n\t return i;\r\n\t }\r\n\t return -1;\r\n\t }\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\r\n\tfunction Empty() {}\r\n\r\n\tif (!Function.prototype.bind) {\r\n\t Function.prototype.bind = function bind(that) { // .length is 1\r\n\t var target = this;\r\n\t if (typeof target != \"function\") {\r\n\t throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\r\n\t }\r\n\t var args = slice.call(arguments, 1); // for normal call\r\n\t var bound = function () {\r\n\r\n\t if (this instanceof bound) {\r\n\r\n\t var result = target.apply(\r\n\t this,\r\n\t args.concat(slice.call(arguments))\r\n\t );\r\n\t if (Object(result) === result) {\r\n\t return result;\r\n\t }\r\n\t return this;\r\n\r\n\t } else {\r\n\t return target.apply(\r\n\t that,\r\n\t args.concat(slice.call(arguments))\r\n\t );\r\n\r\n\t }\r\n\r\n\t };\r\n\t if(target.prototype) {\r\n\t Empty.prototype = target.prototype;\r\n\t bound.prototype = new Empty();\r\n\t Empty.prototype = null;\r\n\t }\r\n\t return bound;\r\n\t };\r\n\t}\r\n\tvar call = Function.prototype.call;\r\n\tvar prototypeOfArray = Array.prototype;\r\n\tvar prototypeOfObject = Object.prototype;\r\n\tvar slice = prototypeOfArray.slice;\r\n\tvar _toString = call.bind(prototypeOfObject.toString);\r\n\tvar owns = call.bind(prototypeOfObject.hasOwnProperty);\r\n\tvar defineGetter;\r\n\tvar defineSetter;\r\n\tvar lookupGetter;\r\n\tvar lookupSetter;\r\n\tvar supportsAccessors;\r\n\tif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\r\n\t defineGetter = call.bind(prototypeOfObject.__defineGetter__);\r\n\t defineSetter = call.bind(prototypeOfObject.__defineSetter__);\r\n\t lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\r\n\t lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\r\n\t}\r\n\tif ([1,2].splice(0).length != 2) {\r\n\t if(function() { // test IE < 9 to splice bug - see issue #138\r\n\t function makeArray(l) {\r\n\t var a = new Array(l+2);\r\n\t a[0] = a[1] = 0;\r\n\t return a;\r\n\t }\r\n\t var array = [], lengthBefore;\r\n\t \r\n\t array.splice.apply(array, makeArray(20));\r\n\t array.splice.apply(array, makeArray(26));\r\n\r\n\t lengthBefore = array.length; //46\r\n\t array.splice(5, 0, \"XXX\"); // add one element\r\n\r\n\t lengthBefore + 1 == array.length\r\n\r\n\t if (lengthBefore + 1 == array.length) {\r\n\t return true;// has right splice implementation without bugs\r\n\t }\r\n\t }()) {//IE 6/7\r\n\t var array_splice = Array.prototype.splice;\r\n\t Array.prototype.splice = function(start, deleteCount) {\r\n\t if (!arguments.length) {\r\n\t return [];\r\n\t } else {\r\n\t return array_splice.apply(this, [\r\n\t start === void 0 ? 0 : start,\r\n\t deleteCount === void 0 ? (this.length - start) : deleteCount\r\n\t ].concat(slice.call(arguments, 2)))\r\n\t }\r\n\t };\r\n\t } else {//IE8\r\n\t Array.prototype.splice = function(pos, removeCount){\r\n\t var length = this.length;\r\n\t if (pos > 0) {\r\n\t if (pos > length)\r\n\t pos = length;\r\n\t } else if (pos == void 0) {\r\n\t pos = 0;\r\n\t } else if (pos < 0) {\r\n\t pos = Math.max(length + pos, 0);\r\n\t }\r\n\r\n\t if (!(pos+removeCount < length))\r\n\t removeCount = length - pos;\r\n\r\n\t var removed = this.slice(pos, pos+removeCount);\r\n\t var insert = slice.call(arguments, 2);\r\n\t var add = insert.length; \r\n\t if (pos === length) {\r\n\t if (add) {\r\n\t this.push.apply(this, insert);\r\n\t }\r\n\t } else {\r\n\t var remove = Math.min(removeCount, length - pos);\r\n\t var tailOldPos = pos + remove;\r\n\t var tailNewPos = tailOldPos + add - remove;\r\n\t var tailCount = length - tailOldPos;\r\n\t var lengthAfterRemove = length - remove;\r\n\r\n\t if (tailNewPos < tailOldPos) { // case A\r\n\t for (var i = 0; i < tailCount; ++i) {\r\n\t this[tailNewPos+i] = this[tailOldPos+i];\r\n\t }\r\n\t } else if (tailNewPos > tailOldPos) { // case B\r\n\t for (i = tailCount; i--; ) {\r\n\t this[tailNewPos+i] = this[tailOldPos+i];\r\n\t }\r\n\t } // else, add == remove (nothing to do)\r\n\r\n\t if (add && pos === lengthAfterRemove) {\r\n\t this.length = lengthAfterRemove; // truncate array\r\n\t this.push.apply(this, insert);\r\n\t } else {\r\n\t this.length = lengthAfterRemove + add; // reserves space\r\n\t for (i = 0; i < add; ++i) {\r\n\t this[pos+i] = insert[i];\r\n\t }\r\n\t }\r\n\t }\r\n\t return removed;\r\n\t };\r\n\t }\r\n\t}\r\n\tif (!Array.isArray) {\r\n\t Array.isArray = function isArray(obj) {\r\n\t return _toString(obj) == \"[object Array]\";\r\n\t };\r\n\t}\r\n\tvar boxedString = Object(\"a\"),\r\n\t splitString = boxedString[0] != \"a\" || !(0 in boxedString);\r\n\r\n\tif (!Array.prototype.forEach) {\r\n\t Array.prototype.forEach = function forEach(fun /*, thisp*/) {\r\n\t var object = toObject(this),\r\n\t self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t object,\r\n\t thisp = arguments[1],\r\n\t i = -1,\r\n\t length = self.length >>> 0;\r\n\t if (_toString(fun) != \"[object Function]\") {\r\n\t throw new TypeError(); // TODO message\r\n\t }\r\n\r\n\t while (++i < length) {\r\n\t if (i in self) {\r\n\t fun.call(thisp, self[i], i, object);\r\n\t }\r\n\t }\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.map) {\r\n\t Array.prototype.map = function map(fun /*, thisp*/) {\r\n\t var object = toObject(this),\r\n\t self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t object,\r\n\t length = self.length >>> 0,\r\n\t result = Array(length),\r\n\t thisp = arguments[1];\r\n\t if (_toString(fun) != \"[object Function]\") {\r\n\t throw new TypeError(fun + \" is not a function\");\r\n\t }\r\n\r\n\t for (var i = 0; i < length; i++) {\r\n\t if (i in self)\r\n\t result[i] = fun.call(thisp, self[i], i, object);\r\n\t }\r\n\t return result;\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.filter) {\r\n\t Array.prototype.filter = function filter(fun /*, thisp */) {\r\n\t var object = toObject(this),\r\n\t self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t object,\r\n\t length = self.length >>> 0,\r\n\t result = [],\r\n\t value,\r\n\t thisp = arguments[1];\r\n\t if (_toString(fun) != \"[object Function]\") {\r\n\t throw new TypeError(fun + \" is not a function\");\r\n\t }\r\n\r\n\t for (var i = 0; i < length; i++) {\r\n\t if (i in self) {\r\n\t value = self[i];\r\n\t if (fun.call(thisp, value, i, object)) {\r\n\t result.push(value);\r\n\t }\r\n\t }\r\n\t }\r\n\t return result;\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.every) {\r\n\t Array.prototype.every = function every(fun /*, thisp */) {\r\n\t var object = toObject(this),\r\n\t self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t object,\r\n\t length = self.length >>> 0,\r\n\t thisp = arguments[1];\r\n\t if (_toString(fun) != \"[object Function]\") {\r\n\t throw new TypeError(fun + \" is not a function\");\r\n\t }\r\n\r\n\t for (var i = 0; i < length; i++) {\r\n\t if (i in self && !fun.call(thisp, self[i], i, object)) {\r\n\t return false;\r\n\t }\r\n\t }\r\n\t return true;\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.some) {\r\n\t Array.prototype.some = function some(fun /*, thisp */) {\r\n\t var object = toObject(this),\r\n\t self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t object,\r\n\t length = self.length >>> 0,\r\n\t thisp = arguments[1];\r\n\t if (_toString(fun) != \"[object Function]\") {\r\n\t throw new TypeError(fun + \" is not a function\");\r\n\t }\r\n\r\n\t for (var i = 0; i < length; i++) {\r\n\t if (i in self && fun.call(thisp, self[i], i, object)) {\r\n\t return true;\r\n\t }\r\n\t }\r\n\t return false;\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.reduce) {\r\n\t Array.prototype.reduce = function reduce(fun /*, initial*/) {\r\n\t var object = toObject(this),\r\n\t self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t object,\r\n\t length = self.length >>> 0;\r\n\t if (_toString(fun) != \"[object Function]\") {\r\n\t throw new TypeError(fun + \" is not a function\");\r\n\t }\r\n\t if (!length && arguments.length == 1) {\r\n\t throw new TypeError(\"reduce of empty array with no initial value\");\r\n\t }\r\n\r\n\t var i = 0;\r\n\t var result;\r\n\t if (arguments.length >= 2) {\r\n\t result = arguments[1];\r\n\t } else {\r\n\t do {\r\n\t if (i in self) {\r\n\t result = self[i++];\r\n\t break;\r\n\t }\r\n\t if (++i >= length) {\r\n\t throw new TypeError(\"reduce of empty array with no initial value\");\r\n\t }\r\n\t } while (true);\r\n\t }\r\n\r\n\t for (; i < length; i++) {\r\n\t if (i in self) {\r\n\t result = fun.call(void 0, result, self[i], i, object);\r\n\t }\r\n\t }\r\n\r\n\t return result;\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.reduceRight) {\r\n\t Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\r\n\t var object = toObject(this),\r\n\t self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t object,\r\n\t length = self.length >>> 0;\r\n\t if (_toString(fun) != \"[object Function]\") {\r\n\t throw new TypeError(fun + \" is not a function\");\r\n\t }\r\n\t if (!length && arguments.length == 1) {\r\n\t throw new TypeError(\"reduceRight of empty array with no initial value\");\r\n\t }\r\n\r\n\t var result, i = length - 1;\r\n\t if (arguments.length >= 2) {\r\n\t result = arguments[1];\r\n\t } else {\r\n\t do {\r\n\t if (i in self) {\r\n\t result = self[i--];\r\n\t break;\r\n\t }\r\n\t if (--i < 0) {\r\n\t throw new TypeError(\"reduceRight of empty array with no initial value\");\r\n\t }\r\n\t } while (true);\r\n\t }\r\n\r\n\t do {\r\n\t if (i in this) {\r\n\t result = fun.call(void 0, result, self[i], i, object);\r\n\t }\r\n\t } while (i--);\r\n\r\n\t return result;\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\r\n\t Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\r\n\t var self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t toObject(this),\r\n\t length = self.length >>> 0;\r\n\r\n\t if (!length) {\r\n\t return -1;\r\n\t }\r\n\r\n\t var i = 0;\r\n\t if (arguments.length > 1) {\r\n\t i = toInteger(arguments[1]);\r\n\t }\r\n\t i = i >= 0 ? i : Math.max(0, length + i);\r\n\t for (; i < length; i++) {\r\n\t if (i in self && self[i] === sought) {\r\n\t return i;\r\n\t }\r\n\t }\r\n\t return -1;\r\n\t };\r\n\t}\r\n\tif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\r\n\t Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\r\n\t var self = splitString && _toString(this) == \"[object String]\" ?\r\n\t this.split(\"\") :\r\n\t toObject(this),\r\n\t length = self.length >>> 0;\r\n\r\n\t if (!length) {\r\n\t return -1;\r\n\t }\r\n\t var i = length - 1;\r\n\t if (arguments.length > 1) {\r\n\t i = Math.min(i, toInteger(arguments[1]));\r\n\t }\r\n\t i = i >= 0 ? i : length - Math.abs(i);\r\n\t for (; i >= 0; i--) {\r\n\t if (i in self && sought === self[i]) {\r\n\t return i;\r\n\t }\r\n\t }\r\n\t return -1;\r\n\t };\r\n\t}\r\n\tif (!Object.getPrototypeOf) {\r\n\t Object.getPrototypeOf = function getPrototypeOf(object) {\r\n\t return object.__proto__ || (\r\n\t object.constructor ?\r\n\t object.constructor.prototype :\r\n\t prototypeOfObject\r\n\t );\r\n\t };\r\n\t}\r\n\tif (!Object.getOwnPropertyDescriptor) {\r\n\t var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\r\n\t \"non-object: \";\r\n\t Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\r\n\t if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\r\n\t throw new TypeError(ERR_NON_OBJECT + object);\r\n\t if (!owns(object, property))\r\n\t return;\r\n\r\n\t var descriptor, getter, setter;\r\n\t descriptor = { enumerable: true, configurable: true };\r\n\t if (supportsAccessors) {\r\n\t var prototype = object.__proto__;\r\n\t object.__proto__ = prototypeOfObject;\r\n\r\n\t var getter = lookupGetter(object, property);\r\n\t var setter = lookupSetter(object, property);\r\n\t object.__proto__ = prototype;\r\n\r\n\t if (getter || setter) {\r\n\t if (getter) descriptor.get = getter;\r\n\t if (setter) descriptor.set = setter;\r\n\t return descriptor;\r\n\t }\r\n\t }\r\n\t descriptor.value = object[property];\r\n\t return descriptor;\r\n\t };\r\n\t}\r\n\tif (!Object.getOwnPropertyNames) {\r\n\t Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\r\n\t return Object.keys(object);\r\n\t };\r\n\t}\r\n\tif (!Object.create) {\r\n\t var createEmpty;\r\n\t if (Object.prototype.__proto__ === null) {\r\n\t createEmpty = function () {\r\n\t return { \"__proto__\": null };\r\n\t };\r\n\t } else {\r\n\t createEmpty = function () {\r\n\t var empty = {};\r\n\t for (var i in empty)\r\n\t empty[i] = null;\r\n\t empty.constructor =\r\n\t empty.hasOwnProperty =\r\n\t empty.propertyIsEnumerable =\r\n\t empty.isPrototypeOf =\r\n\t empty.toLocaleString =\r\n\t empty.toString =\r\n\t empty.valueOf =\r\n\t empty.__proto__ = null;\r\n\t return empty;\r\n\t }\r\n\t }\r\n\r\n\t Object.create = function create(prototype, properties) {\r\n\t var object;\r\n\t if (prototype === null) {\r\n\t object = createEmpty();\r\n\t } else {\r\n\t if (typeof prototype != \"object\")\r\n\t throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\r\n\t var Type = function () {};\r\n\t Type.prototype = prototype;\r\n\t object = new Type();\r\n\t object.__proto__ = prototype;\r\n\t }\r\n\t if (properties !== void 0)\r\n\t Object.defineProperties(object, properties);\r\n\t return object;\r\n\t };\r\n\t}\r\n\r\n\tfunction doesDefinePropertyWork(object) {\r\n\t try {\r\n\t Object.defineProperty(object, \"sentinel\", {});\r\n\t return \"sentinel\" in object;\r\n\t } catch (exception) {\r\n\t }\r\n\t}\r\n\tif (Object.defineProperty) {\r\n\t var definePropertyWorksOnObject = doesDefinePropertyWork({});\r\n\t var definePropertyWorksOnDom = typeof document == \"undefined\" ||\r\n\t doesDefinePropertyWork(document.createElement(\"div\"));\r\n\t if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\r\n\t var definePropertyFallback = Object.defineProperty;\r\n\t }\r\n\t}\r\n\r\n\tif (!Object.defineProperty || definePropertyFallback) {\r\n\t var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\r\n\t var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\r\n\t var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\r\n\t \"on this javascript engine\";\r\n\r\n\t Object.defineProperty = function defineProperty(object, property, descriptor) {\r\n\t if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\r\n\t throw new TypeError(ERR_NON_OBJECT_TARGET + object);\r\n\t if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\r\n\t throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\r\n\t if (definePropertyFallback) {\r\n\t try {\r\n\t return definePropertyFallback.call(Object, object, property, descriptor);\r\n\t } catch (exception) {\r\n\t }\r\n\t }\r\n\t if (owns(descriptor, \"value\")) {\r\n\r\n\t if (supportsAccessors && (lookupGetter(object, property) ||\r\n\t lookupSetter(object, property)))\r\n\t {\r\n\t var prototype = object.__proto__;\r\n\t object.__proto__ = prototypeOfObject;\r\n\t delete object[property];\r\n\t object[property] = descriptor.value;\r\n\t object.__proto__ = prototype;\r\n\t } else {\r\n\t object[property] = descriptor.value;\r\n\t }\r\n\t } else {\r\n\t if (!supportsAccessors)\r\n\t throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\r\n\t if (owns(descriptor, \"get\"))\r\n\t defineGetter(object, property, descriptor.get);\r\n\t if (owns(descriptor, \"set\"))\r\n\t defineSetter(object, property, descriptor.set);\r\n\t }\r\n\r\n\t return object;\r\n\t };\r\n\t}\r\n\tif (!Object.defineProperties) {\r\n\t Object.defineProperties = function defineProperties(object, properties) {\r\n\t for (var property in properties) {\r\n\t if (owns(properties, property))\r\n\t Object.defineProperty(object, property, properties[property]);\r\n\t }\r\n\t return object;\r\n\t };\r\n\t}\r\n\tif (!Object.seal) {\r\n\t Object.seal = function seal(object) {\r\n\t return object;\r\n\t };\r\n\t}\r\n\tif (!Object.freeze) {\r\n\t Object.freeze = function freeze(object) {\r\n\t return object;\r\n\t };\r\n\t}\r\n\ttry {\r\n\t Object.freeze(function () {});\r\n\t} catch (exception) {\r\n\t Object.freeze = (function freeze(freezeObject) {\r\n\t return function freeze(object) {\r\n\t if (typeof object == \"function\") {\r\n\t return object;\r\n\t } else {\r\n\t return freezeObject(object);\r\n\t }\r\n\t };\r\n\t })(Object.freeze);\r\n\t}\r\n\tif (!Object.preventExtensions) {\r\n\t Object.preventExtensions = function preventExtensions(object) {\r\n\t return object;\r\n\t };\r\n\t}\r\n\tif (!Object.isSealed) {\r\n\t Object.isSealed = function isSealed(object) {\r\n\t return false;\r\n\t };\r\n\t}\r\n\tif (!Object.isFrozen) {\r\n\t Object.isFrozen = function isFrozen(object) {\r\n\t return false;\r\n\t };\r\n\t}\r\n\tif (!Object.isExtensible) {\r\n\t Object.isExtensible = function isExtensible(object) {\r\n\t if (Object(object) === object) {\r\n\t throw new TypeError(); // TODO message\r\n\t }\r\n\t var name = '';\r\n\t while (owns(object, name)) {\r\n\t name += '?';\r\n\t }\r\n\t object[name] = true;\r\n\t var returnValue = owns(object, name);\r\n\t delete object[name];\r\n\t return returnValue;\r\n\t };\r\n\t}\r\n\tif (!Object.keys) {\r\n\t var hasDontEnumBug = true,\r\n\t dontEnums = [\r\n\t \"toString\",\r\n\t \"toLocaleString\",\r\n\t \"valueOf\",\r\n\t \"hasOwnProperty\",\r\n\t \"isPrototypeOf\",\r\n\t \"propertyIsEnumerable\",\r\n\t \"constructor\"\r\n\t ],\r\n\t dontEnumsLength = dontEnums.length;\r\n\r\n\t for (var key in {\"toString\": null}) {\r\n\t hasDontEnumBug = false;\r\n\t }\r\n\r\n\t Object.keys = function keys(object) {\r\n\r\n\t if (\r\n\t (typeof object != \"object\" && typeof object != \"function\") ||\r\n\t object === null\r\n\t ) {\r\n\t throw new TypeError(\"Object.keys called on a non-object\");\r\n\t }\r\n\r\n\t var keys = [];\r\n\t for (var name in object) {\r\n\t if (owns(object, name)) {\r\n\t keys.push(name);\r\n\t }\r\n\t }\r\n\r\n\t if (hasDontEnumBug) {\r\n\t for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\r\n\t var dontEnum = dontEnums[i];\r\n\t if (owns(object, dontEnum)) {\r\n\t keys.push(dontEnum);\r\n\t }\r\n\t }\r\n\t }\r\n\t return keys;\r\n\t };\r\n\r\n\t}\r\n\tif (!Date.now) {\r\n\t Date.now = function now() {\r\n\t return new Date().getTime();\r\n\t };\r\n\t}\r\n\tvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\r\n\t \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\r\n\t \"\\u2029\\uFEFF\";\r\n\tif (!String.prototype.trim || ws.trim()) {\r\n\t ws = \"[\" + ws + \"]\";\r\n\t var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\r\n\t trimEndRegexp = new RegExp(ws + ws + \"*$\");\r\n\t String.prototype.trim = function trim() {\r\n\t return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\r\n\t };\r\n\t}\r\n\r\n\tfunction toInteger(n) {\r\n\t n = +n;\r\n\t if (n !== n) { // isNaN\r\n\t n = 0;\r\n\t } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\r\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\r\n\t }\r\n\t return n;\r\n\t}\r\n\r\n\tfunction isPrimitive(input) {\r\n\t var type = typeof input;\r\n\t return (\r\n\t input === null ||\r\n\t type === \"undefined\" ||\r\n\t type === \"boolean\" ||\r\n\t type === \"number\" ||\r\n\t type === \"string\"\r\n\t );\r\n\t}\r\n\r\n\tfunction toPrimitive(input) {\r\n\t var val, valueOf, toString;\r\n\t if (isPrimitive(input)) {\r\n\t return input;\r\n\t }\r\n\t valueOf = input.valueOf;\r\n\t if (typeof valueOf === \"function\") {\r\n\t val = valueOf.call(input);\r\n\t if (isPrimitive(val)) {\r\n\t return val;\r\n\t }\r\n\t }\r\n\t toString = input.toString;\r\n\t if (typeof toString === \"function\") {\r\n\t val = toString.call(input);\r\n\t if (isPrimitive(val)) {\r\n\t return val;\r\n\t }\r\n\t }\r\n\t throw new TypeError();\r\n\t}\r\n\tvar toObject = function (o) {\r\n\t if (o == null) { // this matches both null and undefined\r\n\t throw new TypeError(\"can't convert \"+o+\" to object\");\r\n\t }\r\n\t return Object(o);\r\n\t};\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/regexp\",\"ace/lib/es5-shim\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tacequire(\"./regexp\");\r\n\tacequire(\"./es5-shim\");\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\r\n\r\n\texports.getDocumentHead = function(doc) {\r\n\t if (!doc)\r\n\t doc = document;\r\n\t return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\r\n\t};\r\n\r\n\texports.createElement = function(tag, ns) {\r\n\t return document.createElementNS ?\r\n\t document.createElementNS(ns || XHTML_NS, tag) :\r\n\t document.createElement(tag);\r\n\t};\r\n\r\n\texports.hasCssClass = function(el, name) {\r\n\t var classes = (el.className || \"\").split(/\\s+/g);\r\n\t return classes.indexOf(name) !== -1;\r\n\t};\r\n\texports.addCssClass = function(el, name) {\r\n\t if (!exports.hasCssClass(el, name)) {\r\n\t el.className += \" \" + name;\r\n\t }\r\n\t};\r\n\texports.removeCssClass = function(el, name) {\r\n\t var classes = el.className.split(/\\s+/g);\r\n\t while (true) {\r\n\t var index = classes.indexOf(name);\r\n\t if (index == -1) {\r\n\t break;\r\n\t }\r\n\t classes.splice(index, 1);\r\n\t }\r\n\t el.className = classes.join(\" \");\r\n\t};\r\n\r\n\texports.toggleCssClass = function(el, name) {\r\n\t var classes = el.className.split(/\\s+/g), add = true;\r\n\t while (true) {\r\n\t var index = classes.indexOf(name);\r\n\t if (index == -1) {\r\n\t break;\r\n\t }\r\n\t add = false;\r\n\t classes.splice(index, 1);\r\n\t }\r\n\t if (add)\r\n\t classes.push(name);\r\n\r\n\t el.className = classes.join(\" \");\r\n\t return add;\r\n\t};\r\n\texports.setCssClass = function(node, className, include) {\r\n\t if (include) {\r\n\t exports.addCssClass(node, className);\r\n\t } else {\r\n\t exports.removeCssClass(node, className);\r\n\t }\r\n\t};\r\n\r\n\texports.hasCssString = function(id, doc) {\r\n\t var index = 0, sheets;\r\n\t doc = doc || document;\r\n\r\n\t if (doc.createStyleSheet && (sheets = doc.styleSheets)) {\r\n\t while (index < sheets.length)\r\n\t if (sheets[index++].owningElement.id === id) return true;\r\n\t } else if ((sheets = doc.getElementsByTagName(\"style\"))) {\r\n\t while (index < sheets.length)\r\n\t if (sheets[index++].id === id) return true;\r\n\t }\r\n\r\n\t return false;\r\n\t};\r\n\r\n\texports.importCssString = function importCssString(cssText, id, doc) {\r\n\t doc = doc || document;\r\n\t if (id && exports.hasCssString(id, doc))\r\n\t return null;\r\n\t \r\n\t var style;\r\n\t \r\n\t if (id)\r\n\t cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\r\n\t \r\n\t if (doc.createStyleSheet) {\r\n\t style = doc.createStyleSheet();\r\n\t style.cssText = cssText;\r\n\t if (id)\r\n\t style.owningElement.id = id;\r\n\t } else {\r\n\t style = exports.createElement(\"style\");\r\n\t style.appendChild(doc.createTextNode(cssText));\r\n\t if (id)\r\n\t style.id = id;\r\n\r\n\t exports.getDocumentHead(doc).appendChild(style);\r\n\t }\r\n\t};\r\n\r\n\texports.importCssStylsheet = function(uri, doc) {\r\n\t if (doc.createStyleSheet) {\r\n\t doc.createStyleSheet(uri);\r\n\t } else {\r\n\t var link = exports.createElement('link');\r\n\t link.rel = 'stylesheet';\r\n\t link.href = uri;\r\n\r\n\t exports.getDocumentHead(doc).appendChild(link);\r\n\t }\r\n\t};\r\n\r\n\texports.getInnerWidth = function(element) {\r\n\t return (\r\n\t parseInt(exports.computedStyle(element, \"paddingLeft\"), 10) +\r\n\t parseInt(exports.computedStyle(element, \"paddingRight\"), 10) + \r\n\t element.clientWidth\r\n\t );\r\n\t};\r\n\r\n\texports.getInnerHeight = function(element) {\r\n\t return (\r\n\t parseInt(exports.computedStyle(element, \"paddingTop\"), 10) +\r\n\t parseInt(exports.computedStyle(element, \"paddingBottom\"), 10) +\r\n\t element.clientHeight\r\n\t );\r\n\t};\r\n\r\n\texports.scrollbarWidth = function(document) {\r\n\t var inner = exports.createElement(\"ace_inner\");\r\n\t inner.style.width = \"100%\";\r\n\t inner.style.minWidth = \"0px\";\r\n\t inner.style.height = \"200px\";\r\n\t inner.style.display = \"block\";\r\n\r\n\t var outer = exports.createElement(\"ace_outer\");\r\n\t var style = outer.style;\r\n\r\n\t style.position = \"absolute\";\r\n\t style.left = \"-10000px\";\r\n\t style.overflow = \"hidden\";\r\n\t style.width = \"200px\";\r\n\t style.minWidth = \"0px\";\r\n\t style.height = \"150px\";\r\n\t style.display = \"block\";\r\n\r\n\t outer.appendChild(inner);\r\n\r\n\t var body = document.documentElement;\r\n\t body.appendChild(outer);\r\n\r\n\t var noScrollbar = inner.offsetWidth;\r\n\r\n\t style.overflow = \"scroll\";\r\n\t var withScrollbar = inner.offsetWidth;\r\n\r\n\t if (noScrollbar == withScrollbar) {\r\n\t withScrollbar = outer.clientWidth;\r\n\t }\r\n\r\n\t body.removeChild(outer);\r\n\r\n\t return noScrollbar-withScrollbar;\r\n\t};\r\n\r\n\tif (typeof document == \"undefined\") {\r\n\t exports.importCssString = function() {};\r\n\t return;\r\n\t}\r\n\r\n\tif (window.pageYOffset !== undefined) {\r\n\t exports.getPageScrollTop = function() {\r\n\t return window.pageYOffset;\r\n\t };\r\n\r\n\t exports.getPageScrollLeft = function() {\r\n\t return window.pageXOffset;\r\n\t };\r\n\t}\r\n\telse {\r\n\t exports.getPageScrollTop = function() {\r\n\t return document.body.scrollTop;\r\n\t };\r\n\r\n\t exports.getPageScrollLeft = function() {\r\n\t return document.body.scrollLeft;\r\n\t };\r\n\t}\r\n\r\n\tif (window.getComputedStyle)\r\n\t exports.computedStyle = function(element, style) {\r\n\t if (style)\r\n\t return (window.getComputedStyle(element, \"\") || {})[style] || \"\";\r\n\t return window.getComputedStyle(element, \"\") || {};\r\n\t };\r\n\telse\r\n\t exports.computedStyle = function(element, style) {\r\n\t if (style)\r\n\t return element.currentStyle[style];\r\n\t return element.currentStyle;\r\n\t };\r\n\texports.setInnerHtml = function(el, innerHtml) {\r\n\t var element = el.cloneNode(false);//document.createElement(\"div\");\r\n\t element.innerHTML = innerHtml;\r\n\t el.parentNode.replaceChild(element, el);\r\n\t return element;\r\n\t};\r\n\r\n\tif (\"textContent\" in document.documentElement) {\r\n\t exports.setInnerText = function(el, innerText) {\r\n\t el.textContent = innerText;\r\n\t };\r\n\r\n\t exports.getInnerText = function(el) {\r\n\t return el.textContent;\r\n\t };\r\n\t}\r\n\telse {\r\n\t exports.setInnerText = function(el, innerText) {\r\n\t el.innerText = innerText;\r\n\t };\r\n\r\n\t exports.getInnerText = function(el) {\r\n\t return el.innerText;\r\n\t };\r\n\t}\r\n\r\n\texports.getParentWindow = function(document) {\r\n\t return document.defaultView || document.parentWindow;\r\n\t};\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\texports.inherits = function(ctor, superCtor) {\r\n\t ctor.super_ = superCtor;\r\n\t ctor.prototype = Object.create(superCtor.prototype, {\r\n\t constructor: {\r\n\t value: ctor,\r\n\t enumerable: false,\r\n\t writable: true,\r\n\t configurable: true\r\n\t }\r\n\t });\r\n\t};\r\n\r\n\texports.mixin = function(obj, mixin) {\r\n\t for (var key in mixin) {\r\n\t obj[key] = mixin[key];\r\n\t }\r\n\t return obj;\r\n\t};\r\n\r\n\texports.implement = function(proto, mixin) {\r\n\t exports.mixin(proto, mixin);\r\n\t};\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tacequire(\"./fixoldbrowsers\");\r\n\r\n\tvar oop = acequire(\"./oop\");\r\n\tvar Keys = (function() {\r\n\t var ret = {\r\n\t MODIFIER_KEYS: {\r\n\t 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta'\r\n\t },\r\n\r\n\t KEY_MODS: {\r\n\t \"ctrl\": 1, \"alt\": 2, \"option\" : 2, \"shift\": 4,\r\n\t \"super\": 8, \"meta\": 8, \"command\": 8, \"cmd\": 8\r\n\t },\r\n\r\n\t FUNCTION_KEYS : {\r\n\t 8 : \"Backspace\",\r\n\t 9 : \"Tab\",\r\n\t 13 : \"Return\",\r\n\t 19 : \"Pause\",\r\n\t 27 : \"Esc\",\r\n\t 32 : \"Space\",\r\n\t 33 : \"PageUp\",\r\n\t 34 : \"PageDown\",\r\n\t 35 : \"End\",\r\n\t 36 : \"Home\",\r\n\t 37 : \"Left\",\r\n\t 38 : \"Up\",\r\n\t 39 : \"Right\",\r\n\t 40 : \"Down\",\r\n\t 44 : \"Print\",\r\n\t 45 : \"Insert\",\r\n\t 46 : \"Delete\",\r\n\t 96 : \"Numpad0\",\r\n\t 97 : \"Numpad1\",\r\n\t 98 : \"Numpad2\",\r\n\t 99 : \"Numpad3\",\r\n\t 100: \"Numpad4\",\r\n\t 101: \"Numpad5\",\r\n\t 102: \"Numpad6\",\r\n\t 103: \"Numpad7\",\r\n\t 104: \"Numpad8\",\r\n\t 105: \"Numpad9\",\r\n\t '-13': \"NumpadEnter\",\r\n\t 112: \"F1\",\r\n\t 113: \"F2\",\r\n\t 114: \"F3\",\r\n\t 115: \"F4\",\r\n\t 116: \"F5\",\r\n\t 117: \"F6\",\r\n\t 118: \"F7\",\r\n\t 119: \"F8\",\r\n\t 120: \"F9\",\r\n\t 121: \"F10\",\r\n\t 122: \"F11\",\r\n\t 123: \"F12\",\r\n\t 144: \"Numlock\",\r\n\t 145: \"Scrolllock\"\r\n\t },\r\n\r\n\t PRINTABLE_KEYS: {\r\n\t 32: ' ', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5',\r\n\t 54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 61: '=', 65: 'a',\r\n\t 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h',\r\n\t 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o',\r\n\t 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v',\r\n\t 87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.',\r\n\t 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\r\n\t 219: '[', 220: '\\\\',221: ']', 222: \"'\", 111: '/', 106: '*'\r\n\t }\r\n\t };\r\n\t var name, i;\r\n\t for (i in ret.FUNCTION_KEYS) {\r\n\t name = ret.FUNCTION_KEYS[i].toLowerCase();\r\n\t ret[name] = parseInt(i, 10);\r\n\t }\r\n\t for (i in ret.PRINTABLE_KEYS) {\r\n\t name = ret.PRINTABLE_KEYS[i].toLowerCase();\r\n\t ret[name] = parseInt(i, 10);\r\n\t }\r\n\t oop.mixin(ret, ret.MODIFIER_KEYS);\r\n\t oop.mixin(ret, ret.PRINTABLE_KEYS);\r\n\t oop.mixin(ret, ret.FUNCTION_KEYS);\r\n\t ret.enter = ret[\"return\"];\r\n\t ret.escape = ret.esc;\r\n\t ret.del = ret[\"delete\"];\r\n\t ret[173] = '-';\r\n\t \r\n\t (function() {\r\n\t var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\r\n\t for (var i = Math.pow(2, mods.length); i--;) { \r\n\t ret.KEY_MODS[i] = mods.filter(function(x) {\r\n\t return i & ret.KEY_MODS[x];\r\n\t }).join(\"-\") + \"-\";\r\n\t }\r\n\t })();\r\n\r\n\t ret.KEY_MODS[0] = \"\";\r\n\t ret.KEY_MODS[-1] = \"input-\";\r\n\r\n\t return ret;\r\n\t})();\r\n\toop.mixin(exports, Keys);\r\n\r\n\texports.keyCodeToString = function(keyCode) {\r\n\t var keyString = Keys[keyCode];\r\n\t if (typeof keyString != \"string\")\r\n\t keyString = String.fromCharCode(keyCode);\r\n\t return keyString.toLowerCase();\r\n\t};\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\texports.OS = {\r\n\t LINUX: \"LINUX\",\r\n\t MAC: \"MAC\",\r\n\t WINDOWS: \"WINDOWS\"\r\n\t};\r\n\texports.getOS = function() {\r\n\t if (exports.isMac) {\r\n\t return exports.OS.MAC;\r\n\t } else if (exports.isLinux) {\r\n\t return exports.OS.LINUX;\r\n\t } else {\r\n\t return exports.OS.WINDOWS;\r\n\t }\r\n\t};\r\n\tif (typeof navigator != \"object\")\r\n\t return;\r\n\r\n\tvar os = (navigator.platform.match(/mac|win|linux/i) || [\"other\"])[0].toLowerCase();\r\n\tvar ua = navigator.userAgent;\r\n\texports.isWin = (os == \"win\");\r\n\texports.isMac = (os == \"mac\");\r\n\texports.isLinux = (os == \"linux\");\r\n\texports.isIE = \r\n\t (navigator.appName == \"Microsoft Internet Explorer\" || navigator.appName.indexOf(\"MSAppHost\") >= 0)\r\n\t ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1])\r\n\t : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]); // for ie\r\n\t \r\n\texports.isOldIE = exports.isIE && exports.isIE < 9;\r\n\texports.isGecko = exports.isMozilla = (window.Controllers || window.controllers) && window.navigator.product === \"Gecko\";\r\n\texports.isOldGecko = exports.isGecko && parseInt((ua.match(/rv\\:(\\d+)/)||[])[1], 10) < 4;\r\n\texports.isOpera = window.opera && Object.prototype.toString.call(window.opera) == \"[object Opera]\";\r\n\texports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\r\n\r\n\texports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\r\n\r\n\texports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\r\n\r\n\texports.isIPad = ua.indexOf(\"iPad\") >= 0;\r\n\r\n\texports.isTouchPad = ua.indexOf(\"TouchPad\") >= 0;\r\n\r\n\texports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar keys = acequire(\"./keys\");\r\n\tvar useragent = acequire(\"./useragent\");\r\n\r\n\tvar pressedKeys = null;\r\n\tvar ts = 0;\r\n\r\n\texports.addListener = function(elem, type, callback) {\r\n\t if (elem.addEventListener) {\r\n\t return elem.addEventListener(type, callback, false);\r\n\t }\r\n\t if (elem.attachEvent) {\r\n\t var wrapper = function() {\r\n\t callback.call(elem, window.event);\r\n\t };\r\n\t callback._wrapper = wrapper;\r\n\t elem.attachEvent(\"on\" + type, wrapper);\r\n\t }\r\n\t};\r\n\r\n\texports.removeListener = function(elem, type, callback) {\r\n\t if (elem.removeEventListener) {\r\n\t return elem.removeEventListener(type, callback, false);\r\n\t }\r\n\t if (elem.detachEvent) {\r\n\t elem.detachEvent(\"on\" + type, callback._wrapper || callback);\r\n\t }\r\n\t};\r\n\texports.stopEvent = function(e) {\r\n\t exports.stopPropagation(e);\r\n\t exports.preventDefault(e);\r\n\t return false;\r\n\t};\r\n\r\n\texports.stopPropagation = function(e) {\r\n\t if (e.stopPropagation)\r\n\t e.stopPropagation();\r\n\t else\r\n\t e.cancelBubble = true;\r\n\t};\r\n\r\n\texports.preventDefault = function(e) {\r\n\t if (e.preventDefault)\r\n\t e.preventDefault();\r\n\t else\r\n\t e.returnValue = false;\r\n\t};\r\n\texports.getButton = function(e) {\r\n\t if (e.type == \"dblclick\")\r\n\t return 0;\r\n\t if (e.type == \"contextmenu\" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey)))\r\n\t return 2;\r\n\t if (e.preventDefault) {\r\n\t return e.button;\r\n\t }\r\n\t else {\r\n\t return {1:0, 2:2, 4:1}[e.button];\r\n\t }\r\n\t};\r\n\r\n\texports.capture = function(el, eventHandler, releaseCaptureHandler) {\r\n\t function onMouseUp(e) {\r\n\t eventHandler && eventHandler(e);\r\n\t releaseCaptureHandler && releaseCaptureHandler(e);\r\n\r\n\t exports.removeListener(document, \"mousemove\", eventHandler, true);\r\n\t exports.removeListener(document, \"mouseup\", onMouseUp, true);\r\n\t exports.removeListener(document, \"dragstart\", onMouseUp, true);\r\n\t }\r\n\r\n\t exports.addListener(document, \"mousemove\", eventHandler, true);\r\n\t exports.addListener(document, \"mouseup\", onMouseUp, true);\r\n\t exports.addListener(document, \"dragstart\", onMouseUp, true);\r\n\t \r\n\t return onMouseUp;\r\n\t};\r\n\r\n\texports.addTouchMoveListener = function (el, callback) {\r\n\t if (\"ontouchmove\" in el) {\r\n\t var startx, starty;\r\n\t exports.addListener(el, \"touchstart\", function (e) {\r\n\t var touchObj = e.changedTouches[0];\r\n\t startx = touchObj.clientX;\r\n\t starty = touchObj.clientY;\r\n\t });\r\n\t exports.addListener(el, \"touchmove\", function (e) {\r\n\t var factor = 1,\r\n\t touchObj = e.changedTouches[0];\r\n\r\n\t e.wheelX = -(touchObj.clientX - startx) / factor;\r\n\t e.wheelY = -(touchObj.clientY - starty) / factor;\r\n\r\n\t startx = touchObj.clientX;\r\n\t starty = touchObj.clientY;\r\n\r\n\t callback(e);\r\n\t });\r\n\t } \r\n\t};\r\n\r\n\texports.addMouseWheelListener = function(el, callback) {\r\n\t if (\"onmousewheel\" in el) {\r\n\t exports.addListener(el, \"mousewheel\", function(e) {\r\n\t var factor = 8;\r\n\t if (e.wheelDeltaX !== undefined) {\r\n\t e.wheelX = -e.wheelDeltaX / factor;\r\n\t e.wheelY = -e.wheelDeltaY / factor;\r\n\t } else {\r\n\t e.wheelX = 0;\r\n\t e.wheelY = -e.wheelDelta / factor;\r\n\t }\r\n\t callback(e);\r\n\t });\r\n\t } else if (\"onwheel\" in el) {\r\n\t exports.addListener(el, \"wheel\", function(e) {\r\n\t var factor = 0.35;\r\n\t switch (e.deltaMode) {\r\n\t case e.DOM_DELTA_PIXEL:\r\n\t e.wheelX = e.deltaX * factor || 0;\r\n\t e.wheelY = e.deltaY * factor || 0;\r\n\t break;\r\n\t case e.DOM_DELTA_LINE:\r\n\t case e.DOM_DELTA_PAGE:\r\n\t e.wheelX = (e.deltaX || 0) * 5;\r\n\t e.wheelY = (e.deltaY || 0) * 5;\r\n\t break;\r\n\t }\r\n\t \r\n\t callback(e);\r\n\t });\r\n\t } else {\r\n\t exports.addListener(el, \"DOMMouseScroll\", function(e) {\r\n\t if (e.axis && e.axis == e.HORIZONTAL_AXIS) {\r\n\t e.wheelX = (e.detail || 0) * 5;\r\n\t e.wheelY = 0;\r\n\t } else {\r\n\t e.wheelX = 0;\r\n\t e.wheelY = (e.detail || 0) * 5;\r\n\t }\r\n\t callback(e);\r\n\t });\r\n\t }\r\n\t};\r\n\r\n\texports.addMultiMouseDownListener = function(elements, timeouts, eventHandler, callbackName) {\r\n\t var clicks = 0;\r\n\t var startX, startY, timer; \r\n\t var eventNames = {\r\n\t 2: \"dblclick\",\r\n\t 3: \"tripleclick\",\r\n\t 4: \"quadclick\"\r\n\t };\r\n\r\n\t function onMousedown(e) {\r\n\t if (exports.getButton(e) !== 0) {\r\n\t clicks = 0;\r\n\t } else if (e.detail > 1) {\r\n\t clicks++;\r\n\t if (clicks > 4)\r\n\t clicks = 1;\r\n\t } else {\r\n\t clicks = 1;\r\n\t }\r\n\t if (useragent.isIE) {\r\n\t var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\r\n\t if (!timer || isNewClick)\r\n\t clicks = 1;\r\n\t if (timer)\r\n\t clearTimeout(timer);\r\n\t timer = setTimeout(function() {timer = null}, timeouts[clicks - 1] || 600);\r\n\r\n\t if (clicks == 1) {\r\n\t startX = e.clientX;\r\n\t startY = e.clientY;\r\n\t }\r\n\t }\r\n\t \r\n\t e._clicks = clicks;\r\n\r\n\t eventHandler[callbackName](\"mousedown\", e);\r\n\r\n\t if (clicks > 4)\r\n\t clicks = 0;\r\n\t else if (clicks > 1)\r\n\t return eventHandler[callbackName](eventNames[clicks], e);\r\n\t }\r\n\t function onDblclick(e) {\r\n\t clicks = 2;\r\n\t if (timer)\r\n\t clearTimeout(timer);\r\n\t timer = setTimeout(function() {timer = null}, timeouts[clicks - 1] || 600);\r\n\t eventHandler[callbackName](\"mousedown\", e);\r\n\t eventHandler[callbackName](eventNames[clicks], e);\r\n\t }\r\n\t if (!Array.isArray(elements))\r\n\t elements = [elements];\r\n\t elements.forEach(function(el) {\r\n\t exports.addListener(el, \"mousedown\", onMousedown);\r\n\t if (useragent.isOldIE)\r\n\t exports.addListener(el, \"dblclick\", onDblclick);\r\n\t });\r\n\t};\r\n\r\n\tvar getModifierHash = useragent.isMac && useragent.isOpera && !(\"KeyboardEvent\" in window)\r\n\t ? function(e) {\r\n\t return 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0);\r\n\t }\r\n\t : function(e) {\r\n\t return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\r\n\t };\r\n\r\n\texports.getModifierString = function(e) {\r\n\t return keys.KEY_MODS[getModifierHash(e)];\r\n\t};\r\n\r\n\tfunction normalizeCommandKeys(callback, e, keyCode) {\r\n\t var hashId = getModifierHash(e);\r\n\r\n\t if (!useragent.isMac && pressedKeys) {\r\n\t if (pressedKeys.OSKey)\r\n\t hashId |= 8;\r\n\t if (pressedKeys.altGr) {\r\n\t if ((3 & hashId) != 3)\r\n\t pressedKeys.altGr = 0;\r\n\t else\r\n\t return;\r\n\t }\r\n\t if (keyCode === 18 || keyCode === 17) {\r\n\t var location = \"location\" in e ? e.location : e.keyLocation;\r\n\t if (keyCode === 17 && location === 1) {\r\n\t if (pressedKeys[keyCode] == 1)\r\n\t ts = e.timeStamp;\r\n\t } else if (keyCode === 18 && hashId === 3 && location === 2) {\r\n\t var dt = e.timeStamp - ts;\r\n\t if (dt < 50)\r\n\t pressedKeys.altGr = true;\r\n\t }\r\n\t }\r\n\t }\r\n\t \r\n\t if (keyCode in keys.MODIFIER_KEYS) {\r\n\t keyCode = -1;\r\n\t }\r\n\t if (hashId & 8 && (keyCode >= 91 && keyCode <= 93)) {\r\n\t keyCode = -1;\r\n\t }\r\n\t \r\n\t if (!hashId && keyCode === 13) {\r\n\t var location = \"location\" in e ? e.location : e.keyLocation;\r\n\t if (location === 3) {\r\n\t callback(e, hashId, -keyCode);\r\n\t if (e.defaultPrevented)\r\n\t return;\r\n\t }\r\n\t }\r\n\t \r\n\t if (useragent.isChromeOS && hashId & 8) {\r\n\t callback(e, hashId, keyCode);\r\n\t if (e.defaultPrevented)\r\n\t return;\r\n\t else\r\n\t hashId &= ~8;\r\n\t }\r\n\t if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\r\n\t return false;\r\n\t }\r\n\t \r\n\t return callback(e, hashId, keyCode);\r\n\t}\r\n\r\n\r\n\texports.addCommandKeyListener = function(el, callback) {\r\n\t var addListener = exports.addListener;\r\n\t if (useragent.isOldGecko || (useragent.isOpera && !(\"KeyboardEvent\" in window))) {\r\n\t var lastKeyDownKeyCode = null;\r\n\t addListener(el, \"keydown\", function(e) {\r\n\t lastKeyDownKeyCode = e.keyCode;\r\n\t });\r\n\t addListener(el, \"keypress\", function(e) {\r\n\t return normalizeCommandKeys(callback, e, lastKeyDownKeyCode);\r\n\t });\r\n\t } else {\r\n\t var lastDefaultPrevented = null;\r\n\r\n\t addListener(el, \"keydown\", function(e) {\r\n\t var keyCode = e.keyCode;\r\n\t pressedKeys[keyCode] = (pressedKeys[keyCode] || 0) + 1;\r\n\t if (keyCode == 91 || keyCode == 92) {\r\n\t pressedKeys.OSKey = true;\r\n\t } else if (pressedKeys.OSKey) {\r\n\t if (e.timeStamp - pressedKeys.lastT > 200 && pressedKeys.count == 1)\r\n\t resetPressedKeys();\r\n\t }\r\n\t if (pressedKeys[keyCode] == 1)\r\n\t pressedKeys.count++;\r\n\t pressedKeys.lastT = e.timeStamp;\r\n\t var result = normalizeCommandKeys(callback, e, keyCode);\r\n\t lastDefaultPrevented = e.defaultPrevented;\r\n\t return result;\r\n\t });\r\n\r\n\t addListener(el, \"keypress\", function(e) {\r\n\t if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\r\n\t exports.stopEvent(e);\r\n\t lastDefaultPrevented = null;\r\n\t }\r\n\t });\r\n\r\n\t addListener(el, \"keyup\", function(e) {\r\n\t var keyCode = e.keyCode;\r\n\t if (!pressedKeys[keyCode]) {\r\n\t resetPressedKeys();\r\n\t } else {\r\n\t pressedKeys.count = Math.max(pressedKeys.count - 1, 0);\r\n\t }\r\n\t if (keyCode == 91 || keyCode == 92) {\r\n\t pressedKeys.OSKey = false;\r\n\t }\r\n\t pressedKeys[keyCode] = null;\r\n\t });\r\n\r\n\t if (!pressedKeys) {\r\n\t resetPressedKeys();\r\n\t addListener(window, \"focus\", resetPressedKeys);\r\n\t }\r\n\t }\r\n\t};\r\n\tfunction resetPressedKeys() {\r\n\t pressedKeys = Object.create(null);\r\n\t pressedKeys.count = 0;\r\n\t pressedKeys.lastT = 0;\r\n\t}\r\n\r\n\tif (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\r\n\t var postMessageId = 1;\r\n\t exports.nextTick = function(callback, win) {\r\n\t win = win || window;\r\n\t var messageName = \"zero-timeout-message-\" + postMessageId;\r\n\t exports.addListener(win, \"message\", function listener(e) {\r\n\t if (e.data == messageName) {\r\n\t exports.stopPropagation(e);\r\n\t exports.removeListener(win, \"message\", listener);\r\n\t callback();\r\n\t }\r\n\t });\r\n\t win.postMessage(messageName, \"*\");\r\n\t };\r\n\t}\r\n\r\n\r\n\texports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\r\n\t || window.mozRequestAnimationFrame\r\n\t || window.webkitRequestAnimationFrame\r\n\t || window.msRequestAnimationFrame\r\n\t || window.oRequestAnimationFrame);\r\n\r\n\tif (exports.nextFrame)\r\n\t exports.nextFrame = exports.nextFrame.bind(window);\r\n\telse\r\n\t exports.nextFrame = function(callback) {\r\n\t setTimeout(callback, 17);\r\n\t };\r\n\t});\r\n\r\n\tace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\texports.last = function(a) {\r\n\t return a[a.length - 1];\r\n\t};\r\n\r\n\texports.stringReverse = function(string) {\r\n\t return string.split(\"\").reverse().join(\"\");\r\n\t};\r\n\r\n\texports.stringRepeat = function (string, count) {\r\n\t var result = '';\r\n\t while (count > 0) {\r\n\t if (count & 1)\r\n\t result += string;\r\n\r\n\t if (count >>= 1)\r\n\t string += string;\r\n\t }\r\n\t return result;\r\n\t};\r\n\r\n\tvar trimBeginRegexp = /^\\s\\s*/;\r\n\tvar trimEndRegexp = /\\s\\s*$/;\r\n\r\n\texports.stringTrimLeft = function (string) {\r\n\t return string.replace(trimBeginRegexp, '');\r\n\t};\r\n\r\n\texports.stringTrimRight = function (string) {\r\n\t return string.replace(trimEndRegexp, '');\r\n\t};\r\n\r\n\texports.copyObject = function(obj) {\r\n\t var copy = {};\r\n\t for (var key in obj) {\r\n\t copy[key] = obj[key];\r\n\t }\r\n\t return copy;\r\n\t};\r\n\r\n\texports.copyArray = function(array){\r\n\t var copy = [];\r\n\t for (var i=0, l=array.length; i<l; i++) {\r\n\t if (array[i] && typeof array[i] == \"object\")\r\n\t copy[i] = this.copyObject( array[i] );\r\n\t else \r\n\t copy[i] = array[i];\r\n\t }\r\n\t return copy;\r\n\t};\r\n\r\n\texports.deepCopy = function deepCopy(obj) {\r\n\t if (typeof obj !== \"object\" || !obj)\r\n\t return obj;\r\n\t var copy;\r\n\t if (Array.isArray(obj)) {\r\n\t copy = [];\r\n\t for (var key = 0; key < obj.length; key++) {\r\n\t copy[key] = deepCopy(obj[key]);\r\n\t }\r\n\t return copy;\r\n\t }\r\n\t var cons = obj.constructor;\r\n\t if (cons === RegExp)\r\n\t return obj;\r\n\t \r\n\t copy = cons();\r\n\t for (var key in obj) {\r\n\t copy[key] = deepCopy(obj[key]);\r\n\t }\r\n\t return copy;\r\n\t};\r\n\r\n\texports.arrayToMap = function(arr) {\r\n\t var map = {};\r\n\t for (var i=0; i<arr.length; i++) {\r\n\t map[arr[i]] = 1;\r\n\t }\r\n\t return map;\r\n\r\n\t};\r\n\r\n\texports.createMap = function(props) {\r\n\t var map = Object.create(null);\r\n\t for (var i in props) {\r\n\t map[i] = props[i];\r\n\t }\r\n\t return map;\r\n\t};\r\n\texports.arrayRemove = function(array, value) {\r\n\t for (var i = 0; i <= array.length; i++) {\r\n\t if (value === array[i]) {\r\n\t array.splice(i, 1);\r\n\t }\r\n\t }\r\n\t};\r\n\r\n\texports.escapeRegExp = function(str) {\r\n\t return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\r\n\t};\r\n\r\n\texports.escapeHTML = function(str) {\r\n\t return str.replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\r\n\t};\r\n\r\n\texports.getMatchOffsets = function(string, regExp) {\r\n\t var matches = [];\r\n\r\n\t string.replace(regExp, function(str) {\r\n\t matches.push({\r\n\t offset: arguments[arguments.length-2],\r\n\t length: str.length\r\n\t });\r\n\t });\r\n\r\n\t return matches;\r\n\t};\r\n\texports.deferredCall = function(fcn) {\r\n\t var timer = null;\r\n\t var callback = function() {\r\n\t timer = null;\r\n\t fcn();\r\n\t };\r\n\r\n\t var deferred = function(timeout) {\r\n\t deferred.cancel();\r\n\t timer = setTimeout(callback, timeout || 0);\r\n\t return deferred;\r\n\t };\r\n\r\n\t deferred.schedule = deferred;\r\n\r\n\t deferred.call = function() {\r\n\t this.cancel();\r\n\t fcn();\r\n\t return deferred;\r\n\t };\r\n\r\n\t deferred.cancel = function() {\r\n\t clearTimeout(timer);\r\n\t timer = null;\r\n\t return deferred;\r\n\t };\r\n\t \r\n\t deferred.isPending = function() {\r\n\t return timer;\r\n\t };\r\n\r\n\t return deferred;\r\n\t};\r\n\r\n\r\n\texports.delayedCall = function(fcn, defaultTimeout) {\r\n\t var timer = null;\r\n\t var callback = function() {\r\n\t timer = null;\r\n\t fcn();\r\n\t };\r\n\r\n\t var _self = function(timeout) {\r\n\t if (timer == null)\r\n\t timer = setTimeout(callback, timeout || defaultTimeout);\r\n\t };\r\n\r\n\t _self.delay = function(timeout) {\r\n\t timer && clearTimeout(timer);\r\n\t timer = setTimeout(callback, timeout || defaultTimeout);\r\n\t };\r\n\t _self.schedule = _self;\r\n\r\n\t _self.call = function() {\r\n\t this.cancel();\r\n\t fcn();\r\n\t };\r\n\r\n\t _self.cancel = function() {\r\n\t timer && clearTimeout(timer);\r\n\t timer = null;\r\n\t };\r\n\r\n\t _self.isPending = function() {\r\n\t return timer;\r\n\t };\r\n\r\n\t return _self;\r\n\t};\r\n\t});\r\n\r\n\tace.define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar event = acequire(\"../lib/event\");\r\n\tvar useragent = acequire(\"../lib/useragent\");\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar lang = acequire(\"../lib/lang\");\r\n\tvar BROKEN_SETDATA = useragent.isChrome < 18;\r\n\tvar USE_IE_MIME_TYPE = useragent.isIE;\r\n\r\n\tvar TextInput = function(parentNode, host) {\r\n\t var text = dom.createElement(\"textarea\");\r\n\t text.className = \"ace_text-input\";\r\n\r\n\t if (useragent.isTouchPad)\r\n\t text.setAttribute(\"x-palm-disable-auto-cap\", true);\r\n\r\n\t text.setAttribute(\"wrap\", \"off\");\r\n\t text.setAttribute(\"autocorrect\", \"off\");\r\n\t text.setAttribute(\"autocapitalize\", \"off\");\r\n\t text.setAttribute(\"spellcheck\", false);\r\n\r\n\t text.style.opacity = \"0\";\r\n\t if (useragent.isOldIE) text.style.top = \"-1000px\";\r\n\t parentNode.insertBefore(text, parentNode.firstChild);\r\n\r\n\t var PLACEHOLDER = \"\\x01\\x01\";\r\n\r\n\t var copied = false;\r\n\t var pasted = false;\r\n\t var inComposition = false;\r\n\t var tempStyle = '';\r\n\t var isSelectionEmpty = true;\r\n\t try { var isFocused = document.activeElement === text; } catch(e) {}\r\n\t \r\n\t event.addListener(text, \"blur\", function(e) {\r\n\t host.onBlur(e);\r\n\t isFocused = false;\r\n\t });\r\n\t event.addListener(text, \"focus\", function(e) {\r\n\t isFocused = true;\r\n\t host.onFocus(e);\r\n\t resetSelection();\r\n\t });\r\n\t this.focus = function() {\r\n\t if (tempStyle) return text.focus();\r\n\t var top = text.style.top;\r\n\t text.style.position = \"fixed\";\r\n\t text.style.top = \"0px\";\r\n\t text.focus();\r\n\t setTimeout(function() {\r\n\t text.style.position = \"\";\r\n\t if (text.style.top == \"0px\")\r\n\t text.style.top = top;\r\n\t }, 0);\r\n\t };\r\n\t this.blur = function() {\r\n\t text.blur();\r\n\t };\r\n\t this.isFocused = function() {\r\n\t return isFocused;\r\n\t };\r\n\t var syncSelection = lang.delayedCall(function() {\r\n\t isFocused && resetSelection(isSelectionEmpty);\r\n\t });\r\n\t var syncValue = lang.delayedCall(function() {\r\n\t if (!inComposition) {\r\n\t text.value = PLACEHOLDER;\r\n\t isFocused && resetSelection();\r\n\t }\r\n\t });\r\n\r\n\t function resetSelection(isEmpty) {\r\n\t if (inComposition)\r\n\t return;\r\n\t inComposition = true;\r\n\t \r\n\t if (inputHandler) {\r\n\t selectionStart = 0;\r\n\t selectionEnd = isEmpty ? 0 : text.value.length - 1;\r\n\t } else {\r\n\t var selectionStart = isEmpty ? 2 : 1;\r\n\t var selectionEnd = 2;\r\n\t }\r\n\t try {\r\n\t text.setSelectionRange(selectionStart, selectionEnd);\r\n\t } catch(e){}\r\n\t \r\n\t inComposition = false;\r\n\t }\r\n\r\n\t function resetValue() {\r\n\t if (inComposition)\r\n\t return;\r\n\t text.value = PLACEHOLDER;\r\n\t if (useragent.isWebKit)\r\n\t syncValue.schedule();\r\n\t }\r\n\r\n\t useragent.isWebKit || host.addEventListener('changeSelection', function() {\r\n\t if (host.selection.isEmpty() != isSelectionEmpty) {\r\n\t isSelectionEmpty = !isSelectionEmpty;\r\n\t syncSelection.schedule();\r\n\t }\r\n\t });\r\n\r\n\t resetValue();\r\n\t if (isFocused)\r\n\t host.onFocus();\r\n\r\n\r\n\t var isAllSelected = function(text) {\r\n\t return text.selectionStart === 0 && text.selectionEnd === text.value.length;\r\n\t };\r\n\t if (!text.setSelectionRange && text.createTextRange) {\r\n\t text.setSelectionRange = function(selectionStart, selectionEnd) {\r\n\t var range = this.createTextRange();\r\n\t range.collapse(true);\r\n\t range.moveStart('character', selectionStart);\r\n\t range.moveEnd('character', selectionEnd);\r\n\t range.select();\r\n\t };\r\n\t isAllSelected = function(text) {\r\n\t try {\r\n\t var range = text.ownerDocument.selection.createRange();\r\n\t }catch(e) {}\r\n\t if (!range || range.parentElement() != text) return false;\r\n\t return range.text == text.value;\r\n\t }\r\n\t }\r\n\t if (useragent.isOldIE) {\r\n\t var inPropertyChange = false;\r\n\t var onPropertyChange = function(e){\r\n\t if (inPropertyChange)\r\n\t return;\r\n\t var data = text.value;\r\n\t if (inComposition || !data || data == PLACEHOLDER)\r\n\t return;\r\n\t if (e && data == PLACEHOLDER[0])\r\n\t return syncProperty.schedule();\r\n\r\n\t sendText(data);\r\n\t inPropertyChange = true;\r\n\t resetValue();\r\n\t inPropertyChange = false;\r\n\t };\r\n\t var syncProperty = lang.delayedCall(onPropertyChange);\r\n\t event.addListener(text, \"propertychange\", onPropertyChange);\r\n\r\n\t var keytable = { 13:1, 27:1 };\r\n\t event.addListener(text, \"keyup\", function (e) {\r\n\t if (inComposition && (!text.value || keytable[e.keyCode]))\r\n\t setTimeout(onCompositionEnd, 0);\r\n\t if ((text.value.charCodeAt(0)||0) < 129) {\r\n\t return syncProperty.call();\r\n\t }\r\n\t inComposition ? onCompositionUpdate() : onCompositionStart();\r\n\t });\r\n\t event.addListener(text, \"keydown\", function (e) {\r\n\t syncProperty.schedule(50);\r\n\t });\r\n\t }\r\n\r\n\t var onSelect = function(e) {\r\n\t if (copied) {\r\n\t copied = false;\r\n\t } else if (isAllSelected(text)) {\r\n\t host.selectAll();\r\n\t resetSelection();\r\n\t } else if (inputHandler) {\r\n\t resetSelection(host.selection.isEmpty());\r\n\t }\r\n\t };\r\n\r\n\t var inputHandler = null;\r\n\t this.setInputHandler = function(cb) {inputHandler = cb};\r\n\t this.getInputHandler = function() {return inputHandler};\r\n\t var afterContextMenu = false;\r\n\t \r\n\t var sendText = function(data) {\r\n\t if (inputHandler) {\r\n\t data = inputHandler(data);\r\n\t inputHandler = null;\r\n\t }\r\n\t if (pasted) {\r\n\t resetSelection();\r\n\t if (data)\r\n\t host.onPaste(data);\r\n\t pasted = false;\r\n\t } else if (data == PLACEHOLDER.charAt(0)) {\r\n\t if (afterContextMenu)\r\n\t host.execCommand(\"del\", {source: \"ace\"});\r\n\t else // some versions of android do not fire keydown when pressing backspace\r\n\t host.execCommand(\"backspace\", {source: \"ace\"});\r\n\t } else {\r\n\t if (data.substring(0, 2) == PLACEHOLDER)\r\n\t data = data.substr(2);\r\n\t else if (data.charAt(0) == PLACEHOLDER.charAt(0))\r\n\t data = data.substr(1);\r\n\t else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))\r\n\t data = data.slice(0, -1);\r\n\t if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))\r\n\t data = data.slice(0, -1);\r\n\t \r\n\t if (data)\r\n\t host.onTextInput(data);\r\n\t }\r\n\t if (afterContextMenu)\r\n\t afterContextMenu = false;\r\n\t };\r\n\t var onInput = function(e) {\r\n\t if (inComposition)\r\n\t return;\r\n\t var data = text.value;\r\n\t sendText(data);\r\n\t resetValue();\r\n\t };\r\n\t \r\n\t var handleClipboardData = function(e, data) {\r\n\t var clipboardData = e.clipboardData || window.clipboardData;\r\n\t if (!clipboardData || BROKEN_SETDATA)\r\n\t return;\r\n\t var mime = USE_IE_MIME_TYPE ? \"Text\" : \"text/plain\";\r\n\t if (data) {\r\n\t return clipboardData.setData(mime, data) !== false;\r\n\t } else {\r\n\t return clipboardData.getData(mime);\r\n\t }\r\n\t };\r\n\r\n\t var doCopy = function(e, isCut) {\r\n\t var data = host.getCopyText();\r\n\t if (!data)\r\n\t return event.preventDefault(e);\r\n\r\n\t if (handleClipboardData(e, data)) {\r\n\t isCut ? host.onCut() : host.onCopy();\r\n\t event.preventDefault(e);\r\n\t } else {\r\n\t copied = true;\r\n\t text.value = data;\r\n\t text.select();\r\n\t setTimeout(function(){\r\n\t copied = false;\r\n\t resetValue();\r\n\t resetSelection();\r\n\t isCut ? host.onCut() : host.onCopy();\r\n\t });\r\n\t }\r\n\t };\r\n\t \r\n\t var onCut = function(e) {\r\n\t doCopy(e, true);\r\n\t };\r\n\t \r\n\t var onCopy = function(e) {\r\n\t doCopy(e, false);\r\n\t };\r\n\t \r\n\t var onPaste = function(e) {\r\n\t var data = handleClipboardData(e);\r\n\t if (typeof data == \"string\") {\r\n\t if (data)\r\n\t host.onPaste(data, e);\r\n\t if (useragent.isIE)\r\n\t setTimeout(resetSelection);\r\n\t event.preventDefault(e);\r\n\t }\r\n\t else {\r\n\t text.value = \"\";\r\n\t pasted = true;\r\n\t }\r\n\t };\r\n\r\n\t event.addCommandKeyListener(text, host.onCommandKey.bind(host));\r\n\r\n\t event.addListener(text, \"select\", onSelect);\r\n\r\n\t event.addListener(text, \"input\", onInput);\r\n\r\n\t event.addListener(text, \"cut\", onCut);\r\n\t event.addListener(text, \"copy\", onCopy);\r\n\t event.addListener(text, \"paste\", onPaste);\r\n\t if (!('oncut' in text) || !('oncopy' in text) || !('onpaste' in text)){\r\n\t event.addListener(parentNode, \"keydown\", function(e) {\r\n\t if ((useragent.isMac && !e.metaKey) || !e.ctrlKey)\r\n\t return;\r\n\r\n\t switch (e.keyCode) {\r\n\t case 67:\r\n\t onCopy(e);\r\n\t break;\r\n\t case 86:\r\n\t onPaste(e);\r\n\t break;\r\n\t case 88:\r\n\t onCut(e);\r\n\t break;\r\n\t }\r\n\t });\r\n\t }\r\n\t var onCompositionStart = function(e) {\r\n\t if (inComposition || !host.onCompositionStart || host.$readOnly) \r\n\t return;\r\n\t inComposition = {};\r\n\t host.onCompositionStart();\r\n\t setTimeout(onCompositionUpdate, 0);\r\n\t host.on(\"mousedown\", onCompositionEnd);\r\n\t if (!host.selection.isEmpty()) {\r\n\t host.insert(\"\");\r\n\t host.session.markUndoGroup();\r\n\t host.selection.clearSelection();\r\n\t }\r\n\t host.session.markUndoGroup();\r\n\t };\r\n\r\n\t var onCompositionUpdate = function() {\r\n\t if (!inComposition || !host.onCompositionUpdate || host.$readOnly)\r\n\t return;\r\n\t var val = text.value.replace(/\\x01/g, \"\");\r\n\t if (inComposition.lastValue === val) return;\r\n\t \r\n\t host.onCompositionUpdate(val);\r\n\t if (inComposition.lastValue)\r\n\t host.undo();\r\n\t inComposition.lastValue = val;\r\n\t if (inComposition.lastValue) {\r\n\t var r = host.selection.getRange();\r\n\t host.insert(inComposition.lastValue);\r\n\t host.session.markUndoGroup();\r\n\t inComposition.range = host.selection.getRange();\r\n\t host.selection.setRange(r);\r\n\t host.selection.clearSelection();\r\n\t }\r\n\t };\r\n\r\n\t var onCompositionEnd = function(e) {\r\n\t if (!host.onCompositionEnd || host.$readOnly) return;\r\n\t var c = inComposition;\r\n\t inComposition = false;\r\n\t var timer = setTimeout(function() {\r\n\t timer = null;\r\n\t var str = text.value.replace(/\\x01/g, \"\");\r\n\t if (inComposition)\r\n\t return;\r\n\t else if (str == c.lastValue)\r\n\t resetValue();\r\n\t else if (!c.lastValue && str) {\r\n\t resetValue();\r\n\t sendText(str);\r\n\t }\r\n\t });\r\n\t inputHandler = function compositionInputHandler(str) {\r\n\t if (timer)\r\n\t clearTimeout(timer);\r\n\t str = str.replace(/\\x01/g, \"\");\r\n\t if (str == c.lastValue)\r\n\t return \"\";\r\n\t if (c.lastValue && timer)\r\n\t host.undo();\r\n\t return str;\r\n\t };\r\n\t host.onCompositionEnd();\r\n\t host.removeListener(\"mousedown\", onCompositionEnd);\r\n\t if (e.type == \"compositionend\" && c.range) {\r\n\t host.selection.setRange(c.range);\r\n\t }\r\n\t };\r\n\t \r\n\t \r\n\r\n\t var syncComposition = lang.delayedCall(onCompositionUpdate, 50);\r\n\r\n\t event.addListener(text, \"compositionstart\", onCompositionStart);\r\n\t if (useragent.isGecko) {\r\n\t event.addListener(text, \"text\", function(){syncComposition.schedule()});\r\n\t } else {\r\n\t event.addListener(text, \"keyup\", function(){syncComposition.schedule()});\r\n\t event.addListener(text, \"keydown\", function(){syncComposition.schedule()});\r\n\t }\r\n\t event.addListener(text, \"compositionend\", onCompositionEnd);\r\n\r\n\t this.getElement = function() {\r\n\t return text;\r\n\t };\r\n\r\n\t this.setReadOnly = function(readOnly) {\r\n\t text.readOnly = readOnly;\r\n\t };\r\n\r\n\t this.onContextMenu = function(e) {\r\n\t afterContextMenu = true;\r\n\t resetSelection(host.selection.isEmpty());\r\n\t host._emit(\"nativecontextmenu\", {target: host, domEvent: e});\r\n\t this.moveToMouse(e, true);\r\n\t };\r\n\t \r\n\t this.moveToMouse = function(e, bringToFront) {\r\n\t if (!bringToFront && useragent.isOldIE)\r\n\t return;\r\n\t if (!tempStyle)\r\n\t tempStyle = text.style.cssText;\r\n\t text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\")\r\n\t + \"height:\" + text.style.height + \";\"\r\n\t + (useragent.isIE ? \"opacity:0.1;\" : \"\");\r\n\r\n\t var rect = host.container.getBoundingClientRect();\r\n\t var style = dom.computedStyle(host.container);\r\n\t var top = rect.top + (parseInt(style.borderTopWidth) || 0);\r\n\t var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);\r\n\t var maxTop = rect.bottom - top - text.clientHeight -2;\r\n\t var move = function(e) {\r\n\t text.style.left = e.clientX - left - 2 + \"px\";\r\n\t text.style.top = Math.min(e.clientY - top - 2, maxTop) + \"px\";\r\n\t }; \r\n\t move(e);\r\n\r\n\t if (e.type != \"mousedown\")\r\n\t return;\r\n\r\n\t if (host.renderer.$keepTextAreaAtCursor)\r\n\t host.renderer.$keepTextAreaAtCursor = null;\r\n\r\n\t clearTimeout(closeTimeout);\r\n\t if (useragent.isWin && !useragent.isOldIE)\r\n\t event.capture(host.container, move, onContextMenuClose);\r\n\t };\r\n\r\n\t this.onContextMenuClose = onContextMenuClose;\r\n\t var closeTimeout;\r\n\t function onContextMenuClose() {\r\n\t clearTimeout(closeTimeout);\r\n\t closeTimeout = setTimeout(function () {\r\n\t if (tempStyle) {\r\n\t text.style.cssText = tempStyle;\r\n\t tempStyle = '';\r\n\t }\r\n\t if (host.renderer.$keepTextAreaAtCursor == null) {\r\n\t host.renderer.$keepTextAreaAtCursor = true;\r\n\t host.renderer.$moveTextAreaToCursor();\r\n\t }\r\n\t }, useragent.isOldIE ? 200 : 0);\r\n\t }\r\n\r\n\t var onContextMenu = function(e) {\r\n\t host.textInput.onContextMenu(e);\r\n\t onContextMenuClose();\r\n\t };\r\n\t event.addListener(text, \"mouseup\", onContextMenu);\r\n\t event.addListener(text, \"mousedown\", function(e) {\r\n\t e.preventDefault();\r\n\t onContextMenuClose();\r\n\t });\r\n\t event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu);\r\n\t event.addListener(text, \"contextmenu\", onContextMenu);\r\n\t};\r\n\r\n\texports.TextInput = TextInput;\r\n\t});\r\n\r\n\tace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar event = acequire(\"../lib/event\");\r\n\tvar useragent = acequire(\"../lib/useragent\");\r\n\r\n\tvar DRAG_OFFSET = 0; // pixels\r\n\r\n\tfunction DefaultHandlers(mouseHandler) {\r\n\t mouseHandler.$clickSelection = null;\r\n\r\n\t var editor = mouseHandler.editor;\r\n\t editor.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(mouseHandler));\r\n\t editor.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(mouseHandler));\r\n\t editor.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(mouseHandler));\r\n\t editor.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(mouseHandler));\r\n\t editor.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(mouseHandler));\r\n\t editor.setDefaultHandler(\"touchmove\", this.onTouchMove.bind(mouseHandler));\r\n\r\n\t var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\",\r\n\t \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\r\n\r\n\t exports.forEach(function(x) {\r\n\t mouseHandler[x] = this[x];\r\n\t }, this);\r\n\r\n\t mouseHandler.selectByLines = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\r\n\t mouseHandler.selectByWords = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\r\n\t}\r\n\r\n\t(function() {\r\n\r\n\t this.onMouseDown = function(ev) {\r\n\t var inSelection = ev.inSelection();\r\n\t var pos = ev.getDocumentPosition();\r\n\t this.mousedownEvent = ev;\r\n\t var editor = this.editor;\r\n\r\n\t var button = ev.getButton();\r\n\t if (button !== 0) {\r\n\t var selectionRange = editor.getSelectionRange();\r\n\t var selectionEmpty = selectionRange.isEmpty();\r\n\t editor.$blockScrolling++;\r\n\t if (selectionEmpty || button == 1)\r\n\t editor.selection.moveToPosition(pos);\r\n\t editor.$blockScrolling--;\r\n\t if (button == 2)\r\n\t editor.textInput.onContextMenu(ev.domEvent);\r\n\t return; // stopping event here breaks contextmenu on ff mac\r\n\t }\r\n\r\n\t this.mousedownEvent.time = Date.now();\r\n\t if (inSelection && !editor.isFocused()) {\r\n\t editor.focus();\r\n\t if (this.$focusTimout && !this.$clickSelection && !editor.inMultiSelectMode) {\r\n\t this.setState(\"focusWait\");\r\n\t this.captureMouse(ev);\r\n\t return;\r\n\t }\r\n\t }\r\n\r\n\t this.captureMouse(ev);\r\n\t this.startSelect(pos, ev.domEvent._clicks > 1);\r\n\t return ev.preventDefault();\r\n\t };\r\n\r\n\t this.startSelect = function(pos, waitForClickSelection) {\r\n\t pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\r\n\t var editor = this.editor;\r\n\t editor.$blockScrolling++;\r\n\t if (this.mousedownEvent.getShiftKey())\r\n\t editor.selection.selectToPosition(pos);\r\n\t else if (!waitForClickSelection)\r\n\t editor.selection.moveToPosition(pos);\r\n\t if (!waitForClickSelection)\r\n\t this.select();\r\n\t if (editor.renderer.scroller.setCapture) {\r\n\t editor.renderer.scroller.setCapture();\r\n\t }\r\n\t editor.setStyle(\"ace_selecting\");\r\n\t this.setState(\"select\");\r\n\t editor.$blockScrolling--;\r\n\t };\r\n\r\n\t this.select = function() {\r\n\t var anchor, editor = this.editor;\r\n\t var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\r\n\t editor.$blockScrolling++;\r\n\t if (this.$clickSelection) {\r\n\t var cmp = this.$clickSelection.comparePoint(cursor);\r\n\r\n\t if (cmp == -1) {\r\n\t anchor = this.$clickSelection.end;\r\n\t } else if (cmp == 1) {\r\n\t anchor = this.$clickSelection.start;\r\n\t } else {\r\n\t var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\r\n\t cursor = orientedRange.cursor;\r\n\t anchor = orientedRange.anchor;\r\n\t }\r\n\t editor.selection.setSelectionAnchor(anchor.row, anchor.column);\r\n\t }\r\n\t editor.selection.selectToPosition(cursor);\r\n\t editor.$blockScrolling--;\r\n\t editor.renderer.scrollCursorIntoView();\r\n\t };\r\n\r\n\t this.extendSelectionBy = function(unitName) {\r\n\t var anchor, editor = this.editor;\r\n\t var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\r\n\t var range = editor.selection[unitName](cursor.row, cursor.column);\r\n\t editor.$blockScrolling++;\r\n\t if (this.$clickSelection) {\r\n\t var cmpStart = this.$clickSelection.comparePoint(range.start);\r\n\t var cmpEnd = this.$clickSelection.comparePoint(range.end);\r\n\r\n\t if (cmpStart == -1 && cmpEnd <= 0) {\r\n\t anchor = this.$clickSelection.end;\r\n\t if (range.end.row != cursor.row || range.end.column != cursor.column)\r\n\t cursor = range.start;\r\n\t } else if (cmpEnd == 1 && cmpStart >= 0) {\r\n\t anchor = this.$clickSelection.start;\r\n\t if (range.start.row != cursor.row || range.start.column != cursor.column)\r\n\t cursor = range.end;\r\n\t } else if (cmpStart == -1 && cmpEnd == 1) {\r\n\t cursor = range.end;\r\n\t anchor = range.start;\r\n\t } else {\r\n\t var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\r\n\t cursor = orientedRange.cursor;\r\n\t anchor = orientedRange.anchor;\r\n\t }\r\n\t editor.selection.setSelectionAnchor(anchor.row, anchor.column);\r\n\t }\r\n\t editor.selection.selectToPosition(cursor);\r\n\t editor.$blockScrolling--;\r\n\t editor.renderer.scrollCursorIntoView();\r\n\t };\r\n\r\n\t this.selectEnd =\r\n\t this.selectAllEnd =\r\n\t this.selectByWordsEnd =\r\n\t this.selectByLinesEnd = function() {\r\n\t this.$clickSelection = null;\r\n\t this.editor.unsetStyle(\"ace_selecting\");\r\n\t if (this.editor.renderer.scroller.releaseCapture) {\r\n\t this.editor.renderer.scroller.releaseCapture();\r\n\t }\r\n\t };\r\n\r\n\t this.focusWait = function() {\r\n\t var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\r\n\t var time = Date.now();\r\n\r\n\t if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimout)\r\n\t this.startSelect(this.mousedownEvent.getDocumentPosition());\r\n\t };\r\n\r\n\t this.onDoubleClick = function(ev) {\r\n\t var pos = ev.getDocumentPosition();\r\n\t var editor = this.editor;\r\n\t var session = editor.session;\r\n\r\n\t var range = session.getBracketRange(pos);\r\n\t if (range) {\r\n\t if (range.isEmpty()) {\r\n\t range.start.column--;\r\n\t range.end.column++;\r\n\t }\r\n\t this.setState(\"select\");\r\n\t } else {\r\n\t range = editor.selection.getWordRange(pos.row, pos.column);\r\n\t this.setState(\"selectByWords\");\r\n\t }\r\n\t this.$clickSelection = range;\r\n\t this.select();\r\n\t };\r\n\r\n\t this.onTripleClick = function(ev) {\r\n\t var pos = ev.getDocumentPosition();\r\n\t var editor = this.editor;\r\n\r\n\t this.setState(\"selectByLines\");\r\n\t var range = editor.getSelectionRange();\r\n\t if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\r\n\t this.$clickSelection = editor.selection.getLineRange(range.start.row);\r\n\t this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\r\n\t } else {\r\n\t this.$clickSelection = editor.selection.getLineRange(pos.row);\r\n\t }\r\n\t this.select();\r\n\t };\r\n\r\n\t this.onQuadClick = function(ev) {\r\n\t var editor = this.editor;\r\n\r\n\t editor.selectAll();\r\n\t this.$clickSelection = editor.getSelectionRange();\r\n\t this.setState(\"selectAll\");\r\n\t };\r\n\r\n\t this.onMouseWheel = function(ev) {\r\n\t if (ev.getAccelKey())\r\n\t return;\r\n\t if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\r\n\t ev.wheelX = ev.wheelY;\r\n\t ev.wheelY = 0;\r\n\t }\r\n\r\n\t var t = ev.domEvent.timeStamp;\r\n\t var dt = t - (this.$lastScrollTime||0);\r\n\t \r\n\t var editor = this.editor;\r\n\t var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\r\n\t if (isScrolable || dt < 200) {\r\n\t this.$lastScrollTime = t;\r\n\t editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\r\n\t return ev.stop();\r\n\t }\r\n\t };\r\n\t \r\n\t this.onTouchMove = function (ev) {\r\n\t var t = ev.domEvent.timeStamp;\r\n\t var dt = t - (this.$lastScrollTime || 0);\r\n\r\n\t var editor = this.editor;\r\n\t var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\r\n\t if (isScrolable || dt < 200) {\r\n\t this.$lastScrollTime = t;\r\n\t editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\r\n\t return ev.stop();\r\n\t }\r\n\t };\r\n\r\n\t}).call(DefaultHandlers.prototype);\r\n\r\n\texports.DefaultHandlers = DefaultHandlers;\r\n\r\n\tfunction calcDistance(ax, ay, bx, by) {\r\n\t return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\r\n\t}\r\n\r\n\tfunction calcRangeOrientation(range, cursor) {\r\n\t if (range.start.row == range.end.row)\r\n\t var cmp = 2 * cursor.column - range.start.column - range.end.column;\r\n\t else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)\r\n\t var cmp = cursor.column - 4;\r\n\t else\r\n\t var cmp = 2 * cursor.row - range.start.row - range.end.row;\r\n\r\n\t if (cmp < 0)\r\n\t return {cursor: range.start, anchor: range.end};\r\n\t else\r\n\t return {cursor: range.end, anchor: range.start};\r\n\t}\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar dom = acequire(\"./lib/dom\");\r\n\tfunction Tooltip (parentNode) {\r\n\t this.isOpen = false;\r\n\t this.$element = null;\r\n\t this.$parentNode = parentNode;\r\n\t}\r\n\r\n\t(function() {\r\n\t this.$init = function() {\r\n\t this.$element = dom.createElement(\"div\");\r\n\t this.$element.className = \"ace_tooltip\";\r\n\t this.$element.style.display = \"none\";\r\n\t this.$parentNode.appendChild(this.$element);\r\n\t return this.$element;\r\n\t };\r\n\t this.getElement = function() {\r\n\t return this.$element || this.$init();\r\n\t };\r\n\t this.setText = function(text) {\r\n\t dom.setInnerText(this.getElement(), text);\r\n\t };\r\n\t this.setHtml = function(html) {\r\n\t this.getElement().innerHTML = html;\r\n\t };\r\n\t this.setPosition = function(x, y) {\r\n\t this.getElement().style.left = x + \"px\";\r\n\t this.getElement().style.top = y + \"px\";\r\n\t };\r\n\t this.setClassName = function(className) {\r\n\t dom.addCssClass(this.getElement(), className);\r\n\t };\r\n\t this.show = function(text, x, y) {\r\n\t if (text != null)\r\n\t this.setText(text);\r\n\t if (x != null && y != null)\r\n\t this.setPosition(x, y);\r\n\t if (!this.isOpen) {\r\n\t this.getElement().style.display = \"block\";\r\n\t this.isOpen = true;\r\n\t }\r\n\t };\r\n\r\n\t this.hide = function() {\r\n\t if (this.isOpen) {\r\n\t this.getElement().style.display = \"none\";\r\n\t this.isOpen = false;\r\n\t }\r\n\t };\r\n\t this.getHeight = function() {\r\n\t return this.getElement().offsetHeight;\r\n\t };\r\n\t this.getWidth = function() {\r\n\t return this.getElement().offsetWidth;\r\n\t };\r\n\r\n\t}).call(Tooltip.prototype);\r\n\r\n\texports.Tooltip = Tooltip;\r\n\t});\r\n\r\n\tace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/tooltip\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar event = acequire(\"../lib/event\");\r\n\tvar Tooltip = acequire(\"../tooltip\").Tooltip;\r\n\r\n\tfunction GutterHandler(mouseHandler) {\r\n\t var editor = mouseHandler.editor;\r\n\t var gutter = editor.renderer.$gutterLayer;\r\n\t var tooltip = new GutterTooltip(editor.container);\r\n\r\n\t mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function(e) {\r\n\t if (!editor.isFocused() || e.getButton() != 0)\r\n\t return;\r\n\t var gutterRegion = gutter.getRegion(e);\r\n\r\n\t if (gutterRegion == \"foldWidgets\")\r\n\t return;\r\n\r\n\t var row = e.getDocumentPosition().row;\r\n\t var selection = editor.session.selection;\r\n\r\n\t if (e.getShiftKey())\r\n\t selection.selectTo(row, 0);\r\n\t else {\r\n\t if (e.domEvent.detail == 2) {\r\n\t editor.selectAll();\r\n\t return e.preventDefault();\r\n\t }\r\n\t mouseHandler.$clickSelection = editor.selection.getLineRange(row);\r\n\t }\r\n\t mouseHandler.setState(\"selectByLines\");\r\n\t mouseHandler.captureMouse(e);\r\n\t return e.preventDefault();\r\n\t });\r\n\r\n\r\n\t var tooltipTimeout, mouseEvent, tooltipAnnotation;\r\n\r\n\t function showTooltip() {\r\n\t var row = mouseEvent.getDocumentPosition().row;\r\n\t var annotation = gutter.$annotations[row];\r\n\t if (!annotation)\r\n\t return hideTooltip();\r\n\r\n\t var maxRow = editor.session.getLength();\r\n\t if (row == maxRow) {\r\n\t var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\r\n\t var pos = mouseEvent.$pos;\r\n\t if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column))\r\n\t return hideTooltip();\r\n\t }\r\n\r\n\t if (tooltipAnnotation == annotation)\r\n\t return;\r\n\t tooltipAnnotation = annotation.text.join(\"<br/>\");\r\n\r\n\t tooltip.setHtml(tooltipAnnotation);\r\n\t tooltip.show();\r\n\t editor.on(\"mousewheel\", hideTooltip);\r\n\r\n\t if (mouseHandler.$tooltipFollowsMouse) {\r\n\t moveTooltip(mouseEvent);\r\n\t } else {\r\n\t var gutterElement = mouseEvent.domEvent.target;\r\n\t var rect = gutterElement.getBoundingClientRect();\r\n\t var style = tooltip.getElement().style;\r\n\t style.left = rect.right + \"px\";\r\n\t style.top = rect.bottom + \"px\";\r\n\t }\r\n\t }\r\n\r\n\t function hideTooltip() {\r\n\t if (tooltipTimeout)\r\n\t tooltipTimeout = clearTimeout(tooltipTimeout);\r\n\t if (tooltipAnnotation) {\r\n\t tooltip.hide();\r\n\t tooltipAnnotation = null;\r\n\t editor.removeEventListener(\"mousewheel\", hideTooltip);\r\n\t }\r\n\t }\r\n\r\n\t function moveTooltip(e) {\r\n\t tooltip.setPosition(e.x, e.y);\r\n\t }\r\n\r\n\t mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function(e) {\r\n\t var target = e.domEvent.target || e.domEvent.srcElement;\r\n\t if (dom.hasCssClass(target, \"ace_fold-widget\"))\r\n\t return hideTooltip();\r\n\r\n\t if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse)\r\n\t moveTooltip(e);\r\n\r\n\t mouseEvent = e;\r\n\t if (tooltipTimeout)\r\n\t return;\r\n\t tooltipTimeout = setTimeout(function() {\r\n\t tooltipTimeout = null;\r\n\t if (mouseEvent && !mouseHandler.isMousePressed)\r\n\t showTooltip();\r\n\t else\r\n\t hideTooltip();\r\n\t }, 50);\r\n\t });\r\n\r\n\t event.addListener(editor.renderer.$gutter, \"mouseout\", function(e) {\r\n\t mouseEvent = null;\r\n\t if (!tooltipAnnotation || tooltipTimeout)\r\n\t return;\r\n\r\n\t tooltipTimeout = setTimeout(function() {\r\n\t tooltipTimeout = null;\r\n\t hideTooltip();\r\n\t }, 50);\r\n\t });\r\n\t \r\n\t editor.on(\"changeSession\", hideTooltip);\r\n\t}\r\n\r\n\tfunction GutterTooltip(parentNode) {\r\n\t Tooltip.call(this, parentNode);\r\n\t}\r\n\r\n\toop.inherits(GutterTooltip, Tooltip);\r\n\r\n\t(function(){\r\n\t this.setPosition = function(x, y) {\r\n\t var windowWidth = window.innerWidth || document.documentElement.clientWidth;\r\n\t var windowHeight = window.innerHeight || document.documentElement.clientHeight;\r\n\t var width = this.getWidth();\r\n\t var height = this.getHeight();\r\n\t x += 15;\r\n\t y += 15;\r\n\t if (x + width > windowWidth) {\r\n\t x -= (x + width) - windowWidth;\r\n\t }\r\n\t if (y + height > windowHeight) {\r\n\t y -= 20 + height;\r\n\t }\r\n\t Tooltip.prototype.setPosition.call(this, x, y);\r\n\t };\r\n\r\n\t}).call(GutterTooltip.prototype);\r\n\r\n\r\n\r\n\texports.GutterHandler = GutterHandler;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar event = acequire(\"../lib/event\");\r\n\tvar useragent = acequire(\"../lib/useragent\");\r\n\tvar MouseEvent = exports.MouseEvent = function(domEvent, editor) {\r\n\t this.domEvent = domEvent;\r\n\t this.editor = editor;\r\n\t \r\n\t this.x = this.clientX = domEvent.clientX;\r\n\t this.y = this.clientY = domEvent.clientY;\r\n\r\n\t this.$pos = null;\r\n\t this.$inSelection = null;\r\n\t \r\n\t this.propagationStopped = false;\r\n\t this.defaultPrevented = false;\r\n\t};\r\n\r\n\t(function() { \r\n\t \r\n\t this.stopPropagation = function() {\r\n\t event.stopPropagation(this.domEvent);\r\n\t this.propagationStopped = true;\r\n\t };\r\n\t \r\n\t this.preventDefault = function() {\r\n\t event.preventDefault(this.domEvent);\r\n\t this.defaultPrevented = true;\r\n\t };\r\n\t \r\n\t this.stop = function() {\r\n\t this.stopPropagation();\r\n\t this.preventDefault();\r\n\t };\r\n\t this.getDocumentPosition = function() {\r\n\t if (this.$pos)\r\n\t return this.$pos;\r\n\t \r\n\t this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\r\n\t return this.$pos;\r\n\t };\r\n\t this.inSelection = function() {\r\n\t if (this.$inSelection !== null)\r\n\t return this.$inSelection;\r\n\t \r\n\t var editor = this.editor;\r\n\t \r\n\r\n\t var selectionRange = editor.getSelectionRange();\r\n\t if (selectionRange.isEmpty())\r\n\t this.$inSelection = false;\r\n\t else {\r\n\t var pos = this.getDocumentPosition();\r\n\t this.$inSelection = selectionRange.contains(pos.row, pos.column);\r\n\t }\r\n\r\n\t return this.$inSelection;\r\n\t };\r\n\t this.getButton = function() {\r\n\t return event.getButton(this.domEvent);\r\n\t };\r\n\t this.getShiftKey = function() {\r\n\t return this.domEvent.shiftKey;\r\n\t };\r\n\t \r\n\t this.getAccelKey = useragent.isMac\r\n\t ? function() { return this.domEvent.metaKey; }\r\n\t : function() { return this.domEvent.ctrlKey; };\r\n\t \r\n\t}).call(MouseEvent.prototype);\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar event = acequire(\"../lib/event\");\r\n\tvar useragent = acequire(\"../lib/useragent\");\r\n\r\n\tvar AUTOSCROLL_DELAY = 200;\r\n\tvar SCROLL_CURSOR_DELAY = 200;\r\n\tvar SCROLL_CURSOR_HYSTERESIS = 5;\r\n\r\n\tfunction DragdropHandler(mouseHandler) {\r\n\r\n\t var editor = mouseHandler.editor;\r\n\r\n\t var blankImage = dom.createElement(\"img\");\r\n\t blankImage.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\r\n\t if (useragent.isOpera)\r\n\t blankImage.style.cssText = \"width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;\";\r\n\r\n\t var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\r\n\r\n\t exports.forEach(function(x) {\r\n\t mouseHandler[x] = this[x];\r\n\t }, this);\r\n\t editor.addEventListener(\"mousedown\", this.onMouseDown.bind(mouseHandler));\r\n\r\n\r\n\t var mouseTarget = editor.container;\r\n\t var dragSelectionMarker, x, y;\r\n\t var timerId, range;\r\n\t var dragCursor, counter = 0;\r\n\t var dragOperation;\r\n\t var isInternal;\r\n\t var autoScrollStartTime;\r\n\t var cursorMovedTime;\r\n\t var cursorPointOnCaretMoved;\r\n\r\n\t this.onDragStart = function(e) {\r\n\t if (this.cancelDrag || !mouseTarget.draggable) {\r\n\t var self = this;\r\n\t setTimeout(function(){\r\n\t self.startSelect();\r\n\t self.captureMouse(e);\r\n\t }, 0);\r\n\t return e.preventDefault();\r\n\t }\r\n\t range = editor.getSelectionRange();\r\n\r\n\t var dataTransfer = e.dataTransfer;\r\n\t dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\r\n\t if (useragent.isOpera) {\r\n\t editor.container.appendChild(blankImage);\r\n\t blankImage.scrollTop = 0;\r\n\t }\r\n\t dataTransfer.setDragImage && dataTransfer.setDragImage(blankImage, 0, 0);\r\n\t if (useragent.isOpera) {\r\n\t editor.container.removeChild(blankImage);\r\n\t }\r\n\t dataTransfer.clearData();\r\n\t dataTransfer.setData(\"Text\", editor.session.getTextRange());\r\n\r\n\t isInternal = true;\r\n\t this.setState(\"drag\");\r\n\t };\r\n\r\n\t this.onDragEnd = function(e) {\r\n\t mouseTarget.draggable = false;\r\n\t isInternal = false;\r\n\t this.setState(null);\r\n\t if (!editor.getReadOnly()) {\r\n\t var dropEffect = e.dataTransfer.dropEffect;\r\n\t if (!dragOperation && dropEffect == \"move\")\r\n\t editor.session.remove(editor.getSelectionRange());\r\n\t editor.renderer.$cursorLayer.setBlinking(true);\r\n\t }\r\n\t this.editor.unsetStyle(\"ace_dragging\");\r\n\t this.editor.renderer.setCursorStyle(\"\");\r\n\t };\r\n\r\n\t this.onDragEnter = function(e) {\r\n\t if (editor.getReadOnly() || !canAccept(e.dataTransfer))\r\n\t return;\r\n\t x = e.clientX;\r\n\t y = e.clientY;\r\n\t if (!dragSelectionMarker)\r\n\t addDragMarker();\r\n\t counter++;\r\n\t e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\r\n\t return event.preventDefault(e);\r\n\t };\r\n\r\n\t this.onDragOver = function(e) {\r\n\t if (editor.getReadOnly() || !canAccept(e.dataTransfer))\r\n\t return;\r\n\t x = e.clientX;\r\n\t y = e.clientY;\r\n\t if (!dragSelectionMarker) {\r\n\t addDragMarker();\r\n\t counter++;\r\n\t }\r\n\t if (onMouseMoveTimer !== null)\r\n\t onMouseMoveTimer = null;\r\n\r\n\t e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\r\n\t return event.preventDefault(e);\r\n\t };\r\n\r\n\t this.onDragLeave = function(e) {\r\n\t counter--;\r\n\t if (counter <= 0 && dragSelectionMarker) {\r\n\t clearDragMarker();\r\n\t dragOperation = null;\r\n\t return event.preventDefault(e);\r\n\t }\r\n\t };\r\n\r\n\t this.onDrop = function(e) {\r\n\t if (!dragCursor)\r\n\t return;\r\n\t var dataTransfer = e.dataTransfer;\r\n\t if (isInternal) {\r\n\t switch (dragOperation) {\r\n\t case \"move\":\r\n\t if (range.contains(dragCursor.row, dragCursor.column)) {\r\n\t range = {\r\n\t start: dragCursor,\r\n\t end: dragCursor\r\n\t };\r\n\t } else {\r\n\t range = editor.moveText(range, dragCursor);\r\n\t }\r\n\t break;\r\n\t case \"copy\":\r\n\t range = editor.moveText(range, dragCursor, true);\r\n\t break;\r\n\t }\r\n\t } else {\r\n\t var dropData = dataTransfer.getData('Text');\r\n\t range = {\r\n\t start: dragCursor,\r\n\t end: editor.session.insert(dragCursor, dropData)\r\n\t };\r\n\t editor.focus();\r\n\t dragOperation = null;\r\n\t }\r\n\t clearDragMarker();\r\n\t return event.preventDefault(e);\r\n\t };\r\n\r\n\t event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler));\r\n\t event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler));\r\n\t event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler));\r\n\t event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler));\r\n\t event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler));\r\n\t event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler));\r\n\r\n\t function scrollCursorIntoView(cursor, prevCursor) {\r\n\t var now = Date.now();\r\n\t var vMovement = !prevCursor || cursor.row != prevCursor.row;\r\n\t var hMovement = !prevCursor || cursor.column != prevCursor.column;\r\n\t if (!cursorMovedTime || vMovement || hMovement) {\r\n\t editor.$blockScrolling += 1;\r\n\t editor.moveCursorToPosition(cursor);\r\n\t editor.$blockScrolling -= 1;\r\n\t cursorMovedTime = now;\r\n\t cursorPointOnCaretMoved = {x: x, y: y};\r\n\t } else {\r\n\t var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\r\n\t if (distance > SCROLL_CURSOR_HYSTERESIS) {\r\n\t cursorMovedTime = null;\r\n\t } else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\r\n\t editor.renderer.scrollCursorIntoView();\r\n\t cursorMovedTime = null;\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t function autoScroll(cursor, prevCursor) {\r\n\t var now = Date.now();\r\n\t var lineHeight = editor.renderer.layerConfig.lineHeight;\r\n\t var characterWidth = editor.renderer.layerConfig.characterWidth;\r\n\t var editorRect = editor.renderer.scroller.getBoundingClientRect();\r\n\t var offsets = {\r\n\t x: {\r\n\t left: x - editorRect.left,\r\n\t right: editorRect.right - x\r\n\t },\r\n\t y: {\r\n\t top: y - editorRect.top,\r\n\t bottom: editorRect.bottom - y\r\n\t }\r\n\t };\r\n\t var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\r\n\t var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\r\n\t var scrollCursor = {row: cursor.row, column: cursor.column};\r\n\t if (nearestXOffset / characterWidth <= 2) {\r\n\t scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\r\n\t }\r\n\t if (nearestYOffset / lineHeight <= 1) {\r\n\t scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\r\n\t }\r\n\t var vScroll = cursor.row != scrollCursor.row;\r\n\t var hScroll = cursor.column != scrollCursor.column;\r\n\t var vMovement = !prevCursor || cursor.row != prevCursor.row;\r\n\t if (vScroll || (hScroll && !vMovement)) {\r\n\t if (!autoScrollStartTime)\r\n\t autoScrollStartTime = now;\r\n\t else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\r\n\t editor.renderer.scrollCursorIntoView(scrollCursor);\r\n\t } else {\r\n\t autoScrollStartTime = null;\r\n\t }\r\n\t }\r\n\r\n\t function onDragInterval() {\r\n\t var prevCursor = dragCursor;\r\n\t dragCursor = editor.renderer.screenToTextCoordinates(x, y);\r\n\t scrollCursorIntoView(dragCursor, prevCursor);\r\n\t autoScroll(dragCursor, prevCursor);\r\n\t }\r\n\r\n\t function addDragMarker() {\r\n\t range = editor.selection.toOrientedRange();\r\n\t dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\r\n\t editor.clearSelection();\r\n\t if (editor.isFocused())\r\n\t editor.renderer.$cursorLayer.setBlinking(false);\r\n\t clearInterval(timerId);\r\n\t onDragInterval();\r\n\t timerId = setInterval(onDragInterval, 20);\r\n\t counter = 0;\r\n\t event.addListener(document, \"mousemove\", onMouseMove);\r\n\t }\r\n\r\n\t function clearDragMarker() {\r\n\t clearInterval(timerId);\r\n\t editor.session.removeMarker(dragSelectionMarker);\r\n\t dragSelectionMarker = null;\r\n\t editor.$blockScrolling += 1;\r\n\t editor.selection.fromOrientedRange(range);\r\n\t editor.$blockScrolling -= 1;\r\n\t if (editor.isFocused() && !isInternal)\r\n\t editor.renderer.$cursorLayer.setBlinking(!editor.getReadOnly());\r\n\t range = null;\r\n\t dragCursor = null;\r\n\t counter = 0;\r\n\t autoScrollStartTime = null;\r\n\t cursorMovedTime = null;\r\n\t event.removeListener(document, \"mousemove\", onMouseMove);\r\n\t }\r\n\t var onMouseMoveTimer = null;\r\n\t function onMouseMove() {\r\n\t if (onMouseMoveTimer == null) {\r\n\t onMouseMoveTimer = setTimeout(function() {\r\n\t if (onMouseMoveTimer != null && dragSelectionMarker)\r\n\t clearDragMarker();\r\n\t }, 20);\r\n\t }\r\n\t }\r\n\r\n\t function canAccept(dataTransfer) {\r\n\t var types = dataTransfer.types;\r\n\t return !types || Array.prototype.some.call(types, function(type) {\r\n\t return type == 'text/plain' || type == 'Text';\r\n\t });\r\n\t }\r\n\r\n\t function getDropEffect(e) {\r\n\t var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\r\n\t var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\r\n\r\n\t var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\r\n\t var effectAllowed = \"uninitialized\";\r\n\t try {\r\n\t effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\r\n\t } catch (e) {}\r\n\t var dropEffect = \"none\";\r\n\r\n\t if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\r\n\t dropEffect = \"copy\";\r\n\t else if (moveAllowed.indexOf(effectAllowed) >= 0)\r\n\t dropEffect = \"move\";\r\n\t else if (copyAllowed.indexOf(effectAllowed) >= 0)\r\n\t dropEffect = \"copy\";\r\n\r\n\t return dropEffect;\r\n\t }\r\n\t}\r\n\r\n\t(function() {\r\n\r\n\t this.dragWait = function() {\r\n\t var interval = Date.now() - this.mousedownEvent.time;\r\n\t if (interval > this.editor.getDragDelay())\r\n\t this.startDrag();\r\n\t };\r\n\r\n\t this.dragWaitEnd = function() {\r\n\t var target = this.editor.container;\r\n\t target.draggable = false;\r\n\t this.startSelect(this.mousedownEvent.getDocumentPosition());\r\n\t this.selectEnd();\r\n\t };\r\n\r\n\t this.dragReadyEnd = function(e) {\r\n\t this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly());\r\n\t this.editor.unsetStyle(\"ace_dragging\");\r\n\t this.editor.renderer.setCursorStyle(\"\");\r\n\t this.dragWaitEnd();\r\n\t };\r\n\r\n\t this.startDrag = function(){\r\n\t this.cancelDrag = false;\r\n\t var editor = this.editor;\r\n\t var target = editor.container;\r\n\t target.draggable = true;\r\n\t editor.renderer.$cursorLayer.setBlinking(false);\r\n\t editor.setStyle(\"ace_dragging\");\r\n\t var cursorStyle = useragent.isWin ? \"default\" : \"move\";\r\n\t editor.renderer.setCursorStyle(cursorStyle);\r\n\t this.setState(\"dragReady\");\r\n\t };\r\n\r\n\t this.onMouseDrag = function(e) {\r\n\t var target = this.editor.container;\r\n\t if (useragent.isIE && this.state == \"dragReady\") {\r\n\t var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\r\n\t if (distance > 3)\r\n\t target.dragDrop();\r\n\t }\r\n\t if (this.state === \"dragWait\") {\r\n\t var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\r\n\t if (distance > 0) {\r\n\t target.draggable = false;\r\n\t this.startSelect(this.mousedownEvent.getDocumentPosition());\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t this.onMouseDown = function(e) {\r\n\t if (!this.$dragEnabled)\r\n\t return;\r\n\t this.mousedownEvent = e;\r\n\t var editor = this.editor;\r\n\r\n\t var inSelection = e.inSelection();\r\n\t var button = e.getButton();\r\n\t var clickCount = e.domEvent.detail || 1;\r\n\t if (clickCount === 1 && button === 0 && inSelection) {\r\n\t if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))\r\n\t return;\r\n\t this.mousedownEvent.time = Date.now();\r\n\t var eventTarget = e.domEvent.target || e.domEvent.srcElement;\r\n\t if (\"unselectable\" in eventTarget)\r\n\t eventTarget.unselectable = \"on\";\r\n\t if (editor.getDragDelay()) {\r\n\t if (useragent.isWebKit) {\r\n\t this.cancelDrag = true;\r\n\t var mouseTarget = editor.container;\r\n\t mouseTarget.draggable = true;\r\n\t }\r\n\t this.setState(\"dragWait\");\r\n\t } else {\r\n\t this.startDrag();\r\n\t }\r\n\t this.captureMouse(e, this.onMouseDrag.bind(this));\r\n\t e.defaultPrevented = true;\r\n\t }\r\n\t };\r\n\r\n\t}).call(DragdropHandler.prototype);\r\n\r\n\r\n\tfunction calcDistance(ax, ay, bx, by) {\r\n\t return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\r\n\t}\r\n\r\n\texports.DragdropHandler = DragdropHandler;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\tvar dom = acequire(\"./dom\");\r\n\r\n\texports.get = function (url, callback) {\r\n\t var xhr = new XMLHttpRequest();\r\n\t xhr.open('GET', url, true);\r\n\t xhr.onreadystatechange = function () {\r\n\t if (xhr.readyState === 4) {\r\n\t callback(xhr.responseText);\r\n\t }\r\n\t };\r\n\t xhr.send(null);\r\n\t};\r\n\r\n\texports.loadScript = function(path, callback) {\r\n\t var head = dom.getDocumentHead();\r\n\t var s = document.createElement('script');\r\n\r\n\t s.src = path;\r\n\t head.appendChild(s);\r\n\r\n\t s.onload = s.onreadystatechange = function(_, isAbort) {\r\n\t if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\r\n\t s = s.onload = s.onreadystatechange = null;\r\n\t if (!isAbort)\r\n\t callback();\r\n\t }\r\n\t };\r\n\t};\r\n\texports.qualifyURL = function(url) {\r\n\t var a = document.createElement('a');\r\n\t a.href = url;\r\n\t return a.href;\r\n\t}\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar EventEmitter = {};\r\n\tvar stopPropagation = function() { this.propagationStopped = true; };\r\n\tvar preventDefault = function() { this.defaultPrevented = true; };\r\n\r\n\tEventEmitter._emit =\r\n\tEventEmitter._dispatchEvent = function(eventName, e) {\r\n\t this._eventRegistry || (this._eventRegistry = {});\r\n\t this._defaultHandlers || (this._defaultHandlers = {});\r\n\r\n\t var listeners = this._eventRegistry[eventName] || [];\r\n\t var defaultHandler = this._defaultHandlers[eventName];\r\n\t if (!listeners.length && !defaultHandler)\r\n\t return;\r\n\r\n\t if (typeof e != \"object\" || !e)\r\n\t e = {};\r\n\r\n\t if (!e.type)\r\n\t e.type = eventName;\r\n\t if (!e.stopPropagation)\r\n\t e.stopPropagation = stopPropagation;\r\n\t if (!e.preventDefault)\r\n\t e.preventDefault = preventDefault;\r\n\r\n\t listeners = listeners.slice();\r\n\t for (var i=0; i<listeners.length; i++) {\r\n\t listeners[i](e, this);\r\n\t if (e.propagationStopped)\r\n\t break;\r\n\t }\r\n\t \r\n\t if (defaultHandler && !e.defaultPrevented)\r\n\t return defaultHandler(e, this);\r\n\t};\r\n\r\n\r\n\tEventEmitter._signal = function(eventName, e) {\r\n\t var listeners = (this._eventRegistry || {})[eventName];\r\n\t if (!listeners)\r\n\t return;\r\n\t listeners = listeners.slice();\r\n\t for (var i=0; i<listeners.length; i++)\r\n\t listeners[i](e, this);\r\n\t};\r\n\r\n\tEventEmitter.once = function(eventName, callback) {\r\n\t var _self = this;\r\n\t callback && this.addEventListener(eventName, function newCallback() {\r\n\t _self.removeEventListener(eventName, newCallback);\r\n\t callback.apply(null, arguments);\r\n\t });\r\n\t};\r\n\r\n\r\n\tEventEmitter.setDefaultHandler = function(eventName, callback) {\r\n\t var handlers = this._defaultHandlers\r\n\t if (!handlers)\r\n\t handlers = this._defaultHandlers = {_disabled_: {}};\r\n\t \r\n\t if (handlers[eventName]) {\r\n\t var old = handlers[eventName];\r\n\t var disabled = handlers._disabled_[eventName];\r\n\t if (!disabled)\r\n\t handlers._disabled_[eventName] = disabled = [];\r\n\t disabled.push(old);\r\n\t var i = disabled.indexOf(callback);\r\n\t if (i != -1) \r\n\t disabled.splice(i, 1);\r\n\t }\r\n\t handlers[eventName] = callback;\r\n\t};\r\n\tEventEmitter.removeDefaultHandler = function(eventName, callback) {\r\n\t var handlers = this._defaultHandlers\r\n\t if (!handlers)\r\n\t return;\r\n\t var disabled = handlers._disabled_[eventName];\r\n\t \r\n\t if (handlers[eventName] == callback) {\r\n\t var old = handlers[eventName];\r\n\t if (disabled)\r\n\t this.setDefaultHandler(eventName, disabled.pop());\r\n\t } else if (disabled) {\r\n\t var i = disabled.indexOf(callback);\r\n\t if (i != -1)\r\n\t disabled.splice(i, 1);\r\n\t }\r\n\t};\r\n\r\n\tEventEmitter.on =\r\n\tEventEmitter.addEventListener = function(eventName, callback, capturing) {\r\n\t this._eventRegistry = this._eventRegistry || {};\r\n\r\n\t var listeners = this._eventRegistry[eventName];\r\n\t if (!listeners)\r\n\t listeners = this._eventRegistry[eventName] = [];\r\n\r\n\t if (listeners.indexOf(callback) == -1)\r\n\t listeners[capturing ? \"unshift\" : \"push\"](callback);\r\n\t return callback;\r\n\t};\r\n\r\n\tEventEmitter.off =\r\n\tEventEmitter.removeListener =\r\n\tEventEmitter.removeEventListener = function(eventName, callback) {\r\n\t this._eventRegistry = this._eventRegistry || {};\r\n\r\n\t var listeners = this._eventRegistry[eventName];\r\n\t if (!listeners)\r\n\t return;\r\n\r\n\t var index = listeners.indexOf(callback);\r\n\t if (index !== -1)\r\n\t listeners.splice(index, 1);\r\n\t};\r\n\r\n\tEventEmitter.removeAllListeners = function(eventName) {\r\n\t if (this._eventRegistry) this._eventRegistry[eventName] = [];\r\n\t};\r\n\r\n\texports.EventEmitter = EventEmitter;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/lib/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\t\"no use strict\";\r\n\r\n\tvar oop = acequire(\"./oop\");\r\n\tvar EventEmitter = acequire(\"./event_emitter\").EventEmitter;\r\n\r\n\tvar optionsProvider = {\r\n\t setOptions: function(optList) {\r\n\t Object.keys(optList).forEach(function(key) {\r\n\t this.setOption(key, optList[key]);\r\n\t }, this);\r\n\t },\r\n\t getOptions: function(optionNames) {\r\n\t var result = {};\r\n\t if (!optionNames) {\r\n\t optionNames = Object.keys(this.$options);\r\n\t } else if (!Array.isArray(optionNames)) {\r\n\t result = optionNames;\r\n\t optionNames = Object.keys(result);\r\n\t }\r\n\t optionNames.forEach(function(key) {\r\n\t result[key] = this.getOption(key);\r\n\t }, this);\r\n\t return result;\r\n\t },\r\n\t setOption: function(name, value) {\r\n\t if (this[\"$\" + name] === value)\r\n\t return;\r\n\t var opt = this.$options[name];\r\n\t if (!opt) {\r\n\t return warn('misspelled option \"' + name + '\"');\r\n\t }\r\n\t if (opt.forwardTo)\r\n\t return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value);\r\n\r\n\t if (!opt.handlesSet)\r\n\t this[\"$\" + name] = value;\r\n\t if (opt && opt.set)\r\n\t opt.set.call(this, value);\r\n\t },\r\n\t getOption: function(name) {\r\n\t var opt = this.$options[name];\r\n\t if (!opt) {\r\n\t return warn('misspelled option \"' + name + '\"');\r\n\t }\r\n\t if (opt.forwardTo)\r\n\t return this[opt.forwardTo] && this[opt.forwardTo].getOption(name);\r\n\t return opt && opt.get ? opt.get.call(this) : this[\"$\" + name];\r\n\t }\r\n\t};\r\n\r\n\tfunction warn(message) {\r\n\t if (typeof console != \"undefined\" && console.warn)\r\n\t console.warn.apply(console, arguments);\r\n\t}\r\n\r\n\tfunction reportError(msg, data) {\r\n\t var e = new Error(msg);\r\n\t e.data = data;\r\n\t if (typeof console == \"object\" && console.error)\r\n\t console.error(e);\r\n\t setTimeout(function() { throw e; });\r\n\t}\r\n\r\n\tvar AppConfig = function() {\r\n\t this.$defaultOptions = {};\r\n\t};\r\n\r\n\t(function() {\r\n\t oop.implement(this, EventEmitter);\r\n\t this.defineOptions = function(obj, path, options) {\r\n\t if (!obj.$options)\r\n\t this.$defaultOptions[path] = obj.$options = {};\r\n\r\n\t Object.keys(options).forEach(function(key) {\r\n\t var opt = options[key];\r\n\t if (typeof opt == \"string\")\r\n\t opt = {forwardTo: opt};\r\n\r\n\t opt.name || (opt.name = key);\r\n\t obj.$options[opt.name] = opt;\r\n\t if (\"initialValue\" in opt)\r\n\t obj[\"$\" + opt.name] = opt.initialValue;\r\n\t });\r\n\t oop.implement(obj, optionsProvider);\r\n\r\n\t return this;\r\n\t };\r\n\r\n\t this.resetOptions = function(obj) {\r\n\t Object.keys(obj.$options).forEach(function(key) {\r\n\t var opt = obj.$options[key];\r\n\t if (\"value\" in opt)\r\n\t obj.setOption(key, opt.value);\r\n\t });\r\n\t };\r\n\r\n\t this.setDefaultValue = function(path, name, value) {\r\n\t var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {});\r\n\t if (opts[name]) {\r\n\t if (opts.forwardTo)\r\n\t this.setDefaultValue(opts.forwardTo, name, value);\r\n\t else\r\n\t opts[name].value = value;\r\n\t }\r\n\t };\r\n\r\n\t this.setDefaultValues = function(path, optionHash) {\r\n\t Object.keys(optionHash).forEach(function(key) {\r\n\t this.setDefaultValue(path, key, optionHash[key]);\r\n\t }, this);\r\n\t };\r\n\t \r\n\t this.warn = warn;\r\n\t this.reportError = reportError;\r\n\t \r\n\t}).call(AppConfig.prototype);\r\n\r\n\texports.AppConfig = AppConfig;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/app_config\"], function(acequire, exports, module) {\r\n\t\"no use strict\";\r\n\r\n\tvar lang = acequire(\"./lib/lang\");\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar net = acequire(\"./lib/net\");\r\n\tvar AppConfig = acequire(\"./lib/app_config\").AppConfig;\r\n\r\n\tmodule.exports = exports = new AppConfig();\r\n\r\n\tvar global = (function() {\r\n\t return this || typeof window != \"undefined\" && window;\r\n\t})();\r\n\r\n\tvar options = {\r\n\t packaged: false,\r\n\t workerPath: null,\r\n\t modePath: null,\r\n\t themePath: null,\r\n\t basePath: \"\",\r\n\t suffix: \".js\",\r\n\t $moduleUrls: {}\r\n\t};\r\n\r\n\texports.get = function(key) {\r\n\t if (!options.hasOwnProperty(key))\r\n\t throw new Error(\"Unknown config key: \" + key);\r\n\r\n\t return options[key];\r\n\t};\r\n\r\n\texports.set = function(key, value) {\r\n\t if (!options.hasOwnProperty(key))\r\n\t throw new Error(\"Unknown config key: \" + key);\r\n\r\n\t options[key] = value;\r\n\t};\r\n\r\n\texports.all = function() {\r\n\t return lang.copyObject(options);\r\n\t};\r\n\texports.moduleUrl = function(name, component) {\r\n\t if (options.$moduleUrls[name])\r\n\t return options.$moduleUrls[name];\r\n\r\n\t var parts = name.split(\"/\");\r\n\t component = component || parts[parts.length - 2] || \"\";\r\n\t var sep = component == \"snippets\" ? \"/\" : \"-\";\r\n\t var base = parts[parts.length - 1];\r\n\t if (component == \"worker\" && sep == \"-\") {\r\n\t var re = new RegExp(\"^\" + component + \"[\\\\-_]|[\\\\-_]\" + component + \"$\", \"g\");\r\n\t base = base.replace(re, \"\");\r\n\t }\r\n\r\n\t if ((!base || base == component) && parts.length > 1)\r\n\t base = parts[parts.length - 2];\r\n\t var path = options[component + \"Path\"];\r\n\t if (path == null) {\r\n\t path = options.basePath;\r\n\t } else if (sep == \"/\") {\r\n\t component = sep = \"\";\r\n\t }\r\n\t if (path && path.slice(-1) != \"/\")\r\n\t path += \"/\";\r\n\t return path + component + sep + base + this.get(\"suffix\");\r\n\t};\r\n\r\n\texports.setModuleUrl = function(name, subst) {\r\n\t return options.$moduleUrls[name] = subst;\r\n\t};\r\n\r\n\texports.$loading = {};\r\n\texports.loadModule = function(moduleName, onLoad) {\r\n\t var module, moduleType;\r\n\t if (Array.isArray(moduleName)) {\r\n\t moduleType = moduleName[0];\r\n\t moduleName = moduleName[1];\r\n\t }\r\n\r\n\t try {\r\n\t module = acequire(moduleName);\r\n\t } catch (e) {}\r\n\t if (module && !exports.$loading[moduleName])\r\n\t return onLoad && onLoad(module);\r\n\r\n\t if (!exports.$loading[moduleName])\r\n\t exports.$loading[moduleName] = [];\r\n\r\n\t exports.$loading[moduleName].push(onLoad);\r\n\r\n\t if (exports.$loading[moduleName].length > 1)\r\n\t return;\r\n\r\n\t var afterLoad = function() {\r\n\t acequire([moduleName], function(module) {\r\n\t exports._emit(\"load.module\", {name: moduleName, module: module});\r\n\t var listeners = exports.$loading[moduleName];\r\n\t exports.$loading[moduleName] = null;\r\n\t listeners.forEach(function(onLoad) {\r\n\t onLoad && onLoad(module);\r\n\t });\r\n\t });\r\n\t };\r\n\r\n\t if (!exports.get(\"packaged\"))\r\n\t return afterLoad();\r\n\t net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\r\n\t};\r\n\tinit(true);function init(packaged) {\r\n\r\n\t if (!global || !global.document)\r\n\t return;\r\n\t \r\n\t options.packaged = packaged || acequire.packaged || module.packaged || (global.define && __webpack_require__(65).packaged);\r\n\r\n\t var scriptOptions = {};\r\n\t var scriptUrl = \"\";\r\n\t var currentScript = (document.currentScript || document._currentScript ); // native or polyfill\r\n\t var currentDocument = currentScript && currentScript.ownerDocument || document;\r\n\t \r\n\t var scripts = currentDocument.getElementsByTagName(\"script\");\r\n\t for (var i=0; i<scripts.length; i++) {\r\n\t var script = scripts[i];\r\n\r\n\t var src = script.src || script.getAttribute(\"src\");\r\n\t if (!src)\r\n\t continue;\r\n\r\n\t var attributes = script.attributes;\r\n\t for (var j=0, l=attributes.length; j < l; j++) {\r\n\t var attr = attributes[j];\r\n\t if (attr.name.indexOf(\"data-ace-\") === 0) {\r\n\t scriptOptions[deHyphenate(attr.name.replace(/^data-ace-/, \"\"))] = attr.value;\r\n\t }\r\n\t }\r\n\r\n\t var m = src.match(/^(.*)\\/ace(\\-\\w+)?\\.js(\\?|$)/);\r\n\t if (m)\r\n\t scriptUrl = m[1];\r\n\t }\r\n\r\n\t if (scriptUrl) {\r\n\t scriptOptions.base = scriptOptions.base || scriptUrl;\r\n\t scriptOptions.packaged = true;\r\n\t }\r\n\r\n\t scriptOptions.basePath = scriptOptions.base;\r\n\t scriptOptions.workerPath = scriptOptions.workerPath || scriptOptions.base;\r\n\t scriptOptions.modePath = scriptOptions.modePath || scriptOptions.base;\r\n\t scriptOptions.themePath = scriptOptions.themePath || scriptOptions.base;\r\n\t delete scriptOptions.base;\r\n\r\n\t for (var key in scriptOptions)\r\n\t if (typeof scriptOptions[key] !== \"undefined\")\r\n\t exports.set(key, scriptOptions[key]);\r\n\t}\r\n\r\n\texports.init = init;\r\n\r\n\tfunction deHyphenate(str) {\r\n\t return str.replace(/-(.)/g, function(m, m1) { return m1.toUpperCase(); });\r\n\t}\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/config\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar event = acequire(\"../lib/event\");\r\n\tvar useragent = acequire(\"../lib/useragent\");\r\n\tvar DefaultHandlers = acequire(\"./default_handlers\").DefaultHandlers;\r\n\tvar DefaultGutterHandler = acequire(\"./default_gutter_handler\").GutterHandler;\r\n\tvar MouseEvent = acequire(\"./mouse_event\").MouseEvent;\r\n\tvar DragdropHandler = acequire(\"./dragdrop_handler\").DragdropHandler;\r\n\tvar config = acequire(\"../config\");\r\n\r\n\tvar MouseHandler = function(editor) {\r\n\t var _self = this;\r\n\t this.editor = editor;\r\n\r\n\t new DefaultHandlers(this);\r\n\t new DefaultGutterHandler(this);\r\n\t new DragdropHandler(this);\r\n\r\n\t var focusEditor = function(e) {\r\n\t var windowBlurred = !document.hasFocus || !document.hasFocus()\r\n\t || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement())\r\n\t if (windowBlurred)\r\n\t window.focus();\r\n\t editor.focus();\r\n\t };\r\n\r\n\t var mouseTarget = editor.renderer.getMouseEventTarget();\r\n\t event.addListener(mouseTarget, \"click\", this.onMouseEvent.bind(this, \"click\"));\r\n\t event.addListener(mouseTarget, \"mousemove\", this.onMouseMove.bind(this, \"mousemove\"));\r\n\t event.addMultiMouseDownListener([\r\n\t mouseTarget,\r\n\t editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner,\r\n\t editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner,\r\n\t editor.textInput && editor.textInput.getElement()\r\n\t ].filter(Boolean), [400, 300, 250], this, \"onMouseEvent\");\r\n\t event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, \"mousewheel\"));\r\n\t event.addTouchMoveListener(editor.container, this.onTouchMove.bind(this, \"touchmove\"));\r\n\r\n\t var gutterEl = editor.renderer.$gutter;\r\n\t event.addListener(gutterEl, \"mousedown\", this.onMouseEvent.bind(this, \"guttermousedown\"));\r\n\t event.addListener(gutterEl, \"click\", this.onMouseEvent.bind(this, \"gutterclick\"));\r\n\t event.addListener(gutterEl, \"dblclick\", this.onMouseEvent.bind(this, \"gutterdblclick\"));\r\n\t event.addListener(gutterEl, \"mousemove\", this.onMouseEvent.bind(this, \"guttermousemove\"));\r\n\r\n\t event.addListener(mouseTarget, \"mousedown\", focusEditor);\r\n\t event.addListener(gutterEl, \"mousedown\", focusEditor);\r\n\t if (useragent.isIE && editor.renderer.scrollBarV) {\r\n\t event.addListener(editor.renderer.scrollBarV.element, \"mousedown\", focusEditor);\r\n\t event.addListener(editor.renderer.scrollBarH.element, \"mousedown\", focusEditor);\r\n\t }\r\n\r\n\t editor.on(\"mousemove\", function(e){\r\n\t if (_self.state || _self.$dragDelay || !_self.$dragEnabled)\r\n\t return;\r\n\r\n\t var character = editor.renderer.screenToTextCoordinates(e.x, e.y);\r\n\t var range = editor.session.selection.getRange();\r\n\t var renderer = editor.renderer;\r\n\r\n\t if (!range.isEmpty() && range.insideStart(character.row, character.column)) {\r\n\t renderer.setCursorStyle(\"default\");\r\n\t } else {\r\n\t renderer.setCursorStyle(\"\");\r\n\t }\r\n\t });\r\n\t};\r\n\r\n\t(function() {\r\n\t this.onMouseEvent = function(name, e) {\r\n\t this.editor._emit(name, new MouseEvent(e, this.editor));\r\n\t };\r\n\r\n\t this.onMouseMove = function(name, e) {\r\n\t var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;\r\n\t if (!listeners || !listeners.length)\r\n\t return;\r\n\r\n\t this.editor._emit(name, new MouseEvent(e, this.editor));\r\n\t };\r\n\r\n\t this.onMouseWheel = function(name, e) {\r\n\t var mouseEvent = new MouseEvent(e, this.editor);\r\n\t mouseEvent.speed = this.$scrollSpeed * 2;\r\n\t mouseEvent.wheelX = e.wheelX;\r\n\t mouseEvent.wheelY = e.wheelY;\r\n\r\n\t this.editor._emit(name, mouseEvent);\r\n\t };\r\n\t \r\n\t this.onTouchMove = function (name, e) {\r\n\t var mouseEvent = new MouseEvent(e, this.editor);\r\n\t mouseEvent.speed = 1;//this.$scrollSpeed * 2;\r\n\t mouseEvent.wheelX = e.wheelX;\r\n\t mouseEvent.wheelY = e.wheelY;\r\n\t this.editor._emit(name, mouseEvent);\r\n\t };\r\n\r\n\t this.setState = function(state) {\r\n\t this.state = state;\r\n\t };\r\n\r\n\t this.captureMouse = function(ev, mouseMoveHandler) {\r\n\t this.x = ev.x;\r\n\t this.y = ev.y;\r\n\r\n\t this.isMousePressed = true;\r\n\t var renderer = this.editor.renderer;\r\n\t if (renderer.$keepTextAreaAtCursor)\r\n\t renderer.$keepTextAreaAtCursor = null;\r\n\r\n\t var self = this;\r\n\t var onMouseMove = function(e) {\r\n\t if (!e) return;\r\n\t if (useragent.isWebKit && !e.which && self.releaseMouse)\r\n\t return self.releaseMouse();\r\n\r\n\t self.x = e.clientX;\r\n\t self.y = e.clientY;\r\n\t mouseMoveHandler && mouseMoveHandler(e);\r\n\t self.mouseEvent = new MouseEvent(e, self.editor);\r\n\t self.$mouseMoved = true;\r\n\t };\r\n\r\n\t var onCaptureEnd = function(e) {\r\n\t clearInterval(timerId);\r\n\t onCaptureInterval();\r\n\t self[self.state + \"End\"] && self[self.state + \"End\"](e);\r\n\t self.state = \"\";\r\n\t if (renderer.$keepTextAreaAtCursor == null) {\r\n\t renderer.$keepTextAreaAtCursor = true;\r\n\t renderer.$moveTextAreaToCursor();\r\n\t }\r\n\t self.isMousePressed = false;\r\n\t self.$onCaptureMouseMove = self.releaseMouse = null;\r\n\t e && self.onMouseEvent(\"mouseup\", e);\r\n\t };\r\n\r\n\t var onCaptureInterval = function() {\r\n\t self[self.state] && self[self.state]();\r\n\t self.$mouseMoved = false;\r\n\t };\r\n\r\n\t if (useragent.isOldIE && ev.domEvent.type == \"dblclick\") {\r\n\t return setTimeout(function() {onCaptureEnd(ev);});\r\n\t }\r\n\r\n\t self.$onCaptureMouseMove = onMouseMove;\r\n\t self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd);\r\n\t var timerId = setInterval(onCaptureInterval, 20);\r\n\t };\r\n\t this.releaseMouse = null;\r\n\t this.cancelContextMenu = function() {\r\n\t var stop = function(e) {\r\n\t if (e && e.domEvent && e.domEvent.type != \"contextmenu\")\r\n\t return;\r\n\t this.editor.off(\"nativecontextmenu\", stop);\r\n\t if (e && e.domEvent)\r\n\t event.stopEvent(e.domEvent);\r\n\t }.bind(this);\r\n\t setTimeout(stop, 10);\r\n\t this.editor.on(\"nativecontextmenu\", stop);\r\n\t };\r\n\t}).call(MouseHandler.prototype);\r\n\r\n\tconfig.defineOptions(MouseHandler.prototype, \"mouseHandler\", {\r\n\t scrollSpeed: {initialValue: 2},\r\n\t dragDelay: {initialValue: (useragent.isMac ? 150 : 0)},\r\n\t dragEnabled: {initialValue: true},\r\n\t focusTimout: {initialValue: 0},\r\n\t tooltipFollowsMouse: {initialValue: true}\r\n\t});\r\n\r\n\r\n\texports.MouseHandler = MouseHandler;\r\n\t});\r\n\r\n\tace.define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tfunction FoldHandler(editor) {\r\n\r\n\t editor.on(\"click\", function(e) {\r\n\t var position = e.getDocumentPosition();\r\n\t var session = editor.session;\r\n\t var fold = session.getFoldAt(position.row, position.column, 1);\r\n\t if (fold) {\r\n\t if (e.getAccelKey())\r\n\t session.removeFold(fold);\r\n\t else\r\n\t session.expandFold(fold);\r\n\r\n\t e.stop();\r\n\t }\r\n\t });\r\n\r\n\t editor.on(\"gutterclick\", function(e) {\r\n\t var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\r\n\r\n\t if (gutterRegion == \"foldWidgets\") {\r\n\t var row = e.getDocumentPosition().row;\r\n\t var session = editor.session;\r\n\t if (session.foldWidgets && session.foldWidgets[row])\r\n\t editor.session.onFoldWidgetClick(row, e);\r\n\t if (!editor.isFocused())\r\n\t editor.focus();\r\n\t e.stop();\r\n\t }\r\n\t });\r\n\r\n\t editor.on(\"gutterdblclick\", function(e) {\r\n\t var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\r\n\r\n\t if (gutterRegion == \"foldWidgets\") {\r\n\t var row = e.getDocumentPosition().row;\r\n\t var session = editor.session;\r\n\t var data = session.getParentFoldRangeData(row, true);\r\n\t var range = data.range || data.firstRange;\r\n\r\n\t if (range) {\r\n\t row = range.start.row;\r\n\t var fold = session.getFoldAt(row, session.getLine(row).length, 1);\r\n\r\n\t if (fold) {\r\n\t session.removeFold(fold);\r\n\t } else {\r\n\t session.addFold(\"...\", range);\r\n\t editor.renderer.scrollCursorIntoView({row: range.start.row, column: 0});\r\n\t }\r\n\t }\r\n\t e.stop();\r\n\t }\r\n\t });\r\n\t}\r\n\r\n\texports.FoldHandler = FoldHandler;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar keyUtil = acequire(\"../lib/keys\");\r\n\tvar event = acequire(\"../lib/event\");\r\n\r\n\tvar KeyBinding = function(editor) {\r\n\t this.$editor = editor;\r\n\t this.$data = {editor: editor};\r\n\t this.$handlers = [];\r\n\t this.setDefaultHandler(editor.commands);\r\n\t};\r\n\r\n\t(function() {\r\n\t this.setDefaultHandler = function(kb) {\r\n\t this.removeKeyboardHandler(this.$defaultHandler);\r\n\t this.$defaultHandler = kb;\r\n\t this.addKeyboardHandler(kb, 0);\r\n\t };\r\n\r\n\t this.setKeyboardHandler = function(kb) {\r\n\t var h = this.$handlers;\r\n\t if (h[h.length - 1] == kb)\r\n\t return;\r\n\r\n\t while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler)\r\n\t this.removeKeyboardHandler(h[h.length - 1]);\r\n\r\n\t this.addKeyboardHandler(kb, 1);\r\n\t };\r\n\r\n\t this.addKeyboardHandler = function(kb, pos) {\r\n\t if (!kb)\r\n\t return;\r\n\t if (typeof kb == \"function\" && !kb.handleKeyboard)\r\n\t kb.handleKeyboard = kb;\r\n\t var i = this.$handlers.indexOf(kb);\r\n\t if (i != -1)\r\n\t this.$handlers.splice(i, 1);\r\n\r\n\t if (pos == undefined)\r\n\t this.$handlers.push(kb);\r\n\t else\r\n\t this.$handlers.splice(pos, 0, kb);\r\n\r\n\t if (i == -1 && kb.attach)\r\n\t kb.attach(this.$editor);\r\n\t };\r\n\r\n\t this.removeKeyboardHandler = function(kb) {\r\n\t var i = this.$handlers.indexOf(kb);\r\n\t if (i == -1)\r\n\t return false;\r\n\t this.$handlers.splice(i, 1);\r\n\t kb.detach && kb.detach(this.$editor);\r\n\t return true;\r\n\t };\r\n\r\n\t this.getKeyboardHandler = function() {\r\n\t return this.$handlers[this.$handlers.length - 1];\r\n\t };\r\n\t \r\n\t this.getStatusText = function() {\r\n\t var data = this.$data;\r\n\t var editor = data.editor;\r\n\t return this.$handlers.map(function(h) {\r\n\t return h.getStatusText && h.getStatusText(editor, data) || \"\";\r\n\t }).filter(Boolean).join(\" \");\r\n\t };\r\n\r\n\t this.$callKeyboardHandlers = function(hashId, keyString, keyCode, e) {\r\n\t var toExecute;\r\n\t var success = false;\r\n\t var commands = this.$editor.commands;\r\n\r\n\t for (var i = this.$handlers.length; i--;) {\r\n\t toExecute = this.$handlers[i].handleKeyboard(\r\n\t this.$data, hashId, keyString, keyCode, e\r\n\t );\r\n\t if (!toExecute || !toExecute.command)\r\n\t continue;\r\n\t if (toExecute.command == \"null\") {\r\n\t success = true;\r\n\t } else {\r\n\t success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);\r\n\t }\r\n\t if (success && e && hashId != -1 && \r\n\t toExecute.passEvent != true && toExecute.command.passEvent != true\r\n\t ) {\r\n\t event.stopEvent(e);\r\n\t }\r\n\t if (success)\r\n\t break;\r\n\t }\r\n\t \r\n\t if (!success && hashId == -1) {\r\n\t toExecute = {command: \"insertstring\"};\r\n\t success = commands.exec(\"insertstring\", this.$editor, keyString);\r\n\t }\r\n\t \r\n\t if (success)\r\n\t this.$editor._signal(\"keyboardActivity\", toExecute);\r\n\t \r\n\t return success;\r\n\t };\r\n\r\n\t this.onCommandKey = function(e, hashId, keyCode) {\r\n\t var keyString = keyUtil.keyCodeToString(keyCode);\r\n\t this.$callKeyboardHandlers(hashId, keyString, keyCode, e);\r\n\t };\r\n\r\n\t this.onTextInput = function(text) {\r\n\t this.$callKeyboardHandlers(-1, text);\r\n\t };\r\n\r\n\t}).call(KeyBinding.prototype);\r\n\r\n\texports.KeyBinding = KeyBinding;\r\n\t});\r\n\r\n\tace.define(\"ace/range\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\tvar comparePoints = function(p1, p2) {\r\n\t return p1.row - p2.row || p1.column - p2.column;\r\n\t};\r\n\tvar Range = function(startRow, startColumn, endRow, endColumn) {\r\n\t this.start = {\r\n\t row: startRow,\r\n\t column: startColumn\r\n\t };\r\n\r\n\t this.end = {\r\n\t row: endRow,\r\n\t column: endColumn\r\n\t };\r\n\t};\r\n\r\n\t(function() {\r\n\t this.isEqual = function(range) {\r\n\t return this.start.row === range.start.row &&\r\n\t this.end.row === range.end.row &&\r\n\t this.start.column === range.start.column &&\r\n\t this.end.column === range.end.column;\r\n\t };\r\n\t this.toString = function() {\r\n\t return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\r\n\t \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\r\n\t };\r\n\r\n\t this.contains = function(row, column) {\r\n\t return this.compare(row, column) == 0;\r\n\t };\r\n\t this.compareRange = function(range) {\r\n\t var cmp,\r\n\t end = range.end,\r\n\t start = range.start;\r\n\r\n\t cmp = this.compare(end.row, end.column);\r\n\t if (cmp == 1) {\r\n\t cmp = this.compare(start.row, start.column);\r\n\t if (cmp == 1) {\r\n\t return 2;\r\n\t } else if (cmp == 0) {\r\n\t return 1;\r\n\t } else {\r\n\t return 0;\r\n\t }\r\n\t } else if (cmp == -1) {\r\n\t return -2;\r\n\t } else {\r\n\t cmp = this.compare(start.row, start.column);\r\n\t if (cmp == -1) {\r\n\t return -1;\r\n\t } else if (cmp == 1) {\r\n\t return 42;\r\n\t } else {\r\n\t return 0;\r\n\t }\r\n\t }\r\n\t };\r\n\t this.comparePoint = function(p) {\r\n\t return this.compare(p.row, p.column);\r\n\t };\r\n\t this.containsRange = function(range) {\r\n\t return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\r\n\t };\r\n\t this.intersects = function(range) {\r\n\t var cmp = this.compareRange(range);\r\n\t return (cmp == -1 || cmp == 0 || cmp == 1);\r\n\t };\r\n\t this.isEnd = function(row, column) {\r\n\t return this.end.row == row && this.end.column == column;\r\n\t };\r\n\t this.isStart = function(row, column) {\r\n\t return this.start.row == row && this.start.column == column;\r\n\t };\r\n\t this.setStart = function(row, column) {\r\n\t if (typeof row == \"object\") {\r\n\t this.start.column = row.column;\r\n\t this.start.row = row.row;\r\n\t } else {\r\n\t this.start.row = row;\r\n\t this.start.column = column;\r\n\t }\r\n\t };\r\n\t this.setEnd = function(row, column) {\r\n\t if (typeof row == \"object\") {\r\n\t this.end.column = row.column;\r\n\t this.end.row = row.row;\r\n\t } else {\r\n\t this.end.row = row;\r\n\t this.end.column = column;\r\n\t }\r\n\t };\r\n\t this.inside = function(row, column) {\r\n\t if (this.compare(row, column) == 0) {\r\n\t if (this.isEnd(row, column) || this.isStart(row, column)) {\r\n\t return false;\r\n\t } else {\r\n\t return true;\r\n\t }\r\n\t }\r\n\t return false;\r\n\t };\r\n\t this.insideStart = function(row, column) {\r\n\t if (this.compare(row, column) == 0) {\r\n\t if (this.isEnd(row, column)) {\r\n\t return false;\r\n\t } else {\r\n\t return true;\r\n\t }\r\n\t }\r\n\t return false;\r\n\t };\r\n\t this.insideEnd = function(row, column) {\r\n\t if (this.compare(row, column) == 0) {\r\n\t if (this.isStart(row, column)) {\r\n\t return false;\r\n\t } else {\r\n\t return true;\r\n\t }\r\n\t }\r\n\t return false;\r\n\t };\r\n\t this.compare = function(row, column) {\r\n\t if (!this.isMultiLine()) {\r\n\t if (row === this.start.row) {\r\n\t return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\r\n\t }\r\n\t }\r\n\r\n\t if (row < this.start.row)\r\n\t return -1;\r\n\r\n\t if (row > this.end.row)\r\n\t return 1;\r\n\r\n\t if (this.start.row === row)\r\n\t return column >= this.start.column ? 0 : -1;\r\n\r\n\t if (this.end.row === row)\r\n\t return column <= this.end.column ? 0 : 1;\r\n\r\n\t return 0;\r\n\t };\r\n\t this.compareStart = function(row, column) {\r\n\t if (this.start.row == row && this.start.column == column) {\r\n\t return -1;\r\n\t } else {\r\n\t return this.compare(row, column);\r\n\t }\r\n\t };\r\n\t this.compareEnd = function(row, column) {\r\n\t if (this.end.row == row && this.end.column == column) {\r\n\t return 1;\r\n\t } else {\r\n\t return this.compare(row, column);\r\n\t }\r\n\t };\r\n\t this.compareInside = function(row, column) {\r\n\t if (this.end.row == row && this.end.column == column) {\r\n\t return 1;\r\n\t } else if (this.start.row == row && this.start.column == column) {\r\n\t return -1;\r\n\t } else {\r\n\t return this.compare(row, column);\r\n\t }\r\n\t };\r\n\t this.clipRows = function(firstRow, lastRow) {\r\n\t if (this.end.row > lastRow)\r\n\t var end = {row: lastRow + 1, column: 0};\r\n\t else if (this.end.row < firstRow)\r\n\t var end = {row: firstRow, column: 0};\r\n\r\n\t if (this.start.row > lastRow)\r\n\t var start = {row: lastRow + 1, column: 0};\r\n\t else if (this.start.row < firstRow)\r\n\t var start = {row: firstRow, column: 0};\r\n\r\n\t return Range.fromPoints(start || this.start, end || this.end);\r\n\t };\r\n\t this.extend = function(row, column) {\r\n\t var cmp = this.compare(row, column);\r\n\r\n\t if (cmp == 0)\r\n\t return this;\r\n\t else if (cmp == -1)\r\n\t var start = {row: row, column: column};\r\n\t else\r\n\t var end = {row: row, column: column};\r\n\r\n\t return Range.fromPoints(start || this.start, end || this.end);\r\n\t };\r\n\r\n\t this.isEmpty = function() {\r\n\t return (this.start.row === this.end.row && this.start.column === this.end.column);\r\n\t };\r\n\t this.isMultiLine = function() {\r\n\t return (this.start.row !== this.end.row);\r\n\t };\r\n\t this.clone = function() {\r\n\t return Range.fromPoints(this.start, this.end);\r\n\t };\r\n\t this.collapseRows = function() {\r\n\t if (this.end.column == 0)\r\n\t return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0)\r\n\t else\r\n\t return new Range(this.start.row, 0, this.end.row, 0)\r\n\t };\r\n\t this.toScreenRange = function(session) {\r\n\t var screenPosStart = session.documentToScreenPosition(this.start);\r\n\t var screenPosEnd = session.documentToScreenPosition(this.end);\r\n\r\n\t return new Range(\r\n\t screenPosStart.row, screenPosStart.column,\r\n\t screenPosEnd.row, screenPosEnd.column\r\n\t );\r\n\t };\r\n\t this.moveBy = function(row, column) {\r\n\t this.start.row += row;\r\n\t this.start.column += column;\r\n\t this.end.row += row;\r\n\t this.end.column += column;\r\n\t };\r\n\r\n\t}).call(Range.prototype);\r\n\tRange.fromPoints = function(start, end) {\r\n\t return new Range(start.row, start.column, end.row, end.column);\r\n\t};\r\n\tRange.comparePoints = comparePoints;\r\n\r\n\tRange.comparePoints = function(p1, p2) {\r\n\t return p1.row - p2.row || p1.column - p2.column;\r\n\t};\r\n\r\n\r\n\texports.Range = Range;\r\n\t});\r\n\r\n\tace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar lang = acequire(\"./lib/lang\");\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\tvar Range = acequire(\"./range\").Range;\r\n\tvar Selection = function(session) {\r\n\t this.session = session;\r\n\t this.doc = session.getDocument();\r\n\r\n\t this.clearSelection();\r\n\t this.lead = this.selectionLead = this.doc.createAnchor(0, 0);\r\n\t this.anchor = this.selectionAnchor = this.doc.createAnchor(0, 0);\r\n\r\n\t var self = this;\r\n\t this.lead.on(\"change\", function(e) {\r\n\t self._emit(\"changeCursor\");\r\n\t if (!self.$isEmpty)\r\n\t self._emit(\"changeSelection\");\r\n\t if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)\r\n\t self.$desiredColumn = null;\r\n\t });\r\n\r\n\t this.selectionAnchor.on(\"change\", function() {\r\n\t if (!self.$isEmpty)\r\n\t self._emit(\"changeSelection\");\r\n\t });\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\t this.isEmpty = function() {\r\n\t return (this.$isEmpty || (\r\n\t this.anchor.row == this.lead.row &&\r\n\t this.anchor.column == this.lead.column\r\n\t ));\r\n\t };\r\n\t this.isMultiLine = function() {\r\n\t if (this.isEmpty()) {\r\n\t return false;\r\n\t }\r\n\r\n\t return this.getRange().isMultiLine();\r\n\t };\r\n\t this.getCursor = function() {\r\n\t return this.lead.getPosition();\r\n\t };\r\n\t this.setSelectionAnchor = function(row, column) {\r\n\t this.anchor.setPosition(row, column);\r\n\r\n\t if (this.$isEmpty) {\r\n\t this.$isEmpty = false;\r\n\t this._emit(\"changeSelection\");\r\n\t }\r\n\t };\r\n\t this.getSelectionAnchor = function() {\r\n\t if (this.$isEmpty)\r\n\t return this.getSelectionLead();\r\n\t else\r\n\t return this.anchor.getPosition();\r\n\t };\r\n\t this.getSelectionLead = function() {\r\n\t return this.lead.getPosition();\r\n\t };\r\n\t this.shiftSelection = function(columns) {\r\n\t if (this.$isEmpty) {\r\n\t this.moveCursorTo(this.lead.row, this.lead.column + columns);\r\n\t return;\r\n\t }\r\n\r\n\t var anchor = this.getSelectionAnchor();\r\n\t var lead = this.getSelectionLead();\r\n\r\n\t var isBackwards = this.isBackwards();\r\n\r\n\t if (!isBackwards || anchor.column !== 0)\r\n\t this.setSelectionAnchor(anchor.row, anchor.column + columns);\r\n\r\n\t if (isBackwards || lead.column !== 0) {\r\n\t this.$moveSelection(function() {\r\n\t this.moveCursorTo(lead.row, lead.column + columns);\r\n\t });\r\n\t }\r\n\t };\r\n\t this.isBackwards = function() {\r\n\t var anchor = this.anchor;\r\n\t var lead = this.lead;\r\n\t return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));\r\n\t };\r\n\t this.getRange = function() {\r\n\t var anchor = this.anchor;\r\n\t var lead = this.lead;\r\n\r\n\t if (this.isEmpty())\r\n\t return Range.fromPoints(lead, lead);\r\n\r\n\t if (this.isBackwards()) {\r\n\t return Range.fromPoints(lead, anchor);\r\n\t }\r\n\t else {\r\n\t return Range.fromPoints(anchor, lead);\r\n\t }\r\n\t };\r\n\t this.clearSelection = function() {\r\n\t if (!this.$isEmpty) {\r\n\t this.$isEmpty = true;\r\n\t this._emit(\"changeSelection\");\r\n\t }\r\n\t };\r\n\t this.selectAll = function() {\r\n\t var lastRow = this.doc.getLength() - 1;\r\n\t this.setSelectionAnchor(0, 0);\r\n\t this.moveCursorTo(lastRow, this.doc.getLine(lastRow).length);\r\n\t };\r\n\t this.setRange =\r\n\t this.setSelectionRange = function(range, reverse) {\r\n\t if (reverse) {\r\n\t this.setSelectionAnchor(range.end.row, range.end.column);\r\n\t this.selectTo(range.start.row, range.start.column);\r\n\t } else {\r\n\t this.setSelectionAnchor(range.start.row, range.start.column);\r\n\t this.selectTo(range.end.row, range.end.column);\r\n\t }\r\n\t if (this.getRange().isEmpty())\r\n\t this.$isEmpty = true;\r\n\t this.$desiredColumn = null;\r\n\t };\r\n\r\n\t this.$moveSelection = function(mover) {\r\n\t var lead = this.lead;\r\n\t if (this.$isEmpty)\r\n\t this.setSelectionAnchor(lead.row, lead.column);\r\n\r\n\t mover.call(this);\r\n\t };\r\n\t this.selectTo = function(row, column) {\r\n\t this.$moveSelection(function() {\r\n\t this.moveCursorTo(row, column);\r\n\t });\r\n\t };\r\n\t this.selectToPosition = function(pos) {\r\n\t this.$moveSelection(function() {\r\n\t this.moveCursorToPosition(pos);\r\n\t });\r\n\t };\r\n\t this.moveTo = function(row, column) {\r\n\t this.clearSelection();\r\n\t this.moveCursorTo(row, column);\r\n\t };\r\n\t this.moveToPosition = function(pos) {\r\n\t this.clearSelection();\r\n\t this.moveCursorToPosition(pos);\r\n\t };\r\n\t this.selectUp = function() {\r\n\t this.$moveSelection(this.moveCursorUp);\r\n\t };\r\n\t this.selectDown = function() {\r\n\t this.$moveSelection(this.moveCursorDown);\r\n\t };\r\n\t this.selectRight = function() {\r\n\t this.$moveSelection(this.moveCursorRight);\r\n\t };\r\n\t this.selectLeft = function() {\r\n\t this.$moveSelection(this.moveCursorLeft);\r\n\t };\r\n\t this.selectLineStart = function() {\r\n\t this.$moveSelection(this.moveCursorLineStart);\r\n\t };\r\n\t this.selectLineEnd = function() {\r\n\t this.$moveSelection(this.moveCursorLineEnd);\r\n\t };\r\n\t this.selectFileEnd = function() {\r\n\t this.$moveSelection(this.moveCursorFileEnd);\r\n\t };\r\n\t this.selectFileStart = function() {\r\n\t this.$moveSelection(this.moveCursorFileStart);\r\n\t };\r\n\t this.selectWordRight = function() {\r\n\t this.$moveSelection(this.moveCursorWordRight);\r\n\t };\r\n\t this.selectWordLeft = function() {\r\n\t this.$moveSelection(this.moveCursorWordLeft);\r\n\t };\r\n\t this.getWordRange = function(row, column) {\r\n\t if (typeof column == \"undefined\") {\r\n\t var cursor = row || this.lead;\r\n\t row = cursor.row;\r\n\t column = cursor.column;\r\n\t }\r\n\t return this.session.getWordRange(row, column);\r\n\t };\r\n\t this.selectWord = function() {\r\n\t this.setSelectionRange(this.getWordRange());\r\n\t };\r\n\t this.selectAWord = function() {\r\n\t var cursor = this.getCursor();\r\n\t var range = this.session.getAWordRange(cursor.row, cursor.column);\r\n\t this.setSelectionRange(range);\r\n\t };\r\n\r\n\t this.getLineRange = function(row, excludeLastChar) {\r\n\t var rowStart = typeof row == \"number\" ? row : this.lead.row;\r\n\t var rowEnd;\r\n\r\n\t var foldLine = this.session.getFoldLine(rowStart);\r\n\t if (foldLine) {\r\n\t rowStart = foldLine.start.row;\r\n\t rowEnd = foldLine.end.row;\r\n\t } else {\r\n\t rowEnd = rowStart;\r\n\t }\r\n\t if (excludeLastChar === true)\r\n\t return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\r\n\t else\r\n\t return new Range(rowStart, 0, rowEnd + 1, 0);\r\n\t };\r\n\t this.selectLine = function() {\r\n\t this.setSelectionRange(this.getLineRange());\r\n\t };\r\n\t this.moveCursorUp = function() {\r\n\t this.moveCursorBy(-1, 0);\r\n\t };\r\n\t this.moveCursorDown = function() {\r\n\t this.moveCursorBy(1, 0);\r\n\t };\r\n\t this.moveCursorLeft = function() {\r\n\t var cursor = this.lead.getPosition(),\r\n\t fold;\r\n\r\n\t if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\r\n\t this.moveCursorTo(fold.start.row, fold.start.column);\r\n\t } else if (cursor.column === 0) {\r\n\t if (cursor.row > 0) {\r\n\t this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\r\n\t }\r\n\t }\r\n\t else {\r\n\t var tabSize = this.session.getTabSize();\r\n\t if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column-tabSize, cursor.column).split(\" \").length-1 == tabSize)\r\n\t this.moveCursorBy(0, -tabSize);\r\n\t else\r\n\t this.moveCursorBy(0, -1);\r\n\t }\r\n\t };\r\n\t this.moveCursorRight = function() {\r\n\t var cursor = this.lead.getPosition(),\r\n\t fold;\r\n\t if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\r\n\t this.moveCursorTo(fold.end.row, fold.end.column);\r\n\t }\r\n\t else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\r\n\t if (this.lead.row < this.doc.getLength() - 1) {\r\n\t this.moveCursorTo(this.lead.row + 1, 0);\r\n\t }\r\n\t }\r\n\t else {\r\n\t var tabSize = this.session.getTabSize();\r\n\t var cursor = this.lead;\r\n\t if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column, cursor.column+tabSize).split(\" \").length-1 == tabSize)\r\n\t this.moveCursorBy(0, tabSize);\r\n\t else\r\n\t this.moveCursorBy(0, 1);\r\n\t }\r\n\t };\r\n\t this.moveCursorLineStart = function() {\r\n\t var row = this.lead.row;\r\n\t var column = this.lead.column;\r\n\t var screenRow = this.session.documentToScreenRow(row, column);\r\n\t var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\r\n\t var beforeCursor = this.session.getDisplayLine(\r\n\t row, null, firstColumnPosition.row,\r\n\t firstColumnPosition.column\r\n\t );\r\n\r\n\t var leadingSpace = beforeCursor.match(/^\\s*/);\r\n\t if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)\r\n\t firstColumnPosition.column += leadingSpace[0].length;\r\n\t this.moveCursorToPosition(firstColumnPosition);\r\n\t };\r\n\t this.moveCursorLineEnd = function() {\r\n\t var lead = this.lead;\r\n\t var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\r\n\t if (this.lead.column == lineEnd.column) {\r\n\t var line = this.session.getLine(lineEnd.row);\r\n\t if (lineEnd.column == line.length) {\r\n\t var textEnd = line.search(/\\s+$/);\r\n\t if (textEnd > 0)\r\n\t lineEnd.column = textEnd;\r\n\t }\r\n\t }\r\n\r\n\t this.moveCursorTo(lineEnd.row, lineEnd.column);\r\n\t };\r\n\t this.moveCursorFileEnd = function() {\r\n\t var row = this.doc.getLength() - 1;\r\n\t var column = this.doc.getLine(row).length;\r\n\t this.moveCursorTo(row, column);\r\n\t };\r\n\t this.moveCursorFileStart = function() {\r\n\t this.moveCursorTo(0, 0);\r\n\t };\r\n\t this.moveCursorLongWordRight = function() {\r\n\t var row = this.lead.row;\r\n\t var column = this.lead.column;\r\n\t var line = this.doc.getLine(row);\r\n\t var rightOfCursor = line.substring(column);\r\n\r\n\t var match;\r\n\t this.session.nonTokenRe.lastIndex = 0;\r\n\t this.session.tokenRe.lastIndex = 0;\r\n\t var fold = this.session.getFoldAt(row, column, 1);\r\n\t if (fold) {\r\n\t this.moveCursorTo(fold.end.row, fold.end.column);\r\n\t return;\r\n\t }\r\n\t if (match = this.session.nonTokenRe.exec(rightOfCursor)) {\r\n\t column += this.session.nonTokenRe.lastIndex;\r\n\t this.session.nonTokenRe.lastIndex = 0;\r\n\t rightOfCursor = line.substring(column);\r\n\t }\r\n\t if (column >= line.length) {\r\n\t this.moveCursorTo(row, line.length);\r\n\t this.moveCursorRight();\r\n\t if (row < this.doc.getLength() - 1)\r\n\t this.moveCursorWordRight();\r\n\t return;\r\n\t }\r\n\t if (match = this.session.tokenRe.exec(rightOfCursor)) {\r\n\t column += this.session.tokenRe.lastIndex;\r\n\t this.session.tokenRe.lastIndex = 0;\r\n\t }\r\n\r\n\t this.moveCursorTo(row, column);\r\n\t };\r\n\t this.moveCursorLongWordLeft = function() {\r\n\t var row = this.lead.row;\r\n\t var column = this.lead.column;\r\n\t var fold;\r\n\t if (fold = this.session.getFoldAt(row, column, -1)) {\r\n\t this.moveCursorTo(fold.start.row, fold.start.column);\r\n\t return;\r\n\t }\r\n\r\n\t var str = this.session.getFoldStringAt(row, column, -1);\r\n\t if (str == null) {\r\n\t str = this.doc.getLine(row).substring(0, column);\r\n\t }\r\n\r\n\t var leftOfCursor = lang.stringReverse(str);\r\n\t var match;\r\n\t this.session.nonTokenRe.lastIndex = 0;\r\n\t this.session.tokenRe.lastIndex = 0;\r\n\t if (match = this.session.nonTokenRe.exec(leftOfCursor)) {\r\n\t column -= this.session.nonTokenRe.lastIndex;\r\n\t leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\r\n\t this.session.nonTokenRe.lastIndex = 0;\r\n\t }\r\n\t if (column <= 0) {\r\n\t this.moveCursorTo(row, 0);\r\n\t this.moveCursorLeft();\r\n\t if (row > 0)\r\n\t this.moveCursorWordLeft();\r\n\t return;\r\n\t }\r\n\t if (match = this.session.tokenRe.exec(leftOfCursor)) {\r\n\t column -= this.session.tokenRe.lastIndex;\r\n\t this.session.tokenRe.lastIndex = 0;\r\n\t }\r\n\r\n\t this.moveCursorTo(row, column);\r\n\t };\r\n\r\n\t this.$shortWordEndIndex = function(rightOfCursor) {\r\n\t var match, index = 0, ch;\r\n\t var whitespaceRe = /\\s/;\r\n\t var tokenRe = this.session.tokenRe;\r\n\r\n\t tokenRe.lastIndex = 0;\r\n\t if (match = this.session.tokenRe.exec(rightOfCursor)) {\r\n\t index = this.session.tokenRe.lastIndex;\r\n\t } else {\r\n\t while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\r\n\t index ++;\r\n\r\n\t if (index < 1) {\r\n\t tokenRe.lastIndex = 0;\r\n\t while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\r\n\t tokenRe.lastIndex = 0;\r\n\t index ++;\r\n\t if (whitespaceRe.test(ch)) {\r\n\t if (index > 2) {\r\n\t index--;\r\n\t break;\r\n\t } else {\r\n\t while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\r\n\t index ++;\r\n\t if (index > 2)\r\n\t break;\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t tokenRe.lastIndex = 0;\r\n\r\n\t return index;\r\n\t };\r\n\r\n\t this.moveCursorShortWordRight = function() {\r\n\t var row = this.lead.row;\r\n\t var column = this.lead.column;\r\n\t var line = this.doc.getLine(row);\r\n\t var rightOfCursor = line.substring(column);\r\n\r\n\t var fold = this.session.getFoldAt(row, column, 1);\r\n\t if (fold)\r\n\t return this.moveCursorTo(fold.end.row, fold.end.column);\r\n\r\n\t if (column == line.length) {\r\n\t var l = this.doc.getLength();\r\n\t do {\r\n\t row++;\r\n\t rightOfCursor = this.doc.getLine(row);\r\n\t } while (row < l && /^\\s*$/.test(rightOfCursor));\r\n\r\n\t if (!/^\\s+/.test(rightOfCursor))\r\n\t rightOfCursor = \"\";\r\n\t column = 0;\r\n\t }\r\n\r\n\t var index = this.$shortWordEndIndex(rightOfCursor);\r\n\r\n\t this.moveCursorTo(row, column + index);\r\n\t };\r\n\r\n\t this.moveCursorShortWordLeft = function() {\r\n\t var row = this.lead.row;\r\n\t var column = this.lead.column;\r\n\r\n\t var fold;\r\n\t if (fold = this.session.getFoldAt(row, column, -1))\r\n\t return this.moveCursorTo(fold.start.row, fold.start.column);\r\n\r\n\t var line = this.session.getLine(row).substring(0, column);\r\n\t if (column === 0) {\r\n\t do {\r\n\t row--;\r\n\t line = this.doc.getLine(row);\r\n\t } while (row > 0 && /^\\s*$/.test(line));\r\n\r\n\t column = line.length;\r\n\t if (!/\\s+$/.test(line))\r\n\t line = \"\";\r\n\t }\r\n\r\n\t var leftOfCursor = lang.stringReverse(line);\r\n\t var index = this.$shortWordEndIndex(leftOfCursor);\r\n\r\n\t return this.moveCursorTo(row, column - index);\r\n\t };\r\n\r\n\t this.moveCursorWordRight = function() {\r\n\t if (this.session.$selectLongWords)\r\n\t this.moveCursorLongWordRight();\r\n\t else\r\n\t this.moveCursorShortWordRight();\r\n\t };\r\n\r\n\t this.moveCursorWordLeft = function() {\r\n\t if (this.session.$selectLongWords)\r\n\t this.moveCursorLongWordLeft();\r\n\t else\r\n\t this.moveCursorShortWordLeft();\r\n\t };\r\n\t this.moveCursorBy = function(rows, chars) {\r\n\t var screenPos = this.session.documentToScreenPosition(\r\n\t this.lead.row,\r\n\t this.lead.column\r\n\t );\r\n\r\n\t if (chars === 0) {\r\n\t if (this.$desiredColumn)\r\n\t screenPos.column = this.$desiredColumn;\r\n\t else\r\n\t this.$desiredColumn = screenPos.column;\r\n\t }\r\n\r\n\t var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column);\r\n\t \r\n\t if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\r\n\t if (this.session.lineWidgets && this.session.lineWidgets[docPos.row]) {\r\n\t if (docPos.row > 0 || rows > 0)\r\n\t docPos.row++;\r\n\t }\r\n\t }\r\n\t this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\r\n\t };\r\n\t this.moveCursorToPosition = function(position) {\r\n\t this.moveCursorTo(position.row, position.column);\r\n\t };\r\n\t this.moveCursorTo = function(row, column, keepDesiredColumn) {\r\n\t var fold = this.session.getFoldAt(row, column, 1);\r\n\t if (fold) {\r\n\t row = fold.start.row;\r\n\t column = fold.start.column;\r\n\t }\r\n\r\n\t this.$keepDesiredColumnOnChange = true;\r\n\t this.lead.setPosition(row, column);\r\n\t this.$keepDesiredColumnOnChange = false;\r\n\r\n\t if (!keepDesiredColumn)\r\n\t this.$desiredColumn = null;\r\n\t };\r\n\t this.moveCursorToScreen = function(row, column, keepDesiredColumn) {\r\n\t var pos = this.session.screenToDocumentPosition(row, column);\r\n\t this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\r\n\t };\r\n\t this.detach = function() {\r\n\t this.lead.detach();\r\n\t this.anchor.detach();\r\n\t this.session = this.doc = null;\r\n\t };\r\n\r\n\t this.fromOrientedRange = function(range) {\r\n\t this.setSelectionRange(range, range.cursor == range.start);\r\n\t this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\r\n\t };\r\n\r\n\t this.toOrientedRange = function(range) {\r\n\t var r = this.getRange();\r\n\t if (range) {\r\n\t range.start.column = r.start.column;\r\n\t range.start.row = r.start.row;\r\n\t range.end.column = r.end.column;\r\n\t range.end.row = r.end.row;\r\n\t } else {\r\n\t range = r;\r\n\t }\r\n\r\n\t range.cursor = this.isBackwards() ? range.start : range.end;\r\n\t range.desiredColumn = this.$desiredColumn;\r\n\t return range;\r\n\t };\r\n\t this.getRangeOfMovements = function(func) {\r\n\t var start = this.getCursor();\r\n\t try {\r\n\t func(this);\r\n\t var end = this.getCursor();\r\n\t return Range.fromPoints(start,end);\r\n\t } catch(e) {\r\n\t return Range.fromPoints(start,start);\r\n\t } finally {\r\n\t this.moveCursorToPosition(start);\r\n\t }\r\n\t };\r\n\r\n\t this.toJSON = function() {\r\n\t if (this.rangeCount) {\r\n\t var data = this.ranges.map(function(r) {\r\n\t var r1 = r.clone();\r\n\t r1.isBackwards = r.cursor == r.start;\r\n\t return r1;\r\n\t });\r\n\t } else {\r\n\t var data = this.getRange();\r\n\t data.isBackwards = this.isBackwards();\r\n\t }\r\n\t return data;\r\n\t };\r\n\r\n\t this.fromJSON = function(data) {\r\n\t if (data.start == undefined) {\r\n\t if (this.rangeList) {\r\n\t this.toSingleRange(data[0]);\r\n\t for (var i = data.length; i--; ) {\r\n\t var r = Range.fromPoints(data[i].start, data[i].end);\r\n\t if (data[i].isBackwards)\r\n\t r.cursor = r.start;\r\n\t this.addRange(r, true);\r\n\t }\r\n\t return;\r\n\t } else\r\n\t data = data[0];\r\n\t }\r\n\t if (this.rangeList)\r\n\t this.toSingleRange(data);\r\n\t this.setSelectionRange(data, data.isBackwards);\r\n\t };\r\n\r\n\t this.isEqual = function(data) {\r\n\t if ((data.length || this.rangeCount) && data.length != this.rangeCount)\r\n\t return false;\r\n\t if (!data.length || !this.ranges)\r\n\t return this.getRange().isEqual(data);\r\n\r\n\t for (var i = this.ranges.length; i--; ) {\r\n\t if (!this.ranges[i].isEqual(data[i]))\r\n\t return false;\r\n\t }\r\n\t return true;\r\n\t };\r\n\r\n\t}).call(Selection.prototype);\r\n\r\n\texports.Selection = Selection;\r\n\t});\r\n\r\n\tace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar config = acequire(\"./config\");\r\n\tvar MAX_TOKEN_COUNT = 2000;\r\n\tvar Tokenizer = function(rules) {\r\n\t this.states = rules;\r\n\r\n\t this.regExps = {};\r\n\t this.matchMappings = {};\r\n\t for (var key in this.states) {\r\n\t var state = this.states[key];\r\n\t var ruleRegExps = [];\r\n\t var matchTotal = 0;\r\n\t var mapping = this.matchMappings[key] = {defaultToken: \"text\"};\r\n\t var flag = \"g\";\r\n\r\n\t var splitterRurles = [];\r\n\t for (var i = 0; i < state.length; i++) {\r\n\t var rule = state[i];\r\n\t if (rule.defaultToken)\r\n\t mapping.defaultToken = rule.defaultToken;\r\n\t if (rule.caseInsensitive)\r\n\t flag = \"gi\";\r\n\t if (rule.regex == null)\r\n\t continue;\r\n\r\n\t if (rule.regex instanceof RegExp)\r\n\t rule.regex = rule.regex.toString().slice(1, -1);\r\n\t var adjustedregex = rule.regex;\r\n\t var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\r\n\t if (Array.isArray(rule.token)) {\r\n\t if (rule.token.length == 1 || matchcount == 1) {\r\n\t rule.token = rule.token[0];\r\n\t } else if (matchcount - 1 != rule.token.length) {\r\n\t this.reportError(\"number of classes and regexp groups doesn't match\", { \r\n\t rule: rule,\r\n\t groupCount: matchcount - 1\r\n\t });\r\n\t rule.token = rule.token[0];\r\n\t } else {\r\n\t rule.tokenArray = rule.token;\r\n\t rule.token = null;\r\n\t rule.onMatch = this.$arrayTokens;\r\n\t }\r\n\t } else if (typeof rule.token == \"function\" && !rule.onMatch) {\r\n\t if (matchcount > 1)\r\n\t rule.onMatch = this.$applyToken;\r\n\t else\r\n\t rule.onMatch = rule.token;\r\n\t }\r\n\r\n\t if (matchcount > 1) {\r\n\t if (/\\\\\\d/.test(rule.regex)) {\r\n\t adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function(match, digit) {\r\n\t return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\r\n\t });\r\n\t } else {\r\n\t matchcount = 1;\r\n\t adjustedregex = this.removeCapturingGroups(rule.regex);\r\n\t }\r\n\t if (!rule.splitRegex && typeof rule.token != \"string\")\r\n\t splitterRurles.push(rule); // flag will be known only at the very end\r\n\t }\r\n\r\n\t mapping[matchTotal] = i;\r\n\t matchTotal += matchcount;\r\n\r\n\t ruleRegExps.push(adjustedregex);\r\n\t if (!rule.onMatch)\r\n\t rule.onMatch = null;\r\n\t }\r\n\t \r\n\t if (!ruleRegExps.length) {\r\n\t mapping[0] = 0;\r\n\t ruleRegExps.push(\"$\");\r\n\t }\r\n\t \r\n\t splitterRurles.forEach(function(rule) {\r\n\t rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\r\n\t }, this);\r\n\r\n\t this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\r\n\t }\r\n\t};\r\n\r\n\t(function() {\r\n\t this.$setMaxTokenCount = function(m) {\r\n\t MAX_TOKEN_COUNT = m | 0;\r\n\t };\r\n\t \r\n\t this.$applyToken = function(str) {\r\n\t var values = this.splitRegex.exec(str).slice(1);\r\n\t var types = this.token.apply(this, values);\r\n\t if (typeof types === \"string\")\r\n\t return [{type: types, value: str}];\r\n\r\n\t var tokens = [];\r\n\t for (var i = 0, l = types.length; i < l; i++) {\r\n\t if (values[i])\r\n\t tokens[tokens.length] = {\r\n\t type: types[i],\r\n\t value: values[i]\r\n\t };\r\n\t }\r\n\t return tokens;\r\n\t };\r\n\r\n\t this.$arrayTokens = function(str) {\r\n\t if (!str)\r\n\t return [];\r\n\t var values = this.splitRegex.exec(str);\r\n\t if (!values)\r\n\t return \"text\";\r\n\t var tokens = [];\r\n\t var types = this.tokenArray;\r\n\t for (var i = 0, l = types.length; i < l; i++) {\r\n\t if (values[i + 1])\r\n\t tokens[tokens.length] = {\r\n\t type: types[i],\r\n\t value: values[i + 1]\r\n\t };\r\n\t }\r\n\t return tokens;\r\n\t };\r\n\r\n\t this.removeCapturingGroups = function(src) {\r\n\t var r = src.replace(\r\n\t /\\[(?:\\\\.|[^\\]])*?\\]|\\\\.|\\(\\?[:=!]|(\\()/g,\r\n\t function(x, y) {return y ? \"(?:\" : x;}\r\n\t );\r\n\t return r;\r\n\t };\r\n\r\n\t this.createSplitterRegexp = function(src, flag) {\r\n\t if (src.indexOf(\"(?=\") != -1) {\r\n\t var stack = 0;\r\n\t var inChClass = false;\r\n\t var lastCapture = {};\r\n\t src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function(\r\n\t m, esc, parenOpen, parenClose, square, index\r\n\t ) {\r\n\t if (inChClass) {\r\n\t inChClass = square != \"]\";\r\n\t } else if (square) {\r\n\t inChClass = true;\r\n\t } else if (parenClose) {\r\n\t if (stack == lastCapture.stack) {\r\n\t lastCapture.end = index+1;\r\n\t lastCapture.stack = -1;\r\n\t }\r\n\t stack--;\r\n\t } else if (parenOpen) {\r\n\t stack++;\r\n\t if (parenOpen.length != 1) {\r\n\t lastCapture.stack = stack\r\n\t lastCapture.start = index;\r\n\t }\r\n\t }\r\n\t return m;\r\n\t });\r\n\r\n\t if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end)))\r\n\t src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\r\n\t }\r\n\t if (src.charAt(0) != \"^\") src = \"^\" + src;\r\n\t if (src.charAt(src.length - 1) != \"$\") src += \"$\";\r\n\t \r\n\t return new RegExp(src, (flag||\"\").replace(\"g\", \"\"));\r\n\t };\r\n\t this.getLineTokens = function(line, startState) {\r\n\t if (startState && typeof startState != \"string\") {\r\n\t var stack = startState.slice(0);\r\n\t startState = stack[0];\r\n\t if (startState === \"#tmp\") {\r\n\t stack.shift()\r\n\t startState = stack.shift()\r\n\t }\r\n\t } else\r\n\t var stack = [];\r\n\r\n\t var currentState = startState || \"start\";\r\n\t var state = this.states[currentState];\r\n\t if (!state) {\r\n\t currentState = \"start\";\r\n\t state = this.states[currentState];\r\n\t }\r\n\t var mapping = this.matchMappings[currentState];\r\n\t var re = this.regExps[currentState];\r\n\t re.lastIndex = 0;\r\n\r\n\t var match, tokens = [];\r\n\t var lastIndex = 0;\r\n\t var matchAttempts = 0;\r\n\r\n\t var token = {type: null, value: \"\"};\r\n\r\n\t while (match = re.exec(line)) {\r\n\t var type = mapping.defaultToken;\r\n\t var rule = null;\r\n\t var value = match[0];\r\n\t var index = re.lastIndex;\r\n\r\n\t if (index - value.length > lastIndex) {\r\n\t var skipped = line.substring(lastIndex, index - value.length);\r\n\t if (token.type == type) {\r\n\t token.value += skipped;\r\n\t } else {\r\n\t if (token.type)\r\n\t tokens.push(token);\r\n\t token = {type: type, value: skipped};\r\n\t }\r\n\t }\r\n\r\n\t for (var i = 0; i < match.length-2; i++) {\r\n\t if (match[i + 1] === undefined)\r\n\t continue;\r\n\r\n\t rule = state[mapping[i]];\r\n\r\n\t if (rule.onMatch)\r\n\t type = rule.onMatch(value, currentState, stack);\r\n\t else\r\n\t type = rule.token;\r\n\r\n\t if (rule.next) {\r\n\t if (typeof rule.next == \"string\") {\r\n\t currentState = rule.next;\r\n\t } else {\r\n\t currentState = rule.next(currentState, stack);\r\n\t }\r\n\t \r\n\t state = this.states[currentState];\r\n\t if (!state) {\r\n\t this.reportError(\"state doesn't exist\", currentState);\r\n\t currentState = \"start\";\r\n\t state = this.states[currentState];\r\n\t }\r\n\t mapping = this.matchMappings[currentState];\r\n\t lastIndex = index;\r\n\t re = this.regExps[currentState];\r\n\t re.lastIndex = index;\r\n\t }\r\n\t break;\r\n\t }\r\n\r\n\t if (value) {\r\n\t if (typeof type === \"string\") {\r\n\t if ((!rule || rule.merge !== false) && token.type === type) {\r\n\t token.value += value;\r\n\t } else {\r\n\t if (token.type)\r\n\t tokens.push(token);\r\n\t token = {type: type, value: value};\r\n\t }\r\n\t } else if (type) {\r\n\t if (token.type)\r\n\t tokens.push(token);\r\n\t token = {type: null, value: \"\"};\r\n\t for (var i = 0; i < type.length; i++)\r\n\t tokens.push(type[i]);\r\n\t }\r\n\t }\r\n\r\n\t if (lastIndex == line.length)\r\n\t break;\r\n\r\n\t lastIndex = index;\r\n\r\n\t if (matchAttempts++ > MAX_TOKEN_COUNT) {\r\n\t if (matchAttempts > 2 * line.length) {\r\n\t this.reportError(\"infinite loop with in ace tokenizer\", {\r\n\t startState: startState,\r\n\t line: line\r\n\t });\r\n\t }\r\n\t while (lastIndex < line.length) {\r\n\t if (token.type)\r\n\t tokens.push(token);\r\n\t token = {\r\n\t value: line.substring(lastIndex, lastIndex += 2000),\r\n\t type: \"overflow\"\r\n\t };\r\n\t }\r\n\t currentState = \"start\";\r\n\t stack = [];\r\n\t break;\r\n\t }\r\n\t }\r\n\r\n\t if (token.type)\r\n\t tokens.push(token);\r\n\t \r\n\t if (stack.length > 1) {\r\n\t if (stack[0] !== currentState)\r\n\t stack.unshift(\"#tmp\", currentState);\r\n\t }\r\n\t return {\r\n\t tokens : tokens,\r\n\t state : stack.length ? stack : currentState\r\n\t };\r\n\t };\r\n\t \r\n\t this.reportError = config.reportError;\r\n\t \r\n\t}).call(Tokenizer.prototype);\r\n\r\n\texports.Tokenizer = Tokenizer;\r\n\t});\r\n\r\n\tace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar lang = acequire(\"../lib/lang\");\r\n\r\n\tvar TextHighlightRules = function() {\r\n\r\n\t this.$rules = {\r\n\t \"start\" : [{\r\n\t token : \"empty_line\",\r\n\t regex : '^$'\r\n\t }, {\r\n\t defaultToken : \"text\"\r\n\t }]\r\n\t };\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t this.addRules = function(rules, prefix) {\r\n\t if (!prefix) {\r\n\t for (var key in rules)\r\n\t this.$rules[key] = rules[key];\r\n\t return;\r\n\t }\r\n\t for (var key in rules) {\r\n\t var state = rules[key];\r\n\t for (var i = 0; i < state.length; i++) {\r\n\t var rule = state[i];\r\n\t if (rule.next || rule.onMatch) {\r\n\t if (typeof rule.next == \"string\") {\r\n\t if (rule.next.indexOf(prefix) !== 0)\r\n\t rule.next = prefix + rule.next;\r\n\t }\r\n\t if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\r\n\t rule.nextState = prefix + rule.nextState;\r\n\t }\r\n\t }\r\n\t this.$rules[prefix + key] = state;\r\n\t }\r\n\t };\r\n\r\n\t this.getRules = function() {\r\n\t return this.$rules;\r\n\t };\r\n\r\n\t this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\r\n\t var embedRules = typeof HighlightRules == \"function\"\r\n\t ? new HighlightRules().getRules()\r\n\t : HighlightRules;\r\n\t if (states) {\r\n\t for (var i = 0; i < states.length; i++)\r\n\t states[i] = prefix + states[i];\r\n\t } else {\r\n\t states = [];\r\n\t for (var key in embedRules)\r\n\t states.push(prefix + key);\r\n\t }\r\n\r\n\t this.addRules(embedRules, prefix);\r\n\r\n\t if (escapeRules) {\r\n\t var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\r\n\t for (var i = 0; i < states.length; i++)\r\n\t addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules));\r\n\t }\r\n\r\n\t if (!this.$embeds)\r\n\t this.$embeds = [];\r\n\t this.$embeds.push(prefix);\r\n\t };\r\n\r\n\t this.getEmbeds = function() {\r\n\t return this.$embeds;\r\n\t };\r\n\r\n\t var pushState = function(currentState, stack) {\r\n\t if (currentState != \"start\" || stack.length)\r\n\t stack.unshift(this.nextState, currentState);\r\n\t return this.nextState;\r\n\t };\r\n\t var popState = function(currentState, stack) {\r\n\t stack.shift();\r\n\t return stack.shift() || \"start\";\r\n\t };\r\n\r\n\t this.normalizeRules = function() {\r\n\t var id = 0;\r\n\t var rules = this.$rules;\r\n\t function processState(key) {\r\n\t var state = rules[key];\r\n\t state.processed = true;\r\n\t for (var i = 0; i < state.length; i++) {\r\n\t var rule = state[i];\r\n\t if (!rule.regex && rule.start) {\r\n\t rule.regex = rule.start;\r\n\t if (!rule.next)\r\n\t rule.next = [];\r\n\t rule.next.push({\r\n\t defaultToken: rule.token\r\n\t }, {\r\n\t token: rule.token + \".end\",\r\n\t regex: rule.end || rule.start,\r\n\t next: \"pop\"\r\n\t });\r\n\t rule.token = rule.token + \".start\";\r\n\t rule.push = true;\r\n\t }\r\n\t var next = rule.next || rule.push;\r\n\t if (next && Array.isArray(next)) {\r\n\t var stateName = rule.stateName;\r\n\t if (!stateName) {\r\n\t stateName = rule.token;\r\n\t if (typeof stateName != \"string\")\r\n\t stateName = stateName[0] || \"\";\r\n\t if (rules[stateName])\r\n\t stateName += id++;\r\n\t }\r\n\t rules[stateName] = next;\r\n\t rule.next = stateName;\r\n\t processState(stateName);\r\n\t } else if (next == \"pop\") {\r\n\t rule.next = popState;\r\n\t }\r\n\r\n\t if (rule.push) {\r\n\t rule.nextState = rule.next || rule.push;\r\n\t rule.next = pushState;\r\n\t delete rule.push;\r\n\t }\r\n\r\n\t if (rule.rules) {\r\n\t for (var r in rule.rules) {\r\n\t if (rules[r]) {\r\n\t if (rules[r].push)\r\n\t rules[r].push.apply(rules[r], rule.rules[r]);\r\n\t } else {\r\n\t rules[r] = rule.rules[r];\r\n\t }\r\n\t }\r\n\t }\r\n\t if (rule.include || typeof rule == \"string\") {\r\n\t var includeName = rule.include || rule;\r\n\t var toInsert = rules[includeName];\r\n\t } else if (Array.isArray(rule))\r\n\t toInsert = rule;\r\n\r\n\t if (toInsert) {\r\n\t var args = [i, 1].concat(toInsert);\r\n\t if (rule.noEscape)\r\n\t args = args.filter(function(x) {return !x.next;});\r\n\t state.splice.apply(state, args);\r\n\t i--;\r\n\t toInsert = null;\r\n\t }\r\n\t \r\n\t if (rule.keywordMap) {\r\n\t rule.token = this.createKeywordMapper(\r\n\t rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive\r\n\t );\r\n\t delete rule.defaultToken;\r\n\t }\r\n\t }\r\n\t }\r\n\t Object.keys(rules).forEach(processState, this);\r\n\t };\r\n\r\n\t this.createKeywordMapper = function(map, defaultToken, ignoreCase, splitChar) {\r\n\t var keywords = Object.create(null);\r\n\t Object.keys(map).forEach(function(className) {\r\n\t var a = map[className];\r\n\t if (ignoreCase)\r\n\t a = a.toLowerCase();\r\n\t var list = a.split(splitChar || \"|\");\r\n\t for (var i = list.length; i--; )\r\n\t keywords[list[i]] = className;\r\n\t });\r\n\t if (Object.getPrototypeOf(keywords)) {\r\n\t keywords.__proto__ = null;\r\n\t }\r\n\t this.$keywordList = Object.keys(keywords);\r\n\t map = null;\r\n\t return ignoreCase\r\n\t ? function(value) {return keywords[value.toLowerCase()] || defaultToken }\r\n\t : function(value) {return keywords[value] || defaultToken };\r\n\t };\r\n\r\n\t this.getKeywords = function() {\r\n\t return this.$keywords;\r\n\t };\r\n\r\n\t}).call(TextHighlightRules.prototype);\r\n\r\n\texports.TextHighlightRules = TextHighlightRules;\r\n\t});\r\n\r\n\tace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Behaviour = function() {\r\n\t this.$behaviours = {};\r\n\t};\r\n\r\n\t(function () {\r\n\r\n\t this.add = function (name, action, callback) {\r\n\t switch (undefined) {\r\n\t case this.$behaviours:\r\n\t this.$behaviours = {};\r\n\t case this.$behaviours[name]:\r\n\t this.$behaviours[name] = {};\r\n\t }\r\n\t this.$behaviours[name][action] = callback;\r\n\t }\r\n\t \r\n\t this.addBehaviours = function (behaviours) {\r\n\t for (var key in behaviours) {\r\n\t for (var action in behaviours[key]) {\r\n\t this.add(key, action, behaviours[key][action]);\r\n\t }\r\n\t }\r\n\t }\r\n\t \r\n\t this.remove = function (name) {\r\n\t if (this.$behaviours && this.$behaviours[name]) {\r\n\t delete this.$behaviours[name];\r\n\t }\r\n\t }\r\n\t \r\n\t this.inherit = function (mode, filter) {\r\n\t if (typeof mode === \"function\") {\r\n\t var behaviours = new mode().getBehaviours(filter);\r\n\t } else {\r\n\t var behaviours = mode.getBehaviours(filter);\r\n\t }\r\n\t this.addBehaviours(behaviours);\r\n\t }\r\n\t \r\n\t this.getBehaviours = function (filter) {\r\n\t if (!filter) {\r\n\t return this.$behaviours;\r\n\t } else {\r\n\t var ret = {}\r\n\t for (var i = 0; i < filter.length; i++) {\r\n\t if (this.$behaviours[filter[i]]) {\r\n\t ret[filter[i]] = this.$behaviours[filter[i]];\r\n\t }\r\n\t }\r\n\t return ret;\r\n\t }\r\n\t }\r\n\r\n\t}).call(Behaviour.prototype);\r\n\r\n\texports.Behaviour = Behaviour;\r\n\t});\r\n\r\n\tace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\texports.packages = {};\r\n\r\n\taddUnicodePackage({\r\n\t L: \"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",\r\n\t Ll: \"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A\",\r\n\t Lu: \"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A\",\r\n\t Lt: \"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC\",\r\n\t Lm: \"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F\",\r\n\t Lo: \"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",\r\n\t M: \"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26\",\r\n\t Mn: \"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26\",\r\n\t Mc: \"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC\",\r\n\t Me: \"0488048906DE20DD-20E020E2-20E4A670-A672\",\r\n\t N: \"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",\r\n\t Nd: \"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",\r\n\t Nl: \"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF\",\r\n\t No: \"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835\",\r\n\t P: \"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65\",\r\n\t Pd: \"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D\",\r\n\t Ps: \"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62\",\r\n\t Pe: \"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63\",\r\n\t Pi: \"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20\",\r\n\t Pf: \"00BB2019201D203A2E032E052E0A2E0D2E1D2E21\",\r\n\t Pc: \"005F203F20402054FE33FE34FE4D-FE4FFF3F\",\r\n\t Po: \"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65\",\r\n\t S: \"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD\",\r\n\t Sm: \"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC\",\r\n\t Sc: \"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6\",\r\n\t Sk: \"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3\",\r\n\t So: \"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD\",\r\n\t Z: \"002000A01680180E2000-200A20282029202F205F3000\",\r\n\t Zs: \"002000A01680180E2000-200A202F205F3000\",\r\n\t Zl: \"2028\",\r\n\t Zp: \"2029\",\r\n\t C: \"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF\",\r\n\t Cc: \"0000-001F007F-009F\",\r\n\t Cf: \"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB\",\r\n\t Co: \"E000-F8FF\",\r\n\t Cs: \"D800-DFFF\",\r\n\t Cn: \"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF\"\r\n\t});\r\n\r\n\tfunction addUnicodePackage (pack) {\r\n\t var codePoint = /\\w{4}/g;\r\n\t for (var name in pack)\r\n\t exports.packages[name] = pack[name].replace(codePoint, \"\\\\u$&\");\r\n\t}\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\tvar TokenIterator = function(session, initialRow, initialColumn) {\r\n\t this.$session = session;\r\n\t this.$row = initialRow;\r\n\t this.$rowTokens = session.getTokens(initialRow);\r\n\r\n\t var token = session.getTokenAt(initialRow, initialColumn);\r\n\t this.$tokenIndex = token ? token.index : -1;\r\n\t};\r\n\r\n\t(function() { \r\n\t this.stepBackward = function() {\r\n\t this.$tokenIndex -= 1;\r\n\t \r\n\t while (this.$tokenIndex < 0) {\r\n\t this.$row -= 1;\r\n\t if (this.$row < 0) {\r\n\t this.$row = 0;\r\n\t return null;\r\n\t }\r\n\t \r\n\t this.$rowTokens = this.$session.getTokens(this.$row);\r\n\t this.$tokenIndex = this.$rowTokens.length - 1;\r\n\t }\r\n\t \r\n\t return this.$rowTokens[this.$tokenIndex];\r\n\t }; \r\n\t this.stepForward = function() {\r\n\t this.$tokenIndex += 1;\r\n\t var rowCount;\r\n\t while (this.$tokenIndex >= this.$rowTokens.length) {\r\n\t this.$row += 1;\r\n\t if (!rowCount)\r\n\t rowCount = this.$session.getLength();\r\n\t if (this.$row >= rowCount) {\r\n\t this.$row = rowCount - 1;\r\n\t return null;\r\n\t }\r\n\r\n\t this.$rowTokens = this.$session.getTokens(this.$row);\r\n\t this.$tokenIndex = 0;\r\n\t }\r\n\t \r\n\t return this.$rowTokens[this.$tokenIndex];\r\n\t }; \r\n\t this.getCurrentToken = function () {\r\n\t return this.$rowTokens[this.$tokenIndex];\r\n\t }; \r\n\t this.getCurrentTokenRow = function () {\r\n\t return this.$row;\r\n\t }; \r\n\t this.getCurrentTokenColumn = function() {\r\n\t var rowTokens = this.$rowTokens;\r\n\t var tokenIndex = this.$tokenIndex;\r\n\t var column = rowTokens[tokenIndex].start;\r\n\t if (column !== undefined)\r\n\t return column;\r\n\t \r\n\t column = 0;\r\n\t while (tokenIndex > 0) {\r\n\t tokenIndex -= 1;\r\n\t column += rowTokens[tokenIndex].value.length;\r\n\t }\r\n\t \r\n\t return column; \r\n\t };\r\n\t this.getCurrentTokenPosition = function() {\r\n\t return {row: this.$row, column: this.getCurrentTokenColumn()};\r\n\t };\r\n\t \r\n\t}).call(TokenIterator.prototype);\r\n\r\n\texports.TokenIterator = TokenIterator;\r\n\t});\r\n\r\n\tace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Tokenizer = acequire(\"../tokenizer\").Tokenizer;\r\n\tvar TextHighlightRules = acequire(\"./text_highlight_rules\").TextHighlightRules;\r\n\tvar Behaviour = acequire(\"./behaviour\").Behaviour;\r\n\tvar unicode = acequire(\"../unicode\");\r\n\tvar lang = acequire(\"../lib/lang\");\r\n\tvar TokenIterator = acequire(\"../token_iterator\").TokenIterator;\r\n\tvar Range = acequire(\"../range\").Range;\r\n\r\n\tvar Mode = function() {\r\n\t this.HighlightRules = TextHighlightRules;\r\n\t this.$behaviour = new Behaviour();\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t this.tokenRe = new RegExp(\"^[\"\r\n\t + unicode.packages.L\r\n\t + unicode.packages.Mn + unicode.packages.Mc\r\n\t + unicode.packages.Nd\r\n\t + unicode.packages.Pc + \"\\\\$_]+\", \"g\"\r\n\t );\r\n\r\n\t this.nonTokenRe = new RegExp(\"^(?:[^\"\r\n\t + unicode.packages.L\r\n\t + unicode.packages.Mn + unicode.packages.Mc\r\n\t + unicode.packages.Nd\r\n\t + unicode.packages.Pc + \"\\\\$_]|\\\\s])+\", \"g\"\r\n\t );\r\n\r\n\t this.getTokenizer = function() {\r\n\t if (!this.$tokenizer) {\r\n\t this.$highlightRules = this.$highlightRules || new this.HighlightRules();\r\n\t this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\r\n\t }\r\n\t return this.$tokenizer;\r\n\t };\r\n\r\n\t this.lineCommentStart = \"\";\r\n\t this.blockComment = \"\";\r\n\r\n\t this.toggleCommentLines = function(state, session, startRow, endRow) {\r\n\t var doc = session.doc;\r\n\r\n\t var ignoreBlankLines = true;\r\n\t var shouldRemove = true;\r\n\t var minIndent = Infinity;\r\n\t var tabSize = session.getTabSize();\r\n\t var insertAtTabStop = false;\r\n\r\n\t if (!this.lineCommentStart) {\r\n\t if (!this.blockComment)\r\n\t return false;\r\n\t var lineCommentStart = this.blockComment.start;\r\n\t var lineCommentEnd = this.blockComment.end;\r\n\t var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\r\n\t var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\r\n\r\n\t var comment = function(line, i) {\r\n\t if (testRemove(line, i))\r\n\t return;\r\n\t if (!ignoreBlankLines || /\\S/.test(line)) {\r\n\t doc.insertInLine({row: i, column: line.length}, lineCommentEnd);\r\n\t doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\r\n\t }\r\n\t };\r\n\r\n\t var uncomment = function(line, i) {\r\n\t var m;\r\n\t if (m = line.match(regexpEnd))\r\n\t doc.removeInLine(i, line.length - m[0].length, line.length);\r\n\t if (m = line.match(regexpStart))\r\n\t doc.removeInLine(i, m[1].length, m[0].length);\r\n\t };\r\n\r\n\t var testRemove = function(line, row) {\r\n\t if (regexpStart.test(line))\r\n\t return true;\r\n\t var tokens = session.getTokens(row);\r\n\t for (var i = 0; i < tokens.length; i++) {\r\n\t if (tokens[i].type === \"comment\")\r\n\t return true;\r\n\t }\r\n\t };\r\n\t } else {\r\n\t if (Array.isArray(this.lineCommentStart)) {\r\n\t var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\r\n\t var lineCommentStart = this.lineCommentStart[0];\r\n\t } else {\r\n\t var regexpStart = lang.escapeRegExp(this.lineCommentStart);\r\n\t var lineCommentStart = this.lineCommentStart;\r\n\t }\r\n\t regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\r\n\t \r\n\t insertAtTabStop = session.getUseSoftTabs();\r\n\r\n\t var uncomment = function(line, i) {\r\n\t var m = line.match(regexpStart);\r\n\t if (!m) return;\r\n\t var start = m[1].length, end = m[0].length;\r\n\t if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \")\r\n\t end--;\r\n\t doc.removeInLine(i, start, end);\r\n\t };\r\n\t var commentWithSpace = lineCommentStart + \" \";\r\n\t var comment = function(line, i) {\r\n\t if (!ignoreBlankLines || /\\S/.test(line)) {\r\n\t if (shouldInsertSpace(line, minIndent, minIndent))\r\n\t doc.insertInLine({row: i, column: minIndent}, commentWithSpace);\r\n\t else\r\n\t doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\r\n\t }\r\n\t };\r\n\t var testRemove = function(line, i) {\r\n\t return regexpStart.test(line);\r\n\t };\r\n\t \r\n\t var shouldInsertSpace = function(line, before, after) {\r\n\t var spaces = 0;\r\n\t while (before-- && line.charAt(before) == \" \")\r\n\t spaces++;\r\n\t if (spaces % tabSize != 0)\r\n\t return false;\r\n\t var spaces = 0;\r\n\t while (line.charAt(after++) == \" \")\r\n\t spaces++;\r\n\t if (tabSize > 2)\r\n\t return spaces % tabSize != tabSize - 1;\r\n\t else\r\n\t return spaces % tabSize == 0;\r\n\t return true;\r\n\t };\r\n\t }\r\n\r\n\t function iter(fun) {\r\n\t for (var i = startRow; i <= endRow; i++)\r\n\t fun(doc.getLine(i), i);\r\n\t }\r\n\r\n\r\n\t var minEmptyLength = Infinity;\r\n\t iter(function(line, i) {\r\n\t var indent = line.search(/\\S/);\r\n\t if (indent !== -1) {\r\n\t if (indent < minIndent)\r\n\t minIndent = indent;\r\n\t if (shouldRemove && !testRemove(line, i))\r\n\t shouldRemove = false;\r\n\t } else if (minEmptyLength > line.length) {\r\n\t minEmptyLength = line.length;\r\n\t }\r\n\t });\r\n\r\n\t if (minIndent == Infinity) {\r\n\t minIndent = minEmptyLength;\r\n\t ignoreBlankLines = false;\r\n\t shouldRemove = false;\r\n\t }\r\n\r\n\t if (insertAtTabStop && minIndent % tabSize != 0)\r\n\t minIndent = Math.floor(minIndent / tabSize) * tabSize;\r\n\r\n\t iter(shouldRemove ? uncomment : comment);\r\n\t };\r\n\r\n\t this.toggleBlockComment = function(state, session, range, cursor) {\r\n\t var comment = this.blockComment;\r\n\t if (!comment)\r\n\t return;\r\n\t if (!comment.start && comment[0])\r\n\t comment = comment[0];\r\n\r\n\t var iterator = new TokenIterator(session, cursor.row, cursor.column);\r\n\t var token = iterator.getCurrentToken();\r\n\r\n\t var sel = session.selection;\r\n\t var initialRange = session.selection.toOrientedRange();\r\n\t var startRow, colDiff;\r\n\r\n\t if (token && /comment/.test(token.type)) {\r\n\t var startRange, endRange;\r\n\t while (token && /comment/.test(token.type)) {\r\n\t var i = token.value.indexOf(comment.start);\r\n\t if (i != -1) {\r\n\t var row = iterator.getCurrentTokenRow();\r\n\t var column = iterator.getCurrentTokenColumn() + i;\r\n\t startRange = new Range(row, column, row, column + comment.start.length);\r\n\t break;\r\n\t }\r\n\t token = iterator.stepBackward();\r\n\t }\r\n\r\n\t var iterator = new TokenIterator(session, cursor.row, cursor.column);\r\n\t var token = iterator.getCurrentToken();\r\n\t while (token && /comment/.test(token.type)) {\r\n\t var i = token.value.indexOf(comment.end);\r\n\t if (i != -1) {\r\n\t var row = iterator.getCurrentTokenRow();\r\n\t var column = iterator.getCurrentTokenColumn() + i;\r\n\t endRange = new Range(row, column, row, column + comment.end.length);\r\n\t break;\r\n\t }\r\n\t token = iterator.stepForward();\r\n\t }\r\n\t if (endRange)\r\n\t session.remove(endRange);\r\n\t if (startRange) {\r\n\t session.remove(startRange);\r\n\t startRow = startRange.start.row;\r\n\t colDiff = -comment.start.length;\r\n\t }\r\n\t } else {\r\n\t colDiff = comment.start.length;\r\n\t startRow = range.start.row;\r\n\t session.insert(range.end, comment.end);\r\n\t session.insert(range.start, comment.start);\r\n\t }\r\n\t if (initialRange.start.row == startRow)\r\n\t initialRange.start.column += colDiff;\r\n\t if (initialRange.end.row == startRow)\r\n\t initialRange.end.column += colDiff;\r\n\t session.selection.fromOrientedRange(initialRange);\r\n\t };\r\n\r\n\t this.getNextLineIndent = function(state, line, tab) {\r\n\t return this.$getIndent(line);\r\n\t };\r\n\r\n\t this.checkOutdent = function(state, line, input) {\r\n\t return false;\r\n\t };\r\n\r\n\t this.autoOutdent = function(state, doc, row) {\r\n\t };\r\n\r\n\t this.$getIndent = function(line) {\r\n\t return line.match(/^\\s*/)[0];\r\n\t };\r\n\r\n\t this.createWorker = function(session) {\r\n\t return null;\r\n\t };\r\n\r\n\t this.createModeDelegates = function (mapping) {\r\n\t this.$embeds = [];\r\n\t this.$modes = {};\r\n\t for (var i in mapping) {\r\n\t if (mapping[i]) {\r\n\t this.$embeds.push(i);\r\n\t this.$modes[i] = new mapping[i]();\r\n\t }\r\n\t }\r\n\r\n\t var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\", \r\n\t \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\r\n\r\n\t for (var i = 0; i < delegations.length; i++) {\r\n\t (function(scope) {\r\n\t var functionName = delegations[i];\r\n\t var defaultHandler = scope[functionName];\r\n\t scope[delegations[i]] = function() {\r\n\t return this.$delegator(functionName, arguments, defaultHandler);\r\n\t };\r\n\t }(this));\r\n\t }\r\n\t };\r\n\r\n\t this.$delegator = function(method, args, defaultHandler) {\r\n\t var state = args[0];\r\n\t if (typeof state != \"string\")\r\n\t state = state[0];\r\n\t for (var i = 0; i < this.$embeds.length; i++) {\r\n\t if (!this.$modes[this.$embeds[i]]) continue;\r\n\r\n\t var split = state.split(this.$embeds[i]);\r\n\t if (!split[0] && split[1]) {\r\n\t args[0] = split[1];\r\n\t var mode = this.$modes[this.$embeds[i]];\r\n\t return mode[method].apply(mode, args);\r\n\t }\r\n\t }\r\n\t var ret = defaultHandler.apply(this, args);\r\n\t return defaultHandler ? ret : undefined;\r\n\t };\r\n\r\n\t this.transformAction = function(state, action, editor, session, param) {\r\n\t if (this.$behaviour) {\r\n\t var behaviours = this.$behaviour.getBehaviours();\r\n\t for (var key in behaviours) {\r\n\t if (behaviours[key][action]) {\r\n\t var ret = behaviours[key][action].apply(this, arguments);\r\n\t if (ret) {\r\n\t return ret;\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t };\r\n\t \r\n\t this.getKeywords = function(append) {\r\n\t if (!this.completionKeywords) {\r\n\t var rules = this.$tokenizer.rules;\r\n\t var completionKeywords = [];\r\n\t for (var rule in rules) {\r\n\t var ruleItr = rules[rule];\r\n\t for (var r = 0, l = ruleItr.length; r < l; r++) {\r\n\t if (typeof ruleItr[r].token === \"string\") {\r\n\t if (/keyword|support|storage/.test(ruleItr[r].token))\r\n\t completionKeywords.push(ruleItr[r].regex);\r\n\t }\r\n\t else if (typeof ruleItr[r].token === \"object\") {\r\n\t for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) { \r\n\t if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\r\n\t var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\r\n\t completionKeywords.push(rule.substr(1, rule.length - 2));\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t this.completionKeywords = completionKeywords;\r\n\t }\r\n\t if (!append)\r\n\t return this.$keywordList;\r\n\t return completionKeywords.concat(this.$keywordList || []);\r\n\t };\r\n\t \r\n\t this.$createKeywordList = function() {\r\n\t if (!this.$highlightRules)\r\n\t this.getTokenizer();\r\n\t return this.$keywordList = this.$highlightRules.$keywordList || [];\r\n\t };\r\n\r\n\t this.getCompletions = function(state, session, pos, prefix) {\r\n\t var keywords = this.$keywordList || this.$createKeywordList();\r\n\t return keywords.map(function(word) {\r\n\t return {\r\n\t name: word,\r\n\t value: word,\r\n\t score: 0,\r\n\t meta: \"keyword\"\r\n\t };\r\n\t });\r\n\t };\r\n\r\n\t this.$id = \"ace/mode/text\";\r\n\t}).call(Mode.prototype);\r\n\r\n\texports.Mode = Mode;\r\n\t});\r\n\r\n\tace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tfunction throwDeltaError(delta, errorText){\r\n\t console.log(\"Invalid Delta:\", delta);\r\n\t throw \"Invalid Delta: \" + errorText;\r\n\t}\r\n\r\n\tfunction positionInDocument(docLines, position) {\r\n\t return position.row >= 0 && position.row < docLines.length &&\r\n\t position.column >= 0 && position.column <= docLines[position.row].length;\r\n\t}\r\n\r\n\tfunction validateDelta(docLines, delta) {\r\n\t if (delta.action != \"insert\" && delta.action != \"remove\")\r\n\t throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\r\n\t if (!(delta.lines instanceof Array))\r\n\t throwDeltaError(delta, \"delta.lines must be an Array\");\r\n\t if (!delta.start || !delta.end)\r\n\t throwDeltaError(delta, \"delta.start/end must be an present\");\r\n\t var start = delta.start;\r\n\t if (!positionInDocument(docLines, delta.start))\r\n\t throwDeltaError(delta, \"delta.start must be contained in document\");\r\n\t var end = delta.end;\r\n\t if (delta.action == \"remove\" && !positionInDocument(docLines, end))\r\n\t throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\r\n\t var numRangeRows = end.row - start.row;\r\n\t var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\r\n\t if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\r\n\t throwDeltaError(delta, \"delta.range must match delta lines\");\r\n\t}\r\n\r\n\texports.applyDelta = function(docLines, delta, doNotValidate) {\r\n\t \r\n\t var row = delta.start.row;\r\n\t var startColumn = delta.start.column;\r\n\t var line = docLines[row] || \"\";\r\n\t switch (delta.action) {\r\n\t case \"insert\":\r\n\t var lines = delta.lines;\r\n\t if (lines.length === 1) {\r\n\t docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\r\n\t } else {\r\n\t var args = [row, 1].concat(delta.lines);\r\n\t docLines.splice.apply(docLines, args);\r\n\t docLines[row] = line.substring(0, startColumn) + docLines[row];\r\n\t docLines[row + delta.lines.length - 1] += line.substring(startColumn);\r\n\t }\r\n\t break;\r\n\t case \"remove\":\r\n\t var endColumn = delta.end.column;\r\n\t var endRow = delta.end.row;\r\n\t if (row === endRow) {\r\n\t docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\r\n\t } else {\r\n\t docLines.splice(\r\n\t row, endRow - row + 1,\r\n\t line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\r\n\t );\r\n\t }\r\n\t break;\r\n\t }\r\n\t}\r\n\t});\r\n\r\n\tace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\r\n\tvar Anchor = exports.Anchor = function(doc, row, column) {\r\n\t this.$onChange = this.onChange.bind(this);\r\n\t this.attach(doc);\r\n\t \r\n\t if (typeof column == \"undefined\")\r\n\t this.setPosition(row.row, row.column);\r\n\t else\r\n\t this.setPosition(row, column);\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\t this.getPosition = function() {\r\n\t return this.$clipPositionToDocument(this.row, this.column);\r\n\t };\r\n\t this.getDocument = function() {\r\n\t return this.document;\r\n\t };\r\n\t this.$insertRight = false;\r\n\t this.onChange = function(delta) {\r\n\t if (delta.start.row == delta.end.row && delta.start.row != this.row)\r\n\t return;\r\n\r\n\t if (delta.start.row > this.row)\r\n\t return;\r\n\t \r\n\t var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\r\n\t this.setPosition(point.row, point.column, true);\r\n\t };\r\n\t \r\n\t function $pointsInOrder(point1, point2, equalPointsInOrder) {\r\n\t var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\r\n\t return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\r\n\t }\r\n\t \r\n\t function $getTransformedPoint(delta, point, moveIfEqual) {\r\n\t var deltaIsInsert = delta.action == \"insert\";\r\n\t var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\r\n\t var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\r\n\t var deltaStart = delta.start;\r\n\t var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\r\n\t if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\r\n\t return {\r\n\t row: point.row,\r\n\t column: point.column\r\n\t };\r\n\t }\r\n\t if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\r\n\t return {\r\n\t row: point.row + deltaRowShift,\r\n\t column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\r\n\t };\r\n\t }\r\n\t \r\n\t return {\r\n\t row: deltaStart.row,\r\n\t column: deltaStart.column\r\n\t };\r\n\t }\r\n\t this.setPosition = function(row, column, noClip) {\r\n\t var pos;\r\n\t if (noClip) {\r\n\t pos = {\r\n\t row: row,\r\n\t column: column\r\n\t };\r\n\t } else {\r\n\t pos = this.$clipPositionToDocument(row, column);\r\n\t }\r\n\r\n\t if (this.row == pos.row && this.column == pos.column)\r\n\t return;\r\n\r\n\t var old = {\r\n\t row: this.row,\r\n\t column: this.column\r\n\t };\r\n\r\n\t this.row = pos.row;\r\n\t this.column = pos.column;\r\n\t this._signal(\"change\", {\r\n\t old: old,\r\n\t value: pos\r\n\t });\r\n\t };\r\n\t this.detach = function() {\r\n\t this.document.removeEventListener(\"change\", this.$onChange);\r\n\t };\r\n\t this.attach = function(doc) {\r\n\t this.document = doc || this.document;\r\n\t this.document.on(\"change\", this.$onChange);\r\n\t };\r\n\t this.$clipPositionToDocument = function(row, column) {\r\n\t var pos = {};\r\n\r\n\t if (row >= this.document.getLength()) {\r\n\t pos.row = Math.max(0, this.document.getLength() - 1);\r\n\t pos.column = this.document.getLine(pos.row).length;\r\n\t }\r\n\t else if (row < 0) {\r\n\t pos.row = 0;\r\n\t pos.column = 0;\r\n\t }\r\n\t else {\r\n\t pos.row = row;\r\n\t pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\r\n\t }\r\n\r\n\t if (column < 0)\r\n\t pos.column = 0;\r\n\r\n\t return pos;\r\n\t };\r\n\r\n\t}).call(Anchor.prototype);\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar applyDelta = acequire(\"./apply_delta\").applyDelta;\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\tvar Range = acequire(\"./range\").Range;\r\n\tvar Anchor = acequire(\"./anchor\").Anchor;\r\n\r\n\tvar Document = function(textOrLines) {\r\n\t this.$lines = [\"\"];\r\n\t if (textOrLines.length === 0) {\r\n\t this.$lines = [\"\"];\r\n\t } else if (Array.isArray(textOrLines)) {\r\n\t this.insertMergedLines({row: 0, column: 0}, textOrLines);\r\n\t } else {\r\n\t this.insert({row: 0, column:0}, textOrLines);\r\n\t }\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\t this.setValue = function(text) {\r\n\t var len = this.getLength() - 1;\r\n\t this.remove(new Range(0, 0, len, this.getLine(len).length));\r\n\t this.insert({row: 0, column: 0}, text);\r\n\t };\r\n\t this.getValue = function() {\r\n\t return this.getAllLines().join(this.getNewLineCharacter());\r\n\t };\r\n\t this.createAnchor = function(row, column) {\r\n\t return new Anchor(this, row, column);\r\n\t };\r\n\t if (\"aaa\".split(/a/).length === 0) {\r\n\t this.$split = function(text) {\r\n\t return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\r\n\t };\r\n\t } else {\r\n\t this.$split = function(text) {\r\n\t return text.split(/\\r\\n|\\r|\\n/);\r\n\t };\r\n\t }\r\n\r\n\r\n\t this.$detectNewLine = function(text) {\r\n\t var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\r\n\t this.$autoNewLine = match ? match[1] : \"\\n\";\r\n\t this._signal(\"changeNewLineMode\");\r\n\t };\r\n\t this.getNewLineCharacter = function() {\r\n\t switch (this.$newLineMode) {\r\n\t case \"windows\":\r\n\t return \"\\r\\n\";\r\n\t case \"unix\":\r\n\t return \"\\n\";\r\n\t default:\r\n\t return this.$autoNewLine || \"\\n\";\r\n\t }\r\n\t };\r\n\r\n\t this.$autoNewLine = \"\";\r\n\t this.$newLineMode = \"auto\";\r\n\t this.setNewLineMode = function(newLineMode) {\r\n\t if (this.$newLineMode === newLineMode)\r\n\t return;\r\n\r\n\t this.$newLineMode = newLineMode;\r\n\t this._signal(\"changeNewLineMode\");\r\n\t };\r\n\t this.getNewLineMode = function() {\r\n\t return this.$newLineMode;\r\n\t };\r\n\t this.isNewLine = function(text) {\r\n\t return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\r\n\t };\r\n\t this.getLine = function(row) {\r\n\t return this.$lines[row] || \"\";\r\n\t };\r\n\t this.getLines = function(firstRow, lastRow) {\r\n\t return this.$lines.slice(firstRow, lastRow + 1);\r\n\t };\r\n\t this.getAllLines = function() {\r\n\t return this.getLines(0, this.getLength());\r\n\t };\r\n\t this.getLength = function() {\r\n\t return this.$lines.length;\r\n\t };\r\n\t this.getTextRange = function(range) {\r\n\t return this.getLinesForRange(range).join(this.getNewLineCharacter());\r\n\t };\r\n\t this.getLinesForRange = function(range) {\r\n\t var lines;\r\n\t if (range.start.row === range.end.row) {\r\n\t lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\r\n\t } else {\r\n\t lines = this.getLines(range.start.row, range.end.row);\r\n\t lines[0] = (lines[0] || \"\").substring(range.start.column);\r\n\t var l = lines.length - 1;\r\n\t if (range.end.row - range.start.row == l)\r\n\t lines[l] = lines[l].substring(0, range.end.column);\r\n\t }\r\n\t return lines;\r\n\t };\r\n\t this.insertLines = function(row, lines) {\r\n\t console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\r\n\t return this.insertFullLines(row, lines);\r\n\t };\r\n\t this.removeLines = function(firstRow, lastRow) {\r\n\t console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\r\n\t return this.removeFullLines(firstRow, lastRow);\r\n\t };\r\n\t this.insertNewLine = function(position) {\r\n\t console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\\'\\', \\'\\']) instead.\");\r\n\t return this.insertMergedLines(position, [\"\", \"\"]);\r\n\t };\r\n\t this.insert = function(position, text) {\r\n\t if (this.getLength() <= 1)\r\n\t this.$detectNewLine(text);\r\n\t \r\n\t return this.insertMergedLines(position, this.$split(text));\r\n\t };\r\n\t this.insertInLine = function(position, text) {\r\n\t var start = this.clippedPos(position.row, position.column);\r\n\t var end = this.pos(position.row, position.column + text.length);\r\n\t \r\n\t this.applyDelta({\r\n\t start: start,\r\n\t end: end,\r\n\t action: \"insert\",\r\n\t lines: [text]\r\n\t }, true);\r\n\t \r\n\t return this.clonePos(end);\r\n\t };\r\n\t \r\n\t this.clippedPos = function(row, column) {\r\n\t var length = this.getLength();\r\n\t if (row === undefined) {\r\n\t row = length;\r\n\t } else if (row < 0) {\r\n\t row = 0;\r\n\t } else if (row >= length) {\r\n\t row = length - 1;\r\n\t column = undefined;\r\n\t }\r\n\t var line = this.getLine(row);\r\n\t if (column == undefined)\r\n\t column = line.length;\r\n\t column = Math.min(Math.max(column, 0), line.length);\r\n\t return {row: row, column: column};\r\n\t };\r\n\t \r\n\t this.clonePos = function(pos) {\r\n\t return {row: pos.row, column: pos.column};\r\n\t };\r\n\t \r\n\t this.pos = function(row, column) {\r\n\t return {row: row, column: column};\r\n\t };\r\n\t \r\n\t this.$clipPosition = function(position) {\r\n\t var length = this.getLength();\r\n\t if (position.row >= length) {\r\n\t position.row = Math.max(0, length - 1);\r\n\t position.column = this.getLine(length - 1).length;\r\n\t } else {\r\n\t position.row = Math.max(0, position.row);\r\n\t position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\r\n\t }\r\n\t return position;\r\n\t };\r\n\t this.insertFullLines = function(row, lines) {\r\n\t row = Math.min(Math.max(row, 0), this.getLength());\r\n\t var column = 0;\r\n\t if (row < this.getLength()) {\r\n\t lines = lines.concat([\"\"]);\r\n\t column = 0;\r\n\t } else {\r\n\t lines = [\"\"].concat(lines);\r\n\t row--;\r\n\t column = this.$lines[row].length;\r\n\t }\r\n\t this.insertMergedLines({row: row, column: column}, lines);\r\n\t }; \r\n\t this.insertMergedLines = function(position, lines) {\r\n\t var start = this.clippedPos(position.row, position.column);\r\n\t var end = {\r\n\t row: start.row + lines.length - 1,\r\n\t column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\r\n\t };\r\n\t \r\n\t this.applyDelta({\r\n\t start: start,\r\n\t end: end,\r\n\t action: \"insert\",\r\n\t lines: lines\r\n\t });\r\n\t \r\n\t return this.clonePos(end);\r\n\t };\r\n\t this.remove = function(range) {\r\n\t var start = this.clippedPos(range.start.row, range.start.column);\r\n\t var end = this.clippedPos(range.end.row, range.end.column);\r\n\t this.applyDelta({\r\n\t start: start,\r\n\t end: end,\r\n\t action: \"remove\",\r\n\t lines: this.getLinesForRange({start: start, end: end})\r\n\t });\r\n\t return this.clonePos(start);\r\n\t };\r\n\t this.removeInLine = function(row, startColumn, endColumn) {\r\n\t var start = this.clippedPos(row, startColumn);\r\n\t var end = this.clippedPos(row, endColumn);\r\n\t \r\n\t this.applyDelta({\r\n\t start: start,\r\n\t end: end,\r\n\t action: \"remove\",\r\n\t lines: this.getLinesForRange({start: start, end: end})\r\n\t }, true);\r\n\t \r\n\t return this.clonePos(start);\r\n\t };\r\n\t this.removeFullLines = function(firstRow, lastRow) {\r\n\t firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\r\n\t lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\r\n\t var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\r\n\t var deleteLastNewLine = lastRow < this.getLength() - 1;\r\n\t var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow );\r\n\t var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 );\r\n\t var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow );\r\n\t var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length ); \r\n\t var range = new Range(startRow, startCol, endRow, endCol);\r\n\t var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\r\n\t \r\n\t this.applyDelta({\r\n\t start: range.start,\r\n\t end: range.end,\r\n\t action: \"remove\",\r\n\t lines: this.getLinesForRange(range)\r\n\t });\r\n\t return deletedLines;\r\n\t };\r\n\t this.removeNewLine = function(row) {\r\n\t if (row < this.getLength() - 1 && row >= 0) {\r\n\t this.applyDelta({\r\n\t start: this.pos(row, this.getLine(row).length),\r\n\t end: this.pos(row + 1, 0),\r\n\t action: \"remove\",\r\n\t lines: [\"\", \"\"]\r\n\t });\r\n\t }\r\n\t };\r\n\t this.replace = function(range, text) {\r\n\t if (!(range instanceof Range))\r\n\t range = Range.fromPoints(range.start, range.end);\r\n\t if (text.length === 0 && range.isEmpty())\r\n\t return range.start;\r\n\t if (text == this.getTextRange(range))\r\n\t return range.end;\r\n\r\n\t this.remove(range);\r\n\t var end;\r\n\t if (text) {\r\n\t end = this.insert(range.start, text);\r\n\t }\r\n\t else {\r\n\t end = range.start;\r\n\t }\r\n\t \r\n\t return end;\r\n\t };\r\n\t this.applyDeltas = function(deltas) {\r\n\t for (var i=0; i<deltas.length; i++) {\r\n\t this.applyDelta(deltas[i]);\r\n\t }\r\n\t };\r\n\t this.revertDeltas = function(deltas) {\r\n\t for (var i=deltas.length-1; i>=0; i--) {\r\n\t this.revertDelta(deltas[i]);\r\n\t }\r\n\t };\r\n\t this.applyDelta = function(delta, doNotValidate) {\r\n\t var isInsert = delta.action == \"insert\";\r\n\t if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\r\n\t : !Range.comparePoints(delta.start, delta.end)) {\r\n\t return;\r\n\t }\r\n\t \r\n\t if (isInsert && delta.lines.length > 20000)\r\n\t this.$splitAndapplyLargeDelta(delta, 20000);\r\n\t applyDelta(this.$lines, delta, doNotValidate);\r\n\t this._signal(\"change\", delta);\r\n\t };\r\n\t \r\n\t this.$splitAndapplyLargeDelta = function(delta, MAX) {\r\n\t var lines = delta.lines;\r\n\t var l = lines.length;\r\n\t var row = delta.start.row; \r\n\t var column = delta.start.column;\r\n\t var from = 0, to = 0;\r\n\t do {\r\n\t from = to;\r\n\t to += MAX - 1;\r\n\t var chunk = lines.slice(from, to);\r\n\t if (to > l) {\r\n\t delta.lines = chunk;\r\n\t delta.start.row = row + from;\r\n\t delta.start.column = column;\r\n\t break;\r\n\t }\r\n\t chunk.push(\"\");\r\n\t this.applyDelta({\r\n\t start: this.pos(row + from, column),\r\n\t end: this.pos(row + to, column = 0),\r\n\t action: delta.action,\r\n\t lines: chunk\r\n\t }, true);\r\n\t } while(true);\r\n\t };\r\n\t this.revertDelta = function(delta) {\r\n\t this.applyDelta({\r\n\t start: this.clonePos(delta.start),\r\n\t end: this.clonePos(delta.end),\r\n\t action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\r\n\t lines: delta.lines.slice()\r\n\t });\r\n\t };\r\n\t this.indexToPosition = function(index, startRow) {\r\n\t var lines = this.$lines || this.getAllLines();\r\n\t var newlineLength = this.getNewLineCharacter().length;\r\n\t for (var i = startRow || 0, l = lines.length; i < l; i++) {\r\n\t index -= lines[i].length + newlineLength;\r\n\t if (index < 0)\r\n\t return {row: i, column: index + lines[i].length + newlineLength};\r\n\t }\r\n\t return {row: l-1, column: lines[l-1].length};\r\n\t };\r\n\t this.positionToIndex = function(pos, startRow) {\r\n\t var lines = this.$lines || this.getAllLines();\r\n\t var newlineLength = this.getNewLineCharacter().length;\r\n\t var index = 0;\r\n\t var row = Math.min(pos.row, lines.length);\r\n\t for (var i = startRow || 0; i < row; ++i)\r\n\t index += lines[i].length + newlineLength;\r\n\r\n\t return index + pos.column;\r\n\t };\r\n\r\n\t}).call(Document.prototype);\r\n\r\n\texports.Document = Document;\r\n\t});\r\n\r\n\tace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\r\n\tvar BackgroundTokenizer = function(tokenizer, editor) {\r\n\t this.running = false;\r\n\t this.lines = [];\r\n\t this.states = [];\r\n\t this.currentLine = 0;\r\n\t this.tokenizer = tokenizer;\r\n\r\n\t var self = this;\r\n\r\n\t this.$worker = function() {\r\n\t if (!self.running) { return; }\r\n\r\n\t var workerStart = new Date();\r\n\t var currentLine = self.currentLine;\r\n\t var endLine = -1;\r\n\t var doc = self.doc;\r\n\r\n\t var startLine = currentLine;\r\n\t while (self.lines[currentLine])\r\n\t currentLine++;\r\n\t \r\n\t var len = doc.getLength();\r\n\t var processedLines = 0;\r\n\t self.running = false;\r\n\t while (currentLine < len) {\r\n\t self.$tokenizeRow(currentLine);\r\n\t endLine = currentLine;\r\n\t do {\r\n\t currentLine++;\r\n\t } while (self.lines[currentLine]);\r\n\t processedLines ++;\r\n\t if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) { \r\n\t self.running = setTimeout(self.$worker, 20);\r\n\t break;\r\n\t }\r\n\t }\r\n\t self.currentLine = currentLine;\r\n\t \r\n\t if (startLine <= endLine)\r\n\t self.fireUpdateEvent(startLine, endLine);\r\n\t };\r\n\t};\r\n\r\n\t(function(){\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\t this.setTokenizer = function(tokenizer) {\r\n\t this.tokenizer = tokenizer;\r\n\t this.lines = [];\r\n\t this.states = [];\r\n\r\n\t this.start(0);\r\n\t };\r\n\t this.setDocument = function(doc) {\r\n\t this.doc = doc;\r\n\t this.lines = [];\r\n\t this.states = [];\r\n\r\n\t this.stop();\r\n\t };\r\n\t this.fireUpdateEvent = function(firstRow, lastRow) {\r\n\t var data = {\r\n\t first: firstRow,\r\n\t last: lastRow\r\n\t };\r\n\t this._signal(\"update\", {data: data});\r\n\t };\r\n\t this.start = function(startRow) {\r\n\t this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\r\n\t this.lines.splice(this.currentLine, this.lines.length);\r\n\t this.states.splice(this.currentLine, this.states.length);\r\n\r\n\t this.stop();\r\n\t this.running = setTimeout(this.$worker, 700);\r\n\t };\r\n\t \r\n\t this.scheduleStart = function() {\r\n\t if (!this.running)\r\n\t this.running = setTimeout(this.$worker, 700);\r\n\t }\r\n\r\n\t this.$updateOnChange = function(delta) {\r\n\t var startRow = delta.start.row;\r\n\t var len = delta.end.row - startRow;\r\n\r\n\t if (len === 0) {\r\n\t this.lines[startRow] = null;\r\n\t } else if (delta.action == \"remove\") {\r\n\t this.lines.splice(startRow, len + 1, null);\r\n\t this.states.splice(startRow, len + 1, null);\r\n\t } else {\r\n\t var args = Array(len + 1);\r\n\t args.unshift(startRow, 1);\r\n\t this.lines.splice.apply(this.lines, args);\r\n\t this.states.splice.apply(this.states, args);\r\n\t }\r\n\r\n\t this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\r\n\r\n\t this.stop();\r\n\t };\r\n\t this.stop = function() {\r\n\t if (this.running)\r\n\t clearTimeout(this.running);\r\n\t this.running = false;\r\n\t };\r\n\t this.getTokens = function(row) {\r\n\t return this.lines[row] || this.$tokenizeRow(row);\r\n\t };\r\n\t this.getState = function(row) {\r\n\t if (this.currentLine == row)\r\n\t this.$tokenizeRow(row);\r\n\t return this.states[row] || \"start\";\r\n\t };\r\n\r\n\t this.$tokenizeRow = function(row) {\r\n\t var line = this.doc.getLine(row);\r\n\t var state = this.states[row - 1];\r\n\r\n\t var data = this.tokenizer.getLineTokens(line, state, row);\r\n\r\n\t if (this.states[row] + \"\" !== data.state + \"\") {\r\n\t this.states[row] = data.state;\r\n\t this.lines[row + 1] = null;\r\n\t if (this.currentLine > row + 1)\r\n\t this.currentLine = row + 1;\r\n\t } else if (this.currentLine == row) {\r\n\t this.currentLine = row + 1;\r\n\t }\r\n\r\n\t return this.lines[row] = data.tokens;\r\n\t };\r\n\r\n\t}).call(BackgroundTokenizer.prototype);\r\n\r\n\texports.BackgroundTokenizer = BackgroundTokenizer;\r\n\t});\r\n\r\n\tace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar lang = acequire(\"./lib/lang\");\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar Range = acequire(\"./range\").Range;\r\n\r\n\tvar SearchHighlight = function(regExp, clazz, type) {\r\n\t this.setRegexp(regExp);\r\n\t this.clazz = clazz;\r\n\t this.type = type || \"text\";\r\n\t};\r\n\r\n\t(function() {\r\n\t this.MAX_RANGES = 500;\r\n\t \r\n\t this.setRegexp = function(regExp) {\r\n\t if (this.regExp+\"\" == regExp+\"\")\r\n\t return;\r\n\t this.regExp = regExp;\r\n\t this.cache = [];\r\n\t };\r\n\r\n\t this.update = function(html, markerLayer, session, config) {\r\n\t if (!this.regExp)\r\n\t return;\r\n\t var start = config.firstRow, end = config.lastRow;\r\n\r\n\t for (var i = start; i <= end; i++) {\r\n\t var ranges = this.cache[i];\r\n\t if (ranges == null) {\r\n\t ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\r\n\t if (ranges.length > this.MAX_RANGES)\r\n\t ranges = ranges.slice(0, this.MAX_RANGES);\r\n\t ranges = ranges.map(function(match) {\r\n\t return new Range(i, match.offset, i, match.offset + match.length);\r\n\t });\r\n\t this.cache[i] = ranges.length ? ranges : \"\";\r\n\t }\r\n\r\n\t for (var j = ranges.length; j --; ) {\r\n\t markerLayer.drawSingleLineMarker(\r\n\t html, ranges[j].toScreenRange(session), this.clazz, config);\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t}).call(SearchHighlight.prototype);\r\n\r\n\texports.SearchHighlight = SearchHighlight;\r\n\t});\r\n\r\n\tace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Range = acequire(\"../range\").Range;\r\n\tfunction FoldLine(foldData, folds) {\r\n\t this.foldData = foldData;\r\n\t if (Array.isArray(folds)) {\r\n\t this.folds = folds;\r\n\t } else {\r\n\t folds = this.folds = [ folds ];\r\n\t }\r\n\r\n\t var last = folds[folds.length - 1];\r\n\t this.range = new Range(folds[0].start.row, folds[0].start.column,\r\n\t last.end.row, last.end.column);\r\n\t this.start = this.range.start;\r\n\t this.end = this.range.end;\r\n\r\n\t this.folds.forEach(function(fold) {\r\n\t fold.setFoldLine(this);\r\n\t }, this);\r\n\t}\r\n\r\n\t(function() {\r\n\t this.shiftRow = function(shift) {\r\n\t this.start.row += shift;\r\n\t this.end.row += shift;\r\n\t this.folds.forEach(function(fold) {\r\n\t fold.start.row += shift;\r\n\t fold.end.row += shift;\r\n\t });\r\n\t };\r\n\r\n\t this.addFold = function(fold) {\r\n\t if (fold.sameRow) {\r\n\t if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\r\n\t throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\r\n\t }\r\n\t this.folds.push(fold);\r\n\t this.folds.sort(function(a, b) {\r\n\t return -a.range.compareEnd(b.start.row, b.start.column);\r\n\t });\r\n\t if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\r\n\t this.end.row = fold.end.row;\r\n\t this.end.column = fold.end.column;\r\n\t } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\r\n\t this.start.row = fold.start.row;\r\n\t this.start.column = fold.start.column;\r\n\t }\r\n\t } else if (fold.start.row == this.end.row) {\r\n\t this.folds.push(fold);\r\n\t this.end.row = fold.end.row;\r\n\t this.end.column = fold.end.column;\r\n\t } else if (fold.end.row == this.start.row) {\r\n\t this.folds.unshift(fold);\r\n\t this.start.row = fold.start.row;\r\n\t this.start.column = fold.start.column;\r\n\t } else {\r\n\t throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\r\n\t }\r\n\t fold.foldLine = this;\r\n\t };\r\n\r\n\t this.containsRow = function(row) {\r\n\t return row >= this.start.row && row <= this.end.row;\r\n\t };\r\n\r\n\t this.walk = function(callback, endRow, endColumn) {\r\n\t var lastEnd = 0,\r\n\t folds = this.folds,\r\n\t fold,\r\n\t cmp, stop, isNewRow = true;\r\n\r\n\t if (endRow == null) {\r\n\t endRow = this.end.row;\r\n\t endColumn = this.end.column;\r\n\t }\r\n\r\n\t for (var i = 0; i < folds.length; i++) {\r\n\t fold = folds[i];\r\n\r\n\t cmp = fold.range.compareStart(endRow, endColumn);\r\n\t if (cmp == -1) {\r\n\t callback(null, endRow, endColumn, lastEnd, isNewRow);\r\n\t return;\r\n\t }\r\n\r\n\t stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\r\n\t stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\r\n\t if (stop || cmp === 0) {\r\n\t return;\r\n\t }\r\n\t isNewRow = !fold.sameRow;\r\n\t lastEnd = fold.end.column;\r\n\t }\r\n\t callback(null, endRow, endColumn, lastEnd, isNewRow);\r\n\t };\r\n\r\n\t this.getNextFoldTo = function(row, column) {\r\n\t var fold, cmp;\r\n\t for (var i = 0; i < this.folds.length; i++) {\r\n\t fold = this.folds[i];\r\n\t cmp = fold.range.compareEnd(row, column);\r\n\t if (cmp == -1) {\r\n\t return {\r\n\t fold: fold,\r\n\t kind: \"after\"\r\n\t };\r\n\t } else if (cmp === 0) {\r\n\t return {\r\n\t fold: fold,\r\n\t kind: \"inside\"\r\n\t };\r\n\t }\r\n\t }\r\n\t return null;\r\n\t };\r\n\r\n\t this.addRemoveChars = function(row, column, len) {\r\n\t var ret = this.getNextFoldTo(row, column),\r\n\t fold, folds;\r\n\t if (ret) {\r\n\t fold = ret.fold;\r\n\t if (ret.kind == \"inside\"\r\n\t && fold.start.column != column\r\n\t && fold.start.row != row)\r\n\t {\r\n\t window.console && window.console.log(row, column, fold);\r\n\t } else if (fold.start.row == row) {\r\n\t folds = this.folds;\r\n\t var i = folds.indexOf(fold);\r\n\t if (i === 0) {\r\n\t this.start.column += len;\r\n\t }\r\n\t for (i; i < folds.length; i++) {\r\n\t fold = folds[i];\r\n\t fold.start.column += len;\r\n\t if (!fold.sameRow) {\r\n\t return;\r\n\t }\r\n\t fold.end.column += len;\r\n\t }\r\n\t this.end.column += len;\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t this.split = function(row, column) {\r\n\t var pos = this.getNextFoldTo(row, column);\r\n\t \r\n\t if (!pos || pos.kind == \"inside\")\r\n\t return null;\r\n\t \r\n\t var fold = pos.fold;\r\n\t var folds = this.folds;\r\n\t var foldData = this.foldData;\r\n\t \r\n\t var i = folds.indexOf(fold);\r\n\t var foldBefore = folds[i - 1];\r\n\t this.end.row = foldBefore.end.row;\r\n\t this.end.column = foldBefore.end.column;\r\n\t folds = folds.splice(i, folds.length - i);\r\n\r\n\t var newFoldLine = new FoldLine(foldData, folds);\r\n\t foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\r\n\t return newFoldLine;\r\n\t };\r\n\r\n\t this.merge = function(foldLineNext) {\r\n\t var folds = foldLineNext.folds;\r\n\t for (var i = 0; i < folds.length; i++) {\r\n\t this.addFold(folds[i]);\r\n\t }\r\n\t var foldData = this.foldData;\r\n\t foldData.splice(foldData.indexOf(foldLineNext), 1);\r\n\t };\r\n\r\n\t this.toString = function() {\r\n\t var ret = [this.range.toString() + \": [\" ];\r\n\r\n\t this.folds.forEach(function(fold) {\r\n\t ret.push(\" \" + fold.toString());\r\n\t });\r\n\t ret.push(\"]\");\r\n\t return ret.join(\"\\n\");\r\n\t };\r\n\r\n\t this.idxToPosition = function(idx) {\r\n\t var lastFoldEndColumn = 0;\r\n\r\n\t for (var i = 0; i < this.folds.length; i++) {\r\n\t var fold = this.folds[i];\r\n\r\n\t idx -= fold.start.column - lastFoldEndColumn;\r\n\t if (idx < 0) {\r\n\t return {\r\n\t row: fold.start.row,\r\n\t column: fold.start.column + idx\r\n\t };\r\n\t }\r\n\r\n\t idx -= fold.placeholder.length;\r\n\t if (idx < 0) {\r\n\t return fold.start;\r\n\t }\r\n\r\n\t lastFoldEndColumn = fold.end.column;\r\n\t }\r\n\r\n\t return {\r\n\t row: this.end.row,\r\n\t column: this.end.column + idx\r\n\t };\r\n\t };\r\n\t}).call(FoldLine.prototype);\r\n\r\n\texports.FoldLine = FoldLine;\r\n\t});\r\n\r\n\tace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\tvar Range = acequire(\"./range\").Range;\r\n\tvar comparePoints = Range.comparePoints;\r\n\r\n\tvar RangeList = function() {\r\n\t this.ranges = [];\r\n\t};\r\n\r\n\t(function() {\r\n\t this.comparePoints = comparePoints;\r\n\r\n\t this.pointIndex = function(pos, excludeEdges, startIndex) {\r\n\t var list = this.ranges;\r\n\r\n\t for (var i = startIndex || 0; i < list.length; i++) {\r\n\t var range = list[i];\r\n\t var cmpEnd = comparePoints(pos, range.end);\r\n\t if (cmpEnd > 0)\r\n\t continue;\r\n\t var cmpStart = comparePoints(pos, range.start);\r\n\t if (cmpEnd === 0)\r\n\t return excludeEdges && cmpStart !== 0 ? -i-2 : i;\r\n\t if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))\r\n\t return i;\r\n\r\n\t return -i-1;\r\n\t }\r\n\t return -i - 1;\r\n\t };\r\n\r\n\t this.add = function(range) {\r\n\t var excludeEdges = !range.isEmpty();\r\n\t var startIndex = this.pointIndex(range.start, excludeEdges);\r\n\t if (startIndex < 0)\r\n\t startIndex = -startIndex - 1;\r\n\r\n\t var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\r\n\r\n\t if (endIndex < 0)\r\n\t endIndex = -endIndex - 1;\r\n\t else\r\n\t endIndex++;\r\n\t return this.ranges.splice(startIndex, endIndex - startIndex, range);\r\n\t };\r\n\r\n\t this.addList = function(list) {\r\n\t var removed = [];\r\n\t for (var i = list.length; i--; ) {\r\n\t removed.push.apply(removed, this.add(list[i]));\r\n\t }\r\n\t return removed;\r\n\t };\r\n\r\n\t this.substractPoint = function(pos) {\r\n\t var i = this.pointIndex(pos);\r\n\r\n\t if (i >= 0)\r\n\t return this.ranges.splice(i, 1);\r\n\t };\r\n\t this.merge = function() {\r\n\t var removed = [];\r\n\t var list = this.ranges;\r\n\t \r\n\t list = list.sort(function(a, b) {\r\n\t return comparePoints(a.start, b.start);\r\n\t });\r\n\t \r\n\t var next = list[0], range;\r\n\t for (var i = 1; i < list.length; i++) {\r\n\t range = next;\r\n\t next = list[i];\r\n\t var cmp = comparePoints(range.end, next.start);\r\n\t if (cmp < 0)\r\n\t continue;\r\n\r\n\t if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\r\n\t continue;\r\n\r\n\t if (comparePoints(range.end, next.end) < 0) {\r\n\t range.end.row = next.end.row;\r\n\t range.end.column = next.end.column;\r\n\t }\r\n\r\n\t list.splice(i, 1);\r\n\t removed.push(next);\r\n\t next = range;\r\n\t i--;\r\n\t }\r\n\t \r\n\t this.ranges = list;\r\n\r\n\t return removed;\r\n\t };\r\n\r\n\t this.contains = function(row, column) {\r\n\t return this.pointIndex({row: row, column: column}) >= 0;\r\n\t };\r\n\r\n\t this.containsPoint = function(pos) {\r\n\t return this.pointIndex(pos) >= 0;\r\n\t };\r\n\r\n\t this.rangeAtPoint = function(pos) {\r\n\t var i = this.pointIndex(pos);\r\n\t if (i >= 0)\r\n\t return this.ranges[i];\r\n\t };\r\n\r\n\r\n\t this.clipRows = function(startRow, endRow) {\r\n\t var list = this.ranges;\r\n\t if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)\r\n\t return [];\r\n\r\n\t var startIndex = this.pointIndex({row: startRow, column: 0});\r\n\t if (startIndex < 0)\r\n\t startIndex = -startIndex - 1;\r\n\t var endIndex = this.pointIndex({row: endRow, column: 0}, startIndex);\r\n\t if (endIndex < 0)\r\n\t endIndex = -endIndex - 1;\r\n\r\n\t var clipped = [];\r\n\t for (var i = startIndex; i < endIndex; i++) {\r\n\t clipped.push(list[i]);\r\n\t }\r\n\t return clipped;\r\n\t };\r\n\r\n\t this.removeAll = function() {\r\n\t return this.ranges.splice(0, this.ranges.length);\r\n\t };\r\n\r\n\t this.attach = function(session) {\r\n\t if (this.session)\r\n\t this.detach();\r\n\r\n\t this.session = session;\r\n\t this.onChange = this.$onChange.bind(this);\r\n\r\n\t this.session.on('change', this.onChange);\r\n\t };\r\n\r\n\t this.detach = function() {\r\n\t if (!this.session)\r\n\t return;\r\n\t this.session.removeListener('change', this.onChange);\r\n\t this.session = null;\r\n\t };\r\n\r\n\t this.$onChange = function(delta) {\r\n\t if (delta.action == \"insert\"){\r\n\t var start = delta.start;\r\n\t var end = delta.end;\r\n\t } else {\r\n\t var end = delta.start;\r\n\t var start = delta.end;\r\n\t }\r\n\t var startRow = start.row;\r\n\t var endRow = end.row;\r\n\t var lineDif = endRow - startRow;\r\n\r\n\t var colDiff = -start.column + end.column;\r\n\t var ranges = this.ranges;\r\n\r\n\t for (var i = 0, n = ranges.length; i < n; i++) {\r\n\t var r = ranges[i];\r\n\t if (r.end.row < startRow)\r\n\t continue;\r\n\t if (r.start.row > startRow)\r\n\t break;\r\n\r\n\t if (r.start.row == startRow && r.start.column >= start.column ) {\r\n\t if (r.start.column == start.column && this.$insertRight) {\r\n\t } else {\r\n\t r.start.column += colDiff;\r\n\t r.start.row += lineDif;\r\n\t }\r\n\t }\r\n\t if (r.end.row == startRow && r.end.column >= start.column) {\r\n\t if (r.end.column == start.column && this.$insertRight) {\r\n\t continue;\r\n\t }\r\n\t if (r.end.column == start.column && colDiff > 0 && i < n - 1) { \r\n\t if (r.end.column > r.start.column && r.end.column == ranges[i+1].start.column)\r\n\t r.end.column -= colDiff;\r\n\t }\r\n\t r.end.column += colDiff;\r\n\t r.end.row += lineDif;\r\n\t }\r\n\t }\r\n\r\n\t if (lineDif != 0 && i < n) {\r\n\t for (; i < n; i++) {\r\n\t var r = ranges[i];\r\n\t r.start.row += lineDif;\r\n\t r.end.row += lineDif;\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t}).call(RangeList.prototype);\r\n\r\n\texports.RangeList = RangeList;\r\n\t});\r\n\r\n\tace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/range_list\",\"ace/lib/oop\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Range = acequire(\"../range\").Range;\r\n\tvar RangeList = acequire(\"../range_list\").RangeList;\r\n\tvar oop = acequire(\"../lib/oop\")\r\n\tvar Fold = exports.Fold = function(range, placeholder) {\r\n\t this.foldLine = null;\r\n\t this.placeholder = placeholder;\r\n\t this.range = range;\r\n\t this.start = range.start;\r\n\t this.end = range.end;\r\n\r\n\t this.sameRow = range.start.row == range.end.row;\r\n\t this.subFolds = this.ranges = [];\r\n\t};\r\n\r\n\toop.inherits(Fold, RangeList);\r\n\r\n\t(function() {\r\n\r\n\t this.toString = function() {\r\n\t return '\"' + this.placeholder + '\" ' + this.range.toString();\r\n\t };\r\n\r\n\t this.setFoldLine = function(foldLine) {\r\n\t this.foldLine = foldLine;\r\n\t this.subFolds.forEach(function(fold) {\r\n\t fold.setFoldLine(foldLine);\r\n\t });\r\n\t };\r\n\r\n\t this.clone = function() {\r\n\t var range = this.range.clone();\r\n\t var fold = new Fold(range, this.placeholder);\r\n\t this.subFolds.forEach(function(subFold) {\r\n\t fold.subFolds.push(subFold.clone());\r\n\t });\r\n\t fold.collapseChildren = this.collapseChildren;\r\n\t return fold;\r\n\t };\r\n\r\n\t this.addSubFold = function(fold) {\r\n\t if (this.range.isEqual(fold))\r\n\t return;\r\n\r\n\t if (!this.range.containsRange(fold))\r\n\t throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\r\n\t consumeRange(fold, this.start);\r\n\r\n\t var row = fold.start.row, column = fold.start.column;\r\n\t for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\r\n\t cmp = this.subFolds[i].range.compare(row, column);\r\n\t if (cmp != 1)\r\n\t break;\r\n\t }\r\n\t var afterStart = this.subFolds[i];\r\n\r\n\t if (cmp == 0)\r\n\t return afterStart.addSubFold(fold);\r\n\t var row = fold.range.end.row, column = fold.range.end.column;\r\n\t for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\r\n\t cmp = this.subFolds[j].range.compare(row, column);\r\n\t if (cmp != 1)\r\n\t break;\r\n\t }\r\n\t var afterEnd = this.subFolds[j];\r\n\r\n\t if (cmp == 0)\r\n\t throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\r\n\r\n\t var consumedFolds = this.subFolds.splice(i, j - i, fold);\r\n\t fold.setFoldLine(this.foldLine);\r\n\r\n\t return fold;\r\n\t };\r\n\t \r\n\t this.restoreRange = function(range) {\r\n\t return restoreRange(range, this.start);\r\n\t };\r\n\r\n\t}).call(Fold.prototype);\r\n\r\n\tfunction consumePoint(point, anchor) {\r\n\t point.row -= anchor.row;\r\n\t if (point.row == 0)\r\n\t point.column -= anchor.column;\r\n\t}\r\n\tfunction consumeRange(range, anchor) {\r\n\t consumePoint(range.start, anchor);\r\n\t consumePoint(range.end, anchor);\r\n\t}\r\n\tfunction restorePoint(point, anchor) {\r\n\t if (point.row == 0)\r\n\t point.column += anchor.column;\r\n\t point.row += anchor.row;\r\n\t}\r\n\tfunction restoreRange(range, anchor) {\r\n\t restorePoint(range.start, anchor);\r\n\t restorePoint(range.end, anchor);\r\n\t}\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Range = acequire(\"../range\").Range;\r\n\tvar FoldLine = acequire(\"./fold_line\").FoldLine;\r\n\tvar Fold = acequire(\"./fold\").Fold;\r\n\tvar TokenIterator = acequire(\"../token_iterator\").TokenIterator;\r\n\r\n\tfunction Folding() {\r\n\t this.getFoldAt = function(row, column, side) {\r\n\t var foldLine = this.getFoldLine(row);\r\n\t if (!foldLine)\r\n\t return null;\r\n\r\n\t var folds = foldLine.folds;\r\n\t for (var i = 0; i < folds.length; i++) {\r\n\t var fold = folds[i];\r\n\t if (fold.range.contains(row, column)) {\r\n\t if (side == 1 && fold.range.isEnd(row, column)) {\r\n\t continue;\r\n\t } else if (side == -1 && fold.range.isStart(row, column)) {\r\n\t continue;\r\n\t }\r\n\t return fold;\r\n\t }\r\n\t }\r\n\t };\r\n\t this.getFoldsInRange = function(range) {\r\n\t var start = range.start;\r\n\t var end = range.end;\r\n\t var foldLines = this.$foldData;\r\n\t var foundFolds = [];\r\n\r\n\t start.column += 1;\r\n\t end.column -= 1;\r\n\r\n\t for (var i = 0; i < foldLines.length; i++) {\r\n\t var cmp = foldLines[i].range.compareRange(range);\r\n\t if (cmp == 2) {\r\n\t continue;\r\n\t }\r\n\t else if (cmp == -2) {\r\n\t break;\r\n\t }\r\n\r\n\t var folds = foldLines[i].folds;\r\n\t for (var j = 0; j < folds.length; j++) {\r\n\t var fold = folds[j];\r\n\t cmp = fold.range.compareRange(range);\r\n\t if (cmp == -2) {\r\n\t break;\r\n\t } else if (cmp == 2) {\r\n\t continue;\r\n\t } else\r\n\t if (cmp == 42) {\r\n\t break;\r\n\t }\r\n\t foundFolds.push(fold);\r\n\t }\r\n\t }\r\n\t start.column -= 1;\r\n\t end.column += 1;\r\n\r\n\t return foundFolds;\r\n\t };\r\n\r\n\t this.getFoldsInRangeList = function(ranges) {\r\n\t if (Array.isArray(ranges)) {\r\n\t var folds = [];\r\n\t ranges.forEach(function(range) {\r\n\t folds = folds.concat(this.getFoldsInRange(range));\r\n\t }, this);\r\n\t } else {\r\n\t var folds = this.getFoldsInRange(ranges);\r\n\t }\r\n\t return folds;\r\n\t };\r\n\t this.getAllFolds = function() {\r\n\t var folds = [];\r\n\t var foldLines = this.$foldData;\r\n\t \r\n\t for (var i = 0; i < foldLines.length; i++)\r\n\t for (var j = 0; j < foldLines[i].folds.length; j++)\r\n\t folds.push(foldLines[i].folds[j]);\r\n\r\n\t return folds;\r\n\t };\r\n\t this.getFoldStringAt = function(row, column, trim, foldLine) {\r\n\t foldLine = foldLine || this.getFoldLine(row);\r\n\t if (!foldLine)\r\n\t return null;\r\n\r\n\t var lastFold = {\r\n\t end: { column: 0 }\r\n\t };\r\n\t var str, fold;\r\n\t for (var i = 0; i < foldLine.folds.length; i++) {\r\n\t fold = foldLine.folds[i];\r\n\t var cmp = fold.range.compareEnd(row, column);\r\n\t if (cmp == -1) {\r\n\t str = this\r\n\t .getLine(fold.start.row)\r\n\t .substring(lastFold.end.column, fold.start.column);\r\n\t break;\r\n\t }\r\n\t else if (cmp === 0) {\r\n\t return null;\r\n\t }\r\n\t lastFold = fold;\r\n\t }\r\n\t if (!str)\r\n\t str = this.getLine(fold.start.row).substring(lastFold.end.column);\r\n\r\n\t if (trim == -1)\r\n\t return str.substring(0, column - lastFold.end.column);\r\n\t else if (trim == 1)\r\n\t return str.substring(column - lastFold.end.column);\r\n\t else\r\n\t return str;\r\n\t };\r\n\r\n\t this.getFoldLine = function(docRow, startFoldLine) {\r\n\t var foldData = this.$foldData;\r\n\t var i = 0;\r\n\t if (startFoldLine)\r\n\t i = foldData.indexOf(startFoldLine);\r\n\t if (i == -1)\r\n\t i = 0;\r\n\t for (i; i < foldData.length; i++) {\r\n\t var foldLine = foldData[i];\r\n\t if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\r\n\t return foldLine;\r\n\t } else if (foldLine.end.row > docRow) {\r\n\t return null;\r\n\t }\r\n\t }\r\n\t return null;\r\n\t };\r\n\t this.getNextFoldLine = function(docRow, startFoldLine) {\r\n\t var foldData = this.$foldData;\r\n\t var i = 0;\r\n\t if (startFoldLine)\r\n\t i = foldData.indexOf(startFoldLine);\r\n\t if (i == -1)\r\n\t i = 0;\r\n\t for (i; i < foldData.length; i++) {\r\n\t var foldLine = foldData[i];\r\n\t if (foldLine.end.row >= docRow) {\r\n\t return foldLine;\r\n\t }\r\n\t }\r\n\t return null;\r\n\t };\r\n\r\n\t this.getFoldedRowCount = function(first, last) {\r\n\t var foldData = this.$foldData, rowCount = last-first+1;\r\n\t for (var i = 0; i < foldData.length; i++) {\r\n\t var foldLine = foldData[i],\r\n\t end = foldLine.end.row,\r\n\t start = foldLine.start.row;\r\n\t if (end >= last) {\r\n\t if (start < last) {\r\n\t if (start >= first)\r\n\t rowCount -= last-start;\r\n\t else\r\n\t rowCount = 0; // in one fold\r\n\t }\r\n\t break;\r\n\t } else if (end >= first){\r\n\t if (start >= first) // fold inside range\r\n\t rowCount -= end-start;\r\n\t else\r\n\t rowCount -= end-first+1;\r\n\t }\r\n\t }\r\n\t return rowCount;\r\n\t };\r\n\r\n\t this.$addFoldLine = function(foldLine) {\r\n\t this.$foldData.push(foldLine);\r\n\t this.$foldData.sort(function(a, b) {\r\n\t return a.start.row - b.start.row;\r\n\t });\r\n\t return foldLine;\r\n\t };\r\n\t this.addFold = function(placeholder, range) {\r\n\t var foldData = this.$foldData;\r\n\t var added = false;\r\n\t var fold;\r\n\t \r\n\t if (placeholder instanceof Fold)\r\n\t fold = placeholder;\r\n\t else {\r\n\t fold = new Fold(range, placeholder);\r\n\t fold.collapseChildren = range.collapseChildren;\r\n\t }\r\n\t this.$clipRangeToDocument(fold.range);\r\n\r\n\t var startRow = fold.start.row;\r\n\t var startColumn = fold.start.column;\r\n\t var endRow = fold.end.row;\r\n\t var endColumn = fold.end.column;\r\n\t if (!(startRow < endRow || \r\n\t startRow == endRow && startColumn <= endColumn - 2))\r\n\t throw new Error(\"The range has to be at least 2 characters width\");\r\n\r\n\t var startFold = this.getFoldAt(startRow, startColumn, 1);\r\n\t var endFold = this.getFoldAt(endRow, endColumn, -1);\r\n\t if (startFold && endFold == startFold)\r\n\t return startFold.addSubFold(fold);\r\n\r\n\t if (startFold && !startFold.range.isStart(startRow, startColumn))\r\n\t this.removeFold(startFold);\r\n\t \r\n\t if (endFold && !endFold.range.isEnd(endRow, endColumn))\r\n\t this.removeFold(endFold);\r\n\t var folds = this.getFoldsInRange(fold.range);\r\n\t if (folds.length > 0) {\r\n\t this.removeFolds(folds);\r\n\t folds.forEach(function(subFold) {\r\n\t fold.addSubFold(subFold);\r\n\t });\r\n\t }\r\n\r\n\t for (var i = 0; i < foldData.length; i++) {\r\n\t var foldLine = foldData[i];\r\n\t if (endRow == foldLine.start.row) {\r\n\t foldLine.addFold(fold);\r\n\t added = true;\r\n\t break;\r\n\t } else if (startRow == foldLine.end.row) {\r\n\t foldLine.addFold(fold);\r\n\t added = true;\r\n\t if (!fold.sameRow) {\r\n\t var foldLineNext = foldData[i + 1];\r\n\t if (foldLineNext && foldLineNext.start.row == endRow) {\r\n\t foldLine.merge(foldLineNext);\r\n\t break;\r\n\t }\r\n\t }\r\n\t break;\r\n\t } else if (endRow <= foldLine.start.row) {\r\n\t break;\r\n\t }\r\n\t }\r\n\r\n\t if (!added)\r\n\t foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\r\n\r\n\t if (this.$useWrapMode)\r\n\t this.$updateWrapData(foldLine.start.row, foldLine.start.row);\r\n\t else\r\n\t this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\r\n\t this.$modified = true;\r\n\t this._signal(\"changeFold\", { data: fold, action: \"add\" });\r\n\r\n\t return fold;\r\n\t };\r\n\r\n\t this.addFolds = function(folds) {\r\n\t folds.forEach(function(fold) {\r\n\t this.addFold(fold);\r\n\t }, this);\r\n\t };\r\n\r\n\t this.removeFold = function(fold) {\r\n\t var foldLine = fold.foldLine;\r\n\t var startRow = foldLine.start.row;\r\n\t var endRow = foldLine.end.row;\r\n\r\n\t var foldLines = this.$foldData;\r\n\t var folds = foldLine.folds;\r\n\t if (folds.length == 1) {\r\n\t foldLines.splice(foldLines.indexOf(foldLine), 1);\r\n\t } else\r\n\t if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\r\n\t folds.pop();\r\n\t foldLine.end.row = folds[folds.length - 1].end.row;\r\n\t foldLine.end.column = folds[folds.length - 1].end.column;\r\n\t } else\r\n\t if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\r\n\t folds.shift();\r\n\t foldLine.start.row = folds[0].start.row;\r\n\t foldLine.start.column = folds[0].start.column;\r\n\t } else\r\n\t if (fold.sameRow) {\r\n\t folds.splice(folds.indexOf(fold), 1);\r\n\t } else\r\n\t {\r\n\t var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\r\n\t folds = newFoldLine.folds;\r\n\t folds.shift();\r\n\t newFoldLine.start.row = folds[0].start.row;\r\n\t newFoldLine.start.column = folds[0].start.column;\r\n\t }\r\n\r\n\t if (!this.$updating) {\r\n\t if (this.$useWrapMode)\r\n\t this.$updateWrapData(startRow, endRow);\r\n\t else\r\n\t this.$updateRowLengthCache(startRow, endRow);\r\n\t }\r\n\t this.$modified = true;\r\n\t this._signal(\"changeFold\", { data: fold, action: \"remove\" });\r\n\t };\r\n\r\n\t this.removeFolds = function(folds) {\r\n\t var cloneFolds = [];\r\n\t for (var i = 0; i < folds.length; i++) {\r\n\t cloneFolds.push(folds[i]);\r\n\t }\r\n\r\n\t cloneFolds.forEach(function(fold) {\r\n\t this.removeFold(fold);\r\n\t }, this);\r\n\t this.$modified = true;\r\n\t };\r\n\r\n\t this.expandFold = function(fold) {\r\n\t this.removeFold(fold);\r\n\t fold.subFolds.forEach(function(subFold) {\r\n\t fold.restoreRange(subFold);\r\n\t this.addFold(subFold);\r\n\t }, this);\r\n\t if (fold.collapseChildren > 0) {\r\n\t this.foldAll(fold.start.row+1, fold.end.row, fold.collapseChildren-1);\r\n\t }\r\n\t fold.subFolds = [];\r\n\t };\r\n\r\n\t this.expandFolds = function(folds) {\r\n\t folds.forEach(function(fold) {\r\n\t this.expandFold(fold);\r\n\t }, this);\r\n\t };\r\n\r\n\t this.unfold = function(location, expandInner) {\r\n\t var range, folds;\r\n\t if (location == null) {\r\n\t range = new Range(0, 0, this.getLength(), 0);\r\n\t expandInner = true;\r\n\t } else if (typeof location == \"number\")\r\n\t range = new Range(location, 0, location, this.getLine(location).length);\r\n\t else if (\"row\" in location)\r\n\t range = Range.fromPoints(location, location);\r\n\t else\r\n\t range = location;\r\n\t \r\n\t folds = this.getFoldsInRangeList(range);\r\n\t if (expandInner) {\r\n\t this.removeFolds(folds);\r\n\t } else {\r\n\t var subFolds = folds;\r\n\t while (subFolds.length) {\r\n\t this.expandFolds(subFolds);\r\n\t subFolds = this.getFoldsInRangeList(range);\r\n\t }\r\n\t }\r\n\t if (folds.length)\r\n\t return folds;\r\n\t };\r\n\t this.isRowFolded = function(docRow, startFoldRow) {\r\n\t return !!this.getFoldLine(docRow, startFoldRow);\r\n\t };\r\n\r\n\t this.getRowFoldEnd = function(docRow, startFoldRow) {\r\n\t var foldLine = this.getFoldLine(docRow, startFoldRow);\r\n\t return foldLine ? foldLine.end.row : docRow;\r\n\t };\r\n\r\n\t this.getRowFoldStart = function(docRow, startFoldRow) {\r\n\t var foldLine = this.getFoldLine(docRow, startFoldRow);\r\n\t return foldLine ? foldLine.start.row : docRow;\r\n\t };\r\n\r\n\t this.getFoldDisplayLine = function(foldLine, endRow, endColumn, startRow, startColumn) {\r\n\t if (startRow == null)\r\n\t startRow = foldLine.start.row;\r\n\t if (startColumn == null)\r\n\t startColumn = 0;\r\n\t if (endRow == null)\r\n\t endRow = foldLine.end.row;\r\n\t if (endColumn == null)\r\n\t endColumn = this.getLine(endRow).length;\r\n\t var doc = this.doc;\r\n\t var textLine = \"\";\r\n\r\n\t foldLine.walk(function(placeholder, row, column, lastColumn) {\r\n\t if (row < startRow)\r\n\t return;\r\n\t if (row == startRow) {\r\n\t if (column < startColumn)\r\n\t return;\r\n\t lastColumn = Math.max(startColumn, lastColumn);\r\n\t }\r\n\r\n\t if (placeholder != null) {\r\n\t textLine += placeholder;\r\n\t } else {\r\n\t textLine += doc.getLine(row).substring(lastColumn, column);\r\n\t }\r\n\t }, endRow, endColumn);\r\n\t return textLine;\r\n\t };\r\n\r\n\t this.getDisplayLine = function(row, endColumn, startRow, startColumn) {\r\n\t var foldLine = this.getFoldLine(row);\r\n\r\n\t if (!foldLine) {\r\n\t var line;\r\n\t line = this.doc.getLine(row);\r\n\t return line.substring(startColumn || 0, endColumn || line.length);\r\n\t } else {\r\n\t return this.getFoldDisplayLine(\r\n\t foldLine, row, endColumn, startRow, startColumn);\r\n\t }\r\n\t };\r\n\r\n\t this.$cloneFoldData = function() {\r\n\t var fd = [];\r\n\t fd = this.$foldData.map(function(foldLine) {\r\n\t var folds = foldLine.folds.map(function(fold) {\r\n\t return fold.clone();\r\n\t });\r\n\t return new FoldLine(fd, folds);\r\n\t });\r\n\r\n\t return fd;\r\n\t };\r\n\r\n\t this.toggleFold = function(tryToUnfold) {\r\n\t var selection = this.selection;\r\n\t var range = selection.getRange();\r\n\t var fold;\r\n\t var bracketPos;\r\n\r\n\t if (range.isEmpty()) {\r\n\t var cursor = range.start;\r\n\t fold = this.getFoldAt(cursor.row, cursor.column);\r\n\r\n\t if (fold) {\r\n\t this.expandFold(fold);\r\n\t return;\r\n\t } else if (bracketPos = this.findMatchingBracket(cursor)) {\r\n\t if (range.comparePoint(bracketPos) == 1) {\r\n\t range.end = bracketPos;\r\n\t } else {\r\n\t range.start = bracketPos;\r\n\t range.start.column++;\r\n\t range.end.column--;\r\n\t }\r\n\t } else if (bracketPos = this.findMatchingBracket({row: cursor.row, column: cursor.column + 1})) {\r\n\t if (range.comparePoint(bracketPos) == 1)\r\n\t range.end = bracketPos;\r\n\t else\r\n\t range.start = bracketPos;\r\n\r\n\t range.start.column++;\r\n\t } else {\r\n\t range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\r\n\t }\r\n\t } else {\r\n\t var folds = this.getFoldsInRange(range);\r\n\t if (tryToUnfold && folds.length) {\r\n\t this.expandFolds(folds);\r\n\t return;\r\n\t } else if (folds.length == 1 ) {\r\n\t fold = folds[0];\r\n\t }\r\n\t }\r\n\r\n\t if (!fold)\r\n\t fold = this.getFoldAt(range.start.row, range.start.column);\r\n\r\n\t if (fold && fold.range.toString() == range.toString()) {\r\n\t this.expandFold(fold);\r\n\t return;\r\n\t }\r\n\r\n\t var placeholder = \"...\";\r\n\t if (!range.isMultiLine()) {\r\n\t placeholder = this.getTextRange(range);\r\n\t if (placeholder.length < 4)\r\n\t return;\r\n\t placeholder = placeholder.trim().substring(0, 2) + \"..\";\r\n\t }\r\n\r\n\t this.addFold(placeholder, range);\r\n\t };\r\n\r\n\t this.getCommentFoldRange = function(row, column, dir) {\r\n\t var iterator = new TokenIterator(this, row, column);\r\n\t var token = iterator.getCurrentToken();\r\n\t if (token && /^comment|string/.test(token.type)) {\r\n\t var range = new Range();\r\n\t var re = new RegExp(token.type.replace(/\\..*/, \"\\\\.\"));\r\n\t if (dir != 1) {\r\n\t do {\r\n\t token = iterator.stepBackward();\r\n\t } while (token && re.test(token.type));\r\n\t iterator.stepForward();\r\n\t }\r\n\t \r\n\t range.start.row = iterator.getCurrentTokenRow();\r\n\t range.start.column = iterator.getCurrentTokenColumn() + 2;\r\n\r\n\t iterator = new TokenIterator(this, row, column);\r\n\t \r\n\t if (dir != -1) {\r\n\t do {\r\n\t token = iterator.stepForward();\r\n\t } while (token && re.test(token.type));\r\n\t token = iterator.stepBackward();\r\n\t } else\r\n\t token = iterator.getCurrentToken();\r\n\r\n\t range.end.row = iterator.getCurrentTokenRow();\r\n\t range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2;\r\n\t return range;\r\n\t }\r\n\t };\r\n\r\n\t this.foldAll = function(startRow, endRow, depth) {\r\n\t if (depth == undefined)\r\n\t depth = 100000; // JSON.stringify doesn't hanle Infinity\r\n\t var foldWidgets = this.foldWidgets;\r\n\t if (!foldWidgets)\r\n\t return; // mode doesn't support folding\r\n\t endRow = endRow || this.getLength();\r\n\t startRow = startRow || 0;\r\n\t for (var row = startRow; row < endRow; row++) {\r\n\t if (foldWidgets[row] == null)\r\n\t foldWidgets[row] = this.getFoldWidget(row);\r\n\t if (foldWidgets[row] != \"start\")\r\n\t continue;\r\n\r\n\t var range = this.getFoldWidgetRange(row);\r\n\t if (range && range.isMultiLine()\r\n\t && range.end.row <= endRow\r\n\t && range.start.row >= startRow\r\n\t ) {\r\n\t row = range.end.row;\r\n\t try {\r\n\t var fold = this.addFold(\"...\", range);\r\n\t if (fold)\r\n\t fold.collapseChildren = depth;\r\n\t } catch(e) {}\r\n\t }\r\n\t }\r\n\t };\r\n\t this.$foldStyles = {\r\n\t \"manual\": 1,\r\n\t \"markbegin\": 1,\r\n\t \"markbeginend\": 1\r\n\t };\r\n\t this.$foldStyle = \"markbegin\";\r\n\t this.setFoldStyle = function(style) {\r\n\t if (!this.$foldStyles[style])\r\n\t throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\r\n\t \r\n\t if (this.$foldStyle == style)\r\n\t return;\r\n\r\n\t this.$foldStyle = style;\r\n\t \r\n\t if (style == \"manual\")\r\n\t this.unfold();\r\n\t var mode = this.$foldMode;\r\n\t this.$setFolding(null);\r\n\t this.$setFolding(mode);\r\n\t };\r\n\r\n\t this.$setFolding = function(foldMode) {\r\n\t if (this.$foldMode == foldMode)\r\n\t return;\r\n\t \r\n\t this.$foldMode = foldMode;\r\n\t \r\n\t this.off('change', this.$updateFoldWidgets);\r\n\t this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\r\n\t this._signal(\"changeAnnotation\");\r\n\t \r\n\t if (!foldMode || this.$foldStyle == \"manual\") {\r\n\t this.foldWidgets = null;\r\n\t return;\r\n\t }\r\n\t \r\n\t this.foldWidgets = [];\r\n\t this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\r\n\t this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\r\n\t \r\n\t this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\r\n\t this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\r\n\t this.on('change', this.$updateFoldWidgets);\r\n\t this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\r\n\t };\r\n\r\n\t this.getParentFoldRangeData = function (row, ignoreCurrent) {\r\n\t var fw = this.foldWidgets;\r\n\t if (!fw || (ignoreCurrent && fw[row]))\r\n\t return {};\r\n\r\n\t var i = row - 1, firstRange;\r\n\t while (i >= 0) {\r\n\t var c = fw[i];\r\n\t if (c == null)\r\n\t c = fw[i] = this.getFoldWidget(i);\r\n\r\n\t if (c == \"start\") {\r\n\t var range = this.getFoldWidgetRange(i);\r\n\t if (!firstRange)\r\n\t firstRange = range;\r\n\t if (range && range.end.row >= row)\r\n\t break;\r\n\t }\r\n\t i--;\r\n\t }\r\n\r\n\t return {\r\n\t range: i !== -1 && range,\r\n\t firstRange: firstRange\r\n\t };\r\n\t };\r\n\r\n\t this.onFoldWidgetClick = function(row, e) {\r\n\t e = e.domEvent;\r\n\t var options = {\r\n\t children: e.shiftKey,\r\n\t all: e.ctrlKey || e.metaKey,\r\n\t siblings: e.altKey\r\n\t };\r\n\t \r\n\t var range = this.$toggleFoldWidget(row, options);\r\n\t if (!range) {\r\n\t var el = (e.target || e.srcElement);\r\n\t if (el && /ace_fold-widget/.test(el.className))\r\n\t el.className += \" ace_invalid\";\r\n\t }\r\n\t };\r\n\t \r\n\t this.$toggleFoldWidget = function(row, options) {\r\n\t if (!this.getFoldWidget)\r\n\t return;\r\n\t var type = this.getFoldWidget(row);\r\n\t var line = this.getLine(row);\r\n\r\n\t var dir = type === \"end\" ? -1 : 1;\r\n\t var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\r\n\r\n\t if (fold) {\r\n\t if (options.children || options.all)\r\n\t this.removeFold(fold);\r\n\t else\r\n\t this.expandFold(fold);\r\n\t return;\r\n\t }\r\n\r\n\t var range = this.getFoldWidgetRange(row, true);\r\n\t if (range && !range.isMultiLine()) {\r\n\t fold = this.getFoldAt(range.start.row, range.start.column, 1);\r\n\t if (fold && range.isEqual(fold.range)) {\r\n\t this.removeFold(fold);\r\n\t return;\r\n\t }\r\n\t }\r\n\t \r\n\t if (options.siblings) {\r\n\t var data = this.getParentFoldRangeData(row);\r\n\t if (data.range) {\r\n\t var startRow = data.range.start.row + 1;\r\n\t var endRow = data.range.end.row;\r\n\t }\r\n\t this.foldAll(startRow, endRow, options.all ? 10000 : 0);\r\n\t } else if (options.children) {\r\n\t endRow = range ? range.end.row : this.getLength();\r\n\t this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\r\n\t } else if (range) {\r\n\t if (options.all) \r\n\t range.collapseChildren = 10000;\r\n\t this.addFold(\"...\", range);\r\n\t }\r\n\t \r\n\t return range;\r\n\t };\r\n\t \r\n\t \r\n\t \r\n\t this.toggleFoldWidget = function(toggleParent) {\r\n\t var row = this.selection.getCursor().row;\r\n\t row = this.getRowFoldStart(row);\r\n\t var range = this.$toggleFoldWidget(row, {});\r\n\t \r\n\t if (range)\r\n\t return;\r\n\t var data = this.getParentFoldRangeData(row, true);\r\n\t range = data.range || data.firstRange;\r\n\t \r\n\t if (range) {\r\n\t row = range.start.row;\r\n\t var fold = this.getFoldAt(row, this.getLine(row).length, 1);\r\n\r\n\t if (fold) {\r\n\t this.removeFold(fold);\r\n\t } else {\r\n\t this.addFold(\"...\", range);\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t this.updateFoldWidgets = function(delta) {\r\n\t var firstRow = delta.start.row;\r\n\t var len = delta.end.row - firstRow;\r\n\r\n\t if (len === 0) {\r\n\t this.foldWidgets[firstRow] = null;\r\n\t } else if (delta.action == 'remove') {\r\n\t this.foldWidgets.splice(firstRow, len + 1, null);\r\n\t } else {\r\n\t var args = Array(len + 1);\r\n\t args.unshift(firstRow, 1);\r\n\t this.foldWidgets.splice.apply(this.foldWidgets, args);\r\n\t }\r\n\t };\r\n\t this.tokenizerUpdateFoldWidgets = function(e) {\r\n\t var rows = e.data;\r\n\t if (rows.first != rows.last) {\r\n\t if (this.foldWidgets.length > rows.first)\r\n\t this.foldWidgets.splice(rows.first, this.foldWidgets.length);\r\n\t }\r\n\t };\r\n\t}\r\n\r\n\texports.Folding = Folding;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar TokenIterator = acequire(\"../token_iterator\").TokenIterator;\r\n\tvar Range = acequire(\"../range\").Range;\r\n\r\n\r\n\tfunction BracketMatch() {\r\n\r\n\t this.findMatchingBracket = function(position, chr) {\r\n\t if (position.column == 0) return null;\r\n\r\n\t var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column-1);\r\n\t if (charBeforeCursor == \"\") return null;\r\n\r\n\t var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\r\n\t if (!match)\r\n\t return null;\r\n\r\n\t if (match[1])\r\n\t return this.$findClosingBracket(match[1], position);\r\n\t else\r\n\t return this.$findOpeningBracket(match[2], position);\r\n\t };\r\n\t \r\n\t this.getBracketRange = function(pos) {\r\n\t var line = this.getLine(pos.row);\r\n\t var before = true, range;\r\n\r\n\t var chr = line.charAt(pos.column-1);\r\n\t var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\r\n\t if (!match) {\r\n\t chr = line.charAt(pos.column);\r\n\t pos = {row: pos.row, column: pos.column + 1};\r\n\t match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\r\n\t before = false;\r\n\t }\r\n\t if (!match)\r\n\t return null;\r\n\r\n\t if (match[1]) {\r\n\t var bracketPos = this.$findClosingBracket(match[1], pos);\r\n\t if (!bracketPos)\r\n\t return null;\r\n\t range = Range.fromPoints(pos, bracketPos);\r\n\t if (!before) {\r\n\t range.end.column++;\r\n\t range.start.column--;\r\n\t }\r\n\t range.cursor = range.end;\r\n\t } else {\r\n\t var bracketPos = this.$findOpeningBracket(match[2], pos);\r\n\t if (!bracketPos)\r\n\t return null;\r\n\t range = Range.fromPoints(bracketPos, pos);\r\n\t if (!before) {\r\n\t range.start.column++;\r\n\t range.end.column--;\r\n\t }\r\n\t range.cursor = range.start;\r\n\t }\r\n\t \r\n\t return range;\r\n\t };\r\n\r\n\t this.$brackets = {\r\n\t \")\": \"(\",\r\n\t \"(\": \")\",\r\n\t \"]\": \"[\",\r\n\t \"[\": \"]\",\r\n\t \"{\": \"}\",\r\n\t \"}\": \"{\"\r\n\t };\r\n\r\n\t this.$findOpeningBracket = function(bracket, position, typeRe) {\r\n\t var openBracket = this.$brackets[bracket];\r\n\t var depth = 1;\r\n\r\n\t var iterator = new TokenIterator(this, position.row, position.column);\r\n\t var token = iterator.getCurrentToken();\r\n\t if (!token)\r\n\t token = iterator.stepForward();\r\n\t if (!token)\r\n\t return;\r\n\t \r\n\t if (!typeRe){\r\n\t typeRe = new RegExp(\r\n\t \"(\\\\.?\" +\r\n\t token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\r\n\t .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\r\n\t + \")+\"\r\n\t );\r\n\t }\r\n\t var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\r\n\t var value = token.value;\r\n\t \r\n\t while (true) {\r\n\t \r\n\t while (valueIndex >= 0) {\r\n\t var chr = value.charAt(valueIndex);\r\n\t if (chr == openBracket) {\r\n\t depth -= 1;\r\n\t if (depth == 0) {\r\n\t return {row: iterator.getCurrentTokenRow(),\r\n\t column: valueIndex + iterator.getCurrentTokenColumn()};\r\n\t }\r\n\t }\r\n\t else if (chr == bracket) {\r\n\t depth += 1;\r\n\t }\r\n\t valueIndex -= 1;\r\n\t }\r\n\t do {\r\n\t token = iterator.stepBackward();\r\n\t } while (token && !typeRe.test(token.type));\r\n\r\n\t if (token == null)\r\n\t break;\r\n\t \r\n\t value = token.value;\r\n\t valueIndex = value.length - 1;\r\n\t }\r\n\t \r\n\t return null;\r\n\t };\r\n\r\n\t this.$findClosingBracket = function(bracket, position, typeRe) {\r\n\t var closingBracket = this.$brackets[bracket];\r\n\t var depth = 1;\r\n\r\n\t var iterator = new TokenIterator(this, position.row, position.column);\r\n\t var token = iterator.getCurrentToken();\r\n\t if (!token)\r\n\t token = iterator.stepForward();\r\n\t if (!token)\r\n\t return;\r\n\r\n\t if (!typeRe){\r\n\t typeRe = new RegExp(\r\n\t \"(\\\\.?\" +\r\n\t token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\r\n\t .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\r\n\t + \")+\"\r\n\t );\r\n\t }\r\n\t var valueIndex = position.column - iterator.getCurrentTokenColumn();\r\n\r\n\t while (true) {\r\n\r\n\t var value = token.value;\r\n\t var valueLength = value.length;\r\n\t while (valueIndex < valueLength) {\r\n\t var chr = value.charAt(valueIndex);\r\n\t if (chr == closingBracket) {\r\n\t depth -= 1;\r\n\t if (depth == 0) {\r\n\t return {row: iterator.getCurrentTokenRow(),\r\n\t column: valueIndex + iterator.getCurrentTokenColumn()};\r\n\t }\r\n\t }\r\n\t else if (chr == bracket) {\r\n\t depth += 1;\r\n\t }\r\n\t valueIndex += 1;\r\n\t }\r\n\t do {\r\n\t token = iterator.stepForward();\r\n\t } while (token && !typeRe.test(token.type));\r\n\r\n\t if (token == null)\r\n\t break;\r\n\r\n\t valueIndex = 0;\r\n\t }\r\n\t \r\n\t return null;\r\n\t };\r\n\t}\r\n\texports.BracketMatch = BracketMatch;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar lang = acequire(\"./lib/lang\");\r\n\tvar config = acequire(\"./config\");\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\tvar Selection = acequire(\"./selection\").Selection;\r\n\tvar TextMode = acequire(\"./mode/text\").Mode;\r\n\tvar Range = acequire(\"./range\").Range;\r\n\tvar Document = acequire(\"./document\").Document;\r\n\tvar BackgroundTokenizer = acequire(\"./background_tokenizer\").BackgroundTokenizer;\r\n\tvar SearchHighlight = acequire(\"./search_highlight\").SearchHighlight;\r\n\r\n\tvar EditSession = function(text, mode) {\r\n\t this.$breakpoints = [];\r\n\t this.$decorations = [];\r\n\t this.$frontMarkers = {};\r\n\t this.$backMarkers = {};\r\n\t this.$markerId = 1;\r\n\t this.$undoSelect = true;\r\n\r\n\t this.$foldData = [];\r\n\t this.$foldData.toString = function() {\r\n\t return this.join(\"\\n\");\r\n\t };\r\n\t this.on(\"changeFold\", this.onChangeFold.bind(this));\r\n\t this.$onChange = this.onChange.bind(this);\r\n\r\n\t if (typeof text != \"object\" || !text.getLine)\r\n\t text = new Document(text);\r\n\r\n\t this.setDocument(text);\r\n\t this.selection = new Selection(this);\r\n\r\n\t config.resetOptions(this);\r\n\t this.setMode(mode);\r\n\t config._signal(\"session\", this);\r\n\t};\r\n\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\t this.setDocument = function(doc) {\r\n\t if (this.doc)\r\n\t this.doc.removeListener(\"change\", this.$onChange);\r\n\r\n\t this.doc = doc;\r\n\t doc.on(\"change\", this.$onChange);\r\n\r\n\t if (this.bgTokenizer)\r\n\t this.bgTokenizer.setDocument(this.getDocument());\r\n\r\n\t this.resetCaches();\r\n\t };\r\n\t this.getDocument = function() {\r\n\t return this.doc;\r\n\t };\r\n\t this.$resetRowCache = function(docRow) {\r\n\t if (!docRow) {\r\n\t this.$docRowCache = [];\r\n\t this.$screenRowCache = [];\r\n\t return;\r\n\t }\r\n\t var l = this.$docRowCache.length;\r\n\t var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\r\n\t if (l > i) {\r\n\t this.$docRowCache.splice(i, l);\r\n\t this.$screenRowCache.splice(i, l);\r\n\t }\r\n\t };\r\n\r\n\t this.$getRowCacheIndex = function(cacheArray, val) {\r\n\t var low = 0;\r\n\t var hi = cacheArray.length - 1;\r\n\r\n\t while (low <= hi) {\r\n\t var mid = (low + hi) >> 1;\r\n\t var c = cacheArray[mid];\r\n\r\n\t if (val > c)\r\n\t low = mid + 1;\r\n\t else if (val < c)\r\n\t hi = mid - 1;\r\n\t else\r\n\t return mid;\r\n\t }\r\n\r\n\t return low -1;\r\n\t };\r\n\r\n\t this.resetCaches = function() {\r\n\t this.$modified = true;\r\n\t this.$wrapData = [];\r\n\t this.$rowLengthCache = [];\r\n\t this.$resetRowCache(0);\r\n\t if (this.bgTokenizer)\r\n\t this.bgTokenizer.start(0);\r\n\t };\r\n\r\n\t this.onChangeFold = function(e) {\r\n\t var fold = e.data;\r\n\t this.$resetRowCache(fold.start.row);\r\n\t };\r\n\r\n\t this.onChange = function(delta) {\r\n\t this.$modified = true;\r\n\r\n\t this.$resetRowCache(delta.start.row);\r\n\r\n\t var removedFolds = this.$updateInternalDataOnChange(delta);\r\n\t if (!this.$fromUndo && this.$undoManager && !delta.ignore) {\r\n\t this.$deltasDoc.push(delta);\r\n\t if (removedFolds && removedFolds.length != 0) {\r\n\t this.$deltasFold.push({\r\n\t action: \"removeFolds\",\r\n\t folds: removedFolds\r\n\t });\r\n\t }\r\n\r\n\t this.$informUndoManager.schedule();\r\n\t }\r\n\r\n\t this.bgTokenizer && this.bgTokenizer.$updateOnChange(delta);\r\n\t this._signal(\"change\", delta);\r\n\t };\r\n\t this.setValue = function(text) {\r\n\t this.doc.setValue(text);\r\n\t this.selection.moveTo(0, 0);\r\n\r\n\t this.$resetRowCache(0);\r\n\t this.$deltas = [];\r\n\t this.$deltasDoc = [];\r\n\t this.$deltasFold = [];\r\n\t this.setUndoManager(this.$undoManager);\r\n\t this.getUndoManager().reset();\r\n\t };\r\n\t this.getValue =\r\n\t this.toString = function() {\r\n\t return this.doc.getValue();\r\n\t };\r\n\t this.getSelection = function() {\r\n\t return this.selection;\r\n\t };\r\n\t this.getState = function(row) {\r\n\t return this.bgTokenizer.getState(row);\r\n\t };\r\n\t this.getTokens = function(row) {\r\n\t return this.bgTokenizer.getTokens(row);\r\n\t };\r\n\t this.getTokenAt = function(row, column) {\r\n\t var tokens = this.bgTokenizer.getTokens(row);\r\n\t var token, c = 0;\r\n\t if (column == null) {\r\n\t i = tokens.length - 1;\r\n\t c = this.getLine(row).length;\r\n\t } else {\r\n\t for (var i = 0; i < tokens.length; i++) {\r\n\t c += tokens[i].value.length;\r\n\t if (c >= column)\r\n\t break;\r\n\t }\r\n\t }\r\n\t token = tokens[i];\r\n\t if (!token)\r\n\t return null;\r\n\t token.index = i;\r\n\t token.start = c - token.value.length;\r\n\t return token;\r\n\t };\r\n\t this.setUndoManager = function(undoManager) {\r\n\t this.$undoManager = undoManager;\r\n\t this.$deltas = [];\r\n\t this.$deltasDoc = [];\r\n\t this.$deltasFold = [];\r\n\r\n\t if (this.$informUndoManager)\r\n\t this.$informUndoManager.cancel();\r\n\r\n\t if (undoManager) {\r\n\t var self = this;\r\n\r\n\t this.$syncInformUndoManager = function() {\r\n\t self.$informUndoManager.cancel();\r\n\r\n\t if (self.$deltasFold.length) {\r\n\t self.$deltas.push({\r\n\t group: \"fold\",\r\n\t deltas: self.$deltasFold\r\n\t });\r\n\t self.$deltasFold = [];\r\n\t }\r\n\r\n\t if (self.$deltasDoc.length) {\r\n\t self.$deltas.push({\r\n\t group: \"doc\",\r\n\t deltas: self.$deltasDoc\r\n\t });\r\n\t self.$deltasDoc = [];\r\n\t }\r\n\r\n\t if (self.$deltas.length > 0) {\r\n\t undoManager.execute({\r\n\t action: \"aceupdate\",\r\n\t args: [self.$deltas, self],\r\n\t merge: self.mergeUndoDeltas\r\n\t });\r\n\t }\r\n\t self.mergeUndoDeltas = false;\r\n\t self.$deltas = [];\r\n\t };\r\n\t this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\r\n\t }\r\n\t };\r\n\t this.markUndoGroup = function() {\r\n\t if (this.$syncInformUndoManager)\r\n\t this.$syncInformUndoManager();\r\n\t };\r\n\t \r\n\t this.$defaultUndoManager = {\r\n\t undo: function() {},\r\n\t redo: function() {},\r\n\t reset: function() {}\r\n\t };\r\n\t this.getUndoManager = function() {\r\n\t return this.$undoManager || this.$defaultUndoManager;\r\n\t };\r\n\t this.getTabString = function() {\r\n\t if (this.getUseSoftTabs()) {\r\n\t return lang.stringRepeat(\" \", this.getTabSize());\r\n\t } else {\r\n\t return \"\\t\";\r\n\t }\r\n\t };\r\n\t this.setUseSoftTabs = function(val) {\r\n\t this.setOption(\"useSoftTabs\", val);\r\n\t };\r\n\t this.getUseSoftTabs = function() {\r\n\t return this.$useSoftTabs && !this.$mode.$indentWithTabs;\r\n\t };\r\n\t this.setTabSize = function(tabSize) {\r\n\t this.setOption(\"tabSize\", tabSize);\r\n\t };\r\n\t this.getTabSize = function() {\r\n\t return this.$tabSize;\r\n\t };\r\n\t this.isTabStop = function(position) {\r\n\t return this.$useSoftTabs && (position.column % this.$tabSize === 0);\r\n\t };\r\n\r\n\t this.$overwrite = false;\r\n\t this.setOverwrite = function(overwrite) {\r\n\t this.setOption(\"overwrite\", overwrite);\r\n\t };\r\n\t this.getOverwrite = function() {\r\n\t return this.$overwrite;\r\n\t };\r\n\t this.toggleOverwrite = function() {\r\n\t this.setOverwrite(!this.$overwrite);\r\n\t };\r\n\t this.addGutterDecoration = function(row, className) {\r\n\t if (!this.$decorations[row])\r\n\t this.$decorations[row] = \"\";\r\n\t this.$decorations[row] += \" \" + className;\r\n\t this._signal(\"changeBreakpoint\", {});\r\n\t };\r\n\t this.removeGutterDecoration = function(row, className) {\r\n\t this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\r\n\t this._signal(\"changeBreakpoint\", {});\r\n\t };\r\n\t this.getBreakpoints = function() {\r\n\t return this.$breakpoints;\r\n\t };\r\n\t this.setBreakpoints = function(rows) {\r\n\t this.$breakpoints = [];\r\n\t for (var i=0; i<rows.length; i++) {\r\n\t this.$breakpoints[rows[i]] = \"ace_breakpoint\";\r\n\t }\r\n\t this._signal(\"changeBreakpoint\", {});\r\n\t };\r\n\t this.clearBreakpoints = function() {\r\n\t this.$breakpoints = [];\r\n\t this._signal(\"changeBreakpoint\", {});\r\n\t };\r\n\t this.setBreakpoint = function(row, className) {\r\n\t if (className === undefined)\r\n\t className = \"ace_breakpoint\";\r\n\t if (className)\r\n\t this.$breakpoints[row] = className;\r\n\t else\r\n\t delete this.$breakpoints[row];\r\n\t this._signal(\"changeBreakpoint\", {});\r\n\t };\r\n\t this.clearBreakpoint = function(row) {\r\n\t delete this.$breakpoints[row];\r\n\t this._signal(\"changeBreakpoint\", {});\r\n\t };\r\n\t this.addMarker = function(range, clazz, type, inFront) {\r\n\t var id = this.$markerId++;\r\n\r\n\t var marker = {\r\n\t range : range,\r\n\t type : type || \"line\",\r\n\t renderer: typeof type == \"function\" ? type : null,\r\n\t clazz : clazz,\r\n\t inFront: !!inFront,\r\n\t id: id\r\n\t };\r\n\r\n\t if (inFront) {\r\n\t this.$frontMarkers[id] = marker;\r\n\t this._signal(\"changeFrontMarker\");\r\n\t } else {\r\n\t this.$backMarkers[id] = marker;\r\n\t this._signal(\"changeBackMarker\");\r\n\t }\r\n\r\n\t return id;\r\n\t };\r\n\t this.addDynamicMarker = function(marker, inFront) {\r\n\t if (!marker.update)\r\n\t return;\r\n\t var id = this.$markerId++;\r\n\t marker.id = id;\r\n\t marker.inFront = !!inFront;\r\n\r\n\t if (inFront) {\r\n\t this.$frontMarkers[id] = marker;\r\n\t this._signal(\"changeFrontMarker\");\r\n\t } else {\r\n\t this.$backMarkers[id] = marker;\r\n\t this._signal(\"changeBackMarker\");\r\n\t }\r\n\r\n\t return marker;\r\n\t };\r\n\t this.removeMarker = function(markerId) {\r\n\t var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];\r\n\t if (!marker)\r\n\t return;\r\n\r\n\t var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;\r\n\t if (marker) {\r\n\t delete (markers[markerId]);\r\n\t this._signal(marker.inFront ? \"changeFrontMarker\" : \"changeBackMarker\");\r\n\t }\r\n\t };\r\n\t this.getMarkers = function(inFront) {\r\n\t return inFront ? this.$frontMarkers : this.$backMarkers;\r\n\t };\r\n\r\n\t this.highlight = function(re) {\r\n\t if (!this.$searchHighlight) {\r\n\t var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\r\n\t this.$searchHighlight = this.addDynamicMarker(highlight);\r\n\t }\r\n\t this.$searchHighlight.setRegexp(re);\r\n\t };\r\n\t this.highlightLines = function(startRow, endRow, clazz, inFront) {\r\n\t if (typeof endRow != \"number\") {\r\n\t clazz = endRow;\r\n\t endRow = startRow;\r\n\t }\r\n\t if (!clazz)\r\n\t clazz = \"ace_step\";\r\n\r\n\t var range = new Range(startRow, 0, endRow, Infinity);\r\n\t range.id = this.addMarker(range, clazz, \"fullLine\", inFront);\r\n\t return range;\r\n\t };\r\n\t this.setAnnotations = function(annotations) {\r\n\t this.$annotations = annotations;\r\n\t this._signal(\"changeAnnotation\", {});\r\n\t };\r\n\t this.getAnnotations = function() {\r\n\t return this.$annotations || [];\r\n\t };\r\n\t this.clearAnnotations = function() {\r\n\t this.setAnnotations([]);\r\n\t };\r\n\t this.$detectNewLine = function(text) {\r\n\t var match = text.match(/^.*?(\\r?\\n)/m);\r\n\t if (match) {\r\n\t this.$autoNewLine = match[1];\r\n\t } else {\r\n\t this.$autoNewLine = \"\\n\";\r\n\t }\r\n\t };\r\n\t this.getWordRange = function(row, column) {\r\n\t var line = this.getLine(row);\r\n\r\n\t var inToken = false;\r\n\t if (column > 0)\r\n\t inToken = !!line.charAt(column - 1).match(this.tokenRe);\r\n\r\n\t if (!inToken)\r\n\t inToken = !!line.charAt(column).match(this.tokenRe);\r\n\r\n\t if (inToken)\r\n\t var re = this.tokenRe;\r\n\t else if (/^\\s+$/.test(line.slice(column-1, column+1)))\r\n\t var re = /\\s/;\r\n\t else\r\n\t var re = this.nonTokenRe;\r\n\r\n\t var start = column;\r\n\t if (start > 0) {\r\n\t do {\r\n\t start--;\r\n\t }\r\n\t while (start >= 0 && line.charAt(start).match(re));\r\n\t start++;\r\n\t }\r\n\r\n\t var end = column;\r\n\t while (end < line.length && line.charAt(end).match(re)) {\r\n\t end++;\r\n\t }\r\n\r\n\t return new Range(row, start, row, end);\r\n\t };\r\n\t this.getAWordRange = function(row, column) {\r\n\t var wordRange = this.getWordRange(row, column);\r\n\t var line = this.getLine(wordRange.end.row);\r\n\r\n\t while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\r\n\t wordRange.end.column += 1;\r\n\t }\r\n\t return wordRange;\r\n\t };\r\n\t this.setNewLineMode = function(newLineMode) {\r\n\t this.doc.setNewLineMode(newLineMode);\r\n\t };\r\n\t this.getNewLineMode = function() {\r\n\t return this.doc.getNewLineMode();\r\n\t };\r\n\t this.setUseWorker = function(useWorker) { this.setOption(\"useWorker\", useWorker); };\r\n\t this.getUseWorker = function() { return this.$useWorker; };\r\n\t this.onReloadTokenizer = function(e) {\r\n\t var rows = e.data;\r\n\t this.bgTokenizer.start(rows.first);\r\n\t this._signal(\"tokenizerUpdate\", e);\r\n\t };\r\n\r\n\t this.$modes = {};\r\n\t this.$mode = null;\r\n\t this.$modeId = null;\r\n\t this.setMode = function(mode, cb) {\r\n\t if (mode && typeof mode === \"object\") {\r\n\t if (mode.getTokenizer)\r\n\t return this.$onChangeMode(mode);\r\n\t var options = mode;\r\n\t var path = options.path;\r\n\t } else {\r\n\t path = mode || \"ace/mode/text\";\r\n\t }\r\n\t if (!this.$modes[\"ace/mode/text\"])\r\n\t this.$modes[\"ace/mode/text\"] = new TextMode();\r\n\r\n\t if (this.$modes[path] && !options) {\r\n\t this.$onChangeMode(this.$modes[path]);\r\n\t cb && cb();\r\n\t return;\r\n\t }\r\n\t this.$modeId = path;\r\n\t config.loadModule([\"mode\", path], function(m) {\r\n\t if (this.$modeId !== path)\r\n\t return cb && cb();\r\n\t if (this.$modes[path] && !options) {\r\n\t this.$onChangeMode(this.$modes[path]);\r\n\t } else if (m && m.Mode) {\r\n\t m = new m.Mode(options);\r\n\t if (!options) {\r\n\t this.$modes[path] = m;\r\n\t m.$id = path;\r\n\t }\r\n\t this.$onChangeMode(m);\r\n\t }\r\n\t cb && cb();\r\n\t }.bind(this));\r\n\t if (!this.$mode)\r\n\t this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\r\n\t };\r\n\r\n\t this.$onChangeMode = function(mode, $isPlaceholder) {\r\n\t if (!$isPlaceholder)\r\n\t this.$modeId = mode.$id;\r\n\t if (this.$mode === mode) \r\n\t return;\r\n\r\n\t this.$mode = mode;\r\n\r\n\t this.$stopWorker();\r\n\r\n\t if (this.$useWorker)\r\n\t this.$startWorker();\r\n\r\n\t var tokenizer = mode.getTokenizer();\r\n\r\n\t if(tokenizer.addEventListener !== undefined) {\r\n\t var onReloadTokenizer = this.onReloadTokenizer.bind(this);\r\n\t tokenizer.addEventListener(\"update\", onReloadTokenizer);\r\n\t }\r\n\r\n\t if (!this.bgTokenizer) {\r\n\t this.bgTokenizer = new BackgroundTokenizer(tokenizer);\r\n\t var _self = this;\r\n\t this.bgTokenizer.addEventListener(\"update\", function(e) {\r\n\t _self._signal(\"tokenizerUpdate\", e);\r\n\t });\r\n\t } else {\r\n\t this.bgTokenizer.setTokenizer(tokenizer);\r\n\t }\r\n\r\n\t this.bgTokenizer.setDocument(this.getDocument());\r\n\r\n\t this.tokenRe = mode.tokenRe;\r\n\t this.nonTokenRe = mode.nonTokenRe;\r\n\r\n\t \r\n\t if (!$isPlaceholder) {\r\n\t if (mode.attachToSession)\r\n\t mode.attachToSession(this);\r\n\t this.$options.wrapMethod.set.call(this, this.$wrapMethod);\r\n\t this.$setFolding(mode.foldingRules);\r\n\t this.bgTokenizer.start(0);\r\n\t this._emit(\"changeMode\");\r\n\t }\r\n\t };\r\n\r\n\t this.$stopWorker = function() {\r\n\t if (this.$worker) {\r\n\t this.$worker.terminate();\r\n\t this.$worker = null;\r\n\t }\r\n\t };\r\n\r\n\t this.$startWorker = function() {\r\n\t try {\r\n\t this.$worker = this.$mode.createWorker(this);\r\n\t } catch (e) {\r\n\t config.warn(\"Could not load worker\", e);\r\n\t this.$worker = null;\r\n\t }\r\n\t };\r\n\t this.getMode = function() {\r\n\t return this.$mode;\r\n\t };\r\n\r\n\t this.$scrollTop = 0;\r\n\t this.setScrollTop = function(scrollTop) {\r\n\t if (this.$scrollTop === scrollTop || isNaN(scrollTop))\r\n\t return;\r\n\r\n\t this.$scrollTop = scrollTop;\r\n\t this._signal(\"changeScrollTop\", scrollTop);\r\n\t };\r\n\t this.getScrollTop = function() {\r\n\t return this.$scrollTop;\r\n\t };\r\n\r\n\t this.$scrollLeft = 0;\r\n\t this.setScrollLeft = function(scrollLeft) {\r\n\t if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\r\n\t return;\r\n\r\n\t this.$scrollLeft = scrollLeft;\r\n\t this._signal(\"changeScrollLeft\", scrollLeft);\r\n\t };\r\n\t this.getScrollLeft = function() {\r\n\t return this.$scrollLeft;\r\n\t };\r\n\t this.getScreenWidth = function() {\r\n\t this.$computeWidth();\r\n\t if (this.lineWidgets) \r\n\t return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\r\n\t return this.screenWidth;\r\n\t };\r\n\t \r\n\t this.getLineWidgetMaxWidth = function() {\r\n\t if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth;\r\n\t var width = 0;\r\n\t this.lineWidgets.forEach(function(w) {\r\n\t if (w && w.screenWidth > width)\r\n\t width = w.screenWidth;\r\n\t });\r\n\t return this.lineWidgetWidth = width;\r\n\t };\r\n\r\n\t this.$computeWidth = function(force) {\r\n\t if (this.$modified || force) {\r\n\t this.$modified = false;\r\n\r\n\t if (this.$useWrapMode)\r\n\t return this.screenWidth = this.$wrapLimit;\r\n\r\n\t var lines = this.doc.getAllLines();\r\n\t var cache = this.$rowLengthCache;\r\n\t var longestScreenLine = 0;\r\n\t var foldIndex = 0;\r\n\t var foldLine = this.$foldData[foldIndex];\r\n\t var foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\t var len = lines.length;\r\n\r\n\t for (var i = 0; i < len; i++) {\r\n\t if (i > foldStart) {\r\n\t i = foldLine.end.row + 1;\r\n\t if (i >= len)\r\n\t break;\r\n\t foldLine = this.$foldData[foldIndex++];\r\n\t foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\t }\r\n\r\n\t if (cache[i] == null)\r\n\t cache[i] = this.$getStringScreenWidth(lines[i])[0];\r\n\r\n\t if (cache[i] > longestScreenLine)\r\n\t longestScreenLine = cache[i];\r\n\t }\r\n\t this.screenWidth = longestScreenLine;\r\n\t }\r\n\t };\r\n\t this.getLine = function(row) {\r\n\t return this.doc.getLine(row);\r\n\t };\r\n\t this.getLines = function(firstRow, lastRow) {\r\n\t return this.doc.getLines(firstRow, lastRow);\r\n\t };\r\n\t this.getLength = function() {\r\n\t return this.doc.getLength();\r\n\t };\r\n\t this.getTextRange = function(range) {\r\n\t return this.doc.getTextRange(range || this.selection.getRange());\r\n\t };\r\n\t this.insert = function(position, text) {\r\n\t return this.doc.insert(position, text);\r\n\t };\r\n\t this.remove = function(range) {\r\n\t return this.doc.remove(range);\r\n\t };\r\n\t this.removeFullLines = function(firstRow, lastRow){\r\n\t return this.doc.removeFullLines(firstRow, lastRow);\r\n\t };\r\n\t this.undoChanges = function(deltas, dontSelect) {\r\n\t if (!deltas.length)\r\n\t return;\r\n\r\n\t this.$fromUndo = true;\r\n\t var lastUndoRange = null;\r\n\t for (var i = deltas.length - 1; i != -1; i--) {\r\n\t var delta = deltas[i];\r\n\t if (delta.group == \"doc\") {\r\n\t this.doc.revertDeltas(delta.deltas);\r\n\t lastUndoRange =\r\n\t this.$getUndoSelection(delta.deltas, true, lastUndoRange);\r\n\t } else {\r\n\t delta.deltas.forEach(function(foldDelta) {\r\n\t this.addFolds(foldDelta.folds);\r\n\t }, this);\r\n\t }\r\n\t }\r\n\t this.$fromUndo = false;\r\n\t lastUndoRange &&\r\n\t this.$undoSelect &&\r\n\t !dontSelect &&\r\n\t this.selection.setSelectionRange(lastUndoRange);\r\n\t return lastUndoRange;\r\n\t };\r\n\t this.redoChanges = function(deltas, dontSelect) {\r\n\t if (!deltas.length)\r\n\t return;\r\n\r\n\t this.$fromUndo = true;\r\n\t var lastUndoRange = null;\r\n\t for (var i = 0; i < deltas.length; i++) {\r\n\t var delta = deltas[i];\r\n\t if (delta.group == \"doc\") {\r\n\t this.doc.applyDeltas(delta.deltas);\r\n\t lastUndoRange =\r\n\t this.$getUndoSelection(delta.deltas, false, lastUndoRange);\r\n\t }\r\n\t }\r\n\t this.$fromUndo = false;\r\n\t lastUndoRange &&\r\n\t this.$undoSelect &&\r\n\t !dontSelect &&\r\n\t this.selection.setSelectionRange(lastUndoRange);\r\n\t return lastUndoRange;\r\n\t };\r\n\t this.setUndoSelect = function(enable) {\r\n\t this.$undoSelect = enable;\r\n\t };\r\n\r\n\t this.$getUndoSelection = function(deltas, isUndo, lastUndoRange) {\r\n\t function isInsert(delta) {\r\n\t return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\r\n\t }\r\n\r\n\t var delta = deltas[0];\r\n\t var range, point;\r\n\t var lastDeltaIsInsert = false;\r\n\t if (isInsert(delta)) {\r\n\t range = Range.fromPoints(delta.start, delta.end);\r\n\t lastDeltaIsInsert = true;\r\n\t } else {\r\n\t range = Range.fromPoints(delta.start, delta.start);\r\n\t lastDeltaIsInsert = false;\r\n\t }\r\n\r\n\t for (var i = 1; i < deltas.length; i++) {\r\n\t delta = deltas[i];\r\n\t if (isInsert(delta)) {\r\n\t point = delta.start;\r\n\t if (range.compare(point.row, point.column) == -1) {\r\n\t range.setStart(point);\r\n\t }\r\n\t point = delta.end;\r\n\t if (range.compare(point.row, point.column) == 1) {\r\n\t range.setEnd(point);\r\n\t }\r\n\t lastDeltaIsInsert = true;\r\n\t } else {\r\n\t point = delta.start;\r\n\t if (range.compare(point.row, point.column) == -1) {\r\n\t range = Range.fromPoints(delta.start, delta.start);\r\n\t }\r\n\t lastDeltaIsInsert = false;\r\n\t }\r\n\t }\r\n\t if (lastUndoRange != null) {\r\n\t if (Range.comparePoints(lastUndoRange.start, range.start) === 0) {\r\n\t lastUndoRange.start.column += range.end.column - range.start.column;\r\n\t lastUndoRange.end.column += range.end.column - range.start.column;\r\n\t }\r\n\r\n\t var cmp = lastUndoRange.compareRange(range);\r\n\t if (cmp == 1) {\r\n\t range.setStart(lastUndoRange.start);\r\n\t } else if (cmp == -1) {\r\n\t range.setEnd(lastUndoRange.end);\r\n\t }\r\n\t }\r\n\r\n\t return range;\r\n\t };\r\n\t this.replace = function(range, text) {\r\n\t return this.doc.replace(range, text);\r\n\t };\r\n\t this.moveText = function(fromRange, toPosition, copy) {\r\n\t var text = this.getTextRange(fromRange);\r\n\t var folds = this.getFoldsInRange(fromRange);\r\n\r\n\t var toRange = Range.fromPoints(toPosition, toPosition);\r\n\t if (!copy) {\r\n\t this.remove(fromRange);\r\n\t var rowDiff = fromRange.start.row - fromRange.end.row;\r\n\t var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\r\n\t if (collDiff) {\r\n\t if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)\r\n\t toRange.start.column += collDiff;\r\n\t if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)\r\n\t toRange.end.column += collDiff;\r\n\t }\r\n\t if (rowDiff && toRange.start.row >= fromRange.end.row) {\r\n\t toRange.start.row += rowDiff;\r\n\t toRange.end.row += rowDiff;\r\n\t }\r\n\t }\r\n\r\n\t toRange.end = this.insert(toRange.start, text);\r\n\t if (folds.length) {\r\n\t var oldStart = fromRange.start;\r\n\t var newStart = toRange.start;\r\n\t var rowDiff = newStart.row - oldStart.row;\r\n\t var collDiff = newStart.column - oldStart.column;\r\n\t this.addFolds(folds.map(function(x) {\r\n\t x = x.clone();\r\n\t if (x.start.row == oldStart.row)\r\n\t x.start.column += collDiff;\r\n\t if (x.end.row == oldStart.row)\r\n\t x.end.column += collDiff;\r\n\t x.start.row += rowDiff;\r\n\t x.end.row += rowDiff;\r\n\t return x;\r\n\t }));\r\n\t }\r\n\r\n\t return toRange;\r\n\t };\r\n\t this.indentRows = function(startRow, endRow, indentString) {\r\n\t indentString = indentString.replace(/\\t/g, this.getTabString());\r\n\t for (var row=startRow; row<=endRow; row++)\r\n\t this.doc.insertInLine({row: row, column: 0}, indentString);\r\n\t };\r\n\t this.outdentRows = function (range) {\r\n\t var rowRange = range.collapseRows();\r\n\t var deleteRange = new Range(0, 0, 0, 0);\r\n\t var size = this.getTabSize();\r\n\r\n\t for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\r\n\t var line = this.getLine(i);\r\n\r\n\t deleteRange.start.row = i;\r\n\t deleteRange.end.row = i;\r\n\t for (var j = 0; j < size; ++j)\r\n\t if (line.charAt(j) != ' ')\r\n\t break;\r\n\t if (j < size && line.charAt(j) == '\\t') {\r\n\t deleteRange.start.column = j;\r\n\t deleteRange.end.column = j + 1;\r\n\t } else {\r\n\t deleteRange.start.column = 0;\r\n\t deleteRange.end.column = j;\r\n\t }\r\n\t this.remove(deleteRange);\r\n\t }\r\n\t };\r\n\r\n\t this.$moveLines = function(firstRow, lastRow, dir) {\r\n\t firstRow = this.getRowFoldStart(firstRow);\r\n\t lastRow = this.getRowFoldEnd(lastRow);\r\n\t if (dir < 0) {\r\n\t var row = this.getRowFoldStart(firstRow + dir);\r\n\t if (row < 0) return 0;\r\n\t var diff = row-firstRow;\r\n\t } else if (dir > 0) {\r\n\t var row = this.getRowFoldEnd(lastRow + dir);\r\n\t if (row > this.doc.getLength()-1) return 0;\r\n\t var diff = row-lastRow;\r\n\t } else {\r\n\t firstRow = this.$clipRowToDocument(firstRow);\r\n\t lastRow = this.$clipRowToDocument(lastRow);\r\n\t var diff = lastRow - firstRow + 1;\r\n\t }\r\n\r\n\t var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\r\n\t var folds = this.getFoldsInRange(range).map(function(x){\r\n\t x = x.clone();\r\n\t x.start.row += diff;\r\n\t x.end.row += diff;\r\n\t return x;\r\n\t });\r\n\t \r\n\t var lines = dir == 0\r\n\t ? this.doc.getLines(firstRow, lastRow)\r\n\t : this.doc.removeFullLines(firstRow, lastRow);\r\n\t this.doc.insertFullLines(firstRow+diff, lines);\r\n\t folds.length && this.addFolds(folds);\r\n\t return diff;\r\n\t };\r\n\t this.moveLinesUp = function(firstRow, lastRow) {\r\n\t return this.$moveLines(firstRow, lastRow, -1);\r\n\t };\r\n\t this.moveLinesDown = function(firstRow, lastRow) {\r\n\t return this.$moveLines(firstRow, lastRow, 1);\r\n\t };\r\n\t this.duplicateLines = function(firstRow, lastRow) {\r\n\t return this.$moveLines(firstRow, lastRow, 0);\r\n\t };\r\n\r\n\r\n\t this.$clipRowToDocument = function(row) {\r\n\t return Math.max(0, Math.min(row, this.doc.getLength()-1));\r\n\t };\r\n\r\n\t this.$clipColumnToRow = function(row, column) {\r\n\t if (column < 0)\r\n\t return 0;\r\n\t return Math.min(this.doc.getLine(row).length, column);\r\n\t };\r\n\r\n\r\n\t this.$clipPositionToDocument = function(row, column) {\r\n\t column = Math.max(0, column);\r\n\r\n\t if (row < 0) {\r\n\t row = 0;\r\n\t column = 0;\r\n\t } else {\r\n\t var len = this.doc.getLength();\r\n\t if (row >= len) {\r\n\t row = len - 1;\r\n\t column = this.doc.getLine(len-1).length;\r\n\t } else {\r\n\t column = Math.min(this.doc.getLine(row).length, column);\r\n\t }\r\n\t }\r\n\r\n\t return {\r\n\t row: row,\r\n\t column: column\r\n\t };\r\n\t };\r\n\r\n\t this.$clipRangeToDocument = function(range) {\r\n\t if (range.start.row < 0) {\r\n\t range.start.row = 0;\r\n\t range.start.column = 0;\r\n\t } else {\r\n\t range.start.column = this.$clipColumnToRow(\r\n\t range.start.row,\r\n\t range.start.column\r\n\t );\r\n\t }\r\n\r\n\t var len = this.doc.getLength() - 1;\r\n\t if (range.end.row > len) {\r\n\t range.end.row = len;\r\n\t range.end.column = this.doc.getLine(len).length;\r\n\t } else {\r\n\t range.end.column = this.$clipColumnToRow(\r\n\t range.end.row,\r\n\t range.end.column\r\n\t );\r\n\t }\r\n\t return range;\r\n\t };\r\n\t this.$wrapLimit = 80;\r\n\t this.$useWrapMode = false;\r\n\t this.$wrapLimitRange = {\r\n\t min : null,\r\n\t max : null\r\n\t };\r\n\t this.setUseWrapMode = function(useWrapMode) {\r\n\t if (useWrapMode != this.$useWrapMode) {\r\n\t this.$useWrapMode = useWrapMode;\r\n\t this.$modified = true;\r\n\t this.$resetRowCache(0);\r\n\t if (useWrapMode) {\r\n\t var len = this.getLength();\r\n\t this.$wrapData = Array(len);\r\n\t this.$updateWrapData(0, len - 1);\r\n\t }\r\n\r\n\t this._signal(\"changeWrapMode\");\r\n\t }\r\n\t };\r\n\t this.getUseWrapMode = function() {\r\n\t return this.$useWrapMode;\r\n\t };\r\n\t this.setWrapLimitRange = function(min, max) {\r\n\t if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\r\n\t this.$wrapLimitRange = { min: min, max: max };\r\n\t this.$modified = true;\r\n\t if (this.$useWrapMode)\r\n\t this._signal(\"changeWrapMode\");\r\n\t }\r\n\t };\r\n\t this.adjustWrapLimit = function(desiredLimit, $printMargin) {\r\n\t var limits = this.$wrapLimitRange;\r\n\t if (limits.max < 0)\r\n\t limits = {min: $printMargin, max: $printMargin};\r\n\t var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\r\n\t if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\r\n\t this.$wrapLimit = wrapLimit;\r\n\t this.$modified = true;\r\n\t if (this.$useWrapMode) {\r\n\t this.$updateWrapData(0, this.getLength() - 1);\r\n\t this.$resetRowCache(0);\r\n\t this._signal(\"changeWrapLimit\");\r\n\t }\r\n\t return true;\r\n\t }\r\n\t return false;\r\n\t };\r\n\r\n\t this.$constrainWrapLimit = function(wrapLimit, min, max) {\r\n\t if (min)\r\n\t wrapLimit = Math.max(min, wrapLimit);\r\n\r\n\t if (max)\r\n\t wrapLimit = Math.min(max, wrapLimit);\r\n\r\n\t return wrapLimit;\r\n\t };\r\n\t this.getWrapLimit = function() {\r\n\t return this.$wrapLimit;\r\n\t };\r\n\t this.setWrapLimit = function (limit) {\r\n\t this.setWrapLimitRange(limit, limit);\r\n\t };\r\n\t this.getWrapLimitRange = function() {\r\n\t return {\r\n\t min : this.$wrapLimitRange.min,\r\n\t max : this.$wrapLimitRange.max\r\n\t };\r\n\t };\r\n\r\n\t this.$updateInternalDataOnChange = function(delta) {\r\n\t var useWrapMode = this.$useWrapMode;\r\n\t var action = delta.action;\r\n\t var start = delta.start;\r\n\t var end = delta.end;\r\n\t var firstRow = start.row;\r\n\t var lastRow = end.row;\r\n\t var len = lastRow - firstRow;\r\n\t var removedFolds = null;\r\n\t \r\n\t this.$updating = true;\r\n\t if (len != 0) {\r\n\t if (action === \"remove\") {\r\n\t this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\r\n\r\n\t var foldLines = this.$foldData;\r\n\t removedFolds = this.getFoldsInRange(delta);\r\n\t this.removeFolds(removedFolds);\r\n\r\n\t var foldLine = this.getFoldLine(end.row);\r\n\t var idx = 0;\r\n\t if (foldLine) {\r\n\t foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\r\n\t foldLine.shiftRow(-len);\r\n\r\n\t var foldLineBefore = this.getFoldLine(firstRow);\r\n\t if (foldLineBefore && foldLineBefore !== foldLine) {\r\n\t foldLineBefore.merge(foldLine);\r\n\t foldLine = foldLineBefore;\r\n\t }\r\n\t idx = foldLines.indexOf(foldLine) + 1;\r\n\t }\r\n\r\n\t for (idx; idx < foldLines.length; idx++) {\r\n\t var foldLine = foldLines[idx];\r\n\t if (foldLine.start.row >= end.row) {\r\n\t foldLine.shiftRow(-len);\r\n\t }\r\n\t }\r\n\r\n\t lastRow = firstRow;\r\n\t } else {\r\n\t var args = Array(len);\r\n\t args.unshift(firstRow, 0);\r\n\t var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache\r\n\t arr.splice.apply(arr, args);\r\n\t var foldLines = this.$foldData;\r\n\t var foldLine = this.getFoldLine(firstRow);\r\n\t var idx = 0;\r\n\t if (foldLine) {\r\n\t var cmp = foldLine.range.compareInside(start.row, start.column);\r\n\t if (cmp == 0) {\r\n\t foldLine = foldLine.split(start.row, start.column);\r\n\t if (foldLine) {\r\n\t foldLine.shiftRow(len);\r\n\t foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\r\n\t }\r\n\t } else\r\n\t if (cmp == -1) {\r\n\t foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\r\n\t foldLine.shiftRow(len);\r\n\t }\r\n\t idx = foldLines.indexOf(foldLine) + 1;\r\n\t }\r\n\r\n\t for (idx; idx < foldLines.length; idx++) {\r\n\t var foldLine = foldLines[idx];\r\n\t if (foldLine.start.row >= firstRow) {\r\n\t foldLine.shiftRow(len);\r\n\t }\r\n\t }\r\n\t }\r\n\t } else {\r\n\t len = Math.abs(delta.start.column - delta.end.column);\r\n\t if (action === \"remove\") {\r\n\t removedFolds = this.getFoldsInRange(delta);\r\n\t this.removeFolds(removedFolds);\r\n\r\n\t len = -len;\r\n\t }\r\n\t var foldLine = this.getFoldLine(firstRow);\r\n\t if (foldLine) {\r\n\t foldLine.addRemoveChars(firstRow, start.column, len);\r\n\t }\r\n\t }\r\n\r\n\t if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\r\n\t console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\r\n\t }\r\n\t this.$updating = false;\r\n\r\n\t if (useWrapMode)\r\n\t this.$updateWrapData(firstRow, lastRow);\r\n\t else\r\n\t this.$updateRowLengthCache(firstRow, lastRow);\r\n\r\n\t return removedFolds;\r\n\t };\r\n\r\n\t this.$updateRowLengthCache = function(firstRow, lastRow, b) {\r\n\t this.$rowLengthCache[firstRow] = null;\r\n\t this.$rowLengthCache[lastRow] = null;\r\n\t };\r\n\r\n\t this.$updateWrapData = function(firstRow, lastRow) {\r\n\t var lines = this.doc.getAllLines();\r\n\t var tabSize = this.getTabSize();\r\n\t var wrapData = this.$wrapData;\r\n\t var wrapLimit = this.$wrapLimit;\r\n\t var tokens;\r\n\t var foldLine;\r\n\r\n\t var row = firstRow;\r\n\t lastRow = Math.min(lastRow, lines.length - 1);\r\n\t while (row <= lastRow) {\r\n\t foldLine = this.getFoldLine(row, foldLine);\r\n\t if (!foldLine) {\r\n\t tokens = this.$getDisplayTokens(lines[row]);\r\n\t wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\r\n\t row ++;\r\n\t } else {\r\n\t tokens = [];\r\n\t foldLine.walk(function(placeholder, row, column, lastColumn) {\r\n\t var walkTokens;\r\n\t if (placeholder != null) {\r\n\t walkTokens = this.$getDisplayTokens(\r\n\t placeholder, tokens.length);\r\n\t walkTokens[0] = PLACEHOLDER_START;\r\n\t for (var i = 1; i < walkTokens.length; i++) {\r\n\t walkTokens[i] = PLACEHOLDER_BODY;\r\n\t }\r\n\t } else {\r\n\t walkTokens = this.$getDisplayTokens(\r\n\t lines[row].substring(lastColumn, column),\r\n\t tokens.length);\r\n\t }\r\n\t tokens = tokens.concat(walkTokens);\r\n\t }.bind(this),\r\n\t foldLine.end.row,\r\n\t lines[foldLine.end.row].length + 1\r\n\t );\r\n\r\n\t wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\r\n\t row = foldLine.end.row + 1;\r\n\t }\r\n\t }\r\n\t };\r\n\t var CHAR = 1,\r\n\t CHAR_EXT = 2,\r\n\t PLACEHOLDER_START = 3,\r\n\t PLACEHOLDER_BODY = 4,\r\n\t PUNCTUATION = 9,\r\n\t SPACE = 10,\r\n\t TAB = 11,\r\n\t TAB_SPACE = 12;\r\n\r\n\r\n\t this.$computeWrapSplits = function(tokens, wrapLimit, tabSize) {\r\n\t if (tokens.length == 0) {\r\n\t return [];\r\n\t }\r\n\r\n\t var splits = [];\r\n\t var displayLength = tokens.length;\r\n\t var lastSplit = 0, lastDocSplit = 0;\r\n\r\n\t var isCode = this.$wrapAsCode;\r\n\r\n\t var indentedSoftWrap = this.$indentedSoftWrap;\r\n\t var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\r\n\t || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\r\n\r\n\t function getWrapIndent() {\r\n\t var indentation = 0;\r\n\t if (maxIndent === 0)\r\n\t return indentation;\r\n\t if (indentedSoftWrap) {\r\n\t for (var i = 0; i < tokens.length; i++) {\r\n\t var token = tokens[i];\r\n\t if (token == SPACE)\r\n\t indentation += 1;\r\n\t else if (token == TAB)\r\n\t indentation += tabSize;\r\n\t else if (token == TAB_SPACE)\r\n\t continue;\r\n\t else\r\n\t break;\r\n\t }\r\n\t }\r\n\t if (isCode && indentedSoftWrap !== false)\r\n\t indentation += tabSize;\r\n\t return Math.min(indentation, maxIndent);\r\n\t }\r\n\t function addSplit(screenPos) {\r\n\t var displayed = tokens.slice(lastSplit, screenPos);\r\n\t var len = displayed.length;\r\n\t displayed.join(\"\")\r\n\t .replace(/12/g, function() {\r\n\t len -= 1;\r\n\t })\r\n\t .replace(/2/g, function() {\r\n\t len -= 1;\r\n\t });\r\n\r\n\t if (!splits.length) {\r\n\t indent = getWrapIndent();\r\n\t splits.indent = indent;\r\n\t }\r\n\t lastDocSplit += len;\r\n\t splits.push(lastDocSplit);\r\n\t lastSplit = screenPos;\r\n\t }\r\n\t var indent = 0;\r\n\t while (displayLength - lastSplit > wrapLimit - indent) {\r\n\t var split = lastSplit + wrapLimit - indent;\r\n\t if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\r\n\t addSplit(split);\r\n\t continue;\r\n\t }\r\n\t if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\r\n\t for (split; split != lastSplit - 1; split--) {\r\n\t if (tokens[split] == PLACEHOLDER_START) {\r\n\t break;\r\n\t }\r\n\t }\r\n\t if (split > lastSplit) {\r\n\t addSplit(split);\r\n\t continue;\r\n\t }\r\n\t split = lastSplit + wrapLimit;\r\n\t for (split; split < tokens.length; split++) {\r\n\t if (tokens[split] != PLACEHOLDER_BODY) {\r\n\t break;\r\n\t }\r\n\t }\r\n\t if (split == tokens.length) {\r\n\t break; // Breaks the while-loop.\r\n\t }\r\n\t addSplit(split);\r\n\t continue;\r\n\t }\r\n\t var minSplit = Math.max(split - (wrapLimit -(wrapLimit>>2)), lastSplit - 1);\r\n\t while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\r\n\t split --;\r\n\t }\r\n\t if (isCode) {\r\n\t while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\r\n\t split --;\r\n\t }\r\n\t while (split > minSplit && tokens[split] == PUNCTUATION) {\r\n\t split --;\r\n\t }\r\n\t } else {\r\n\t while (split > minSplit && tokens[split] < SPACE) {\r\n\t split --;\r\n\t }\r\n\t }\r\n\t if (split > minSplit) {\r\n\t addSplit(++split);\r\n\t continue;\r\n\t }\r\n\t split = lastSplit + wrapLimit;\r\n\t if (tokens[split] == CHAR_EXT)\r\n\t split--;\r\n\t addSplit(split - indent);\r\n\t }\r\n\t return splits;\r\n\t };\r\n\t this.$getDisplayTokens = function(str, offset) {\r\n\t var arr = [];\r\n\t var tabSize;\r\n\t offset = offset || 0;\r\n\r\n\t for (var i = 0; i < str.length; i++) {\r\n\t var c = str.charCodeAt(i);\r\n\t if (c == 9) {\r\n\t tabSize = this.getScreenTabSize(arr.length + offset);\r\n\t arr.push(TAB);\r\n\t for (var n = 1; n < tabSize; n++) {\r\n\t arr.push(TAB_SPACE);\r\n\t }\r\n\t }\r\n\t else if (c == 32) {\r\n\t arr.push(SPACE);\r\n\t } else if((c > 39 && c < 48) || (c > 57 && c < 64)) {\r\n\t arr.push(PUNCTUATION);\r\n\t }\r\n\t else if (c >= 0x1100 && isFullWidth(c)) {\r\n\t arr.push(CHAR, CHAR_EXT);\r\n\t } else {\r\n\t arr.push(CHAR);\r\n\t }\r\n\t }\r\n\t return arr;\r\n\t };\r\n\t this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\r\n\t if (maxScreenColumn == 0)\r\n\t return [0, 0];\r\n\t if (maxScreenColumn == null)\r\n\t maxScreenColumn = Infinity;\r\n\t screenColumn = screenColumn || 0;\r\n\r\n\t var c, column;\r\n\t for (column = 0; column < str.length; column++) {\r\n\t c = str.charCodeAt(column);\r\n\t if (c == 9) {\r\n\t screenColumn += this.getScreenTabSize(screenColumn);\r\n\t }\r\n\t else if (c >= 0x1100 && isFullWidth(c)) {\r\n\t screenColumn += 2;\r\n\t } else {\r\n\t screenColumn += 1;\r\n\t }\r\n\t if (screenColumn > maxScreenColumn) {\r\n\t break;\r\n\t }\r\n\t }\r\n\r\n\t return [screenColumn, column];\r\n\t };\r\n\r\n\t this.lineWidgets = null;\r\n\t this.getRowLength = function(row) {\r\n\t if (this.lineWidgets)\r\n\t var h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\r\n\t else \r\n\t h = 0\r\n\t if (!this.$useWrapMode || !this.$wrapData[row]) {\r\n\t return 1 + h;\r\n\t } else {\r\n\t return this.$wrapData[row].length + 1 + h;\r\n\t }\r\n\t };\r\n\t this.getRowLineCount = function(row) {\r\n\t if (!this.$useWrapMode || !this.$wrapData[row]) {\r\n\t return 1;\r\n\t } else {\r\n\t return this.$wrapData[row].length + 1;\r\n\t }\r\n\t };\r\n\r\n\t this.getRowWrapIndent = function(screenRow) {\r\n\t if (this.$useWrapMode) {\r\n\t var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\r\n\t var splits = this.$wrapData[pos.row];\r\n\t return splits.length && splits[0] < pos.column ? splits.indent : 0;\r\n\t } else {\r\n\t return 0;\r\n\t }\r\n\t }\r\n\t this.getScreenLastRowColumn = function(screenRow) {\r\n\t var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\r\n\t return this.documentToScreenColumn(pos.row, pos.column);\r\n\t };\r\n\t this.getDocumentLastRowColumn = function(docRow, docColumn) {\r\n\t var screenRow = this.documentToScreenRow(docRow, docColumn);\r\n\t return this.getScreenLastRowColumn(screenRow);\r\n\t };\r\n\t this.getDocumentLastRowColumnPosition = function(docRow, docColumn) {\r\n\t var screenRow = this.documentToScreenRow(docRow, docColumn);\r\n\t return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\r\n\t };\r\n\t this.getRowSplitData = function(row) {\r\n\t if (!this.$useWrapMode) {\r\n\t return undefined;\r\n\t } else {\r\n\t return this.$wrapData[row];\r\n\t }\r\n\t };\r\n\t this.getScreenTabSize = function(screenColumn) {\r\n\t return this.$tabSize - screenColumn % this.$tabSize;\r\n\t };\r\n\r\n\r\n\t this.screenToDocumentRow = function(screenRow, screenColumn) {\r\n\t return this.screenToDocumentPosition(screenRow, screenColumn).row;\r\n\t };\r\n\r\n\r\n\t this.screenToDocumentColumn = function(screenRow, screenColumn) {\r\n\t return this.screenToDocumentPosition(screenRow, screenColumn).column;\r\n\t };\r\n\t this.screenToDocumentPosition = function(screenRow, screenColumn) {\r\n\t if (screenRow < 0)\r\n\t return {row: 0, column: 0};\r\n\r\n\t var line;\r\n\t var docRow = 0;\r\n\t var docColumn = 0;\r\n\t var column;\r\n\t var row = 0;\r\n\t var rowLength = 0;\r\n\r\n\t var rowCache = this.$screenRowCache;\r\n\t var i = this.$getRowCacheIndex(rowCache, screenRow);\r\n\t var l = rowCache.length;\r\n\t if (l && i >= 0) {\r\n\t var row = rowCache[i];\r\n\t var docRow = this.$docRowCache[i];\r\n\t var doCache = screenRow > rowCache[l - 1];\r\n\t } else {\r\n\t var doCache = !l;\r\n\t }\r\n\r\n\t var maxRow = this.getLength() - 1;\r\n\t var foldLine = this.getNextFoldLine(docRow);\r\n\t var foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\r\n\t while (row <= screenRow) {\r\n\t rowLength = this.getRowLength(docRow);\r\n\t if (row + rowLength > screenRow || docRow >= maxRow) {\r\n\t break;\r\n\t } else {\r\n\t row += rowLength;\r\n\t docRow++;\r\n\t if (docRow > foldStart) {\r\n\t docRow = foldLine.end.row+1;\r\n\t foldLine = this.getNextFoldLine(docRow, foldLine);\r\n\t foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\t }\r\n\t }\r\n\r\n\t if (doCache) {\r\n\t this.$docRowCache.push(docRow);\r\n\t this.$screenRowCache.push(row);\r\n\t }\r\n\t }\r\n\r\n\t if (foldLine && foldLine.start.row <= docRow) {\r\n\t line = this.getFoldDisplayLine(foldLine);\r\n\t docRow = foldLine.start.row;\r\n\t } else if (row + rowLength <= screenRow || docRow > maxRow) {\r\n\t return {\r\n\t row: maxRow,\r\n\t column: this.getLine(maxRow).length\r\n\t };\r\n\t } else {\r\n\t line = this.getLine(docRow);\r\n\t foldLine = null;\r\n\t }\r\n\t var wrapIndent = 0;\r\n\t if (this.$useWrapMode) {\r\n\t var splits = this.$wrapData[docRow];\r\n\t if (splits) {\r\n\t var splitIndex = Math.floor(screenRow - row);\r\n\t column = splits[splitIndex];\r\n\t if(splitIndex > 0 && splits.length) {\r\n\t wrapIndent = splits.indent;\r\n\t docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\r\n\t line = line.substring(docColumn);\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\r\n\t if (this.$useWrapMode && docColumn >= column)\r\n\t docColumn = column - 1;\r\n\r\n\t if (foldLine)\r\n\t return foldLine.idxToPosition(docColumn);\r\n\r\n\t return {row: docRow, column: docColumn};\r\n\t };\r\n\t this.documentToScreenPosition = function(docRow, docColumn) {\r\n\t if (typeof docColumn === \"undefined\")\r\n\t var pos = this.$clipPositionToDocument(docRow.row, docRow.column);\r\n\t else\r\n\t pos = this.$clipPositionToDocument(docRow, docColumn);\r\n\r\n\t docRow = pos.row;\r\n\t docColumn = pos.column;\r\n\r\n\t var screenRow = 0;\r\n\t var foldStartRow = null;\r\n\t var fold = null;\r\n\t fold = this.getFoldAt(docRow, docColumn, 1);\r\n\t if (fold) {\r\n\t docRow = fold.start.row;\r\n\t docColumn = fold.start.column;\r\n\t }\r\n\r\n\t var rowEnd, row = 0;\r\n\r\n\r\n\t var rowCache = this.$docRowCache;\r\n\t var i = this.$getRowCacheIndex(rowCache, docRow);\r\n\t var l = rowCache.length;\r\n\t if (l && i >= 0) {\r\n\t var row = rowCache[i];\r\n\t var screenRow = this.$screenRowCache[i];\r\n\t var doCache = docRow > rowCache[l - 1];\r\n\t } else {\r\n\t var doCache = !l;\r\n\t }\r\n\r\n\t var foldLine = this.getNextFoldLine(row);\r\n\t var foldStart = foldLine ?foldLine.start.row :Infinity;\r\n\r\n\t while (row < docRow) {\r\n\t if (row >= foldStart) {\r\n\t rowEnd = foldLine.end.row + 1;\r\n\t if (rowEnd > docRow)\r\n\t break;\r\n\t foldLine = this.getNextFoldLine(rowEnd, foldLine);\r\n\t foldStart = foldLine ?foldLine.start.row :Infinity;\r\n\t }\r\n\t else {\r\n\t rowEnd = row + 1;\r\n\t }\r\n\r\n\t screenRow += this.getRowLength(row);\r\n\t row = rowEnd;\r\n\r\n\t if (doCache) {\r\n\t this.$docRowCache.push(row);\r\n\t this.$screenRowCache.push(screenRow);\r\n\t }\r\n\t }\r\n\t var textLine = \"\";\r\n\t if (foldLine && row >= foldStart) {\r\n\t textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\r\n\t foldStartRow = foldLine.start.row;\r\n\t } else {\r\n\t textLine = this.getLine(docRow).substring(0, docColumn);\r\n\t foldStartRow = docRow;\r\n\t }\r\n\t var wrapIndent = 0;\r\n\t if (this.$useWrapMode) {\r\n\t var wrapRow = this.$wrapData[foldStartRow];\r\n\t if (wrapRow) {\r\n\t var screenRowOffset = 0;\r\n\t while (textLine.length >= wrapRow[screenRowOffset]) {\r\n\t screenRow ++;\r\n\t screenRowOffset++;\r\n\t }\r\n\t textLine = textLine.substring(\r\n\t wrapRow[screenRowOffset - 1] || 0, textLine.length\r\n\t );\r\n\t wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\r\n\t }\r\n\t }\r\n\r\n\t return {\r\n\t row: screenRow,\r\n\t column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\r\n\t };\r\n\t };\r\n\t this.documentToScreenColumn = function(row, docColumn) {\r\n\t return this.documentToScreenPosition(row, docColumn).column;\r\n\t };\r\n\t this.documentToScreenRow = function(docRow, docColumn) {\r\n\t return this.documentToScreenPosition(docRow, docColumn).row;\r\n\t };\r\n\t this.getScreenLength = function() {\r\n\t var screenRows = 0;\r\n\t var fold = null;\r\n\t if (!this.$useWrapMode) {\r\n\t screenRows = this.getLength();\r\n\t var foldData = this.$foldData;\r\n\t for (var i = 0; i < foldData.length; i++) {\r\n\t fold = foldData[i];\r\n\t screenRows -= fold.end.row - fold.start.row;\r\n\t }\r\n\t } else {\r\n\t var lastRow = this.$wrapData.length;\r\n\t var row = 0, i = 0;\r\n\t var fold = this.$foldData[i++];\r\n\t var foldStart = fold ? fold.start.row :Infinity;\r\n\r\n\t while (row < lastRow) {\r\n\t var splits = this.$wrapData[row];\r\n\t screenRows += splits ? splits.length + 1 : 1;\r\n\t row ++;\r\n\t if (row > foldStart) {\r\n\t row = fold.end.row+1;\r\n\t fold = this.$foldData[i++];\r\n\t foldStart = fold ?fold.start.row :Infinity;\r\n\t }\r\n\t }\r\n\t }\r\n\t if (this.lineWidgets)\r\n\t screenRows += this.$getWidgetScreenLength();\r\n\r\n\t return screenRows;\r\n\t };\r\n\t this.$setFontMetrics = function(fm) {\r\n\t if (!this.$enableVarChar) return;\r\n\t this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\r\n\t if (maxScreenColumn === 0)\r\n\t return [0, 0];\r\n\t if (!maxScreenColumn)\r\n\t maxScreenColumn = Infinity;\r\n\t screenColumn = screenColumn || 0;\r\n\t \r\n\t var c, column;\r\n\t for (column = 0; column < str.length; column++) {\r\n\t c = str.charAt(column);\r\n\t if (c === \"\\t\") {\r\n\t screenColumn += this.getScreenTabSize(screenColumn);\r\n\t } else {\r\n\t screenColumn += fm.getCharacterWidth(c);\r\n\t }\r\n\t if (screenColumn > maxScreenColumn) {\r\n\t break;\r\n\t }\r\n\t }\r\n\t \r\n\t return [screenColumn, column];\r\n\t };\r\n\t };\r\n\t \r\n\t this.destroy = function() {\r\n\t if (this.bgTokenizer) {\r\n\t this.bgTokenizer.setDocument(null);\r\n\t this.bgTokenizer = null;\r\n\t }\r\n\t this.$stopWorker();\r\n\t };\r\n\t function isFullWidth(c) {\r\n\t if (c < 0x1100)\r\n\t return false;\r\n\t return c >= 0x1100 && c <= 0x115F ||\r\n\t c >= 0x11A3 && c <= 0x11A7 ||\r\n\t c >= 0x11FA && c <= 0x11FF ||\r\n\t c >= 0x2329 && c <= 0x232A ||\r\n\t c >= 0x2E80 && c <= 0x2E99 ||\r\n\t c >= 0x2E9B && c <= 0x2EF3 ||\r\n\t c >= 0x2F00 && c <= 0x2FD5 ||\r\n\t c >= 0x2FF0 && c <= 0x2FFB ||\r\n\t c >= 0x3000 && c <= 0x303E ||\r\n\t c >= 0x3041 && c <= 0x3096 ||\r\n\t c >= 0x3099 && c <= 0x30FF ||\r\n\t c >= 0x3105 && c <= 0x312D ||\r\n\t c >= 0x3131 && c <= 0x318E ||\r\n\t c >= 0x3190 && c <= 0x31BA ||\r\n\t c >= 0x31C0 && c <= 0x31E3 ||\r\n\t c >= 0x31F0 && c <= 0x321E ||\r\n\t c >= 0x3220 && c <= 0x3247 ||\r\n\t c >= 0x3250 && c <= 0x32FE ||\r\n\t c >= 0x3300 && c <= 0x4DBF ||\r\n\t c >= 0x4E00 && c <= 0xA48C ||\r\n\t c >= 0xA490 && c <= 0xA4C6 ||\r\n\t c >= 0xA960 && c <= 0xA97C ||\r\n\t c >= 0xAC00 && c <= 0xD7A3 ||\r\n\t c >= 0xD7B0 && c <= 0xD7C6 ||\r\n\t c >= 0xD7CB && c <= 0xD7FB ||\r\n\t c >= 0xF900 && c <= 0xFAFF ||\r\n\t c >= 0xFE10 && c <= 0xFE19 ||\r\n\t c >= 0xFE30 && c <= 0xFE52 ||\r\n\t c >= 0xFE54 && c <= 0xFE66 ||\r\n\t c >= 0xFE68 && c <= 0xFE6B ||\r\n\t c >= 0xFF01 && c <= 0xFF60 ||\r\n\t c >= 0xFFE0 && c <= 0xFFE6;\r\n\t }\r\n\r\n\t}).call(EditSession.prototype);\r\n\r\n\tacequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\r\n\tacequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\r\n\r\n\r\n\tconfig.defineOptions(EditSession.prototype, \"session\", {\r\n\t wrap: {\r\n\t set: function(value) {\r\n\t if (!value || value == \"off\")\r\n\t value = false;\r\n\t else if (value == \"free\")\r\n\t value = true;\r\n\t else if (value == \"printMargin\")\r\n\t value = -1;\r\n\t else if (typeof value == \"string\")\r\n\t value = parseInt(value, 10) || false;\r\n\r\n\t if (this.$wrap == value)\r\n\t return;\r\n\t this.$wrap = value;\r\n\t if (!value) {\r\n\t this.setUseWrapMode(false);\r\n\t } else {\r\n\t var col = typeof value == \"number\" ? value : null;\r\n\t this.setWrapLimitRange(col, col);\r\n\t this.setUseWrapMode(true);\r\n\t }\r\n\t },\r\n\t get: function() {\r\n\t if (this.getUseWrapMode()) {\r\n\t if (this.$wrap == -1)\r\n\t return \"printMargin\";\r\n\t if (!this.getWrapLimitRange().min)\r\n\t return \"free\";\r\n\t return this.$wrap;\r\n\t }\r\n\t return \"off\";\r\n\t },\r\n\t handlesSet: true\r\n\t }, \r\n\t wrapMethod: {\r\n\t set: function(val) {\r\n\t val = val == \"auto\"\r\n\t ? this.$mode.type != \"text\"\r\n\t : val != \"text\";\r\n\t if (val != this.$wrapAsCode) {\r\n\t this.$wrapAsCode = val;\r\n\t if (this.$useWrapMode) {\r\n\t this.$modified = true;\r\n\t this.$resetRowCache(0);\r\n\t this.$updateWrapData(0, this.getLength() - 1);\r\n\t }\r\n\t }\r\n\t },\r\n\t initialValue: \"auto\"\r\n\t },\r\n\t indentedSoftWrap: { initialValue: true },\r\n\t firstLineNumber: {\r\n\t set: function() {this._signal(\"changeBreakpoint\");},\r\n\t initialValue: 1\r\n\t },\r\n\t useWorker: {\r\n\t set: function(useWorker) {\r\n\t this.$useWorker = useWorker;\r\n\r\n\t this.$stopWorker();\r\n\t if (useWorker)\r\n\t this.$startWorker();\r\n\t },\r\n\t initialValue: true\r\n\t },\r\n\t useSoftTabs: {initialValue: true},\r\n\t tabSize: {\r\n\t set: function(tabSize) {\r\n\t if (isNaN(tabSize) || this.$tabSize === tabSize) return;\r\n\r\n\t this.$modified = true;\r\n\t this.$rowLengthCache = [];\r\n\t this.$tabSize = tabSize;\r\n\t this._signal(\"changeTabSize\");\r\n\t },\r\n\t initialValue: 4,\r\n\t handlesSet: true\r\n\t },\r\n\t overwrite: {\r\n\t set: function(val) {this._signal(\"changeOverwrite\");},\r\n\t initialValue: false\r\n\t },\r\n\t newLineMode: {\r\n\t set: function(val) {this.doc.setNewLineMode(val)},\r\n\t get: function() {return this.doc.getNewLineMode()},\r\n\t handlesSet: true\r\n\t },\r\n\t mode: {\r\n\t set: function(val) { this.setMode(val) },\r\n\t get: function() { return this.$modeId }\r\n\t }\r\n\t});\r\n\r\n\texports.EditSession = EditSession;\r\n\t});\r\n\r\n\tace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar lang = acequire(\"./lib/lang\");\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar Range = acequire(\"./range\").Range;\r\n\r\n\tvar Search = function() {\r\n\t this.$options = {};\r\n\t};\r\n\r\n\t(function() {\r\n\t this.set = function(options) {\r\n\t oop.mixin(this.$options, options);\r\n\t return this;\r\n\t };\r\n\t this.getOptions = function() {\r\n\t return lang.copyObject(this.$options);\r\n\t };\r\n\t this.setOptions = function(options) {\r\n\t this.$options = options;\r\n\t };\r\n\t this.find = function(session) {\r\n\t var options = this.$options;\r\n\t var iterator = this.$matchIterator(session, options);\r\n\t if (!iterator)\r\n\t return false;\r\n\r\n\t var firstRange = null;\r\n\t iterator.forEach(function(range, row, offset) {\r\n\t if (!range.start) {\r\n\t var column = range.offset + (offset || 0);\r\n\t firstRange = new Range(row, column, row, column + range.length);\r\n\t if (!range.length && options.start && options.start.start\r\n\t && options.skipCurrent != false && firstRange.isEqual(options.start)\r\n\t ) {\r\n\t firstRange = null;\r\n\t return false;\r\n\t }\r\n\t } else\r\n\t firstRange = range;\r\n\t return true;\r\n\t });\r\n\r\n\t return firstRange;\r\n\t };\r\n\t this.findAll = function(session) {\r\n\t var options = this.$options;\r\n\t if (!options.needle)\r\n\t return [];\r\n\t this.$assembleRegExp(options);\r\n\r\n\t var range = options.range;\r\n\t var lines = range\r\n\t ? session.getLines(range.start.row, range.end.row)\r\n\t : session.doc.getAllLines();\r\n\r\n\t var ranges = [];\r\n\t var re = options.re;\r\n\t if (options.$isMultiLine) {\r\n\t var len = re.length;\r\n\t var maxRow = lines.length - len;\r\n\t var prevRange;\r\n\t outer: for (var row = re.offset || 0; row <= maxRow; row++) {\r\n\t for (var j = 0; j < len; j++)\r\n\t if (lines[row + j].search(re[j]) == -1)\r\n\t continue outer;\r\n\t \r\n\t var startLine = lines[row];\r\n\t var line = lines[row + len - 1];\r\n\t var startIndex = startLine.length - startLine.match(re[0])[0].length;\r\n\t var endIndex = line.match(re[len - 1])[0].length;\r\n\t \r\n\t if (prevRange && prevRange.end.row === row &&\r\n\t prevRange.end.column > startIndex\r\n\t ) {\r\n\t continue;\r\n\t }\r\n\t ranges.push(prevRange = new Range(\r\n\t row, startIndex, row + len - 1, endIndex\r\n\t ));\r\n\t if (len > 2)\r\n\t row = row + len - 2;\r\n\t }\r\n\t } else {\r\n\t for (var i = 0; i < lines.length; i++) {\r\n\t var matches = lang.getMatchOffsets(lines[i], re);\r\n\t for (var j = 0; j < matches.length; j++) {\r\n\t var match = matches[j];\r\n\t ranges.push(new Range(i, match.offset, i, match.offset + match.length));\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t if (range) {\r\n\t var startColumn = range.start.column;\r\n\t var endColumn = range.start.column;\r\n\t var i = 0, j = ranges.length - 1;\r\n\t while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row)\r\n\t i++;\r\n\r\n\t while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row)\r\n\t j--;\r\n\t \r\n\t ranges = ranges.slice(i, j + 1);\r\n\t for (i = 0, j = ranges.length; i < j; i++) {\r\n\t ranges[i].start.row += range.start.row;\r\n\t ranges[i].end.row += range.start.row;\r\n\t }\r\n\t }\r\n\r\n\t return ranges;\r\n\t };\r\n\t this.replace = function(input, replacement) {\r\n\t var options = this.$options;\r\n\r\n\t var re = this.$assembleRegExp(options);\r\n\t if (options.$isMultiLine)\r\n\t return replacement;\r\n\r\n\t if (!re)\r\n\t return;\r\n\r\n\t var match = re.exec(input);\r\n\t if (!match || match[0].length != input.length)\r\n\t return null;\r\n\t \r\n\t replacement = input.replace(re, replacement);\r\n\t if (options.preserveCase) {\r\n\t replacement = replacement.split(\"\");\r\n\t for (var i = Math.min(input.length, input.length); i--; ) {\r\n\t var ch = input[i];\r\n\t if (ch && ch.toLowerCase() != ch)\r\n\t replacement[i] = replacement[i].toUpperCase();\r\n\t else\r\n\t replacement[i] = replacement[i].toLowerCase();\r\n\t }\r\n\t replacement = replacement.join(\"\");\r\n\t }\r\n\t \r\n\t return replacement;\r\n\t };\r\n\r\n\t this.$matchIterator = function(session, options) {\r\n\t var re = this.$assembleRegExp(options);\r\n\t if (!re)\r\n\t return false;\r\n\r\n\t var callback;\r\n\t if (options.$isMultiLine) {\r\n\t var len = re.length;\r\n\t var matchIterator = function(line, row, offset) {\r\n\t var startIndex = line.search(re[0]);\r\n\t if (startIndex == -1)\r\n\t return;\r\n\t for (var i = 1; i < len; i++) {\r\n\t line = session.getLine(row + i);\r\n\t if (line.search(re[i]) == -1)\r\n\t return;\r\n\t }\r\n\r\n\t var endIndex = line.match(re[len - 1])[0].length;\r\n\r\n\t var range = new Range(row, startIndex, row + len - 1, endIndex);\r\n\t if (re.offset == 1) {\r\n\t range.start.row--;\r\n\t range.start.column = Number.MAX_VALUE;\r\n\t } else if (offset)\r\n\t range.start.column += offset;\r\n\r\n\t if (callback(range))\r\n\t return true;\r\n\t };\r\n\t } else if (options.backwards) {\r\n\t var matchIterator = function(line, row, startIndex) {\r\n\t var matches = lang.getMatchOffsets(line, re);\r\n\t for (var i = matches.length-1; i >= 0; i--)\r\n\t if (callback(matches[i], row, startIndex))\r\n\t return true;\r\n\t };\r\n\t } else {\r\n\t var matchIterator = function(line, row, startIndex) {\r\n\t var matches = lang.getMatchOffsets(line, re);\r\n\t for (var i = 0; i < matches.length; i++)\r\n\t if (callback(matches[i], row, startIndex))\r\n\t return true;\r\n\t };\r\n\t }\r\n\t \r\n\t var lineIterator = this.$lineIterator(session, options);\r\n\r\n\t return {\r\n\t forEach: function(_callback) {\r\n\t callback = _callback;\r\n\t lineIterator.forEach(matchIterator);\r\n\t }\r\n\t };\r\n\t };\r\n\r\n\t this.$assembleRegExp = function(options, $disableFakeMultiline) {\r\n\t if (options.needle instanceof RegExp)\r\n\t return options.re = options.needle;\r\n\r\n\t var needle = options.needle;\r\n\r\n\t if (!options.needle)\r\n\t return options.re = false;\r\n\r\n\t if (!options.regExp)\r\n\t needle = lang.escapeRegExp(needle);\r\n\r\n\t if (options.wholeWord)\r\n\t needle = \"\\\\b\" + needle + \"\\\\b\";\r\n\r\n\t var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\r\n\r\n\t options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\r\n\t if (options.$isMultiLine)\r\n\t return options.re = this.$assembleMultilineRegExp(needle, modifier);\r\n\r\n\t try {\r\n\t var re = new RegExp(needle, modifier);\r\n\t } catch(e) {\r\n\t re = false;\r\n\t }\r\n\t return options.re = re;\r\n\t };\r\n\r\n\t this.$assembleMultilineRegExp = function(needle, modifier) {\r\n\t var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\r\n\t var re = [];\r\n\t for (var i = 0; i < parts.length; i++) try {\r\n\t re.push(new RegExp(parts[i], modifier));\r\n\t } catch(e) {\r\n\t return false;\r\n\t }\r\n\t if (parts[0] == \"\") {\r\n\t re.shift();\r\n\t re.offset = 1;\r\n\t } else {\r\n\t re.offset = 0;\r\n\t }\r\n\t return re;\r\n\t };\r\n\r\n\t this.$lineIterator = function(session, options) {\r\n\t var backwards = options.backwards == true;\r\n\t var skipCurrent = options.skipCurrent != false;\r\n\r\n\t var range = options.range;\r\n\t var start = options.start;\r\n\t if (!start)\r\n\t start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\r\n\t \r\n\t if (start.start)\r\n\t start = start[skipCurrent != backwards ? \"end\" : \"start\"];\r\n\r\n\t var firstRow = range ? range.start.row : 0;\r\n\t var lastRow = range ? range.end.row : session.getLength() - 1;\r\n\r\n\t var forEach = backwards ? function(callback) {\r\n\t var row = start.row;\r\n\r\n\t var line = session.getLine(row).substring(0, start.column);\r\n\t if (callback(line, row))\r\n\t return;\r\n\r\n\t for (row--; row >= firstRow; row--)\r\n\t if (callback(session.getLine(row), row))\r\n\t return;\r\n\r\n\t if (options.wrap == false)\r\n\t return;\r\n\r\n\t for (row = lastRow, firstRow = start.row; row >= firstRow; row--)\r\n\t if (callback(session.getLine(row), row))\r\n\t return;\r\n\t } : function(callback) {\r\n\t var row = start.row;\r\n\r\n\t var line = session.getLine(row).substr(start.column);\r\n\t if (callback(line, row, start.column))\r\n\t return;\r\n\r\n\t for (row = row+1; row <= lastRow; row++)\r\n\t if (callback(session.getLine(row), row))\r\n\t return;\r\n\r\n\t if (options.wrap == false)\r\n\t return;\r\n\r\n\t for (row = firstRow, lastRow = start.row; row <= lastRow; row++)\r\n\t if (callback(session.getLine(row), row))\r\n\t return;\r\n\t };\r\n\t \r\n\t return {forEach: forEach};\r\n\t };\r\n\r\n\t}).call(Search.prototype);\r\n\r\n\texports.Search = Search;\r\n\t});\r\n\r\n\tace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar keyUtil = acequire(\"../lib/keys\");\r\n\tvar useragent = acequire(\"../lib/useragent\");\r\n\tvar KEY_MODS = keyUtil.KEY_MODS;\r\n\r\n\tfunction HashHandler(config, platform) {\r\n\t this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\r\n\t this.commands = {};\r\n\t this.commandKeyBinding = {};\r\n\t this.addCommands(config);\r\n\t this.$singleCommand = true;\r\n\t}\r\n\r\n\tfunction MultiHashHandler(config, platform) {\r\n\t HashHandler.call(this, config, platform);\r\n\t this.$singleCommand = false;\r\n\t}\r\n\r\n\tMultiHashHandler.prototype = HashHandler.prototype;\r\n\r\n\t(function() {\r\n\t \r\n\r\n\t this.addCommand = function(command) {\r\n\t if (this.commands[command.name])\r\n\t this.removeCommand(command);\r\n\r\n\t this.commands[command.name] = command;\r\n\r\n\t if (command.bindKey)\r\n\t this._buildKeyHash(command);\r\n\t };\r\n\r\n\t this.removeCommand = function(command, keepCommand) {\r\n\t var name = command && (typeof command === 'string' ? command : command.name);\r\n\t command = this.commands[name];\r\n\t if (!keepCommand)\r\n\t delete this.commands[name];\r\n\t var ckb = this.commandKeyBinding;\r\n\t for (var keyId in ckb) {\r\n\t var cmdGroup = ckb[keyId];\r\n\t if (cmdGroup == command) {\r\n\t delete ckb[keyId];\r\n\t } else if (Array.isArray(cmdGroup)) {\r\n\t var i = cmdGroup.indexOf(command);\r\n\t if (i != -1) {\r\n\t cmdGroup.splice(i, 1);\r\n\t if (cmdGroup.length == 1)\r\n\t ckb[keyId] = cmdGroup[0];\r\n\t }\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t this.bindKey = function(key, command, position) {\r\n\t if (typeof key == \"object\" && key) {\r\n\t if (position == undefined)\r\n\t position = key.position;\r\n\t key = key[this.platform];\r\n\t }\r\n\t if (!key)\r\n\t return;\r\n\t if (typeof command == \"function\")\r\n\t return this.addCommand({exec: command, bindKey: key, name: command.name || key});\r\n\t \r\n\t key.split(\"|\").forEach(function(keyPart) {\r\n\t var chain = \"\";\r\n\t if (keyPart.indexOf(\" \") != -1) {\r\n\t var parts = keyPart.split(/\\s+/);\r\n\t keyPart = parts.pop();\r\n\t parts.forEach(function(keyPart) {\r\n\t var binding = this.parseKeys(keyPart);\r\n\t var id = KEY_MODS[binding.hashId] + binding.key;\r\n\t chain += (chain ? \" \" : \"\") + id;\r\n\t this._addCommandToBinding(chain, \"chainKeys\");\r\n\t }, this);\r\n\t chain += \" \";\r\n\t }\r\n\t var binding = this.parseKeys(keyPart);\r\n\t var id = KEY_MODS[binding.hashId] + binding.key;\r\n\t this._addCommandToBinding(chain + id, command, position);\r\n\t }, this);\r\n\t };\r\n\t \r\n\t function getPosition(command) {\r\n\t return typeof command == \"object\" && command.bindKey\r\n\t && command.bindKey.position || 0;\r\n\t }\r\n\t this._addCommandToBinding = function(keyId, command, position) {\r\n\t var ckb = this.commandKeyBinding, i;\r\n\t if (!command) {\r\n\t delete ckb[keyId];\r\n\t } else if (!ckb[keyId] || this.$singleCommand) {\r\n\t ckb[keyId] = command;\r\n\t } else {\r\n\t if (!Array.isArray(ckb[keyId])) {\r\n\t ckb[keyId] = [ckb[keyId]];\r\n\t } else if ((i = ckb[keyId].indexOf(command)) != -1) {\r\n\t ckb[keyId].splice(i, 1);\r\n\t }\r\n\r\n\t if (typeof position != \"number\") {\r\n\t if (position || command.isDefault)\r\n\t position = -100;\r\n\t else\r\n\t position = getPosition(command);\r\n\t }\r\n\t var commands = ckb[keyId];\r\n\t for (i = 0; i < commands.length; i++) {\r\n\t var other = commands[i];\r\n\t var otherPos = getPosition(other);\r\n\t if (otherPos > position)\r\n\t break;\r\n\t }\r\n\t commands.splice(i, 0, command);\r\n\t }\r\n\t };\r\n\r\n\t this.addCommands = function(commands) {\r\n\t commands && Object.keys(commands).forEach(function(name) {\r\n\t var command = commands[name];\r\n\t if (!command)\r\n\t return;\r\n\t \r\n\t if (typeof command === \"string\")\r\n\t return this.bindKey(command, name);\r\n\r\n\t if (typeof command === \"function\")\r\n\t command = { exec: command };\r\n\r\n\t if (typeof command !== \"object\")\r\n\t return;\r\n\r\n\t if (!command.name)\r\n\t command.name = name;\r\n\r\n\t this.addCommand(command);\r\n\t }, this);\r\n\t };\r\n\r\n\t this.removeCommands = function(commands) {\r\n\t Object.keys(commands).forEach(function(name) {\r\n\t this.removeCommand(commands[name]);\r\n\t }, this);\r\n\t };\r\n\r\n\t this.bindKeys = function(keyList) {\r\n\t Object.keys(keyList).forEach(function(key) {\r\n\t this.bindKey(key, keyList[key]);\r\n\t }, this);\r\n\t };\r\n\r\n\t this._buildKeyHash = function(command) {\r\n\t this.bindKey(command.bindKey, command);\r\n\t };\r\n\t this.parseKeys = function(keys) {\r\n\t var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function(x){return x});\r\n\t var key = parts.pop();\r\n\r\n\t var keyCode = keyUtil[key];\r\n\t if (keyUtil.FUNCTION_KEYS[keyCode])\r\n\t key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();\r\n\t else if (!parts.length)\r\n\t return {key: key, hashId: -1};\r\n\t else if (parts.length == 1 && parts[0] == \"shift\")\r\n\t return {key: key.toUpperCase(), hashId: -1};\r\n\r\n\t var hashId = 0;\r\n\t for (var i = parts.length; i--;) {\r\n\t var modifier = keyUtil.KEY_MODS[parts[i]];\r\n\t if (modifier == null) {\r\n\t if (typeof console != \"undefined\")\r\n\t console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\r\n\t return false;\r\n\t }\r\n\t hashId |= modifier;\r\n\t }\r\n\t return {key: key, hashId: hashId};\r\n\t };\r\n\r\n\t this.findKeyCommand = function findKeyCommand(hashId, keyString) {\r\n\t var key = KEY_MODS[hashId] + keyString;\r\n\t return this.commandKeyBinding[key];\r\n\t };\r\n\r\n\t this.handleKeyboard = function(data, hashId, keyString, keyCode) {\r\n\t if (keyCode < 0) return;\r\n\t var key = KEY_MODS[hashId] + keyString;\r\n\t var command = this.commandKeyBinding[key];\r\n\t if (data.$keyChain) {\r\n\t data.$keyChain += \" \" + key;\r\n\t command = this.commandKeyBinding[data.$keyChain] || command;\r\n\t }\r\n\t \r\n\t if (command) {\r\n\t if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\r\n\t data.$keyChain = data.$keyChain || key;\r\n\t return {command: \"null\"};\r\n\t }\r\n\t }\r\n\t \r\n\t if (data.$keyChain) {\r\n\t if ((!hashId || hashId == 4) && keyString.length == 1)\r\n\t data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\r\n\t else if (hashId == -1 || keyCode > 0)\r\n\t data.$keyChain = \"\"; // reset keyChain\r\n\t }\r\n\t return {command: command};\r\n\t };\r\n\t \r\n\t this.getStatusText = function(editor, data) {\r\n\t return data.$keyChain || \"\";\r\n\t };\r\n\r\n\t}).call(HashHandler.prototype);\r\n\r\n\texports.HashHandler = HashHandler;\r\n\texports.MultiHashHandler = MultiHashHandler;\r\n\t});\r\n\r\n\tace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar MultiHashHandler = acequire(\"../keyboard/hash_handler\").MultiHashHandler;\r\n\tvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\r\n\r\n\tvar CommandManager = function(platform, commands) {\r\n\t MultiHashHandler.call(this, commands, platform);\r\n\t this.byName = this.commands;\r\n\t this.setDefaultHandler(\"exec\", function(e) {\r\n\t return e.command.exec(e.editor, e.args || {});\r\n\t });\r\n\t};\r\n\r\n\toop.inherits(CommandManager, MultiHashHandler);\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\r\n\t this.exec = function(command, editor, args) {\r\n\t if (Array.isArray(command)) {\r\n\t for (var i = command.length; i--; ) {\r\n\t if (this.exec(command[i], editor, args)) return true;\r\n\t }\r\n\t return false;\r\n\t }\r\n\t \r\n\t if (typeof command === \"string\")\r\n\t command = this.commands[command];\r\n\r\n\t if (!command)\r\n\t return false;\r\n\r\n\t if (editor && editor.$readOnly && !command.readOnly)\r\n\t return false;\r\n\r\n\t var e = {editor: editor, command: command, args: args};\r\n\t e.returnValue = this._emit(\"exec\", e);\r\n\t this._signal(\"afterExec\", e);\r\n\r\n\t return e.returnValue === false ? false : true;\r\n\t };\r\n\r\n\t this.toggleRecording = function(editor) {\r\n\t if (this.$inReplay)\r\n\t return;\r\n\r\n\t editor && editor._emit(\"changeStatus\");\r\n\t if (this.recording) {\r\n\t this.macro.pop();\r\n\t this.removeEventListener(\"exec\", this.$addCommandToMacro);\r\n\r\n\t if (!this.macro.length)\r\n\t this.macro = this.oldMacro;\r\n\r\n\t return this.recording = false;\r\n\t }\r\n\t if (!this.$addCommandToMacro) {\r\n\t this.$addCommandToMacro = function(e) {\r\n\t this.macro.push([e.command, e.args]);\r\n\t }.bind(this);\r\n\t }\r\n\r\n\t this.oldMacro = this.macro;\r\n\t this.macro = [];\r\n\t this.on(\"exec\", this.$addCommandToMacro);\r\n\t return this.recording = true;\r\n\t };\r\n\r\n\t this.replay = function(editor) {\r\n\t if (this.$inReplay || !this.macro)\r\n\t return;\r\n\r\n\t if (this.recording)\r\n\t return this.toggleRecording(editor);\r\n\r\n\t try {\r\n\t this.$inReplay = true;\r\n\t this.macro.forEach(function(x) {\r\n\t if (typeof x == \"string\")\r\n\t this.exec(x, editor);\r\n\t else\r\n\t this.exec(x[0], editor, x[1]);\r\n\t }, this);\r\n\t } finally {\r\n\t this.$inReplay = false;\r\n\t }\r\n\t };\r\n\r\n\t this.trimMacro = function(m) {\r\n\t return m.map(function(x){\r\n\t if (typeof x[0] != \"string\")\r\n\t x[0] = x[0].name;\r\n\t if (!x[1])\r\n\t x = x[0];\r\n\t return x;\r\n\t });\r\n\t };\r\n\r\n\t}).call(CommandManager.prototype);\r\n\r\n\texports.CommandManager = CommandManager;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar lang = acequire(\"../lib/lang\");\r\n\tvar config = acequire(\"../config\");\r\n\tvar Range = acequire(\"../range\").Range;\r\n\r\n\tfunction bindKey(win, mac) {\r\n\t return {win: win, mac: mac};\r\n\t}\r\n\texports.commands = [{\r\n\t name: \"showSettingsMenu\",\r\n\t bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\r\n\t exec: function(editor) {\r\n\t config.loadModule(\"ace/ext/settings_menu\", function(module) {\r\n\t module.init(editor);\r\n\t editor.showSettingsMenu();\r\n\t });\r\n\t },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"goToNextError\",\r\n\t bindKey: bindKey(\"Alt-E\", \"Ctrl-E\"),\r\n\t exec: function(editor) {\r\n\t config.loadModule(\"ace/ext/error_marker\", function(module) {\r\n\t module.showErrorMarker(editor, 1);\r\n\t });\r\n\t },\r\n\t scrollIntoView: \"animate\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"goToPreviousError\",\r\n\t bindKey: bindKey(\"Alt-Shift-E\", \"Ctrl-Shift-E\"),\r\n\t exec: function(editor) {\r\n\t config.loadModule(\"ace/ext/error_marker\", function(module) {\r\n\t module.showErrorMarker(editor, -1);\r\n\t });\r\n\t },\r\n\t scrollIntoView: \"animate\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectall\",\r\n\t bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\r\n\t exec: function(editor) { editor.selectAll(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"centerselection\",\r\n\t bindKey: bindKey(null, \"Ctrl-L\"),\r\n\t exec: function(editor) { editor.centerSelection(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotoline\",\r\n\t bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\r\n\t exec: function(editor) {\r\n\t var line = parseInt(prompt(\"Enter line number:\"), 10);\r\n\t if (!isNaN(line)) {\r\n\t editor.gotoLine(line);\r\n\t }\r\n\t },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"fold\",\r\n\t bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\r\n\t exec: function(editor) { editor.session.toggleFold(false); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"unfold\",\r\n\t bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\r\n\t exec: function(editor) { editor.session.toggleFold(true); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"toggleFoldWidget\",\r\n\t bindKey: bindKey(\"F2\", \"F2\"),\r\n\t exec: function(editor) { editor.session.toggleFoldWidget(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"toggleParentFoldWidget\",\r\n\t bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\r\n\t exec: function(editor) { editor.session.toggleFoldWidget(true); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"foldall\",\r\n\t bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\r\n\t exec: function(editor) { editor.session.foldAll(); },\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"foldOther\",\r\n\t bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\r\n\t exec: function(editor) { \r\n\t editor.session.foldAll();\r\n\t editor.session.unfold(editor.selection.getAllRanges());\r\n\t },\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"unfoldall\",\r\n\t bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\r\n\t exec: function(editor) { editor.session.unfold(); },\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"findnext\",\r\n\t bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\r\n\t exec: function(editor) { editor.findNext(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"findprevious\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\r\n\t exec: function(editor) { editor.findPrevious(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"center\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectOrFindNext\",\r\n\t bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\r\n\t exec: function(editor) {\r\n\t if (editor.selection.isEmpty())\r\n\t editor.selection.selectWord();\r\n\t else\r\n\t editor.findNext(); \r\n\t },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectOrFindPrevious\",\r\n\t bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\r\n\t exec: function(editor) { \r\n\t if (editor.selection.isEmpty())\r\n\t editor.selection.selectWord();\r\n\t else\r\n\t editor.findPrevious();\r\n\t },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"find\",\r\n\t bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\r\n\t exec: function(editor) {\r\n\t config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor)});\r\n\t },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"overwrite\",\r\n\t bindKey: \"Insert\",\r\n\t exec: function(editor) { editor.toggleOverwrite(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selecttostart\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Up\"),\r\n\t exec: function(editor) { editor.getSelection().selectFileStart(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t readOnly: true,\r\n\t scrollIntoView: \"animate\",\r\n\t aceCommandGroup: \"fileJump\"\r\n\t}, {\r\n\t name: \"gotostart\",\r\n\t bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\r\n\t exec: function(editor) { editor.navigateFileStart(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t readOnly: true,\r\n\t scrollIntoView: \"animate\",\r\n\t aceCommandGroup: \"fileJump\"\r\n\t}, {\r\n\t name: \"selectup\",\r\n\t bindKey: bindKey(\"Shift-Up\", \"Shift-Up\"),\r\n\t exec: function(editor) { editor.getSelection().selectUp(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"golineup\",\r\n\t bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\r\n\t exec: function(editor, args) { editor.navigateUp(args.times); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selecttoend\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-Down\"),\r\n\t exec: function(editor) { editor.getSelection().selectFileEnd(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t readOnly: true,\r\n\t scrollIntoView: \"animate\",\r\n\t aceCommandGroup: \"fileJump\"\r\n\t}, {\r\n\t name: \"gotoend\",\r\n\t bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\r\n\t exec: function(editor) { editor.navigateFileEnd(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t readOnly: true,\r\n\t scrollIntoView: \"animate\",\r\n\t aceCommandGroup: \"fileJump\"\r\n\t}, {\r\n\t name: \"selectdown\",\r\n\t bindKey: bindKey(\"Shift-Down\", \"Shift-Down\"),\r\n\t exec: function(editor) { editor.getSelection().selectDown(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"golinedown\",\r\n\t bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\r\n\t exec: function(editor, args) { editor.navigateDown(args.times); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectwordleft\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\r\n\t exec: function(editor) { editor.getSelection().selectWordLeft(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotowordleft\",\r\n\t bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\r\n\t exec: function(editor) { editor.navigateWordLeft(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selecttolinestart\",\r\n\t bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left\"),\r\n\t exec: function(editor) { editor.getSelection().selectLineStart(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotolinestart\",\r\n\t bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\r\n\t exec: function(editor) { editor.navigateLineStart(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectleft\",\r\n\t bindKey: bindKey(\"Shift-Left\", \"Shift-Left\"),\r\n\t exec: function(editor) { editor.getSelection().selectLeft(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotoleft\",\r\n\t bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\r\n\t exec: function(editor, args) { editor.navigateLeft(args.times); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectwordright\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\r\n\t exec: function(editor) { editor.getSelection().selectWordRight(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotowordright\",\r\n\t bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\r\n\t exec: function(editor) { editor.navigateWordRight(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selecttolineend\",\r\n\t bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right\"),\r\n\t exec: function(editor) { editor.getSelection().selectLineEnd(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotolineend\",\r\n\t bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\r\n\t exec: function(editor) { editor.navigateLineEnd(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectright\",\r\n\t bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\r\n\t exec: function(editor) { editor.getSelection().selectRight(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotoright\",\r\n\t bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\r\n\t exec: function(editor, args) { editor.navigateRight(args.times); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectpagedown\",\r\n\t bindKey: \"Shift-PageDown\",\r\n\t exec: function(editor) { editor.selectPageDown(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"pagedown\",\r\n\t bindKey: bindKey(null, \"Option-PageDown\"),\r\n\t exec: function(editor) { editor.scrollPageDown(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotopagedown\",\r\n\t bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\r\n\t exec: function(editor) { editor.gotoPageDown(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectpageup\",\r\n\t bindKey: \"Shift-PageUp\",\r\n\t exec: function(editor) { editor.selectPageUp(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"pageup\",\r\n\t bindKey: bindKey(null, \"Option-PageUp\"),\r\n\t exec: function(editor) { editor.scrollPageUp(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"gotopageup\",\r\n\t bindKey: \"PageUp\",\r\n\t exec: function(editor) { editor.gotoPageUp(); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"scrollup\",\r\n\t bindKey: bindKey(\"Ctrl-Up\", null),\r\n\t exec: function(e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"scrolldown\",\r\n\t bindKey: bindKey(\"Ctrl-Down\", null),\r\n\t exec: function(e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectlinestart\",\r\n\t bindKey: \"Shift-Home\",\r\n\t exec: function(editor) { editor.getSelection().selectLineStart(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectlineend\",\r\n\t bindKey: \"Shift-End\",\r\n\t exec: function(editor) { editor.getSelection().selectLineEnd(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"togglerecording\",\r\n\t bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\r\n\t exec: function(editor) { editor.commands.toggleRecording(editor); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"replaymacro\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\r\n\t exec: function(editor) { editor.commands.replay(editor); },\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"jumptomatching\",\r\n\t bindKey: bindKey(\"Ctrl-P\", \"Ctrl-P\"),\r\n\t exec: function(editor) { editor.jumpToMatching(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"animate\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selecttomatching\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-P\", \"Ctrl-Shift-P\"),\r\n\t exec: function(editor) { editor.jumpToMatching(true); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"animate\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"expandToMatching\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\r\n\t exec: function(editor) { editor.jumpToMatching(true, true); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"animate\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"passKeysToBrowser\",\r\n\t bindKey: bindKey(null, null),\r\n\t exec: function() {},\r\n\t passEvent: true,\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"copy\",\r\n\t exec: function(editor) {\r\n\t },\r\n\t readOnly: true\r\n\t},\r\n\t{\r\n\t name: \"cut\",\r\n\t exec: function(editor) {\r\n\t var range = editor.getSelectionRange();\r\n\t editor._emit(\"cut\", range);\r\n\r\n\t if (!editor.selection.isEmpty()) {\r\n\t editor.session.remove(range);\r\n\t editor.clearSelection();\r\n\t }\r\n\t },\r\n\t scrollIntoView: \"cursor\",\r\n\t multiSelectAction: \"forEach\"\r\n\t}, {\r\n\t name: \"paste\",\r\n\t exec: function(editor, args) {\r\n\t editor.$handlePaste(args);\r\n\t },\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"removeline\",\r\n\t bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\r\n\t exec: function(editor) { editor.removeLines(); },\r\n\t scrollIntoView: \"cursor\",\r\n\t multiSelectAction: \"forEachLine\"\r\n\t}, {\r\n\t name: \"duplicateSelection\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\r\n\t exec: function(editor) { editor.duplicateSelection(); },\r\n\t scrollIntoView: \"cursor\",\r\n\t multiSelectAction: \"forEach\"\r\n\t}, {\r\n\t name: \"sortlines\",\r\n\t bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\r\n\t exec: function(editor) { editor.sortLines(); },\r\n\t scrollIntoView: \"selection\",\r\n\t multiSelectAction: \"forEachLine\"\r\n\t}, {\r\n\t name: \"togglecomment\",\r\n\t bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\r\n\t exec: function(editor) { editor.toggleCommentLines(); },\r\n\t multiSelectAction: \"forEachLine\",\r\n\t scrollIntoView: \"selectionPart\"\r\n\t}, {\r\n\t name: \"toggleBlockComment\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\r\n\t exec: function(editor) { editor.toggleBlockComment(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"selectionPart\"\r\n\t}, {\r\n\t name: \"modifyNumberUp\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\r\n\t exec: function(editor) { editor.modifyNumber(1); },\r\n\t scrollIntoView: \"cursor\",\r\n\t multiSelectAction: \"forEach\"\r\n\t}, {\r\n\t name: \"modifyNumberDown\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\r\n\t exec: function(editor) { editor.modifyNumber(-1); },\r\n\t scrollIntoView: \"cursor\",\r\n\t multiSelectAction: \"forEach\"\r\n\t}, {\r\n\t name: \"replace\",\r\n\t bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\r\n\t exec: function(editor) {\r\n\t config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor, true)});\r\n\t }\r\n\t}, {\r\n\t name: \"undo\",\r\n\t bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\r\n\t exec: function(editor) { editor.undo(); }\r\n\t}, {\r\n\t name: \"redo\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\r\n\t exec: function(editor) { editor.redo(); }\r\n\t}, {\r\n\t name: \"copylinesup\",\r\n\t bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\r\n\t exec: function(editor) { editor.copyLinesUp(); },\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"movelinesup\",\r\n\t bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\r\n\t exec: function(editor) { editor.moveLinesUp(); },\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"copylinesdown\",\r\n\t bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\r\n\t exec: function(editor) { editor.copyLinesDown(); },\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"movelinesdown\",\r\n\t bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\r\n\t exec: function(editor) { editor.moveLinesDown(); },\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"del\",\r\n\t bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\r\n\t exec: function(editor) { editor.remove(\"right\"); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"backspace\",\r\n\t bindKey: bindKey(\r\n\t \"Shift-Backspace|Backspace\",\r\n\t \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"\r\n\t ),\r\n\t exec: function(editor) { editor.remove(\"left\"); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"cut_or_delete\",\r\n\t bindKey: bindKey(\"Shift-Delete\", null),\r\n\t exec: function(editor) { \r\n\t if (editor.selection.isEmpty()) {\r\n\t editor.remove(\"left\");\r\n\t } else {\r\n\t return false;\r\n\t }\r\n\t },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"removetolinestart\",\r\n\t bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\r\n\t exec: function(editor) { editor.removeToLineStart(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"removetolineend\",\r\n\t bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K\"),\r\n\t exec: function(editor) { editor.removeToLineEnd(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"removewordleft\",\r\n\t bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\r\n\t exec: function(editor) { editor.removeWordLeft(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"removewordright\",\r\n\t bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\r\n\t exec: function(editor) { editor.removeWordRight(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"outdent\",\r\n\t bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\r\n\t exec: function(editor) { editor.blockOutdent(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"selectionPart\"\r\n\t}, {\r\n\t name: \"indent\",\r\n\t bindKey: bindKey(\"Tab\", \"Tab\"),\r\n\t exec: function(editor) { editor.indent(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"selectionPart\"\r\n\t}, {\r\n\t name: \"blockoutdent\",\r\n\t bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\r\n\t exec: function(editor) { editor.blockOutdent(); },\r\n\t multiSelectAction: \"forEachLine\",\r\n\t scrollIntoView: \"selectionPart\"\r\n\t}, {\r\n\t name: \"blockindent\",\r\n\t bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\r\n\t exec: function(editor) { editor.blockIndent(); },\r\n\t multiSelectAction: \"forEachLine\",\r\n\t scrollIntoView: \"selectionPart\"\r\n\t}, {\r\n\t name: \"insertstring\",\r\n\t exec: function(editor, str) { editor.insert(str); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"inserttext\",\r\n\t exec: function(editor, args) {\r\n\t editor.insert(lang.stringRepeat(args.text || \"\", args.times || 1));\r\n\t },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"splitline\",\r\n\t bindKey: bindKey(null, \"Ctrl-O\"),\r\n\t exec: function(editor) { editor.splitLine(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"transposeletters\",\r\n\t bindKey: bindKey(\"Ctrl-T\", \"Ctrl-T\"),\r\n\t exec: function(editor) { editor.transposeLetters(); },\r\n\t multiSelectAction: function(editor) {editor.transposeSelections(1); },\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"touppercase\",\r\n\t bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\r\n\t exec: function(editor) { editor.toUpperCase(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"tolowercase\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\r\n\t exec: function(editor) { editor.toLowerCase(); },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"expandtoline\",\r\n\t bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\r\n\t exec: function(editor) {\r\n\t var range = editor.selection.getRange();\r\n\r\n\t range.start.column = range.end.column = 0;\r\n\t range.end.row++;\r\n\t editor.selection.setRange(range, false);\r\n\t },\r\n\t multiSelectAction: \"forEach\",\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"joinlines\",\r\n\t bindKey: bindKey(null, null),\r\n\t exec: function(editor) {\r\n\t var isBackwards = editor.selection.isBackwards();\r\n\t var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\r\n\t var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\r\n\t var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\r\n\t var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\r\n\t var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\r\n\t var insertLine = editor.session.doc.getLine(selectionStart.row);\r\n\r\n\t for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\r\n\t var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\r\n\t if (curLine.length !== 0) {\r\n\t curLine = \" \" + curLine;\r\n\t }\r\n\t insertLine += curLine;\r\n\t }\r\n\r\n\t if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\r\n\t insertLine += editor.session.doc.getNewLineCharacter();\r\n\t }\r\n\r\n\t editor.clearSelection();\r\n\t editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\r\n\r\n\t if (selectedCount > 0) {\r\n\t editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\r\n\t editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\r\n\t } else {\r\n\t firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;\r\n\t editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\r\n\t }\r\n\t },\r\n\t multiSelectAction: \"forEach\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"invertSelection\",\r\n\t bindKey: bindKey(null, null),\r\n\t exec: function(editor) {\r\n\t var endRow = editor.session.doc.getLength() - 1;\r\n\t var endCol = editor.session.doc.getLine(endRow).length;\r\n\t var ranges = editor.selection.rangeList.ranges;\r\n\t var newRanges = [];\r\n\t if (ranges.length < 1) {\r\n\t ranges = [editor.selection.getRange()];\r\n\t }\r\n\r\n\t for (var i = 0; i < ranges.length; i++) {\r\n\t if (i == (ranges.length - 1)) {\r\n\t if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\r\n\t newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\r\n\t }\r\n\t }\r\n\r\n\t if (i === 0) {\r\n\t if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\r\n\t newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\r\n\t }\r\n\t } else {\r\n\t newRanges.push(new Range(ranges[i-1].end.row, ranges[i-1].end.column, ranges[i].start.row, ranges[i].start.column));\r\n\t }\r\n\t }\r\n\r\n\t editor.exitMultiSelectMode();\r\n\t editor.clearSelection();\r\n\r\n\t for(var i = 0; i < newRanges.length; i++) {\r\n\t editor.selection.addRange(newRanges[i], false);\r\n\t }\r\n\t },\r\n\t readOnly: true,\r\n\t scrollIntoView: \"none\"\r\n\t}];\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tacequire(\"./lib/fixoldbrowsers\");\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar dom = acequire(\"./lib/dom\");\r\n\tvar lang = acequire(\"./lib/lang\");\r\n\tvar useragent = acequire(\"./lib/useragent\");\r\n\tvar TextInput = acequire(\"./keyboard/textinput\").TextInput;\r\n\tvar MouseHandler = acequire(\"./mouse/mouse_handler\").MouseHandler;\r\n\tvar FoldHandler = acequire(\"./mouse/fold_handler\").FoldHandler;\r\n\tvar KeyBinding = acequire(\"./keyboard/keybinding\").KeyBinding;\r\n\tvar EditSession = acequire(\"./edit_session\").EditSession;\r\n\tvar Search = acequire(\"./search\").Search;\r\n\tvar Range = acequire(\"./range\").Range;\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\tvar CommandManager = acequire(\"./commands/command_manager\").CommandManager;\r\n\tvar defaultCommands = acequire(\"./commands/default_commands\").commands;\r\n\tvar config = acequire(\"./config\");\r\n\tvar TokenIterator = acequire(\"./token_iterator\").TokenIterator;\r\n\tvar Editor = function(renderer, session) {\r\n\t var container = renderer.getContainerElement();\r\n\t this.container = container;\r\n\t this.renderer = renderer;\r\n\r\n\t this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\r\n\t this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\r\n\t this.renderer.textarea = this.textInput.getElement();\r\n\t this.keyBinding = new KeyBinding(this);\r\n\t this.$mouseHandler = new MouseHandler(this);\r\n\t new FoldHandler(this);\r\n\r\n\t this.$blockScrolling = 0;\r\n\t this.$search = new Search().set({\r\n\t wrap: true\r\n\t });\r\n\r\n\t this.$historyTracker = this.$historyTracker.bind(this);\r\n\t this.commands.on(\"exec\", this.$historyTracker);\r\n\r\n\t this.$initOperationListeners();\r\n\t \r\n\t this._$emitInputEvent = lang.delayedCall(function() {\r\n\t this._signal(\"input\", {});\r\n\t if (this.session && this.session.bgTokenizer)\r\n\t this.session.bgTokenizer.scheduleStart();\r\n\t }.bind(this));\r\n\t \r\n\t this.on(\"change\", function(_, _self) {\r\n\t _self._$emitInputEvent.schedule(31);\r\n\t });\r\n\r\n\t this.setSession(session || new EditSession(\"\"));\r\n\t config.resetOptions(this);\r\n\t config._signal(\"editor\", this);\r\n\t};\r\n\r\n\t(function(){\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\r\n\t this.$initOperationListeners = function() {\r\n\t function last(a) {return a[a.length - 1]}\r\n\r\n\t this.selections = [];\r\n\t this.commands.on(\"exec\", this.startOperation.bind(this), true);\r\n\t this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\r\n\r\n\t this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this));\r\n\r\n\t this.on(\"change\", function() {\r\n\t this.curOp || this.startOperation();\r\n\t this.curOp.docChanged = true;\r\n\t }.bind(this), true);\r\n\r\n\t this.on(\"changeSelection\", function() {\r\n\t this.curOp || this.startOperation();\r\n\t this.curOp.selectionChanged = true;\r\n\t }.bind(this), true);\r\n\t };\r\n\r\n\t this.curOp = null;\r\n\t this.prevOp = {};\r\n\t this.startOperation = function(commadEvent) {\r\n\t if (this.curOp) {\r\n\t if (!commadEvent || this.curOp.command)\r\n\t return;\r\n\t this.prevOp = this.curOp;\r\n\t }\r\n\t if (!commadEvent) {\r\n\t this.previousCommand = null;\r\n\t commadEvent = {};\r\n\t }\r\n\r\n\t this.$opResetTimer.schedule();\r\n\t this.curOp = {\r\n\t command: commadEvent.command || {},\r\n\t args: commadEvent.args,\r\n\t scrollTop: this.renderer.scrollTop\r\n\t };\r\n\t if (this.curOp.command.name && this.curOp.command.scrollIntoView !== undefined)\r\n\t this.$blockScrolling++;\r\n\t };\r\n\r\n\t this.endOperation = function(e) {\r\n\t if (this.curOp) {\r\n\t if (e && e.returnValue === false)\r\n\t return this.curOp = null;\r\n\t this._signal(\"beforeEndOperation\");\r\n\t var command = this.curOp.command;\r\n\t if (command.name && this.$blockScrolling > 0)\r\n\t this.$blockScrolling--;\r\n\t var scrollIntoView = command && command.scrollIntoView;\r\n\t if (scrollIntoView) {\r\n\t switch (scrollIntoView) {\r\n\t case \"center-animate\":\r\n\t scrollIntoView = \"animate\";\r\n\t case \"center\":\r\n\t this.renderer.scrollCursorIntoView(null, 0.5);\r\n\t break;\r\n\t case \"animate\":\r\n\t case \"cursor\":\r\n\t this.renderer.scrollCursorIntoView();\r\n\t break;\r\n\t case \"selectionPart\":\r\n\t var range = this.selection.getRange();\r\n\t var config = this.renderer.layerConfig;\r\n\t if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\r\n\t this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\r\n\t }\r\n\t break;\r\n\t default:\r\n\t break;\r\n\t }\r\n\t if (scrollIntoView == \"animate\")\r\n\t this.renderer.animateScrolling(this.curOp.scrollTop);\r\n\t }\r\n\t \r\n\t this.prevOp = this.curOp;\r\n\t this.curOp = null;\r\n\t }\r\n\t };\r\n\t this.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\r\n\t this.$historyTracker = function(e) {\r\n\t if (!this.$mergeUndoDeltas)\r\n\t return;\r\n\r\n\t var prev = this.prevOp;\r\n\t var mergeableCommands = this.$mergeableCommands;\r\n\t var shouldMerge = prev.command && (e.command.name == prev.command.name);\r\n\t if (e.command.name == \"insertstring\") {\r\n\t var text = e.args;\r\n\t if (this.mergeNextCommand === undefined)\r\n\t this.mergeNextCommand = true;\r\n\r\n\t shouldMerge = shouldMerge\r\n\t && this.mergeNextCommand // previous command allows to coalesce with\r\n\t && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\r\n\r\n\t this.mergeNextCommand = true;\r\n\t } else {\r\n\t shouldMerge = shouldMerge\r\n\t && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\r\n\t }\r\n\r\n\t if (\r\n\t this.$mergeUndoDeltas != \"always\"\r\n\t && Date.now() - this.sequenceStartTime > 2000\r\n\t ) {\r\n\t shouldMerge = false; // the sequence is too long\r\n\t }\r\n\r\n\t if (shouldMerge)\r\n\t this.session.mergeUndoDeltas = true;\r\n\t else if (mergeableCommands.indexOf(e.command.name) !== -1)\r\n\t this.sequenceStartTime = Date.now();\r\n\t };\r\n\t this.setKeyboardHandler = function(keyboardHandler, cb) {\r\n\t if (keyboardHandler && typeof keyboardHandler === \"string\") {\r\n\t this.$keybindingId = keyboardHandler;\r\n\t var _self = this;\r\n\t config.loadModule([\"keybinding\", keyboardHandler], function(module) {\r\n\t if (_self.$keybindingId == keyboardHandler)\r\n\t _self.keyBinding.setKeyboardHandler(module && module.handler);\r\n\t cb && cb();\r\n\t });\r\n\t } else {\r\n\t this.$keybindingId = null;\r\n\t this.keyBinding.setKeyboardHandler(keyboardHandler);\r\n\t cb && cb();\r\n\t }\r\n\t };\r\n\t this.getKeyboardHandler = function() {\r\n\t return this.keyBinding.getKeyboardHandler();\r\n\t };\r\n\t this.setSession = function(session) {\r\n\t if (this.session == session)\r\n\t return;\r\n\t if (this.curOp) this.endOperation();\r\n\t this.curOp = {};\r\n\r\n\t var oldSession = this.session;\r\n\t if (oldSession) {\r\n\t this.session.off(\"change\", this.$onDocumentChange);\r\n\t this.session.off(\"changeMode\", this.$onChangeMode);\r\n\t this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\r\n\t this.session.off(\"changeTabSize\", this.$onChangeTabSize);\r\n\t this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\r\n\t this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\r\n\t this.session.off(\"changeFold\", this.$onChangeFold);\r\n\t this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\r\n\t this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\r\n\t this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\r\n\t this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\r\n\t this.session.off(\"changeOverwrite\", this.$onCursorChange);\r\n\t this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\r\n\t this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\r\n\r\n\t var selection = this.session.getSelection();\r\n\t selection.off(\"changeCursor\", this.$onCursorChange);\r\n\t selection.off(\"changeSelection\", this.$onSelectionChange);\r\n\t }\r\n\r\n\t this.session = session;\r\n\t if (session) {\r\n\t this.$onDocumentChange = this.onDocumentChange.bind(this);\r\n\t session.on(\"change\", this.$onDocumentChange);\r\n\t this.renderer.setSession(session);\r\n\t \r\n\t this.$onChangeMode = this.onChangeMode.bind(this);\r\n\t session.on(\"changeMode\", this.$onChangeMode);\r\n\t \r\n\t this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\r\n\t session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\r\n\t \r\n\t this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\r\n\t session.on(\"changeTabSize\", this.$onChangeTabSize);\r\n\t \r\n\t this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\r\n\t session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\r\n\t \r\n\t this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\r\n\t session.on(\"changeWrapMode\", this.$onChangeWrapMode);\r\n\t \r\n\t this.$onChangeFold = this.onChangeFold.bind(this);\r\n\t session.on(\"changeFold\", this.$onChangeFold);\r\n\t \r\n\t this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\r\n\t this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\r\n\t \r\n\t this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\r\n\t this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\r\n\t \r\n\t this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\r\n\t this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\r\n\t \r\n\t this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\r\n\t this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\r\n\t \r\n\t this.$onCursorChange = this.onCursorChange.bind(this);\r\n\t this.session.on(\"changeOverwrite\", this.$onCursorChange);\r\n\t \r\n\t this.$onScrollTopChange = this.onScrollTopChange.bind(this);\r\n\t this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\r\n\t \r\n\t this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\r\n\t this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\r\n\t \r\n\t this.selection = session.getSelection();\r\n\t this.selection.on(\"changeCursor\", this.$onCursorChange);\r\n\t \r\n\t this.$onSelectionChange = this.onSelectionChange.bind(this);\r\n\t this.selection.on(\"changeSelection\", this.$onSelectionChange);\r\n\t \r\n\t this.onChangeMode();\r\n\t \r\n\t this.$blockScrolling += 1;\r\n\t this.onCursorChange();\r\n\t this.$blockScrolling -= 1;\r\n\t \r\n\t this.onScrollTopChange();\r\n\t this.onScrollLeftChange();\r\n\t this.onSelectionChange();\r\n\t this.onChangeFrontMarker();\r\n\t this.onChangeBackMarker();\r\n\t this.onChangeBreakpoint();\r\n\t this.onChangeAnnotation();\r\n\t this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\r\n\t this.renderer.updateFull();\r\n\t } else {\r\n\t this.selection = null;\r\n\t this.renderer.setSession(session);\r\n\t }\r\n\r\n\t this._signal(\"changeSession\", {\r\n\t session: session,\r\n\t oldSession: oldSession\r\n\t });\r\n\t \r\n\t this.curOp = null;\r\n\t \r\n\t oldSession && oldSession._signal(\"changeEditor\", {oldEditor: this});\r\n\t session && session._signal(\"changeEditor\", {editor: this});\r\n\t };\r\n\t this.getSession = function() {\r\n\t return this.session;\r\n\t };\r\n\t this.setValue = function(val, cursorPos) {\r\n\t this.session.doc.setValue(val);\r\n\r\n\t if (!cursorPos)\r\n\t this.selectAll();\r\n\t else if (cursorPos == 1)\r\n\t this.navigateFileEnd();\r\n\t else if (cursorPos == -1)\r\n\t this.navigateFileStart();\r\n\r\n\t return val;\r\n\t };\r\n\t this.getValue = function() {\r\n\t return this.session.getValue();\r\n\t };\r\n\t this.getSelection = function() {\r\n\t return this.selection;\r\n\t };\r\n\t this.resize = function(force) {\r\n\t this.renderer.onResize(force);\r\n\t };\r\n\t this.setTheme = function(theme, cb) {\r\n\t this.renderer.setTheme(theme, cb);\r\n\t };\r\n\t this.getTheme = function() {\r\n\t return this.renderer.getTheme();\r\n\t };\r\n\t this.setStyle = function(style) {\r\n\t this.renderer.setStyle(style);\r\n\t };\r\n\t this.unsetStyle = function(style) {\r\n\t this.renderer.unsetStyle(style);\r\n\t };\r\n\t this.getFontSize = function () {\r\n\t return this.getOption(\"fontSize\") ||\r\n\t dom.computedStyle(this.container, \"fontSize\");\r\n\t };\r\n\t this.setFontSize = function(size) {\r\n\t this.setOption(\"fontSize\", size);\r\n\t };\r\n\r\n\t this.$highlightBrackets = function() {\r\n\t if (this.session.$bracketHighlight) {\r\n\t this.session.removeMarker(this.session.$bracketHighlight);\r\n\t this.session.$bracketHighlight = null;\r\n\t }\r\n\r\n\t if (this.$highlightPending) {\r\n\t return;\r\n\t }\r\n\t var self = this;\r\n\t this.$highlightPending = true;\r\n\t setTimeout(function() {\r\n\t self.$highlightPending = false;\r\n\t var session = self.session;\r\n\t if (!session || !session.bgTokenizer) return;\r\n\t var pos = session.findMatchingBracket(self.getCursorPosition());\r\n\t if (pos) {\r\n\t var range = new Range(pos.row, pos.column, pos.row, pos.column + 1);\r\n\t } else if (session.$mode.getMatching) {\r\n\t var range = session.$mode.getMatching(self.session);\r\n\t }\r\n\t if (range)\r\n\t session.$bracketHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\r\n\t }, 50);\r\n\t };\r\n\t this.$highlightTags = function() {\r\n\t if (this.$highlightTagPending)\r\n\t return;\r\n\t var self = this;\r\n\t this.$highlightTagPending = true;\r\n\t setTimeout(function() {\r\n\t self.$highlightTagPending = false;\r\n\t \r\n\t var session = self.session;\r\n\t if (!session || !session.bgTokenizer) return;\r\n\t \r\n\t var pos = self.getCursorPosition();\r\n\t var iterator = new TokenIterator(self.session, pos.row, pos.column);\r\n\t var token = iterator.getCurrentToken();\r\n\t \r\n\t if (!token || !/\\b(?:tag-open|tag-name)/.test(token.type)) {\r\n\t session.removeMarker(session.$tagHighlight);\r\n\t session.$tagHighlight = null;\r\n\t return;\r\n\t }\r\n\t \r\n\t if (token.type.indexOf(\"tag-open\") != -1) {\r\n\t token = iterator.stepForward();\r\n\t if (!token)\r\n\t return;\r\n\t }\r\n\t \r\n\t var tag = token.value;\r\n\t var depth = 0;\r\n\t var prevToken = iterator.stepBackward();\r\n\t \r\n\t if (prevToken.value == '<'){\r\n\t do {\r\n\t prevToken = token;\r\n\t token = iterator.stepForward();\r\n\t \r\n\t if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\r\n\t if (prevToken.value === '<'){\r\n\t depth++;\r\n\t } else if (prevToken.value === '</'){\r\n\t depth--;\r\n\t }\r\n\t }\r\n\t \r\n\t } while (token && depth >= 0);\r\n\t } else {\r\n\t do {\r\n\t token = prevToken;\r\n\t prevToken = iterator.stepBackward();\r\n\t \r\n\t if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\r\n\t if (prevToken.value === '<') {\r\n\t depth++;\r\n\t } else if (prevToken.value === '</') {\r\n\t depth--;\r\n\t }\r\n\t }\r\n\t } while (prevToken && depth <= 0);\r\n\t iterator.stepForward();\r\n\t }\r\n\t \r\n\t if (!token) {\r\n\t session.removeMarker(session.$tagHighlight);\r\n\t session.$tagHighlight = null;\r\n\t return;\r\n\t }\r\n\t \r\n\t var row = iterator.getCurrentTokenRow();\r\n\t var column = iterator.getCurrentTokenColumn();\r\n\t var range = new Range(row, column, row, column+token.value.length);\r\n\t if (session.$tagHighlight && range.compareRange(session.$backMarkers[session.$tagHighlight].range)!==0) {\r\n\t session.removeMarker(session.$tagHighlight);\r\n\t session.$tagHighlight = null;\r\n\t }\r\n\t \r\n\t if (range && !session.$tagHighlight)\r\n\t session.$tagHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\r\n\t }, 50);\r\n\t };\r\n\t this.focus = function() {\r\n\t var _self = this;\r\n\t setTimeout(function() {\r\n\t _self.textInput.focus();\r\n\t });\r\n\t this.textInput.focus();\r\n\t };\r\n\t this.isFocused = function() {\r\n\t return this.textInput.isFocused();\r\n\t };\r\n\t this.blur = function() {\r\n\t this.textInput.blur();\r\n\t };\r\n\t this.onFocus = function(e) {\r\n\t if (this.$isFocused)\r\n\t return;\r\n\t this.$isFocused = true;\r\n\t this.renderer.showCursor();\r\n\t this.renderer.visualizeFocus();\r\n\t this._emit(\"focus\", e);\r\n\t };\r\n\t this.onBlur = function(e) {\r\n\t if (!this.$isFocused)\r\n\t return;\r\n\t this.$isFocused = false;\r\n\t this.renderer.hideCursor();\r\n\t this.renderer.visualizeBlur();\r\n\t this._emit(\"blur\", e);\r\n\t };\r\n\r\n\t this.$cursorChange = function() {\r\n\t this.renderer.updateCursor();\r\n\t };\r\n\t this.onDocumentChange = function(delta) {\r\n\t var wrap = this.session.$useWrapMode;\r\n\t var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity);\r\n\t this.renderer.updateLines(delta.start.row, lastRow, wrap);\r\n\r\n\t this._signal(\"change\", delta);\r\n\t this.$cursorChange();\r\n\t this.$updateHighlightActiveLine();\r\n\t };\r\n\r\n\t this.onTokenizerUpdate = function(e) {\r\n\t var rows = e.data;\r\n\t this.renderer.updateLines(rows.first, rows.last);\r\n\t };\r\n\r\n\r\n\t this.onScrollTopChange = function() {\r\n\t this.renderer.scrollToY(this.session.getScrollTop());\r\n\t };\r\n\r\n\t this.onScrollLeftChange = function() {\r\n\t this.renderer.scrollToX(this.session.getScrollLeft());\r\n\t };\r\n\t this.onCursorChange = function() {\r\n\t this.$cursorChange();\r\n\r\n\t if (!this.$blockScrolling) {\r\n\t config.warn(\"Automatically scrolling cursor into view after selection change\",\r\n\t \"this will be disabled in the next version\",\r\n\t \"set editor.$blockScrolling = Infinity to disable this message\"\r\n\t );\r\n\t this.renderer.scrollCursorIntoView();\r\n\t }\r\n\r\n\t this.$highlightBrackets();\r\n\t this.$highlightTags();\r\n\t this.$updateHighlightActiveLine();\r\n\t this._signal(\"changeSelection\");\r\n\t };\r\n\r\n\t this.$updateHighlightActiveLine = function() {\r\n\t var session = this.getSession();\r\n\r\n\t var highlight;\r\n\t if (this.$highlightActiveLine) {\r\n\t if ((this.$selectionStyle != \"line\" || !this.selection.isMultiLine()))\r\n\t highlight = this.getCursorPosition();\r\n\t if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1))\r\n\t highlight = false;\r\n\t }\r\n\r\n\t if (session.$highlightLineMarker && !highlight) {\r\n\t session.removeMarker(session.$highlightLineMarker.id);\r\n\t session.$highlightLineMarker = null;\r\n\t } else if (!session.$highlightLineMarker && highlight) {\r\n\t var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\r\n\t range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\r\n\t session.$highlightLineMarker = range;\r\n\t } else if (highlight) {\r\n\t session.$highlightLineMarker.start.row = highlight.row;\r\n\t session.$highlightLineMarker.end.row = highlight.row;\r\n\t session.$highlightLineMarker.start.column = highlight.column;\r\n\t session._signal(\"changeBackMarker\");\r\n\t }\r\n\t };\r\n\r\n\t this.onSelectionChange = function(e) {\r\n\t var session = this.session;\r\n\r\n\t if (session.$selectionMarker) {\r\n\t session.removeMarker(session.$selectionMarker);\r\n\t }\r\n\t session.$selectionMarker = null;\r\n\r\n\t if (!this.selection.isEmpty()) {\r\n\t var range = this.selection.getRange();\r\n\t var style = this.getSelectionStyle();\r\n\t session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\r\n\t } else {\r\n\t this.$updateHighlightActiveLine();\r\n\t }\r\n\r\n\t var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\r\n\t this.session.highlight(re);\r\n\r\n\t this._signal(\"changeSelection\");\r\n\t };\r\n\r\n\t this.$getSelectionHighLightRegexp = function() {\r\n\t var session = this.session;\r\n\r\n\t var selection = this.getSelectionRange();\r\n\t if (selection.isEmpty() || selection.isMultiLine())\r\n\t return;\r\n\r\n\t var startOuter = selection.start.column - 1;\r\n\t var endOuter = selection.end.column + 1;\r\n\t var line = session.getLine(selection.start.row);\r\n\t var lineCols = line.length;\r\n\t var needle = line.substring(Math.max(startOuter, 0),\r\n\t Math.min(endOuter, lineCols));\r\n\t if ((startOuter >= 0 && /^[\\w\\d]/.test(needle)) ||\r\n\t (endOuter <= lineCols && /[\\w\\d]$/.test(needle)))\r\n\t return;\r\n\r\n\t needle = line.substring(selection.start.column, selection.end.column);\r\n\t if (!/^[\\w\\d]+$/.test(needle))\r\n\t return;\r\n\r\n\t var re = this.$search.$assembleRegExp({\r\n\t wholeWord: true,\r\n\t caseSensitive: true,\r\n\t needle: needle\r\n\t });\r\n\r\n\t return re;\r\n\t };\r\n\r\n\r\n\t this.onChangeFrontMarker = function() {\r\n\t this.renderer.updateFrontMarkers();\r\n\t };\r\n\r\n\t this.onChangeBackMarker = function() {\r\n\t this.renderer.updateBackMarkers();\r\n\t };\r\n\r\n\r\n\t this.onChangeBreakpoint = function() {\r\n\t this.renderer.updateBreakpoints();\r\n\t };\r\n\r\n\t this.onChangeAnnotation = function() {\r\n\t this.renderer.setAnnotations(this.session.getAnnotations());\r\n\t };\r\n\r\n\r\n\t this.onChangeMode = function(e) {\r\n\t this.renderer.updateText();\r\n\t this._emit(\"changeMode\", e);\r\n\t };\r\n\r\n\r\n\t this.onChangeWrapLimit = function() {\r\n\t this.renderer.updateFull();\r\n\t };\r\n\r\n\t this.onChangeWrapMode = function() {\r\n\t this.renderer.onResize(true);\r\n\t };\r\n\r\n\r\n\t this.onChangeFold = function() {\r\n\t this.$updateHighlightActiveLine();\r\n\t this.renderer.updateFull();\r\n\t };\r\n\t this.getSelectedText = function() {\r\n\t return this.session.getTextRange(this.getSelectionRange());\r\n\t };\r\n\t this.getCopyText = function() {\r\n\t var text = this.getSelectedText();\r\n\t this._signal(\"copy\", text);\r\n\t return text;\r\n\t };\r\n\t this.onCopy = function() {\r\n\t this.commands.exec(\"copy\", this);\r\n\t };\r\n\t this.onCut = function() {\r\n\t this.commands.exec(\"cut\", this);\r\n\t };\r\n\t this.onPaste = function(text, event) {\r\n\t var e = {text: text, event: event};\r\n\t this.commands.exec(\"paste\", this, e);\r\n\t };\r\n\t \r\n\t this.$handlePaste = function(e) {\r\n\t if (typeof e == \"string\") \r\n\t e = {text: e};\r\n\t this._signal(\"paste\", e);\r\n\t var text = e.text;\r\n\t if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\r\n\t this.insert(text);\r\n\t } else {\r\n\t var lines = text.split(/\\r\\n|\\r|\\n/);\r\n\t var ranges = this.selection.rangeList.ranges;\r\n\t \r\n\t if (lines.length > ranges.length || lines.length < 2 || !lines[1])\r\n\t return this.commands.exec(\"insertstring\", this, text);\r\n\t \r\n\t for (var i = ranges.length; i--;) {\r\n\t var range = ranges[i];\r\n\t if (!range.isEmpty())\r\n\t this.session.remove(range);\r\n\t \r\n\t this.session.insert(range.start, lines[i]);\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t this.execCommand = function(command, args) {\r\n\t return this.commands.exec(command, this, args);\r\n\t };\r\n\t this.insert = function(text, pasted) {\r\n\t var session = this.session;\r\n\t var mode = session.getMode();\r\n\t var cursor = this.getCursorPosition();\r\n\r\n\t if (this.getBehavioursEnabled() && !pasted) {\r\n\t var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\r\n\t if (transform) {\r\n\t if (text !== transform.text) {\r\n\t this.session.mergeUndoDeltas = false;\r\n\t this.$mergeNextCommand = false;\r\n\t }\r\n\t text = transform.text;\r\n\r\n\t }\r\n\t }\r\n\t \r\n\t if (text == \"\\t\")\r\n\t text = this.session.getTabString();\r\n\t if (!this.selection.isEmpty()) {\r\n\t var range = this.getSelectionRange();\r\n\t cursor = this.session.remove(range);\r\n\t this.clearSelection();\r\n\t }\r\n\t else if (this.session.getOverwrite()) {\r\n\t var range = new Range.fromPoints(cursor, cursor);\r\n\t range.end.column += text.length;\r\n\t this.session.remove(range);\r\n\t }\r\n\r\n\t if (text == \"\\n\" || text == \"\\r\\n\") {\r\n\t var line = session.getLine(cursor.row);\r\n\t if (cursor.column > line.search(/\\S|$/)) {\r\n\t var d = line.substr(cursor.column).search(/\\S|$/);\r\n\t session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\r\n\t }\r\n\t }\r\n\t this.clearSelection();\r\n\r\n\t var start = cursor.column;\r\n\t var lineState = session.getState(cursor.row);\r\n\t var line = session.getLine(cursor.row);\r\n\t var shouldOutdent = mode.checkOutdent(lineState, line, text);\r\n\t var end = session.insert(cursor, text);\r\n\r\n\t if (transform && transform.selection) {\r\n\t if (transform.selection.length == 2) { // Transform relative to the current column\r\n\t this.selection.setSelectionRange(\r\n\t new Range(cursor.row, start + transform.selection[0],\r\n\t cursor.row, start + transform.selection[1]));\r\n\t } else { // Transform relative to the current row.\r\n\t this.selection.setSelectionRange(\r\n\t new Range(cursor.row + transform.selection[0],\r\n\t transform.selection[1],\r\n\t cursor.row + transform.selection[2],\r\n\t transform.selection[3]));\r\n\t }\r\n\t }\r\n\r\n\t if (session.getDocument().isNewLine(text)) {\r\n\t var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\r\n\r\n\t session.insert({row: cursor.row+1, column: 0}, lineIndent);\r\n\t }\r\n\t if (shouldOutdent)\r\n\t mode.autoOutdent(lineState, session, cursor.row);\r\n\t };\r\n\r\n\t this.onTextInput = function(text) {\r\n\t this.keyBinding.onTextInput(text);\r\n\t };\r\n\r\n\t this.onCommandKey = function(e, hashId, keyCode) {\r\n\t this.keyBinding.onCommandKey(e, hashId, keyCode);\r\n\t };\r\n\t this.setOverwrite = function(overwrite) {\r\n\t this.session.setOverwrite(overwrite);\r\n\t };\r\n\t this.getOverwrite = function() {\r\n\t return this.session.getOverwrite();\r\n\t };\r\n\t this.toggleOverwrite = function() {\r\n\t this.session.toggleOverwrite();\r\n\t };\r\n\t this.setScrollSpeed = function(speed) {\r\n\t this.setOption(\"scrollSpeed\", speed);\r\n\t };\r\n\t this.getScrollSpeed = function() {\r\n\t return this.getOption(\"scrollSpeed\");\r\n\t };\r\n\t this.setDragDelay = function(dragDelay) {\r\n\t this.setOption(\"dragDelay\", dragDelay);\r\n\t };\r\n\t this.getDragDelay = function() {\r\n\t return this.getOption(\"dragDelay\");\r\n\t };\r\n\t this.setSelectionStyle = function(val) {\r\n\t this.setOption(\"selectionStyle\", val);\r\n\t };\r\n\t this.getSelectionStyle = function() {\r\n\t return this.getOption(\"selectionStyle\");\r\n\t };\r\n\t this.setHighlightActiveLine = function(shouldHighlight) {\r\n\t this.setOption(\"highlightActiveLine\", shouldHighlight);\r\n\t };\r\n\t this.getHighlightActiveLine = function() {\r\n\t return this.getOption(\"highlightActiveLine\");\r\n\t };\r\n\t this.setHighlightGutterLine = function(shouldHighlight) {\r\n\t this.setOption(\"highlightGutterLine\", shouldHighlight);\r\n\t };\r\n\r\n\t this.getHighlightGutterLine = function() {\r\n\t return this.getOption(\"highlightGutterLine\");\r\n\t };\r\n\t this.setHighlightSelectedWord = function(shouldHighlight) {\r\n\t this.setOption(\"highlightSelectedWord\", shouldHighlight);\r\n\t };\r\n\t this.getHighlightSelectedWord = function() {\r\n\t return this.$highlightSelectedWord;\r\n\t };\r\n\r\n\t this.setAnimatedScroll = function(shouldAnimate){\r\n\t this.renderer.setAnimatedScroll(shouldAnimate);\r\n\t };\r\n\r\n\t this.getAnimatedScroll = function(){\r\n\t return this.renderer.getAnimatedScroll();\r\n\t };\r\n\t this.setShowInvisibles = function(showInvisibles) {\r\n\t this.renderer.setShowInvisibles(showInvisibles);\r\n\t };\r\n\t this.getShowInvisibles = function() {\r\n\t return this.renderer.getShowInvisibles();\r\n\t };\r\n\r\n\t this.setDisplayIndentGuides = function(display) {\r\n\t this.renderer.setDisplayIndentGuides(display);\r\n\t };\r\n\r\n\t this.getDisplayIndentGuides = function() {\r\n\t return this.renderer.getDisplayIndentGuides();\r\n\t };\r\n\t this.setShowPrintMargin = function(showPrintMargin) {\r\n\t this.renderer.setShowPrintMargin(showPrintMargin);\r\n\t };\r\n\t this.getShowPrintMargin = function() {\r\n\t return this.renderer.getShowPrintMargin();\r\n\t };\r\n\t this.setPrintMarginColumn = function(showPrintMargin) {\r\n\t this.renderer.setPrintMarginColumn(showPrintMargin);\r\n\t };\r\n\t this.getPrintMarginColumn = function() {\r\n\t return this.renderer.getPrintMarginColumn();\r\n\t };\r\n\t this.setReadOnly = function(readOnly) {\r\n\t this.setOption(\"readOnly\", readOnly);\r\n\t };\r\n\t this.getReadOnly = function() {\r\n\t return this.getOption(\"readOnly\");\r\n\t };\r\n\t this.setBehavioursEnabled = function (enabled) {\r\n\t this.setOption(\"behavioursEnabled\", enabled);\r\n\t };\r\n\t this.getBehavioursEnabled = function () {\r\n\t return this.getOption(\"behavioursEnabled\");\r\n\t };\r\n\t this.setWrapBehavioursEnabled = function (enabled) {\r\n\t this.setOption(\"wrapBehavioursEnabled\", enabled);\r\n\t };\r\n\t this.getWrapBehavioursEnabled = function () {\r\n\t return this.getOption(\"wrapBehavioursEnabled\");\r\n\t };\r\n\t this.setShowFoldWidgets = function(show) {\r\n\t this.setOption(\"showFoldWidgets\", show);\r\n\r\n\t };\r\n\t this.getShowFoldWidgets = function() {\r\n\t return this.getOption(\"showFoldWidgets\");\r\n\t };\r\n\r\n\t this.setFadeFoldWidgets = function(fade) {\r\n\t this.setOption(\"fadeFoldWidgets\", fade);\r\n\t };\r\n\r\n\t this.getFadeFoldWidgets = function() {\r\n\t return this.getOption(\"fadeFoldWidgets\");\r\n\t };\r\n\t this.remove = function(dir) {\r\n\t if (this.selection.isEmpty()){\r\n\t if (dir == \"left\")\r\n\t this.selection.selectLeft();\r\n\t else\r\n\t this.selection.selectRight();\r\n\t }\r\n\r\n\t var range = this.getSelectionRange();\r\n\t if (this.getBehavioursEnabled()) {\r\n\t var session = this.session;\r\n\t var state = session.getState(range.start.row);\r\n\t var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\r\n\r\n\t if (range.end.column === 0) {\r\n\t var text = session.getTextRange(range);\r\n\t if (text[text.length - 1] == \"\\n\") {\r\n\t var line = session.getLine(range.end.row);\r\n\t if (/^\\s+$/.test(line)) {\r\n\t range.end.column = line.length;\r\n\t }\r\n\t }\r\n\t }\r\n\t if (new_range)\r\n\t range = new_range;\r\n\t }\r\n\r\n\t this.session.remove(range);\r\n\t this.clearSelection();\r\n\t };\r\n\t this.removeWordRight = function() {\r\n\t if (this.selection.isEmpty())\r\n\t this.selection.selectWordRight();\r\n\r\n\t this.session.remove(this.getSelectionRange());\r\n\t this.clearSelection();\r\n\t };\r\n\t this.removeWordLeft = function() {\r\n\t if (this.selection.isEmpty())\r\n\t this.selection.selectWordLeft();\r\n\r\n\t this.session.remove(this.getSelectionRange());\r\n\t this.clearSelection();\r\n\t };\r\n\t this.removeToLineStart = function() {\r\n\t if (this.selection.isEmpty())\r\n\t this.selection.selectLineStart();\r\n\r\n\t this.session.remove(this.getSelectionRange());\r\n\t this.clearSelection();\r\n\t };\r\n\t this.removeToLineEnd = function() {\r\n\t if (this.selection.isEmpty())\r\n\t this.selection.selectLineEnd();\r\n\r\n\t var range = this.getSelectionRange();\r\n\t if (range.start.column == range.end.column && range.start.row == range.end.row) {\r\n\t range.end.column = 0;\r\n\t range.end.row++;\r\n\t }\r\n\r\n\t this.session.remove(range);\r\n\t this.clearSelection();\r\n\t };\r\n\t this.splitLine = function() {\r\n\t if (!this.selection.isEmpty()) {\r\n\t this.session.remove(this.getSelectionRange());\r\n\t this.clearSelection();\r\n\t }\r\n\r\n\t var cursor = this.getCursorPosition();\r\n\t this.insert(\"\\n\");\r\n\t this.moveCursorToPosition(cursor);\r\n\t };\r\n\t this.transposeLetters = function() {\r\n\t if (!this.selection.isEmpty()) {\r\n\t return;\r\n\t }\r\n\r\n\t var cursor = this.getCursorPosition();\r\n\t var column = cursor.column;\r\n\t if (column === 0)\r\n\t return;\r\n\r\n\t var line = this.session.getLine(cursor.row);\r\n\t var swap, range;\r\n\t if (column < line.length) {\r\n\t swap = line.charAt(column) + line.charAt(column-1);\r\n\t range = new Range(cursor.row, column-1, cursor.row, column+1);\r\n\t }\r\n\t else {\r\n\t swap = line.charAt(column-1) + line.charAt(column-2);\r\n\t range = new Range(cursor.row, column-2, cursor.row, column);\r\n\t }\r\n\t this.session.replace(range, swap);\r\n\t };\r\n\t this.toLowerCase = function() {\r\n\t var originalRange = this.getSelectionRange();\r\n\t if (this.selection.isEmpty()) {\r\n\t this.selection.selectWord();\r\n\t }\r\n\r\n\t var range = this.getSelectionRange();\r\n\t var text = this.session.getTextRange(range);\r\n\t this.session.replace(range, text.toLowerCase());\r\n\t this.selection.setSelectionRange(originalRange);\r\n\t };\r\n\t this.toUpperCase = function() {\r\n\t var originalRange = this.getSelectionRange();\r\n\t if (this.selection.isEmpty()) {\r\n\t this.selection.selectWord();\r\n\t }\r\n\r\n\t var range = this.getSelectionRange();\r\n\t var text = this.session.getTextRange(range);\r\n\t this.session.replace(range, text.toUpperCase());\r\n\t this.selection.setSelectionRange(originalRange);\r\n\t };\r\n\t this.indent = function() {\r\n\t var session = this.session;\r\n\t var range = this.getSelectionRange();\r\n\r\n\t if (range.start.row < range.end.row) {\r\n\t var rows = this.$getSelectedRows();\r\n\t session.indentRows(rows.first, rows.last, \"\\t\");\r\n\t return;\r\n\t } else if (range.start.column < range.end.column) {\r\n\t var text = session.getTextRange(range);\r\n\t if (!/^\\s+$/.test(text)) {\r\n\t var rows = this.$getSelectedRows();\r\n\t session.indentRows(rows.first, rows.last, \"\\t\");\r\n\t return;\r\n\t }\r\n\t }\r\n\t \r\n\t var line = session.getLine(range.start.row);\r\n\t var position = range.start;\r\n\t var size = session.getTabSize();\r\n\t var column = session.documentToScreenColumn(position.row, position.column);\r\n\r\n\t if (this.session.getUseSoftTabs()) {\r\n\t var count = (size - column % size);\r\n\t var indentString = lang.stringRepeat(\" \", count);\r\n\t } else {\r\n\t var count = column % size;\r\n\t while (line[range.start.column] == \" \" && count) {\r\n\t range.start.column--;\r\n\t count--;\r\n\t }\r\n\t this.selection.setSelectionRange(range);\r\n\t indentString = \"\\t\";\r\n\t }\r\n\t return this.insert(indentString);\r\n\t };\r\n\t this.blockIndent = function() {\r\n\t var rows = this.$getSelectedRows();\r\n\t this.session.indentRows(rows.first, rows.last, \"\\t\");\r\n\t };\r\n\t this.blockOutdent = function() {\r\n\t var selection = this.session.getSelection();\r\n\t this.session.outdentRows(selection.getRange());\r\n\t };\r\n\t this.sortLines = function() {\r\n\t var rows = this.$getSelectedRows();\r\n\t var session = this.session;\r\n\r\n\t var lines = [];\r\n\t for (i = rows.first; i <= rows.last; i++)\r\n\t lines.push(session.getLine(i));\r\n\r\n\t lines.sort(function(a, b) {\r\n\t if (a.toLowerCase() < b.toLowerCase()) return -1;\r\n\t if (a.toLowerCase() > b.toLowerCase()) return 1;\r\n\t return 0;\r\n\t });\r\n\r\n\t var deleteRange = new Range(0, 0, 0, 0);\r\n\t for (var i = rows.first; i <= rows.last; i++) {\r\n\t var line = session.getLine(i);\r\n\t deleteRange.start.row = i;\r\n\t deleteRange.end.row = i;\r\n\t deleteRange.end.column = line.length;\r\n\t session.replace(deleteRange, lines[i-rows.first]);\r\n\t }\r\n\t };\r\n\t this.toggleCommentLines = function() {\r\n\t var state = this.session.getState(this.getCursorPosition().row);\r\n\t var rows = this.$getSelectedRows();\r\n\t this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\r\n\t };\r\n\r\n\t this.toggleBlockComment = function() {\r\n\t var cursor = this.getCursorPosition();\r\n\t var state = this.session.getState(cursor.row);\r\n\t var range = this.getSelectionRange();\r\n\t this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\r\n\t };\r\n\t this.getNumberAt = function(row, column) {\r\n\t var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\r\n\t _numberRx.lastIndex = 0;\r\n\r\n\t var s = this.session.getLine(row);\r\n\t while (_numberRx.lastIndex < column) {\r\n\t var m = _numberRx.exec(s);\r\n\t if(m.index <= column && m.index+m[0].length >= column){\r\n\t var number = {\r\n\t value: m[0],\r\n\t start: m.index,\r\n\t end: m.index+m[0].length\r\n\t };\r\n\t return number;\r\n\t }\r\n\t }\r\n\t return null;\r\n\t };\r\n\t this.modifyNumber = function(amount) {\r\n\t var row = this.selection.getCursor().row;\r\n\t var column = this.selection.getCursor().column;\r\n\t var charRange = new Range(row, column-1, row, column);\r\n\r\n\t var c = this.session.getTextRange(charRange);\r\n\t if (!isNaN(parseFloat(c)) && isFinite(c)) {\r\n\t var nr = this.getNumberAt(row, column);\r\n\t if (nr) {\r\n\t var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\r\n\t var decimals = nr.start + nr.value.length - fp;\r\n\r\n\t var t = parseFloat(nr.value);\r\n\t t *= Math.pow(10, decimals);\r\n\r\n\r\n\t if(fp !== nr.end && column < fp){\r\n\t amount *= Math.pow(10, nr.end - column - 1);\r\n\t } else {\r\n\t amount *= Math.pow(10, nr.end - column);\r\n\t }\r\n\r\n\t t += amount;\r\n\t t /= Math.pow(10, decimals);\r\n\t var nnr = t.toFixed(decimals);\r\n\t var replaceRange = new Range(row, nr.start, row, nr.end);\r\n\t this.session.replace(replaceRange, nnr);\r\n\t this.moveCursorTo(row, Math.max(nr.start +1, column + nnr.length - nr.value.length));\r\n\r\n\t }\r\n\t }\r\n\t };\r\n\t this.removeLines = function() {\r\n\t var rows = this.$getSelectedRows();\r\n\t this.session.removeFullLines(rows.first, rows.last);\r\n\t this.clearSelection();\r\n\t };\r\n\r\n\t this.duplicateSelection = function() {\r\n\t var sel = this.selection;\r\n\t var doc = this.session;\r\n\t var range = sel.getRange();\r\n\t var reverse = sel.isBackwards();\r\n\t if (range.isEmpty()) {\r\n\t var row = range.start.row;\r\n\t doc.duplicateLines(row, row);\r\n\t } else {\r\n\t var point = reverse ? range.start : range.end;\r\n\t var endPoint = doc.insert(point, doc.getTextRange(range), false);\r\n\t range.start = point;\r\n\t range.end = endPoint;\r\n\r\n\t sel.setSelectionRange(range, reverse);\r\n\t }\r\n\t };\r\n\t this.moveLinesDown = function() {\r\n\t this.$moveLines(1, false);\r\n\t };\r\n\t this.moveLinesUp = function() {\r\n\t this.$moveLines(-1, false);\r\n\t };\r\n\t this.moveText = function(range, toPosition, copy) {\r\n\t return this.session.moveText(range, toPosition, copy);\r\n\t };\r\n\t this.copyLinesUp = function() {\r\n\t this.$moveLines(-1, true);\r\n\t };\r\n\t this.copyLinesDown = function() {\r\n\t this.$moveLines(1, true);\r\n\t };\r\n\t this.$moveLines = function(dir, copy) {\r\n\t var rows, moved;\r\n\t var selection = this.selection;\r\n\t if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\r\n\t var range = selection.toOrientedRange();\r\n\t rows = this.$getSelectedRows(range);\r\n\t moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\r\n\t if (copy && dir == -1) moved = 0;\r\n\t range.moveBy(moved, 0);\r\n\t selection.fromOrientedRange(range);\r\n\t } else {\r\n\t var ranges = selection.rangeList.ranges;\r\n\t selection.rangeList.detach(this.session);\r\n\t this.inVirtualSelectionMode = true;\r\n\t \r\n\t var diff = 0;\r\n\t var totalDiff = 0;\r\n\t var l = ranges.length;\r\n\t for (var i = 0; i < l; i++) {\r\n\t var rangeIndex = i;\r\n\t ranges[i].moveBy(diff, 0);\r\n\t rows = this.$getSelectedRows(ranges[i]);\r\n\t var first = rows.first;\r\n\t var last = rows.last;\r\n\t while (++i < l) {\r\n\t if (totalDiff) ranges[i].moveBy(totalDiff, 0);\r\n\t var subRows = this.$getSelectedRows(ranges[i]);\r\n\t if (copy && subRows.first != last)\r\n\t break;\r\n\t else if (!copy && subRows.first > last + 1)\r\n\t break;\r\n\t last = subRows.last;\r\n\t }\r\n\t i--;\r\n\t diff = this.session.$moveLines(first, last, copy ? 0 : dir);\r\n\t if (copy && dir == -1) rangeIndex = i + 1;\r\n\t while (rangeIndex <= i) {\r\n\t ranges[rangeIndex].moveBy(diff, 0);\r\n\t rangeIndex++;\r\n\t }\r\n\t if (!copy) diff = 0;\r\n\t totalDiff += diff;\r\n\t }\r\n\t \r\n\t selection.fromOrientedRange(selection.ranges[0]);\r\n\t selection.rangeList.attach(this.session);\r\n\t this.inVirtualSelectionMode = false;\r\n\t }\r\n\t };\r\n\t this.$getSelectedRows = function(range) {\r\n\t range = (range || this.getSelectionRange()).collapseRows();\r\n\r\n\t return {\r\n\t first: this.session.getRowFoldStart(range.start.row),\r\n\t last: this.session.getRowFoldEnd(range.end.row)\r\n\t };\r\n\t };\r\n\r\n\t this.onCompositionStart = function(text) {\r\n\t this.renderer.showComposition(this.getCursorPosition());\r\n\t };\r\n\r\n\t this.onCompositionUpdate = function(text) {\r\n\t this.renderer.setCompositionText(text);\r\n\t };\r\n\r\n\t this.onCompositionEnd = function() {\r\n\t this.renderer.hideComposition();\r\n\t };\r\n\t this.getFirstVisibleRow = function() {\r\n\t return this.renderer.getFirstVisibleRow();\r\n\t };\r\n\t this.getLastVisibleRow = function() {\r\n\t return this.renderer.getLastVisibleRow();\r\n\t };\r\n\t this.isRowVisible = function(row) {\r\n\t return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\r\n\t };\r\n\t this.isRowFullyVisible = function(row) {\r\n\t return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\r\n\t };\r\n\t this.$getVisibleRowCount = function() {\r\n\t return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\r\n\t };\r\n\r\n\t this.$moveByPage = function(dir, select) {\r\n\t var renderer = this.renderer;\r\n\t var config = this.renderer.layerConfig;\r\n\t var rows = dir * Math.floor(config.height / config.lineHeight);\r\n\r\n\t this.$blockScrolling++;\r\n\t if (select === true) {\r\n\t this.selection.$moveSelection(function(){\r\n\t this.moveCursorBy(rows, 0);\r\n\t });\r\n\t } else if (select === false) {\r\n\t this.selection.moveCursorBy(rows, 0);\r\n\t this.selection.clearSelection();\r\n\t }\r\n\t this.$blockScrolling--;\r\n\r\n\t var scrollTop = renderer.scrollTop;\r\n\r\n\t renderer.scrollBy(0, rows * config.lineHeight);\r\n\t if (select != null)\r\n\t renderer.scrollCursorIntoView(null, 0.5);\r\n\r\n\t renderer.animateScrolling(scrollTop);\r\n\t };\r\n\t this.selectPageDown = function() {\r\n\t this.$moveByPage(1, true);\r\n\t };\r\n\t this.selectPageUp = function() {\r\n\t this.$moveByPage(-1, true);\r\n\t };\r\n\t this.gotoPageDown = function() {\r\n\t this.$moveByPage(1, false);\r\n\t };\r\n\t this.gotoPageUp = function() {\r\n\t this.$moveByPage(-1, false);\r\n\t };\r\n\t this.scrollPageDown = function() {\r\n\t this.$moveByPage(1);\r\n\t };\r\n\t this.scrollPageUp = function() {\r\n\t this.$moveByPage(-1);\r\n\t };\r\n\t this.scrollToRow = function(row) {\r\n\t this.renderer.scrollToRow(row);\r\n\t };\r\n\t this.scrollToLine = function(line, center, animate, callback) {\r\n\t this.renderer.scrollToLine(line, center, animate, callback);\r\n\t };\r\n\t this.centerSelection = function() {\r\n\t var range = this.getSelectionRange();\r\n\t var pos = {\r\n\t row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\r\n\t column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\r\n\t };\r\n\t this.renderer.alignCursor(pos, 0.5);\r\n\t };\r\n\t this.getCursorPosition = function() {\r\n\t return this.selection.getCursor();\r\n\t };\r\n\t this.getCursorPositionScreen = function() {\r\n\t return this.session.documentToScreenPosition(this.getCursorPosition());\r\n\t };\r\n\t this.getSelectionRange = function() {\r\n\t return this.selection.getRange();\r\n\t };\r\n\t this.selectAll = function() {\r\n\t this.$blockScrolling += 1;\r\n\t this.selection.selectAll();\r\n\t this.$blockScrolling -= 1;\r\n\t };\r\n\t this.clearSelection = function() {\r\n\t this.selection.clearSelection();\r\n\t };\r\n\t this.moveCursorTo = function(row, column) {\r\n\t this.selection.moveCursorTo(row, column);\r\n\t };\r\n\t this.moveCursorToPosition = function(pos) {\r\n\t this.selection.moveCursorToPosition(pos);\r\n\t };\r\n\t this.jumpToMatching = function(select, expand) {\r\n\t var cursor = this.getCursorPosition();\r\n\t var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\r\n\t var prevToken = iterator.getCurrentToken();\r\n\t var token = prevToken || iterator.stepForward();\r\n\r\n\t if (!token) return;\r\n\t var matchType;\r\n\t var found = false;\r\n\t var depth = {};\r\n\t var i = cursor.column - token.start;\r\n\t var bracketType;\r\n\t var brackets = {\r\n\t \")\": \"(\",\r\n\t \"(\": \"(\",\r\n\t \"]\": \"[\",\r\n\t \"[\": \"[\",\r\n\t \"{\": \"{\",\r\n\t \"}\": \"{\"\r\n\t };\r\n\t \r\n\t do {\r\n\t if (token.value.match(/[{}()\\[\\]]/g)) {\r\n\t for (; i < token.value.length && !found; i++) {\r\n\t if (!brackets[token.value[i]]) {\r\n\t continue;\r\n\t }\r\n\r\n\t bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\r\n\r\n\t if (isNaN(depth[bracketType])) {\r\n\t depth[bracketType] = 0;\r\n\t }\r\n\r\n\t switch (token.value[i]) {\r\n\t case '(':\r\n\t case '[':\r\n\t case '{':\r\n\t depth[bracketType]++;\r\n\t break;\r\n\t case ')':\r\n\t case ']':\r\n\t case '}':\r\n\t depth[bracketType]--;\r\n\r\n\t if (depth[bracketType] === -1) {\r\n\t matchType = 'bracket';\r\n\t found = true;\r\n\t }\r\n\t break;\r\n\t }\r\n\t }\r\n\t }\r\n\t else if (token && token.type.indexOf('tag-name') !== -1) {\r\n\t if (isNaN(depth[token.value])) {\r\n\t depth[token.value] = 0;\r\n\t }\r\n\t \r\n\t if (prevToken.value === '<') {\r\n\t depth[token.value]++;\r\n\t }\r\n\t else if (prevToken.value === '</') {\r\n\t depth[token.value]--;\r\n\t }\r\n\t \r\n\t if (depth[token.value] === -1) {\r\n\t matchType = 'tag';\r\n\t found = true;\r\n\t }\r\n\t }\r\n\r\n\t if (!found) {\r\n\t prevToken = token;\r\n\t token = iterator.stepForward();\r\n\t i = 0;\r\n\t }\r\n\t } while (token && !found);\r\n\t if (!matchType)\r\n\t return;\r\n\r\n\t var range, pos;\r\n\t if (matchType === 'bracket') {\r\n\t range = this.session.getBracketRange(cursor);\r\n\t if (!range) {\r\n\t range = new Range(\r\n\t iterator.getCurrentTokenRow(),\r\n\t iterator.getCurrentTokenColumn() + i - 1,\r\n\t iterator.getCurrentTokenRow(),\r\n\t iterator.getCurrentTokenColumn() + i - 1\r\n\t );\r\n\t pos = range.start;\r\n\t if (expand || pos.row === cursor.row && Math.abs(pos.column - cursor.column) < 2)\r\n\t range = this.session.getBracketRange(pos);\r\n\t }\r\n\t }\r\n\t else if (matchType === 'tag') {\r\n\t if (token && token.type.indexOf('tag-name') !== -1) \r\n\t var tag = token.value;\r\n\t else\r\n\t return;\r\n\r\n\t range = new Range(\r\n\t iterator.getCurrentTokenRow(),\r\n\t iterator.getCurrentTokenColumn() - 2,\r\n\t iterator.getCurrentTokenRow(),\r\n\t iterator.getCurrentTokenColumn() - 2\r\n\t );\r\n\t if (range.compare(cursor.row, cursor.column) === 0) {\r\n\t found = false;\r\n\t do {\r\n\t token = prevToken;\r\n\t prevToken = iterator.stepBackward();\r\n\t \r\n\t if (prevToken) {\r\n\t if (prevToken.type.indexOf('tag-close') !== -1) {\r\n\t range.setEnd(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1);\r\n\t }\r\n\r\n\t if (token.value === tag && token.type.indexOf('tag-name') !== -1) {\r\n\t if (prevToken.value === '<') {\r\n\t depth[tag]++;\r\n\t }\r\n\t else if (prevToken.value === '</') {\r\n\t depth[tag]--;\r\n\t }\r\n\t \r\n\t if (depth[tag] === 0)\r\n\t found = true;\r\n\t }\r\n\t }\r\n\t } while (prevToken && !found);\r\n\t }\r\n\t if (token && token.type.indexOf('tag-name')) {\r\n\t pos = range.start;\r\n\t if (pos.row == cursor.row && Math.abs(pos.column - cursor.column) < 2)\r\n\t pos = range.end;\r\n\t }\r\n\t }\r\n\r\n\t pos = range && range.cursor || pos;\r\n\t if (pos) {\r\n\t if (select) {\r\n\t if (range && expand) {\r\n\t this.selection.setRange(range);\r\n\t } else if (range && range.isEqual(this.getSelectionRange())) {\r\n\t this.clearSelection();\r\n\t } else {\r\n\t this.selection.selectTo(pos.row, pos.column);\r\n\t }\r\n\t } else {\r\n\t this.selection.moveTo(pos.row, pos.column);\r\n\t }\r\n\t }\r\n\t };\r\n\t this.gotoLine = function(lineNumber, column, animate) {\r\n\t this.selection.clearSelection();\r\n\t this.session.unfold({row: lineNumber - 1, column: column || 0});\r\n\r\n\t this.$blockScrolling += 1;\r\n\t this.exitMultiSelectMode && this.exitMultiSelectMode();\r\n\t this.moveCursorTo(lineNumber - 1, column || 0);\r\n\t this.$blockScrolling -= 1;\r\n\r\n\t if (!this.isRowFullyVisible(lineNumber - 1))\r\n\t this.scrollToLine(lineNumber - 1, true, animate);\r\n\t };\r\n\t this.navigateTo = function(row, column) {\r\n\t this.selection.moveTo(row, column);\r\n\t };\r\n\t this.navigateUp = function(times) {\r\n\t if (this.selection.isMultiLine() && !this.selection.isBackwards()) {\r\n\t var selectionStart = this.selection.anchor.getPosition();\r\n\t return this.moveCursorToPosition(selectionStart);\r\n\t }\r\n\t this.selection.clearSelection();\r\n\t this.selection.moveCursorBy(-times || -1, 0);\r\n\t };\r\n\t this.navigateDown = function(times) {\r\n\t if (this.selection.isMultiLine() && this.selection.isBackwards()) {\r\n\t var selectionEnd = this.selection.anchor.getPosition();\r\n\t return this.moveCursorToPosition(selectionEnd);\r\n\t }\r\n\t this.selection.clearSelection();\r\n\t this.selection.moveCursorBy(times || 1, 0);\r\n\t };\r\n\t this.navigateLeft = function(times) {\r\n\t if (!this.selection.isEmpty()) {\r\n\t var selectionStart = this.getSelectionRange().start;\r\n\t this.moveCursorToPosition(selectionStart);\r\n\t }\r\n\t else {\r\n\t times = times || 1;\r\n\t while (times--) {\r\n\t this.selection.moveCursorLeft();\r\n\t }\r\n\t }\r\n\t this.clearSelection();\r\n\t };\r\n\t this.navigateRight = function(times) {\r\n\t if (!this.selection.isEmpty()) {\r\n\t var selectionEnd = this.getSelectionRange().end;\r\n\t this.moveCursorToPosition(selectionEnd);\r\n\t }\r\n\t else {\r\n\t times = times || 1;\r\n\t while (times--) {\r\n\t this.selection.moveCursorRight();\r\n\t }\r\n\t }\r\n\t this.clearSelection();\r\n\t };\r\n\t this.navigateLineStart = function() {\r\n\t this.selection.moveCursorLineStart();\r\n\t this.clearSelection();\r\n\t };\r\n\t this.navigateLineEnd = function() {\r\n\t this.selection.moveCursorLineEnd();\r\n\t this.clearSelection();\r\n\t };\r\n\t this.navigateFileEnd = function() {\r\n\t this.selection.moveCursorFileEnd();\r\n\t this.clearSelection();\r\n\t };\r\n\t this.navigateFileStart = function() {\r\n\t this.selection.moveCursorFileStart();\r\n\t this.clearSelection();\r\n\t };\r\n\t this.navigateWordRight = function() {\r\n\t this.selection.moveCursorWordRight();\r\n\t this.clearSelection();\r\n\t };\r\n\t this.navigateWordLeft = function() {\r\n\t this.selection.moveCursorWordLeft();\r\n\t this.clearSelection();\r\n\t };\r\n\t this.replace = function(replacement, options) {\r\n\t if (options)\r\n\t this.$search.set(options);\r\n\r\n\t var range = this.$search.find(this.session);\r\n\t var replaced = 0;\r\n\t if (!range)\r\n\t return replaced;\r\n\r\n\t if (this.$tryReplace(range, replacement)) {\r\n\t replaced = 1;\r\n\t }\r\n\t if (range !== null) {\r\n\t this.selection.setSelectionRange(range);\r\n\t this.renderer.scrollSelectionIntoView(range.start, range.end);\r\n\t }\r\n\r\n\t return replaced;\r\n\t };\r\n\t this.replaceAll = function(replacement, options) {\r\n\t if (options) {\r\n\t this.$search.set(options);\r\n\t }\r\n\r\n\t var ranges = this.$search.findAll(this.session);\r\n\t var replaced = 0;\r\n\t if (!ranges.length)\r\n\t return replaced;\r\n\r\n\t this.$blockScrolling += 1;\r\n\r\n\t var selection = this.getSelectionRange();\r\n\t this.selection.moveTo(0, 0);\r\n\r\n\t for (var i = ranges.length - 1; i >= 0; --i) {\r\n\t if(this.$tryReplace(ranges[i], replacement)) {\r\n\t replaced++;\r\n\t }\r\n\t }\r\n\r\n\t this.selection.setSelectionRange(selection);\r\n\t this.$blockScrolling -= 1;\r\n\r\n\t return replaced;\r\n\t };\r\n\r\n\t this.$tryReplace = function(range, replacement) {\r\n\t var input = this.session.getTextRange(range);\r\n\t replacement = this.$search.replace(input, replacement);\r\n\t if (replacement !== null) {\r\n\t range.end = this.session.replace(range, replacement);\r\n\t return range;\r\n\t } else {\r\n\t return null;\r\n\t }\r\n\t };\r\n\t this.getLastSearchOptions = function() {\r\n\t return this.$search.getOptions();\r\n\t };\r\n\t this.find = function(needle, options, animate) {\r\n\t if (!options)\r\n\t options = {};\r\n\r\n\t if (typeof needle == \"string\" || needle instanceof RegExp)\r\n\t options.needle = needle;\r\n\t else if (typeof needle == \"object\")\r\n\t oop.mixin(options, needle);\r\n\r\n\t var range = this.selection.getRange();\r\n\t if (options.needle == null) {\r\n\t needle = this.session.getTextRange(range)\r\n\t || this.$search.$options.needle;\r\n\t if (!needle) {\r\n\t range = this.session.getWordRange(range.start.row, range.start.column);\r\n\t needle = this.session.getTextRange(range);\r\n\t }\r\n\t this.$search.set({needle: needle});\r\n\t }\r\n\r\n\t this.$search.set(options);\r\n\t if (!options.start)\r\n\t this.$search.set({start: range});\r\n\r\n\t var newRange = this.$search.find(this.session);\r\n\t if (options.preventScroll)\r\n\t return newRange;\r\n\t if (newRange) {\r\n\t this.revealRange(newRange, animate);\r\n\t return newRange;\r\n\t }\r\n\t if (options.backwards)\r\n\t range.start = range.end;\r\n\t else\r\n\t range.end = range.start;\r\n\t this.selection.setRange(range);\r\n\t };\r\n\t this.findNext = function(options, animate) {\r\n\t this.find({skipCurrent: true, backwards: false}, options, animate);\r\n\t };\r\n\t this.findPrevious = function(options, animate) {\r\n\t this.find(options, {skipCurrent: true, backwards: true}, animate);\r\n\t };\r\n\r\n\t this.revealRange = function(range, animate) {\r\n\t this.$blockScrolling += 1;\r\n\t this.session.unfold(range);\r\n\t this.selection.setSelectionRange(range);\r\n\t this.$blockScrolling -= 1;\r\n\r\n\t var scrollTop = this.renderer.scrollTop;\r\n\t this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\r\n\t if (animate !== false)\r\n\t this.renderer.animateScrolling(scrollTop);\r\n\t };\r\n\t this.undo = function() {\r\n\t this.$blockScrolling++;\r\n\t this.session.getUndoManager().undo();\r\n\t this.$blockScrolling--;\r\n\t this.renderer.scrollCursorIntoView(null, 0.5);\r\n\t };\r\n\t this.redo = function() {\r\n\t this.$blockScrolling++;\r\n\t this.session.getUndoManager().redo();\r\n\t this.$blockScrolling--;\r\n\t this.renderer.scrollCursorIntoView(null, 0.5);\r\n\t };\r\n\t this.destroy = function() {\r\n\t this.renderer.destroy();\r\n\t this._signal(\"destroy\", this);\r\n\t if (this.session) {\r\n\t this.session.destroy();\r\n\t }\r\n\t };\r\n\t this.setAutoScrollEditorIntoView = function(enable) {\r\n\t if (!enable)\r\n\t return;\r\n\t var rect;\r\n\t var self = this;\r\n\t var shouldScroll = false;\r\n\t if (!this.$scrollAnchor)\r\n\t this.$scrollAnchor = document.createElement(\"div\");\r\n\t var scrollAnchor = this.$scrollAnchor;\r\n\t scrollAnchor.style.cssText = \"position:absolute\";\r\n\t this.container.insertBefore(scrollAnchor, this.container.firstChild);\r\n\t var onChangeSelection = this.on(\"changeSelection\", function() {\r\n\t shouldScroll = true;\r\n\t });\r\n\t var onBeforeRender = this.renderer.on(\"beforeRender\", function() {\r\n\t if (shouldScroll)\r\n\t rect = self.renderer.container.getBoundingClientRect();\r\n\t });\r\n\t var onAfterRender = this.renderer.on(\"afterRender\", function() {\r\n\t if (shouldScroll && rect && (self.isFocused()\r\n\t || self.searchBox && self.searchBox.isFocused())\r\n\t ) {\r\n\t var renderer = self.renderer;\r\n\t var pos = renderer.$cursorLayer.$pixelPos;\r\n\t var config = renderer.layerConfig;\r\n\t var top = pos.top - config.offset;\r\n\t if (pos.top >= 0 && top + rect.top < 0) {\r\n\t shouldScroll = true;\r\n\t } else if (pos.top < config.height &&\r\n\t pos.top + rect.top + config.lineHeight > window.innerHeight) {\r\n\t shouldScroll = false;\r\n\t } else {\r\n\t shouldScroll = null;\r\n\t }\r\n\t if (shouldScroll != null) {\r\n\t scrollAnchor.style.top = top + \"px\";\r\n\t scrollAnchor.style.left = pos.left + \"px\";\r\n\t scrollAnchor.style.height = config.lineHeight + \"px\";\r\n\t scrollAnchor.scrollIntoView(shouldScroll);\r\n\t }\r\n\t shouldScroll = rect = null;\r\n\t }\r\n\t });\r\n\t this.setAutoScrollEditorIntoView = function(enable) {\r\n\t if (enable)\r\n\t return;\r\n\t delete this.setAutoScrollEditorIntoView;\r\n\t this.off(\"changeSelection\", onChangeSelection);\r\n\t this.renderer.off(\"afterRender\", onAfterRender);\r\n\t this.renderer.off(\"beforeRender\", onBeforeRender);\r\n\t };\r\n\t };\r\n\r\n\r\n\t this.$resetCursorStyle = function() {\r\n\t var style = this.$cursorStyle || \"ace\";\r\n\t var cursorLayer = this.renderer.$cursorLayer;\r\n\t if (!cursorLayer)\r\n\t return;\r\n\t cursorLayer.setSmoothBlinking(/smooth/.test(style));\r\n\t cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\r\n\t dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\r\n\t };\r\n\r\n\t}).call(Editor.prototype);\r\n\r\n\r\n\r\n\tconfig.defineOptions(Editor.prototype, \"editor\", {\r\n\t selectionStyle: {\r\n\t set: function(style) {\r\n\t this.onSelectionChange();\r\n\t this._signal(\"changeSelectionStyle\", {data: style});\r\n\t },\r\n\t initialValue: \"line\"\r\n\t },\r\n\t highlightActiveLine: {\r\n\t set: function() {this.$updateHighlightActiveLine();},\r\n\t initialValue: true\r\n\t },\r\n\t highlightSelectedWord: {\r\n\t set: function(shouldHighlight) {this.$onSelectionChange();},\r\n\t initialValue: true\r\n\t },\r\n\t readOnly: {\r\n\t set: function(readOnly) {\r\n\t this.$resetCursorStyle(); \r\n\t },\r\n\t initialValue: false\r\n\t },\r\n\t cursorStyle: {\r\n\t set: function(val) { this.$resetCursorStyle(); },\r\n\t values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\r\n\t initialValue: \"ace\"\r\n\t },\r\n\t mergeUndoDeltas: {\r\n\t values: [false, true, \"always\"],\r\n\t initialValue: true\r\n\t },\r\n\t behavioursEnabled: {initialValue: true},\r\n\t wrapBehavioursEnabled: {initialValue: true},\r\n\t autoScrollEditorIntoView: {\r\n\t set: function(val) {this.setAutoScrollEditorIntoView(val)}\r\n\t },\r\n\t keyboardHandler: {\r\n\t set: function(val) { this.setKeyboardHandler(val); },\r\n\t get: function() { return this.keybindingId; },\r\n\t handlesSet: true\r\n\t },\r\n\r\n\t hScrollBarAlwaysVisible: \"renderer\",\r\n\t vScrollBarAlwaysVisible: \"renderer\",\r\n\t highlightGutterLine: \"renderer\",\r\n\t animatedScroll: \"renderer\",\r\n\t showInvisibles: \"renderer\",\r\n\t showPrintMargin: \"renderer\",\r\n\t printMarginColumn: \"renderer\",\r\n\t printMargin: \"renderer\",\r\n\t fadeFoldWidgets: \"renderer\",\r\n\t showFoldWidgets: \"renderer\",\r\n\t showLineNumbers: \"renderer\",\r\n\t showGutter: \"renderer\",\r\n\t displayIndentGuides: \"renderer\",\r\n\t fontSize: \"renderer\",\r\n\t fontFamily: \"renderer\",\r\n\t maxLines: \"renderer\",\r\n\t minLines: \"renderer\",\r\n\t scrollPastEnd: \"renderer\",\r\n\t fixedWidthGutter: \"renderer\",\r\n\t theme: \"renderer\",\r\n\r\n\t scrollSpeed: \"$mouseHandler\",\r\n\t dragDelay: \"$mouseHandler\",\r\n\t dragEnabled: \"$mouseHandler\",\r\n\t focusTimout: \"$mouseHandler\",\r\n\t tooltipFollowsMouse: \"$mouseHandler\",\r\n\r\n\t firstLineNumber: \"session\",\r\n\t overwrite: \"session\",\r\n\t newLineMode: \"session\",\r\n\t useWorker: \"session\",\r\n\t useSoftTabs: \"session\",\r\n\t tabSize: \"session\",\r\n\t wrap: \"session\",\r\n\t indentedSoftWrap: \"session\",\r\n\t foldStyle: \"session\",\r\n\t mode: \"session\"\r\n\t});\r\n\r\n\texports.Editor = Editor;\r\n\t});\r\n\r\n\tace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\tvar UndoManager = function() {\r\n\t this.reset();\r\n\t};\r\n\r\n\t(function() {\r\n\t this.execute = function(options) {\r\n\t var deltaSets = options.args[0];\r\n\t this.$doc = options.args[1];\r\n\t if (options.merge && this.hasUndo()){\r\n\t this.dirtyCounter--;\r\n\t deltaSets = this.$undoStack.pop().concat(deltaSets);\r\n\t }\r\n\t this.$undoStack.push(deltaSets);\r\n\t this.$redoStack = [];\r\n\t if (this.dirtyCounter < 0) {\r\n\t this.dirtyCounter = NaN;\r\n\t }\r\n\t this.dirtyCounter++;\r\n\t };\r\n\t this.undo = function(dontSelect) {\r\n\t var deltaSets = this.$undoStack.pop();\r\n\t var undoSelectionRange = null;\r\n\t if (deltaSets) {\r\n\t undoSelectionRange = this.$doc.undoChanges(deltaSets, dontSelect);\r\n\t this.$redoStack.push(deltaSets);\r\n\t this.dirtyCounter--;\r\n\t }\r\n\r\n\t return undoSelectionRange;\r\n\t };\r\n\t this.redo = function(dontSelect) {\r\n\t var deltaSets = this.$redoStack.pop();\r\n\t var redoSelectionRange = null;\r\n\t if (deltaSets) {\r\n\t redoSelectionRange =\r\n\t this.$doc.redoChanges(this.$deserializeDeltas(deltaSets), dontSelect);\r\n\t this.$undoStack.push(deltaSets);\r\n\t this.dirtyCounter++;\r\n\t }\r\n\t return redoSelectionRange;\r\n\t };\r\n\t this.reset = function() {\r\n\t this.$undoStack = [];\r\n\t this.$redoStack = [];\r\n\t this.dirtyCounter = 0;\r\n\t };\r\n\t this.hasUndo = function() {\r\n\t return this.$undoStack.length > 0;\r\n\t };\r\n\t this.hasRedo = function() {\r\n\t return this.$redoStack.length > 0;\r\n\t };\r\n\t this.markClean = function() {\r\n\t this.dirtyCounter = 0;\r\n\t };\r\n\t this.isClean = function() {\r\n\t return this.dirtyCounter === 0;\r\n\t };\r\n\t this.$serializeDeltas = function(deltaSets) {\r\n\t return cloneDeltaSetsObj(deltaSets, $serializeDelta);\r\n\t };\r\n\t this.$deserializeDeltas = function(deltaSets) {\r\n\t return cloneDeltaSetsObj(deltaSets, $deserializeDelta);\r\n\t };\r\n\t \r\n\t function $serializeDelta(delta){\r\n\t return {\r\n\t action: delta.action,\r\n\t start: delta.start,\r\n\t end: delta.end,\r\n\t lines: delta.lines.length == 1 ? null : delta.lines,\r\n\t text: delta.lines.length == 1 ? delta.lines[0] : null\r\n\t };\r\n\t }\r\n\t \r\n\t function $deserializeDelta(delta) {\r\n\t return {\r\n\t action: delta.action,\r\n\t start: delta.start,\r\n\t end: delta.end,\r\n\t lines: delta.lines || [delta.text]\r\n\t };\r\n\t }\r\n\t \r\n\t function cloneDeltaSetsObj(deltaSets_old, fnGetModifiedDelta) {\r\n\t var deltaSets_new = new Array(deltaSets_old.length);\r\n\t for (var i = 0; i < deltaSets_old.length; i++) {\r\n\t var deltaSet_old = deltaSets_old[i];\r\n\t var deltaSet_new = { group: deltaSet_old.group, deltas: new Array(deltaSet_old.length)};\r\n\t \r\n\t for (var j = 0; j < deltaSet_old.deltas.length; j++) {\r\n\t var delta_old = deltaSet_old.deltas[j];\r\n\t deltaSet_new.deltas[j] = fnGetModifiedDelta(delta_old);\r\n\t }\r\n\t \r\n\t deltaSets_new[i] = deltaSet_new;\r\n\t }\r\n\t return deltaSets_new;\r\n\t }\r\n\t \r\n\t}).call(UndoManager.prototype);\r\n\r\n\texports.UndoManager = UndoManager;\r\n\t});\r\n\r\n\tace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar lang = acequire(\"../lib/lang\");\r\n\tvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\r\n\r\n\tvar Gutter = function(parentEl) {\r\n\t this.element = dom.createElement(\"div\");\r\n\t this.element.className = \"ace_layer ace_gutter-layer\";\r\n\t parentEl.appendChild(this.element);\r\n\t this.setShowFoldWidgets(this.$showFoldWidgets);\r\n\t \r\n\t this.gutterWidth = 0;\r\n\r\n\t this.$annotations = [];\r\n\t this.$updateAnnotations = this.$updateAnnotations.bind(this);\r\n\r\n\t this.$cells = [];\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\r\n\t this.setSession = function(session) {\r\n\t if (this.session)\r\n\t this.session.removeEventListener(\"change\", this.$updateAnnotations);\r\n\t this.session = session;\r\n\t if (session)\r\n\t session.on(\"change\", this.$updateAnnotations);\r\n\t };\r\n\r\n\t this.addGutterDecoration = function(row, className){\r\n\t if (window.console)\r\n\t console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\r\n\t this.session.addGutterDecoration(row, className);\r\n\t };\r\n\r\n\t this.removeGutterDecoration = function(row, className){\r\n\t if (window.console)\r\n\t console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\r\n\t this.session.removeGutterDecoration(row, className);\r\n\t };\r\n\r\n\t this.setAnnotations = function(annotations) {\r\n\t this.$annotations = [];\r\n\t for (var i = 0; i < annotations.length; i++) {\r\n\t var annotation = annotations[i];\r\n\t var row = annotation.row;\r\n\t var rowInfo = this.$annotations[row];\r\n\t if (!rowInfo)\r\n\t rowInfo = this.$annotations[row] = {text: []};\r\n\t \r\n\t var annoText = annotation.text;\r\n\t annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\r\n\r\n\t if (rowInfo.text.indexOf(annoText) === -1)\r\n\t rowInfo.text.push(annoText);\r\n\r\n\t var type = annotation.type;\r\n\t if (type == \"error\")\r\n\t rowInfo.className = \" ace_error\";\r\n\t else if (type == \"warning\" && rowInfo.className != \" ace_error\")\r\n\t rowInfo.className = \" ace_warning\";\r\n\t else if (type == \"info\" && (!rowInfo.className))\r\n\t rowInfo.className = \" ace_info\";\r\n\t }\r\n\t };\r\n\r\n\t this.$updateAnnotations = function (delta) {\r\n\t if (!this.$annotations.length)\r\n\t return;\r\n\t var firstRow = delta.start.row;\r\n\t var len = delta.end.row - firstRow;\r\n\t if (len === 0) {\r\n\t } else if (delta.action == 'remove') {\r\n\t this.$annotations.splice(firstRow, len + 1, null);\r\n\t } else {\r\n\t var args = new Array(len + 1);\r\n\t args.unshift(firstRow, 1);\r\n\t this.$annotations.splice.apply(this.$annotations, args);\r\n\t }\r\n\t };\r\n\r\n\t this.update = function(config) {\r\n\t var session = this.session;\r\n\t var firstRow = config.firstRow;\r\n\t var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\r\n\t session.getLength() - 1);\r\n\t var fold = session.getNextFoldLine(firstRow);\r\n\t var foldStart = fold ? fold.start.row : Infinity;\r\n\t var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\r\n\t var breakpoints = session.$breakpoints;\r\n\t var decorations = session.$decorations;\r\n\t var firstLineNumber = session.$firstLineNumber;\r\n\t var lastLineNumber = 0;\r\n\t \r\n\t var gutterRenderer = session.gutterRenderer || this.$renderer;\r\n\r\n\t var cell = null;\r\n\t var index = -1;\r\n\t var row = firstRow;\r\n\t while (true) {\r\n\t if (row > foldStart) {\r\n\t row = fold.end.row + 1;\r\n\t fold = session.getNextFoldLine(row, fold);\r\n\t foldStart = fold ? fold.start.row : Infinity;\r\n\t }\r\n\t if (row > lastRow) {\r\n\t while (this.$cells.length > index + 1) {\r\n\t cell = this.$cells.pop();\r\n\t this.element.removeChild(cell.element);\r\n\t }\r\n\t break;\r\n\t }\r\n\r\n\t cell = this.$cells[++index];\r\n\t if (!cell) {\r\n\t cell = {element: null, textNode: null, foldWidget: null};\r\n\t cell.element = dom.createElement(\"div\");\r\n\t cell.textNode = document.createTextNode('');\r\n\t cell.element.appendChild(cell.textNode);\r\n\t this.element.appendChild(cell.element);\r\n\t this.$cells[index] = cell;\r\n\t }\r\n\r\n\t var className = \"ace_gutter-cell \";\r\n\t if (breakpoints[row])\r\n\t className += breakpoints[row];\r\n\t if (decorations[row])\r\n\t className += decorations[row];\r\n\t if (this.$annotations[row])\r\n\t className += this.$annotations[row].className;\r\n\t if (cell.element.className != className)\r\n\t cell.element.className = className;\r\n\r\n\t var height = session.getRowLength(row) * config.lineHeight + \"px\";\r\n\t if (height != cell.element.style.height)\r\n\t cell.element.style.height = height;\r\n\r\n\t if (foldWidgets) {\r\n\t var c = foldWidgets[row];\r\n\t if (c == null)\r\n\t c = foldWidgets[row] = session.getFoldWidget(row);\r\n\t }\r\n\r\n\t if (c) {\r\n\t if (!cell.foldWidget) {\r\n\t cell.foldWidget = dom.createElement(\"span\");\r\n\t cell.element.appendChild(cell.foldWidget);\r\n\t }\r\n\t var className = \"ace_fold-widget ace_\" + c;\r\n\t if (c == \"start\" && row == foldStart && row < fold.end.row)\r\n\t className += \" ace_closed\";\r\n\t else\r\n\t className += \" ace_open\";\r\n\t if (cell.foldWidget.className != className)\r\n\t cell.foldWidget.className = className;\r\n\r\n\t var height = config.lineHeight + \"px\";\r\n\t if (cell.foldWidget.style.height != height)\r\n\t cell.foldWidget.style.height = height;\r\n\t } else {\r\n\t if (cell.foldWidget) {\r\n\t cell.element.removeChild(cell.foldWidget);\r\n\t cell.foldWidget = null;\r\n\t }\r\n\t }\r\n\t \r\n\t var text = lastLineNumber = gutterRenderer\r\n\t ? gutterRenderer.getText(session, row)\r\n\t : row + firstLineNumber;\r\n\t if (text != cell.textNode.data)\r\n\t cell.textNode.data = text;\r\n\r\n\t row++;\r\n\t }\r\n\r\n\t this.element.style.height = config.minHeight + \"px\";\r\n\r\n\t if (this.$fixedWidth || session.$useWrapMode)\r\n\t lastLineNumber = session.getLength() + firstLineNumber;\r\n\r\n\t var gutterWidth = gutterRenderer \r\n\t ? gutterRenderer.getWidth(session, lastLineNumber, config)\r\n\t : lastLineNumber.toString().length * config.characterWidth;\r\n\t \r\n\t var padding = this.$padding || this.$computePadding();\r\n\t gutterWidth += padding.left + padding.right;\r\n\t if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\r\n\t this.gutterWidth = gutterWidth;\r\n\t this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\r\n\t this._emit(\"changeGutterWidth\", gutterWidth);\r\n\t }\r\n\t };\r\n\r\n\t this.$fixedWidth = false;\r\n\t \r\n\t this.$showLineNumbers = true;\r\n\t this.$renderer = \"\";\r\n\t this.setShowLineNumbers = function(show) {\r\n\t this.$renderer = !show && {\r\n\t getWidth: function() {return \"\"},\r\n\t getText: function() {return \"\"}\r\n\t };\r\n\t };\r\n\t \r\n\t this.getShowLineNumbers = function() {\r\n\t return this.$showLineNumbers;\r\n\t };\r\n\t \r\n\t this.$showFoldWidgets = true;\r\n\t this.setShowFoldWidgets = function(show) {\r\n\t if (show)\r\n\t dom.addCssClass(this.element, \"ace_folding-enabled\");\r\n\t else\r\n\t dom.removeCssClass(this.element, \"ace_folding-enabled\");\r\n\r\n\t this.$showFoldWidgets = show;\r\n\t this.$padding = null;\r\n\t };\r\n\t \r\n\t this.getShowFoldWidgets = function() {\r\n\t return this.$showFoldWidgets;\r\n\t };\r\n\r\n\t this.$computePadding = function() {\r\n\t if (!this.element.firstChild)\r\n\t return {left: 0, right: 0};\r\n\t var style = dom.computedStyle(this.element.firstChild);\r\n\t this.$padding = {};\r\n\t this.$padding.left = parseInt(style.paddingLeft) + 1 || 0;\r\n\t this.$padding.right = parseInt(style.paddingRight) || 0;\r\n\t return this.$padding;\r\n\t };\r\n\r\n\t this.getRegion = function(point) {\r\n\t var padding = this.$padding || this.$computePadding();\r\n\t var rect = this.element.getBoundingClientRect();\r\n\t if (point.x < padding.left + rect.left)\r\n\t return \"markers\";\r\n\t if (this.$showFoldWidgets && point.x > rect.right - padding.right)\r\n\t return \"foldWidgets\";\r\n\t };\r\n\r\n\t}).call(Gutter.prototype);\r\n\r\n\texports.Gutter = Gutter;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Range = acequire(\"../range\").Range;\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\r\n\tvar Marker = function(parentEl) {\r\n\t this.element = dom.createElement(\"div\");\r\n\t this.element.className = \"ace_layer ace_marker-layer\";\r\n\t parentEl.appendChild(this.element);\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t this.$padding = 0;\r\n\r\n\t this.setPadding = function(padding) {\r\n\t this.$padding = padding;\r\n\t };\r\n\t this.setSession = function(session) {\r\n\t this.session = session;\r\n\t };\r\n\t \r\n\t this.setMarkers = function(markers) {\r\n\t this.markers = markers;\r\n\t };\r\n\r\n\t this.update = function(config) {\r\n\t var config = config || this.config;\r\n\t if (!config)\r\n\t return;\r\n\r\n\t this.config = config;\r\n\r\n\r\n\t var html = [];\r\n\t for (var key in this.markers) {\r\n\t var marker = this.markers[key];\r\n\r\n\t if (!marker.range) {\r\n\t marker.update(html, this, this.session, config);\r\n\t continue;\r\n\t }\r\n\r\n\t var range = marker.range.clipRows(config.firstRow, config.lastRow);\r\n\t if (range.isEmpty()) continue;\r\n\r\n\t range = range.toScreenRange(this.session);\r\n\t if (marker.renderer) {\r\n\t var top = this.$getTop(range.start.row, config);\r\n\t var left = this.$padding + range.start.column * config.characterWidth;\r\n\t marker.renderer(html, range, left, top, config);\r\n\t } else if (marker.type == \"fullLine\") {\r\n\t this.drawFullLineMarker(html, range, marker.clazz, config);\r\n\t } else if (marker.type == \"screenLine\") {\r\n\t this.drawScreenLineMarker(html, range, marker.clazz, config);\r\n\t } else if (range.isMultiLine()) {\r\n\t if (marker.type == \"text\")\r\n\t this.drawTextMarker(html, range, marker.clazz, config);\r\n\t else\r\n\t this.drawMultiLineMarker(html, range, marker.clazz, config);\r\n\t } else {\r\n\t this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\r\n\t }\r\n\t }\r\n\t this.element.innerHTML = html.join(\"\");\r\n\t };\r\n\r\n\t this.$getTop = function(row, layerConfig) {\r\n\t return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\r\n\t };\r\n\r\n\t function getBorderClass(tl, tr, br, bl) {\r\n\t return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\r\n\t }\r\n\t this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig, extraStyle) {\r\n\t var session = this.session;\r\n\t var start = range.start.row;\r\n\t var end = range.end.row;\r\n\t var row = start;\r\n\t var prev = 0; \r\n\t var curr = 0;\r\n\t var next = session.getScreenLastRowColumn(row);\r\n\t var lineRange = new Range(row, range.start.column, row, curr);\r\n\t for (; row <= end; row++) {\r\n\t lineRange.start.row = lineRange.end.row = row;\r\n\t lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\r\n\t lineRange.end.column = next;\r\n\t prev = curr;\r\n\t curr = next;\r\n\t next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\r\n\t this.drawSingleLineMarker(stringBuilder, lineRange, \r\n\t clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\"\r\n\t + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end),\r\n\t layerConfig, row == end ? 0 : 1, extraStyle);\r\n\t }\r\n\t };\r\n\t this.drawMultiLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\r\n\t var padding = this.$padding;\r\n\t var height = config.lineHeight;\r\n\t var top = this.$getTop(range.start.row, config);\r\n\t var left = padding + range.start.column * config.characterWidth;\r\n\t extraStyle = extraStyle || \"\";\r\n\r\n\t stringBuilder.push(\r\n\t \"<div class='\", clazz, \" ace_br1 ace_start' style='\",\r\n\t \"height:\", height, \"px;\",\r\n\t \"right:0;\",\r\n\t \"top:\", top, \"px;\",\r\n\t \"left:\", left, \"px;\", extraStyle, \"'></div>\"\r\n\t );\r\n\t top = this.$getTop(range.end.row, config);\r\n\t var width = range.end.column * config.characterWidth;\r\n\r\n\t stringBuilder.push(\r\n\t \"<div class='\", clazz, \" ace_br12' style='\",\r\n\t \"height:\", height, \"px;\",\r\n\t \"width:\", width, \"px;\",\r\n\t \"top:\", top, \"px;\",\r\n\t \"left:\", padding, \"px;\", extraStyle, \"'></div>\"\r\n\t );\r\n\t height = (range.end.row - range.start.row - 1) * config.lineHeight;\r\n\t if (height <= 0)\r\n\t return;\r\n\t top = this.$getTop(range.start.row + 1, config);\r\n\t \r\n\t var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\r\n\r\n\t stringBuilder.push(\r\n\t \"<div class='\", clazz, (radiusClass ? \" ace_br\" + radiusClass : \"\"), \"' style='\",\r\n\t \"height:\", height, \"px;\",\r\n\t \"right:0;\",\r\n\t \"top:\", top, \"px;\",\r\n\t \"left:\", padding, \"px;\", extraStyle, \"'></div>\"\r\n\t );\r\n\t };\r\n\t this.drawSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) {\r\n\t var height = config.lineHeight;\r\n\t var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\r\n\r\n\t var top = this.$getTop(range.start.row, config);\r\n\t var left = this.$padding + range.start.column * config.characterWidth;\r\n\r\n\t stringBuilder.push(\r\n\t \"<div class='\", clazz, \"' style='\",\r\n\t \"height:\", height, \"px;\",\r\n\t \"width:\", width, \"px;\",\r\n\t \"top:\", top, \"px;\",\r\n\t \"left:\", left, \"px;\", extraStyle || \"\", \"'></div>\"\r\n\t );\r\n\t };\r\n\r\n\t this.drawFullLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\r\n\t var top = this.$getTop(range.start.row, config);\r\n\t var height = config.lineHeight;\r\n\t if (range.start.row != range.end.row)\r\n\t height += this.$getTop(range.end.row, config) - top;\r\n\r\n\t stringBuilder.push(\r\n\t \"<div class='\", clazz, \"' style='\",\r\n\t \"height:\", height, \"px;\",\r\n\t \"top:\", top, \"px;\",\r\n\t \"left:0;right:0;\", extraStyle || \"\", \"'></div>\"\r\n\t );\r\n\t };\r\n\t \r\n\t this.drawScreenLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\r\n\t var top = this.$getTop(range.start.row, config);\r\n\t var height = config.lineHeight;\r\n\r\n\t stringBuilder.push(\r\n\t \"<div class='\", clazz, \"' style='\",\r\n\t \"height:\", height, \"px;\",\r\n\t \"top:\", top, \"px;\",\r\n\t \"left:0;right:0;\", extraStyle || \"\", \"'></div>\"\r\n\t );\r\n\t };\r\n\r\n\t}).call(Marker.prototype);\r\n\r\n\texports.Marker = Marker;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar lang = acequire(\"../lib/lang\");\r\n\tvar useragent = acequire(\"../lib/useragent\");\r\n\tvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\r\n\r\n\tvar Text = function(parentEl) {\r\n\t this.element = dom.createElement(\"div\");\r\n\t this.element.className = \"ace_layer ace_text-layer\";\r\n\t parentEl.appendChild(this.element);\r\n\t this.$updateEolChar = this.$updateEolChar.bind(this);\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\r\n\t this.EOF_CHAR = \"\\xB6\";\r\n\t this.EOL_CHAR_LF = \"\\xAC\";\r\n\t this.EOL_CHAR_CRLF = \"\\xa4\";\r\n\t this.EOL_CHAR = this.EOL_CHAR_LF;\r\n\t this.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\r\n\t this.SPACE_CHAR = \"\\xB7\";\r\n\t this.$padding = 0;\r\n\r\n\t this.$updateEolChar = function() {\r\n\t var EOL_CHAR = this.session.doc.getNewLineCharacter() == \"\\n\"\r\n\t ? this.EOL_CHAR_LF\r\n\t : this.EOL_CHAR_CRLF;\r\n\t if (this.EOL_CHAR != EOL_CHAR) {\r\n\t this.EOL_CHAR = EOL_CHAR;\r\n\t return true;\r\n\t }\r\n\t }\r\n\r\n\t this.setPadding = function(padding) {\r\n\t this.$padding = padding;\r\n\t this.element.style.padding = \"0 \" + padding + \"px\";\r\n\t };\r\n\r\n\t this.getLineHeight = function() {\r\n\t return this.$fontMetrics.$characterSize.height || 0;\r\n\t };\r\n\r\n\t this.getCharacterWidth = function() {\r\n\t return this.$fontMetrics.$characterSize.width || 0;\r\n\t };\r\n\t \r\n\t this.$setFontMetrics = function(measure) {\r\n\t this.$fontMetrics = measure;\r\n\t this.$fontMetrics.on(\"changeCharacterSize\", function(e) {\r\n\t this._signal(\"changeCharacterSize\", e);\r\n\t }.bind(this));\r\n\t this.$pollSizeChanges();\r\n\t }\r\n\r\n\t this.checkForSizeChanges = function() {\r\n\t this.$fontMetrics.checkForSizeChanges();\r\n\t };\r\n\t this.$pollSizeChanges = function() {\r\n\t return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\r\n\t };\r\n\t this.setSession = function(session) {\r\n\t this.session = session;\r\n\t if (session)\r\n\t this.$computeTabString();\r\n\t };\r\n\r\n\t this.showInvisibles = false;\r\n\t this.setShowInvisibles = function(showInvisibles) {\r\n\t if (this.showInvisibles == showInvisibles)\r\n\t return false;\r\n\r\n\t this.showInvisibles = showInvisibles;\r\n\t this.$computeTabString();\r\n\t return true;\r\n\t };\r\n\r\n\t this.displayIndentGuides = true;\r\n\t this.setDisplayIndentGuides = function(display) {\r\n\t if (this.displayIndentGuides == display)\r\n\t return false;\r\n\r\n\t this.displayIndentGuides = display;\r\n\t this.$computeTabString();\r\n\t return true;\r\n\t };\r\n\r\n\t this.$tabStrings = [];\r\n\t this.onChangeTabSize =\r\n\t this.$computeTabString = function() {\r\n\t var tabSize = this.session.getTabSize();\r\n\t this.tabSize = tabSize;\r\n\t var tabStr = this.$tabStrings = [0];\r\n\t for (var i = 1; i < tabSize + 1; i++) {\r\n\t if (this.showInvisibles) {\r\n\t tabStr.push(\"<span class='ace_invisible ace_invisible_tab'>\"\r\n\t + lang.stringRepeat(this.TAB_CHAR, i)\r\n\t + \"</span>\");\r\n\t } else {\r\n\t tabStr.push(lang.stringRepeat(\" \", i));\r\n\t }\r\n\t }\r\n\t if (this.displayIndentGuides) {\r\n\t this.$indentGuideRe = /\\s\\S| \\t|\\t |\\s$/;\r\n\t var className = \"ace_indent-guide\";\r\n\t var spaceClass = \"\";\r\n\t var tabClass = \"\";\r\n\t if (this.showInvisibles) {\r\n\t className += \" ace_invisible\";\r\n\t spaceClass = \" ace_invisible_space\";\r\n\t tabClass = \" ace_invisible_tab\";\r\n\t var spaceContent = lang.stringRepeat(this.SPACE_CHAR, this.tabSize);\r\n\t var tabContent = lang.stringRepeat(this.TAB_CHAR, this.tabSize);\r\n\t } else{\r\n\t var spaceContent = lang.stringRepeat(\" \", this.tabSize);\r\n\t var tabContent = spaceContent;\r\n\t }\r\n\r\n\t this.$tabStrings[\" \"] = \"<span class='\" + className + spaceClass + \"'>\" + spaceContent + \"</span>\";\r\n\t this.$tabStrings[\"\\t\"] = \"<span class='\" + className + tabClass + \"'>\" + tabContent + \"</span>\";\r\n\t }\r\n\t };\r\n\r\n\t this.updateLines = function(config, firstRow, lastRow) {\r\n\t if (this.config.lastRow != config.lastRow ||\r\n\t this.config.firstRow != config.firstRow) {\r\n\t this.scrollLines(config);\r\n\t }\r\n\t this.config = config;\r\n\r\n\t var first = Math.max(firstRow, config.firstRow);\r\n\t var last = Math.min(lastRow, config.lastRow);\r\n\r\n\t var lineElements = this.element.childNodes;\r\n\t var lineElementsIdx = 0;\r\n\r\n\t for (var row = config.firstRow; row < first; row++) {\r\n\t var foldLine = this.session.getFoldLine(row);\r\n\t if (foldLine) {\r\n\t if (foldLine.containsRow(first)) {\r\n\t first = foldLine.start.row;\r\n\t break;\r\n\t } else {\r\n\t row = foldLine.end.row;\r\n\t }\r\n\t }\r\n\t lineElementsIdx ++;\r\n\t }\r\n\r\n\t var row = first;\r\n\t var foldLine = this.session.getNextFoldLine(row);\r\n\t var foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\r\n\t while (true) {\r\n\t if (row > foldStart) {\r\n\t row = foldLine.end.row+1;\r\n\t foldLine = this.session.getNextFoldLine(row, foldLine);\r\n\t foldStart = foldLine ? foldLine.start.row :Infinity;\r\n\t }\r\n\t if (row > last)\r\n\t break;\r\n\r\n\t var lineElement = lineElements[lineElementsIdx++];\r\n\t if (lineElement) {\r\n\t var html = [];\r\n\t this.$renderLine(\r\n\t html, row, !this.$useLineGroups(), row == foldStart ? foldLine : false\r\n\t );\r\n\t lineElement.style.height = config.lineHeight * this.session.getRowLength(row) + \"px\";\r\n\t lineElement.innerHTML = html.join(\"\");\r\n\t }\r\n\t row++;\r\n\t }\r\n\t };\r\n\r\n\t this.scrollLines = function(config) {\r\n\t var oldConfig = this.config;\r\n\t this.config = config;\r\n\r\n\t if (!oldConfig || oldConfig.lastRow < config.firstRow)\r\n\t return this.update(config);\r\n\r\n\t if (config.lastRow < oldConfig.firstRow)\r\n\t return this.update(config);\r\n\r\n\t var el = this.element;\r\n\t if (oldConfig.firstRow < config.firstRow)\r\n\t for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--)\r\n\t el.removeChild(el.firstChild);\r\n\r\n\t if (oldConfig.lastRow > config.lastRow)\r\n\t for (var row=this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row>0; row--)\r\n\t el.removeChild(el.lastChild);\r\n\r\n\t if (config.firstRow < oldConfig.firstRow) {\r\n\t var fragment = this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1);\r\n\t if (el.firstChild)\r\n\t el.insertBefore(fragment, el.firstChild);\r\n\t else\r\n\t el.appendChild(fragment);\r\n\t }\r\n\r\n\t if (config.lastRow > oldConfig.lastRow) {\r\n\t var fragment = this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow);\r\n\t el.appendChild(fragment);\r\n\t }\r\n\t };\r\n\r\n\t this.$renderLinesFragment = function(config, firstRow, lastRow) {\r\n\t var fragment = this.element.ownerDocument.createDocumentFragment();\r\n\t var row = firstRow;\r\n\t var foldLine = this.session.getNextFoldLine(row);\r\n\t var foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\r\n\t while (true) {\r\n\t if (row > foldStart) {\r\n\t row = foldLine.end.row+1;\r\n\t foldLine = this.session.getNextFoldLine(row, foldLine);\r\n\t foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\t }\r\n\t if (row > lastRow)\r\n\t break;\r\n\r\n\t var container = dom.createElement(\"div\");\r\n\r\n\t var html = [];\r\n\t this.$renderLine(html, row, false, row == foldStart ? foldLine : false);\r\n\t container.innerHTML = html.join(\"\");\r\n\t if (this.$useLineGroups()) {\r\n\t container.className = 'ace_line_group';\r\n\t fragment.appendChild(container);\r\n\t container.style.height = config.lineHeight * this.session.getRowLength(row) + \"px\";\r\n\r\n\t } else {\r\n\t while(container.firstChild)\r\n\t fragment.appendChild(container.firstChild);\r\n\t }\r\n\r\n\t row++;\r\n\t }\r\n\t return fragment;\r\n\t };\r\n\r\n\t this.update = function(config) {\r\n\t this.config = config;\r\n\r\n\t var html = [];\r\n\t var firstRow = config.firstRow, lastRow = config.lastRow;\r\n\r\n\t var row = firstRow;\r\n\t var foldLine = this.session.getNextFoldLine(row);\r\n\t var foldStart = foldLine ? foldLine.start.row : Infinity;\r\n\r\n\t while (true) {\r\n\t if (row > foldStart) {\r\n\t row = foldLine.end.row+1;\r\n\t foldLine = this.session.getNextFoldLine(row, foldLine);\r\n\t foldStart = foldLine ? foldLine.start.row :Infinity;\r\n\t }\r\n\t if (row > lastRow)\r\n\t break;\r\n\r\n\t if (this.$useLineGroups())\r\n\t html.push(\"<div class='ace_line_group' style='height:\", config.lineHeight*this.session.getRowLength(row), \"px'>\")\r\n\r\n\t this.$renderLine(html, row, false, row == foldStart ? foldLine : false);\r\n\r\n\t if (this.$useLineGroups())\r\n\t html.push(\"</div>\"); // end the line group\r\n\r\n\t row++;\r\n\t }\r\n\t this.element.innerHTML = html.join(\"\");\r\n\t };\r\n\r\n\t this.$textToken = {\r\n\t \"text\": true,\r\n\t \"rparen\": true,\r\n\t \"lparen\": true\r\n\t };\r\n\r\n\t this.$renderToken = function(stringBuilder, screenColumn, token, value) {\r\n\t var self = this;\r\n\t var replaceReg = /\\t|&|<|>|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF\\uFFF9-\\uFFFC])|[\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3000-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]/g;\r\n\t var replaceFunc = function(c, a, b, tabIdx, idx4) {\r\n\t if (a) {\r\n\t return self.showInvisibles\r\n\t ? \"<span class='ace_invisible ace_invisible_space'>\" + lang.stringRepeat(self.SPACE_CHAR, c.length) + \"</span>\"\r\n\t : c;\r\n\t } else if (c == \"&\") {\r\n\t return \"&#38;\";\r\n\t } else if (c == \"<\") {\r\n\t return \"&#60;\";\r\n\t } else if (c == \">\") {\r\n\t return \"&#62;\";\r\n\t } else if (c == \"\\t\") {\r\n\t var tabSize = self.session.getScreenTabSize(screenColumn + tabIdx);\r\n\t screenColumn += tabSize - 1;\r\n\t return self.$tabStrings[tabSize];\r\n\t } else if (c == \"\\u3000\") {\r\n\t var classToUse = self.showInvisibles ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\r\n\t var space = self.showInvisibles ? self.SPACE_CHAR : \"\";\r\n\t screenColumn += 1;\r\n\t return \"<span class='\" + classToUse + \"' style='width:\" +\r\n\t (self.config.characterWidth * 2) +\r\n\t \"px'>\" + space + \"</span>\";\r\n\t } else if (b) {\r\n\t return \"<span class='ace_invisible ace_invisible_space ace_invalid'>\" + self.SPACE_CHAR + \"</span>\";\r\n\t } else {\r\n\t screenColumn += 1;\r\n\t return \"<span class='ace_cjk' style='width:\" +\r\n\t (self.config.characterWidth * 2) +\r\n\t \"px'>\" + c + \"</span>\";\r\n\t }\r\n\t };\r\n\r\n\t var output = value.replace(replaceReg, replaceFunc);\r\n\r\n\t if (!this.$textToken[token.type]) {\r\n\t var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\r\n\t var style = \"\";\r\n\t if (token.type == \"fold\")\r\n\t style = \" style='width:\" + (token.value.length * this.config.characterWidth) + \"px;' \";\r\n\t stringBuilder.push(\"<span class='\", classes, \"'\", style, \">\", output, \"</span>\");\r\n\t }\r\n\t else {\r\n\t stringBuilder.push(output);\r\n\t }\r\n\t return screenColumn + value.length;\r\n\t };\r\n\r\n\t this.renderIndentGuide = function(stringBuilder, value, max) {\r\n\t var cols = value.search(this.$indentGuideRe);\r\n\t if (cols <= 0 || cols >= max)\r\n\t return value;\r\n\t if (value[0] == \" \") {\r\n\t cols -= cols % this.tabSize;\r\n\t stringBuilder.push(lang.stringRepeat(this.$tabStrings[\" \"], cols/this.tabSize));\r\n\t return value.substr(cols);\r\n\t } else if (value[0] == \"\\t\") {\r\n\t stringBuilder.push(lang.stringRepeat(this.$tabStrings[\"\\t\"], cols));\r\n\t return value.substr(cols);\r\n\t }\r\n\t return value;\r\n\t };\r\n\r\n\t this.$renderWrappedLine = function(stringBuilder, tokens, splits, onlyContents) {\r\n\t var chars = 0;\r\n\t var split = 0;\r\n\t var splitChars = splits[0];\r\n\t var screenColumn = 0;\r\n\r\n\t for (var i = 0; i < tokens.length; i++) {\r\n\t var token = tokens[i];\r\n\t var value = token.value;\r\n\t if (i == 0 && this.displayIndentGuides) {\r\n\t chars = value.length;\r\n\t value = this.renderIndentGuide(stringBuilder, value, splitChars);\r\n\t if (!value)\r\n\t continue;\r\n\t chars -= value.length;\r\n\t }\r\n\r\n\t if (chars + value.length < splitChars) {\r\n\t screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\r\n\t chars += value.length;\r\n\t } else {\r\n\t while (chars + value.length >= splitChars) {\r\n\t screenColumn = this.$renderToken(\r\n\t stringBuilder, screenColumn,\r\n\t token, value.substring(0, splitChars - chars)\r\n\t );\r\n\t value = value.substring(splitChars - chars);\r\n\t chars = splitChars;\r\n\r\n\t if (!onlyContents) {\r\n\t stringBuilder.push(\"</div>\",\r\n\t \"<div class='ace_line' style='height:\",\r\n\t this.config.lineHeight, \"px'>\"\r\n\t );\r\n\t }\r\n\r\n\t stringBuilder.push(lang.stringRepeat(\"\\xa0\", splits.indent));\r\n\r\n\t split ++;\r\n\t screenColumn = 0;\r\n\t splitChars = splits[split] || Number.MAX_VALUE;\r\n\t }\r\n\t if (value.length != 0) {\r\n\t chars += value.length;\r\n\t screenColumn = this.$renderToken(\r\n\t stringBuilder, screenColumn, token, value\r\n\t );\r\n\t }\r\n\t }\r\n\t }\r\n\t };\r\n\r\n\t this.$renderSimpleLine = function(stringBuilder, tokens) {\r\n\t var screenColumn = 0;\r\n\t var token = tokens[0];\r\n\t var value = token.value;\r\n\t if (this.displayIndentGuides)\r\n\t value = this.renderIndentGuide(stringBuilder, value);\r\n\t if (value)\r\n\t screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\r\n\t for (var i = 1; i < tokens.length; i++) {\r\n\t token = tokens[i];\r\n\t value = token.value;\r\n\t screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\r\n\t }\r\n\t };\r\n\t this.$renderLine = function(stringBuilder, row, onlyContents, foldLine) {\r\n\t if (!foldLine && foldLine != false)\r\n\t foldLine = this.session.getFoldLine(row);\r\n\r\n\t if (foldLine)\r\n\t var tokens = this.$getFoldLineTokens(row, foldLine);\r\n\t else\r\n\t var tokens = this.session.getTokens(row);\r\n\r\n\r\n\t if (!onlyContents) {\r\n\t stringBuilder.push(\r\n\t \"<div class='ace_line' style='height:\", \r\n\t this.config.lineHeight * (\r\n\t this.$useLineGroups() ? 1 :this.session.getRowLength(row)\r\n\t ), \"px'>\"\r\n\t );\r\n\t }\r\n\r\n\t if (tokens.length) {\r\n\t var splits = this.session.getRowSplitData(row);\r\n\t if (splits && splits.length)\r\n\t this.$renderWrappedLine(stringBuilder, tokens, splits, onlyContents);\r\n\t else\r\n\t this.$renderSimpleLine(stringBuilder, tokens);\r\n\t }\r\n\r\n\t if (this.showInvisibles) {\r\n\t if (foldLine)\r\n\t row = foldLine.end.row\r\n\r\n\t stringBuilder.push(\r\n\t \"<span class='ace_invisible ace_invisible_eol'>\",\r\n\t row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR,\r\n\t \"</span>\"\r\n\t );\r\n\t }\r\n\t if (!onlyContents)\r\n\t stringBuilder.push(\"</div>\");\r\n\t };\r\n\r\n\t this.$getFoldLineTokens = function(row, foldLine) {\r\n\t var session = this.session;\r\n\t var renderTokens = [];\r\n\r\n\t function addTokens(tokens, from, to) {\r\n\t var idx = 0, col = 0;\r\n\t while ((col + tokens[idx].value.length) < from) {\r\n\t col += tokens[idx].value.length;\r\n\t idx++;\r\n\r\n\t if (idx == tokens.length)\r\n\t return;\r\n\t }\r\n\t if (col != from) {\r\n\t var value = tokens[idx].value.substring(from - col);\r\n\t if (value.length > (to - from))\r\n\t value = value.substring(0, to - from);\r\n\r\n\t renderTokens.push({\r\n\t type: tokens[idx].type,\r\n\t value: value\r\n\t });\r\n\r\n\t col = from + value.length;\r\n\t idx += 1;\r\n\t }\r\n\r\n\t while (col < to && idx < tokens.length) {\r\n\t var value = tokens[idx].value;\r\n\t if (value.length + col > to) {\r\n\t renderTokens.push({\r\n\t type: tokens[idx].type,\r\n\t value: value.substring(0, to - col)\r\n\t });\r\n\t } else\r\n\t renderTokens.push(tokens[idx]);\r\n\t col += value.length;\r\n\t idx += 1;\r\n\t }\r\n\t }\r\n\r\n\t var tokens = session.getTokens(row);\r\n\t foldLine.walk(function(placeholder, row, column, lastColumn, isNewRow) {\r\n\t if (placeholder != null) {\r\n\t renderTokens.push({\r\n\t type: \"fold\",\r\n\t value: placeholder\r\n\t });\r\n\t } else {\r\n\t if (isNewRow)\r\n\t tokens = session.getTokens(row);\r\n\r\n\t if (tokens.length)\r\n\t addTokens(tokens, lastColumn, column);\r\n\t }\r\n\t }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\r\n\r\n\t return renderTokens;\r\n\t };\r\n\r\n\t this.$useLineGroups = function() {\r\n\t return this.session.getUseWrapMode();\r\n\t };\r\n\r\n\t this.destroy = function() {\r\n\t clearInterval(this.$pollSizeChangesTimer);\r\n\t if (this.$measureNode)\r\n\t this.$measureNode.parentNode.removeChild(this.$measureNode);\r\n\t delete this.$measureNode;\r\n\t };\r\n\r\n\t}).call(Text.prototype);\r\n\r\n\texports.Text = Text;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar isIE8;\r\n\r\n\tvar Cursor = function(parentEl) {\r\n\t this.element = dom.createElement(\"div\");\r\n\t this.element.className = \"ace_layer ace_cursor-layer\";\r\n\t parentEl.appendChild(this.element);\r\n\t \r\n\t if (isIE8 === undefined)\r\n\t isIE8 = !(\"opacity\" in this.element.style);\r\n\r\n\t this.isVisible = false;\r\n\t this.isBlinking = true;\r\n\t this.blinkInterval = 1000;\r\n\t this.smoothBlinking = false;\r\n\r\n\t this.cursors = [];\r\n\t this.cursor = this.addCursor();\r\n\t dom.addCssClass(this.element, \"ace_hidden-cursors\");\r\n\t this.$updateCursors = (isIE8\r\n\t ? this.$updateVisibility\r\n\t : this.$updateOpacity).bind(this);\r\n\t};\r\n\r\n\t(function() {\r\n\t \r\n\t this.$updateVisibility = function(val) {\r\n\t var cursors = this.cursors;\r\n\t for (var i = cursors.length; i--; )\r\n\t cursors[i].style.visibility = val ? \"\" : \"hidden\";\r\n\t };\r\n\t this.$updateOpacity = function(val) {\r\n\t var cursors = this.cursors;\r\n\t for (var i = cursors.length; i--; )\r\n\t cursors[i].style.opacity = val ? \"\" : \"0\";\r\n\t };\r\n\t \r\n\r\n\t this.$padding = 0;\r\n\t this.setPadding = function(padding) {\r\n\t this.$padding = padding;\r\n\t };\r\n\r\n\t this.setSession = function(session) {\r\n\t this.session = session;\r\n\t };\r\n\r\n\t this.setBlinking = function(blinking) {\r\n\t if (blinking != this.isBlinking){\r\n\t this.isBlinking = blinking;\r\n\t this.restartTimer();\r\n\t }\r\n\t };\r\n\r\n\t this.setBlinkInterval = function(blinkInterval) {\r\n\t if (blinkInterval != this.blinkInterval){\r\n\t this.blinkInterval = blinkInterval;\r\n\t this.restartTimer();\r\n\t }\r\n\t };\r\n\r\n\t this.setSmoothBlinking = function(smoothBlinking) {\r\n\t if (smoothBlinking != this.smoothBlinking && !isIE8) {\r\n\t this.smoothBlinking = smoothBlinking;\r\n\t dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\r\n\t this.$updateCursors(true);\r\n\t this.$updateCursors = (this.$updateOpacity).bind(this);\r\n\t this.restartTimer();\r\n\t }\r\n\t };\r\n\r\n\t this.addCursor = function() {\r\n\t var el = dom.createElement(\"div\");\r\n\t el.className = \"ace_cursor\";\r\n\t this.element.appendChild(el);\r\n\t this.cursors.push(el);\r\n\t return el;\r\n\t };\r\n\r\n\t this.removeCursor = function() {\r\n\t if (this.cursors.length > 1) {\r\n\t var el = this.cursors.pop();\r\n\t el.parentNode.removeChild(el);\r\n\t return el;\r\n\t }\r\n\t };\r\n\r\n\t this.hideCursor = function() {\r\n\t this.isVisible = false;\r\n\t dom.addCssClass(this.element, \"ace_hidden-cursors\");\r\n\t this.restartTimer();\r\n\t };\r\n\r\n\t this.showCursor = function() {\r\n\t this.isVisible = true;\r\n\t dom.removeCssClass(this.element, \"ace_hidden-cursors\");\r\n\t this.restartTimer();\r\n\t };\r\n\r\n\t this.restartTimer = function() {\r\n\t var update = this.$updateCursors;\r\n\t clearInterval(this.intervalId);\r\n\t clearTimeout(this.timeoutId);\r\n\t if (this.smoothBlinking) {\r\n\t dom.removeCssClass(this.element, \"ace_smooth-blinking\");\r\n\t }\r\n\t \r\n\t update(true);\r\n\r\n\t if (!this.isBlinking || !this.blinkInterval || !this.isVisible)\r\n\t return;\r\n\r\n\t if (this.smoothBlinking) {\r\n\t setTimeout(function(){\r\n\t dom.addCssClass(this.element, \"ace_smooth-blinking\");\r\n\t }.bind(this));\r\n\t }\r\n\t \r\n\t var blink = function(){\r\n\t this.timeoutId = setTimeout(function() {\r\n\t update(false);\r\n\t }, 0.6 * this.blinkInterval);\r\n\t }.bind(this);\r\n\r\n\t this.intervalId = setInterval(function() {\r\n\t update(true);\r\n\t blink();\r\n\t }, this.blinkInterval);\r\n\r\n\t blink();\r\n\t };\r\n\r\n\t this.getPixelPosition = function(position, onScreen) {\r\n\t if (!this.config || !this.session)\r\n\t return {left : 0, top : 0};\r\n\r\n\t if (!position)\r\n\t position = this.session.selection.getCursor();\r\n\t var pos = this.session.documentToScreenPosition(position);\r\n\t var cursorLeft = this.$padding + pos.column * this.config.characterWidth;\r\n\t var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\r\n\t this.config.lineHeight;\r\n\r\n\t return {left : cursorLeft, top : cursorTop};\r\n\t };\r\n\r\n\t this.update = function(config) {\r\n\t this.config = config;\r\n\r\n\t var selections = this.session.$selectionMarkers;\r\n\t var i = 0, cursorIndex = 0;\r\n\r\n\t if (selections === undefined || selections.length === 0){\r\n\t selections = [{cursor: null}];\r\n\t }\r\n\r\n\t for (var i = 0, n = selections.length; i < n; i++) {\r\n\t var pixelPos = this.getPixelPosition(selections[i].cursor, true);\r\n\t if ((pixelPos.top > config.height + config.offset ||\r\n\t pixelPos.top < 0) && i > 1) {\r\n\t continue;\r\n\t }\r\n\r\n\t var style = (this.cursors[cursorIndex++] || this.addCursor()).style;\r\n\t \r\n\t if (!this.drawCursor) {\r\n\t style.left = pixelPos.left + \"px\";\r\n\t style.top = pixelPos.top + \"px\";\r\n\t style.width = config.characterWidth + \"px\";\r\n\t style.height = config.lineHeight + \"px\";\r\n\t } else {\r\n\t this.drawCursor(style, pixelPos, config, selections[i], this.session);\r\n\t }\r\n\t }\r\n\t while (this.cursors.length > cursorIndex)\r\n\t this.removeCursor();\r\n\r\n\t var overwrite = this.session.getOverwrite();\r\n\t this.$setOverwrite(overwrite);\r\n\t this.$pixelPos = pixelPos;\r\n\t this.restartTimer();\r\n\t };\r\n\t \r\n\t this.drawCursor = null;\r\n\r\n\t this.$setOverwrite = function(overwrite) {\r\n\t if (overwrite != this.overwrite) {\r\n\t this.overwrite = overwrite;\r\n\t if (overwrite)\r\n\t dom.addCssClass(this.element, \"ace_overwrite-cursors\");\r\n\t else\r\n\t dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\r\n\t }\r\n\t };\r\n\r\n\t this.destroy = function() {\r\n\t clearInterval(this.intervalId);\r\n\t clearTimeout(this.timeoutId);\r\n\t };\r\n\r\n\t}).call(Cursor.prototype);\r\n\r\n\texports.Cursor = Cursor;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar dom = acequire(\"./lib/dom\");\r\n\tvar event = acequire(\"./lib/event\");\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\tvar ScrollBar = function(parent) {\r\n\t this.element = dom.createElement(\"div\");\r\n\t this.element.className = \"ace_scrollbar ace_scrollbar\" + this.classSuffix;\r\n\r\n\t this.inner = dom.createElement(\"div\");\r\n\t this.inner.className = \"ace_scrollbar-inner\";\r\n\t this.element.appendChild(this.inner);\r\n\r\n\t parent.appendChild(this.element);\r\n\r\n\t this.setVisible(false);\r\n\t this.skipEvent = false;\r\n\r\n\t event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\r\n\t event.addListener(this.element, \"mousedown\", event.preventDefault);\r\n\t};\r\n\r\n\t(function() {\r\n\t oop.implement(this, EventEmitter);\r\n\r\n\t this.setVisible = function(isVisible) {\r\n\t this.element.style.display = isVisible ? \"\" : \"none\";\r\n\t this.isVisible = isVisible;\r\n\t };\r\n\t}).call(ScrollBar.prototype);\r\n\tvar VScrollBar = function(parent, renderer) {\r\n\t ScrollBar.call(this, parent);\r\n\t this.scrollTop = 0;\r\n\t renderer.$scrollbarWidth = \r\n\t this.width = dom.scrollbarWidth(parent.ownerDocument);\r\n\t this.inner.style.width =\r\n\t this.element.style.width = (this.width || 15) + 5 + \"px\";\r\n\t};\r\n\r\n\toop.inherits(VScrollBar, ScrollBar);\r\n\r\n\t(function() {\r\n\r\n\t this.classSuffix = '-v';\r\n\t this.onScroll = function() {\r\n\t if (!this.skipEvent) {\r\n\t this.scrollTop = this.element.scrollTop;\r\n\t this._emit(\"scroll\", {data: this.scrollTop});\r\n\t }\r\n\t this.skipEvent = false;\r\n\t };\r\n\t this.getWidth = function() {\r\n\t return this.isVisible ? this.width : 0;\r\n\t };\r\n\t this.setHeight = function(height) {\r\n\t this.element.style.height = height + \"px\";\r\n\t };\r\n\t this.setInnerHeight = function(height) {\r\n\t this.inner.style.height = height + \"px\";\r\n\t };\r\n\t this.setScrollHeight = function(height) {\r\n\t this.inner.style.height = height + \"px\";\r\n\t };\r\n\t this.setScrollTop = function(scrollTop) {\r\n\t if (this.scrollTop != scrollTop) {\r\n\t this.skipEvent = true;\r\n\t this.scrollTop = this.element.scrollTop = scrollTop;\r\n\t }\r\n\t };\r\n\r\n\t}).call(VScrollBar.prototype);\r\n\tvar HScrollBar = function(parent, renderer) {\r\n\t ScrollBar.call(this, parent);\r\n\t this.scrollLeft = 0;\r\n\t this.height = renderer.$scrollbarWidth;\r\n\t this.inner.style.height =\r\n\t this.element.style.height = (this.height || 15) + 5 + \"px\";\r\n\t};\r\n\r\n\toop.inherits(HScrollBar, ScrollBar);\r\n\r\n\t(function() {\r\n\r\n\t this.classSuffix = '-h';\r\n\t this.onScroll = function() {\r\n\t if (!this.skipEvent) {\r\n\t this.scrollLeft = this.element.scrollLeft;\r\n\t this._emit(\"scroll\", {data: this.scrollLeft});\r\n\t }\r\n\t this.skipEvent = false;\r\n\t };\r\n\t this.getHeight = function() {\r\n\t return this.isVisible ? this.height : 0;\r\n\t };\r\n\t this.setWidth = function(width) {\r\n\t this.element.style.width = width + \"px\";\r\n\t };\r\n\t this.setInnerWidth = function(width) {\r\n\t this.inner.style.width = width + \"px\";\r\n\t };\r\n\t this.setScrollWidth = function(width) {\r\n\t this.inner.style.width = width + \"px\";\r\n\t };\r\n\t this.setScrollLeft = function(scrollLeft) {\r\n\t if (this.scrollLeft != scrollLeft) {\r\n\t this.skipEvent = true;\r\n\t this.scrollLeft = this.element.scrollLeft = scrollLeft;\r\n\t }\r\n\t };\r\n\r\n\t}).call(HScrollBar.prototype);\r\n\r\n\r\n\texports.ScrollBar = VScrollBar; // backward compatibility\r\n\texports.ScrollBarV = VScrollBar; // backward compatibility\r\n\texports.ScrollBarH = HScrollBar; // backward compatibility\r\n\r\n\texports.VScrollBar = VScrollBar;\r\n\texports.HScrollBar = HScrollBar;\r\n\t});\r\n\r\n\tace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar event = acequire(\"./lib/event\");\r\n\r\n\r\n\tvar RenderLoop = function(onRender, win) {\r\n\t this.onRender = onRender;\r\n\t this.pending = false;\r\n\t this.changes = 0;\r\n\t this.window = win || window;\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\r\n\t this.schedule = function(change) {\r\n\t this.changes = this.changes | change;\r\n\t if (!this.pending && this.changes) {\r\n\t this.pending = true;\r\n\t var _self = this;\r\n\t event.nextFrame(function() {\r\n\t _self.pending = false;\r\n\t var changes;\r\n\t while (changes = _self.changes) {\r\n\t _self.changes = 0;\r\n\t _self.onRender(changes);\r\n\t }\r\n\t }, this.window);\r\n\t }\r\n\t };\r\n\r\n\t}).call(RenderLoop.prototype);\r\n\r\n\texports.RenderLoop = RenderLoop;\r\n\t});\r\n\r\n\tace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar lang = acequire(\"../lib/lang\");\r\n\tvar useragent = acequire(\"../lib/useragent\");\r\n\tvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\r\n\r\n\tvar CHAR_COUNT = 0;\r\n\r\n\tvar FontMetrics = exports.FontMetrics = function(parentEl) {\r\n\t this.el = dom.createElement(\"div\");\r\n\t this.$setMeasureNodeStyles(this.el.style, true);\r\n\t \r\n\t this.$main = dom.createElement(\"div\");\r\n\t this.$setMeasureNodeStyles(this.$main.style);\r\n\t \r\n\t this.$measureNode = dom.createElement(\"div\");\r\n\t this.$setMeasureNodeStyles(this.$measureNode.style);\r\n\t \r\n\t \r\n\t this.el.appendChild(this.$main);\r\n\t this.el.appendChild(this.$measureNode);\r\n\t parentEl.appendChild(this.el);\r\n\t \r\n\t if (!CHAR_COUNT)\r\n\t this.$testFractionalRect();\r\n\t this.$measureNode.innerHTML = lang.stringRepeat(\"X\", CHAR_COUNT);\r\n\t \r\n\t this.$characterSize = {width: 0, height: 0};\r\n\t this.checkForSizeChanges();\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\t \r\n\t this.$characterSize = {width: 0, height: 0};\r\n\t \r\n\t this.$testFractionalRect = function() {\r\n\t var el = dom.createElement(\"div\");\r\n\t this.$setMeasureNodeStyles(el.style);\r\n\t el.style.width = \"0.2px\";\r\n\t document.documentElement.appendChild(el);\r\n\t var w = el.getBoundingClientRect().width;\r\n\t if (w > 0 && w < 1)\r\n\t CHAR_COUNT = 50;\r\n\t else\r\n\t CHAR_COUNT = 100;\r\n\t el.parentNode.removeChild(el);\r\n\t };\r\n\t \r\n\t this.$setMeasureNodeStyles = function(style, isRoot) {\r\n\t style.width = style.height = \"auto\";\r\n\t style.left = style.top = \"0px\";\r\n\t style.visibility = \"hidden\";\r\n\t style.position = \"absolute\";\r\n\t style.whiteSpace = \"pre\";\r\n\r\n\t if (useragent.isIE < 8) {\r\n\t style[\"font-family\"] = \"inherit\";\r\n\t } else {\r\n\t style.font = \"inherit\";\r\n\t }\r\n\t style.overflow = isRoot ? \"hidden\" : \"visible\";\r\n\t };\r\n\r\n\t this.checkForSizeChanges = function() {\r\n\t var size = this.$measureSizes();\r\n\t if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\r\n\t this.$measureNode.style.fontWeight = \"bold\";\r\n\t var boldSize = this.$measureSizes();\r\n\t this.$measureNode.style.fontWeight = \"\";\r\n\t this.$characterSize = size;\r\n\t this.charSizes = Object.create(null);\r\n\t this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\r\n\t this._emit(\"changeCharacterSize\", {data: size});\r\n\t }\r\n\t };\r\n\r\n\t this.$pollSizeChanges = function() {\r\n\t if (this.$pollSizeChangesTimer)\r\n\t return this.$pollSizeChangesTimer;\r\n\t var self = this;\r\n\t return this.$pollSizeChangesTimer = setInterval(function() {\r\n\t self.checkForSizeChanges();\r\n\t }, 500);\r\n\t };\r\n\t \r\n\t this.setPolling = function(val) {\r\n\t if (val) {\r\n\t this.$pollSizeChanges();\r\n\t } else if (this.$pollSizeChangesTimer) {\r\n\t clearInterval(this.$pollSizeChangesTimer);\r\n\t this.$pollSizeChangesTimer = 0;\r\n\t }\r\n\t };\r\n\r\n\t this.$measureSizes = function() {\r\n\t if (CHAR_COUNT === 50) {\r\n\t var rect = null;\r\n\t try { \r\n\t rect = this.$measureNode.getBoundingClientRect();\r\n\t } catch(e) {\r\n\t rect = {width: 0, height:0 };\r\n\t }\r\n\t var size = {\r\n\t height: rect.height,\r\n\t width: rect.width / CHAR_COUNT\r\n\t };\r\n\t } else {\r\n\t var size = {\r\n\t height: this.$measureNode.clientHeight,\r\n\t width: this.$measureNode.clientWidth / CHAR_COUNT\r\n\t };\r\n\t }\r\n\t if (size.width === 0 || size.height === 0)\r\n\t return null;\r\n\t return size;\r\n\t };\r\n\r\n\t this.$measureCharWidth = function(ch) {\r\n\t this.$main.innerHTML = lang.stringRepeat(ch, CHAR_COUNT);\r\n\t var rect = this.$main.getBoundingClientRect();\r\n\t return rect.width / CHAR_COUNT;\r\n\t };\r\n\t \r\n\t this.getCharacterWidth = function(ch) {\r\n\t var w = this.charSizes[ch];\r\n\t if (w === undefined) {\r\n\t w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\r\n\t }\r\n\t return w;\r\n\t };\r\n\r\n\t this.destroy = function() {\r\n\t clearInterval(this.$pollSizeChangesTimer);\r\n\t if (this.el && this.el.parentNode)\r\n\t this.el.parentNode.removeChild(this.el);\r\n\t };\r\n\r\n\t}).call(FontMetrics.prototype);\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/config\",\"ace/lib/useragent\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar dom = acequire(\"./lib/dom\");\r\n\tvar config = acequire(\"./config\");\r\n\tvar useragent = acequire(\"./lib/useragent\");\r\n\tvar GutterLayer = acequire(\"./layer/gutter\").Gutter;\r\n\tvar MarkerLayer = acequire(\"./layer/marker\").Marker;\r\n\tvar TextLayer = acequire(\"./layer/text\").Text;\r\n\tvar CursorLayer = acequire(\"./layer/cursor\").Cursor;\r\n\tvar HScrollBar = acequire(\"./scrollbar\").HScrollBar;\r\n\tvar VScrollBar = acequire(\"./scrollbar\").VScrollBar;\r\n\tvar RenderLoop = acequire(\"./renderloop\").RenderLoop;\r\n\tvar FontMetrics = acequire(\"./layer/font_metrics\").FontMetrics;\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\tvar editorCss = \".ace_editor {\\\r\n\tposition: relative;\\\r\n\toverflow: hidden;\\\r\n\tfont: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\\\r\n\tdirection: ltr;\\\r\n\t}\\\r\n\t.ace_scroller {\\\r\n\tposition: absolute;\\\r\n\toverflow: hidden;\\\r\n\ttop: 0;\\\r\n\tbottom: 0;\\\r\n\tbackground-color: inherit;\\\r\n\t-ms-user-select: none;\\\r\n\t-moz-user-select: none;\\\r\n\t-webkit-user-select: none;\\\r\n\tuser-select: none;\\\r\n\tcursor: text;\\\r\n\t}\\\r\n\t.ace_content {\\\r\n\tposition: absolute;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tmin-width: 100%;\\\r\n\t}\\\r\n\t.ace_dragging .ace_scroller:before{\\\r\n\tposition: absolute;\\\r\n\ttop: 0;\\\r\n\tleft: 0;\\\r\n\tright: 0;\\\r\n\tbottom: 0;\\\r\n\tcontent: '';\\\r\n\tbackground: rgba(250, 250, 250, 0.01);\\\r\n\tz-index: 1000;\\\r\n\t}\\\r\n\t.ace_dragging.ace_dark .ace_scroller:before{\\\r\n\tbackground: rgba(0, 0, 0, 0.01);\\\r\n\t}\\\r\n\t.ace_selecting, .ace_selecting * {\\\r\n\tcursor: text !important;\\\r\n\t}\\\r\n\t.ace_gutter {\\\r\n\tposition: absolute;\\\r\n\toverflow : hidden;\\\r\n\twidth: auto;\\\r\n\ttop: 0;\\\r\n\tbottom: 0;\\\r\n\tleft: 0;\\\r\n\tcursor: default;\\\r\n\tz-index: 4;\\\r\n\t-ms-user-select: none;\\\r\n\t-moz-user-select: none;\\\r\n\t-webkit-user-select: none;\\\r\n\tuser-select: none;\\\r\n\t}\\\r\n\t.ace_gutter-active-line {\\\r\n\tposition: absolute;\\\r\n\tleft: 0;\\\r\n\tright: 0;\\\r\n\t}\\\r\n\t.ace_scroller.ace_scroll-left {\\\r\n\tbox-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\\\r\n\t}\\\r\n\t.ace_gutter-cell {\\\r\n\tpadding-left: 19px;\\\r\n\tpadding-right: 6px;\\\r\n\tbackground-repeat: no-repeat;\\\r\n\t}\\\r\n\t.ace_gutter-cell.ace_error {\\\r\n\tbackground-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==\\\");\\\r\n\tbackground-repeat: no-repeat;\\\r\n\tbackground-position: 2px center;\\\r\n\t}\\\r\n\t.ace_gutter-cell.ace_warning {\\\r\n\tbackground-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==\\\");\\\r\n\tbackground-position: 2px center;\\\r\n\t}\\\r\n\t.ace_gutter-cell.ace_info {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\\\");\\\r\n\tbackground-position: 2px center;\\\r\n\t}\\\r\n\t.ace_dark .ace_gutter-cell.ace_info {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\\\");\\\r\n\t}\\\r\n\t.ace_scrollbar {\\\r\n\tposition: absolute;\\\r\n\tright: 0;\\\r\n\tbottom: 0;\\\r\n\tz-index: 6;\\\r\n\t}\\\r\n\t.ace_scrollbar-inner {\\\r\n\tposition: absolute;\\\r\n\tcursor: text;\\\r\n\tleft: 0;\\\r\n\ttop: 0;\\\r\n\t}\\\r\n\t.ace_scrollbar-v{\\\r\n\toverflow-x: hidden;\\\r\n\toverflow-y: scroll;\\\r\n\ttop: 0;\\\r\n\t}\\\r\n\t.ace_scrollbar-h {\\\r\n\toverflow-x: scroll;\\\r\n\toverflow-y: hidden;\\\r\n\tleft: 0;\\\r\n\t}\\\r\n\t.ace_print-margin {\\\r\n\tposition: absolute;\\\r\n\theight: 100%;\\\r\n\t}\\\r\n\t.ace_text-input {\\\r\n\tposition: absolute;\\\r\n\tz-index: 0;\\\r\n\twidth: 0.5em;\\\r\n\theight: 1em;\\\r\n\topacity: 0;\\\r\n\tbackground: transparent;\\\r\n\t-moz-appearance: none;\\\r\n\tappearance: none;\\\r\n\tborder: none;\\\r\n\tresize: none;\\\r\n\toutline: none;\\\r\n\toverflow: hidden;\\\r\n\tfont: inherit;\\\r\n\tpadding: 0 1px;\\\r\n\tmargin: 0 -1px;\\\r\n\ttext-indent: -1em;\\\r\n\t-ms-user-select: text;\\\r\n\t-moz-user-select: text;\\\r\n\t-webkit-user-select: text;\\\r\n\tuser-select: text;\\\r\n\twhite-space: pre!important;\\\r\n\t}\\\r\n\t.ace_text-input.ace_composition {\\\r\n\tbackground: inherit;\\\r\n\tcolor: inherit;\\\r\n\tz-index: 1000;\\\r\n\topacity: 1;\\\r\n\ttext-indent: 0;\\\r\n\t}\\\r\n\t.ace_layer {\\\r\n\tz-index: 1;\\\r\n\tposition: absolute;\\\r\n\toverflow: hidden;\\\r\n\tword-wrap: normal;\\\r\n\twhite-space: pre;\\\r\n\theight: 100%;\\\r\n\twidth: 100%;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tpointer-events: none;\\\r\n\t}\\\r\n\t.ace_gutter-layer {\\\r\n\tposition: relative;\\\r\n\twidth: auto;\\\r\n\ttext-align: right;\\\r\n\tpointer-events: auto;\\\r\n\t}\\\r\n\t.ace_text-layer {\\\r\n\tfont: inherit !important;\\\r\n\t}\\\r\n\t.ace_cjk {\\\r\n\tdisplay: inline-block;\\\r\n\ttext-align: center;\\\r\n\t}\\\r\n\t.ace_cursor-layer {\\\r\n\tz-index: 4;\\\r\n\t}\\\r\n\t.ace_cursor {\\\r\n\tz-index: 4;\\\r\n\tposition: absolute;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tborder-left: 2px solid;\\\r\n\ttransform: translatez(0);\\\r\n\t}\\\r\n\t.ace_slim-cursors .ace_cursor {\\\r\n\tborder-left-width: 1px;\\\r\n\t}\\\r\n\t.ace_overwrite-cursors .ace_cursor {\\\r\n\tborder-left-width: 0;\\\r\n\tborder-bottom: 1px solid;\\\r\n\t}\\\r\n\t.ace_hidden-cursors .ace_cursor {\\\r\n\topacity: 0.2;\\\r\n\t}\\\r\n\t.ace_smooth-blinking .ace_cursor {\\\r\n\t-webkit-transition: opacity 0.18s;\\\r\n\ttransition: opacity 0.18s;\\\r\n\t}\\\r\n\t.ace_editor.ace_multiselect .ace_cursor {\\\r\n\tborder-left-width: 1px;\\\r\n\t}\\\r\n\t.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\\r\n\tposition: absolute;\\\r\n\tz-index: 3;\\\r\n\t}\\\r\n\t.ace_marker-layer .ace_selection {\\\r\n\tposition: absolute;\\\r\n\tz-index: 5;\\\r\n\t}\\\r\n\t.ace_marker-layer .ace_bracket {\\\r\n\tposition: absolute;\\\r\n\tz-index: 6;\\\r\n\t}\\\r\n\t.ace_marker-layer .ace_active-line {\\\r\n\tposition: absolute;\\\r\n\tz-index: 2;\\\r\n\t}\\\r\n\t.ace_marker-layer .ace_selected-word {\\\r\n\tposition: absolute;\\\r\n\tz-index: 4;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\t}\\\r\n\t.ace_line .ace_fold {\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tdisplay: inline-block;\\\r\n\theight: 11px;\\\r\n\tmargin-top: -2px;\\\r\n\tvertical-align: middle;\\\r\n\tbackground-image:\\\r\n\turl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\r\n\turl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\\r\n\tbackground-repeat: no-repeat, repeat-x;\\\r\n\tbackground-position: center center, top left;\\\r\n\tcolor: transparent;\\\r\n\tborder: 1px solid black;\\\r\n\tborder-radius: 2px;\\\r\n\tcursor: pointer;\\\r\n\tpointer-events: auto;\\\r\n\t}\\\r\n\t.ace_dark .ace_fold {\\\r\n\t}\\\r\n\t.ace_fold:hover{\\\r\n\tbackground-image:\\\r\n\turl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\r\n\turl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\\r\n\t}\\\r\n\t.ace_tooltip {\\\r\n\tbackground-color: #FFF;\\\r\n\tbackground-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));\\\r\n\tbackground-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\\\r\n\tborder: 1px solid gray;\\\r\n\tborder-radius: 1px;\\\r\n\tbox-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\\r\n\tcolor: black;\\\r\n\tmax-width: 100%;\\\r\n\tpadding: 3px 4px;\\\r\n\tposition: fixed;\\\r\n\tz-index: 999999;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tcursor: default;\\\r\n\twhite-space: pre;\\\r\n\tword-wrap: break-word;\\\r\n\tline-height: normal;\\\r\n\tfont-style: normal;\\\r\n\tfont-weight: normal;\\\r\n\tletter-spacing: normal;\\\r\n\tpointer-events: none;\\\r\n\t}\\\r\n\t.ace_folding-enabled > .ace_gutter-cell {\\\r\n\tpadding-right: 13px;\\\r\n\t}\\\r\n\t.ace_fold-widget {\\\r\n\t-moz-box-sizing: border-box;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tmargin: 0 -12px 0 1px;\\\r\n\tdisplay: none;\\\r\n\twidth: 11px;\\\r\n\tvertical-align: top;\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\\r\n\tbackground-repeat: no-repeat;\\\r\n\tbackground-position: center;\\\r\n\tborder-radius: 3px;\\\r\n\tborder: 1px solid transparent;\\\r\n\tcursor: pointer;\\\r\n\t}\\\r\n\t.ace_folding-enabled .ace_fold-widget {\\\r\n\tdisplay: inline-block; \\\r\n\t}\\\r\n\t.ace_fold-widget.ace_end {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\\r\n\t}\\\r\n\t.ace_fold-widget.ace_closed {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\\r\n\t}\\\r\n\t.ace_fold-widget:hover {\\\r\n\tborder: 1px solid rgba(0, 0, 0, 0.3);\\\r\n\tbackground-color: rgba(255, 255, 255, 0.2);\\\r\n\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\\r\n\t}\\\r\n\t.ace_fold-widget:active {\\\r\n\tborder: 1px solid rgba(0, 0, 0, 0.4);\\\r\n\tbackground-color: rgba(0, 0, 0, 0.05);\\\r\n\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\\r\n\t}\\\r\n\t.ace_dark .ace_fold-widget {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\\r\n\t}\\\r\n\t.ace_dark .ace_fold-widget.ace_end {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\\r\n\t}\\\r\n\t.ace_dark .ace_fold-widget.ace_closed {\\\r\n\tbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\\r\n\t}\\\r\n\t.ace_dark .ace_fold-widget:hover {\\\r\n\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\r\n\tbackground-color: rgba(255, 255, 255, 0.1);\\\r\n\t}\\\r\n\t.ace_dark .ace_fold-widget:active {\\\r\n\tbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\r\n\t}\\\r\n\t.ace_fold-widget.ace_invalid {\\\r\n\tbackground-color: #FFB4B4;\\\r\n\tborder-color: #DE5555;\\\r\n\t}\\\r\n\t.ace_fade-fold-widgets .ace_fold-widget {\\\r\n\t-webkit-transition: opacity 0.4s ease 0.05s;\\\r\n\ttransition: opacity 0.4s ease 0.05s;\\\r\n\topacity: 0;\\\r\n\t}\\\r\n\t.ace_fade-fold-widgets:hover .ace_fold-widget {\\\r\n\t-webkit-transition: opacity 0.05s ease 0.05s;\\\r\n\ttransition: opacity 0.05s ease 0.05s;\\\r\n\topacity:1;\\\r\n\t}\\\r\n\t.ace_underline {\\\r\n\ttext-decoration: underline;\\\r\n\t}\\\r\n\t.ace_bold {\\\r\n\tfont-weight: bold;\\\r\n\t}\\\r\n\t.ace_nobold .ace_bold {\\\r\n\tfont-weight: normal;\\\r\n\t}\\\r\n\t.ace_italic {\\\r\n\tfont-style: italic;\\\r\n\t}\\\r\n\t.ace_error-marker {\\\r\n\tbackground-color: rgba(255, 0, 0,0.2);\\\r\n\tposition: absolute;\\\r\n\tz-index: 9;\\\r\n\t}\\\r\n\t.ace_highlight-marker {\\\r\n\tbackground-color: rgba(255, 255, 0,0.2);\\\r\n\tposition: absolute;\\\r\n\tz-index: 8;\\\r\n\t}\\\r\n\t.ace_br1 {border-top-left-radius : 3px;}\\\r\n\t.ace_br2 {border-top-right-radius : 3px;}\\\r\n\t.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\\\r\n\t.ace_br4 {border-bottom-right-radius: 3px;}\\\r\n\t.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\\\r\n\t.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\\\r\n\t.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\\\r\n\t.ace_br8 {border-bottom-left-radius : 3px;}\\\r\n\t.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\r\n\t.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\r\n\t\";\r\n\r\n\tdom.importCssString(editorCss, \"ace_editor.css\");\r\n\r\n\tvar VirtualRenderer = function(container, theme) {\r\n\t var _self = this;\r\n\r\n\t this.container = container || dom.createElement(\"div\");\r\n\t this.$keepTextAreaAtCursor = !useragent.isOldIE;\r\n\r\n\t dom.addCssClass(this.container, \"ace_editor\");\r\n\r\n\t this.setTheme(theme);\r\n\r\n\t this.$gutter = dom.createElement(\"div\");\r\n\t this.$gutter.className = \"ace_gutter\";\r\n\t this.container.appendChild(this.$gutter);\r\n\r\n\t this.scroller = dom.createElement(\"div\");\r\n\t this.scroller.className = \"ace_scroller\";\r\n\t this.container.appendChild(this.scroller);\r\n\r\n\t this.content = dom.createElement(\"div\");\r\n\t this.content.className = \"ace_content\";\r\n\t this.scroller.appendChild(this.content);\r\n\r\n\t this.$gutterLayer = new GutterLayer(this.$gutter);\r\n\t this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\r\n\r\n\t this.$markerBack = new MarkerLayer(this.content);\r\n\r\n\t var textLayer = this.$textLayer = new TextLayer(this.content);\r\n\t this.canvas = textLayer.element;\r\n\r\n\t this.$markerFront = new MarkerLayer(this.content);\r\n\r\n\t this.$cursorLayer = new CursorLayer(this.content);\r\n\t this.$horizScroll = false;\r\n\t this.$vScroll = false;\r\n\r\n\t this.scrollBar = \r\n\t this.scrollBarV = new VScrollBar(this.container, this);\r\n\t this.scrollBarH = new HScrollBar(this.container, this);\r\n\t this.scrollBarV.addEventListener(\"scroll\", function(e) {\r\n\t if (!_self.$scrollAnimation)\r\n\t _self.session.setScrollTop(e.data - _self.scrollMargin.top);\r\n\t });\r\n\t this.scrollBarH.addEventListener(\"scroll\", function(e) {\r\n\t if (!_self.$scrollAnimation)\r\n\t _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\r\n\t });\r\n\r\n\t this.scrollTop = 0;\r\n\t this.scrollLeft = 0;\r\n\r\n\t this.cursorPos = {\r\n\t row : 0,\r\n\t column : 0\r\n\t };\r\n\r\n\t this.$fontMetrics = new FontMetrics(this.container);\r\n\t this.$textLayer.$setFontMetrics(this.$fontMetrics);\r\n\t this.$textLayer.addEventListener(\"changeCharacterSize\", function(e) {\r\n\t _self.updateCharacterSize();\r\n\t _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\r\n\t _self._signal(\"changeCharacterSize\", e);\r\n\t });\r\n\r\n\t this.$size = {\r\n\t width: 0,\r\n\t height: 0,\r\n\t scrollerHeight: 0,\r\n\t scrollerWidth: 0,\r\n\t $dirty: true\r\n\t };\r\n\r\n\t this.layerConfig = {\r\n\t width : 1,\r\n\t padding : 0,\r\n\t firstRow : 0,\r\n\t firstRowScreen: 0,\r\n\t lastRow : 0,\r\n\t lineHeight : 0,\r\n\t characterWidth : 0,\r\n\t minHeight : 1,\r\n\t maxHeight : 1,\r\n\t offset : 0,\r\n\t height : 1,\r\n\t gutterOffset: 1\r\n\t };\r\n\t \r\n\t this.scrollMargin = {\r\n\t left: 0,\r\n\t right: 0,\r\n\t top: 0,\r\n\t bottom: 0,\r\n\t v: 0,\r\n\t h: 0\r\n\t };\r\n\r\n\t this.$loop = new RenderLoop(\r\n\t this.$renderChanges.bind(this),\r\n\t this.container.ownerDocument.defaultView\r\n\t );\r\n\t this.$loop.schedule(this.CHANGE_FULL);\r\n\r\n\t this.updateCharacterSize();\r\n\t this.setPadding(4);\r\n\t config.resetOptions(this);\r\n\t config._emit(\"renderer\", this);\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t this.CHANGE_CURSOR = 1;\r\n\t this.CHANGE_MARKER = 2;\r\n\t this.CHANGE_GUTTER = 4;\r\n\t this.CHANGE_SCROLL = 8;\r\n\t this.CHANGE_LINES = 16;\r\n\t this.CHANGE_TEXT = 32;\r\n\t this.CHANGE_SIZE = 64;\r\n\t this.CHANGE_MARKER_BACK = 128;\r\n\t this.CHANGE_MARKER_FRONT = 256;\r\n\t this.CHANGE_FULL = 512;\r\n\t this.CHANGE_H_SCROLL = 1024;\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\r\n\t this.updateCharacterSize = function() {\r\n\t if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\r\n\t this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\r\n\t this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\r\n\t }\r\n\r\n\t this.layerConfig.characterWidth =\r\n\t this.characterWidth = this.$textLayer.getCharacterWidth();\r\n\t this.layerConfig.lineHeight =\r\n\t this.lineHeight = this.$textLayer.getLineHeight();\r\n\t this.$updatePrintMargin();\r\n\t };\r\n\t this.setSession = function(session) {\r\n\t if (this.session)\r\n\t this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\r\n\t \r\n\t this.session = session;\r\n\t if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\r\n\t session.setScrollTop(-this.scrollMargin.top);\r\n\r\n\t this.$cursorLayer.setSession(session);\r\n\t this.$markerBack.setSession(session);\r\n\t this.$markerFront.setSession(session);\r\n\t this.$gutterLayer.setSession(session);\r\n\t this.$textLayer.setSession(session);\r\n\t if (!session)\r\n\t return;\r\n\t \r\n\t this.$loop.schedule(this.CHANGE_FULL);\r\n\t this.session.$setFontMetrics(this.$fontMetrics);\r\n\t \r\n\t this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\r\n\t this.onChangeNewLineMode()\r\n\t this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\r\n\t };\r\n\t this.updateLines = function(firstRow, lastRow, force) {\r\n\t if (lastRow === undefined)\r\n\t lastRow = Infinity;\r\n\r\n\t if (!this.$changedLines) {\r\n\t this.$changedLines = {\r\n\t firstRow: firstRow,\r\n\t lastRow: lastRow\r\n\t };\r\n\t }\r\n\t else {\r\n\t if (this.$changedLines.firstRow > firstRow)\r\n\t this.$changedLines.firstRow = firstRow;\r\n\r\n\t if (this.$changedLines.lastRow < lastRow)\r\n\t this.$changedLines.lastRow = lastRow;\r\n\t }\r\n\t if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\r\n\t if (force)\r\n\t this.$changedLines.lastRow = this.layerConfig.lastRow;\r\n\t else\r\n\t return;\r\n\t }\r\n\t if (this.$changedLines.firstRow > this.layerConfig.lastRow)\r\n\t return;\r\n\t this.$loop.schedule(this.CHANGE_LINES);\r\n\t };\r\n\r\n\t this.onChangeNewLineMode = function() {\r\n\t this.$loop.schedule(this.CHANGE_TEXT);\r\n\t this.$textLayer.$updateEolChar();\r\n\t };\r\n\t \r\n\t this.onChangeTabSize = function() {\r\n\t this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\r\n\t this.$textLayer.onChangeTabSize();\r\n\t };\r\n\t this.updateText = function() {\r\n\t this.$loop.schedule(this.CHANGE_TEXT);\r\n\t };\r\n\t this.updateFull = function(force) {\r\n\t if (force)\r\n\t this.$renderChanges(this.CHANGE_FULL, true);\r\n\t else\r\n\t this.$loop.schedule(this.CHANGE_FULL);\r\n\t };\r\n\t this.updateFontSize = function() {\r\n\t this.$textLayer.checkForSizeChanges();\r\n\t };\r\n\r\n\t this.$changes = 0;\r\n\t this.$updateSizeAsync = function() {\r\n\t if (this.$loop.pending)\r\n\t this.$size.$dirty = true;\r\n\t else\r\n\t this.onResize();\r\n\t };\r\n\t this.onResize = function(force, gutterWidth, width, height) {\r\n\t if (this.resizing > 2)\r\n\t return;\r\n\t else if (this.resizing > 0)\r\n\t this.resizing++;\r\n\t else\r\n\t this.resizing = force ? 1 : 0;\r\n\t var el = this.container;\r\n\t if (!height)\r\n\t height = el.clientHeight || el.scrollHeight;\r\n\t if (!width)\r\n\t width = el.clientWidth || el.scrollWidth;\r\n\t var changes = this.$updateCachedSize(force, gutterWidth, width, height);\r\n\r\n\t \r\n\t if (!this.$size.scrollerHeight || (!width && !height))\r\n\t return this.resizing = 0;\r\n\r\n\t if (force)\r\n\t this.$gutterLayer.$padding = null;\r\n\r\n\t if (force)\r\n\t this.$renderChanges(changes | this.$changes, true);\r\n\t else\r\n\t this.$loop.schedule(changes | this.$changes);\r\n\r\n\t if (this.resizing)\r\n\t this.resizing = 0;\r\n\t this.scrollBarV.scrollLeft = this.scrollBarV.scrollTop = null;\r\n\t };\r\n\t \r\n\t this.$updateCachedSize = function(force, gutterWidth, width, height) {\r\n\t height -= (this.$extraHeight || 0);\r\n\t var changes = 0;\r\n\t var size = this.$size;\r\n\t var oldSize = {\r\n\t width: size.width,\r\n\t height: size.height,\r\n\t scrollerHeight: size.scrollerHeight,\r\n\t scrollerWidth: size.scrollerWidth\r\n\t };\r\n\t if (height && (force || size.height != height)) {\r\n\t size.height = height;\r\n\t changes |= this.CHANGE_SIZE;\r\n\r\n\t size.scrollerHeight = size.height;\r\n\t if (this.$horizScroll)\r\n\t size.scrollerHeight -= this.scrollBarH.getHeight();\r\n\t this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\r\n\r\n\t changes = changes | this.CHANGE_SCROLL;\r\n\t }\r\n\r\n\t if (width && (force || size.width != width)) {\r\n\t changes |= this.CHANGE_SIZE;\r\n\t size.width = width;\r\n\t \r\n\t if (gutterWidth == null)\r\n\t gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\r\n\t \r\n\t this.gutterWidth = gutterWidth;\r\n\t \r\n\t this.scrollBarH.element.style.left = \r\n\t this.scroller.style.left = gutterWidth + \"px\";\r\n\t size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth()); \r\n\t \r\n\t this.scrollBarH.element.style.right = \r\n\t this.scroller.style.right = this.scrollBarV.getWidth() + \"px\";\r\n\t this.scroller.style.bottom = this.scrollBarH.getHeight() + \"px\";\r\n\r\n\t if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force)\r\n\t changes |= this.CHANGE_FULL;\r\n\t }\r\n\t \r\n\t size.$dirty = !width || !height;\r\n\r\n\t if (changes)\r\n\t this._signal(\"resize\", oldSize);\r\n\r\n\t return changes;\r\n\t };\r\n\r\n\t this.onGutterResize = function() {\r\n\t var gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\r\n\t if (gutterWidth != this.gutterWidth)\r\n\t this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\r\n\r\n\t if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\r\n\t this.$loop.schedule(this.CHANGE_FULL);\r\n\t } else if (this.$size.$dirty) {\r\n\t this.$loop.schedule(this.CHANGE_FULL);\r\n\t } else {\r\n\t this.$computeLayerConfig();\r\n\t this.$loop.schedule(this.CHANGE_MARKER);\r\n\t }\r\n\t };\r\n\t this.adjustWrapLimit = function() {\r\n\t var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\r\n\t var limit = Math.floor(availableWidth / this.characterWidth);\r\n\t return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\r\n\t };\r\n\t this.setAnimatedScroll = function(shouldAnimate){\r\n\t this.setOption(\"animatedScroll\", shouldAnimate);\r\n\t };\r\n\t this.getAnimatedScroll = function() {\r\n\t return this.$animatedScroll;\r\n\t };\r\n\t this.setShowInvisibles = function(showInvisibles) {\r\n\t this.setOption(\"showInvisibles\", showInvisibles);\r\n\t };\r\n\t this.getShowInvisibles = function() {\r\n\t return this.getOption(\"showInvisibles\");\r\n\t };\r\n\t this.getDisplayIndentGuides = function() {\r\n\t return this.getOption(\"displayIndentGuides\");\r\n\t };\r\n\r\n\t this.setDisplayIndentGuides = function(display) {\r\n\t this.setOption(\"displayIndentGuides\", display);\r\n\t };\r\n\t this.setShowPrintMargin = function(showPrintMargin) {\r\n\t this.setOption(\"showPrintMargin\", showPrintMargin);\r\n\t };\r\n\t this.getShowPrintMargin = function() {\r\n\t return this.getOption(\"showPrintMargin\");\r\n\t };\r\n\t this.setPrintMarginColumn = function(showPrintMargin) {\r\n\t this.setOption(\"printMarginColumn\", showPrintMargin);\r\n\t };\r\n\t this.getPrintMarginColumn = function() {\r\n\t return this.getOption(\"printMarginColumn\");\r\n\t };\r\n\t this.getShowGutter = function(){\r\n\t return this.getOption(\"showGutter\");\r\n\t };\r\n\t this.setShowGutter = function(show){\r\n\t return this.setOption(\"showGutter\", show);\r\n\t };\r\n\r\n\t this.getFadeFoldWidgets = function(){\r\n\t return this.getOption(\"fadeFoldWidgets\")\r\n\t };\r\n\r\n\t this.setFadeFoldWidgets = function(show) {\r\n\t this.setOption(\"fadeFoldWidgets\", show);\r\n\t };\r\n\r\n\t this.setHighlightGutterLine = function(shouldHighlight) {\r\n\t this.setOption(\"highlightGutterLine\", shouldHighlight);\r\n\t };\r\n\r\n\t this.getHighlightGutterLine = function() {\r\n\t return this.getOption(\"highlightGutterLine\");\r\n\t };\r\n\r\n\t this.$updateGutterLineHighlight = function() {\r\n\t var pos = this.$cursorLayer.$pixelPos;\r\n\t var height = this.layerConfig.lineHeight;\r\n\t if (this.session.getUseWrapMode()) {\r\n\t var cursor = this.session.selection.getCursor();\r\n\t cursor.column = 0;\r\n\t pos = this.$cursorLayer.getPixelPosition(cursor, true);\r\n\t height *= this.session.getRowLength(cursor.row);\r\n\t }\r\n\t this.$gutterLineHighlight.style.top = pos.top - this.layerConfig.offset + \"px\";\r\n\t this.$gutterLineHighlight.style.height = height + \"px\";\r\n\t };\r\n\r\n\t this.$updatePrintMargin = function() {\r\n\t if (!this.$showPrintMargin && !this.$printMarginEl)\r\n\t return;\r\n\r\n\t if (!this.$printMarginEl) {\r\n\t var containerEl = dom.createElement(\"div\");\r\n\t containerEl.className = \"ace_layer ace_print-margin-layer\";\r\n\t this.$printMarginEl = dom.createElement(\"div\");\r\n\t this.$printMarginEl.className = \"ace_print-margin\";\r\n\t containerEl.appendChild(this.$printMarginEl);\r\n\t this.content.insertBefore(containerEl, this.content.firstChild);\r\n\t }\r\n\r\n\t var style = this.$printMarginEl.style;\r\n\t style.left = ((this.characterWidth * this.$printMarginColumn) + this.$padding) + \"px\";\r\n\t style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\r\n\t \r\n\t if (this.session && this.session.$wrap == -1)\r\n\t this.adjustWrapLimit();\r\n\t };\r\n\t this.getContainerElement = function() {\r\n\t return this.container;\r\n\t };\r\n\t this.getMouseEventTarget = function() {\r\n\t return this.scroller;\r\n\t };\r\n\t this.getTextAreaContainer = function() {\r\n\t return this.container;\r\n\t };\r\n\t this.$moveTextAreaToCursor = function() {\r\n\t if (!this.$keepTextAreaAtCursor)\r\n\t return;\r\n\t var config = this.layerConfig;\r\n\t var posTop = this.$cursorLayer.$pixelPos.top;\r\n\t var posLeft = this.$cursorLayer.$pixelPos.left;\r\n\t posTop -= config.offset;\r\n\r\n\t var style = this.textarea.style;\r\n\t var h = this.lineHeight;\r\n\t if (posTop < 0 || posTop > config.height - h) {\r\n\t style.top = style.left = \"0\";\r\n\t return;\r\n\t }\r\n\r\n\t var w = this.characterWidth;\r\n\t if (this.$composition) {\r\n\t var val = this.textarea.value.replace(/^\\x01+/, \"\");\r\n\t w *= (this.session.$getStringScreenWidth(val)[0]+2);\r\n\t h += 2;\r\n\t }\r\n\t posLeft -= this.scrollLeft;\r\n\t if (posLeft > this.$size.scrollerWidth - w)\r\n\t posLeft = this.$size.scrollerWidth - w;\r\n\r\n\t posLeft += this.gutterWidth;\r\n\t style.height = h + \"px\";\r\n\t style.width = w + \"px\";\r\n\t style.left = Math.min(posLeft, this.$size.scrollerWidth - w) + \"px\";\r\n\t style.top = Math.min(posTop, this.$size.height - h) + \"px\";\r\n\t };\r\n\t this.getFirstVisibleRow = function() {\r\n\t return this.layerConfig.firstRow;\r\n\t };\r\n\t this.getFirstFullyVisibleRow = function() {\r\n\t return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\r\n\t };\r\n\t this.getLastFullyVisibleRow = function() {\r\n\t var config = this.layerConfig;\r\n\t var lastRow = config.lastRow\r\n\t var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\r\n\t if (top - this.session.getScrollTop() > config.height - config.lineHeight)\r\n\t return lastRow - 1;\r\n\t return lastRow;\r\n\t };\r\n\t this.getLastVisibleRow = function() {\r\n\t return this.layerConfig.lastRow;\r\n\t };\r\n\r\n\t this.$padding = null;\r\n\t this.setPadding = function(padding) {\r\n\t this.$padding = padding;\r\n\t this.$textLayer.setPadding(padding);\r\n\t this.$cursorLayer.setPadding(padding);\r\n\t this.$markerFront.setPadding(padding);\r\n\t this.$markerBack.setPadding(padding);\r\n\t this.$loop.schedule(this.CHANGE_FULL);\r\n\t this.$updatePrintMargin();\r\n\t };\r\n\t \r\n\t this.setScrollMargin = function(top, bottom, left, right) {\r\n\t var sm = this.scrollMargin;\r\n\t sm.top = top|0;\r\n\t sm.bottom = bottom|0;\r\n\t sm.right = right|0;\r\n\t sm.left = left|0;\r\n\t sm.v = sm.top + sm.bottom;\r\n\t sm.h = sm.left + sm.right;\r\n\t if (sm.top && this.scrollTop <= 0 && this.session)\r\n\t this.session.setScrollTop(-sm.top);\r\n\t this.updateFull();\r\n\t };\r\n\t this.getHScrollBarAlwaysVisible = function() {\r\n\t return this.$hScrollBarAlwaysVisible;\r\n\t };\r\n\t this.setHScrollBarAlwaysVisible = function(alwaysVisible) {\r\n\t this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\r\n\t };\r\n\t this.getVScrollBarAlwaysVisible = function() {\r\n\t return this.$vScrollBarAlwaysVisible;\r\n\t };\r\n\t this.setVScrollBarAlwaysVisible = function(alwaysVisible) {\r\n\t this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\r\n\t };\r\n\r\n\t this.$updateScrollBarV = function() {\r\n\t var scrollHeight = this.layerConfig.maxHeight;\r\n\t var scrollerHeight = this.$size.scrollerHeight;\r\n\t if (!this.$maxLines && this.$scrollPastEnd) {\r\n\t scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\r\n\t if (this.scrollTop > scrollHeight - scrollerHeight) {\r\n\t scrollHeight = this.scrollTop + scrollerHeight;\r\n\t this.scrollBarV.scrollTop = null;\r\n\t }\r\n\t }\r\n\t this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\r\n\t this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\r\n\t };\r\n\t this.$updateScrollBarH = function() {\r\n\t this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\r\n\t this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\r\n\t };\r\n\t \r\n\t this.$frozen = false;\r\n\t this.freeze = function() {\r\n\t this.$frozen = true;\r\n\t };\r\n\t \r\n\t this.unfreeze = function() {\r\n\t this.$frozen = false;\r\n\t };\r\n\r\n\t this.$renderChanges = function(changes, force) {\r\n\t if (this.$changes) {\r\n\t changes |= this.$changes;\r\n\t this.$changes = 0;\r\n\t }\r\n\t if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {\r\n\t this.$changes |= changes;\r\n\t return; \r\n\t } \r\n\t if (this.$size.$dirty) {\r\n\t this.$changes |= changes;\r\n\t return this.onResize(true);\r\n\t }\r\n\t if (!this.lineHeight) {\r\n\t this.$textLayer.checkForSizeChanges();\r\n\t }\r\n\t \r\n\t this._signal(\"beforeRender\");\r\n\t var config = this.layerConfig;\r\n\t if (changes & this.CHANGE_FULL ||\r\n\t changes & this.CHANGE_SIZE ||\r\n\t changes & this.CHANGE_TEXT ||\r\n\t changes & this.CHANGE_LINES ||\r\n\t changes & this.CHANGE_SCROLL ||\r\n\t changes & this.CHANGE_H_SCROLL\r\n\t ) {\r\n\t changes |= this.$computeLayerConfig();\r\n\t if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\r\n\t var st = this.scrollTop + (config.firstRow - this.layerConfig.firstRow) * this.lineHeight;\r\n\t if (st > 0) {\r\n\t this.scrollTop = st;\r\n\t changes = changes | this.CHANGE_SCROLL;\r\n\t changes |= this.$computeLayerConfig();\r\n\t }\r\n\t }\r\n\t config = this.layerConfig;\r\n\t this.$updateScrollBarV();\r\n\t if (changes & this.CHANGE_H_SCROLL)\r\n\t this.$updateScrollBarH();\r\n\t this.$gutterLayer.element.style.marginTop = (-config.offset) + \"px\";\r\n\t this.content.style.marginTop = (-config.offset) + \"px\";\r\n\t this.content.style.width = config.width + 2 * this.$padding + \"px\";\r\n\t this.content.style.height = config.minHeight + \"px\";\r\n\t }\r\n\t if (changes & this.CHANGE_H_SCROLL) {\r\n\t this.content.style.marginLeft = -this.scrollLeft + \"px\";\r\n\t this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller\" : \"ace_scroller ace_scroll-left\";\r\n\t }\r\n\t if (changes & this.CHANGE_FULL) {\r\n\t this.$textLayer.update(config);\r\n\t if (this.$showGutter)\r\n\t this.$gutterLayer.update(config);\r\n\t this.$markerBack.update(config);\r\n\t this.$markerFront.update(config);\r\n\t this.$cursorLayer.update(config);\r\n\t this.$moveTextAreaToCursor();\r\n\t this.$highlightGutterLine && this.$updateGutterLineHighlight();\r\n\t this._signal(\"afterRender\");\r\n\t return;\r\n\t }\r\n\t if (changes & this.CHANGE_SCROLL) {\r\n\t if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)\r\n\t this.$textLayer.update(config);\r\n\t else\r\n\t this.$textLayer.scrollLines(config);\r\n\r\n\t if (this.$showGutter)\r\n\t this.$gutterLayer.update(config);\r\n\t this.$markerBack.update(config);\r\n\t this.$markerFront.update(config);\r\n\t this.$cursorLayer.update(config);\r\n\t this.$highlightGutterLine && this.$updateGutterLineHighlight();\r\n\t this.$moveTextAreaToCursor();\r\n\t this._signal(\"afterRender\");\r\n\t return;\r\n\t }\r\n\r\n\t if (changes & this.CHANGE_TEXT) {\r\n\t this.$textLayer.update(config);\r\n\t if (this.$showGutter)\r\n\t this.$gutterLayer.update(config);\r\n\t }\r\n\t else if (changes & this.CHANGE_LINES) {\r\n\t if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\r\n\t this.$gutterLayer.update(config);\r\n\t }\r\n\t else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\r\n\t if (this.$showGutter)\r\n\t this.$gutterLayer.update(config);\r\n\t }\r\n\r\n\t if (changes & this.CHANGE_CURSOR) {\r\n\t this.$cursorLayer.update(config);\r\n\t this.$moveTextAreaToCursor();\r\n\t this.$highlightGutterLine && this.$updateGutterLineHighlight();\r\n\t }\r\n\r\n\t if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\r\n\t this.$markerFront.update(config);\r\n\t }\r\n\r\n\t if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\r\n\t this.$markerBack.update(config);\r\n\t }\r\n\r\n\t this._signal(\"afterRender\");\r\n\t };\r\n\r\n\t \r\n\t this.$autosize = function() {\r\n\t var height = this.session.getScreenLength() * this.lineHeight;\r\n\t var maxHeight = this.$maxLines * this.lineHeight;\r\n\t var desiredHeight = Math.max(\r\n\t (this.$minLines||1) * this.lineHeight,\r\n\t Math.min(maxHeight, height)\r\n\t ) + this.scrollMargin.v + (this.$extraHeight || 0);\r\n\t if (this.$horizScroll)\r\n\t desiredHeight += this.scrollBarH.getHeight();\r\n\t var vScroll = height > maxHeight;\r\n\t \r\n\t if (desiredHeight != this.desiredHeight ||\r\n\t this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\r\n\t if (vScroll != this.$vScroll) {\r\n\t this.$vScroll = vScroll;\r\n\t this.scrollBarV.setVisible(vScroll);\r\n\t }\r\n\t \r\n\t var w = this.container.clientWidth;\r\n\t this.container.style.height = desiredHeight + \"px\";\r\n\t this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\r\n\t this.desiredHeight = desiredHeight;\r\n\t \r\n\t this._signal(\"autosize\");\r\n\t }\r\n\t };\r\n\t \r\n\t this.$computeLayerConfig = function() {\r\n\t var session = this.session;\r\n\t var size = this.$size;\r\n\t \r\n\t var hideScrollbars = size.height <= 2 * this.lineHeight;\r\n\t var screenLines = this.session.getScreenLength();\r\n\t var maxHeight = screenLines * this.lineHeight;\r\n\r\n\t var longestLine = this.$getLongestLine();\r\n\t \r\n\t var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\r\n\t size.scrollerWidth - longestLine - 2 * this.$padding < 0);\r\n\r\n\t var hScrollChanged = this.$horizScroll !== horizScroll;\r\n\t if (hScrollChanged) {\r\n\t this.$horizScroll = horizScroll;\r\n\t this.scrollBarH.setVisible(horizScroll);\r\n\t }\r\n\t var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\r\n\t if (this.$maxLines && this.lineHeight > 1)\r\n\t this.$autosize();\r\n\r\n\t var offset = this.scrollTop % this.lineHeight;\r\n\t var minHeight = size.scrollerHeight + this.lineHeight;\r\n\t \r\n\t var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\r\n\t ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\r\n\t : 0;\r\n\t maxHeight += scrollPastEnd;\r\n\t \r\n\t var sm = this.scrollMargin;\r\n\t this.session.setScrollTop(Math.max(-sm.top,\r\n\t Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\r\n\r\n\t this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, \r\n\t longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\r\n\t \r\n\t var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\r\n\t size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\r\n\t var vScrollChanged = vScrollBefore !== vScroll;\r\n\t if (vScrollChanged) {\r\n\t this.$vScroll = vScroll;\r\n\t this.scrollBarV.setVisible(vScroll);\r\n\t }\r\n\r\n\t var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\r\n\t var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\r\n\t var lastRow = firstRow + lineCount;\r\n\t var firstRowScreen, firstRowHeight;\r\n\t var lineHeight = this.lineHeight;\r\n\t firstRow = session.screenToDocumentRow(firstRow, 0);\r\n\t var foldLine = session.getFoldLine(firstRow);\r\n\t if (foldLine) {\r\n\t firstRow = foldLine.start.row;\r\n\t }\r\n\r\n\t firstRowScreen = session.documentToScreenRow(firstRow, 0);\r\n\t firstRowHeight = session.getRowLength(firstRow) * lineHeight;\r\n\r\n\t lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\r\n\t minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\r\n\t firstRowHeight;\r\n\r\n\t offset = this.scrollTop - firstRowScreen * lineHeight;\r\n\r\n\t var changes = 0;\r\n\t if (this.layerConfig.width != longestLine) \r\n\t changes = this.CHANGE_H_SCROLL;\r\n\t if (hScrollChanged || vScrollChanged) {\r\n\t changes = this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\r\n\t this._signal(\"scrollbarVisibilityChanged\");\r\n\t if (vScrollChanged)\r\n\t longestLine = this.$getLongestLine();\r\n\t }\r\n\t \r\n\t this.layerConfig = {\r\n\t width : longestLine,\r\n\t padding : this.$padding,\r\n\t firstRow : firstRow,\r\n\t firstRowScreen: firstRowScreen,\r\n\t lastRow : lastRow,\r\n\t lineHeight : lineHeight,\r\n\t characterWidth : this.characterWidth,\r\n\t minHeight : minHeight,\r\n\t maxHeight : maxHeight,\r\n\t offset : offset,\r\n\t gutterOffset : Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)),\r\n\t height : this.$size.scrollerHeight\r\n\t };\r\n\r\n\t return changes;\r\n\t };\r\n\r\n\t this.$updateLines = function() {\r\n\t var firstRow = this.$changedLines.firstRow;\r\n\t var lastRow = this.$changedLines.lastRow;\r\n\t this.$changedLines = null;\r\n\r\n\t var layerConfig = this.layerConfig;\r\n\r\n\t if (firstRow > layerConfig.lastRow + 1) { return; }\r\n\t if (lastRow < layerConfig.firstRow) { return; }\r\n\t if (lastRow === Infinity) {\r\n\t if (this.$showGutter)\r\n\t this.$gutterLayer.update(layerConfig);\r\n\t this.$textLayer.update(layerConfig);\r\n\t return;\r\n\t }\r\n\t this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\r\n\t return true;\r\n\t };\r\n\r\n\t this.$getLongestLine = function() {\r\n\t var charCount = this.session.getScreenWidth();\r\n\t if (this.showInvisibles && !this.session.$useWrapMode)\r\n\t charCount += 1;\r\n\r\n\t return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\r\n\t };\r\n\t this.updateFrontMarkers = function() {\r\n\t this.$markerFront.setMarkers(this.session.getMarkers(true));\r\n\t this.$loop.schedule(this.CHANGE_MARKER_FRONT);\r\n\t };\r\n\t this.updateBackMarkers = function() {\r\n\t this.$markerBack.setMarkers(this.session.getMarkers());\r\n\t this.$loop.schedule(this.CHANGE_MARKER_BACK);\r\n\t };\r\n\t this.addGutterDecoration = function(row, className){\r\n\t this.$gutterLayer.addGutterDecoration(row, className);\r\n\t };\r\n\t this.removeGutterDecoration = function(row, className){\r\n\t this.$gutterLayer.removeGutterDecoration(row, className);\r\n\t };\r\n\t this.updateBreakpoints = function(rows) {\r\n\t this.$loop.schedule(this.CHANGE_GUTTER);\r\n\t };\r\n\t this.setAnnotations = function(annotations) {\r\n\t this.$gutterLayer.setAnnotations(annotations);\r\n\t this.$loop.schedule(this.CHANGE_GUTTER);\r\n\t };\r\n\t this.updateCursor = function() {\r\n\t this.$loop.schedule(this.CHANGE_CURSOR);\r\n\t };\r\n\t this.hideCursor = function() {\r\n\t this.$cursorLayer.hideCursor();\r\n\t };\r\n\t this.showCursor = function() {\r\n\t this.$cursorLayer.showCursor();\r\n\t };\r\n\r\n\t this.scrollSelectionIntoView = function(anchor, lead, offset) {\r\n\t this.scrollCursorIntoView(anchor, offset);\r\n\t this.scrollCursorIntoView(lead, offset);\r\n\t };\r\n\t this.scrollCursorIntoView = function(cursor, offset, $viewMargin) {\r\n\t if (this.$size.scrollerHeight === 0)\r\n\t return;\r\n\r\n\t var pos = this.$cursorLayer.getPixelPosition(cursor);\r\n\r\n\t var left = pos.left;\r\n\t var top = pos.top;\r\n\t \r\n\t var topMargin = $viewMargin && $viewMargin.top || 0;\r\n\t var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\r\n\t \r\n\t var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\r\n\t \r\n\t if (scrollTop + topMargin > top) {\r\n\t if (offset && scrollTop + topMargin > top + this.lineHeight)\r\n\t top -= offset * this.$size.scrollerHeight;\r\n\t if (top === 0)\r\n\t top = -this.scrollMargin.top;\r\n\t this.session.setScrollTop(top);\r\n\t } else if (scrollTop + this.$size.scrollerHeight - bottomMargin < top + this.lineHeight) {\r\n\t if (offset && scrollTop + this.$size.scrollerHeight - bottomMargin < top - this.lineHeight)\r\n\t top += offset * this.$size.scrollerHeight;\r\n\t this.session.setScrollTop(top + this.lineHeight - this.$size.scrollerHeight);\r\n\t }\r\n\r\n\t var scrollLeft = this.scrollLeft;\r\n\r\n\t if (scrollLeft > left) {\r\n\t if (left < this.$padding + 2 * this.layerConfig.characterWidth)\r\n\t left = -this.scrollMargin.left;\r\n\t this.session.setScrollLeft(left);\r\n\t } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) {\r\n\t this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth));\r\n\t } else if (scrollLeft <= this.$padding && left - scrollLeft < this.characterWidth) {\r\n\t this.session.setScrollLeft(0);\r\n\t }\r\n\t };\r\n\t this.getScrollTop = function() {\r\n\t return this.session.getScrollTop();\r\n\t };\r\n\t this.getScrollLeft = function() {\r\n\t return this.session.getScrollLeft();\r\n\t };\r\n\t this.getScrollTopRow = function() {\r\n\t return this.scrollTop / this.lineHeight;\r\n\t };\r\n\t this.getScrollBottomRow = function() {\r\n\t return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\r\n\t };\r\n\t this.scrollToRow = function(row) {\r\n\t this.session.setScrollTop(row * this.lineHeight);\r\n\t };\r\n\r\n\t this.alignCursor = function(cursor, alignment) {\r\n\t if (typeof cursor == \"number\")\r\n\t cursor = {row: cursor, column: 0};\r\n\r\n\t var pos = this.$cursorLayer.getPixelPosition(cursor);\r\n\t var h = this.$size.scrollerHeight - this.lineHeight;\r\n\t var offset = pos.top - h * (alignment || 0);\r\n\r\n\t this.session.setScrollTop(offset);\r\n\t return offset;\r\n\t };\r\n\r\n\t this.STEPS = 8;\r\n\t this.$calcSteps = function(fromValue, toValue){\r\n\t var i = 0;\r\n\t var l = this.STEPS;\r\n\t var steps = [];\r\n\r\n\t var func = function(t, x_min, dx) {\r\n\t return dx * (Math.pow(t - 1, 3) + 1) + x_min;\r\n\t };\r\n\r\n\t for (i = 0; i < l; ++i)\r\n\t steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\r\n\r\n\t return steps;\r\n\t };\r\n\t this.scrollToLine = function(line, center, animate, callback) {\r\n\t var pos = this.$cursorLayer.getPixelPosition({row: line, column: 0});\r\n\t var offset = pos.top;\r\n\t if (center)\r\n\t offset -= this.$size.scrollerHeight / 2;\r\n\r\n\t var initialScroll = this.scrollTop;\r\n\t this.session.setScrollTop(offset);\r\n\t if (animate !== false)\r\n\t this.animateScrolling(initialScroll, callback);\r\n\t };\r\n\r\n\t this.animateScrolling = function(fromValue, callback) {\r\n\t var toValue = this.scrollTop;\r\n\t if (!this.$animatedScroll)\r\n\t return;\r\n\t var _self = this;\r\n\t \r\n\t if (fromValue == toValue)\r\n\t return;\r\n\t \r\n\t if (this.$scrollAnimation) {\r\n\t var oldSteps = this.$scrollAnimation.steps;\r\n\t if (oldSteps.length) {\r\n\t fromValue = oldSteps[0];\r\n\t if (fromValue == toValue)\r\n\t return;\r\n\t }\r\n\t }\r\n\t \r\n\t var steps = _self.$calcSteps(fromValue, toValue);\r\n\t this.$scrollAnimation = {from: fromValue, to: toValue, steps: steps};\r\n\r\n\t clearInterval(this.$timer);\r\n\r\n\t _self.session.setScrollTop(steps.shift());\r\n\t _self.session.$scrollTop = toValue;\r\n\t this.$timer = setInterval(function() {\r\n\t if (steps.length) {\r\n\t _self.session.setScrollTop(steps.shift());\r\n\t _self.session.$scrollTop = toValue;\r\n\t } else if (toValue != null) {\r\n\t _self.session.$scrollTop = -1;\r\n\t _self.session.setScrollTop(toValue);\r\n\t toValue = null;\r\n\t } else {\r\n\t _self.$timer = clearInterval(_self.$timer);\r\n\t _self.$scrollAnimation = null;\r\n\t callback && callback();\r\n\t }\r\n\t }, 10);\r\n\t };\r\n\t this.scrollToY = function(scrollTop) {\r\n\t if (this.scrollTop !== scrollTop) {\r\n\t this.$loop.schedule(this.CHANGE_SCROLL);\r\n\t this.scrollTop = scrollTop;\r\n\t }\r\n\t };\r\n\t this.scrollToX = function(scrollLeft) {\r\n\t if (this.scrollLeft !== scrollLeft)\r\n\t this.scrollLeft = scrollLeft;\r\n\t this.$loop.schedule(this.CHANGE_H_SCROLL);\r\n\t };\r\n\t this.scrollTo = function(x, y) {\r\n\t this.session.setScrollTop(y);\r\n\t this.session.setScrollLeft(y);\r\n\t };\r\n\t this.scrollBy = function(deltaX, deltaY) {\r\n\t deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\r\n\t deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\r\n\t };\r\n\t this.isScrollableBy = function(deltaX, deltaY) {\r\n\t if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)\r\n\t return true;\r\n\t if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\r\n\t - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)\r\n\t return true;\r\n\t if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\r\n\t return true;\r\n\t if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\r\n\t - this.layerConfig.width < -1 + this.scrollMargin.right)\r\n\t return true;\r\n\t };\r\n\r\n\t this.pixelToScreenCoordinates = function(x, y) {\r\n\t var canvasPos = this.scroller.getBoundingClientRect();\r\n\r\n\t var offset = (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth;\r\n\t var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\r\n\t var col = Math.round(offset);\r\n\r\n\t return {row: row, column: col, side: offset - col > 0 ? 1 : -1};\r\n\t };\r\n\r\n\t this.screenToTextCoordinates = function(x, y) {\r\n\t var canvasPos = this.scroller.getBoundingClientRect();\r\n\r\n\t var col = Math.round(\r\n\t (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth\r\n\t );\r\n\r\n\t var row = (y + this.scrollTop - canvasPos.top) / this.lineHeight;\r\n\r\n\t return this.session.screenToDocumentPosition(row, Math.max(col, 0));\r\n\t };\r\n\t this.textToScreenCoordinates = function(row, column) {\r\n\t var canvasPos = this.scroller.getBoundingClientRect();\r\n\t var pos = this.session.documentToScreenPosition(row, column);\r\n\r\n\t var x = this.$padding + Math.round(pos.column * this.characterWidth);\r\n\t var y = pos.row * this.lineHeight;\r\n\r\n\t return {\r\n\t pageX: canvasPos.left + x - this.scrollLeft,\r\n\t pageY: canvasPos.top + y - this.scrollTop\r\n\t };\r\n\t };\r\n\t this.visualizeFocus = function() {\r\n\t dom.addCssClass(this.container, \"ace_focus\");\r\n\t };\r\n\t this.visualizeBlur = function() {\r\n\t dom.removeCssClass(this.container, \"ace_focus\");\r\n\t };\r\n\t this.showComposition = function(position) {\r\n\t if (!this.$composition)\r\n\t this.$composition = {\r\n\t keepTextAreaAtCursor: this.$keepTextAreaAtCursor,\r\n\t cssText: this.textarea.style.cssText\r\n\t };\r\n\r\n\t this.$keepTextAreaAtCursor = true;\r\n\t dom.addCssClass(this.textarea, \"ace_composition\");\r\n\t this.textarea.style.cssText = \"\";\r\n\t this.$moveTextAreaToCursor();\r\n\t };\r\n\t this.setCompositionText = function(text) {\r\n\t this.$moveTextAreaToCursor();\r\n\t };\r\n\t this.hideComposition = function() {\r\n\t if (!this.$composition)\r\n\t return;\r\n\r\n\t dom.removeCssClass(this.textarea, \"ace_composition\");\r\n\t this.$keepTextAreaAtCursor = this.$composition.keepTextAreaAtCursor;\r\n\t this.textarea.style.cssText = this.$composition.cssText;\r\n\t this.$composition = null;\r\n\t };\r\n\t this.setTheme = function(theme, cb) {\r\n\t var _self = this;\r\n\t this.$themeId = theme;\r\n\t _self._dispatchEvent('themeChange',{theme:theme});\r\n\r\n\t if (!theme || typeof theme == \"string\") {\r\n\t var moduleName = theme || this.$options.theme.initialValue;\r\n\t config.loadModule([\"theme\", moduleName], afterLoad);\r\n\t } else {\r\n\t afterLoad(theme);\r\n\t }\r\n\r\n\t function afterLoad(module) {\r\n\t if (_self.$themeId != theme)\r\n\t return cb && cb();\r\n\t if (!module.cssClass)\r\n\t return;\r\n\t dom.importCssString(\r\n\t module.cssText,\r\n\t module.cssClass,\r\n\t _self.container.ownerDocument\r\n\t );\r\n\r\n\t if (_self.theme)\r\n\t dom.removeCssClass(_self.container, _self.theme.cssClass);\r\n\r\n\t var padding = \"padding\" in module ? module.padding \r\n\t : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\r\n\t if (_self.$padding && padding != _self.$padding)\r\n\t _self.setPadding(padding);\r\n\t _self.$theme = module.cssClass;\r\n\r\n\t _self.theme = module;\r\n\t dom.addCssClass(_self.container, module.cssClass);\r\n\t dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\r\n\t if (_self.$size) {\r\n\t _self.$size.width = 0;\r\n\t _self.$updateSizeAsync();\r\n\t }\r\n\r\n\t _self._dispatchEvent('themeLoaded', {theme:module});\r\n\t cb && cb();\r\n\t }\r\n\t };\r\n\t this.getTheme = function() {\r\n\t return this.$themeId;\r\n\t };\r\n\t this.setStyle = function(style, include) {\r\n\t dom.setCssClass(this.container, style, include !== false);\r\n\t };\r\n\t this.unsetStyle = function(style) {\r\n\t dom.removeCssClass(this.container, style);\r\n\t };\r\n\t \r\n\t this.setCursorStyle = function(style) {\r\n\t if (this.scroller.style.cursor != style)\r\n\t this.scroller.style.cursor = style;\r\n\t };\r\n\t this.setMouseCursor = function(cursorStyle) {\r\n\t this.scroller.style.cursor = cursorStyle;\r\n\t };\r\n\t this.destroy = function() {\r\n\t this.$textLayer.destroy();\r\n\t this.$cursorLayer.destroy();\r\n\t };\r\n\r\n\t}).call(VirtualRenderer.prototype);\r\n\r\n\r\n\tconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\r\n\t animatedScroll: {initialValue: false},\r\n\t showInvisibles: {\r\n\t set: function(value) {\r\n\t if (this.$textLayer.setShowInvisibles(value))\r\n\t this.$loop.schedule(this.CHANGE_TEXT);\r\n\t },\r\n\t initialValue: false\r\n\t },\r\n\t showPrintMargin: {\r\n\t set: function() { this.$updatePrintMargin(); },\r\n\t initialValue: true\r\n\t },\r\n\t printMarginColumn: {\r\n\t set: function() { this.$updatePrintMargin(); },\r\n\t initialValue: 80\r\n\t },\r\n\t printMargin: {\r\n\t set: function(val) {\r\n\t if (typeof val == \"number\")\r\n\t this.$printMarginColumn = val;\r\n\t this.$showPrintMargin = !!val;\r\n\t this.$updatePrintMargin();\r\n\t },\r\n\t get: function() {\r\n\t return this.$showPrintMargin && this.$printMarginColumn; \r\n\t }\r\n\t },\r\n\t showGutter: {\r\n\t set: function(show){\r\n\t this.$gutter.style.display = show ? \"block\" : \"none\";\r\n\t this.$loop.schedule(this.CHANGE_FULL);\r\n\t this.onGutterResize();\r\n\t },\r\n\t initialValue: true\r\n\t },\r\n\t fadeFoldWidgets: {\r\n\t set: function(show) {\r\n\t dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\r\n\t },\r\n\t initialValue: false\r\n\t },\r\n\t showFoldWidgets: {\r\n\t set: function(show) {this.$gutterLayer.setShowFoldWidgets(show)},\r\n\t initialValue: true\r\n\t },\r\n\t showLineNumbers: {\r\n\t set: function(show) {\r\n\t this.$gutterLayer.setShowLineNumbers(show);\r\n\t this.$loop.schedule(this.CHANGE_GUTTER);\r\n\t },\r\n\t initialValue: true\r\n\t },\r\n\t displayIndentGuides: {\r\n\t set: function(show) {\r\n\t if (this.$textLayer.setDisplayIndentGuides(show))\r\n\t this.$loop.schedule(this.CHANGE_TEXT);\r\n\t },\r\n\t initialValue: true\r\n\t },\r\n\t highlightGutterLine: {\r\n\t set: function(shouldHighlight) {\r\n\t if (!this.$gutterLineHighlight) {\r\n\t this.$gutterLineHighlight = dom.createElement(\"div\");\r\n\t this.$gutterLineHighlight.className = \"ace_gutter-active-line\";\r\n\t this.$gutter.appendChild(this.$gutterLineHighlight);\r\n\t return;\r\n\t }\r\n\r\n\t this.$gutterLineHighlight.style.display = shouldHighlight ? \"\" : \"none\";\r\n\t if (this.$cursorLayer.$pixelPos)\r\n\t this.$updateGutterLineHighlight();\r\n\t },\r\n\t initialValue: false,\r\n\t value: true\r\n\t },\r\n\t hScrollBarAlwaysVisible: {\r\n\t set: function(val) {\r\n\t if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\r\n\t this.$loop.schedule(this.CHANGE_SCROLL);\r\n\t },\r\n\t initialValue: false\r\n\t },\r\n\t vScrollBarAlwaysVisible: {\r\n\t set: function(val) {\r\n\t if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\r\n\t this.$loop.schedule(this.CHANGE_SCROLL);\r\n\t },\r\n\t initialValue: false\r\n\t },\r\n\t fontSize: {\r\n\t set: function(size) {\r\n\t if (typeof size == \"number\")\r\n\t size = size + \"px\";\r\n\t this.container.style.fontSize = size;\r\n\t this.updateFontSize();\r\n\t },\r\n\t initialValue: 12\r\n\t },\r\n\t fontFamily: {\r\n\t set: function(name) {\r\n\t this.container.style.fontFamily = name;\r\n\t this.updateFontSize();\r\n\t }\r\n\t },\r\n\t maxLines: {\r\n\t set: function(val) {\r\n\t this.updateFull();\r\n\t }\r\n\t },\r\n\t minLines: {\r\n\t set: function(val) {\r\n\t this.updateFull();\r\n\t }\r\n\t },\r\n\t scrollPastEnd: {\r\n\t set: function(val) {\r\n\t val = +val || 0;\r\n\t if (this.$scrollPastEnd == val)\r\n\t return;\r\n\t this.$scrollPastEnd = val;\r\n\t this.$loop.schedule(this.CHANGE_SCROLL);\r\n\t },\r\n\t initialValue: 0,\r\n\t handlesSet: true\r\n\t },\r\n\t fixedWidthGutter: {\r\n\t set: function(val) {\r\n\t this.$gutterLayer.$fixedWidth = !!val;\r\n\t this.$loop.schedule(this.CHANGE_GUTTER);\r\n\t }\r\n\t },\r\n\t theme: {\r\n\t set: function(val) { this.setTheme(val) },\r\n\t get: function() { return this.$themeId || this.theme; },\r\n\t initialValue: \"./theme/textmate\",\r\n\t handlesSet: true\r\n\t }\r\n\t});\r\n\r\n\texports.VirtualRenderer = VirtualRenderer;\r\n\t});\r\n\r\n\tace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar net = acequire(\"../lib/net\");\r\n\tvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\r\n\tvar config = acequire(\"../config\");\r\n\r\n\tvar WorkerClient = function(topLevelNamespaces, mod, classname, workerUrl) {\r\n\t this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\r\n\t this.changeListener = this.changeListener.bind(this);\r\n\t this.onMessage = this.onMessage.bind(this);\r\n\t if (acequire.nameToUrl && !acequire.toUrl)\r\n\t acequire.toUrl = acequire.nameToUrl;\r\n\t \r\n\t if (config.get(\"packaged\") || !acequire.toUrl) {\r\n\t workerUrl = workerUrl || config.moduleUrl(mod.id, \"worker\")\r\n\t } else {\r\n\t var normalizePath = this.$normalizePath;\r\n\t workerUrl = workerUrl || normalizePath(acequire.toUrl(\"ace/worker/worker.js\", null, \"_\"));\r\n\r\n\t var tlns = {};\r\n\t topLevelNamespaces.forEach(function(ns) {\r\n\t tlns[ns] = normalizePath(acequire.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\r\n\t });\r\n\t }\r\n\r\n\t try {\r\n\t var workerSrc = mod.src;\r\n\t var Blob = __webpack_require__(66);\r\n\t var blob = new Blob([ workerSrc ], { type: 'application/javascript' });\r\n\t var blobUrl = (window.URL || window.webkitURL).createObjectURL(blob);\r\n\r\n\t this.$worker = new Worker(blobUrl);\r\n\r\n\t } catch(e) {\r\n\t if (e instanceof window.DOMException) {\r\n\t var blob = this.$workerBlob(workerUrl);\r\n\t var URL = window.URL || window.webkitURL;\r\n\t var blobURL = URL.createObjectURL(blob);\r\n\r\n\t this.$worker = new Worker(blobURL);\r\n\t URL.revokeObjectURL(blobURL);\r\n\t } else {\r\n\t throw e;\r\n\t }\r\n\t }\r\n\t this.$worker.postMessage({\r\n\t init : true,\r\n\t tlns : tlns,\r\n\t module : mod.id,\r\n\t classname : classname\r\n\t });\r\n\r\n\t this.callbackId = 1;\r\n\t this.callbacks = {};\r\n\r\n\t this.$worker.onmessage = this.onMessage;\r\n\t};\r\n\r\n\t(function(){\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\r\n\t this.onMessage = function(e) {\r\n\t var msg = e.data;\r\n\t switch(msg.type) {\r\n\t case \"event\":\r\n\t this._signal(msg.name, {data: msg.data});\r\n\t break;\r\n\t case \"call\":\r\n\t var callback = this.callbacks[msg.id];\r\n\t if (callback) {\r\n\t callback(msg.data);\r\n\t delete this.callbacks[msg.id];\r\n\t }\r\n\t break;\r\n\t case \"error\":\r\n\t this.reportError(msg.data);\r\n\t break;\r\n\t case \"log\":\r\n\t window.console && console.log && console.log.apply(console, msg.data);\r\n\t break;\r\n\t }\r\n\t };\r\n\t \r\n\t this.reportError = function(err) {\r\n\t window.console && console.error && console.error(err);\r\n\t };\r\n\r\n\t this.$normalizePath = function(path) {\r\n\t return net.qualifyURL(path);\r\n\t };\r\n\r\n\t this.terminate = function() {\r\n\t this._signal(\"terminate\", {});\r\n\t this.deltaQueue = null;\r\n\t this.$worker.terminate();\r\n\t this.$worker = null;\r\n\t if (this.$doc)\r\n\t this.$doc.off(\"change\", this.changeListener);\r\n\t this.$doc = null;\r\n\t };\r\n\r\n\t this.send = function(cmd, args) {\r\n\t this.$worker.postMessage({command: cmd, args: args});\r\n\t };\r\n\r\n\t this.call = function(cmd, args, callback) {\r\n\t if (callback) {\r\n\t var id = this.callbackId++;\r\n\t this.callbacks[id] = callback;\r\n\t args.push(id);\r\n\t }\r\n\t this.send(cmd, args);\r\n\t };\r\n\r\n\t this.emit = function(event, data) {\r\n\t try {\r\n\t this.$worker.postMessage({event: event, data: {data: data.data}});\r\n\t }\r\n\t catch(ex) {\r\n\t console.error(ex.stack);\r\n\t }\r\n\t };\r\n\r\n\t this.attachToDocument = function(doc) {\r\n\t if(this.$doc)\r\n\t this.terminate();\r\n\r\n\t this.$doc = doc;\r\n\t this.call(\"setValue\", [doc.getValue()]);\r\n\t doc.on(\"change\", this.changeListener);\r\n\t };\r\n\r\n\t this.changeListener = function(delta) {\r\n\t if (!this.deltaQueue) {\r\n\t this.deltaQueue = [];\r\n\t setTimeout(this.$sendDeltaQueue, 0);\r\n\t }\r\n\t if (delta.action == \"insert\")\r\n\t this.deltaQueue.push(delta.start, delta.lines);\r\n\t else\r\n\t this.deltaQueue.push(delta.start, delta.end);\r\n\t };\r\n\r\n\t this.$sendDeltaQueue = function() {\r\n\t var q = this.deltaQueue;\r\n\t if (!q) return;\r\n\t this.deltaQueue = null;\r\n\t if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\r\n\t this.call(\"setValue\", [this.$doc.getValue()]);\r\n\t } else\r\n\t this.emit(\"change\", {data: q});\r\n\t };\r\n\r\n\t this.$workerBlob = function(workerUrl) {\r\n\t var script = \"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\r\n\t try {\r\n\t return new Blob([script], {\"type\": \"application/javascript\"});\r\n\t } catch (e) { // Backwards-compatibility\r\n\t var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\r\n\t var blobBuilder = new BlobBuilder();\r\n\t blobBuilder.append(script);\r\n\t return blobBuilder.getBlob(\"application/javascript\");\r\n\t }\r\n\t };\r\n\r\n\t}).call(WorkerClient.prototype);\r\n\r\n\r\n\tvar UIWorkerClient = function(topLevelNamespaces, mod, classname) {\r\n\t this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\r\n\t this.changeListener = this.changeListener.bind(this);\r\n\t this.callbackId = 1;\r\n\t this.callbacks = {};\r\n\t this.messageBuffer = [];\r\n\r\n\t var main = null;\r\n\t var emitSync = false;\r\n\t var sender = Object.create(EventEmitter);\r\n\t var _self = this;\r\n\r\n\t this.$worker = {};\r\n\t this.$worker.terminate = function() {};\r\n\t this.$worker.postMessage = function(e) {\r\n\t _self.messageBuffer.push(e);\r\n\t if (main) {\r\n\t if (emitSync)\r\n\t setTimeout(processNext);\r\n\t else\r\n\t processNext();\r\n\t }\r\n\t };\r\n\t this.setEmitSync = function(val) { emitSync = val };\r\n\r\n\t var processNext = function() {\r\n\t var msg = _self.messageBuffer.shift();\r\n\t if (msg.command)\r\n\t main[msg.command].apply(main, msg.args);\r\n\t else if (msg.event)\r\n\t sender._signal(msg.event, msg.data);\r\n\t };\r\n\r\n\t sender.postMessage = function(msg) {\r\n\t _self.onMessage({data: msg});\r\n\t };\r\n\t sender.callback = function(data, callbackId) {\r\n\t this.postMessage({type: \"call\", id: callbackId, data: data});\r\n\t };\r\n\t sender.emit = function(name, data) {\r\n\t this.postMessage({type: \"event\", name: name, data: data});\r\n\t };\r\n\r\n\t config.loadModule([\"worker\", mod], function(Main) {\r\n\t main = new Main[classname](sender);\r\n\t while (_self.messageBuffer.length)\r\n\t processNext();\r\n\t });\r\n\t};\r\n\r\n\tUIWorkerClient.prototype = WorkerClient.prototype;\r\n\r\n\texports.UIWorkerClient = UIWorkerClient;\r\n\texports.WorkerClient = WorkerClient;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Range = acequire(\"./range\").Range;\r\n\tvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\r\n\tvar PlaceHolder = function(session, length, pos, others, mainClass, othersClass) {\r\n\t var _self = this;\r\n\t this.length = length;\r\n\t this.session = session;\r\n\t this.doc = session.getDocument();\r\n\t this.mainClass = mainClass;\r\n\t this.othersClass = othersClass;\r\n\t this.$onUpdate = this.onUpdate.bind(this);\r\n\t this.doc.on(\"change\", this.$onUpdate);\r\n\t this.$others = others;\r\n\t \r\n\t this.$onCursorChange = function() {\r\n\t setTimeout(function() {\r\n\t _self.onCursorChange();\r\n\t });\r\n\t };\r\n\t \r\n\t this.$pos = pos;\r\n\t var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || {length: -1};\r\n\t this.$undoStackDepth = undoStack.length;\r\n\t this.setup();\r\n\r\n\t session.selection.on(\"changeCursor\", this.$onCursorChange);\r\n\t};\r\n\r\n\t(function() {\r\n\r\n\t oop.implement(this, EventEmitter);\r\n\t this.setup = function() {\r\n\t var _self = this;\r\n\t var doc = this.doc;\r\n\t var session = this.session;\r\n\t \r\n\t this.selectionBefore = session.selection.toJSON();\r\n\t if (session.selection.inMultiSelectMode)\r\n\t session.selection.toSingleRange();\r\n\r\n\t this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\r\n\t var pos = this.pos;\r\n\t pos.$insertRight = true;\r\n\t pos.detach();\r\n\t pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\r\n\t this.others = [];\r\n\t this.$others.forEach(function(other) {\r\n\t var anchor = doc.createAnchor(other.row, other.column);\r\n\t anchor.$insertRight = true;\r\n\t anchor.detach();\r\n\t _self.others.push(anchor);\r\n\t });\r\n\t session.setUndoSelect(false);\r\n\t };\r\n\t this.showOtherMarkers = function() {\r\n\t if (this.othersActive) return;\r\n\t var session = this.session;\r\n\t var _self = this;\r\n\t this.othersActive = true;\r\n\t this.others.forEach(function(anchor) {\r\n\t anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column+_self.length), _self.othersClass, null, false);\r\n\t });\r\n\t };\r\n\t this.hideOtherMarkers = function() {\r\n\t if (!this.othersActive) return;\r\n\t this.othersActive = false;\r\n\t for (var i = 0; i < this.others.length; i++) {\r\n\t this.session.removeMarker(this.others[i].markerId);\r\n\t }\r\n\t };\r\n\t this.onUpdate = function(delta) {\r\n\t if (this.$updating)\r\n\t return this.updateAnchors(delta);\r\n\t \r\n\t var range = delta;\r\n\t if (range.start.row !== range.end.row) return;\r\n\t if (range.start.row !== this.pos.row) return;\r\n\t this.$updating = true;\r\n\t var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\r\n\t var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\r\n\t var distanceFromStart = range.start.column - this.pos.column;\r\n\t \r\n\t this.updateAnchors(delta);\r\n\t \r\n\t if (inMainRange)\r\n\t this.length += lengthDiff;\r\n\r\n\t if (inMainRange && !this.session.$fromUndo) {\r\n\t if (delta.action === 'insert') {\r\n\t for (var i = this.others.length - 1; i >= 0; i--) {\r\n\t var otherPos = this.others[i];\r\n\t var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\r\n\t this.doc.insertMergedLines(newPos, delta.lines);\r\n\t }\r\n\t } else if (delta.action === 'remove') {\r\n\t for (var i = this.others.length - 1; i >= 0; i--) {\r\n\t var otherPos = this.others[i];\r\n\t var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\r\n\t this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\r\n\t }\r\n\t }\r\n\t }\r\n\t \r\n\t this.$updating = false;\r\n\t this.updateMarkers();\r\n\t };\r\n\t \r\n\t this.updateAnchors = function(delta) {\r\n\t this.pos.onChange(delta);\r\n\t for (var i = this.others.length; i--;)\r\n\t this.others[i].onChange(delta);\r\n\t this.updateMarkers();\r\n\t };\r\n\t \r\n\t this.updateMarkers = function() {\r\n\t if (this.$updating)\r\n\t return;\r\n\t var _self = this;\r\n\t var session = this.session;\r\n\t var updateMarker = function(pos, className) {\r\n\t session.removeMarker(pos.markerId);\r\n\t pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column+_self.length), className, null, false);\r\n\t };\r\n\t updateMarker(this.pos, this.mainClass);\r\n\t for (var i = this.others.length; i--;)\r\n\t updateMarker(this.others[i], this.othersClass);\r\n\t };\r\n\r\n\t this.onCursorChange = function(event) {\r\n\t if (this.$updating || !this.session) return;\r\n\t var pos = this.session.selection.getCursor();\r\n\t if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\r\n\t this.showOtherMarkers();\r\n\t this._emit(\"cursorEnter\", event);\r\n\t } else {\r\n\t this.hideOtherMarkers();\r\n\t this._emit(\"cursorLeave\", event);\r\n\t }\r\n\t }; \r\n\t this.detach = function() {\r\n\t this.session.removeMarker(this.pos && this.pos.markerId);\r\n\t this.hideOtherMarkers();\r\n\t this.doc.removeEventListener(\"change\", this.$onUpdate);\r\n\t this.session.selection.removeEventListener(\"changeCursor\", this.$onCursorChange);\r\n\t this.session.setUndoSelect(true);\r\n\t this.session = null;\r\n\t };\r\n\t this.cancel = function() {\r\n\t if (this.$undoStackDepth === -1)\r\n\t return;\r\n\t var undoManager = this.session.getUndoManager();\r\n\t var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth;\r\n\t for (var i = 0; i < undosRequired; i++) {\r\n\t undoManager.undo(true);\r\n\t }\r\n\t if (this.selectionBefore)\r\n\t this.session.selection.fromJSON(this.selectionBefore);\r\n\t };\r\n\t}).call(PlaceHolder.prototype);\r\n\r\n\r\n\texports.PlaceHolder = PlaceHolder;\r\n\t});\r\n\r\n\tace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\r\n\r\n\tvar event = acequire(\"../lib/event\");\r\n\tvar useragent = acequire(\"../lib/useragent\");\r\n\tfunction isSamePoint(p1, p2) {\r\n\t return p1.row == p2.row && p1.column == p2.column;\r\n\t}\r\n\r\n\tfunction onMouseDown(e) {\r\n\t var ev = e.domEvent;\r\n\t var alt = ev.altKey;\r\n\t var shift = ev.shiftKey;\r\n\t var ctrl = ev.ctrlKey;\r\n\t var accel = e.getAccelKey();\r\n\t var button = e.getButton();\r\n\t \r\n\t if (ctrl && useragent.isMac)\r\n\t button = ev.button;\r\n\r\n\t if (e.editor.inMultiSelectMode && button == 2) {\r\n\t e.editor.textInput.onContextMenu(e.domEvent);\r\n\t return;\r\n\t }\r\n\t \r\n\t if (!ctrl && !alt && !accel) {\r\n\t if (button === 0 && e.editor.inMultiSelectMode)\r\n\t e.editor.exitMultiSelectMode();\r\n\t return;\r\n\t }\r\n\t \r\n\t if (button !== 0)\r\n\t return;\r\n\r\n\t var editor = e.editor;\r\n\t var selection = editor.selection;\r\n\t var isMultiSelect = editor.inMultiSelectMode;\r\n\t var pos = e.getDocumentPosition();\r\n\t var cursor = selection.getCursor();\r\n\t var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));\r\n\r\n\t var mouseX = e.x, mouseY = e.y;\r\n\t var onMouseSelection = function(e) {\r\n\t mouseX = e.clientX;\r\n\t mouseY = e.clientY;\r\n\t };\r\n\t \r\n\t var session = editor.session;\r\n\t var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\r\n\t var screenCursor = screenAnchor;\r\n\t \r\n\t var selectionMode;\r\n\t if (editor.$mouseHandler.$enableJumpToDef) {\r\n\t if (ctrl && alt || accel && alt)\r\n\t selectionMode = shift ? \"block\" : \"add\";\r\n\t else if (alt && editor.$blockSelectEnabled)\r\n\t selectionMode = \"block\";\r\n\t } else {\r\n\t if (accel && !alt) {\r\n\t selectionMode = \"add\";\r\n\t if (!isMultiSelect && shift)\r\n\t return;\r\n\t } else if (alt && editor.$blockSelectEnabled) {\r\n\t selectionMode = \"block\";\r\n\t }\r\n\t }\r\n\t \r\n\t if (selectionMode && useragent.isMac && ev.ctrlKey) {\r\n\t editor.$mouseHandler.cancelContextMenu();\r\n\t }\r\n\r\n\t if (selectionMode == \"add\") {\r\n\t if (!isMultiSelect && inSelection)\r\n\t return; // dragging\r\n\r\n\t if (!isMultiSelect) {\r\n\t var range = selection.toOrientedRange();\r\n\t editor.addSelectionMarker(range);\r\n\t }\r\n\r\n\t var oldRange = selection.rangeList.rangeAtPoint(pos);\r\n\t \r\n\t \r\n\t editor.$blockScrolling++;\r\n\t editor.inVirtualSelectionMode = true;\r\n\t \r\n\t if (shift) {\r\n\t oldRange = null;\r\n\t range = selection.ranges[0] || range;\r\n\t editor.removeSelectionMarker(range);\r\n\t }\r\n\t editor.once(\"mouseup\", function() {\r\n\t var tmpSel = selection.toOrientedRange();\r\n\r\n\t if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))\r\n\t selection.substractPoint(tmpSel.cursor);\r\n\t else {\r\n\t if (shift) {\r\n\t selection.substractPoint(range.cursor);\r\n\t } else if (range) {\r\n\t editor.removeSelectionMarker(range);\r\n\t selection.addRange(range);\r\n\t }\r\n\t selection.addRange(tmpSel);\r\n\t }\r\n\t editor.$blockScrolling--;\r\n\t editor.inVirtualSelectionMode = false;\r\n\t });\r\n\r\n\t } else if (selectionMode == \"block\") {\r\n\t e.stop();\r\n\t editor.inVirtualSelectionMode = true; \r\n\t var initialRange;\r\n\t var rectSel = [];\r\n\t var blockSelect = function() {\r\n\t var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\r\n\t var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column);\r\n\r\n\t if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\r\n\t return;\r\n\t screenCursor = newCursor;\r\n\t \r\n\t editor.$blockScrolling++;\r\n\t editor.selection.moveToPosition(cursor);\r\n\t editor.renderer.scrollCursorIntoView();\r\n\r\n\t editor.removeSelectionMarkers(rectSel);\r\n\t rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\r\n\t if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())\r\n\t rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\r\n\t rectSel.forEach(editor.addSelectionMarker, editor);\r\n\t editor.updateSelectionMarkers();\r\n\t editor.$blockScrolling--;\r\n\t };\r\n\t editor.$blockScrolling++;\r\n\t if (isMultiSelect && !accel) {\r\n\t selection.toSingleRange();\r\n\t } else if (!isMultiSelect && accel) {\r\n\t initialRange = selection.toOrientedRange();\r\n\t editor.addSelectionMarker(initialRange);\r\n\t }\r\n\t \r\n\t if (shift)\r\n\t screenAnchor = session.documentToScreenPosition(selection.lead); \r\n\t else\r\n\t selection.moveToPosition(pos);\r\n\t editor.$blockScrolling--;\r\n\t \r\n\t screenCursor = {row: -1, column: -1};\r\n\r\n\t var onMouseSelectionEnd = function(e) {\r\n\t clearInterval(timerId);\r\n\t editor.removeSelectionMarkers(rectSel);\r\n\t if (!rectSel.length)\r\n\t rectSel = [selection.toOrientedRange()];\r\n\t editor.$blockScrolling++;\r\n\t if (initialRange) {\r\n\t editor.removeSelectionMarker(initialRange);\r\n\t selection.toSingleRange(initialRange);\r\n\t }\r\n\t for (var i = 0; i < rectSel.length; i++)\r\n\t selection.addRange(rectSel[i]);\r\n\t editor.inVirtualSelectionMode = false;\r\n\t editor.$mouseHandler.$clickSelection = null;\r\n\t editor.$blockScrolling--;\r\n\t };\r\n\r\n\t var onSelectionInterval = blockSelect;\r\n\r\n\t event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\r\n\t var timerId = setInterval(function() {onSelectionInterval();}, 20);\r\n\r\n\t return e.preventDefault();\r\n\t }\r\n\t}\r\n\r\n\r\n\texports.onMouseDown = onMouseDown;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"], function(acequire, exports, module) {\r\n\texports.defaultCommands = [{\r\n\t name: \"addCursorAbove\",\r\n\t exec: function(editor) { editor.selectMoreLines(-1); },\r\n\t bindKey: {win: \"Ctrl-Alt-Up\", mac: \"Ctrl-Alt-Up\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"addCursorBelow\",\r\n\t exec: function(editor) { editor.selectMoreLines(1); },\r\n\t bindKey: {win: \"Ctrl-Alt-Down\", mac: \"Ctrl-Alt-Down\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"addCursorAboveSkipCurrent\",\r\n\t exec: function(editor) { editor.selectMoreLines(-1, true); },\r\n\t bindKey: {win: \"Ctrl-Alt-Shift-Up\", mac: \"Ctrl-Alt-Shift-Up\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"addCursorBelowSkipCurrent\",\r\n\t exec: function(editor) { editor.selectMoreLines(1, true); },\r\n\t bindKey: {win: \"Ctrl-Alt-Shift-Down\", mac: \"Ctrl-Alt-Shift-Down\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectMoreBefore\",\r\n\t exec: function(editor) { editor.selectMore(-1); },\r\n\t bindKey: {win: \"Ctrl-Alt-Left\", mac: \"Ctrl-Alt-Left\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectMoreAfter\",\r\n\t exec: function(editor) { editor.selectMore(1); },\r\n\t bindKey: {win: \"Ctrl-Alt-Right\", mac: \"Ctrl-Alt-Right\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectNextBefore\",\r\n\t exec: function(editor) { editor.selectMore(-1, true); },\r\n\t bindKey: {win: \"Ctrl-Alt-Shift-Left\", mac: \"Ctrl-Alt-Shift-Left\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"selectNextAfter\",\r\n\t exec: function(editor) { editor.selectMore(1, true); },\r\n\t bindKey: {win: \"Ctrl-Alt-Shift-Right\", mac: \"Ctrl-Alt-Shift-Right\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"splitIntoLines\",\r\n\t exec: function(editor) { editor.multiSelect.splitIntoLines(); },\r\n\t bindKey: {win: \"Ctrl-Alt-L\", mac: \"Ctrl-Alt-L\"},\r\n\t readOnly: true\r\n\t}, {\r\n\t name: \"alignCursors\",\r\n\t exec: function(editor) { editor.alignCursors(); },\r\n\t bindKey: {win: \"Ctrl-Alt-A\", mac: \"Ctrl-Alt-A\"},\r\n\t scrollIntoView: \"cursor\"\r\n\t}, {\r\n\t name: \"findAll\",\r\n\t exec: function(editor) { editor.findAll(); },\r\n\t bindKey: {win: \"Ctrl-Alt-K\", mac: \"Ctrl-Alt-G\"},\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true\r\n\t}];\r\n\texports.multiSelectCommands = [{\r\n\t name: \"singleSelection\",\r\n\t bindKey: \"esc\",\r\n\t exec: function(editor) { editor.exitMultiSelectMode(); },\r\n\t scrollIntoView: \"cursor\",\r\n\t readOnly: true,\r\n\t isAvailable: function(editor) {return editor && editor.inMultiSelectMode}\r\n\t}];\r\n\r\n\tvar HashHandler = acequire(\"../keyboard/hash_handler\").HashHandler;\r\n\texports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"], function(acequire, exports, module) {\r\n\r\n\tvar RangeList = acequire(\"./range_list\").RangeList;\r\n\tvar Range = acequire(\"./range\").Range;\r\n\tvar Selection = acequire(\"./selection\").Selection;\r\n\tvar onMouseDown = acequire(\"./mouse/multi_select_handler\").onMouseDown;\r\n\tvar event = acequire(\"./lib/event\");\r\n\tvar lang = acequire(\"./lib/lang\");\r\n\tvar commands = acequire(\"./commands/multi_select_commands\");\r\n\texports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\r\n\tvar Search = acequire(\"./search\").Search;\r\n\tvar search = new Search();\r\n\r\n\tfunction find(session, needle, dir) {\r\n\t search.$options.wrap = true;\r\n\t search.$options.needle = needle;\r\n\t search.$options.backwards = dir == -1;\r\n\t return search.find(session);\r\n\t}\r\n\tvar EditSession = acequire(\"./edit_session\").EditSession;\r\n\t(function() {\r\n\t this.getSelectionMarkers = function() {\r\n\t return this.$selectionMarkers;\r\n\t };\r\n\t}).call(EditSession.prototype);\r\n\t(function() {\r\n\t this.ranges = null;\r\n\t this.rangeList = null;\r\n\t this.addRange = function(range, $blockChangeEvents) {\r\n\t if (!range)\r\n\t return;\r\n\r\n\t if (!this.inMultiSelectMode && this.rangeCount === 0) {\r\n\t var oldRange = this.toOrientedRange();\r\n\t this.rangeList.add(oldRange);\r\n\t this.rangeList.add(range);\r\n\t if (this.rangeList.ranges.length != 2) {\r\n\t this.rangeList.removeAll();\r\n\t return $blockChangeEvents || this.fromOrientedRange(range);\r\n\t }\r\n\t this.rangeList.removeAll();\r\n\t this.rangeList.add(oldRange);\r\n\t this.$onAddRange(oldRange);\r\n\t }\r\n\r\n\t if (!range.cursor)\r\n\t range.cursor = range.end;\r\n\r\n\t var removed = this.rangeList.add(range);\r\n\r\n\t this.$onAddRange(range);\r\n\r\n\t if (removed.length)\r\n\t this.$onRemoveRange(removed);\r\n\r\n\t if (this.rangeCount > 1 && !this.inMultiSelectMode) {\r\n\t this._signal(\"multiSelect\");\r\n\t this.inMultiSelectMode = true;\r\n\t this.session.$undoSelect = false;\r\n\t this.rangeList.attach(this.session);\r\n\t }\r\n\r\n\t return $blockChangeEvents || this.fromOrientedRange(range);\r\n\t };\r\n\r\n\t this.toSingleRange = function(range) {\r\n\t range = range || this.ranges[0];\r\n\t var removed = this.rangeList.removeAll();\r\n\t if (removed.length)\r\n\t this.$onRemoveRange(removed);\r\n\r\n\t range && this.fromOrientedRange(range);\r\n\t };\r\n\t this.substractPoint = function(pos) {\r\n\t var removed = this.rangeList.substractPoint(pos);\r\n\t if (removed) {\r\n\t this.$onRemoveRange(removed);\r\n\t return removed[0];\r\n\t }\r\n\t };\r\n\t this.mergeOverlappingRanges = function() {\r\n\t var removed = this.rangeList.merge();\r\n\t if (removed.length)\r\n\t this.$onRemoveRange(removed);\r\n\t else if(this.ranges[0])\r\n\t this.fromOrientedRange(this.ranges[0]);\r\n\t };\r\n\r\n\t this.$onAddRange = function(range) {\r\n\t this.rangeCount = this.rangeList.ranges.length;\r\n\t this.ranges.unshift(range);\r\n\t this._signal(\"addRange\", {range: range});\r\n\t };\r\n\r\n\t this.$onRemoveRange = function(removed) {\r\n\t this.rangeCount = this.rangeList.ranges.length;\r\n\t if (this.rangeCount == 1 && this.inMultiSelectMode) {\r\n\t var lastRange = this.rangeList.ranges.pop();\r\n\t removed.push(lastRange);\r\n\t this.rangeCount = 0;\r\n\t }\r\n\r\n\t for (var i = removed.length; i--; ) {\r\n\t var index = this.ranges.indexOf(removed[i]);\r\n\t this.ranges.splice(index, 1);\r\n\t }\r\n\r\n\t this._signal(\"removeRange\", {ranges: removed});\r\n\r\n\t if (this.rangeCount === 0 && this.inMultiSelectMode) {\r\n\t this.inMultiSelectMode = false;\r\n\t this._signal(\"singleSelect\");\r\n\t this.session.$undoSelect = true;\r\n\t this.rangeList.detach(this.session);\r\n\t }\r\n\r\n\t lastRange = lastRange || this.ranges[0];\r\n\t if (lastRange && !lastRange.isEqual(this.getRange()))\r\n\t this.fromOrientedRange(lastRange);\r\n\t };\r\n\t this.$initRangeList = function() {\r\n\t if (this.rangeList)\r\n\t return;\r\n\r\n\t this.rangeList = new RangeList();\r\n\t this.ranges = [];\r\n\t this.rangeCount = 0;\r\n\t };\r\n\t this.getAllRanges = function() {\r\n\t return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\r\n\t };\r\n\r\n\t this.splitIntoLines = function () {\r\n\t if (this.rangeCount > 1) {\r\n\t var ranges = this.rangeList.ranges;\r\n\t var lastRange = ranges[ranges.length - 1];\r\n\t var range = Range.fromPoints(ranges[0].start, lastRange.end);\r\n\r\n\t this.toSingleRange();\r\n\t this.setSelectionRange(range, lastRange.cursor == lastRange.start);\r\n\t } else {\r\n\t var range = this.getRange();\r\n\t var isBackwards = this.isBackwards();\r\n\t var startRow = range.start.row;\r\n\t var endRow = range.end.row;\r\n\t if (startRow == endRow) {\r\n\t if (isBackwards)\r\n\t var start = range.end, end = range.start;\r\n\t else\r\n\t var start = range.start, end = range.end;\r\n\t \r\n\t this.addRange(Range.fromPoints(end, end));\r\n\t this.addRange(Range.fromPoints(start, start));\r\n\t return;\r\n\t }\r\n\r\n\t var rectSel = [];\r\n\t var r = this.getLineRange(startRow, true);\r\n\t r.start.column = range.start.column;\r\n\t rectSel.push(r);\r\n\r\n\t for (var i = startRow + 1; i < endRow; i++)\r\n\t rectSel.push(this.getLineRange(i, true));\r\n\r\n\t r = this.getLineRange(endRow, true);\r\n\t r.end.column = range.end.column;\r\n\t rectSel.push(r);\r\n\r\n\t rectSel.forEach(this.addRange, this);\r\n\t }\r\n\t };\r\n\t this.toggleBlockSelection = function () {\r\n\t if (this.rangeCount > 1) {\r\n\t var ranges = this.rangeList.ranges;\r\n\t var lastRange = ranges[ranges.length - 1];\r\n\t var range = Range.fromPoints(ranges[0].start, lastRange.end);\r\n\r\n\t this.toSingleRange();\r\n\t this.setSelectionRange(range, lastRange.cursor == lastRange.start);\r\n\t } else {\r\n\t var cursor = this.session.documentToScreenPosition(this.selectionLead);\r\n\t var anchor = this.session.documentToScreenPosition(this.selectionAnchor);\r\n\r\n\t var rectSel = this.rectangularRangeBlock(cursor, anchor);\r\n\t rectSel.forEach(this.addRange, this);\r\n\t }\r\n\t };\r\n\t this.rectangularRangeBlock = function(screenCursor, screenAnchor, includeEmptyLines) {\r\n\t var rectSel = [];\r\n\r\n\t var xBackwards = screenCursor.column < screenAnchor.column;\r\n\t if (xBackwards) {\r\n\t var startColumn = screenCursor.column;\r\n\t var endColumn = screenAnchor.column;\r\n\t } else {\r\n\t var startColumn = screenAnchor.column;\r\n\t var endColumn = screenCursor.column;\r\n\t }\r\n\r\n\t var yBackwards = screenCursor.row < screenAnchor.row;\r\n\t if (yBackwards) {\r\n\t var startRow = screenCursor.row;\r\n\t var endRow = screenAnchor.row;\r\n\t } else {\r\n\t var startRow = screenAnchor.row;\r\n\t var endRow = screenCursor.row;\r\n\t }\r\n\r\n\t if (startColumn < 0)\r\n\t startColumn = 0;\r\n\t if (startRow < 0)\r\n\t startRow = 0;\r\n\r\n\t if (startRow == endRow)\r\n\t includeEmptyLines = true;\r\n\r\n\t for (var row = startRow; row <= endRow; row++) {\r\n\t var range = Range.fromPoints(\r\n\t this.session.screenToDocumentPosition(row, startColumn),\r\n\t this.session.screenToDocumentPosition(row, endColumn)\r\n\t );\r\n\t if (range.isEmpty()) {\r\n\t if (docEnd && isSamePoint(range.end, docEnd))\r\n\t break;\r\n\t var docEnd = range.end;\r\n\t }\r\n\t range.cursor = xBackwards ? range.start : range.end;\r\n\t rectSel.push(range);\r\n\t }\r\n\r\n\t if (yBackwards)\r\n\t rectSel.reverse();\r\n\r\n\t if (!includeEmptyLines) {\r\n\t var end = rectSel.length - 1;\r\n\t while (rectSel[end].isEmpty() && end > 0)\r\n\t end--;\r\n\t if (end > 0) {\r\n\t var start = 0;\r\n\t while (rectSel[start].isEmpty())\r\n\t start++;\r\n\t }\r\n\t for (var i = end; i >= start; i--) {\r\n\t if (rectSel[i].isEmpty())\r\n\t rectSel.splice(i, 1);\r\n\t }\r\n\t }\r\n\r\n\t return rectSel;\r\n\t };\r\n\t}).call(Selection.prototype);\r\n\tvar Editor = acequire(\"./editor\").Editor;\r\n\t(function() {\r\n\t this.updateSelectionMarkers = function() {\r\n\t this.renderer.updateCursor();\r\n\t this.renderer.updateBackMarkers();\r\n\t };\r\n\t this.addSelectionMarker = function(orientedRange) {\r\n\t if (!orientedRange.cursor)\r\n\t orientedRange.cursor = orientedRange.end;\r\n\r\n\t var style = this.getSelectionStyle();\r\n\t orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\r\n\r\n\t this.session.$selectionMarkers.push(orientedRange);\r\n\t this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\r\n\t return orientedRange;\r\n\t };\r\n\t this.removeSelectionMarker = function(range) {\r\n\t if (!range.marker)\r\n\t return;\r\n\t this.session.removeMarker(range.marker);\r\n\t var index = this.session.$selectionMarkers.indexOf(range);\r\n\t if (index != -1)\r\n\t this.session.$selectionMarkers.splice(index, 1);\r\n\t this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\r\n\t };\r\n\r\n\t this.removeSelectionMarkers = function(ranges) {\r\n\t var markerList = this.session.$selectionMarkers;\r\n\t for (var i = ranges.length; i--; ) {\r\n\t var range = ranges[i];\r\n\t if (!range.marker)\r\n\t continue;\r\n\t this.session.removeMarker(range.marker);\r\n\t var index = markerList.indexOf(range);\r\n\t if (index != -1)\r\n\t markerList.splice(index, 1);\r\n\t }\r\n\t this.session.selectionMarkerCount = markerList.length;\r\n\t };\r\n\r\n\t this.$onAddRange = function(e) {\r\n\t this.addSelectionMarker(e.range);\r\n\t this.renderer.updateCursor();\r\n\t this.renderer.updateBackMarkers();\r\n\t };\r\n\r\n\t this.$onRemoveRange = function(e) {\r\n\t this.removeSelectionMarkers(e.ranges);\r\n\t this.renderer.updateCursor();\r\n\t this.renderer.updateBackMarkers();\r\n\t };\r\n\r\n\t this.$onMultiSelect = function(e) {\r\n\t if (this.inMultiSelectMode)\r\n\t return;\r\n\t this.inMultiSelectMode = true;\r\n\r\n\t this.setStyle(\"ace_multiselect\");\r\n\t this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\r\n\t this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\r\n\r\n\t this.renderer.updateCursor();\r\n\t this.renderer.updateBackMarkers();\r\n\t };\r\n\r\n\t this.$onSingleSelect = function(e) {\r\n\t if (this.session.multiSelect.inVirtualMode)\r\n\t return;\r\n\t this.inMultiSelectMode = false;\r\n\r\n\t this.unsetStyle(\"ace_multiselect\");\r\n\t this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\r\n\r\n\t this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\r\n\t this.renderer.updateCursor();\r\n\t this.renderer.updateBackMarkers();\r\n\t this._emit(\"changeSelection\");\r\n\t };\r\n\r\n\t this.$onMultiSelectExec = function(e) {\r\n\t var command = e.command;\r\n\t var editor = e.editor;\r\n\t if (!editor.multiSelect)\r\n\t return;\r\n\t if (!command.multiSelectAction) {\r\n\t var result = command.exec(editor, e.args || {});\r\n\t editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\r\n\t editor.multiSelect.mergeOverlappingRanges();\r\n\t } else if (command.multiSelectAction == \"forEach\") {\r\n\t result = editor.forEachSelection(command, e.args);\r\n\t } else if (command.multiSelectAction == \"forEachLine\") {\r\n\t result = editor.forEachSelection(command, e.args, true);\r\n\t } else if (command.multiSelectAction == \"single\") {\r\n\t editor.exitMultiSelectMode();\r\n\t result = command.exec(editor, e.args || {});\r\n\t } else {\r\n\t result = command.multiSelectAction(editor, e.args || {});\r\n\t }\r\n\t return result;\r\n\t }; \r\n\t this.forEachSelection = function(cmd, args, options) {\r\n\t if (this.inVirtualSelectionMode)\r\n\t return;\r\n\t var keepOrder = options && options.keepOrder;\r\n\t var $byLines = options == true || options && options.$byLines\r\n\t var session = this.session;\r\n\t var selection = this.selection;\r\n\t var rangeList = selection.rangeList;\r\n\t var ranges = (keepOrder ? selection : rangeList).ranges;\r\n\t var result;\r\n\t \r\n\t if (!ranges.length)\r\n\t return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\r\n\t \r\n\t var reg = selection._eventRegistry;\r\n\t selection._eventRegistry = {};\r\n\r\n\t var tmpSel = new Selection(session);\r\n\t this.inVirtualSelectionMode = true;\r\n\t for (var i = ranges.length; i--;) {\r\n\t if ($byLines) {\r\n\t while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)\r\n\t i--;\r\n\t }\r\n\t tmpSel.fromOrientedRange(ranges[i]);\r\n\t tmpSel.index = i;\r\n\t this.selection = session.selection = tmpSel;\r\n\t var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\r\n\t if (!result && cmdResult !== undefined)\r\n\t result = cmdResult;\r\n\t tmpSel.toOrientedRange(ranges[i]);\r\n\t }\r\n\t tmpSel.detach();\r\n\r\n\t this.selection = session.selection = selection;\r\n\t this.inVirtualSelectionMode = false;\r\n\t selection._eventRegistry = reg;\r\n\t selection.mergeOverlappingRanges();\r\n\t \r\n\t var anim = this.renderer.$scrollAnimation;\r\n\t this.onCursorChange();\r\n\t this.onSelectionChange();\r\n\t if (anim && anim.from == anim.to)\r\n\t this.renderer.animateScrolling(anim.from);\r\n\t \r\n\t return result;\r\n\t };\r\n\t this.exitMultiSelectMode = function() {\r\n\t if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\r\n\t return;\r\n\t this.multiSelect.toSingleRange();\r\n\t };\r\n\r\n\t this.getSelectedText = function() {\r\n\t var text = \"\";\r\n\t if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\r\n\t var ranges = this.multiSelect.rangeList.ranges;\r\n\t var buf = [];\r\n\t for (var i = 0; i < ranges.length; i++) {\r\n\t buf.push(this.session.getTextRange(ranges[i]));\r\n\t }\r\n\t var nl = this.session.getDocument().getNewLineCharacter();\r\n\t text = buf.join(nl);\r\n\t if (text.length == (buf.length - 1) * nl.length)\r\n\t text = \"\";\r\n\t } else if (!this.selection.isEmpty()) {\r\n\t text = this.session.getTextRange(this.getSelectionRange());\r\n\t }\r\n\t return text;\r\n\t };\r\n\t \r\n\t this.$checkMultiselectChange = function(e, anchor) {\r\n\t if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\r\n\t var range = this.multiSelect.ranges[0];\r\n\t if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)\r\n\t return;\r\n\t var pos = anchor == this.multiSelect.anchor\r\n\t ? range.cursor == range.start ? range.end : range.start\r\n\t : range.cursor;\r\n\t if (pos.row != anchor.row \r\n\t || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)\r\n\t this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\r\n\t }\r\n\t };\r\n\t this.findAll = function(needle, options, additive) {\r\n\t options = options || {};\r\n\t options.needle = needle || options.needle;\r\n\t if (options.needle == undefined) {\r\n\t var range = this.selection.isEmpty()\r\n\t ? this.selection.getWordRange()\r\n\t : this.selection.getRange();\r\n\t options.needle = this.session.getTextRange(range);\r\n\t } \r\n\t this.$search.set(options);\r\n\t \r\n\t var ranges = this.$search.findAll(this.session);\r\n\t if (!ranges.length)\r\n\t return 0;\r\n\r\n\t this.$blockScrolling += 1;\r\n\t var selection = this.multiSelect;\r\n\r\n\t if (!additive)\r\n\t selection.toSingleRange(ranges[0]);\r\n\r\n\t for (var i = ranges.length; i--; )\r\n\t selection.addRange(ranges[i], true);\r\n\t if (range && selection.rangeList.rangeAtPoint(range.start))\r\n\t selection.addRange(range, true);\r\n\t \r\n\t this.$blockScrolling -= 1;\r\n\r\n\t return ranges.length;\r\n\t };\r\n\t this.selectMoreLines = function(dir, skip) {\r\n\t var range = this.selection.toOrientedRange();\r\n\t var isBackwards = range.cursor == range.end;\r\n\r\n\t var screenLead = this.session.documentToScreenPosition(range.cursor);\r\n\t if (this.selection.$desiredColumn)\r\n\t screenLead.column = this.selection.$desiredColumn;\r\n\r\n\t var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\r\n\r\n\t if (!range.isEmpty()) {\r\n\t var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\r\n\t var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\r\n\t } else {\r\n\t var anchor = lead;\r\n\t }\r\n\r\n\t if (isBackwards) {\r\n\t var newRange = Range.fromPoints(lead, anchor);\r\n\t newRange.cursor = newRange.start;\r\n\t } else {\r\n\t var newRange = Range.fromPoints(anchor, lead);\r\n\t newRange.cursor = newRange.end;\r\n\t }\r\n\r\n\t newRange.desiredColumn = screenLead.column;\r\n\t if (!this.selection.inMultiSelectMode) {\r\n\t this.selection.addRange(range);\r\n\t } else {\r\n\t if (skip)\r\n\t var toRemove = range.cursor;\r\n\t }\r\n\r\n\t this.selection.addRange(newRange);\r\n\t if (toRemove)\r\n\t this.selection.substractPoint(toRemove);\r\n\t };\r\n\t this.transposeSelections = function(dir) {\r\n\t var session = this.session;\r\n\t var sel = session.multiSelect;\r\n\t var all = sel.ranges;\r\n\r\n\t for (var i = all.length; i--; ) {\r\n\t var range = all[i];\r\n\t if (range.isEmpty()) {\r\n\t var tmp = session.getWordRange(range.start.row, range.start.column);\r\n\t range.start.row = tmp.start.row;\r\n\t range.start.column = tmp.start.column;\r\n\t range.end.row = tmp.end.row;\r\n\t range.end.column = tmp.end.column;\r\n\t }\r\n\t }\r\n\t sel.mergeOverlappingRanges();\r\n\r\n\t var words = [];\r\n\t for (var i = all.length; i--; ) {\r\n\t var range = all[i];\r\n\t words.unshift(session.getTextRange(range));\r\n\t }\r\n\r\n\t if (dir < 0)\r\n\t words.unshift(words.pop());\r\n\t else\r\n\t words.push(words.shift());\r\n\r\n\t for (var i = all.length; i--; ) {\r\n\t var range = all[i];\r\n\t var tmp = range.clone();\r\n\t session.replace(range, words[i]);\r\n\t range.start.row = tmp.start.row;\r\n\t range.start.column = tmp.start.column;\r\n\t }\r\n\t };\r\n\t this.selectMore = function(dir, skip, stopAtFirst) {\r\n\t var session = this.session;\r\n\t var sel = session.multiSelect;\r\n\r\n\t var range = sel.toOrientedRange();\r\n\t if (range.isEmpty()) {\r\n\t range = session.getWordRange(range.start.row, range.start.column);\r\n\t range.cursor = dir == -1 ? range.start : range.end;\r\n\t this.multiSelect.addRange(range);\r\n\t if (stopAtFirst)\r\n\t return;\r\n\t }\r\n\t var needle = session.getTextRange(range);\r\n\r\n\t var newRange = find(session, needle, dir);\r\n\t if (newRange) {\r\n\t newRange.cursor = dir == -1 ? newRange.start : newRange.end;\r\n\t this.$blockScrolling += 1;\r\n\t this.session.unfold(newRange);\r\n\t this.multiSelect.addRange(newRange);\r\n\t this.$blockScrolling -= 1;\r\n\t this.renderer.scrollCursorIntoView(null, 0.5);\r\n\t }\r\n\t if (skip)\r\n\t this.multiSelect.substractPoint(range.cursor);\r\n\t };\r\n\t this.alignCursors = function() {\r\n\t var session = this.session;\r\n\t var sel = session.multiSelect;\r\n\t var ranges = sel.ranges;\r\n\t var row = -1;\r\n\t var sameRowRanges = ranges.filter(function(r) {\r\n\t if (r.cursor.row == row)\r\n\t return true;\r\n\t row = r.cursor.row;\r\n\t });\r\n\t \r\n\t if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\r\n\t var range = this.selection.getRange();\r\n\t var fr = range.start.row, lr = range.end.row;\r\n\t var guessRange = fr == lr;\r\n\t if (guessRange) {\r\n\t var max = this.session.getLength();\r\n\t var line;\r\n\t do {\r\n\t line = this.session.getLine(lr);\r\n\t } while (/[=:]/.test(line) && ++lr < max);\r\n\t do {\r\n\t line = this.session.getLine(fr);\r\n\t } while (/[=:]/.test(line) && --fr > 0);\r\n\t \r\n\t if (fr < 0) fr = 0;\r\n\t if (lr >= max) lr = max - 1;\r\n\t }\r\n\t var lines = this.session.removeFullLines(fr, lr);\r\n\t lines = this.$reAlignText(lines, guessRange);\r\n\t this.session.insert({row: fr, column: 0}, lines.join(\"\\n\") + \"\\n\");\r\n\t if (!guessRange) {\r\n\t range.start.column = 0;\r\n\t range.end.column = lines[lines.length - 1].length;\r\n\t }\r\n\t this.selection.setRange(range);\r\n\t } else {\r\n\t sameRowRanges.forEach(function(r) {\r\n\t sel.substractPoint(r.cursor);\r\n\t });\r\n\r\n\t var maxCol = 0;\r\n\t var minSpace = Infinity;\r\n\t var spaceOffsets = ranges.map(function(r) {\r\n\t var p = r.cursor;\r\n\t var line = session.getLine(p.row);\r\n\t var spaceOffset = line.substr(p.column).search(/\\S/g);\r\n\t if (spaceOffset == -1)\r\n\t spaceOffset = 0;\r\n\r\n\t if (p.column > maxCol)\r\n\t maxCol = p.column;\r\n\t if (spaceOffset < minSpace)\r\n\t minSpace = spaceOffset;\r\n\t return spaceOffset;\r\n\t });\r\n\t ranges.forEach(function(r, i) {\r\n\t var p = r.cursor;\r\n\t var l = maxCol - p.column;\r\n\t var d = spaceOffsets[i] - minSpace;\r\n\t if (l > d)\r\n\t session.insert(p, lang.stringRepeat(\" \", l - d));\r\n\t else\r\n\t session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\r\n\r\n\t r.start.column = r.end.column = maxCol;\r\n\t r.start.row = r.end.row = p.row;\r\n\t r.cursor = r.end;\r\n\t });\r\n\t sel.fromOrientedRange(ranges[0]);\r\n\t this.renderer.updateCursor();\r\n\t this.renderer.updateBackMarkers();\r\n\t }\r\n\t };\r\n\r\n\t this.$reAlignText = function(lines, forceLeft) {\r\n\t var isLeftAligned = true, isRightAligned = true;\r\n\t var startW, textW, endW;\r\n\r\n\t return lines.map(function(line) {\r\n\t var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\r\n\t if (!m)\r\n\t return [line];\r\n\r\n\t if (startW == null) {\r\n\t startW = m[1].length;\r\n\t textW = m[2].length;\r\n\t endW = m[3].length;\r\n\t return m;\r\n\t }\r\n\r\n\t if (startW + textW + endW != m[1].length + m[2].length + m[3].length)\r\n\t isRightAligned = false;\r\n\t if (startW != m[1].length)\r\n\t isLeftAligned = false;\r\n\r\n\t if (startW > m[1].length)\r\n\t startW = m[1].length;\r\n\t if (textW < m[2].length)\r\n\t textW = m[2].length;\r\n\t if (endW > m[3].length)\r\n\t endW = m[3].length;\r\n\r\n\t return m;\r\n\t }).map(forceLeft ? alignLeft :\r\n\t isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\r\n\r\n\t function spaces(n) {\r\n\t return lang.stringRepeat(\" \", n);\r\n\t }\r\n\r\n\t function alignLeft(m) {\r\n\t return !m[2] ? m[0] : spaces(startW) + m[2]\r\n\t + spaces(textW - m[2].length + endW)\r\n\t + m[4].replace(/^([=:])\\s+/, \"$1 \");\r\n\t }\r\n\t function alignRight(m) {\r\n\t return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]\r\n\t + spaces(endW, \" \")\r\n\t + m[4].replace(/^([=:])\\s+/, \"$1 \");\r\n\t }\r\n\t function unAlign(m) {\r\n\t return !m[2] ? m[0] : spaces(startW) + m[2]\r\n\t + spaces(endW)\r\n\t + m[4].replace(/^([=:])\\s+/, \"$1 \");\r\n\t }\r\n\t };\r\n\t}).call(Editor.prototype);\r\n\r\n\r\n\tfunction isSamePoint(p1, p2) {\r\n\t return p1.row == p2.row && p1.column == p2.column;\r\n\t}\r\n\texports.onSessionChange = function(e) {\r\n\t var session = e.session;\r\n\t if (session && !session.multiSelect) {\r\n\t session.$selectionMarkers = [];\r\n\t session.selection.$initRangeList();\r\n\t session.multiSelect = session.selection;\r\n\t }\r\n\t this.multiSelect = session && session.multiSelect;\r\n\r\n\t var oldSession = e.oldSession;\r\n\t if (oldSession) {\r\n\t oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\r\n\t oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\r\n\t oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\r\n\t oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\r\n\t oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\r\n\t oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\r\n\t }\r\n\r\n\t if (session) {\r\n\t session.multiSelect.on(\"addRange\", this.$onAddRange);\r\n\t session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\r\n\t session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\r\n\t session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\r\n\t session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\r\n\t session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\r\n\t }\r\n\r\n\t if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\r\n\t if (session.selection.inMultiSelectMode)\r\n\t this.$onMultiSelect();\r\n\t else\r\n\t this.$onSingleSelect();\r\n\t }\r\n\t};\r\n\tfunction MultiSelect(editor) {\r\n\t if (editor.$multiselectOnSessionChange)\r\n\t return;\r\n\t editor.$onAddRange = editor.$onAddRange.bind(editor);\r\n\t editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\r\n\t editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\r\n\t editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\r\n\t editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\r\n\t editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\r\n\r\n\t editor.$multiselectOnSessionChange(editor);\r\n\t editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\r\n\r\n\t editor.on(\"mousedown\", onMouseDown);\r\n\t editor.commands.addCommands(commands.defaultCommands);\r\n\r\n\t addAltCursorListeners(editor);\r\n\t}\r\n\r\n\tfunction addAltCursorListeners(editor){\r\n\t var el = editor.textInput.getElement();\r\n\t var altCursor = false;\r\n\t event.addListener(el, \"keydown\", function(e) {\r\n\t var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\r\n\t if (editor.$blockSelectEnabled && altDown) {\r\n\t if (!altCursor) {\r\n\t editor.renderer.setMouseCursor(\"crosshair\");\r\n\t altCursor = true;\r\n\t }\r\n\t } else if (altCursor) {\r\n\t reset();\r\n\t }\r\n\t });\r\n\r\n\t event.addListener(el, \"keyup\", reset);\r\n\t event.addListener(el, \"blur\", reset);\r\n\t function reset(e) {\r\n\t if (altCursor) {\r\n\t editor.renderer.setMouseCursor(\"\");\r\n\t altCursor = false;\r\n\t }\r\n\t }\r\n\t}\r\n\r\n\texports.MultiSelect = MultiSelect;\r\n\r\n\r\n\tacequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\r\n\t enableMultiselect: {\r\n\t set: function(val) {\r\n\t MultiSelect(this);\r\n\t if (val) {\r\n\t this.on(\"changeSession\", this.$multiselectOnSessionChange);\r\n\t this.on(\"mousedown\", onMouseDown);\r\n\t } else {\r\n\t this.off(\"changeSession\", this.$multiselectOnSessionChange);\r\n\t this.off(\"mousedown\", onMouseDown);\r\n\t }\r\n\t },\r\n\t value: true\r\n\t },\r\n\t enableBlockSelect: {\r\n\t set: function(val) {\r\n\t this.$blockSelectEnabled = val;\r\n\t },\r\n\t value: true\r\n\t }\r\n\t});\r\n\r\n\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Range = acequire(\"../../range\").Range;\r\n\r\n\tvar FoldMode = exports.FoldMode = function() {};\r\n\r\n\t(function() {\r\n\r\n\t this.foldingStartMarker = null;\r\n\t this.foldingStopMarker = null;\r\n\t this.getFoldWidget = function(session, foldStyle, row) {\r\n\t var line = session.getLine(row);\r\n\t if (this.foldingStartMarker.test(line))\r\n\t return \"start\";\r\n\t if (foldStyle == \"markbeginend\"\r\n\t && this.foldingStopMarker\r\n\t && this.foldingStopMarker.test(line))\r\n\t return \"end\";\r\n\t return \"\";\r\n\t };\r\n\r\n\t this.getFoldWidgetRange = function(session, foldStyle, row) {\r\n\t return null;\r\n\t };\r\n\r\n\t this.indentationBlock = function(session, row, column) {\r\n\t var re = /\\S/;\r\n\t var line = session.getLine(row);\r\n\t var startLevel = line.search(re);\r\n\t if (startLevel == -1)\r\n\t return;\r\n\r\n\t var startColumn = column || line.length;\r\n\t var maxRow = session.getLength();\r\n\t var startRow = row;\r\n\t var endRow = row;\r\n\r\n\t while (++row < maxRow) {\r\n\t var level = session.getLine(row).search(re);\r\n\r\n\t if (level == -1)\r\n\t continue;\r\n\r\n\t if (level <= startLevel)\r\n\t break;\r\n\r\n\t endRow = row;\r\n\t }\r\n\r\n\t if (endRow > startRow) {\r\n\t var endColumn = session.getLine(endRow).length;\r\n\t return new Range(startRow, startColumn, endRow, endColumn);\r\n\t }\r\n\t };\r\n\r\n\t this.openingBracketBlock = function(session, bracket, row, column, typeRe) {\r\n\t var start = {row: row, column: column + 1};\r\n\t var end = session.$findClosingBracket(bracket, start, typeRe);\r\n\t if (!end)\r\n\t return;\r\n\r\n\t var fw = session.foldWidgets[end.row];\r\n\t if (fw == null)\r\n\t fw = session.getFoldWidget(end.row);\r\n\r\n\t if (fw == \"start\" && end.row > start.row) {\r\n\t end.row --;\r\n\t end.column = session.getLine(end.row).length;\r\n\t }\r\n\t return Range.fromPoints(start, end);\r\n\t };\r\n\r\n\t this.closingBracketBlock = function(session, bracket, row, column, typeRe) {\r\n\t var end = {row: row, column: column};\r\n\t var start = session.$findOpeningBracket(bracket, end);\r\n\r\n\t if (!start)\r\n\t return;\r\n\r\n\t start.column++;\r\n\t end.column--;\r\n\r\n\t return Range.fromPoints(start, end);\r\n\t };\r\n\t}).call(FoldMode.prototype);\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\texports.isDark = false;\r\n\texports.cssClass = \"ace-tm\";\r\n\texports.cssText = \".ace-tm .ace_gutter {\\\r\n\tbackground: #f0f0f0;\\\r\n\tcolor: #333;\\\r\n\t}\\\r\n\t.ace-tm .ace_print-margin {\\\r\n\twidth: 1px;\\\r\n\tbackground: #e8e8e8;\\\r\n\t}\\\r\n\t.ace-tm .ace_fold {\\\r\n\tbackground-color: #6B72E6;\\\r\n\t}\\\r\n\t.ace-tm {\\\r\n\tbackground-color: #FFFFFF;\\\r\n\tcolor: black;\\\r\n\t}\\\r\n\t.ace-tm .ace_cursor {\\\r\n\tcolor: black;\\\r\n\t}\\\r\n\t.ace-tm .ace_invisible {\\\r\n\tcolor: rgb(191, 191, 191);\\\r\n\t}\\\r\n\t.ace-tm .ace_storage,\\\r\n\t.ace-tm .ace_keyword {\\\r\n\tcolor: blue;\\\r\n\t}\\\r\n\t.ace-tm .ace_constant {\\\r\n\tcolor: rgb(197, 6, 11);\\\r\n\t}\\\r\n\t.ace-tm .ace_constant.ace_buildin {\\\r\n\tcolor: rgb(88, 72, 246);\\\r\n\t}\\\r\n\t.ace-tm .ace_constant.ace_language {\\\r\n\tcolor: rgb(88, 92, 246);\\\r\n\t}\\\r\n\t.ace-tm .ace_constant.ace_library {\\\r\n\tcolor: rgb(6, 150, 14);\\\r\n\t}\\\r\n\t.ace-tm .ace_invalid {\\\r\n\tbackground-color: rgba(255, 0, 0, 0.1);\\\r\n\tcolor: red;\\\r\n\t}\\\r\n\t.ace-tm .ace_support.ace_function {\\\r\n\tcolor: rgb(60, 76, 114);\\\r\n\t}\\\r\n\t.ace-tm .ace_support.ace_constant {\\\r\n\tcolor: rgb(6, 150, 14);\\\r\n\t}\\\r\n\t.ace-tm .ace_support.ace_type,\\\r\n\t.ace-tm .ace_support.ace_class {\\\r\n\tcolor: rgb(109, 121, 222);\\\r\n\t}\\\r\n\t.ace-tm .ace_keyword.ace_operator {\\\r\n\tcolor: rgb(104, 118, 135);\\\r\n\t}\\\r\n\t.ace-tm .ace_string {\\\r\n\tcolor: rgb(3, 106, 7);\\\r\n\t}\\\r\n\t.ace-tm .ace_comment {\\\r\n\tcolor: rgb(76, 136, 107);\\\r\n\t}\\\r\n\t.ace-tm .ace_comment.ace_doc {\\\r\n\tcolor: rgb(0, 102, 255);\\\r\n\t}\\\r\n\t.ace-tm .ace_comment.ace_doc.ace_tag {\\\r\n\tcolor: rgb(128, 159, 191);\\\r\n\t}\\\r\n\t.ace-tm .ace_constant.ace_numeric {\\\r\n\tcolor: rgb(0, 0, 205);\\\r\n\t}\\\r\n\t.ace-tm .ace_variable {\\\r\n\tcolor: rgb(49, 132, 149);\\\r\n\t}\\\r\n\t.ace-tm .ace_xml-pe {\\\r\n\tcolor: rgb(104, 104, 91);\\\r\n\t}\\\r\n\t.ace-tm .ace_entity.ace_name.ace_function {\\\r\n\tcolor: #0000A2;\\\r\n\t}\\\r\n\t.ace-tm .ace_heading {\\\r\n\tcolor: rgb(12, 7, 255);\\\r\n\t}\\\r\n\t.ace-tm .ace_list {\\\r\n\tcolor:rgb(185, 6, 144);\\\r\n\t}\\\r\n\t.ace-tm .ace_meta.ace_tag {\\\r\n\tcolor:rgb(0, 22, 142);\\\r\n\t}\\\r\n\t.ace-tm .ace_string.ace_regex {\\\r\n\tcolor: rgb(255, 0, 0)\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_selection {\\\r\n\tbackground: rgb(181, 213, 255);\\\r\n\t}\\\r\n\t.ace-tm.ace_multiselect .ace_selection.ace_start {\\\r\n\tbox-shadow: 0 0 3px 0px white;\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_step {\\\r\n\tbackground: rgb(252, 255, 0);\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_stack {\\\r\n\tbackground: rgb(164, 229, 101);\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_bracket {\\\r\n\tmargin: -1px 0 0 -1px;\\\r\n\tborder: 1px solid rgb(192, 192, 192);\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_active-line {\\\r\n\tbackground: rgba(0, 0, 0, 0.07);\\\r\n\t}\\\r\n\t.ace-tm .ace_gutter-active-line {\\\r\n\tbackground-color : #dcdcdc;\\\r\n\t}\\\r\n\t.ace-tm .ace_marker-layer .ace_selected-word {\\\r\n\tbackground: rgb(250, 250, 255);\\\r\n\tborder: 1px solid rgb(200, 200, 250);\\\r\n\t}\\\r\n\t.ace-tm .ace_indent-guide {\\\r\n\tbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\r\n\t}\\\r\n\t\";\r\n\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tdom.importCssString(exports.cssText, exports.cssClass);\r\n\t});\r\n\r\n\tace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"./lib/oop\");\r\n\tvar dom = acequire(\"./lib/dom\");\r\n\tvar Range = acequire(\"./range\").Range;\r\n\r\n\r\n\tfunction LineWidgets(session) {\r\n\t this.session = session;\r\n\t this.session.widgetManager = this;\r\n\t this.session.getRowLength = this.getRowLength;\r\n\t this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\r\n\t this.updateOnChange = this.updateOnChange.bind(this);\r\n\t this.renderWidgets = this.renderWidgets.bind(this);\r\n\t this.measureWidgets = this.measureWidgets.bind(this);\r\n\t this.session._changedWidgets = [];\r\n\t this.$onChangeEditor = this.$onChangeEditor.bind(this);\r\n\t \r\n\t this.session.on(\"change\", this.updateOnChange);\r\n\t this.session.on(\"changeFold\", this.updateOnFold);\r\n\t this.session.on(\"changeEditor\", this.$onChangeEditor);\r\n\t}\r\n\r\n\t(function() {\r\n\t this.getRowLength = function(row) {\r\n\t var h;\r\n\t if (this.lineWidgets)\r\n\t h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\r\n\t else \r\n\t h = 0;\r\n\t if (!this.$useWrapMode || !this.$wrapData[row]) {\r\n\t return 1 + h;\r\n\t } else {\r\n\t return this.$wrapData[row].length + 1 + h;\r\n\t }\r\n\t };\r\n\r\n\t this.$getWidgetScreenLength = function() {\r\n\t var screenRows = 0;\r\n\t this.lineWidgets.forEach(function(w){\r\n\t if (w && w.rowCount && !w.hidden)\r\n\t screenRows += w.rowCount;\r\n\t });\r\n\t return screenRows;\r\n\t }; \r\n\t \r\n\t this.$onChangeEditor = function(e) {\r\n\t this.attach(e.editor);\r\n\t };\r\n\t \r\n\t this.attach = function(editor) {\r\n\t if (editor && editor.widgetManager && editor.widgetManager != this)\r\n\t editor.widgetManager.detach();\r\n\r\n\t if (this.editor == editor)\r\n\t return;\r\n\r\n\t this.detach();\r\n\t this.editor = editor;\r\n\t \r\n\t if (editor) {\r\n\t editor.widgetManager = this;\r\n\t editor.renderer.on(\"beforeRender\", this.measureWidgets);\r\n\t editor.renderer.on(\"afterRender\", this.renderWidgets);\r\n\t }\r\n\t };\r\n\t this.detach = function(e) {\r\n\t var editor = this.editor;\r\n\t if (!editor)\r\n\t return;\r\n\t \r\n\t this.editor = null;\r\n\t editor.widgetManager = null;\r\n\t \r\n\t editor.renderer.off(\"beforeRender\", this.measureWidgets);\r\n\t editor.renderer.off(\"afterRender\", this.renderWidgets);\r\n\t var lineWidgets = this.session.lineWidgets;\r\n\t lineWidgets && lineWidgets.forEach(function(w) {\r\n\t if (w && w.el && w.el.parentNode) {\r\n\t w._inDocument = false;\r\n\t w.el.parentNode.removeChild(w.el);\r\n\t }\r\n\t });\r\n\t };\r\n\r\n\t this.updateOnFold = function(e, session) {\r\n\t var lineWidgets = session.lineWidgets;\r\n\t if (!lineWidgets || !e.action)\r\n\t return;\r\n\t var fold = e.data;\r\n\t var start = fold.start.row;\r\n\t var end = fold.end.row;\r\n\t var hide = e.action == \"add\";\r\n\t for (var i = start + 1; i < end; i++) {\r\n\t if (lineWidgets[i])\r\n\t lineWidgets[i].hidden = hide;\r\n\t }\r\n\t if (lineWidgets[end]) {\r\n\t if (hide) {\r\n\t if (!lineWidgets[start])\r\n\t lineWidgets[start] = lineWidgets[end];\r\n\t else\r\n\t lineWidgets[end].hidden = hide;\r\n\t } else {\r\n\t if (lineWidgets[start] == lineWidgets[end])\r\n\t lineWidgets[start] = undefined;\r\n\t lineWidgets[end].hidden = hide;\r\n\t }\r\n\t }\r\n\t };\r\n\t \r\n\t this.updateOnChange = function(delta) {\r\n\t var lineWidgets = this.session.lineWidgets;\r\n\t if (!lineWidgets) return;\r\n\t \r\n\t var startRow = delta.start.row;\r\n\t var len = delta.end.row - startRow;\r\n\r\n\t if (len === 0) {\r\n\t } else if (delta.action == 'remove') {\r\n\t var removed = lineWidgets.splice(startRow + 1, len);\r\n\t removed.forEach(function(w) {\r\n\t w && this.removeLineWidget(w);\r\n\t }, this);\r\n\t this.$updateRows();\r\n\t } else {\r\n\t var args = new Array(len);\r\n\t args.unshift(startRow, 0);\r\n\t lineWidgets.splice.apply(lineWidgets, args);\r\n\t this.$updateRows();\r\n\t }\r\n\t };\r\n\t \r\n\t this.$updateRows = function() {\r\n\t var lineWidgets = this.session.lineWidgets;\r\n\t if (!lineWidgets) return;\r\n\t var noWidgets = true;\r\n\t lineWidgets.forEach(function(w, i) {\r\n\t if (w) {\r\n\t noWidgets = false;\r\n\t w.row = i;\r\n\t while (w.$oldWidget) {\r\n\t w.$oldWidget.row = i;\r\n\t w = w.$oldWidget;\r\n\t }\r\n\t }\r\n\t });\r\n\t if (noWidgets)\r\n\t this.session.lineWidgets = null;\r\n\t };\r\n\r\n\t this.addLineWidget = function(w) {\r\n\t if (!this.session.lineWidgets)\r\n\t this.session.lineWidgets = new Array(this.session.getLength());\r\n\t \r\n\t var old = this.session.lineWidgets[w.row];\r\n\t if (old) {\r\n\t w.$oldWidget = old;\r\n\t if (old.el && old.el.parentNode) {\r\n\t old.el.parentNode.removeChild(old.el);\r\n\t old._inDocument = false;\r\n\t }\r\n\t }\r\n\t \r\n\t this.session.lineWidgets[w.row] = w;\r\n\t \r\n\t w.session = this.session;\r\n\t \r\n\t var renderer = this.editor.renderer;\r\n\t if (w.html && !w.el) {\r\n\t w.el = dom.createElement(\"div\");\r\n\t w.el.innerHTML = w.html;\r\n\t }\r\n\t if (w.el) {\r\n\t dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\r\n\t w.el.style.position = \"absolute\";\r\n\t w.el.style.zIndex = 5;\r\n\t renderer.container.appendChild(w.el);\r\n\t w._inDocument = true;\r\n\t }\r\n\t \r\n\t if (!w.coverGutter) {\r\n\t w.el.style.zIndex = 3;\r\n\t }\r\n\t if (!w.pixelHeight) {\r\n\t w.pixelHeight = w.el.offsetHeight;\r\n\t }\r\n\t if (w.rowCount == null) {\r\n\t w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\r\n\t }\r\n\t \r\n\t var fold = this.session.getFoldAt(w.row, 0);\r\n\t w.$fold = fold;\r\n\t if (fold) {\r\n\t var lineWidgets = this.session.lineWidgets;\r\n\t if (w.row == fold.end.row && !lineWidgets[fold.start.row])\r\n\t lineWidgets[fold.start.row] = w;\r\n\t else\r\n\t w.hidden = true;\r\n\t }\r\n\t \r\n\t this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\r\n\t \r\n\t this.$updateRows();\r\n\t this.renderWidgets(null, renderer);\r\n\t this.onWidgetChanged(w);\r\n\t return w;\r\n\t };\r\n\t \r\n\t this.removeLineWidget = function(w) {\r\n\t w._inDocument = false;\r\n\t w.session = null;\r\n\t if (w.el && w.el.parentNode)\r\n\t w.el.parentNode.removeChild(w.el);\r\n\t if (w.editor && w.editor.destroy) try {\r\n\t w.editor.destroy();\r\n\t } catch(e){}\r\n\t if (this.session.lineWidgets) {\r\n\t var w1 = this.session.lineWidgets[w.row]\r\n\t if (w1 == w) {\r\n\t this.session.lineWidgets[w.row] = w.$oldWidget;\r\n\t if (w.$oldWidget)\r\n\t this.onWidgetChanged(w.$oldWidget);\r\n\t } else {\r\n\t while (w1) {\r\n\t if (w1.$oldWidget == w) {\r\n\t w1.$oldWidget = w.$oldWidget;\r\n\t break;\r\n\t }\r\n\t w1 = w1.$oldWidget;\r\n\t }\r\n\t }\r\n\t }\r\n\t this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\r\n\t this.$updateRows();\r\n\t };\r\n\t \r\n\t this.getWidgetsAtRow = function(row) {\r\n\t var lineWidgets = this.session.lineWidgets;\r\n\t var w = lineWidgets && lineWidgets[row];\r\n\t var list = [];\r\n\t while (w) {\r\n\t list.push(w);\r\n\t w = w.$oldWidget;\r\n\t }\r\n\t return list;\r\n\t };\r\n\t \r\n\t this.onWidgetChanged = function(w) {\r\n\t this.session._changedWidgets.push(w);\r\n\t this.editor && this.editor.renderer.updateFull();\r\n\t };\r\n\t \r\n\t this.measureWidgets = function(e, renderer) {\r\n\t var changedWidgets = this.session._changedWidgets;\r\n\t var config = renderer.layerConfig;\r\n\t \r\n\t if (!changedWidgets || !changedWidgets.length) return;\r\n\t var min = Infinity;\r\n\t for (var i = 0; i < changedWidgets.length; i++) {\r\n\t var w = changedWidgets[i];\r\n\t if (!w || !w.el) continue;\r\n\t if (w.session != this.session) continue;\r\n\t if (!w._inDocument) {\r\n\t if (this.session.lineWidgets[w.row] != w)\r\n\t continue;\r\n\t w._inDocument = true;\r\n\t renderer.container.appendChild(w.el);\r\n\t }\r\n\t \r\n\t w.h = w.el.offsetHeight;\r\n\t \r\n\t if (!w.fixedWidth) {\r\n\t w.w = w.el.offsetWidth;\r\n\t w.screenWidth = Math.ceil(w.w / config.characterWidth);\r\n\t }\r\n\t \r\n\t var rowCount = w.h / config.lineHeight;\r\n\t if (w.coverLine) {\r\n\t rowCount -= this.session.getRowLineCount(w.row);\r\n\t if (rowCount < 0)\r\n\t rowCount = 0;\r\n\t }\r\n\t if (w.rowCount != rowCount) {\r\n\t w.rowCount = rowCount;\r\n\t if (w.row < min)\r\n\t min = w.row;\r\n\t }\r\n\t }\r\n\t if (min != Infinity) {\r\n\t this.session._emit(\"changeFold\", {data:{start:{row: min}}});\r\n\t this.session.lineWidgetWidth = null;\r\n\t }\r\n\t this.session._changedWidgets = [];\r\n\t };\r\n\t \r\n\t this.renderWidgets = function(e, renderer) {\r\n\t var config = renderer.layerConfig;\r\n\t var lineWidgets = this.session.lineWidgets;\r\n\t if (!lineWidgets)\r\n\t return;\r\n\t var first = Math.min(this.firstRow, config.firstRow);\r\n\t var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\r\n\t \r\n\t while (first > 0 && !lineWidgets[first])\r\n\t first--;\r\n\t \r\n\t this.firstRow = config.firstRow;\r\n\t this.lastRow = config.lastRow;\r\n\r\n\t renderer.$cursorLayer.config = config;\r\n\t for (var i = first; i <= last; i++) {\r\n\t var w = lineWidgets[i];\r\n\t if (!w || !w.el) continue;\r\n\t if (w.hidden) {\r\n\t w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\r\n\t continue;\r\n\t }\r\n\t if (!w._inDocument) {\r\n\t w._inDocument = true;\r\n\t renderer.container.appendChild(w.el);\r\n\t }\r\n\t var top = renderer.$cursorLayer.getPixelPosition({row: i, column:0}, true).top;\r\n\t if (!w.coverLine)\r\n\t top += config.lineHeight * this.session.getRowLineCount(w.row);\r\n\t w.el.style.top = top - config.offset + \"px\";\r\n\t \r\n\t var left = w.coverGutter ? 0 : renderer.gutterWidth;\r\n\t if (!w.fixedWidth)\r\n\t left -= renderer.scrollLeft;\r\n\t w.el.style.left = left + \"px\";\r\n\t \r\n\t if (w.fullWidth && w.screenWidth) {\r\n\t w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\r\n\t }\r\n\t \r\n\t if (w.fixedWidth) {\r\n\t w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\r\n\t } else {\r\n\t w.el.style.right = \"\";\r\n\t }\r\n\t }\r\n\t };\r\n\t \r\n\t}).call(LineWidgets.prototype);\r\n\r\n\r\n\texports.LineWidgets = LineWidgets;\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\tvar LineWidgets = acequire(\"../line_widgets\").LineWidgets;\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar Range = acequire(\"../range\").Range;\r\n\r\n\tfunction binarySearch(array, needle, comparator) {\r\n\t var first = 0;\r\n\t var last = array.length - 1;\r\n\r\n\t while (first <= last) {\r\n\t var mid = (first + last) >> 1;\r\n\t var c = comparator(needle, array[mid]);\r\n\t if (c > 0)\r\n\t first = mid + 1;\r\n\t else if (c < 0)\r\n\t last = mid - 1;\r\n\t else\r\n\t return mid;\r\n\t }\r\n\t return -(first + 1);\r\n\t}\r\n\r\n\tfunction findAnnotations(session, row, dir) {\r\n\t var annotations = session.getAnnotations().sort(Range.comparePoints);\r\n\t if (!annotations.length)\r\n\t return;\r\n\t \r\n\t var i = binarySearch(annotations, {row: row, column: -1}, Range.comparePoints);\r\n\t if (i < 0)\r\n\t i = -i - 1;\r\n\t \r\n\t if (i >= annotations.length)\r\n\t i = dir > 0 ? 0 : annotations.length - 1;\r\n\t else if (i === 0 && dir < 0)\r\n\t i = annotations.length - 1;\r\n\t \r\n\t var annotation = annotations[i];\r\n\t if (!annotation || !dir)\r\n\t return;\r\n\r\n\t if (annotation.row === row) {\r\n\t do {\r\n\t annotation = annotations[i += dir];\r\n\t } while (annotation && annotation.row === row);\r\n\t if (!annotation)\r\n\t return annotations.slice();\r\n\t }\r\n\t \r\n\t \r\n\t var matched = [];\r\n\t row = annotation.row;\r\n\t do {\r\n\t matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\r\n\t annotation = annotations[i += dir];\r\n\t } while (annotation && annotation.row == row);\r\n\t return matched.length && matched;\r\n\t}\r\n\r\n\texports.showErrorMarker = function(editor, dir) {\r\n\t var session = editor.session;\r\n\t if (!session.widgetManager) {\r\n\t session.widgetManager = new LineWidgets(session);\r\n\t session.widgetManager.attach(editor);\r\n\t }\r\n\t \r\n\t var pos = editor.getCursorPosition();\r\n\t var row = pos.row;\r\n\t var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function(w) {\r\n\t return w.type == \"errorMarker\";\r\n\t })[0];\r\n\t if (oldWidget) {\r\n\t oldWidget.destroy();\r\n\t } else {\r\n\t row -= dir;\r\n\t }\r\n\t var annotations = findAnnotations(session, row, dir);\r\n\t var gutterAnno;\r\n\t if (annotations) {\r\n\t var annotation = annotations[0];\r\n\t pos.column = (annotation.pos && typeof annotation.column != \"number\"\r\n\t ? annotation.pos.sc\r\n\t : annotation.column) || 0;\r\n\t pos.row = annotation.row;\r\n\t gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\r\n\t } else if (oldWidget) {\r\n\t return;\r\n\t } else {\r\n\t gutterAnno = {\r\n\t text: [\"Looks good!\"],\r\n\t className: \"ace_ok\"\r\n\t };\r\n\t }\r\n\t editor.session.unfold(pos.row);\r\n\t editor.selection.moveToPosition(pos);\r\n\t \r\n\t var w = {\r\n\t row: pos.row, \r\n\t fixedWidth: true,\r\n\t coverGutter: true,\r\n\t el: dom.createElement(\"div\"),\r\n\t type: \"errorMarker\"\r\n\t };\r\n\t var el = w.el.appendChild(dom.createElement(\"div\"));\r\n\t var arrow = w.el.appendChild(dom.createElement(\"div\"));\r\n\t arrow.className = \"error_widget_arrow \" + gutterAnno.className;\r\n\t \r\n\t var left = editor.renderer.$cursorLayer\r\n\t .getPixelPosition(pos).left;\r\n\t arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\r\n\t \r\n\t w.el.className = \"error_widget_wrapper\";\r\n\t el.className = \"error_widget \" + gutterAnno.className;\r\n\t el.innerHTML = gutterAnno.text.join(\"<br>\");\r\n\t \r\n\t el.appendChild(dom.createElement(\"div\"));\r\n\t \r\n\t var kb = function(_, hashId, keyString) {\r\n\t if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\r\n\t w.destroy();\r\n\t return {command: \"null\"};\r\n\t }\r\n\t };\r\n\t \r\n\t w.destroy = function() {\r\n\t if (editor.$mouseHandler.isMousePressed)\r\n\t return;\r\n\t editor.keyBinding.removeKeyboardHandler(kb);\r\n\t session.widgetManager.removeLineWidget(w);\r\n\t editor.off(\"changeSelection\", w.destroy);\r\n\t editor.off(\"changeSession\", w.destroy);\r\n\t editor.off(\"mouseup\", w.destroy);\r\n\t editor.off(\"change\", w.destroy);\r\n\t };\r\n\t \r\n\t editor.keyBinding.addKeyboardHandler(kb);\r\n\t editor.on(\"changeSelection\", w.destroy);\r\n\t editor.on(\"changeSession\", w.destroy);\r\n\t editor.on(\"mouseup\", w.destroy);\r\n\t editor.on(\"change\", w.destroy);\r\n\t \r\n\t editor.session.widgetManager.addLineWidget(w);\r\n\t \r\n\t w.el.onmousedown = editor.focus.bind(editor);\r\n\t \r\n\t editor.renderer.scrollCursorIntoView(null, 0.5, {bottom: w.el.offsetHeight});\r\n\t};\r\n\r\n\r\n\tdom.importCssString(\"\\\r\n\t .error_widget_wrapper {\\\r\n\t background: inherit;\\\r\n\t color: inherit;\\\r\n\t border:none\\\r\n\t }\\\r\n\t .error_widget {\\\r\n\t border-top: solid 2px;\\\r\n\t border-bottom: solid 2px;\\\r\n\t margin: 5px 0;\\\r\n\t padding: 10px 40px;\\\r\n\t white-space: pre-wrap;\\\r\n\t }\\\r\n\t .error_widget.ace_error, .error_widget_arrow.ace_error{\\\r\n\t border-color: #ff5a5a\\\r\n\t }\\\r\n\t .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\\r\n\t border-color: #F1D817\\\r\n\t }\\\r\n\t .error_widget.ace_info, .error_widget_arrow.ace_info{\\\r\n\t border-color: #5a5a5a\\\r\n\t }\\\r\n\t .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\\r\n\t border-color: #5aaa5a\\\r\n\t }\\\r\n\t .error_widget_arrow {\\\r\n\t position: absolute;\\\r\n\t border: solid 5px;\\\r\n\t border-top-color: transparent!important;\\\r\n\t border-right-color: transparent!important;\\\r\n\t border-left-color: transparent!important;\\\r\n\t top: -5px;\\\r\n\t }\\\r\n\t\", \"\");\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tacequire(\"./lib/fixoldbrowsers\");\r\n\r\n\tvar dom = acequire(\"./lib/dom\");\r\n\tvar event = acequire(\"./lib/event\");\r\n\r\n\tvar Editor = acequire(\"./editor\").Editor;\r\n\tvar EditSession = acequire(\"./edit_session\").EditSession;\r\n\tvar UndoManager = acequire(\"./undomanager\").UndoManager;\r\n\tvar Renderer = acequire(\"./virtual_renderer\").VirtualRenderer;\r\n\tacequire(\"./worker/worker_client\");\r\n\tacequire(\"./keyboard/hash_handler\");\r\n\tacequire(\"./placeholder\");\r\n\tacequire(\"./multi_select\");\r\n\tacequire(\"./mode/folding/fold_mode\");\r\n\tacequire(\"./theme/textmate\");\r\n\tacequire(\"./ext/error_marker\");\r\n\r\n\texports.config = acequire(\"./config\");\r\n\texports.acequire = acequire;\r\n\texports.edit = function(el) {\r\n\t if (typeof el == \"string\") {\r\n\t var _id = el;\r\n\t el = document.getElementById(_id);\r\n\t if (!el)\r\n\t throw new Error(\"ace.edit can't find div #\" + _id);\r\n\t }\r\n\r\n\t if (el && el.env && el.env.editor instanceof Editor)\r\n\t return el.env.editor;\r\n\r\n\t var value = \"\";\r\n\t if (el && /input|textarea/i.test(el.tagName)) {\r\n\t var oldNode = el;\r\n\t value = oldNode.value;\r\n\t el = dom.createElement(\"pre\");\r\n\t oldNode.parentNode.replaceChild(el, oldNode);\r\n\t } else if (el) {\r\n\t value = dom.getInnerText(el);\r\n\t el.innerHTML = \"\";\r\n\t }\r\n\r\n\t var doc = exports.createEditSession(value);\r\n\r\n\t var editor = new Editor(new Renderer(el));\r\n\t editor.setSession(doc);\r\n\r\n\t var env = {\r\n\t document: doc,\r\n\t editor: editor,\r\n\t onResize: editor.resize.bind(editor, null)\r\n\t };\r\n\t if (oldNode) env.textarea = oldNode;\r\n\t event.addListener(window, \"resize\", env.onResize);\r\n\t editor.on(\"destroy\", function() {\r\n\t event.removeListener(window, \"resize\", env.onResize);\r\n\t env.editor.container.env = null; // prevent memory leak on old ie\r\n\t });\r\n\t editor.container.env = editor.env = env;\r\n\t return editor;\r\n\t};\r\n\texports.createEditSession = function(text, mode) {\r\n\t var doc = new EditSession(text, mode);\r\n\t doc.setUndoManager(new UndoManager());\r\n\t return doc;\r\n\t}\r\n\texports.EditSession = EditSession;\r\n\texports.UndoManager = UndoManager;\r\n\texports.version = \"1.2.3\";\r\n\t});\r\n\t (function() {\r\n\t ace.acequire([\"ace/ace\"], function(a) {\r\n\t a && a.config.init(true);\r\n\t if (!window.ace)\r\n\t window.ace = a;\r\n\t for (var key in a) if (a.hasOwnProperty(key))\r\n\t window.ace[key] = a[key];\r\n\t });\r\n\t })();\r\n\t \r\n\tmodule.exports = window.ace.acequire(\"ace/ace\");\r\n\r\n/***/ },\r\n/* 65 */\r\n/***/ function(module, exports) {\r\n\r\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\r\n\r\n/***/ },\r\n/* 66 */\r\n/***/ function(module, exports) {\r\n\r\n\t/* WEBPACK VAR INJECTION */(function(global) {module.exports = get_blob()\r\n\r\n\tfunction get_blob() {\r\n\t if(global.Blob) {\r\n\t try {\r\n\t new Blob(['asdf'], {type: 'text/plain'})\r\n\t return Blob\r\n\t } catch(err) {}\r\n\t }\r\n\r\n\t var Builder = global.WebKitBlobBuilder ||\r\n\t global.MozBlobBuilder ||\r\n\t global.MSBlobBuilder\r\n\r\n\t return function(parts, bag) {\r\n\t var builder = new Builder\r\n\t , endings = bag.endings\r\n\t , type = bag.type\r\n\r\n\t if(endings) for(var i = 0, len = parts.length; i < len; ++i) {\r\n\t builder.append(parts[i], endings)\r\n\t } else for(var i = 0, len = parts.length; i < len; ++i) {\r\n\t builder.append(parts[i])\r\n\t }\r\n\r\n\t return type ? builder.getBlob(type) : builder.getBlob()\r\n\t }\r\n\t}\r\n\r\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\r\n\r\n/***/ },\r\n/* 67 */\r\n/***/ function(module, exports, __webpack_require__) {\r\n\r\n\tace.define(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar TextHighlightRules = acequire(\"./text_highlight_rules\").TextHighlightRules;\r\n\r\n\tvar JsonHighlightRules = function() {\r\n\t this.$rules = {\r\n\t \"start\" : [\r\n\t {\r\n\t token : \"variable\", // single line\r\n\t regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'\r\n\t }, {\r\n\t token : \"string\", // single line\r\n\t regex : '\"',\r\n\t next : \"string\"\r\n\t }, {\r\n\t token : \"constant.numeric\", // hex\r\n\t regex : \"0[xX][0-9a-fA-F]+\\\\b\"\r\n\t }, {\r\n\t token : \"constant.numeric\", // float\r\n\t regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\r\n\t }, {\r\n\t token : \"constant.language.boolean\",\r\n\t regex : \"(?:true|false)\\\\b\"\r\n\t }, {\r\n\t token : \"invalid.illegal\", // single quoted strings are not allowed\r\n\t regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\r\n\t }, {\r\n\t token : \"invalid.illegal\", // comments are not allowed\r\n\t regex : \"\\\\/\\\\/.*$\"\r\n\t }, {\r\n\t token : \"paren.lparen\",\r\n\t regex : \"[[({]\"\r\n\t }, {\r\n\t token : \"paren.rparen\",\r\n\t regex : \"[\\\\])}]\"\r\n\t }, {\r\n\t token : \"text\",\r\n\t regex : \"\\\\s+\"\r\n\t }\r\n\t ],\r\n\t \"string\" : [\r\n\t {\r\n\t token : \"constant.language.escape\",\r\n\t regex : /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/\r\n\t }, {\r\n\t token : \"string\",\r\n\t regex : '[^\"\\\\\\\\]+'\r\n\t }, {\r\n\t token : \"string\",\r\n\t regex : '\"',\r\n\t next : \"start\"\r\n\t }, {\r\n\t token : \"string\",\r\n\t regex : \"\",\r\n\t next : \"start\"\r\n\t }\r\n\t ]\r\n\t };\r\n\t \r\n\t};\r\n\r\n\toop.inherits(JsonHighlightRules, TextHighlightRules);\r\n\r\n\texports.JsonHighlightRules = JsonHighlightRules;\r\n\t});\r\n\r\n\tace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar Range = acequire(\"../range\").Range;\r\n\r\n\tvar MatchingBraceOutdent = function() {};\r\n\r\n\t(function() {\r\n\r\n\t this.checkOutdent = function(line, input) {\r\n\t if (! /^\\s+$/.test(line))\r\n\t return false;\r\n\r\n\t return /^\\s*\\}/.test(input);\r\n\t };\r\n\r\n\t this.autoOutdent = function(doc, row) {\r\n\t var line = doc.getLine(row);\r\n\t var match = line.match(/^(\\s*\\})/);\r\n\r\n\t if (!match) return 0;\r\n\r\n\t var column = match[1].length;\r\n\t var openBracePos = doc.findMatchingBracket({row: row, column: column});\r\n\r\n\t if (!openBracePos || openBracePos.row == row) return 0;\r\n\r\n\t var indent = this.$getIndent(doc.getLine(openBracePos.row));\r\n\t doc.replace(new Range(row, 0, row, column-1), indent);\r\n\t };\r\n\r\n\t this.$getIndent = function(line) {\r\n\t return line.match(/^\\s*/)[0];\r\n\t };\r\n\r\n\t}).call(MatchingBraceOutdent.prototype);\r\n\r\n\texports.MatchingBraceOutdent = MatchingBraceOutdent;\r\n\t});\r\n\r\n\tace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"../../lib/oop\");\r\n\tvar Behaviour = acequire(\"../behaviour\").Behaviour;\r\n\tvar TokenIterator = acequire(\"../../token_iterator\").TokenIterator;\r\n\tvar lang = acequire(\"../../lib/lang\");\r\n\r\n\tvar SAFE_INSERT_IN_TOKENS =\r\n\t [\"text\", \"paren.rparen\", \"punctuation.operator\"];\r\n\tvar SAFE_INSERT_BEFORE_TOKENS =\r\n\t [\"text\", \"paren.rparen\", \"punctuation.operator\", \"comment\"];\r\n\r\n\tvar context;\r\n\tvar contextCache = {};\r\n\tvar initContext = function(editor) {\r\n\t var id = -1;\r\n\t if (editor.multiSelect) {\r\n\t id = editor.selection.index;\r\n\t if (contextCache.rangeCount != editor.multiSelect.rangeCount)\r\n\t contextCache = {rangeCount: editor.multiSelect.rangeCount};\r\n\t }\r\n\t if (contextCache[id])\r\n\t return context = contextCache[id];\r\n\t context = contextCache[id] = {\r\n\t autoInsertedBrackets: 0,\r\n\t autoInsertedRow: -1,\r\n\t autoInsertedLineEnd: \"\",\r\n\t maybeInsertedBrackets: 0,\r\n\t maybeInsertedRow: -1,\r\n\t maybeInsertedLineStart: \"\",\r\n\t maybeInsertedLineEnd: \"\"\r\n\t };\r\n\t};\r\n\r\n\tvar getWrapped = function(selection, selected, opening, closing) {\r\n\t var rowDiff = selection.end.row - selection.start.row;\r\n\t return {\r\n\t text: opening + selected + closing,\r\n\t selection: [\r\n\t 0,\r\n\t selection.start.column + 1,\r\n\t rowDiff,\r\n\t selection.end.column + (rowDiff ? 0 : 1)\r\n\t ]\r\n\t };\r\n\t};\r\n\r\n\tvar CstyleBehaviour = function() {\r\n\t this.add(\"braces\", \"insertion\", function(state, action, editor, session, text) {\r\n\t var cursor = editor.getCursorPosition();\r\n\t var line = session.doc.getLine(cursor.row);\r\n\t if (text == '{') {\r\n\t initContext(editor);\r\n\t var selection = editor.getSelectionRange();\r\n\t var selected = session.doc.getTextRange(selection);\r\n\t if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\r\n\t return getWrapped(selection, selected, '{', '}');\r\n\t } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\r\n\t if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) {\r\n\t CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\r\n\t return {\r\n\t text: '{}',\r\n\t selection: [1, 1]\r\n\t };\r\n\t } else {\r\n\t CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\r\n\t return {\r\n\t text: '{',\r\n\t selection: [1, 1]\r\n\t };\r\n\t }\r\n\t }\r\n\t } else if (text == '}') {\r\n\t initContext(editor);\r\n\t var rightChar = line.substring(cursor.column, cursor.column + 1);\r\n\t if (rightChar == '}') {\r\n\t var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});\r\n\t if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\r\n\t CstyleBehaviour.popAutoInsertedClosing();\r\n\t return {\r\n\t text: '',\r\n\t selection: [1, 1]\r\n\t };\r\n\t }\r\n\t }\r\n\t } else if (text == \"\\n\" || text == \"\\r\\n\") {\r\n\t initContext(editor);\r\n\t var closing = \"\";\r\n\t if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\r\n\t closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\r\n\t CstyleBehaviour.clearMaybeInsertedClosing();\r\n\t }\r\n\t var rightChar = line.substring(cursor.column, cursor.column + 1);\r\n\t if (rightChar === '}') {\r\n\t var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}');\r\n\t if (!openBracePos)\r\n\t return null;\r\n\t var next_indent = this.$getIndent(session.getLine(openBracePos.row));\r\n\t } else if (closing) {\r\n\t var next_indent = this.$getIndent(line);\r\n\t } else {\r\n\t CstyleBehaviour.clearMaybeInsertedClosing();\r\n\t return;\r\n\t }\r\n\t var indent = next_indent + session.getTabString();\r\n\r\n\t return {\r\n\t text: '\\n' + indent + '\\n' + next_indent + closing,\r\n\t selection: [1, indent.length, 1, indent.length]\r\n\t };\r\n\t } else {\r\n\t CstyleBehaviour.clearMaybeInsertedClosing();\r\n\t }\r\n\t });\r\n\r\n\t this.add(\"braces\", \"deletion\", function(state, action, editor, session, range) {\r\n\t var selected = session.doc.getTextRange(range);\r\n\t if (!range.isMultiLine() && selected == '{') {\r\n\t initContext(editor);\r\n\t var line = session.doc.getLine(range.start.row);\r\n\t var rightChar = line.substring(range.end.column, range.end.column + 1);\r\n\t if (rightChar == '}') {\r\n\t range.end.column++;\r\n\t return range;\r\n\t } else {\r\n\t context.maybeInsertedBrackets--;\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t this.add(\"parens\", \"insertion\", function(state, action, editor, session, text) {\r\n\t if (text == '(') {\r\n\t initContext(editor);\r\n\t var selection = editor.getSelectionRange();\r\n\t var selected = session.doc.getTextRange(selection);\r\n\t if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\r\n\t return getWrapped(selection, selected, '(', ')');\r\n\t } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\r\n\t CstyleBehaviour.recordAutoInsert(editor, session, \")\");\r\n\t return {\r\n\t text: '()',\r\n\t selection: [1, 1]\r\n\t };\r\n\t }\r\n\t } else if (text == ')') {\r\n\t initContext(editor);\r\n\t var cursor = editor.getCursorPosition();\r\n\t var line = session.doc.getLine(cursor.row);\r\n\t var rightChar = line.substring(cursor.column, cursor.column + 1);\r\n\t if (rightChar == ')') {\r\n\t var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});\r\n\t if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\r\n\t CstyleBehaviour.popAutoInsertedClosing();\r\n\t return {\r\n\t text: '',\r\n\t selection: [1, 1]\r\n\t };\r\n\t }\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t this.add(\"parens\", \"deletion\", function(state, action, editor, session, range) {\r\n\t var selected = session.doc.getTextRange(range);\r\n\t if (!range.isMultiLine() && selected == '(') {\r\n\t initContext(editor);\r\n\t var line = session.doc.getLine(range.start.row);\r\n\t var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\r\n\t if (rightChar == ')') {\r\n\t range.end.column++;\r\n\t return range;\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t this.add(\"brackets\", \"insertion\", function(state, action, editor, session, text) {\r\n\t if (text == '[') {\r\n\t initContext(editor);\r\n\t var selection = editor.getSelectionRange();\r\n\t var selected = session.doc.getTextRange(selection);\r\n\t if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\r\n\t return getWrapped(selection, selected, '[', ']');\r\n\t } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\r\n\t CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\r\n\t return {\r\n\t text: '[]',\r\n\t selection: [1, 1]\r\n\t };\r\n\t }\r\n\t } else if (text == ']') {\r\n\t initContext(editor);\r\n\t var cursor = editor.getCursorPosition();\r\n\t var line = session.doc.getLine(cursor.row);\r\n\t var rightChar = line.substring(cursor.column, cursor.column + 1);\r\n\t if (rightChar == ']') {\r\n\t var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});\r\n\t if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\r\n\t CstyleBehaviour.popAutoInsertedClosing();\r\n\t return {\r\n\t text: '',\r\n\t selection: [1, 1]\r\n\t };\r\n\t }\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t this.add(\"brackets\", \"deletion\", function(state, action, editor, session, range) {\r\n\t var selected = session.doc.getTextRange(range);\r\n\t if (!range.isMultiLine() && selected == '[') {\r\n\t initContext(editor);\r\n\t var line = session.doc.getLine(range.start.row);\r\n\t var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\r\n\t if (rightChar == ']') {\r\n\t range.end.column++;\r\n\t return range;\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t this.add(\"string_dquotes\", \"insertion\", function(state, action, editor, session, text) {\r\n\t if (text == '\"' || text == \"'\") {\r\n\t initContext(editor);\r\n\t var quote = text;\r\n\t var selection = editor.getSelectionRange();\r\n\t var selected = session.doc.getTextRange(selection);\r\n\t if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\r\n\t return getWrapped(selection, selected, quote, quote);\r\n\t } else if (!selected) {\r\n\t var cursor = editor.getCursorPosition();\r\n\t var line = session.doc.getLine(cursor.row);\r\n\t var leftChar = line.substring(cursor.column-1, cursor.column);\r\n\t var rightChar = line.substring(cursor.column, cursor.column + 1);\r\n\t \r\n\t var token = session.getTokenAt(cursor.row, cursor.column);\r\n\t var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\r\n\t if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\r\n\t return null;\r\n\t \r\n\t var stringBefore = token && /string|escape/.test(token.type);\r\n\t var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\r\n\t \r\n\t var pair;\r\n\t if (rightChar == quote) {\r\n\t pair = stringBefore !== stringAfter;\r\n\t } else {\r\n\t if (stringBefore && !stringAfter)\r\n\t return null; // wrap string with different quote\r\n\t if (stringBefore && stringAfter)\r\n\t return null; // do not pair quotes inside strings\r\n\t var wordRe = session.$mode.tokenRe;\r\n\t wordRe.lastIndex = 0;\r\n\t var isWordBefore = wordRe.test(leftChar);\r\n\t wordRe.lastIndex = 0;\r\n\t var isWordAfter = wordRe.test(leftChar);\r\n\t if (isWordBefore || isWordAfter)\r\n\t return null; // before or after alphanumeric\r\n\t if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\r\n\t return null; // there is rightChar and it isn't closing\r\n\t pair = true;\r\n\t }\r\n\t return {\r\n\t text: pair ? quote + quote : \"\",\r\n\t selection: [1,1]\r\n\t };\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\r\n\t var selected = session.doc.getTextRange(range);\r\n\t if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\r\n\t initContext(editor);\r\n\t var line = session.doc.getLine(range.start.row);\r\n\t var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\r\n\t if (rightChar == selected) {\r\n\t range.end.column++;\r\n\t return range;\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t};\r\n\r\n\t \r\n\tCstyleBehaviour.isSaneInsertion = function(editor, session) {\r\n\t var cursor = editor.getCursorPosition();\r\n\t var iterator = new TokenIterator(session, cursor.row, cursor.column);\r\n\t if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\r\n\t var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\r\n\t if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\r\n\t return false;\r\n\t }\r\n\t iterator.stepForward();\r\n\t return iterator.getCurrentTokenRow() !== cursor.row ||\r\n\t this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\r\n\t};\r\n\r\n\tCstyleBehaviour.$matchTokenType = function(token, types) {\r\n\t return types.indexOf(token.type || token) > -1;\r\n\t};\r\n\r\n\tCstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {\r\n\t var cursor = editor.getCursorPosition();\r\n\t var line = session.doc.getLine(cursor.row);\r\n\t if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0]))\r\n\t context.autoInsertedBrackets = 0;\r\n\t context.autoInsertedRow = cursor.row;\r\n\t context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\r\n\t context.autoInsertedBrackets++;\r\n\t};\r\n\r\n\tCstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {\r\n\t var cursor = editor.getCursorPosition();\r\n\t var line = session.doc.getLine(cursor.row);\r\n\t if (!this.isMaybeInsertedClosing(cursor, line))\r\n\t context.maybeInsertedBrackets = 0;\r\n\t context.maybeInsertedRow = cursor.row;\r\n\t context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\r\n\t context.maybeInsertedLineEnd = line.substr(cursor.column);\r\n\t context.maybeInsertedBrackets++;\r\n\t};\r\n\r\n\tCstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {\r\n\t return context.autoInsertedBrackets > 0 &&\r\n\t cursor.row === context.autoInsertedRow &&\r\n\t bracket === context.autoInsertedLineEnd[0] &&\r\n\t line.substr(cursor.column) === context.autoInsertedLineEnd;\r\n\t};\r\n\r\n\tCstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {\r\n\t return context.maybeInsertedBrackets > 0 &&\r\n\t cursor.row === context.maybeInsertedRow &&\r\n\t line.substr(cursor.column) === context.maybeInsertedLineEnd &&\r\n\t line.substr(0, cursor.column) == context.maybeInsertedLineStart;\r\n\t};\r\n\r\n\tCstyleBehaviour.popAutoInsertedClosing = function() {\r\n\t context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\r\n\t context.autoInsertedBrackets--;\r\n\t};\r\n\r\n\tCstyleBehaviour.clearMaybeInsertedClosing = function() {\r\n\t if (context) {\r\n\t context.maybeInsertedBrackets = 0;\r\n\t context.maybeInsertedRow = -1;\r\n\t }\r\n\t};\r\n\r\n\r\n\r\n\toop.inherits(CstyleBehaviour, Behaviour);\r\n\r\n\texports.CstyleBehaviour = CstyleBehaviour;\r\n\t});\r\n\r\n\tace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"../../lib/oop\");\r\n\tvar Range = acequire(\"../../range\").Range;\r\n\tvar BaseFoldMode = acequire(\"./fold_mode\").FoldMode;\r\n\r\n\tvar FoldMode = exports.FoldMode = function(commentRegex) {\r\n\t if (commentRegex) {\r\n\t this.foldingStartMarker = new RegExp(\r\n\t this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\r\n\t );\r\n\t this.foldingStopMarker = new RegExp(\r\n\t this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\r\n\t );\r\n\t }\r\n\t};\r\n\toop.inherits(FoldMode, BaseFoldMode);\r\n\r\n\t(function() {\r\n\t \r\n\t this.foldingStartMarker = /(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/;\r\n\t this.foldingStopMarker = /^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/;\r\n\t this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\r\n\t this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\r\n\t this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\r\n\t this._getFoldWidgetBase = this.getFoldWidget;\r\n\t this.getFoldWidget = function(session, foldStyle, row) {\r\n\t var line = session.getLine(row);\r\n\t \r\n\t if (this.singleLineBlockCommentRe.test(line)) {\r\n\t if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\r\n\t return \"\";\r\n\t }\r\n\t \r\n\t var fw = this._getFoldWidgetBase(session, foldStyle, row);\r\n\t \r\n\t if (!fw && this.startRegionRe.test(line))\r\n\t return \"start\"; // lineCommentRegionStart\r\n\t \r\n\t return fw;\r\n\t };\r\n\r\n\t this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\r\n\t var line = session.getLine(row);\r\n\t \r\n\t if (this.startRegionRe.test(line))\r\n\t return this.getCommentRegionBlock(session, line, row);\r\n\t \r\n\t var match = line.match(this.foldingStartMarker);\r\n\t if (match) {\r\n\t var i = match.index;\r\n\r\n\t if (match[1])\r\n\t return this.openingBracketBlock(session, match[1], row, i);\r\n\t \r\n\t var range = session.getCommentFoldRange(row, i + match[0].length, 1);\r\n\t \r\n\t if (range && !range.isMultiLine()) {\r\n\t if (forceMultiline) {\r\n\t range = this.getSectionRange(session, row);\r\n\t } else if (foldStyle != \"all\")\r\n\t range = null;\r\n\t }\r\n\t \r\n\t return range;\r\n\t }\r\n\r\n\t if (foldStyle === \"markbegin\")\r\n\t return;\r\n\r\n\t var match = line.match(this.foldingStopMarker);\r\n\t if (match) {\r\n\t var i = match.index + match[0].length;\r\n\r\n\t if (match[1])\r\n\t return this.closingBracketBlock(session, match[1], row, i);\r\n\r\n\t return session.getCommentFoldRange(row, i, -1);\r\n\t }\r\n\t };\r\n\t \r\n\t this.getSectionRange = function(session, row) {\r\n\t var line = session.getLine(row);\r\n\t var startIndent = line.search(/\\S/);\r\n\t var startRow = row;\r\n\t var startColumn = line.length;\r\n\t row = row + 1;\r\n\t var endRow = row;\r\n\t var maxRow = session.getLength();\r\n\t while (++row < maxRow) {\r\n\t line = session.getLine(row);\r\n\t var indent = line.search(/\\S/);\r\n\t if (indent === -1)\r\n\t continue;\r\n\t if (startIndent > indent)\r\n\t break;\r\n\t var subRange = this.getFoldWidgetRange(session, \"all\", row);\r\n\t \r\n\t if (subRange) {\r\n\t if (subRange.start.row <= startRow) {\r\n\t break;\r\n\t } else if (subRange.isMultiLine()) {\r\n\t row = subRange.end.row;\r\n\t } else if (startIndent == indent) {\r\n\t break;\r\n\t }\r\n\t }\r\n\t endRow = row;\r\n\t }\r\n\t \r\n\t return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\r\n\t };\r\n\t this.getCommentRegionBlock = function(session, line, row) {\r\n\t var startColumn = line.search(/\\s*$/);\r\n\t var maxRow = session.getLength();\r\n\t var startRow = row;\r\n\t \r\n\t var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\r\n\t var depth = 1;\r\n\t while (++row < maxRow) {\r\n\t line = session.getLine(row);\r\n\t var m = re.exec(line);\r\n\t if (!m) continue;\r\n\t if (m[1]) depth--;\r\n\t else depth++;\r\n\r\n\t if (!depth) break;\r\n\t }\r\n\r\n\t var endRow = row;\r\n\t if (endRow > startRow) {\r\n\t return new Range(startRow, startColumn, endRow, line.length);\r\n\t }\r\n\t };\r\n\r\n\t}).call(FoldMode.prototype);\r\n\r\n\t});\r\n\r\n\tace.define(\"ace/mode/json\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/json_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/worker/worker_client\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar oop = acequire(\"../lib/oop\");\r\n\tvar TextMode = acequire(\"./text\").Mode;\r\n\tvar HighlightRules = acequire(\"./json_highlight_rules\").JsonHighlightRules;\r\n\tvar MatchingBraceOutdent = acequire(\"./matching_brace_outdent\").MatchingBraceOutdent;\r\n\tvar CstyleBehaviour = acequire(\"./behaviour/cstyle\").CstyleBehaviour;\r\n\tvar CStyleFoldMode = acequire(\"./folding/cstyle\").FoldMode;\r\n\tvar WorkerClient = acequire(\"../worker/worker_client\").WorkerClient;\r\n\r\n\tvar Mode = function() {\r\n\t this.HighlightRules = HighlightRules;\r\n\t this.$outdent = new MatchingBraceOutdent();\r\n\t this.$behaviour = new CstyleBehaviour();\r\n\t this.foldingRules = new CStyleFoldMode();\r\n\t};\r\n\toop.inherits(Mode, TextMode);\r\n\r\n\t(function() {\r\n\r\n\t this.getNextLineIndent = function(state, line, tab) {\r\n\t var indent = this.$getIndent(line);\r\n\r\n\t if (state == \"start\") {\r\n\t var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\r\n\t if (match) {\r\n\t indent += tab;\r\n\t }\r\n\t }\r\n\r\n\t return indent;\r\n\t };\r\n\r\n\t this.checkOutdent = function(state, line, input) {\r\n\t return this.$outdent.checkOutdent(line, input);\r\n\t };\r\n\r\n\t this.autoOutdent = function(state, doc, row) {\r\n\t this.$outdent.autoOutdent(doc, row);\r\n\t };\r\n\r\n\t this.createWorker = function(session) {\r\n\t var worker = new WorkerClient([\"ace\"], __webpack_require__(68), \"JsonWorker\");\r\n\t worker.attachToDocument(session.getDocument());\r\n\r\n\t worker.on(\"annotate\", function(e) {\r\n\t session.setAnnotations(e.data);\r\n\t });\r\n\r\n\t worker.on(\"terminate\", function() {\r\n\t session.clearAnnotations();\r\n\t });\r\n\r\n\t return worker;\r\n\t };\r\n\r\n\r\n\t this.$id = \"ace/mode/json\";\r\n\t}).call(Mode.prototype);\r\n\r\n\texports.Mode = Mode;\r\n\t});\r\n\r\n\r\n/***/ },\r\n/* 68 */\r\n/***/ function(module, exports) {\r\n\r\n\tmodule.exports.id = 'ace/mode/json_worker';\r\n\tmodule.exports.src = \"\\\"no use strict\\\";(function(window){function resolveModuleId(id,paths){for(var testPath=id,tail=\\\"\\\";testPath;){var alias=paths[testPath];if(\\\"string\\\"==typeof alias)return alias+tail;if(alias)return alias.location.replace(/\\\\/*$/,\\\"/\\\")+(tail||alias.main||alias.name);if(alias===!1)return\\\"\\\";var i=testPath.lastIndexOf(\\\"/\\\");if(-1===i)break;tail=testPath.substr(i)+tail,testPath=testPath.slice(0,i)}return id}if(!(void 0!==window.window&&window.document||window.acequire&&window.define)){window.console||(window.console=function(){var msgs=Array.prototype.slice.call(arguments,0);postMessage({type:\\\"log\\\",data:msgs})},window.console.error=window.console.warn=window.console.log=window.console.trace=window.console),window.window=window,window.ace=window,window.onerror=function(message,file,line,col,err){postMessage({type:\\\"error\\\",data:{message:message,data:err.data,file:file,line:line,col:col,stack:err.stack}})},window.normalizeModule=function(parentId,moduleName){if(-1!==moduleName.indexOf(\\\"!\\\")){var chunks=moduleName.split(\\\"!\\\");return window.normalizeModule(parentId,chunks[0])+\\\"!\\\"+window.normalizeModule(parentId,chunks[1])}if(\\\".\\\"==moduleName.charAt(0)){var base=parentId.split(\\\"/\\\").slice(0,-1).join(\\\"/\\\");for(moduleName=(base?base+\\\"/\\\":\\\"\\\")+moduleName;-1!==moduleName.indexOf(\\\".\\\")&&previous!=moduleName;){var previous=moduleName;moduleName=moduleName.replace(/^\\\\.\\\\//,\\\"\\\").replace(/\\\\/\\\\.\\\\//,\\\"/\\\").replace(/[^\\\\/]+\\\\/\\\\.\\\\.\\\\//,\\\"\\\")}}return moduleName},window.acequire=function acequire(parentId,id){if(id||(id=parentId,parentId=null),!id.charAt)throw Error(\\\"worker.js acequire() accepts only (parentId, id) as arguments\\\");id=window.normalizeModule(parentId,id);var module=window.acequire.modules[id];if(module)return module.initialized||(module.initialized=!0,module.exports=module.factory().exports),module.exports;if(!window.acequire.tlns)return console.log(\\\"unable to load \\\"+id);var path=resolveModuleId(id,window.acequire.tlns);return\\\".js\\\"!=path.slice(-3)&&(path+=\\\".js\\\"),window.acequire.id=id,window.acequire.modules[id]={},importScripts(path),window.acequire(parentId,id)},window.acequire.modules={},window.acequire.tlns={},window.define=function(id,deps,factory){if(2==arguments.length?(factory=deps,\\\"string\\\"!=typeof id&&(deps=id,id=window.acequire.id)):1==arguments.length&&(factory=id,deps=[],id=window.acequire.id),\\\"function\\\"!=typeof factory)return window.acequire.modules[id]={exports:factory,initialized:!0},void 0;deps.length||(deps=[\\\"require\\\",\\\"exports\\\",\\\"module\\\"]);var req=function(childId){return window.acequire(id,childId)};window.acequire.modules[id]={exports:{},factory:function(){var module=this,returnExports=factory.apply(this,deps.map(function(dep){switch(dep){case\\\"require\\\":return req;case\\\"exports\\\":return module.exports;case\\\"module\\\":return module;default:return req(dep)}}));return returnExports&&(module.exports=returnExports),module}}},window.define.amd={},acequire.tlns={},window.initBaseUrls=function(topLevelNamespaces){for(var i in topLevelNamespaces)acequire.tlns[i]=topLevelNamespaces[i]},window.initSender=function(){var EventEmitter=window.acequire(\\\"ace/lib/event_emitter\\\").EventEmitter,oop=window.acequire(\\\"ace/lib/oop\\\"),Sender=function(){};return function(){oop.implement(this,EventEmitter),this.callback=function(data,callbackId){postMessage({type:\\\"call\\\",id:callbackId,data:data})},this.emit=function(name,data){postMessage({type:\\\"event\\\",name:name,data:data})}}.call(Sender.prototype),new Sender};var main=window.main=null,sender=window.sender=null;window.onmessage=function(e){var msg=e.data;if(msg.event&&sender)sender._signal(msg.event,msg.data);else if(msg.command)if(main[msg.command])main[msg.command].apply(main,msg.args);else{if(!window[msg.command])throw Error(\\\"Unknown command:\\\"+msg.command);window[msg.command].apply(window,msg.args)}else if(msg.init){window.initBaseUrls(msg.tlns),acequire(\\\"ace/lib/es5-shim\\\"),sender=window.sender=window.initSender();var clazz=acequire(msg.module)[msg.classname];main=window.main=new clazz(sender)}}}})(this),ace.define(\\\"ace/lib/oop\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";exports.inherits=function(ctor,superCtor){ctor.super_=superCtor,ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:!1,writable:!0,configurable:!0}})},exports.mixin=function(obj,mixin){for(var key in mixin)obj[key]=mixin[key];return obj},exports.implement=function(proto,mixin){exports.mixin(proto,mixin)}}),ace.define(\\\"ace/range\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";var comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},Range=function(startRow,startColumn,endRow,endColumn){this.start={row:startRow,column:startColumn},this.end={row:endRow,column:endColumn}};(function(){this.isEqual=function(range){return this.start.row===range.start.row&&this.end.row===range.end.row&&this.start.column===range.start.column&&this.end.column===range.end.column},this.toString=function(){return\\\"Range: [\\\"+this.start.row+\\\"/\\\"+this.start.column+\\\"] -> [\\\"+this.end.row+\\\"/\\\"+this.end.column+\\\"]\\\"},this.contains=function(row,column){return 0==this.compare(row,column)},this.compareRange=function(range){var cmp,end=range.end,start=range.start;return cmp=this.compare(end.row,end.column),1==cmp?(cmp=this.compare(start.row,start.column),1==cmp?2:0==cmp?1:0):-1==cmp?-2:(cmp=this.compare(start.row,start.column),-1==cmp?-1:1==cmp?42:0)},this.comparePoint=function(p){return this.compare(p.row,p.column)},this.containsRange=function(range){return 0==this.comparePoint(range.start)&&0==this.comparePoint(range.end)},this.intersects=function(range){var cmp=this.compareRange(range);return-1==cmp||0==cmp||1==cmp},this.isEnd=function(row,column){return this.end.row==row&&this.end.column==column},this.isStart=function(row,column){return this.start.row==row&&this.start.column==column},this.setStart=function(row,column){\\\"object\\\"==typeof row?(this.start.column=row.column,this.start.row=row.row):(this.start.row=row,this.start.column=column)},this.setEnd=function(row,column){\\\"object\\\"==typeof row?(this.end.column=row.column,this.end.row=row.row):(this.end.row=row,this.end.column=column)},this.inside=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)||this.isStart(row,column)?!1:!0:!1},this.insideStart=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)?!1:!0:!1},this.insideEnd=function(row,column){return 0==this.compare(row,column)?this.isStart(row,column)?!1:!0:!1},this.compare=function(row,column){return this.isMultiLine()||row!==this.start.row?this.start.row>row?-1:row>this.end.row?1:this.start.row===row?column>=this.start.column?0:-1:this.end.row===row?this.end.column>=column?0:1:0:this.start.column>column?-1:column>this.end.column?1:0},this.compareStart=function(row,column){return this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.compareEnd=function(row,column){return this.end.row==row&&this.end.column==column?1:this.compare(row,column)},this.compareInside=function(row,column){return this.end.row==row&&this.end.column==column?1:this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.clipRows=function(firstRow,lastRow){if(this.end.row>lastRow)var end={row:lastRow+1,column:0};else if(firstRow>this.end.row)var end={row:firstRow,column:0};if(this.start.row>lastRow)var start={row:lastRow+1,column:0};else if(firstRow>this.start.row)var start={row:firstRow,column:0};return Range.fromPoints(start||this.start,end||this.end)},this.extend=function(row,column){var cmp=this.compare(row,column);if(0==cmp)return this;if(-1==cmp)var start={row:row,column:column};else var end={row:row,column:column};return Range.fromPoints(start||this.start,end||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return Range.fromPoints(this.start,this.end)},this.collapseRows=function(){return 0==this.end.column?new Range(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new Range(this.start.row,0,this.end.row,0)},this.toScreenRange=function(session){var screenPosStart=session.documentToScreenPosition(this.start),screenPosEnd=session.documentToScreenPosition(this.end);return new Range(screenPosStart.row,screenPosStart.column,screenPosEnd.row,screenPosEnd.column)},this.moveBy=function(row,column){this.start.row+=row,this.start.column+=column,this.end.row+=row,this.end.column+=column}}).call(Range.prototype),Range.fromPoints=function(start,end){return new Range(start.row,start.column,end.row,end.column)},Range.comparePoints=comparePoints,Range.comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},exports.Range=Range}),ace.define(\\\"ace/apply_delta\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";exports.applyDelta=function(docLines,delta){var row=delta.start.row,startColumn=delta.start.column,line=docLines[row]||\\\"\\\";switch(delta.action){case\\\"insert\\\":var lines=delta.lines;if(1===lines.length)docLines[row]=line.substring(0,startColumn)+delta.lines[0]+line.substring(startColumn);else{var args=[row,1].concat(delta.lines);docLines.splice.apply(docLines,args),docLines[row]=line.substring(0,startColumn)+docLines[row],docLines[row+delta.lines.length-1]+=line.substring(startColumn)}break;case\\\"remove\\\":var endColumn=delta.end.column,endRow=delta.end.row;row===endRow?docLines[row]=line.substring(0,startColumn)+line.substring(endColumn):docLines.splice(row,endRow-row+1,line.substring(0,startColumn)+docLines[endRow].substring(endColumn))}}}),ace.define(\\\"ace/lib/event_emitter\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";var EventEmitter={},stopPropagation=function(){this.propagationStopped=!0},preventDefault=function(){this.defaultPrevented=!0};EventEmitter._emit=EventEmitter._dispatchEvent=function(eventName,e){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var listeners=this._eventRegistry[eventName]||[],defaultHandler=this._defaultHandlers[eventName];if(listeners.length||defaultHandler){\\\"object\\\"==typeof e&&e||(e={}),e.type||(e.type=eventName),e.stopPropagation||(e.stopPropagation=stopPropagation),e.preventDefault||(e.preventDefault=preventDefault),listeners=listeners.slice();for(var i=0;listeners.length>i&&(listeners[i](e,this),!e.propagationStopped);i++);return defaultHandler&&!e.defaultPrevented?defaultHandler(e,this):void 0}},EventEmitter._signal=function(eventName,e){var listeners=(this._eventRegistry||{})[eventName];if(listeners){listeners=listeners.slice();for(var i=0;listeners.length>i;i++)listeners[i](e,this)}},EventEmitter.once=function(eventName,callback){var _self=this;callback&&this.addEventListener(eventName,function newCallback(){_self.removeEventListener(eventName,newCallback),callback.apply(null,arguments)})},EventEmitter.setDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers||(handlers=this._defaultHandlers={_disabled_:{}}),handlers[eventName]){var old=handlers[eventName],disabled=handlers._disabled_[eventName];disabled||(handlers._disabled_[eventName]=disabled=[]),disabled.push(old);var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}handlers[eventName]=callback},EventEmitter.removeDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers){var disabled=handlers._disabled_[eventName];if(handlers[eventName]==callback)handlers[eventName],disabled&&this.setDefaultHandler(eventName,disabled.pop());else if(disabled){var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}}},EventEmitter.on=EventEmitter.addEventListener=function(eventName,callback,capturing){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];return listeners||(listeners=this._eventRegistry[eventName]=[]),-1==listeners.indexOf(callback)&&listeners[capturing?\\\"unshift\\\":\\\"push\\\"](callback),callback},EventEmitter.off=EventEmitter.removeListener=EventEmitter.removeEventListener=function(eventName,callback){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];if(listeners){var index=listeners.indexOf(callback);-1!==index&&listeners.splice(index,1)}},EventEmitter.removeAllListeners=function(eventName){this._eventRegistry&&(this._eventRegistry[eventName]=[])},exports.EventEmitter=EventEmitter}),ace.define(\\\"ace/anchor\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\",\\\"ace/lib/oop\\\",\\\"ace/lib/event_emitter\\\"],function(acequire,exports){\\\"use strict\\\";var oop=acequire(\\\"./lib/oop\\\"),EventEmitter=acequire(\\\"./lib/event_emitter\\\").EventEmitter,Anchor=exports.Anchor=function(doc,row,column){this.$onChange=this.onChange.bind(this),this.attach(doc),column===void 0?this.setPosition(row.row,row.column):this.setPosition(row,column)};(function(){function $pointsInOrder(point1,point2,equalPointsInOrder){var bColIsAfter=equalPointsInOrder?point1.column<=point2.column:point1.column<point2.column;return point1.row<point2.row||point1.row==point2.row&&bColIsAfter}function $getTransformedPoint(delta,point,moveIfEqual){var deltaIsInsert=\\\"insert\\\"==delta.action,deltaRowShift=(deltaIsInsert?1:-1)*(delta.end.row-delta.start.row),deltaColShift=(deltaIsInsert?1:-1)*(delta.end.column-delta.start.column),deltaStart=delta.start,deltaEnd=deltaIsInsert?deltaStart:delta.end;return $pointsInOrder(point,deltaStart,moveIfEqual)?{row:point.row,column:point.column}:$pointsInOrder(deltaEnd,point,!moveIfEqual)?{row:point.row+deltaRowShift,column:point.column+(point.row==deltaEnd.row?deltaColShift:0)}:{row:deltaStart.row,column:deltaStart.column}}oop.implement(this,EventEmitter),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(delta){if(!(delta.start.row==delta.end.row&&delta.start.row!=this.row||delta.start.row>this.row)){var point=$getTransformedPoint(delta,{row:this.row,column:this.column},this.$insertRight);this.setPosition(point.row,point.column,!0)}},this.setPosition=function(row,column,noClip){var pos;if(pos=noClip?{row:row,column:column}:this.$clipPositionToDocument(row,column),this.row!=pos.row||this.column!=pos.column){var old={row:this.row,column:this.column};this.row=pos.row,this.column=pos.column,this._signal(\\\"change\\\",{old:old,value:pos})}},this.detach=function(){this.document.removeEventListener(\\\"change\\\",this.$onChange)},this.attach=function(doc){this.document=doc||this.document,this.document.on(\\\"change\\\",this.$onChange)},this.$clipPositionToDocument=function(row,column){var pos={};return row>=this.document.getLength()?(pos.row=Math.max(0,this.document.getLength()-1),pos.column=this.document.getLine(pos.row).length):0>row?(pos.row=0,pos.column=0):(pos.row=row,pos.column=Math.min(this.document.getLine(pos.row).length,Math.max(0,column))),0>column&&(pos.column=0),pos}}).call(Anchor.prototype)}),ace.define(\\\"ace/document\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\",\\\"ace/lib/oop\\\",\\\"ace/apply_delta\\\",\\\"ace/lib/event_emitter\\\",\\\"ace/range\\\",\\\"ace/anchor\\\"],function(acequire,exports){\\\"use strict\\\";var oop=acequire(\\\"./lib/oop\\\"),applyDelta=acequire(\\\"./apply_delta\\\").applyDelta,EventEmitter=acequire(\\\"./lib/event_emitter\\\").EventEmitter,Range=acequire(\\\"./range\\\").Range,Anchor=acequire(\\\"./anchor\\\").Anchor,Document=function(textOrLines){this.$lines=[\\\"\\\"],0===textOrLines.length?this.$lines=[\\\"\\\"]:Array.isArray(textOrLines)?this.insertMergedLines({row:0,column:0},textOrLines):this.insert({row:0,column:0},textOrLines)};(function(){oop.implement(this,EventEmitter),this.setValue=function(text){var len=this.getLength()-1;this.remove(new Range(0,0,len,this.getLine(len).length)),this.insert({row:0,column:0},text)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(row,column){return new Anchor(this,row,column)},this.$split=0===\\\"aaa\\\".split(/a/).length?function(text){return text.replace(/\\\\r\\\\n|\\\\r/g,\\\"\\\\n\\\").split(\\\"\\\\n\\\")}:function(text){return text.split(/\\\\r\\\\n|\\\\r|\\\\n/)},this.$detectNewLine=function(text){var match=text.match(/^.*?(\\\\r\\\\n|\\\\r|\\\\n)/m);this.$autoNewLine=match?match[1]:\\\"\\\\n\\\",this._signal(\\\"changeNewLineMode\\\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\\\"windows\\\":return\\\"\\\\r\\\\n\\\";case\\\"unix\\\":return\\\"\\\\n\\\";default:return this.$autoNewLine||\\\"\\\\n\\\"}},this.$autoNewLine=\\\"\\\",this.$newLineMode=\\\"auto\\\",this.setNewLineMode=function(newLineMode){this.$newLineMode!==newLineMode&&(this.$newLineMode=newLineMode,this._signal(\\\"changeNewLineMode\\\"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(text){return\\\"\\\\r\\\\n\\\"==text||\\\"\\\\r\\\"==text||\\\"\\\\n\\\"==text},this.getLine=function(row){return this.$lines[row]||\\\"\\\"},this.getLines=function(firstRow,lastRow){return this.$lines.slice(firstRow,lastRow+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(range){return this.getLinesForRange(range).join(this.getNewLineCharacter())},this.getLinesForRange=function(range){var lines;if(range.start.row===range.end.row)lines=[this.getLine(range.start.row).substring(range.start.column,range.end.column)];else{lines=this.getLines(range.start.row,range.end.row),lines[0]=(lines[0]||\\\"\\\").substring(range.start.column);var l=lines.length-1;range.end.row-range.start.row==l&&(lines[l]=lines[l].substring(0,range.end.column))}return lines},this.insertLines=function(row,lines){return console.warn(\\\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\\\"),this.insertFullLines(row,lines)},this.removeLines=function(firstRow,lastRow){return console.warn(\\\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\\\"),this.removeFullLines(firstRow,lastRow)},this.insertNewLine=function(position){return console.warn(\\\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\\\"),this.insertMergedLines(position,[\\\"\\\",\\\"\\\"])},this.insert=function(position,text){return 1>=this.getLength()&&this.$detectNewLine(text),this.insertMergedLines(position,this.$split(text))},this.insertInLine=function(position,text){var start=this.clippedPos(position.row,position.column),end=this.pos(position.row,position.column+text.length);return this.applyDelta({start:start,end:end,action:\\\"insert\\\",lines:[text]},!0),this.clonePos(end)},this.clippedPos=function(row,column){var length=this.getLength();void 0===row?row=length:0>row?row=0:row>=length&&(row=length-1,column=void 0);var line=this.getLine(row);return void 0==column&&(column=line.length),column=Math.min(Math.max(column,0),line.length),{row:row,column:column}},this.clonePos=function(pos){return{row:pos.row,column:pos.column}},this.pos=function(row,column){return{row:row,column:column}},this.$clipPosition=function(position){var length=this.getLength();return position.row>=length?(position.row=Math.max(0,length-1),position.column=this.getLine(length-1).length):(position.row=Math.max(0,position.row),position.column=Math.min(Math.max(position.column,0),this.getLine(position.row).length)),position},this.insertFullLines=function(row,lines){row=Math.min(Math.max(row,0),this.getLength());var column=0;this.getLength()>row?(lines=lines.concat([\\\"\\\"]),column=0):(lines=[\\\"\\\"].concat(lines),row--,column=this.$lines[row].length),this.insertMergedLines({row:row,column:column},lines)},this.insertMergedLines=function(position,lines){var start=this.clippedPos(position.row,position.column),end={row:start.row+lines.length-1,column:(1==lines.length?start.column:0)+lines[lines.length-1].length};return this.applyDelta({start:start,end:end,action:\\\"insert\\\",lines:lines}),this.clonePos(end)},this.remove=function(range){var start=this.clippedPos(range.start.row,range.start.column),end=this.clippedPos(range.end.row,range.end.column);return this.applyDelta({start:start,end:end,action:\\\"remove\\\",lines:this.getLinesForRange({start:start,end:end})}),this.clonePos(start)},this.removeInLine=function(row,startColumn,endColumn){var start=this.clippedPos(row,startColumn),end=this.clippedPos(row,endColumn);return this.applyDelta({start:start,end:end,action:\\\"remove\\\",lines:this.getLinesForRange({start:start,end:end})},!0),this.clonePos(start)},this.removeFullLines=function(firstRow,lastRow){firstRow=Math.min(Math.max(0,firstRow),this.getLength()-1),lastRow=Math.min(Math.max(0,lastRow),this.getLength()-1);var deleteFirstNewLine=lastRow==this.getLength()-1&&firstRow>0,deleteLastNewLine=this.getLength()-1>lastRow,startRow=deleteFirstNewLine?firstRow-1:firstRow,startCol=deleteFirstNewLine?this.getLine(startRow).length:0,endRow=deleteLastNewLine?lastRow+1:lastRow,endCol=deleteLastNewLine?0:this.getLine(endRow).length,range=new Range(startRow,startCol,endRow,endCol),deletedLines=this.$lines.slice(firstRow,lastRow+1);return this.applyDelta({start:range.start,end:range.end,action:\\\"remove\\\",lines:this.getLinesForRange(range)}),deletedLines},this.removeNewLine=function(row){this.getLength()-1>row&&row>=0&&this.applyDelta({start:this.pos(row,this.getLine(row).length),end:this.pos(row+1,0),action:\\\"remove\\\",lines:[\\\"\\\",\\\"\\\"]})},this.replace=function(range,text){if(range instanceof Range||(range=Range.fromPoints(range.start,range.end)),0===text.length&&range.isEmpty())return range.start;if(text==this.getTextRange(range))return range.end;this.remove(range);var end;return end=text?this.insert(range.start,text):range.start},this.applyDeltas=function(deltas){for(var i=0;deltas.length>i;i++)this.applyDelta(deltas[i])},this.revertDeltas=function(deltas){for(var i=deltas.length-1;i>=0;i--)this.revertDelta(deltas[i])},this.applyDelta=function(delta,doNotValidate){var isInsert=\\\"insert\\\"==delta.action;(isInsert?1>=delta.lines.length&&!delta.lines[0]:!Range.comparePoints(delta.start,delta.end))||(isInsert&&delta.lines.length>2e4&&this.$splitAndapplyLargeDelta(delta,2e4),applyDelta(this.$lines,delta,doNotValidate),this._signal(\\\"change\\\",delta))},this.$splitAndapplyLargeDelta=function(delta,MAX){for(var lines=delta.lines,l=lines.length,row=delta.start.row,column=delta.start.column,from=0,to=0;;){from=to,to+=MAX-1;var chunk=lines.slice(from,to);if(to>l){delta.lines=chunk,delta.start.row=row+from,delta.start.column=column;break}chunk.push(\\\"\\\"),this.applyDelta({start:this.pos(row+from,column),end:this.pos(row+to,column=0),action:delta.action,lines:chunk},!0)}},this.revertDelta=function(delta){this.applyDelta({start:this.clonePos(delta.start),end:this.clonePos(delta.end),action:\\\"insert\\\"==delta.action?\\\"remove\\\":\\\"insert\\\",lines:delta.lines.slice()})},this.indexToPosition=function(index,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,i=startRow||0,l=lines.length;l>i;i++)if(index-=lines[i].length+newlineLength,0>index)return{row:i,column:index+lines[i].length+newlineLength};return{row:l-1,column:lines[l-1].length}},this.positionToIndex=function(pos,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,index=0,row=Math.min(pos.row,lines.length),i=startRow||0;row>i;++i)index+=lines[i].length+newlineLength;return index+pos.column}}).call(Document.prototype),exports.Document=Document}),ace.define(\\\"ace/lib/lang\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";exports.last=function(a){return a[a.length-1]},exports.stringReverse=function(string){return string.split(\\\"\\\").reverse().join(\\\"\\\")},exports.stringRepeat=function(string,count){for(var result=\\\"\\\";count>0;)1&count&&(result+=string),(count>>=1)&&(string+=string);return result};var trimBeginRegexp=/^\\\\s\\\\s*/,trimEndRegexp=/\\\\s\\\\s*$/;exports.stringTrimLeft=function(string){return string.replace(trimBeginRegexp,\\\"\\\")},exports.stringTrimRight=function(string){return string.replace(trimEndRegexp,\\\"\\\")},exports.copyObject=function(obj){var copy={};for(var key in obj)copy[key]=obj[key];return copy},exports.copyArray=function(array){for(var copy=[],i=0,l=array.length;l>i;i++)copy[i]=array[i]&&\\\"object\\\"==typeof array[i]?this.copyObject(array[i]):array[i];return copy},exports.deepCopy=function deepCopy(obj){if(\\\"object\\\"!=typeof obj||!obj)return obj;var copy;if(Array.isArray(obj)){copy=[];for(var key=0;obj.length>key;key++)copy[key]=deepCopy(obj[key]);return copy}var cons=obj.constructor;if(cons===RegExp)return obj;copy=cons();for(var key in obj)copy[key]=deepCopy(obj[key]);return copy},exports.arrayToMap=function(arr){for(var map={},i=0;arr.length>i;i++)map[arr[i]]=1;return map},exports.createMap=function(props){var map=Object.create(null);for(var i in props)map[i]=props[i];return map},exports.arrayRemove=function(array,value){for(var i=0;array.length>=i;i++)value===array[i]&&array.splice(i,1)},exports.escapeRegExp=function(str){return str.replace(/([.*+?^${}()|[\\\\]\\\\/\\\\\\\\])/g,\\\"\\\\\\\\$1\\\")},exports.escapeHTML=function(str){return str.replace(/&/g,\\\"&#38;\\\").replace(/\\\"/g,\\\"&#34;\\\").replace(/'/g,\\\"&#39;\\\").replace(/</g,\\\"&#60;\\\")},exports.getMatchOffsets=function(string,regExp){var matches=[];return string.replace(regExp,function(str){matches.push({offset:arguments[arguments.length-2],length:str.length})}),matches},exports.deferredCall=function(fcn){var timer=null,callback=function(){timer=null,fcn()},deferred=function(timeout){return deferred.cancel(),timer=setTimeout(callback,timeout||0),deferred};return deferred.schedule=deferred,deferred.call=function(){return this.cancel(),fcn(),deferred},deferred.cancel=function(){return clearTimeout(timer),timer=null,deferred},deferred.isPending=function(){return timer},deferred},exports.delayedCall=function(fcn,defaultTimeout){var timer=null,callback=function(){timer=null,fcn()},_self=function(timeout){null==timer&&(timer=setTimeout(callback,timeout||defaultTimeout))};return _self.delay=function(timeout){timer&&clearTimeout(timer),timer=setTimeout(callback,timeout||defaultTimeout)},_self.schedule=_self,_self.call=function(){this.cancel(),fcn()},_self.cancel=function(){timer&&clearTimeout(timer),timer=null},_self.isPending=function(){return timer},_self}}),ace.define(\\\"ace/worker/mirror\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\",\\\"ace/range\\\",\\\"ace/document\\\",\\\"ace/lib/lang\\\"],function(acequire,exports){\\\"use strict\\\";acequire(\\\"../range\\\").Range;var Document=acequire(\\\"../document\\\").Document,lang=acequire(\\\"../lib/lang\\\"),Mirror=exports.Mirror=function(sender){this.sender=sender;var doc=this.doc=new Document(\\\"\\\"),deferredUpdate=this.deferredUpdate=lang.delayedCall(this.onUpdate.bind(this)),_self=this;sender.on(\\\"change\\\",function(e){var data=e.data;if(data[0].start)doc.applyDeltas(data);else for(var i=0;data.length>i;i+=2){if(Array.isArray(data[i+1]))var d={action:\\\"insert\\\",start:data[i],lines:data[i+1]};else var d={action:\\\"remove\\\",start:data[i],end:data[i+1]};doc.applyDelta(d,!0)}return _self.$timeout?deferredUpdate.schedule(_self.$timeout):(_self.onUpdate(),void 0)})};(function(){this.$timeout=500,this.setTimeout=function(timeout){this.$timeout=timeout},this.setValue=function(value){this.doc.setValue(value),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(callbackId){this.sender.callback(this.doc.getValue(),callbackId)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(Mirror.prototype)}),ace.define(\\\"ace/mode/json/json_parse\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(){\\\"use strict\\\";var at,ch,text,value,escapee={'\\\"':'\\\"',\\\"\\\\\\\\\\\":\\\"\\\\\\\\\\\",\\\"/\\\":\\\"/\\\",b:\\\"\\\\b\\\",f:\\\"\\\\f\\\",n:\\\"\\\\n\\\",r:\\\"\\\\r\\\",t:\\\"\\t\\\"},error=function(m){throw{name:\\\"SyntaxError\\\",message:m,at:at,text:text}},next=function(c){return c&&c!==ch&&error(\\\"Expected '\\\"+c+\\\"' instead of '\\\"+ch+\\\"'\\\"),ch=text.charAt(at),at+=1,ch},number=function(){var number,string=\\\"\\\";for(\\\"-\\\"===ch&&(string=\\\"-\\\",next(\\\"-\\\"));ch>=\\\"0\\\"&&\\\"9\\\">=ch;)string+=ch,next();if(\\\".\\\"===ch)for(string+=\\\".\\\";next()&&ch>=\\\"0\\\"&&\\\"9\\\">=ch;)string+=ch;if(\\\"e\\\"===ch||\\\"E\\\"===ch)for(string+=ch,next(),(\\\"-\\\"===ch||\\\"+\\\"===ch)&&(string+=ch,next());ch>=\\\"0\\\"&&\\\"9\\\">=ch;)string+=ch,next();return number=+string,isNaN(number)?(error(\\\"Bad number\\\"),void 0):number},string=function(){var hex,i,uffff,string=\\\"\\\";if('\\\"'===ch)for(;next();){if('\\\"'===ch)return next(),string;if(\\\"\\\\\\\\\\\"===ch)if(next(),\\\"u\\\"===ch){for(uffff=0,i=0;4>i&&(hex=parseInt(next(),16),isFinite(hex));i+=1)uffff=16*uffff+hex;string+=String.fromCharCode(uffff)}else{if(\\\"string\\\"!=typeof escapee[ch])break;string+=escapee[ch]}else string+=ch}error(\\\"Bad string\\\")},white=function(){for(;ch&&\\\" \\\">=ch;)next()},word=function(){switch(ch){case\\\"t\\\":return next(\\\"t\\\"),next(\\\"r\\\"),next(\\\"u\\\"),next(\\\"e\\\"),!0;case\\\"f\\\":return next(\\\"f\\\"),next(\\\"a\\\"),next(\\\"l\\\"),next(\\\"s\\\"),next(\\\"e\\\"),!1;case\\\"n\\\":return next(\\\"n\\\"),next(\\\"u\\\"),next(\\\"l\\\"),next(\\\"l\\\"),null}error(\\\"Unexpected '\\\"+ch+\\\"'\\\")},array=function(){var array=[];if(\\\"[\\\"===ch){if(next(\\\"[\\\"),white(),\\\"]\\\"===ch)return next(\\\"]\\\"),array;for(;ch;){if(array.push(value()),white(),\\\"]\\\"===ch)return next(\\\"]\\\"),array;next(\\\",\\\"),white()}}error(\\\"Bad array\\\")},object=function(){var key,object={};if(\\\"{\\\"===ch){if(next(\\\"{\\\"),white(),\\\"}\\\"===ch)return next(\\\"}\\\"),object;for(;ch;){if(key=string(),white(),next(\\\":\\\"),Object.hasOwnProperty.call(object,key)&&error('Duplicate key \\\"'+key+'\\\"'),object[key]=value(),white(),\\\"}\\\"===ch)return next(\\\"}\\\"),object;next(\\\",\\\"),white()}}error(\\\"Bad object\\\")};return value=function(){switch(white(),ch){case\\\"{\\\":return object();case\\\"[\\\":return array();case'\\\"':return string();case\\\"-\\\":return number();default:return ch>=\\\"0\\\"&&\\\"9\\\">=ch?number():word()}},function(source,reviver){var result;return text=source,at=0,ch=\\\" \\\",result=value(),white(),ch&&error(\\\"Syntax error\\\"),\\\"function\\\"==typeof reviver?function walk(holder,key){var k,v,value=holder[key];if(value&&\\\"object\\\"==typeof value)for(k in value)Object.hasOwnProperty.call(value,k)&&(v=walk(value,k),void 0!==v?value[k]=v:delete value[k]);return reviver.call(holder,key,value)}({\\\"\\\":result},\\\"\\\"):result}}),ace.define(\\\"ace/mode/json_worker\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\",\\\"ace/lib/oop\\\",\\\"ace/worker/mirror\\\",\\\"ace/mode/json/json_parse\\\"],function(acequire,exports){\\\"use strict\\\";var oop=acequire(\\\"../lib/oop\\\"),Mirror=acequire(\\\"../worker/mirror\\\").Mirror,parse=acequire(\\\"./json/json_parse\\\"),JsonWorker=exports.JsonWorker=function(sender){Mirror.call(this,sender),this.setTimeout(200)};oop.inherits(JsonWorker,Mirror),function(){this.onUpdate=function(){var value=this.doc.getValue(),errors=[];try{value&&parse(value)}catch(e){var pos=this.doc.indexToPosition(e.at-1);errors.push({row:pos.row,column:pos.column,text:e.message,type:\\\"error\\\"})}this.sender.emit(\\\"annotate\\\",errors)}}.call(JsonWorker.prototype)}),ace.define(\\\"ace/lib/es5-shim\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(){function Empty(){}function doesDefinePropertyWork(object){try{return Object.defineProperty(object,\\\"sentinel\\\",{}),\\\"sentinel\\\"in object}catch(exception){}}function toInteger(n){return n=+n,n!==n?n=0:0!==n&&n!==1/0&&n!==-(1/0)&&(n=(n>0||-1)*Math.floor(Math.abs(n))),n}Function.prototype.bind||(Function.prototype.bind=function(that){var target=this;if(\\\"function\\\"!=typeof target)throw new TypeError(\\\"Function.prototype.bind called on incompatible \\\"+target);var args=slice.call(arguments,1),bound=function(){if(this instanceof bound){var result=target.apply(this,args.concat(slice.call(arguments)));return Object(result)===result?result:this}return target.apply(that,args.concat(slice.call(arguments)))};return target.prototype&&(Empty.prototype=target.prototype,bound.prototype=new Empty,Empty.prototype=null),bound});var defineGetter,defineSetter,lookupGetter,lookupSetter,supportsAccessors,call=Function.prototype.call,prototypeOfArray=Array.prototype,prototypeOfObject=Object.prototype,slice=prototypeOfArray.slice,_toString=call.bind(prototypeOfObject.toString),owns=call.bind(prototypeOfObject.hasOwnProperty);if((supportsAccessors=owns(prototypeOfObject,\\\"__defineGetter__\\\"))&&(defineGetter=call.bind(prototypeOfObject.__defineGetter__),defineSetter=call.bind(prototypeOfObject.__defineSetter__),lookupGetter=call.bind(prototypeOfObject.__lookupGetter__),lookupSetter=call.bind(prototypeOfObject.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function makeArray(l){var a=Array(l+2);return a[0]=a[1]=0,a}var lengthBefore,array=[];return array.splice.apply(array,makeArray(20)),array.splice.apply(array,makeArray(26)),lengthBefore=array.length,array.splice(5,0,\\\"XXX\\\"),lengthBefore+1==array.length,lengthBefore+1==array.length?!0:void 0\\n}()){var array_splice=Array.prototype.splice;Array.prototype.splice=function(start,deleteCount){return arguments.length?array_splice.apply(this,[void 0===start?0:start,void 0===deleteCount?this.length-start:deleteCount].concat(slice.call(arguments,2))):[]}}else Array.prototype.splice=function(pos,removeCount){var length=this.length;pos>0?pos>length&&(pos=length):void 0==pos?pos=0:0>pos&&(pos=Math.max(length+pos,0)),length>pos+removeCount||(removeCount=length-pos);var removed=this.slice(pos,pos+removeCount),insert=slice.call(arguments,2),add=insert.length;if(pos===length)add&&this.push.apply(this,insert);else{var remove=Math.min(removeCount,length-pos),tailOldPos=pos+remove,tailNewPos=tailOldPos+add-remove,tailCount=length-tailOldPos,lengthAfterRemove=length-remove;if(tailOldPos>tailNewPos)for(var i=0;tailCount>i;++i)this[tailNewPos+i]=this[tailOldPos+i];else if(tailNewPos>tailOldPos)for(i=tailCount;i--;)this[tailNewPos+i]=this[tailOldPos+i];if(add&&pos===lengthAfterRemove)this.length=lengthAfterRemove,this.push.apply(this,insert);else for(this.length=lengthAfterRemove+add,i=0;add>i;++i)this[pos+i]=insert[i]}return removed};Array.isArray||(Array.isArray=function(obj){return\\\"[object Array]\\\"==_toString(obj)});var boxedString=Object(\\\"a\\\"),splitString=\\\"a\\\"!=boxedString[0]||!(0 in boxedString);if(Array.prototype.forEach||(Array.prototype.forEach=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,thisp=arguments[1],i=-1,length=self.length>>>0;if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError;for(;length>++i;)i in self&&fun.call(thisp,self[i],i,object)}),Array.prototype.map||(Array.prototype.map=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0,result=Array(length),thisp=arguments[1];if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");for(var i=0;length>i;i++)i in self&&(result[i]=fun.call(thisp,self[i],i,object));return result}),Array.prototype.filter||(Array.prototype.filter=function(fun){var value,object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0,result=[],thisp=arguments[1];if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");for(var i=0;length>i;i++)i in self&&(value=self[i],fun.call(thisp,value,i,object)&&result.push(value));return result}),Array.prototype.every||(Array.prototype.every=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0,thisp=arguments[1];if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");for(var i=0;length>i;i++)if(i in self&&!fun.call(thisp,self[i],i,object))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0,thisp=arguments[1];if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");for(var i=0;length>i;i++)if(i in self&&fun.call(thisp,self[i],i,object))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0;if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");if(!length&&1==arguments.length)throw new TypeError(\\\"reduce of empty array with no initial value\\\");var result,i=0;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i++];break}if(++i>=length)throw new TypeError(\\\"reduce of empty array with no initial value\\\")}for(;length>i;i++)i in self&&(result=fun.call(void 0,result,self[i],i,object));return result}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0;if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");if(!length&&1==arguments.length)throw new TypeError(\\\"reduceRight of empty array with no initial value\\\");var result,i=length-1;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i--];break}if(0>--i)throw new TypeError(\\\"reduceRight of empty array with no initial value\\\")}do i in this&&(result=fun.call(void 0,result,self[i],i,object));while(i--);return result}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(sought){var self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):toObject(this),length=self.length>>>0;if(!length)return-1;var i=0;for(arguments.length>1&&(i=toInteger(arguments[1])),i=i>=0?i:Math.max(0,length+i);length>i;i++)if(i in self&&self[i]===sought)return i;return-1}),Array.prototype.lastIndexOf&&-1==[0,1].lastIndexOf(0,-3)||(Array.prototype.lastIndexOf=function(sought){var self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):toObject(this),length=self.length>>>0;if(!length)return-1;var i=length-1;for(arguments.length>1&&(i=Math.min(i,toInteger(arguments[1]))),i=i>=0?i:length-Math.abs(i);i>=0;i--)if(i in self&&sought===self[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(object){return object.__proto__||(object.constructor?object.constructor.prototype:prototypeOfObject)}),!Object.getOwnPropertyDescriptor){var ERR_NON_OBJECT=\\\"Object.getOwnPropertyDescriptor called on a non-object: \\\";Object.getOwnPropertyDescriptor=function(object,property){if(\\\"object\\\"!=typeof object&&\\\"function\\\"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT+object);if(owns(object,property)){var descriptor,getter,setter;if(descriptor={enumerable:!0,configurable:!0},supportsAccessors){var prototype=object.__proto__;object.__proto__=prototypeOfObject;var getter=lookupGetter(object,property),setter=lookupSetter(object,property);if(object.__proto__=prototype,getter||setter)return getter&&(descriptor.get=getter),setter&&(descriptor.set=setter),descriptor}return descriptor.value=object[property],descriptor}}}if(Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(object){return Object.keys(object)}),!Object.create){var createEmpty;createEmpty=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var empty={};for(var i in empty)empty[i]=null;return empty.constructor=empty.hasOwnProperty=empty.propertyIsEnumerable=empty.isPrototypeOf=empty.toLocaleString=empty.toString=empty.valueOf=empty.__proto__=null,empty},Object.create=function(prototype,properties){var object;if(null===prototype)object=createEmpty();else{if(\\\"object\\\"!=typeof prototype)throw new TypeError(\\\"typeof prototype[\\\"+typeof prototype+\\\"] != 'object'\\\");var Type=function(){};Type.prototype=prototype,object=new Type,object.__proto__=prototype}return void 0!==properties&&Object.defineProperties(object,properties),object}}if(Object.defineProperty){var definePropertyWorksOnObject=doesDefinePropertyWork({}),definePropertyWorksOnDom=\\\"undefined\\\"==typeof document||doesDefinePropertyWork(document.createElement(\\\"div\\\"));if(!definePropertyWorksOnObject||!definePropertyWorksOnDom)var definePropertyFallback=Object.defineProperty}if(!Object.defineProperty||definePropertyFallback){var ERR_NON_OBJECT_DESCRIPTOR=\\\"Property description must be an object: \\\",ERR_NON_OBJECT_TARGET=\\\"Object.defineProperty called on non-object: \\\",ERR_ACCESSORS_NOT_SUPPORTED=\\\"getters & setters can not be defined on this javascript engine\\\";Object.defineProperty=function(object,property,descriptor){if(\\\"object\\\"!=typeof object&&\\\"function\\\"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT_TARGET+object);if(\\\"object\\\"!=typeof descriptor&&\\\"function\\\"!=typeof descriptor||null===descriptor)throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR+descriptor);if(definePropertyFallback)try{return definePropertyFallback.call(Object,object,property,descriptor)}catch(exception){}if(owns(descriptor,\\\"value\\\"))if(supportsAccessors&&(lookupGetter(object,property)||lookupSetter(object,property))){var prototype=object.__proto__;object.__proto__=prototypeOfObject,delete object[property],object[property]=descriptor.value,object.__proto__=prototype}else object[property]=descriptor.value;else{if(!supportsAccessors)throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);owns(descriptor,\\\"get\\\")&&defineGetter(object,property,descriptor.get),owns(descriptor,\\\"set\\\")&&defineSetter(object,property,descriptor.set)}return object}}Object.defineProperties||(Object.defineProperties=function(object,properties){for(var property in properties)owns(properties,property)&&Object.defineProperty(object,property,properties[property]);return object}),Object.seal||(Object.seal=function(object){return object}),Object.freeze||(Object.freeze=function(object){return object});try{Object.freeze(function(){})}catch(exception){Object.freeze=function(freezeObject){return function(object){return\\\"function\\\"==typeof object?object:freezeObject(object)}}(Object.freeze)}if(Object.preventExtensions||(Object.preventExtensions=function(object){return object}),Object.isSealed||(Object.isSealed=function(){return!1}),Object.isFrozen||(Object.isFrozen=function(){return!1}),Object.isExtensible||(Object.isExtensible=function(object){if(Object(object)===object)throw new TypeError;for(var name=\\\"\\\";owns(object,name);)name+=\\\"?\\\";object[name]=!0;var returnValue=owns(object,name);return delete object[name],returnValue}),!Object.keys){var hasDontEnumBug=!0,dontEnums=[\\\"toString\\\",\\\"toLocaleString\\\",\\\"valueOf\\\",\\\"hasOwnProperty\\\",\\\"isPrototypeOf\\\",\\\"propertyIsEnumerable\\\",\\\"constructor\\\"],dontEnumsLength=dontEnums.length;for(var key in{toString:null})hasDontEnumBug=!1;Object.keys=function(object){if(\\\"object\\\"!=typeof object&&\\\"function\\\"!=typeof object||null===object)throw new TypeError(\\\"Object.keys called on a non-object\\\");var keys=[];for(var name in object)owns(object,name)&&keys.push(name);if(hasDontEnumBug)for(var i=0,ii=dontEnumsLength;ii>i;i++){var dontEnum=dontEnums[i];owns(object,dontEnum)&&keys.push(dontEnum)}return keys}}Date.now||(Date.now=function(){return(new Date).getTime()});var ws=\\\"\\t\\\\n\\u000b\\\\f\\\\r    \\\\u2028\\\\u2029\\\";if(!String.prototype.trim||ws.trim()){ws=\\\"[\\\"+ws+\\\"]\\\";var trimBeginRegexp=RegExp(\\\"^\\\"+ws+ws+\\\"*\\\"),trimEndRegexp=RegExp(ws+ws+\\\"*$\\\");String.prototype.trim=function(){return(this+\\\"\\\").replace(trimBeginRegexp,\\\"\\\").replace(trimEndRegexp,\\\"\\\")}}var toObject=function(o){if(null==o)throw new TypeError(\\\"can't convert \\\"+o+\\\" to object\\\");return Object(o)}});\";\r\n\r\n/***/ },\r\n/* 69 */\r\n/***/ function(module, exports) {\r\n\r\n\tace.define(\"ace/ext/searchbox\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/keyboard/hash_handler\",\"ace/lib/keys\"], function(acequire, exports, module) {\r\n\t\"use strict\";\r\n\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tvar lang = acequire(\"../lib/lang\");\r\n\tvar event = acequire(\"../lib/event\");\r\n\tvar searchboxCss = \"\\\r\n\t.ace_search {\\\r\n\tbackground-color: #ddd;\\\r\n\tborder: 1px solid #cbcbcb;\\\r\n\tborder-top: 0 none;\\\r\n\tmax-width: 325px;\\\r\n\toverflow: hidden;\\\r\n\tmargin: 0;\\\r\n\tpadding: 4px;\\\r\n\tpadding-right: 6px;\\\r\n\tpadding-bottom: 0;\\\r\n\tposition: absolute;\\\r\n\ttop: 0px;\\\r\n\tz-index: 99;\\\r\n\twhite-space: normal;\\\r\n\t}\\\r\n\t.ace_search.left {\\\r\n\tborder-left: 0 none;\\\r\n\tborder-radius: 0px 0px 5px 0px;\\\r\n\tleft: 0;\\\r\n\t}\\\r\n\t.ace_search.right {\\\r\n\tborder-radius: 0px 0px 0px 5px;\\\r\n\tborder-right: 0 none;\\\r\n\tright: 0;\\\r\n\t}\\\r\n\t.ace_search_form, .ace_replace_form {\\\r\n\tborder-radius: 3px;\\\r\n\tborder: 1px solid #cbcbcb;\\\r\n\tfloat: left;\\\r\n\tmargin-bottom: 4px;\\\r\n\toverflow: hidden;\\\r\n\t}\\\r\n\t.ace_search_form.ace_nomatch {\\\r\n\toutline: 1px solid red;\\\r\n\t}\\\r\n\t.ace_search_field {\\\r\n\tbackground-color: white;\\\r\n\tborder-right: 1px solid #cbcbcb;\\\r\n\tborder: 0 none;\\\r\n\t-webkit-box-sizing: border-box;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tfloat: left;\\\r\n\theight: 22px;\\\r\n\toutline: 0;\\\r\n\tpadding: 0 7px;\\\r\n\twidth: 214px;\\\r\n\tmargin: 0;\\\r\n\t}\\\r\n\t.ace_searchbtn,\\\r\n\t.ace_replacebtn {\\\r\n\tbackground: #fff;\\\r\n\tborder: 0 none;\\\r\n\tborder-left: 1px solid #dcdcdc;\\\r\n\tcursor: pointer;\\\r\n\tfloat: left;\\\r\n\theight: 22px;\\\r\n\tmargin: 0;\\\r\n\tposition: relative;\\\r\n\t}\\\r\n\t.ace_searchbtn:last-child,\\\r\n\t.ace_replacebtn:last-child {\\\r\n\tborder-top-right-radius: 3px;\\\r\n\tborder-bottom-right-radius: 3px;\\\r\n\t}\\\r\n\t.ace_searchbtn:disabled {\\\r\n\tbackground: none;\\\r\n\tcursor: default;\\\r\n\t}\\\r\n\t.ace_searchbtn {\\\r\n\tbackground-position: 50% 50%;\\\r\n\tbackground-repeat: no-repeat;\\\r\n\twidth: 27px;\\\r\n\t}\\\r\n\t.ace_searchbtn.prev {\\\r\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpiSU1NZUAC/6E0I0yACYskCpsJiySKIiY0SUZk40FyTEgCjGgKwTRAgAEAQJUIPCE+qfkAAAAASUVORK5CYII=); \\\r\n\t}\\\r\n\t.ace_searchbtn.next {\\\r\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpiTE1NZQCC/0DMyIAKwGJMUAYDEo3M/s+EpvM/mkKwCQxYjIeLMaELoLMBAgwAU7UJObTKsvAAAAAASUVORK5CYII=); \\\r\n\t}\\\r\n\t.ace_searchbtn_close {\\\r\n\tbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;\\\r\n\tborder-radius: 50%;\\\r\n\tborder: 0 none;\\\r\n\tcolor: #656565;\\\r\n\tcursor: pointer;\\\r\n\tfloat: right;\\\r\n\tfont: 16px/16px Arial;\\\r\n\theight: 14px;\\\r\n\tmargin: 5px 1px 9px 5px;\\\r\n\tpadding: 0;\\\r\n\ttext-align: center;\\\r\n\twidth: 14px;\\\r\n\t}\\\r\n\t.ace_searchbtn_close:hover {\\\r\n\tbackground-color: #656565;\\\r\n\tbackground-position: 50% 100%;\\\r\n\tcolor: white;\\\r\n\t}\\\r\n\t.ace_replacebtn.prev {\\\r\n\twidth: 54px\\\r\n\t}\\\r\n\t.ace_replacebtn.next {\\\r\n\twidth: 27px\\\r\n\t}\\\r\n\t.ace_button {\\\r\n\tmargin-left: 2px;\\\r\n\tcursor: pointer;\\\r\n\t-webkit-user-select: none;\\\r\n\t-moz-user-select: none;\\\r\n\t-o-user-select: none;\\\r\n\t-ms-user-select: none;\\\r\n\tuser-select: none;\\\r\n\toverflow: hidden;\\\r\n\topacity: 0.7;\\\r\n\tborder: 1px solid rgba(100,100,100,0.23);\\\r\n\tpadding: 1px;\\\r\n\t-moz-box-sizing: border-box;\\\r\n\tbox-sizing: border-box;\\\r\n\tcolor: black;\\\r\n\t}\\\r\n\t.ace_button:hover {\\\r\n\tbackground-color: #eee;\\\r\n\topacity:1;\\\r\n\t}\\\r\n\t.ace_button:active {\\\r\n\tbackground-color: #ddd;\\\r\n\t}\\\r\n\t.ace_button.checked {\\\r\n\tborder-color: #3399ff;\\\r\n\topacity:1;\\\r\n\t}\\\r\n\t.ace_search_options{\\\r\n\tmargin-bottom: 3px;\\\r\n\ttext-align: right;\\\r\n\t-webkit-user-select: none;\\\r\n\t-moz-user-select: none;\\\r\n\t-o-user-select: none;\\\r\n\t-ms-user-select: none;\\\r\n\tuser-select: none;\\\r\n\t}\";\r\n\tvar HashHandler = acequire(\"../keyboard/hash_handler\").HashHandler;\r\n\tvar keyUtil = acequire(\"../lib/keys\");\r\n\r\n\tdom.importCssString(searchboxCss, \"ace_searchbox\");\r\n\r\n\tvar html = '<div class=\"ace_search right\">\\\r\n\t <button type=\"button\" action=\"hide\" class=\"ace_searchbtn_close\"></button>\\\r\n\t <div class=\"ace_search_form\">\\\r\n\t <input class=\"ace_search_field\" placeholder=\"Search for\" spellcheck=\"false\"></input>\\\r\n\t <button type=\"button\" action=\"findNext\" class=\"ace_searchbtn next\"></button>\\\r\n\t <button type=\"button\" action=\"findPrev\" class=\"ace_searchbtn prev\"></button>\\\r\n\t <button type=\"button\" action=\"findAll\" class=\"ace_searchbtn\" title=\"Alt-Enter\">All</button>\\\r\n\t </div>\\\r\n\t <div class=\"ace_replace_form\">\\\r\n\t <input class=\"ace_search_field\" placeholder=\"Replace with\" spellcheck=\"false\"></input>\\\r\n\t <button type=\"button\" action=\"replaceAndFindNext\" class=\"ace_replacebtn\">Replace</button>\\\r\n\t <button type=\"button\" action=\"replaceAll\" class=\"ace_replacebtn\">All</button>\\\r\n\t </div>\\\r\n\t <div class=\"ace_search_options\">\\\r\n\t <span action=\"toggleRegexpMode\" class=\"ace_button\" title=\"RegExp Search\">.*</span>\\\r\n\t <span action=\"toggleCaseSensitive\" class=\"ace_button\" title=\"CaseSensitive Search\">Aa</span>\\\r\n\t <span action=\"toggleWholeWords\" class=\"ace_button\" title=\"Whole Word Search\">\\\\b</span>\\\r\n\t </div>\\\r\n\t</div>'.replace(/>\\s+/g, \">\");\r\n\r\n\tvar SearchBox = function(editor, range, showReplaceForm) {\r\n\t var div = dom.createElement(\"div\");\r\n\t div.innerHTML = html;\r\n\t this.element = div.firstChild;\r\n\r\n\t this.$init();\r\n\t this.setEditor(editor);\r\n\t};\r\n\r\n\t(function() {\r\n\t this.setEditor = function(editor) {\r\n\t editor.searchBox = this;\r\n\t editor.container.appendChild(this.element);\r\n\t this.editor = editor;\r\n\t };\r\n\r\n\t this.$initElements = function(sb) {\r\n\t this.searchBox = sb.querySelector(\".ace_search_form\");\r\n\t this.replaceBox = sb.querySelector(\".ace_replace_form\");\r\n\t this.searchOptions = sb.querySelector(\".ace_search_options\");\r\n\t this.regExpOption = sb.querySelector(\"[action=toggleRegexpMode]\");\r\n\t this.caseSensitiveOption = sb.querySelector(\"[action=toggleCaseSensitive]\");\r\n\t this.wholeWordOption = sb.querySelector(\"[action=toggleWholeWords]\");\r\n\t this.searchInput = this.searchBox.querySelector(\".ace_search_field\");\r\n\t this.replaceInput = this.replaceBox.querySelector(\".ace_search_field\");\r\n\t };\r\n\t \r\n\t this.$init = function() {\r\n\t var sb = this.element;\r\n\t \r\n\t this.$initElements(sb);\r\n\t \r\n\t var _this = this;\r\n\t event.addListener(sb, \"mousedown\", function(e) {\r\n\t setTimeout(function(){\r\n\t _this.activeInput.focus();\r\n\t }, 0);\r\n\t event.stopPropagation(e);\r\n\t });\r\n\t event.addListener(sb, \"click\", function(e) {\r\n\t var t = e.target || e.srcElement;\r\n\t var action = t.getAttribute(\"action\");\r\n\t if (action && _this[action])\r\n\t _this[action]();\r\n\t else if (_this.$searchBarKb.commands[action])\r\n\t _this.$searchBarKb.commands[action].exec(_this);\r\n\t event.stopPropagation(e);\r\n\t });\r\n\r\n\t event.addCommandKeyListener(sb, function(e, hashId, keyCode) {\r\n\t var keyString = keyUtil.keyCodeToString(keyCode);\r\n\t var command = _this.$searchBarKb.findKeyCommand(hashId, keyString);\r\n\t if (command && command.exec) {\r\n\t command.exec(_this);\r\n\t event.stopEvent(e);\r\n\t }\r\n\t });\r\n\r\n\t this.$onChange = lang.delayedCall(function() {\r\n\t _this.find(false, false);\r\n\t });\r\n\r\n\t event.addListener(this.searchInput, \"input\", function() {\r\n\t _this.$onChange.schedule(20);\r\n\t });\r\n\t event.addListener(this.searchInput, \"focus\", function() {\r\n\t _this.activeInput = _this.searchInput;\r\n\t _this.searchInput.value && _this.highlight();\r\n\t });\r\n\t event.addListener(this.replaceInput, \"focus\", function() {\r\n\t _this.activeInput = _this.replaceInput;\r\n\t _this.searchInput.value && _this.highlight();\r\n\t });\r\n\t };\r\n\t this.$closeSearchBarKb = new HashHandler([{\r\n\t bindKey: \"Esc\",\r\n\t name: \"closeSearchBar\",\r\n\t exec: function(editor) {\r\n\t editor.searchBox.hide();\r\n\t }\r\n\t }]);\r\n\t this.$searchBarKb = new HashHandler();\r\n\t this.$searchBarKb.bindKeys({\r\n\t \"Ctrl-f|Command-f\": function(sb) {\r\n\t var isReplace = sb.isReplace = !sb.isReplace;\r\n\t sb.replaceBox.style.display = isReplace ? \"\" : \"none\";\r\n\t sb.searchInput.focus();\r\n\t },\r\n\t \"Ctrl-H|Command-Option-F\": function(sb) {\r\n\t sb.replaceBox.style.display = \"\";\r\n\t sb.replaceInput.focus();\r\n\t },\r\n\t \"Ctrl-G|Command-G\": function(sb) {\r\n\t sb.findNext();\r\n\t },\r\n\t \"Ctrl-Shift-G|Command-Shift-G\": function(sb) {\r\n\t sb.findPrev();\r\n\t },\r\n\t \"esc\": function(sb) {\r\n\t setTimeout(function() { sb.hide();});\r\n\t },\r\n\t \"Return\": function(sb) {\r\n\t if (sb.activeInput == sb.replaceInput)\r\n\t sb.replace();\r\n\t sb.findNext();\r\n\t },\r\n\t \"Shift-Return\": function(sb) {\r\n\t if (sb.activeInput == sb.replaceInput)\r\n\t sb.replace();\r\n\t sb.findPrev();\r\n\t },\r\n\t \"Alt-Return\": function(sb) {\r\n\t if (sb.activeInput == sb.replaceInput)\r\n\t sb.replaceAll();\r\n\t sb.findAll();\r\n\t },\r\n\t \"Tab\": function(sb) {\r\n\t (sb.activeInput == sb.replaceInput ? sb.searchInput : sb.replaceInput).focus();\r\n\t }\r\n\t });\r\n\r\n\t this.$searchBarKb.addCommands([{\r\n\t name: \"toggleRegexpMode\",\r\n\t bindKey: {win: \"Alt-R|Alt-/\", mac: \"Ctrl-Alt-R|Ctrl-Alt-/\"},\r\n\t exec: function(sb) {\r\n\t sb.regExpOption.checked = !sb.regExpOption.checked;\r\n\t sb.$syncOptions();\r\n\t }\r\n\t }, {\r\n\t name: \"toggleCaseSensitive\",\r\n\t bindKey: {win: \"Alt-C|Alt-I\", mac: \"Ctrl-Alt-R|Ctrl-Alt-I\"},\r\n\t exec: function(sb) {\r\n\t sb.caseSensitiveOption.checked = !sb.caseSensitiveOption.checked;\r\n\t sb.$syncOptions();\r\n\t }\r\n\t }, {\r\n\t name: \"toggleWholeWords\",\r\n\t bindKey: {win: \"Alt-B|Alt-W\", mac: \"Ctrl-Alt-B|Ctrl-Alt-W\"},\r\n\t exec: function(sb) {\r\n\t sb.wholeWordOption.checked = !sb.wholeWordOption.checked;\r\n\t sb.$syncOptions();\r\n\t }\r\n\t }]);\r\n\r\n\t this.$syncOptions = function() {\r\n\t dom.setCssClass(this.regExpOption, \"checked\", this.regExpOption.checked);\r\n\t dom.setCssClass(this.wholeWordOption, \"checked\", this.wholeWordOption.checked);\r\n\t dom.setCssClass(this.caseSensitiveOption, \"checked\", this.caseSensitiveOption.checked);\r\n\t this.find(false, false);\r\n\t };\r\n\r\n\t this.highlight = function(re) {\r\n\t this.editor.session.highlight(re || this.editor.$search.$options.re);\r\n\t this.editor.renderer.updateBackMarkers()\r\n\t };\r\n\t this.find = function(skipCurrent, backwards, preventScroll) {\r\n\t var range = this.editor.find(this.searchInput.value, {\r\n\t skipCurrent: skipCurrent,\r\n\t backwards: backwards,\r\n\t wrap: true,\r\n\t regExp: this.regExpOption.checked,\r\n\t caseSensitive: this.caseSensitiveOption.checked,\r\n\t wholeWord: this.wholeWordOption.checked,\r\n\t preventScroll: preventScroll\r\n\t });\r\n\t var noMatch = !range && this.searchInput.value;\r\n\t dom.setCssClass(this.searchBox, \"ace_nomatch\", noMatch);\r\n\t this.editor._emit(\"findSearchBox\", { match: !noMatch });\r\n\t this.highlight();\r\n\t };\r\n\t this.findNext = function() {\r\n\t this.find(true, false);\r\n\t };\r\n\t this.findPrev = function() {\r\n\t this.find(true, true);\r\n\t };\r\n\t this.findAll = function(){\r\n\t var range = this.editor.findAll(this.searchInput.value, { \r\n\t regExp: this.regExpOption.checked,\r\n\t caseSensitive: this.caseSensitiveOption.checked,\r\n\t wholeWord: this.wholeWordOption.checked\r\n\t });\r\n\t var noMatch = !range && this.searchInput.value;\r\n\t dom.setCssClass(this.searchBox, \"ace_nomatch\", noMatch);\r\n\t this.editor._emit(\"findSearchBox\", { match: !noMatch });\r\n\t this.highlight();\r\n\t this.hide();\r\n\t };\r\n\t this.replace = function() {\r\n\t if (!this.editor.getReadOnly())\r\n\t this.editor.replace(this.replaceInput.value);\r\n\t }; \r\n\t this.replaceAndFindNext = function() {\r\n\t if (!this.editor.getReadOnly()) {\r\n\t this.editor.replace(this.replaceInput.value);\r\n\t this.findNext()\r\n\t }\r\n\t };\r\n\t this.replaceAll = function() {\r\n\t if (!this.editor.getReadOnly())\r\n\t this.editor.replaceAll(this.replaceInput.value);\r\n\t };\r\n\r\n\t this.hide = function() {\r\n\t this.element.style.display = \"none\";\r\n\t this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb);\r\n\t this.editor.focus();\r\n\t };\r\n\t this.show = function(value, isReplace) {\r\n\t this.element.style.display = \"\";\r\n\t this.replaceBox.style.display = isReplace ? \"\" : \"none\";\r\n\r\n\t this.isReplace = isReplace;\r\n\r\n\t if (value)\r\n\t this.searchInput.value = value;\r\n\t \r\n\t this.find(false, false, true);\r\n\t \r\n\t this.searchInput.focus();\r\n\t this.searchInput.select();\r\n\r\n\t this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb);\r\n\t };\r\n\r\n\t this.isFocused = function() {\r\n\t var el = document.activeElement;\r\n\t return el == this.searchInput || el == this.replaceInput;\r\n\t }\r\n\t}).call(SearchBox.prototype);\r\n\r\n\texports.SearchBox = SearchBox;\r\n\r\n\texports.Search = function(editor, isReplace) {\r\n\t var sb = editor.searchBox || new SearchBox(editor);\r\n\t sb.show(editor.session.getTextRange(), isReplace);\r\n\t};\r\n\r\n\t});\r\n\t (function() {\r\n\t ace.acequire([\"ace/ext/searchbox\"], function() {});\r\n\t })();\r\n\t \r\n\r\n/***/ },\r\n/* 70 */\r\n/***/ function(module, exports) {\r\n\r\n\t/* ***** BEGIN LICENSE BLOCK *****\r\n\t * Distributed under the BSD license:\r\n\t *\r\n\t * Copyright (c) 2010, Ajax.org B.V.\r\n\t * All rights reserved.\r\n\t * \r\n\t * Redistribution and use in source and binary forms, with or without\r\n\t * modification, are permitted provided that the following conditions are met:\r\n\t * * Redistributions of source code must retain the above copyright\r\n\t * notice, this list of conditions and the following disclaimer.\r\n\t * * Redistributions in binary form must reproduce the above copyright\r\n\t * notice, this list of conditions and the following disclaimer in the\r\n\t * documentation and/or other materials provided with the distribution.\r\n\t * * Neither the name of Ajax.org B.V. nor the\r\n\t * names of its contributors may be used to endorse or promote products\r\n\t * derived from this software without specific prior written permission.\r\n\t * \r\n\t * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n\t * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n\t * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n\t * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\r\n\t * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n\t * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n\t * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\r\n\t * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n\t * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n\t * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n\t *\r\n\t * ***** END LICENSE BLOCK ***** */\r\n\r\n\tace.define('ace/theme/jsoneditor', ['require', 'exports', 'module', 'ace/lib/dom'], function(acequire, exports, module) {\r\n\r\n\texports.isDark = false;\r\n\texports.cssClass = \"ace-jsoneditor\";\r\n\texports.cssText = \".ace-jsoneditor .ace_gutter {\\\r\n\tbackground: #ebebeb;\\\r\n\tcolor: #333\\\r\n\t}\\\r\n\t\\\r\n\t.ace-jsoneditor.ace_editor {\\\r\n\tfont-family: droid sans mono, consolas, monospace, courier new, courier, sans-serif;\\\r\n\tline-height: 1.3;\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_print-margin {\\\r\n\twidth: 1px;\\\r\n\tbackground: #e8e8e8\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_scroller {\\\r\n\tbackground-color: #FFFFFF\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_text-layer {\\\r\n\tcolor: gray\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_variable {\\\r\n\tcolor: #1a1a1a\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_cursor {\\\r\n\tborder-left: 2px solid #000000\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_overwrite-cursors .ace_cursor {\\\r\n\tborder-left: 0px;\\\r\n\tborder-bottom: 1px solid #000000\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_marker-layer .ace_selection {\\\r\n\tbackground: lightgray\\\r\n\t}\\\r\n\t.ace-jsoneditor.ace_multiselect .ace_selection.ace_start {\\\r\n\tbox-shadow: 0 0 3px 0px #FFFFFF;\\\r\n\tborder-radius: 2px\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_marker-layer .ace_step {\\\r\n\tbackground: rgb(255, 255, 0)\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_marker-layer .ace_bracket {\\\r\n\tmargin: -1px 0 0 -1px;\\\r\n\tborder: 1px solid #BFBFBF\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_marker-layer .ace_active-line {\\\r\n\tbackground: #FFFBD1\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_gutter-active-line {\\\r\n\tbackground-color : #dcdcdc\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_marker-layer .ace_selected-word {\\\r\n\tborder: 1px solid lightgray\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_invisible {\\\r\n\tcolor: #BFBFBF\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_keyword,\\\r\n\t.ace-jsoneditor .ace_meta,\\\r\n\t.ace-jsoneditor .ace_support.ace_constant.ace_property-value {\\\r\n\tcolor: #AF956F\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_keyword.ace_operator {\\\r\n\tcolor: #484848\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_keyword.ace_other.ace_unit {\\\r\n\tcolor: #96DC5F\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_constant.ace_language {\\\r\n\tcolor: darkorange\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_constant.ace_numeric {\\\r\n\tcolor: red\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_constant.ace_character.ace_entity {\\\r\n\tcolor: #BF78CC\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_invalid {\\\r\n\tcolor: #FFFFFF;\\\r\n\tbackground-color: #FF002A;\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_fold {\\\r\n\tbackground-color: #AF956F;\\\r\n\tborder-color: #000000\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_storage,\\\r\n\t.ace-jsoneditor .ace_support.ace_class,\\\r\n\t.ace-jsoneditor .ace_support.ace_function,\\\r\n\t.ace-jsoneditor .ace_support.ace_other,\\\r\n\t.ace-jsoneditor .ace_support.ace_type {\\\r\n\tcolor: #C52727\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_string {\\\r\n\tcolor: green\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_comment {\\\r\n\tcolor: #BCC8BA\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_entity.ace_name.ace_tag,\\\r\n\t.ace-jsoneditor .ace_entity.ace_other.ace_attribute-name {\\\r\n\tcolor: #606060\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_markup.ace_underline {\\\r\n\ttext-decoration: underline\\\r\n\t}\\\r\n\t.ace-jsoneditor .ace_indent-guide {\\\r\n\tbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y\\\r\n\t}\";\r\n\r\n\tvar dom = acequire(\"../lib/dom\");\r\n\tdom.importCssString(exports.cssText, exports.cssClass);\r\n\t});\r\n\r\n\r\n/***/ }\r\n/******/ ])\r\n});\r\n;"],"mappings":"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,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC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CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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AAG,CAAEA,GAAG,CAAEC,MAAM,CAAEA,MAAM,CAAC,CACpC,GAAI,CAAAp+B,KAAK,CAAGm6B,OAAO,CAACy0B,mBAAmB,CAACE,OAAO,CAAE7uD,GAAG,CAAC,CAErD,GAAI,CAACD,KAAK,CACN,OAEJA,KAAK,CAACo+B,MAAM,EAAE,CACdn+B,GAAG,CAACm+B,MAAM,EAAE,CAEZ,MAAQ,CAAA8R,KAAK,CAACmB,UAAU,CAACrxC,KAAK,CAAEC,GAAG,CAAC,CACxC,CAAC,CACL,CAAC,EAAE7/B,IAAI,CAAC6sH,QAAQ,CAAC3qH,SAAS,CAAC,CAE3B,CAAC,CAAC,CAEFy+C,GAAG,CAACnhD,MAAM,CAAC,oBAAoB,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAE,SAASgkD,QAAQ,CAAElkD,OAAO,CAAEC,MAAM,CAAE,CAClH,YAAY,CAEZD,OAAO,CAACwjH,MAAM,CAAG,KAAK,CACtBxjH,OAAO,CAACsjH,QAAQ,CAAG,QAAQ,CAC3BtjH,OAAO,CAACgsD,OAAO,CAAG;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E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AAO,CAACwjE,GAAG,CAAG,+k1CAA+k1C,CAErm1C,KAAM,CAAC,CACP,SACA,KAAM,SAASvjE,MAAM,CAAED,OAAO,CAAE,CAE/BqhD,GAAG,CAACnhD,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC,eAAe,CAAC,2BAA2B,CAAC,cAAc,CAAC,CAAE,SAASgkD,QAAQ,CAAElkD,OAAO,CAAEC,MAAM,CAAE,CAC3L,YAAY,CAEZ,GAAI,CAAAu3B,GAAG,CAAG0sB,QAAQ,CAAC,YAAY,CAAC,CAChC,GAAI,CAAA4S,IAAI,CAAG5S,QAAQ,CAAC,aAAa,CAAC,CAClC,GAAI,CAAA3mB,KAAK,CAAG2mB,QAAQ,CAAC,cAAc,CAAC,CACpC,GAAI,CAAA8vE,YAAY,CAAG;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,CACF,GAAI,CAAAx2B,WAAW,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,MAAO,CAAAvM,EAAE,EAAI,IAAI,CAACupE,WAAW,EAAIvpE,EAAE,EAAI,IAAI,CAACwpE,YAAY,CAC5D,CAAC,CACL,CAAC,EAAEl0H,IAAI,CAAC02B,SAAS,CAACx0B,SAAS,CAAC,CAE5B5C,OAAO,CAACo3B,SAAS,CAAGA,SAAS,CAE7Bp3B,OAAO,CAACm8F,MAAM,CAAG,SAASz/D,MAAM,CAAEw4F,SAAS,CAAE,CACzC,GAAI,CAAAb,EAAE,CAAG33F,MAAM,CAACnE,SAAS,EAAI,GAAI,CAAAnB,SAAS,CAACsF,MAAM,CAAC,CAClD23F,EAAE,CAACxxF,IAAI,CAACnG,MAAM,CAAC+9B,OAAO,CAACgK,YAAY,CAAC,CAAC,CAAEywD,SAAS,CAAC,CACrD,CAAC,CAED,CAAC,CAAC,CACc,CAAC,UAAW,CACR7zE,GAAG,CAAC6C,QAAQ,CAAC,CAAC,mBAAmB,CAAC,CAAE,UAAW,CAAC,CAAC,CAAC,CACtD,CAAC,EAAE,CAAC,CAGrB,KAAM,CAAC,CACP,SACA,KAAM,SAASjkD,MAAM,CAAED,OAAO,CAAE,CAE/B;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAECqhD,GAAG,CAACnhD,MAAM,CAAC,sBAAsB,CAAE,CAAC,SAAS,CAAE,SAAS,CAAE,QAAQ,CAAE,aAAa,CAAC,CAAE,SAASgkD,QAAQ,CAAElkD,OAAO,CAAEC,MAAM,CAAE,CAExHD,OAAO,CAACwjH,MAAM,CAAG,KAAK,CACtBxjH,OAAO,CAACsjH,QAAQ,CAAG,gBAAgB,CACnCtjH,OAAO,CAACgsD,OAAO,CAAG;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,CAEF,GAAI,CAAAx0B,GAAG,CAAG0sB,QAAQ,CAAC,YAAY,CAAC,CAChC1sB,GAAG,CAACu0B,eAAe,CAAC/rD,OAAO,CAACgsD,OAAO,CAAEhsD,OAAO,CAACsjH,QAAQ,CAAC,CACtD,CAAC,CAAC,CAGH,KAAM,CACN,SAAU,CAAC,CACX,CAAC,CAAC,CACF","ignoreList":[]},"metadata":{},"sourceType":"script","externalDependencies":[]}