diff --git a/.eslintrc b/.eslintrc index e5503858..7049de5c 100644 --- a/.eslintrc +++ b/.eslintrc @@ -87,7 +87,7 @@ "accessor-pairs": 2, // require corresponding getters for any setters "block-scoped-var": 2, // treat var statements as if they were block scoped (off by default) - "complexity": [2, 8], // specify the maximum cyclomatic complexity allowed in a program (off by default) + "complexity": [1, 8], // specify the maximum cyclomatic complexity allowed in a program (off by default) "consistent-return": 0, // require return statements to either always or never specify values "curly": 2, // specify curly brace conventions for all control statements "default-case": 0, // require default case in switch statements (off by default) diff --git a/.jscsrc b/.jscsrc index 66769735..6240b3b8 100644 --- a/.jscsrc +++ b/.jscsrc @@ -70,19 +70,4 @@ "disallowNewlineBeforeBlockStatements": true, "disallowSpaceBeforeComma": true, "disallowSpaceBeforeSemicolon": true, - - "jsDoc": { - "checkAnnotations": true, - "checkParamNames": true, - "requireParamTypes": true, - "checkRedundantParams": true, - "checkReturnTypes": true, - "checkRedundantReturns": true, - "requireReturnTypes": true, - "checkTypes": true, - "checkRedundantAccess": "enforceLeadingUnderscore", - "leadingUnderscoreAccess": true, - "requireHyphenBeforeDescription": true, - "requireNewlineAfterDescription": true - } } diff --git a/dist/ref-parser.js b/dist/ref-parser.js index 202d4bad..0baf2f40 100644 --- a/dist/ref-parser.js +++ b/dist/ref-parser.js @@ -23,90 +23,175 @@ module.exports = bundle; * @param {$RefParserOptions} options */ function bundle(parser, options) { - util.debug('Bundling $ref pointers in %s', parser._basePath); + util.debug('Bundling $ref pointers in %s', parser.$refs._basePath); - remap(parser.$refs, options); - dereference(parser._basePath, parser.$refs, options); -} - -/** - * Re-maps all $ref pointers in the schema, so that they are relative to the root of the schema. - * - * @param {$Refs} $refs - * @param {$RefParserOptions} options - */ -function remap($refs, options) { - var remapped = []; - - // Crawl the schema and determine the re-mapped values for all $ref pointers. - // NOTE: We don't actually APPLY the re-mappings them yet, since that can affect other re-mappings - Object.keys($refs._$refs).forEach(function(key) { - var $ref = $refs._$refs[key]; - crawl($ref.value, $ref.path + '#', $refs, remapped, options); - }); + // Build an inventory of all $ref pointers in the JSON Schema + var inventory = []; + crawl(parser.schema, parser.$refs._basePath + '#', '#', inventory, parser.$refs, options); - // Now APPLY all of the re-mappings - for (var i = 0; i < remapped.length; i++) { - var mapping = remapped[i]; - mapping.old$Ref.$ref = mapping.new$Ref.$ref; - } + // Remap all $ref pointers + remap(inventory); } /** - * Recursively crawls the given value, and re-maps any JSON references. + * Recursively crawls the given value, and inventories all JSON references. * * @param {*} obj - The value to crawl. If it's not an object or array, it will be ignored. - * @param {string} path - The path to use for resolving relative JSON references - * @param {$Refs} $refs - The resolved JSON references - * @param {object[]} remapped - An array of the re-mapped JSON references + * @param {string} path - The full path of `obj`, possibly with a JSON Pointer in the hash + * @param {string} pathFromRoot - The path of `obj` from the schema root + * @param {object[]} inventory - An array of already-inventoried $ref pointers + * @param {$Refs} $refs * @param {$RefParserOptions} options */ -function crawl(obj, path, $refs, remapped, options) { +function crawl(obj, path, pathFromRoot, inventory, $refs, options) { if (obj && typeof obj === 'object') { - Object.keys(obj).forEach(function(key) { + var keys = Object.keys(obj); + + // Most people will expect references to be bundled into the the "definitions" property, + // so we always crawl that property first, if it exists. + var defs = keys.indexOf('definitions'); + if (defs > 0) { + keys.splice(0, 0, keys.splice(defs, 1)[0]); + } + + keys.forEach(function(key) { var keyPath = Pointer.join(path, key); + var keyPathFromRoot = Pointer.join(pathFromRoot, key); var value = obj[key]; if ($Ref.is$Ref(value)) { - // We found a $ref, so resolve it - util.debug('Re-mapping $ref pointer "%s" at %s', value.$ref, keyPath); - var $refPath = url.resolve(path, value.$ref); - var pointer = $refs._resolve($refPath, options); - - // Re-map the value - var new$RefPath = pointer.$ref.pathFromRoot + util.path.getHash(pointer.path).substr(1); - util.debug(' new value: %s', new$RefPath); - remapped.push({ - old$Ref: value, - new$Ref: {$ref: new$RefPath} // Note: DON'T name this property `new` (https://github.com/BigstickCarpet/json-schema-ref-parser/issues/3) - }); + // Skip this $ref if we've already inventoried it + if (!inventory.some(function(i) { return i.parent === obj && i.key === key; })) { + inventory$Ref(obj, key, path, keyPathFromRoot, inventory, $refs, options); + } } else { - crawl(value, keyPath, $refs, remapped, options); + crawl(value, keyPath, keyPathFromRoot, inventory, $refs, options); } }); } } /** - * Dereferences each external $ref pointer exactly ONCE. + * Inventories the given JSON Reference (i.e. records detailed information about it so we can + * optimize all $refs in the schema), and then crawls the resolved value. * - * @param {string} basePath + * @param {object} $refParent - The object that contains a JSON Reference as one of its keys + * @param {string} $refKey - The key in `$refParent` that is a JSON Reference + * @param {string} path - The full path of the JSON Reference at `$refKey`, possibly with a JSON Pointer in the hash + * @param {string} pathFromRoot - The path of the JSON Reference at `$refKey`, from the schema root + * @param {object[]} inventory - An array of already-inventoried $ref pointers * @param {$Refs} $refs * @param {$RefParserOptions} options */ -function dereference(basePath, $refs, options) { - basePath = util.path.stripHash(basePath); +function inventory$Ref($refParent, $refKey, path, pathFromRoot, inventory, $refs, options) { + var $ref = $refParent[$refKey]; + var $refPath = url.resolve(path, $ref.$ref); + var pointer = $refs._resolve($refPath, options); + var depth = Pointer.parse(pathFromRoot).length; + var file = util.path.stripHash(pointer.path); + var hash = util.path.getHash(pointer.path); + var external = file !== $refs._basePath; + var extended = Object.keys($ref).length > 1; + + inventory.push({ + $ref: $ref, // The JSON Reference (e.g. {$ref: string}) + parent: $refParent, // The object that contains this $ref pointer + key: $refKey, // The key in `parent` that is the $ref pointer + pathFromRoot: pathFromRoot, // The path to the $ref pointer, from the JSON Schema root + depth: depth, // How far from the JSON Schema root is this $ref pointer? + file: file, // The file that the $ref pointer resolves to + hash: hash, // The hash within `file` that the $ref pointer resolves to + value: pointer.value, // The resolved value of the $ref pointer + circular: pointer.circular, // Is this $ref pointer DIRECTLY circular? (i.e. it references itself) + extended: extended, // Does this $ref extend its resolved value? (i.e. it has extra properties, in addition to "$ref") + external: external // Does this $ref pointer point to a file other than the main JSON Schema file? + }); + + // Recursively crawl the resolved value + crawl(pointer.value, pointer.path, pathFromRoot, inventory, $refs, options); +} - Object.keys($refs._$refs).forEach(function(key) { - var $ref = $refs._$refs[key]; - if ($ref.pathFromRoot !== '#') { - $refs.set(basePath + $ref.pathFromRoot, $ref.value, options); +/** + * Re-maps every $ref pointer, so that they're all relative to the root of the JSON Schema. + * Each referenced value is dereferenced EXACTLY ONCE. All subsequent references to the same + * value are re-mapped to point to the first reference. + * + * @example: + * { + * first: { $ref: somefile.json#/some/part }, + * second: { $ref: somefile.json#/another/part }, + * third: { $ref: somefile.json }, + * fourth: { $ref: somefile.json#/some/part/sub/part } + * } + * + * In this example, there are four references to the same file, but since the third reference points + * to the ENTIRE file, that's the only one we need to dereference. The other three can just be + * remapped to point inside the third one. + * + * On the other hand, if the third reference DIDN'T exist, then the first and second would both need + * to be dereferenced, since they point to different parts of the file. The fourth reference does NOT + * need to be dereferenced, because it can be remapped to point inside the first one. + * + * @param {object[]} inventory + */ +function remap(inventory) { + // Group & sort all the $ref pointers, so they're in the order that we need to dereference/remap them + inventory.sort(function(a, b) { + if (a.file !== b.file) { + return a.file < b.file ? -1 : +1; // Group all the $refs that point to the same file + } + else if (a.hash !== b.hash) { + return a.hash < b.hash ? -1 : +1; // Group all the $refs that point to the same part of the file + } + else if (a.circular !== b.circular) { + return a.circular ? -1 : +1; // If the $ref points to itself, then sort it higher than other $refs that point to this $ref + } + else if (a.extended !== b.extended) { + return a.extended ? +1 : -1; // If the $ref extends the resolved value, then sort it lower than other $refs that don't extend the value + } + else if (a.depth !== b.depth) { + return a.depth - b.depth; // Sort $refs by how close they are to the JSON Schema root + } + else { + // If all else is equal, use the $ref that's in the "definitions" property + return b.pathFromRoot.lastIndexOf('/definitions') - a.pathFromRoot.lastIndexOf('/definitions'); + } + }); + + var file, hash, pathFromRoot; + inventory.forEach(function(i) { + util.debug('Re-mapping $ref pointer "%s" at %s', i.$ref.$ref, i.pathFromRoot); + + if (!i.external) { + // This $ref already resolves to the main JSON Schema file + i.$ref.$ref = i.hash; + } + else if (i.file !== file || i.hash.indexOf(hash) !== 0) { + // We've moved to a new file or new hash + file = i.file; + hash = i.hash; + pathFromRoot = i.pathFromRoot; + + // This is the first $ref to point to this value, so dereference the value. + // Any other $refs that point to the same value will point to this $ref instead + i.$ref = i.parent[i.key] = util.dereference(i.$ref, i.value); + + if (i.circular) { + // This $ref points to itself + i.$ref.$ref = i.pathFromRoot; + } + } + else { + // This $ref points to the same value as the prevous $ref + i.$ref.$ref = Pointer.join(pathFromRoot, Pointer.parse(i.hash)); } + + util.debug(' new value: %s', (i.$ref && i.$ref.$ref) ? i.$ref.$ref : '[object Object]'); }); } -},{"./pointer":7,"./ref":10,"./util":13,"url":89}],2:[function(require,module,exports){ +},{"./pointer":8,"./ref":11,"./util":14,"url":90}],2:[function(require,module,exports){ 'use strict'; var $Ref = require('./ref'), @@ -125,22 +210,23 @@ module.exports = dereference; * @param {$RefParserOptions} options */ function dereference(parser, options) { - util.debug('Dereferencing $ref pointers in %s', parser._basePath); + util.debug('Dereferencing $ref pointers in %s', parser.$refs._basePath); parser.$refs.circular = false; - crawl(parser.schema, parser._basePath, [], parser.$refs, options); + crawl(parser.schema, parser.$refs._basePath, '#', [], parser.$refs, options); } /** * Recursively crawls the given value, and dereferences any JSON references. * * @param {*} obj - The value to crawl. If it's not an object or array, it will be ignored. - * @param {string} path - The path to use for resolving relative JSON references + * @param {string} path - The full path of `obj`, possibly with a JSON Pointer in the hash + * @param {string} pathFromRoot - The path of `obj` from the schema root * @param {object[]} parents - An array of the parent objects that have already been dereferenced - * @param {$Refs} $refs - The resolved JSON references + * @param {$Refs} $refs * @param {$RefParserOptions} options * @returns {boolean} - Returns true if a circular reference was found */ -function crawl(obj, path, parents, $refs, options) { +function crawl(obj, path, pathFromRoot, parents, $refs, options) { var isCircular = false; if (obj && typeof obj === 'object') { @@ -148,36 +234,18 @@ function crawl(obj, path, parents, $refs, options) { Object.keys(obj).forEach(function(key) { var keyPath = Pointer.join(path, key); + var keyPathFromRoot = Pointer.join(pathFromRoot, key); var value = obj[key]; var circular = false; if ($Ref.isAllowed$Ref(value, options)) { - // We found a $ref, so resolve it - util.debug('Dereferencing $ref pointer "%s" at %s', value.$ref, keyPath); - var $refPath = url.resolve(path, value.$ref); - var pointer = $refs._resolve($refPath, options); - - // Check for circular references - circular = pointer.circular || parents.indexOf(pointer.value) !== -1; - circular && foundCircularReference(keyPath, $refs, options); - - // Dereference the JSON reference - var dereferencedValue = getDereferencedValue(value, pointer.value); - - // Crawl the dereferenced value (unless it's circular) - if (!circular) { - // If the `crawl` method returns true, then dereferenced value is circular - circular = crawl(dereferencedValue, pointer.path, parents, $refs, options); - } - - // Replace the JSON reference with the dereferenced value - if (!circular || options.$refs.circular === true) { - obj[key] = dereferencedValue; - } + var dereferenced = dereference$Ref(value, keyPath, keyPathFromRoot, parents, $refs, options); + circular = dereferenced.circular; + obj[key] = dereferenced.value; } else { if (parents.indexOf(value) === -1) { - circular = crawl(value, keyPath, parents, $refs, options); + circular = crawl(value, keyPath, keyPathFromRoot, parents, $refs, options); } else { circular = foundCircularReference(keyPath, $refs, options); @@ -194,33 +262,51 @@ function crawl(obj, path, parents, $refs, options) { } /** - * Returns the dereferenced value of the given JSON reference. + * Dereferences the given JSON Reference, and then crawls the resulting value. * - * @param {object} currentValue - the current value, which contains a JSON reference ("$ref" property) - * @param {*} resolvedValue - the resolved value, which can be any type - * @returns {*} - Returns the dereferenced value + * @param {{$ref: string}} $ref - The JSON Reference to resolve + * @param {string} path - The full path of `$ref`, possibly with a JSON Pointer in the hash + * @param {string} pathFromRoot - The path of `$ref` from the schema root + * @param {object[]} parents - An array of the parent objects that have already been dereferenced + * @param {$Refs} $refs + * @param {$RefParserOptions} options + * @returns {object} */ -function getDereferencedValue(currentValue, resolvedValue) { - if (resolvedValue && typeof resolvedValue === 'object' && Object.keys(currentValue).length > 1) { - // The current value has additional properties (other than "$ref"), - // so merge the resolved value rather than completely replacing the reference - var merged = {}; - Object.keys(currentValue).forEach(function(key) { - if (key !== '$ref') { - merged[key] = currentValue[key]; - } - }); - Object.keys(resolvedValue).forEach(function(key) { - if (!(key in merged)) { - merged[key] = resolvedValue[key]; - } - }); - return merged; +function dereference$Ref($ref, path, pathFromRoot, parents, $refs, options) { + util.debug('Dereferencing $ref pointer "%s" at %s', $ref.$ref, path); + + var $refPath = url.resolve(path, $ref.$ref); + var pointer = $refs._resolve($refPath, options); + + // Check for circular references + var directCircular = pointer.circular; + var circular = directCircular || parents.indexOf(pointer.value) !== -1; + circular && foundCircularReference(path, $refs, options); + + // Dereference the JSON reference + var dereferencedValue = util.dereference($ref, pointer.value); + + // Crawl the dereferenced value (unless it's circular) + if (!circular) { + // If the `crawl` method returns true, then dereferenced value is circular + circular = crawl(dereferencedValue, pointer.path, pathFromRoot, parents, $refs, options); } - else { - // Completely replace the original reference with the resolved value - return resolvedValue; + + if (circular && !directCircular && options.$refs.circular === 'ignore') { + // The user has chosen to "ignore" circular references, so don't change the value + dereferencedValue = $ref; + } + + if (directCircular) { + // The pointer is a DIRECT circular reference (i.e. it references itself). + // So replace the $ref path with the absolute path from the JSON Schema root + dereferencedValue.$ref = pathFromRoot; } + + return { + circular: circular, + value: dereferencedValue + }; } /** @@ -240,7 +326,7 @@ function foundCircularReference(keyPath, $refs, options) { return true; } -},{"./pointer":7,"./ref":10,"./util":13,"ono":66,"url":89}],3:[function(require,module,exports){ +},{"./pointer":8,"./ref":11,"./util":14,"ono":67,"url":90}],3:[function(require,module,exports){ (function (Buffer){ 'use strict'; @@ -352,7 +438,7 @@ function get(u, options) { }).call(this,require("buffer").Buffer) -},{"./promise":8,"./util":13,"buffer":18,"http":84,"https":28,"ono":66,"url":89}],4:[function(require,module,exports){ +},{"./promise":9,"./util":14,"buffer":19,"http":85,"https":29,"ono":67,"url":90}],4:[function(require,module,exports){ (function (Buffer){ 'use strict'; @@ -393,15 +479,6 @@ function $RefParser() { * @type {$Refs} */ this.$refs = new $Refs(); - - /** - * The file path or URL of the main JSON schema file. - * This will be empty if the schema was passed as an object rather than a path. - * - * @type {string} - * @protected - */ - this._basePath = ''; } /** @@ -435,8 +512,8 @@ $RefParser.prototype.parse = function(schema, options, callback) { if (args.schema && typeof args.schema === 'object') { // The schema is an object, not a path/url this.schema = args.schema; - this._basePath = ''; - var $ref = new $Ref(this.$refs, this._basePath); + this.$refs._basePath = ''; + var $ref = new $Ref(this.$refs, this.$refs._basePath); $ref.setValue(this.schema, args.options); return maybe(args.callback, Promise.resolve(this.schema)); @@ -452,14 +529,14 @@ $RefParser.prototype.parse = function(schema, options, callback) { // Resolve the absolute path of the schema args.schema = util.path.localPathToUrl(args.schema); args.schema = url.resolve(util.path.cwd(), args.schema); - this._basePath = util.path.stripHash(args.schema); + this.$refs._basePath = util.path.stripHash(args.schema); // Read the schema file/url return read(args.schema, this.$refs, args.options) - .then(function(cached$Ref) { - var value = cached$Ref.$ref.value; + .then(function(result) { + var value = result.$ref.value; if (!value || typeof value !== 'object' || value instanceof Buffer) { - throw ono.syntax('"%s" is not a valid JSON Schema', me._basePath); + throw ono.syntax('"%s" is not a valid JSON Schema', me.$refs._basePath); } else { me.schema = value; @@ -616,7 +693,7 @@ function normalizeArgs(args) { }).call(this,require("buffer").Buffer) -},{"./bundle":1,"./dereference":2,"./options":5,"./promise":8,"./read":9,"./ref":10,"./refs":11,"./resolve":12,"./util":13,"./yaml":14,"buffer":18,"call-me-maybe":21,"ono":66,"url":89}],5:[function(require,module,exports){ +},{"./bundle":1,"./dereference":2,"./options":5,"./promise":9,"./read":10,"./ref":11,"./refs":12,"./resolve":13,"./util":14,"./yaml":15,"buffer":19,"call-me-maybe":22,"ono":67,"url":90}],5:[function(require,module,exports){ /* eslint lines-around-comment: [2, {beforeBlockComment: false}] */ 'use strict'; @@ -845,7 +922,163 @@ function isEmpty(value) { }).call(this,require("buffer").Buffer) -},{"./util":13,"./yaml":14,"buffer":18,"ono":66}],7:[function(require,module,exports){ +},{"./util":14,"./yaml":15,"buffer":19,"ono":67}],7:[function(require,module,exports){ +(function (process){ +'use strict'; + +var isWindows = /^win/.test(process.platform), + forwardSlashPattern = /\//g, + protocolPattern = /^([a-z0-9.+-]+):\/\//i; + +// RegExp patterns to URL-encode special characters in local filesystem paths +var urlEncodePatterns = [ + /\?/g, '%3F', + /\#/g, '%23', + isWindows ? /\\/g : /\//, '/' +]; + +// RegExp patterns to URL-decode special characters for local filesystem paths +var urlDecodePatterns = [ + /\%23/g, '#', + /\%24/g, '$', + /\%26/g, '&', + /\%2C/g, ',', + /\%40/g, '@' +]; + +/** + * Returns the current working directory (in Node) or the current page URL (in browsers). + * + * @returns {string} + */ +exports.cwd = function cwd() { + return process.browser ? location.href : process.cwd() + '/'; +}; + +/** + * Determines whether the given path is a URL. + * + * @param {string} path + * @returns {boolean} + */ +exports.isUrl = function isUrl(path) { + var protocol = protocolPattern.exec(path); + if (protocol) { + protocol = protocol[1].toLowerCase(); + return protocol !== 'file'; + } + return false; +}; + +/** + * If the given path is a local filesystem path, it is converted to a URL. + * + * @param {string} path + * @returns {string} + */ +exports.localPathToUrl = function localPathToUrl(path) { + if (!process.browser && !exports.isUrl(path)) { + // Manually encode characters that are not encoded by `encodeURI` + for (var i = 0; i < urlEncodePatterns.length; i += 2) { + path = path.replace(urlEncodePatterns[i], urlEncodePatterns[i + 1]); + } + path = encodeURI(path); + } + return path; +}; + +/** + * Converts a URL to a local filesystem path + * + * @param {string} url + * @param {boolean} [keepFileProtocol] - If true, then "file://" will NOT be stripped + * @returns {string} + */ +exports.urlToLocalPath = function urlToLocalPath(url, keepFileProtocol) { + // Decode URL-encoded characters + url = decodeURI(url); + + // Manually decode characters that are not decoded by `decodeURI` + for (var i = 0; i < urlDecodePatterns.length; i += 2) { + url = url.replace(urlDecodePatterns[i], urlDecodePatterns[i + 1]); + } + + // Handle "file://" URLs + var isFileUrl = url.substr(0, 7).toLowerCase() === 'file://'; + if (isFileUrl) { + var protocol = 'file:///'; + + // Remove the third "/" if there is one + var path = url[7] === '/' ? url.substr(8) : url.substr(7); + + if (isWindows && path[1] === '/') { + // insert a colon (":") after the drive letter on Windows + path = path[0] + ':' + path.substr(1); + } + + if (keepFileProtocol) { + url = protocol + path; + } + else { + isFileUrl = false; + url = isWindows ? path : '/' + path; + } + } + + // Format path separators on Windows + if (isWindows && !isFileUrl) { + url = url.replace(forwardSlashPattern, '\\'); + } + + return url; +}; + +/** + * Returns the hash (URL fragment), of the given path. + * If there is no hash, then the root hash ("#") is returned. + * + * @param {string} path + * @returns {string} + */ +exports.getHash = function getHash(path) { + var hashIndex = path.indexOf('#'); + if (hashIndex >= 0) { + return path.substr(hashIndex); + } + return '#'; +}; + +/** + * Removes the hash (URL fragment), if any, from the given path. + * + * @param {string} path + * @returns {string} + */ +exports.stripHash = function stripHash(path) { + var hashIndex = path.indexOf('#'); + if (hashIndex >= 0) { + path = path.substr(0, hashIndex); + } + return path; +}; + +/** + * Returns the file extension of the given path. + * + * @param {string} path + * @returns {string} + */ +exports.extname = function extname(path) { + var lastDot = path.lastIndexOf('.'); + if (lastDot >= 0) { + return path.substr(lastDot).toLowerCase(); + } + return ''; +}; + +}).call(this,require('_process')) + +},{"_process":69}],8:[function(require,module,exports){ 'use strict'; module.exports = Pointer; @@ -888,7 +1121,7 @@ function Pointer($ref, path) { this.value = undefined; /** - * Indicates whether the pointer is references itself. + * Indicates whether the pointer references itself. * @type {boolean} */ this.circular = false; @@ -1048,6 +1281,7 @@ Pointer.join = function(base, tokens) { */ function resolveIf$Ref(pointer, options) { // Is the value a JSON reference? (and allowed?) + if ($Ref.isAllowed$Ref(pointer.value, options)) { var $refPath = url.resolve(pointer.path, pointer.value.$ref); @@ -1056,16 +1290,21 @@ function resolveIf$Ref(pointer, options) { pointer.circular = true; } else { - // Does the JSON reference have other properties (other than "$ref")? - // If so, then don't resolve it, since it represents a new type + var resolved = pointer.$ref.$refs._resolve($refPath); + if (Object.keys(pointer.value).length === 1) { // Resolve the reference - var resolved = pointer.$ref.$refs._resolve($refPath); pointer.$ref = resolved.$ref; pointer.path = resolved.path; pointer.value = resolved.value; - return true; } + else { + // This JSON reference has additional properties (other than "$ref"), + // so it "extends" the resolved value, rather than simply pointing to it. + pointer.value = util.dereference(pointer.value, resolved.value); + } + + return true; } } } @@ -1096,13 +1335,13 @@ function setValue(pointer, token, value) { return value; } -},{"./ref":10,"./util":13,"ono":66,"url":89}],8:[function(require,module,exports){ +},{"./ref":11,"./util":14,"ono":67,"url":90}],9:[function(require,module,exports){ 'use strict'; /** @type {Promise} **/ module.exports = typeof Promise === 'function' ? Promise : require('es6-promise').Promise; -},{"es6-promise":25}],9:[function(require,module,exports){ +},{"es6-promise":26}],10:[function(require,module,exports){ (function (process){ 'use strict'; @@ -1265,7 +1504,7 @@ function read$RefUrl($ref, options) { }).call(this,require('_process')) -},{"./download":3,"./parse":6,"./promise":8,"./ref":10,"./util":13,"_process":68,"fs":17,"ono":66,"url":89}],10:[function(require,module,exports){ +},{"./download":3,"./parse":6,"./promise":9,"./ref":11,"./util":14,"_process":69,"fs":18,"ono":67,"url":90}],11:[function(require,module,exports){ 'use strict'; module.exports = $Ref; @@ -1310,17 +1549,6 @@ function $Ref($refs, path) { */ this.pathType = undefined; - /** - * The path TO this JSON reference from the root of the main JSON schema file. - * If the same JSON reference occurs multiple times in the schema, then this is the pointer to the - * FIRST occurrence. - * - * This property is used by the {@link $RefParser.bundle} method to re-map other JSON references. - * - * @type {string} - */ - this.pathFromRoot = '#'; - /** * The resolved value of the JSON reference. * Can be any JSON type, not just objects. Unknown file types are represented as Buffers (byte arrays). @@ -1461,11 +1689,12 @@ $Ref.isAllowed$Ref = function(value, options) { } }; -},{"./pointer":7,"./util":13}],11:[function(require,module,exports){ +},{"./pointer":8,"./util":14}],12:[function(require,module,exports){ 'use strict'; var Options = require('./options'), util = require('./util'), + url = require('url'), ono = require('ono'); module.exports = $Refs; @@ -1481,6 +1710,15 @@ function $Refs() { */ this.circular = false; + /** + * The file path or URL of the main JSON schema file. + * This will be empty if the schema was passed as an object rather than a path. + * + * @type {string} + * @protected + */ + this._basePath = ''; + /** * A map of paths/urls to {@link $Ref} objects * @@ -1530,7 +1768,7 @@ $Refs.prototype.toJSON = $Refs.prototype.values; * Determines whether the given JSON reference has expired. * Returns true if the reference does not exist. * - * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash + * @param {string} path - The path being resolved, optionally with a JSON pointer in the hash * @returns {boolean} */ $Refs.prototype.isExpired = function(path) { @@ -1542,7 +1780,7 @@ $Refs.prototype.isExpired = function(path) { * Immediately expires the given JSON reference. * If the reference does not exist, nothing happens. * - * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash + * @param {string} path - The path being resolved, optionally with a JSON pointer in the hash */ $Refs.prototype.expire = function(path) { var $ref = this._get$Ref(path); @@ -1554,7 +1792,7 @@ $Refs.prototype.expire = function(path) { /** * Determines whether the given JSON reference exists. * - * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash + * @param {string} path - The path being resolved, optionally with a JSON pointer in the hash * @returns {boolean} */ $Refs.prototype.exists = function(path) { @@ -1570,7 +1808,7 @@ $Refs.prototype.exists = function(path) { /** * Resolves the given JSON reference and returns the resolved value. * - * @param {string} path - The full path being resolved, with a JSON pointer in the hash + * @param {string} path - The path being resolved, with a JSON pointer in the hash * @param {$RefParserOptions} options * @returns {*} - Returns the resolved value */ @@ -1582,11 +1820,12 @@ $Refs.prototype.get = function(path, options) { * Sets the value of a nested property within this {@link $Ref#value}. * If the property, or any of its parents don't exist, they will be created. * - * @param {string} path - The full path of the property to set, optionally with a JSON pointer in the hash + * @param {string} path - The path of the property to set, optionally with a JSON pointer in the hash * @param {*} value - The value to assign * @param {$RefParserOptions} options */ $Refs.prototype.set = function(path, value, options) { + path = url.resolve(this._basePath, path); var withoutHash = util.path.stripHash(path); var $ref = this._$refs[withoutHash]; @@ -1601,12 +1840,13 @@ $Refs.prototype.set = function(path, value, options) { /** * Resolves the given JSON reference. * - * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash + * @param {string} path - The path being resolved, optionally with a JSON pointer in the hash * @param {$RefParserOptions} options * @returns {Pointer} * @protected */ $Refs.prototype._resolve = function(path, options) { + path = url.resolve(this._basePath, path); var withoutHash = util.path.stripHash(path); var $ref = this._$refs[withoutHash]; @@ -1621,11 +1861,12 @@ $Refs.prototype._resolve = function(path, options) { /** * Returns the specified {@link $Ref} object, or undefined. * - * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash + * @param {string} path - The path being resolved, optionally with a JSON pointer in the hash * @returns {$Ref|undefined} * @protected */ $Refs.prototype._get$Ref = function(path) { + path = url.resolve(this._basePath, path); var withoutHash = util.path.stripHash(path); return this._$refs[withoutHash]; }; @@ -1657,7 +1898,7 @@ function getPaths($refs, types) { }); } -},{"./options":5,"./util":13,"ono":66}],12:[function(require,module,exports){ +},{"./options":5,"./util":14,"ono":67,"url":90}],13:[function(require,module,exports){ 'use strict'; var Promise = require('./promise'), @@ -1665,8 +1906,7 @@ var Promise = require('./promise'), Pointer = require('./pointer'), read = require('./read'), util = require('./util'), - url = require('url'), - ono = require('ono'); + url = require('url'); module.exports = resolve; @@ -1690,8 +1930,8 @@ function resolve(parser, options) { return Promise.resolve(); } - util.debug('Resolving $ref pointers in %s', parser._basePath); - var promises = crawl(parser.schema, parser._basePath + '#', '#', parser.$refs, options); + util.debug('Resolving $ref pointers in %s', parser.$refs._basePath); + var promises = crawl(parser.schema, parser.$refs._basePath + '#', parser.$refs, options); return Promise.all(promises); } catch (e) { @@ -1703,8 +1943,7 @@ function resolve(parser, options) { * Recursively crawls the given value, and resolves any external JSON references. * * @param {*} obj - The value to crawl. If it's not an object or array, it will be ignored. - * @param {string} path - The file path or URL used to resolve relative JSON references. - * @param {string} pathFromRoot - The path to this point from the schema root + * @param {string} path - The full path of `obj`, possibly with a JSON Pointer in the hash * @param {$Refs} $refs * @param {$RefParserOptions} options * @@ -1714,39 +1953,20 @@ function resolve(parser, options) { * If any of the JSON references point to files that contain additional JSON references, * then the corresponding promise will internally reference an array of promises. */ -function crawl(obj, path, pathFromRoot, $refs, options) { +function crawl(obj, path, $refs, options) { var promises = []; if (obj && typeof obj === 'object') { - var keys = Object.keys(obj); - - // If there's a "definitions" property, then crawl it FIRST. - // This is important when bundling, since the expected behavior - // is to bundle everything into definitions if possible. - var defs = keys.indexOf('definitions'); - if (defs > 0) { - keys.splice(0, 0, keys.splice(defs, 1)[0]); - } - - keys.forEach(function(key) { + Object.keys(obj).forEach(function(key) { var keyPath = Pointer.join(path, key); - var keyPathFromRoot = Pointer.join(pathFromRoot, key); var value = obj[key]; if ($Ref.isExternal$Ref(value)) { - // We found a $ref - util.debug('Resolving $ref pointer "%s" at %s', value.$ref, keyPath); - var $refPath = url.resolve(path, value.$ref); - - // Crawl the $referenced value - var promise = crawl$Ref($refPath, keyPathFromRoot, $refs, options) - .catch(function(err) { - throw ono.syntax(err, 'Error at %s', keyPath); - }); + var promise = resolve$Ref(value, keyPath, $refs, options); promises.push(promise); } else { - promises = promises.concat(crawl(value, keyPath, keyPathFromRoot, $refs, options)); + promises = promises.concat(crawl(value, keyPath, $refs, options)); } }); } @@ -1754,11 +1974,10 @@ function crawl(obj, path, pathFromRoot, $refs, options) { } /** - * Reads the file/URL at the given path, and then crawls the resulting value and resolves - * any external JSON references. + * Resolves the given JSON Reference, and then crawls the resulting value. * - * @param {string} path - The file path or URL to crawl - * @param {string} pathFromRoot - The path to this point from the schema root + * @param {{$ref: string}} $ref - The JSON Reference to resolve + * @param {string} path - The full path of `$ref`, possibly with a JSON Pointer in the hash * @param {$Refs} $refs * @param {$RefParserOptions} options * @@ -1766,48 +1985,27 @@ function crawl(obj, path, pathFromRoot, $refs, options) { * The promise resolves once all JSON references in the object have been resolved, * including nested references that are contained in externally-referenced files. */ -function crawl$Ref(path, pathFromRoot, $refs, options) { - return read(path, $refs, options) - .then(function(cached$Ref) { - // If a cached $ref is returned, then we DON'T need to crawl it - if (!cached$Ref.cached) { - var $ref = cached$Ref.$ref; - - // This is a new $ref, so store the path from the root of the JSON schema to this $ref - $ref.pathFromRoot = pathFromRoot; - +function resolve$Ref($ref, path, $refs, options) { + util.debug('Resolving $ref pointer "%s" at %s', $ref.$ref, path); + var resolvedPath = url.resolve(path, $ref.$ref); + + return read(resolvedPath, $refs, options) + .then(function(result) { + // If the result was already cached, then we DON'T need to crawl it + if (!result.cached) { // Crawl the new $ref - util.debug('Resolving $ref pointers in %s', $ref.path); - var promises = crawl($ref.value, $ref.path + '#', pathFromRoot, $refs, options); + util.debug('Resolving $ref pointers in %s', result.$ref.path); + var promises = crawl(result.$ref.value, result.$ref.path + '#', $refs, options); return Promise.all(promises); } }); } -},{"./pointer":7,"./promise":8,"./read":9,"./ref":10,"./util":13,"ono":66,"url":89}],13:[function(require,module,exports){ -(function (process){ +},{"./pointer":8,"./promise":9,"./read":10,"./ref":11,"./util":14,"url":90}],14:[function(require,module,exports){ 'use strict'; -var debug = require('debug'), - isWindows = /^win/.test(process.platform), - forwardSlashPattern = /\//g, - protocolPattern = /^([a-z0-9.+-]+):\/\//i; - -// RegExp patterns to URL-encode special characters in local filesystem paths -var urlEncodePatterns = [ - /\?/g, '%3F', - /\#/g, '%23', - isWindows ? /\\/g : /\//, '/' -]; - -// RegExp patterns to URL-decode special characters for local filesystem paths -var urlDecodePatterns = [ - /\%23/g, '#', - /\%24/g, '$', - /\%26/g, '&', - /\%2C/g, ',', - /\%40/g, '@' -]; +var debug = require('debug'), + path = require('./path'); /** * Writes messages to stdout. @@ -1816,144 +2014,64 @@ var urlDecodePatterns = [ */ exports.debug = debug('json-schema-ref-parser'); -/** - * Utility functions for working with paths and URLs. - */ -exports.path = {}; +exports.path = path; /** - * Returns the current working directory (in Node) or the current page URL (in browsers). + * Returns the resolved value of a JSON Reference. + * If necessary, the resolved value is merged with the JSON Reference to create a new object * - * @returns {string} - */ -exports.path.cwd = function cwd() { - return process.browser ? location.href : process.cwd() + '/'; -}; - -/** - * Determines whether the given path is a URL. + * @example: + * { + * person: { + * properties: { + * firstName: { type: string } + * lastName: { type: string } + * } + * } + * employee: { + * properties: { + * $ref: #/person/properties + * salary: { type: number } + * } + * } + * } * - * @param {string} path - * @returns {boolean} - */ -exports.path.isUrl = function isUrl(path) { - var protocol = protocolPattern.exec(path); - if (protocol) { - protocol = protocol[1].toLowerCase(); - return protocol !== 'file'; - } - return false; -}; - -/** - * If the given path is a local filesystem path, it is converted to a URL. + * When "person" and "employee" are merged, you end up with the following object: * - * @param {string} path - * @returns {string} - */ -exports.path.localPathToUrl = function localPathToUrl(path) { - if (!process.browser && !exports.path.isUrl(path)) { - // Manually encode characters that are not encoded by `encodeURI` - for (var i = 0; i < urlEncodePatterns.length; i += 2) { - path = path.replace(urlEncodePatterns[i], urlEncodePatterns[i + 1]); - } - path = encodeURI(path); - } - return path; -}; - -/** - * Converts a URL to a local filesystem path + * { + * properties: { + * firstName: { type: string } + * lastName: { type: string } + * salary: { type: number } + * } + * } * - * @param {string} url - * @param {boolean} [keepFileProtocol] - If true, then "file://" will NOT be stripped - * @returns {string} - */ -exports.path.urlToLocalPath = function urlToLocalPath(url, keepFileProtocol) { - // Decode URL-encoded characters - url = decodeURI(url); - - // Manually decode characters that are not decoded by `decodeURI` - for (var i = 0; i < urlDecodePatterns.length; i += 2) { - url = url.replace(urlDecodePatterns[i], urlDecodePatterns[i + 1]); - } - - // Handle "file://" URLs - var isFileUrl = url.substr(0, 7).toLowerCase() === 'file://'; - if (isFileUrl) { - var protocol = 'file:///'; - - // Remove the third "/" if there is one - var path = url[7] === '/' ? url.substr(8) : url.substr(7); - - if (isWindows && path[1] === '/') { - // insert a colon (":") after the drive letter on Windows - path = path[0] + ':' + path.substr(1); - } - - if (keepFileProtocol) { - url = protocol + path; - } - else { - isFileUrl = false; - url = isWindows ? path : '/' + path; - } - } - - // Format path separators on Windows - if (isWindows && !isFileUrl) { - url = url.replace(forwardSlashPattern, '\\'); - } - - return url; -}; - - -/** - * Returns the hash (URL fragment), if any, of the given path. - * - * @param {string} path - * @returns {string} - */ -exports.path.getHash = function getHash(path) { - var hashIndex = path.indexOf('#'); - if (hashIndex >= 0) { - return path.substr(hashIndex); - } - return ''; -}; - -/** - * Removes the hash (URL fragment), if any, from the given path. - * - * @param {string} path - * @returns {string} + * @param {object} $ref - The JSON reference object (the one with the "$ref" property) + * @param {*} resolvedValue - The resolved value, which can be any type + * @returns {*} - Returns the dereferenced value */ -exports.path.stripHash = function stripHash(path) { - var hashIndex = path.indexOf('#'); - if (hashIndex >= 0) { - path = path.substr(0, hashIndex); +exports.dereference = function($ref, resolvedValue) { + if (resolvedValue && typeof resolvedValue === 'object' && Object.keys($ref).length > 1) { + var merged = {}; + Object.keys($ref).forEach(function(key) { + if (key !== '$ref') { + merged[key] = $ref[key]; + } + }); + Object.keys(resolvedValue).forEach(function(key) { + if (!(key in merged)) { + merged[key] = resolvedValue[key]; + } + }); + return merged; } - return path; -}; - -/** - * Returns the file extension of the given path. - * - * @param {string} path - * @returns {string} - */ -exports.path.extname = function extname(path) { - var lastDot = path.lastIndexOf('.'); - if (lastDot >= 0) { - return path.substr(lastDot).toLowerCase(); + else { + // Completely replace the original reference with the resolved value + return resolvedValue; } - return ''; }; -}).call(this,require('_process')) - -},{"_process":68,"debug":23}],14:[function(require,module,exports){ +},{"./path":7,"debug":24}],15:[function(require,module,exports){ /* eslint lines-around-comment: [2, {beforeBlockComment: false}] */ 'use strict'; @@ -2011,7 +2129,7 @@ module.exports = { } }; -},{"js-yaml":35,"ono":66}],15:[function(require,module,exports){ +},{"js-yaml":36,"ono":67}],16:[function(require,module,exports){ var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; ;(function (exports) { @@ -2137,11 +2255,11 @@ var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; exports.fromByteArray = uint8ToBase64 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports)) -},{}],16:[function(require,module,exports){ - },{}],17:[function(require,module,exports){ -arguments[4][16][0].apply(exports,arguments) -},{"dup":16}],18:[function(require,module,exports){ + +},{}],18:[function(require,module,exports){ +arguments[4][17][0].apply(exports,arguments) +},{"dup":17}],19:[function(require,module,exports){ (function (global){ /*! * The buffer module from node.js, for the browser. @@ -3694,14 +3812,14 @@ function blitBuffer (src, dst, offset, length) { }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"base64-js":15,"ieee754":29,"isarray":19}],19:[function(require,module,exports){ +},{"base64-js":16,"ieee754":30,"isarray":20}],20:[function(require,module,exports){ var toString = {}.toString; module.exports = Array.isArray || function (arr) { return toString.call(arr) == '[object Array]'; }; -},{}],20:[function(require,module,exports){ +},{}],21:[function(require,module,exports){ module.exports = { "100": "Continue", "101": "Switching Protocols", @@ -3762,7 +3880,7 @@ module.exports = { "511": "Network Authentication Required" } -},{}],21:[function(require,module,exports){ +},{}],22:[function(require,module,exports){ (function (process,global){ "use strict" @@ -3787,7 +3905,7 @@ module.exports = function maybe (cb, promise) { }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"_process":68}],22:[function(require,module,exports){ +},{"_process":69}],23:[function(require,module,exports){ (function (Buffer){ // Copyright Joyent, Inc. and other Node contributors. // @@ -3899,7 +4017,7 @@ function objectToString(o) { }).call(this,{"isBuffer":require("../../is-buffer/index.js")}) -},{"../../is-buffer/index.js":33}],23:[function(require,module,exports){ +},{"../../is-buffer/index.js":34}],24:[function(require,module,exports){ /** * This is the web browser implementation of `debug()`. @@ -4069,7 +4187,7 @@ function localstorage(){ } catch (e) {} } -},{"./debug":24}],24:[function(require,module,exports){ +},{"./debug":25}],25:[function(require,module,exports){ /** * This is the common logic for both the Node.js and web browser @@ -4268,7 +4386,7 @@ function coerce(val) { return val; } -},{"ms":65}],25:[function(require,module,exports){ +},{"ms":66}],26:[function(require,module,exports){ (function (process,global){ /*! * @overview es6-promise - a tiny implementation of Promises/A+. @@ -5240,7 +5358,7 @@ function coerce(val) { }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"_process":68}],26:[function(require,module,exports){ +},{"_process":69}],27:[function(require,module,exports){ /* Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved. @@ -9150,7 +9268,7 @@ function coerce(val) { tolerateError(Messages.InvalidLHSInAssignment); } - // ECMA-262 12.1.2 + // ECMA-262 12.1.1 if (strict && expr.type === Syntax.Identifier) { if (isRestrictedWord(expr.name)) { tolerateUnexpectedToken(token, Messages.StrictLHSAssignment); @@ -10983,7 +11101,7 @@ function coerce(val) { })); /* vim: set sw=4 ts=4 et tw=80 : */ -},{}],27:[function(require,module,exports){ +},{}],28:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -11283,7 +11401,7 @@ function isUndefined(arg) { return arg === void 0; } -},{}],28:[function(require,module,exports){ +},{}],29:[function(require,module,exports){ var http = require('http'); var https = module.exports; @@ -11299,7 +11417,7 @@ https.request = function (params, cb) { return http.request.call(this, params, cb); } -},{"http":84}],29:[function(require,module,exports){ +},{"http":85}],30:[function(require,module,exports){ exports.read = function (buffer, offset, isLE, mLen, nBytes) { var e, m var eLen = nBytes * 8 - mLen - 1 @@ -11385,7 +11503,7 @@ exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { buffer[offset + i - d] |= s * 128 } -},{}],30:[function(require,module,exports){ +},{}],31:[function(require,module,exports){ /*! * node-inherit * Copyright(c) 2011 Dmitry Filatov @@ -11394,7 +11512,7 @@ exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { module.exports = require('./lib/inherit'); -},{"./lib/inherit":31}],31:[function(require,module,exports){ +},{"./lib/inherit":32}],32:[function(require,module,exports){ /** * @module inherit * @version 2.2.2 @@ -11584,7 +11702,7 @@ defineAsGlobal && (global.inherit = inherit); })(this); -},{}],32:[function(require,module,exports){ +},{}],33:[function(require,module,exports){ if (typeof Object.create === 'function') { // implementation from standard node.js 'util' module module.exports = function inherits(ctor, superCtor) { @@ -11609,7 +11727,7 @@ if (typeof Object.create === 'function') { } } -},{}],33:[function(require,module,exports){ +},{}],34:[function(require,module,exports){ /** * Determine if an object is Buffer * @@ -11628,12 +11746,12 @@ module.exports = function (obj) { )) } -},{}],34:[function(require,module,exports){ +},{}],35:[function(require,module,exports){ module.exports = Array.isArray || function (arr) { return Object.prototype.toString.call(arr) == '[object Array]'; }; -},{}],35:[function(require,module,exports){ +},{}],36:[function(require,module,exports){ 'use strict'; @@ -11642,7 +11760,7 @@ var yaml = require('./lib/js-yaml.js'); module.exports = yaml; -},{"./lib/js-yaml.js":36}],36:[function(require,module,exports){ +},{"./lib/js-yaml.js":37}],37:[function(require,module,exports){ 'use strict'; @@ -11683,7 +11801,7 @@ module.exports.parse = deprecated('parse'); module.exports.compose = deprecated('compose'); module.exports.addConstructor = deprecated('addConstructor'); -},{"./js-yaml/dumper":38,"./js-yaml/exception":39,"./js-yaml/loader":40,"./js-yaml/schema":42,"./js-yaml/schema/core":43,"./js-yaml/schema/default_full":44,"./js-yaml/schema/default_safe":45,"./js-yaml/schema/failsafe":46,"./js-yaml/schema/json":47,"./js-yaml/type":48}],37:[function(require,module,exports){ +},{"./js-yaml/dumper":39,"./js-yaml/exception":40,"./js-yaml/loader":41,"./js-yaml/schema":43,"./js-yaml/schema/core":44,"./js-yaml/schema/default_full":45,"./js-yaml/schema/default_safe":46,"./js-yaml/schema/failsafe":47,"./js-yaml/schema/json":48,"./js-yaml/type":49}],38:[function(require,module,exports){ 'use strict'; @@ -11746,7 +11864,7 @@ module.exports.repeat = repeat; module.exports.isNegativeZero = isNegativeZero; module.exports.extend = extend; -},{}],38:[function(require,module,exports){ +},{}],39:[function(require,module,exports){ 'use strict'; /*eslint-disable no-use-before-define*/ @@ -12596,7 +12714,7 @@ function safeDump(input, options) { module.exports.dump = dump; module.exports.safeDump = safeDump; -},{"./common":37,"./exception":39,"./schema/default_full":44,"./schema/default_safe":45}],39:[function(require,module,exports){ +},{"./common":38,"./exception":40,"./schema/default_full":45,"./schema/default_safe":46}],40:[function(require,module,exports){ // YAML error class. http://stackoverflow.com/questions/8458984 // 'use strict'; @@ -12644,7 +12762,7 @@ YAMLException.prototype.toString = function toString(compact) { module.exports = YAMLException; -},{"inherit":30}],40:[function(require,module,exports){ +},{"inherit":31}],41:[function(require,module,exports){ 'use strict'; /*eslint-disable max-len,no-use-before-define*/ @@ -14224,7 +14342,7 @@ module.exports.load = load; module.exports.safeLoadAll = safeLoadAll; module.exports.safeLoad = safeLoad; -},{"./common":37,"./exception":39,"./mark":41,"./schema/default_full":44,"./schema/default_safe":45}],41:[function(require,module,exports){ +},{"./common":38,"./exception":40,"./mark":42,"./schema/default_full":45,"./schema/default_safe":46}],42:[function(require,module,exports){ 'use strict'; @@ -14304,7 +14422,7 @@ Mark.prototype.toString = function toString(compact) { module.exports = Mark; -},{"./common":37}],42:[function(require,module,exports){ +},{"./common":38}],43:[function(require,module,exports){ 'use strict'; /*eslint-disable max-len*/ @@ -14410,7 +14528,7 @@ Schema.create = function createSchema() { module.exports = Schema; -},{"./common":37,"./exception":39,"./type":48}],43:[function(require,module,exports){ +},{"./common":38,"./exception":40,"./type":49}],44:[function(require,module,exports){ // Standard YAML's Core schema. // http://www.yaml.org/spec/1.2/spec.html#id2804923 // @@ -14430,7 +14548,7 @@ module.exports = new Schema({ ] }); -},{"../schema":42,"./json":47}],44:[function(require,module,exports){ +},{"../schema":43,"./json":48}],45:[function(require,module,exports){ // JS-YAML's default schema for `load` function. // It is not described in the YAML specification. // @@ -14457,7 +14575,7 @@ module.exports = Schema.DEFAULT = new Schema({ ] }); -},{"../schema":42,"../type/js/function":53,"../type/js/regexp":54,"../type/js/undefined":55,"./default_safe":45}],45:[function(require,module,exports){ +},{"../schema":43,"../type/js/function":54,"../type/js/regexp":55,"../type/js/undefined":56,"./default_safe":46}],46:[function(require,module,exports){ // JS-YAML's default schema for `safeLoad` function. // It is not described in the YAML specification. // @@ -14487,7 +14605,7 @@ module.exports = new Schema({ ] }); -},{"../schema":42,"../type/binary":49,"../type/merge":57,"../type/omap":59,"../type/pairs":60,"../type/set":62,"../type/timestamp":64,"./core":43}],46:[function(require,module,exports){ +},{"../schema":43,"../type/binary":50,"../type/merge":58,"../type/omap":60,"../type/pairs":61,"../type/set":63,"../type/timestamp":65,"./core":44}],47:[function(require,module,exports){ // Standard YAML's Failsafe schema. // http://www.yaml.org/spec/1.2/spec.html#id2802346 @@ -14506,7 +14624,7 @@ module.exports = new Schema({ ] }); -},{"../schema":42,"../type/map":56,"../type/seq":61,"../type/str":63}],47:[function(require,module,exports){ +},{"../schema":43,"../type/map":57,"../type/seq":62,"../type/str":64}],48:[function(require,module,exports){ // Standard YAML's JSON schema. // http://www.yaml.org/spec/1.2/spec.html#id2803231 // @@ -14533,7 +14651,7 @@ module.exports = new Schema({ ] }); -},{"../schema":42,"../type/bool":50,"../type/float":51,"../type/int":52,"../type/null":58,"./failsafe":46}],48:[function(require,module,exports){ +},{"../schema":43,"../type/bool":51,"../type/float":52,"../type/int":53,"../type/null":59,"./failsafe":47}],49:[function(require,module,exports){ 'use strict'; var YAMLException = require('./exception'); @@ -14596,7 +14714,7 @@ function Type(tag, options) { module.exports = Type; -},{"./exception":39}],49:[function(require,module,exports){ +},{"./exception":40}],50:[function(require,module,exports){ 'use strict'; /*eslint-disable no-bitwise*/ @@ -14732,7 +14850,7 @@ module.exports = new Type('tag:yaml.org,2002:binary', { represent: representYamlBinary }); -},{"../type":48,"buffer":16}],50:[function(require,module,exports){ +},{"../type":49,"buffer":17}],51:[function(require,module,exports){ 'use strict'; var Type = require('../type'); @@ -14771,7 +14889,7 @@ module.exports = new Type('tag:yaml.org,2002:bool', { defaultStyle: 'lowercase' }); -},{"../type":48}],51:[function(require,module,exports){ +},{"../type":49}],52:[function(require,module,exports){ 'use strict'; var common = require('../common'); @@ -14890,7 +15008,7 @@ module.exports = new Type('tag:yaml.org,2002:float', { defaultStyle: 'lowercase' }); -},{"../common":37,"../type":48}],52:[function(require,module,exports){ +},{"../common":38,"../type":49}],53:[function(require,module,exports){ 'use strict'; var common = require('../common'); @@ -15075,7 +15193,7 @@ module.exports = new Type('tag:yaml.org,2002:int', { } }); -},{"../common":37,"../type":48}],53:[function(require,module,exports){ +},{"../common":38,"../type":49}],54:[function(require,module,exports){ 'use strict'; var esprima; @@ -15161,7 +15279,7 @@ module.exports = new Type('tag:yaml.org,2002:js/function', { represent: representJavascriptFunction }); -},{"../../type":48,"esprima":26}],54:[function(require,module,exports){ +},{"../../type":49,"esprima":27}],55:[function(require,module,exports){ 'use strict'; var Type = require('../../type'); @@ -15246,7 +15364,7 @@ module.exports = new Type('tag:yaml.org,2002:js/regexp', { represent: representJavascriptRegExp }); -},{"../../type":48}],55:[function(require,module,exports){ +},{"../../type":49}],56:[function(require,module,exports){ 'use strict'; var Type = require('../../type'); @@ -15276,7 +15394,7 @@ module.exports = new Type('tag:yaml.org,2002:js/undefined', { represent: representJavascriptUndefined }); -},{"../../type":48}],56:[function(require,module,exports){ +},{"../../type":49}],57:[function(require,module,exports){ 'use strict'; var Type = require('../type'); @@ -15286,7 +15404,7 @@ module.exports = new Type('tag:yaml.org,2002:map', { construct: function (data) { return null !== data ? data : {}; } }); -},{"../type":48}],57:[function(require,module,exports){ +},{"../type":49}],58:[function(require,module,exports){ 'use strict'; var Type = require('../type'); @@ -15300,7 +15418,7 @@ module.exports = new Type('tag:yaml.org,2002:merge', { resolve: resolveYamlMerge }); -},{"../type":48}],58:[function(require,module,exports){ +},{"../type":49}],59:[function(require,module,exports){ 'use strict'; var Type = require('../type'); @@ -15338,7 +15456,7 @@ module.exports = new Type('tag:yaml.org,2002:null', { defaultStyle: 'lowercase' }); -},{"../type":48}],59:[function(require,module,exports){ +},{"../type":49}],60:[function(require,module,exports){ 'use strict'; var Type = require('../type'); @@ -15396,7 +15514,7 @@ module.exports = new Type('tag:yaml.org,2002:omap', { construct: constructYamlOmap }); -},{"../type":48}],60:[function(require,module,exports){ +},{"../type":49}],61:[function(require,module,exports){ 'use strict'; var Type = require('../type'); @@ -15459,7 +15577,7 @@ module.exports = new Type('tag:yaml.org,2002:pairs', { construct: constructYamlPairs }); -},{"../type":48}],61:[function(require,module,exports){ +},{"../type":49}],62:[function(require,module,exports){ 'use strict'; var Type = require('../type'); @@ -15469,7 +15587,7 @@ module.exports = new Type('tag:yaml.org,2002:seq', { construct: function (data) { return null !== data ? data : []; } }); -},{"../type":48}],62:[function(require,module,exports){ +},{"../type":49}],63:[function(require,module,exports){ 'use strict'; var Type = require('../type'); @@ -15504,7 +15622,7 @@ module.exports = new Type('tag:yaml.org,2002:set', { construct: constructYamlSet }); -},{"../type":48}],63:[function(require,module,exports){ +},{"../type":49}],64:[function(require,module,exports){ 'use strict'; var Type = require('../type'); @@ -15514,7 +15632,7 @@ module.exports = new Type('tag:yaml.org,2002:str', { construct: function (data) { return null !== data ? data : ''; } }); -},{"../type":48}],64:[function(require,module,exports){ +},{"../type":49}],65:[function(require,module,exports){ 'use strict'; var Type = require('../type'); @@ -15609,7 +15727,7 @@ module.exports = new Type('tag:yaml.org,2002:timestamp', { represent: representYamlTimestamp }); -},{"../type":48}],65:[function(require,module,exports){ +},{"../type":49}],66:[function(require,module,exports){ /** * Helpers. */ @@ -15736,7 +15854,7 @@ function plural(ms, n, name) { return Math.ceil(ms / n) + ' ' + name + 's'; } -},{}],66:[function(require,module,exports){ +},{}],67:[function(require,module,exports){ /**! * Ono v2.0.1 * @@ -15898,7 +16016,7 @@ function errorToJSON() { return json; } -},{"util":93}],67:[function(require,module,exports){ +},{"util":94}],68:[function(require,module,exports){ (function (process){ 'use strict'; @@ -15923,7 +16041,7 @@ function nextTick(fn) { }).call(this,require('_process')) -},{"_process":68}],68:[function(require,module,exports){ +},{"_process":69}],69:[function(require,module,exports){ // shim for using process in browser var process = module.exports = {}; @@ -16016,7 +16134,7 @@ process.chdir = function (dir) { }; process.umask = function() { return 0; }; -},{}],69:[function(require,module,exports){ +},{}],70:[function(require,module,exports){ (function (global){ /*! https://mths.be/punycode v1.4.0 by @mathias */ ;(function(root) { @@ -16554,7 +16672,7 @@ process.umask = function() { return 0; }; }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],70:[function(require,module,exports){ +},{}],71:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -16640,7 +16758,7 @@ var isArray = Array.isArray || function (xs) { return Object.prototype.toString.call(xs) === '[object Array]'; }; -},{}],71:[function(require,module,exports){ +},{}],72:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -16727,16 +16845,16 @@ var objectKeys = Object.keys || function (obj) { return res; }; -},{}],72:[function(require,module,exports){ +},{}],73:[function(require,module,exports){ 'use strict'; exports.decode = exports.parse = require('./decode'); exports.encode = exports.stringify = require('./encode'); -},{"./decode":70,"./encode":71}],73:[function(require,module,exports){ +},{"./decode":71,"./encode":72}],74:[function(require,module,exports){ module.exports = require("./lib/_stream_duplex.js") -},{"./lib/_stream_duplex.js":74}],74:[function(require,module,exports){ +},{"./lib/_stream_duplex.js":75}],75:[function(require,module,exports){ // a duplex stream is just a stream that is both readable and writable. // Since JS doesn't have multiple prototypal inheritance, this class // prototypally inherits from Readable, and then parasitically from @@ -16820,7 +16938,7 @@ function forEach (xs, f) { } } -},{"./_stream_readable":76,"./_stream_writable":78,"core-util-is":22,"inherits":32,"process-nextick-args":67}],75:[function(require,module,exports){ +},{"./_stream_readable":77,"./_stream_writable":79,"core-util-is":23,"inherits":33,"process-nextick-args":68}],76:[function(require,module,exports){ // a passthrough stream. // basically just the most minimal sort of Transform stream. // Every written chunk gets output as-is. @@ -16849,7 +16967,7 @@ PassThrough.prototype._transform = function(chunk, encoding, cb) { cb(null, chunk); }; -},{"./_stream_transform":77,"core-util-is":22,"inherits":32}],76:[function(require,module,exports){ +},{"./_stream_transform":78,"core-util-is":23,"inherits":33}],77:[function(require,module,exports){ (function (process){ 'use strict'; @@ -17829,7 +17947,7 @@ function indexOf (xs, x) { }).call(this,require('_process')) -},{"./_stream_duplex":74,"_process":68,"buffer":18,"core-util-is":22,"events":27,"inherits":32,"isarray":34,"process-nextick-args":67,"string_decoder/":88,"util":16}],77:[function(require,module,exports){ +},{"./_stream_duplex":75,"_process":69,"buffer":19,"core-util-is":23,"events":28,"inherits":33,"isarray":35,"process-nextick-args":68,"string_decoder/":89,"util":17}],78:[function(require,module,exports){ // a transform stream is a readable/writable stream where you do // something with the data. Sometimes it's called a "filter", // but that's not a great name for it, since that implies a thing where @@ -18028,7 +18146,7 @@ function done(stream, er) { return stream.push(null); } -},{"./_stream_duplex":74,"core-util-is":22,"inherits":32}],78:[function(require,module,exports){ +},{"./_stream_duplex":75,"core-util-is":23,"inherits":33}],79:[function(require,module,exports){ // A bit simpler than readable streams. // Implement an async ._write(chunk, encoding, cb), and it'll handle all // the drain event emission and buffering. @@ -18559,10 +18677,10 @@ function endWritable(stream, state, cb) { state.ended = true; } -},{"./_stream_duplex":74,"buffer":18,"core-util-is":22,"events":27,"inherits":32,"process-nextick-args":67,"util-deprecate":91}],79:[function(require,module,exports){ +},{"./_stream_duplex":75,"buffer":19,"core-util-is":23,"events":28,"inherits":33,"process-nextick-args":68,"util-deprecate":92}],80:[function(require,module,exports){ module.exports = require("./lib/_stream_passthrough.js") -},{"./lib/_stream_passthrough.js":75}],80:[function(require,module,exports){ +},{"./lib/_stream_passthrough.js":76}],81:[function(require,module,exports){ var Stream = (function (){ try { return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify @@ -18576,13 +18694,13 @@ exports.Duplex = require('./lib/_stream_duplex.js'); exports.Transform = require('./lib/_stream_transform.js'); exports.PassThrough = require('./lib/_stream_passthrough.js'); -},{"./lib/_stream_duplex.js":74,"./lib/_stream_passthrough.js":75,"./lib/_stream_readable.js":76,"./lib/_stream_transform.js":77,"./lib/_stream_writable.js":78}],81:[function(require,module,exports){ +},{"./lib/_stream_duplex.js":75,"./lib/_stream_passthrough.js":76,"./lib/_stream_readable.js":77,"./lib/_stream_transform.js":78,"./lib/_stream_writable.js":79}],82:[function(require,module,exports){ module.exports = require("./lib/_stream_transform.js") -},{"./lib/_stream_transform.js":77}],82:[function(require,module,exports){ +},{"./lib/_stream_transform.js":78}],83:[function(require,module,exports){ module.exports = require("./lib/_stream_writable.js") -},{"./lib/_stream_writable.js":78}],83:[function(require,module,exports){ +},{"./lib/_stream_writable.js":79}],84:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -18711,7 +18829,7 @@ Stream.prototype.pipe = function(dest, options) { return dest; }; -},{"events":27,"inherits":32,"readable-stream/duplex.js":73,"readable-stream/passthrough.js":79,"readable-stream/readable.js":80,"readable-stream/transform.js":81,"readable-stream/writable.js":82}],84:[function(require,module,exports){ +},{"events":28,"inherits":33,"readable-stream/duplex.js":74,"readable-stream/passthrough.js":80,"readable-stream/readable.js":81,"readable-stream/transform.js":82,"readable-stream/writable.js":83}],85:[function(require,module,exports){ var ClientRequest = require('./lib/request') var extend = require('xtend') var statusCodes = require('builtin-status-codes') @@ -18786,7 +18904,7 @@ http.METHODS = [ 'UNLOCK', 'UNSUBSCRIBE' ] -},{"./lib/request":86,"builtin-status-codes":20,"url":89,"xtend":94}],85:[function(require,module,exports){ +},{"./lib/request":87,"builtin-status-codes":21,"url":90,"xtend":95}],86:[function(require,module,exports){ (function (global){ exports.fetch = isFunction(global.fetch) && isFunction(global.ReadableByteStream) @@ -18831,7 +18949,7 @@ xhr = null // Help gc }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],86:[function(require,module,exports){ +},{}],87:[function(require,module,exports){ (function (process,global,Buffer){ // var Base64 = require('Base64') var capability = require('./capability') @@ -19111,7 +19229,7 @@ var unsafeHeaders = [ }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer) -},{"./capability":85,"./response":87,"_process":68,"buffer":18,"inherits":32,"stream":83}],87:[function(require,module,exports){ +},{"./capability":86,"./response":88,"_process":69,"buffer":19,"inherits":33,"stream":84}],88:[function(require,module,exports){ (function (process,global,Buffer){ var capability = require('./capability') var inherits = require('inherits') @@ -19288,7 +19406,7 @@ IncomingMessage.prototype._onXHRProgress = function () { }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer) -},{"./capability":85,"_process":68,"buffer":18,"inherits":32,"stream":83}],88:[function(require,module,exports){ +},{"./capability":86,"_process":69,"buffer":19,"inherits":33,"stream":84}],89:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -19511,7 +19629,7 @@ function base64DetectIncompleteChar(buffer) { this.charLength = this.charReceived ? 3 : 0; } -},{"buffer":18}],89:[function(require,module,exports){ +},{"buffer":19}],90:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -20245,7 +20363,7 @@ Url.prototype.parseHost = function() { if (host) this.hostname = host; }; -},{"./util":90,"punycode":69,"querystring":72}],90:[function(require,module,exports){ +},{"./util":91,"punycode":70,"querystring":73}],91:[function(require,module,exports){ 'use strict'; module.exports = { @@ -20263,7 +20381,7 @@ module.exports = { } }; -},{}],91:[function(require,module,exports){ +},{}],92:[function(require,module,exports){ (function (global){ /** @@ -20335,14 +20453,14 @@ function config (name) { }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],92:[function(require,module,exports){ +},{}],93:[function(require,module,exports){ module.exports = function isBuffer(arg) { return arg && typeof arg === 'object' && typeof arg.copy === 'function' && typeof arg.fill === 'function' && typeof arg.readUInt8 === 'function'; } -},{}],93:[function(require,module,exports){ +},{}],94:[function(require,module,exports){ (function (process,global){ // Copyright Joyent, Inc. and other Node contributors. // @@ -20933,7 +21051,7 @@ function hasOwnProperty(obj, prop) { }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./support/isBuffer":92,"_process":68,"inherits":32}],94:[function(require,module,exports){ +},{"./support/isBuffer":93,"_process":69,"inherits":33}],95:[function(require,module,exports){ module.exports = extend var hasOwnProperty = Object.prototype.hasOwnProperty; diff --git a/dist/ref-parser.js.map b/dist/ref-parser.js.map index ebab412b..1d00cf56 100644 --- a/dist/ref-parser.js.map +++ b/dist/ref-parser.js.map @@ -8,6 +8,7 @@ "../lib/index.js", "../lib/options.js", "../lib/parse.js", + "../lib/path.js", "../lib/pointer.js", "../lib/promise.js", "../lib/read.js", @@ -97,24 +98,25 @@ "../node_modules/xtend/immutable.js" ], "names": [], - "mappings": "AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACpIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AC3GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACzJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzPA;AACA;AACA;AACA;AACA;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC7HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACpKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5HA;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5gDA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACrMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACv8BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7mLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACh1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1iDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AChKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrhBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrFA;AACA;AACA;AACA;AACA;;ACJA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/8BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjhBA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;;ACDA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACnRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5tBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnEA;AACA;AACA;AACA;AACA;AACA;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1kBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA", + "mappings": "AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACrIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AC3GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACzJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/PA;AACA;AACA;AACA;AACA;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5HA;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5gDA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACrMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACv8BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7mLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACh1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1iDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AChKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrhBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrFA;AACA;AACA;AACA;AACA;;ACJA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/8BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjhBA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;;ACDA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACnRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5tBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnEA;AACA;AACA;AACA;AACA;AACA;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1kBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA", "file": "generated.js", "sourceRoot": "", "sourcesContent": [ "(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o 1) {\n // The current value has additional properties (other than \"$ref\"),\n // so merge the resolved value rather than completely replacing the reference\n var merged = {};\n Object.keys(currentValue).forEach(function(key) {\n if (key !== '$ref') {\n merged[key] = currentValue[key];\n }\n });\n Object.keys(resolvedValue).forEach(function(key) {\n if (!(key in merged)) {\n merged[key] = resolvedValue[key];\n }\n });\n return merged;\n }\n else {\n // Completely replace the original reference with the resolved value\n return resolvedValue;\n }\n}\n\n/**\n * Called when a circular reference is found.\n * It sets the {@link $Refs#circular} flag, and throws an error if options.$refs.circular is false.\n *\n * @param {string} keyPath - The JSON Reference path of the circular reference\n * @param {$Refs} $refs\n * @param {$RefParserOptions} options\n * @returns {boolean} - always returns true, to indicate that a circular reference was found\n */\nfunction foundCircularReference(keyPath, $refs, options) {\n $refs.circular = true;\n if (!options.$refs.circular) {\n throw ono.reference('Circular $ref pointer found at %s', keyPath);\n }\n return true;\n}\n", + "/** !\n * JSON Schema $Ref Parser v2.1.2\n *\n * @link https://github.com/BigstickCarpet/json-schema-ref-parser\n * @license MIT\n */\n'use strict';\n\nvar $Ref = require('./ref'),\n Pointer = require('./pointer'),\n util = require('./util'),\n url = require('url');\n\nmodule.exports = bundle;\n\n/**\n * Bundles all external JSON references into the main JSON schema, thus resulting in a schema that\n * only has *internal* references, not any *external* references.\n * This method mutates the JSON schema object, adding new references and re-mapping existing ones.\n *\n * @param {$RefParser} parser\n * @param {$RefParserOptions} options\n */\nfunction bundle(parser, options) {\n util.debug('Bundling $ref pointers in %s', parser.$refs._basePath);\n\n // Build an inventory of all $ref pointers in the JSON Schema\n var inventory = [];\n crawl(parser.schema, parser.$refs._basePath + '#', '#', inventory, parser.$refs, options);\n\n // Remap all $ref pointers\n remap(inventory);\n}\n\n/**\n * Recursively crawls the given value, and inventories all JSON references.\n *\n * @param {*} obj - The value to crawl. If it's not an object or array, it will be ignored.\n * @param {string} path - The full path of `obj`, possibly with a JSON Pointer in the hash\n * @param {string} pathFromRoot - The path of `obj` from the schema root\n * @param {object[]} inventory - An array of already-inventoried $ref pointers\n * @param {$Refs} $refs\n * @param {$RefParserOptions} options\n */\nfunction crawl(obj, path, pathFromRoot, inventory, $refs, options) {\n if (obj && typeof obj === 'object') {\n var keys = Object.keys(obj);\n\n // Most people will expect references to be bundled into the the \"definitions\" property,\n // so we always crawl that property first, if it exists.\n var defs = keys.indexOf('definitions');\n if (defs > 0) {\n keys.splice(0, 0, keys.splice(defs, 1)[0]);\n }\n\n keys.forEach(function(key) {\n var keyPath = Pointer.join(path, key);\n var keyPathFromRoot = Pointer.join(pathFromRoot, key);\n var value = obj[key];\n\n if ($Ref.is$Ref(value)) {\n // Skip this $ref if we've already inventoried it\n if (!inventory.some(function(i) { return i.parent === obj && i.key === key; })) {\n inventory$Ref(obj, key, path, keyPathFromRoot, inventory, $refs, options);\n }\n }\n else {\n crawl(value, keyPath, keyPathFromRoot, inventory, $refs, options);\n }\n });\n }\n}\n\n/**\n * Inventories the given JSON Reference (i.e. records detailed information about it so we can\n * optimize all $refs in the schema), and then crawls the resolved value.\n *\n * @param {object} $refParent - The object that contains a JSON Reference as one of its keys\n * @param {string} $refKey - The key in `$refParent` that is a JSON Reference\n * @param {string} path - The full path of the JSON Reference at `$refKey`, possibly with a JSON Pointer in the hash\n * @param {string} pathFromRoot - The path of the JSON Reference at `$refKey`, from the schema root\n * @param {object[]} inventory - An array of already-inventoried $ref pointers\n * @param {$Refs} $refs\n * @param {$RefParserOptions} options\n */\nfunction inventory$Ref($refParent, $refKey, path, pathFromRoot, inventory, $refs, options) {\n var $ref = $refParent[$refKey];\n var $refPath = url.resolve(path, $ref.$ref);\n var pointer = $refs._resolve($refPath, options);\n var depth = Pointer.parse(pathFromRoot).length;\n var file = util.path.stripHash(pointer.path);\n var hash = util.path.getHash(pointer.path);\n var external = file !== $refs._basePath;\n var extended = Object.keys($ref).length > 1;\n\n inventory.push({\n $ref: $ref, // The JSON Reference (e.g. {$ref: string})\n parent: $refParent, // The object that contains this $ref pointer\n key: $refKey, // The key in `parent` that is the $ref pointer\n pathFromRoot: pathFromRoot, // The path to the $ref pointer, from the JSON Schema root\n depth: depth, // How far from the JSON Schema root is this $ref pointer?\n file: file, // The file that the $ref pointer resolves to\n hash: hash, // The hash within `file` that the $ref pointer resolves to\n value: pointer.value, // The resolved value of the $ref pointer\n circular: pointer.circular, // Is this $ref pointer DIRECTLY circular? (i.e. it references itself)\n extended: extended, // Does this $ref extend its resolved value? (i.e. it has extra properties, in addition to \"$ref\")\n external: external // Does this $ref pointer point to a file other than the main JSON Schema file?\n });\n\n // Recursively crawl the resolved value\n crawl(pointer.value, pointer.path, pathFromRoot, inventory, $refs, options);\n}\n\n/**\n * Re-maps every $ref pointer, so that they're all relative to the root of the JSON Schema.\n * Each referenced value is dereferenced EXACTLY ONCE. All subsequent references to the same\n * value are re-mapped to point to the first reference.\n *\n * @example:\n * {\n * first: { $ref: somefile.json#/some/part },\n * second: { $ref: somefile.json#/another/part },\n * third: { $ref: somefile.json },\n * fourth: { $ref: somefile.json#/some/part/sub/part }\n * }\n *\n * In this example, there are four references to the same file, but since the third reference points\n * to the ENTIRE file, that's the only one we need to dereference. The other three can just be\n * remapped to point inside the third one.\n *\n * On the other hand, if the third reference DIDN'T exist, then the first and second would both need\n * to be dereferenced, since they point to different parts of the file. The fourth reference does NOT\n * need to be dereferenced, because it can be remapped to point inside the first one.\n *\n * @param {object[]} inventory\n */\nfunction remap(inventory) {\n // Group & sort all the $ref pointers, so they're in the order that we need to dereference/remap them\n inventory.sort(function(a, b) {\n if (a.file !== b.file) {\n return a.file < b.file ? -1 : +1; // Group all the $refs that point to the same file\n }\n else if (a.hash !== b.hash) {\n return a.hash < b.hash ? -1 : +1; // Group all the $refs that point to the same part of the file\n }\n else if (a.circular !== b.circular) {\n return a.circular ? -1 : +1; // If the $ref points to itself, then sort it higher than other $refs that point to this $ref\n }\n else if (a.extended !== b.extended) {\n return a.extended ? +1 : -1; // If the $ref extends the resolved value, then sort it lower than other $refs that don't extend the value\n }\n else if (a.depth !== b.depth) {\n return a.depth - b.depth; // Sort $refs by how close they are to the JSON Schema root\n }\n else {\n // If all else is equal, use the $ref that's in the \"definitions\" property\n return b.pathFromRoot.lastIndexOf('/definitions') - a.pathFromRoot.lastIndexOf('/definitions');\n }\n });\n\n var file, hash, pathFromRoot;\n inventory.forEach(function(i) {\n util.debug('Re-mapping $ref pointer \"%s\" at %s', i.$ref.$ref, i.pathFromRoot);\n\n if (!i.external) {\n // This $ref already resolves to the main JSON Schema file\n i.$ref.$ref = i.hash;\n }\n else if (i.file !== file || i.hash.indexOf(hash) !== 0) {\n // We've moved to a new file or new hash\n file = i.file;\n hash = i.hash;\n pathFromRoot = i.pathFromRoot;\n\n // This is the first $ref to point to this value, so dereference the value.\n // Any other $refs that point to the same value will point to this $ref instead\n i.$ref = i.parent[i.key] = util.dereference(i.$ref, i.value);\n\n if (i.circular) {\n // This $ref points to itself\n i.$ref.$ref = i.pathFromRoot;\n }\n }\n else {\n // This $ref points to the same value as the prevous $ref\n i.$ref.$ref = Pointer.join(pathFromRoot, Pointer.parse(i.hash));\n }\n\n util.debug(' new value: %s', (i.$ref && i.$ref.$ref) ? i.$ref.$ref : '[object Object]');\n });\n}\n", + "'use strict';\n\nvar $Ref = require('./ref'),\n Pointer = require('./pointer'),\n util = require('./util'),\n ono = require('ono'),\n url = require('url');\n\nmodule.exports = dereference;\n\n/**\n * Crawls the JSON schema, finds all JSON references, and dereferences them.\n * This method mutates the JSON schema object, replacing JSON references with their resolved value.\n *\n * @param {$RefParser} parser\n * @param {$RefParserOptions} options\n */\nfunction dereference(parser, options) {\n util.debug('Dereferencing $ref pointers in %s', parser.$refs._basePath);\n parser.$refs.circular = false;\n crawl(parser.schema, parser.$refs._basePath, '#', [], parser.$refs, options);\n}\n\n/**\n * Recursively crawls the given value, and dereferences any JSON references.\n *\n * @param {*} obj - The value to crawl. If it's not an object or array, it will be ignored.\n * @param {string} path - The full path of `obj`, possibly with a JSON Pointer in the hash\n * @param {string} pathFromRoot - The path of `obj` from the schema root\n * @param {object[]} parents - An array of the parent objects that have already been dereferenced\n * @param {$Refs} $refs\n * @param {$RefParserOptions} options\n * @returns {boolean} - Returns true if a circular reference was found\n */\nfunction crawl(obj, path, pathFromRoot, parents, $refs, options) {\n var isCircular = false;\n\n if (obj && typeof obj === 'object') {\n parents.push(obj);\n\n Object.keys(obj).forEach(function(key) {\n var keyPath = Pointer.join(path, key);\n var keyPathFromRoot = Pointer.join(pathFromRoot, key);\n var value = obj[key];\n var circular = false;\n\n if ($Ref.isAllowed$Ref(value, options)) {\n var dereferenced = dereference$Ref(value, keyPath, keyPathFromRoot, parents, $refs, options);\n circular = dereferenced.circular;\n obj[key] = dereferenced.value;\n }\n else {\n if (parents.indexOf(value) === -1) {\n circular = crawl(value, keyPath, keyPathFromRoot, parents, $refs, options);\n }\n else {\n circular = foundCircularReference(keyPath, $refs, options);\n }\n }\n\n // Set the \"isCircular\" flag if this or any other property is circular\n isCircular = isCircular || circular;\n });\n\n parents.pop();\n }\n return isCircular;\n}\n\n/**\n * Dereferences the given JSON Reference, and then crawls the resulting value.\n *\n * @param {{$ref: string}} $ref - The JSON Reference to resolve\n * @param {string} path - The full path of `$ref`, possibly with a JSON Pointer in the hash\n * @param {string} pathFromRoot - The path of `$ref` from the schema root\n * @param {object[]} parents - An array of the parent objects that have already been dereferenced\n * @param {$Refs} $refs\n * @param {$RefParserOptions} options\n * @returns {object}\n */\nfunction dereference$Ref($ref, path, pathFromRoot, parents, $refs, options) {\n util.debug('Dereferencing $ref pointer \"%s\" at %s', $ref.$ref, path);\n\n var $refPath = url.resolve(path, $ref.$ref);\n var pointer = $refs._resolve($refPath, options);\n\n // Check for circular references\n var directCircular = pointer.circular;\n var circular = directCircular || parents.indexOf(pointer.value) !== -1;\n circular && foundCircularReference(path, $refs, options);\n\n // Dereference the JSON reference\n var dereferencedValue = util.dereference($ref, pointer.value);\n\n // Crawl the dereferenced value (unless it's circular)\n if (!circular) {\n // If the `crawl` method returns true, then dereferenced value is circular\n circular = crawl(dereferencedValue, pointer.path, pathFromRoot, parents, $refs, options);\n }\n\n if (circular && !directCircular && options.$refs.circular === 'ignore') {\n // The user has chosen to \"ignore\" circular references, so don't change the value\n dereferencedValue = $ref;\n }\n\n if (directCircular) {\n // The pointer is a DIRECT circular reference (i.e. it references itself).\n // So replace the $ref path with the absolute path from the JSON Schema root\n dereferencedValue.$ref = pathFromRoot;\n }\n\n return {\n circular: circular,\n value: dereferencedValue\n };\n}\n\n/**\n * Called when a circular reference is found.\n * It sets the {@link $Refs#circular} flag, and throws an error if options.$refs.circular is false.\n *\n * @param {string} keyPath - The JSON Reference path of the circular reference\n * @param {$Refs} $refs\n * @param {$RefParserOptions} options\n * @returns {boolean} - always returns true, to indicate that a circular reference was found\n */\nfunction foundCircularReference(keyPath, $refs, options) {\n $refs.circular = true;\n if (!options.$refs.circular) {\n throw ono.reference('Circular $ref pointer found at %s', keyPath);\n }\n return true;\n}\n", "'use strict';\n\nvar http = require('http'),\n https = require('https'),\n url = require('url'),\n util = require('./util'),\n Promise = require('./promise'),\n ono = require('ono');\n\nmodule.exports = download;\n\n/**\n * Downloads the given file.\n *\n * @param {Url|string} u - The url to download (can be a parsed {@link Url} object)\n * @param {$RefParserOptions} options\n * @param {number} [redirects] - The redirect URLs that have already been followed\n *\n * @returns {Promise}\n * The promise resolves with the raw downloaded data, or rejects if there is an HTTP error.\n */\nfunction download(u, options, redirects) {\n return new Promise(function(resolve, reject) {\n u = url.parse(u);\n redirects = redirects || [];\n redirects.push(u.href);\n\n get(u, options)\n .then(function(res) {\n if (res.statusCode >= 400) {\n throw ono({status: res.statusCode}, 'HTTP ERROR %d', res.statusCode);\n }\n else if (res.statusCode >= 300) {\n if (redirects.length > options.http.redirects) {\n reject(ono({status: res.statusCode}, 'Error downloading %s. \\nToo many redirects: \\n %s',\n redirects[0], redirects.join(' \\n ')));\n }\n else if (!res.headers.location) {\n throw ono({status: res.statusCode}, 'HTTP %d redirect with no location header', res.statusCode);\n }\n else {\n util.debug('HTTP %d redirect %s -> %s', res.statusCode, u.href, res.headers.location);\n var redirectTo = url.resolve(u, res.headers.location);\n download(redirectTo, options, redirects).then(resolve, reject);\n }\n }\n else if (res.statusCode === 204 && !options.allow.empty) {\n throw ono({status: 204}, 'HTTP 204 (No Content)');\n }\n else {\n resolve(res.body || new Buffer(0));\n }\n })\n .catch(function(err) {\n reject(ono(err, 'Error downloading', u.href));\n });\n });\n}\n\n/**\n * Sends an HTTP GET request.\n *\n * @param {Url} u - A parsed {@link Url} object\n * @param {$RefParserOptions} options\n *\n * @returns {Promise}\n * The promise resolves with the HTTP Response object.\n */\nfunction get(u, options) {\n return new Promise(function(resolve, reject) {\n util.debug('GET', u.href);\n\n var protocol = u.protocol === 'https:' ? https : http;\n var req = protocol.get({\n hostname: u.hostname,\n port: u.port,\n path: u.path,\n auth: u.auth,\n headers: options.http.headers,\n withCredentials: options.http.withCredentials\n });\n\n if (typeof req.setTimeout === 'function') {\n req.setTimeout(options.http.timeout);\n }\n\n req.on('timeout', function() {\n req.abort();\n });\n\n req.on('error', reject);\n\n req.once('response', function(res) {\n res.body = new Buffer(0);\n\n res.on('data', function(data) {\n res.body = Buffer.concat([res.body, new Buffer(data)]);\n });\n\n res.on('error', reject);\n\n res.on('end', function() {\n resolve(res);\n });\n });\n });\n}\n", - "'use strict';\n\nvar Promise = require('./promise'),\n Options = require('./options'),\n $Refs = require('./refs'),\n $Ref = require('./ref'),\n read = require('./read'),\n resolve = require('./resolve'),\n bundle = require('./bundle'),\n dereference = require('./dereference'),\n util = require('./util'),\n url = require('url'),\n maybe = require('call-me-maybe'),\n ono = require('ono');\n\nmodule.exports = $RefParser;\nmodule.exports.YAML = require('./yaml');\n\n/**\n * This class parses a JSON schema, builds a map of its JSON references and their resolved values,\n * and provides methods for traversing, manipulating, and dereferencing those references.\n *\n * @constructor\n */\nfunction $RefParser() {\n /**\n * The parsed (and possibly dereferenced) JSON schema object\n *\n * @type {object}\n * @readonly\n */\n this.schema = null;\n\n /**\n * The resolved JSON references\n *\n * @type {$Refs}\n */\n this.$refs = new $Refs();\n\n /**\n * The file path or URL of the main JSON schema file.\n * This will be empty if the schema was passed as an object rather than a path.\n *\n * @type {string}\n * @protected\n */\n this._basePath = '';\n}\n\n/**\n * Parses the given JSON schema.\n * This method does not resolve any JSON references.\n * It just reads a single file in JSON or YAML format, and parse it as a JavaScript object.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed\n * @param {function} [callback] - An error-first callback. The second parameter is the parsed JSON schema object.\n * @returns {Promise} - The returned promise resolves with the parsed JSON schema object.\n */\n$RefParser.parse = function(schema, options, callback) {\n var Class = this; // eslint-disable-line consistent-this\n return new Class().parse(schema, options, callback);\n};\n\n/**\n * Parses the given JSON schema.\n * This method does not resolve any JSON references.\n * It just reads a single file in JSON or YAML format, and parse it as a JavaScript object.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed\n * @param {function} [callback] - An error-first callback. The second parameter is the parsed JSON schema object.\n * @returns {Promise} - The returned promise resolves with the parsed JSON schema object.\n */\n$RefParser.prototype.parse = function(schema, options, callback) {\n var args = normalizeArgs(arguments);\n\n if (args.schema && typeof args.schema === 'object') {\n // The schema is an object, not a path/url\n this.schema = args.schema;\n this._basePath = '';\n var $ref = new $Ref(this.$refs, this._basePath);\n $ref.setValue(this.schema, args.options);\n\n return maybe(args.callback, Promise.resolve(this.schema));\n }\n\n if (!args.schema || typeof args.schema !== 'string') {\n var err = ono('Expected a file path, URL, or object. Got %s', args.schema);\n return maybe(args.callback, Promise.reject(err));\n }\n\n var me = this;\n\n // Resolve the absolute path of the schema\n args.schema = util.path.localPathToUrl(args.schema);\n args.schema = url.resolve(util.path.cwd(), args.schema);\n this._basePath = util.path.stripHash(args.schema);\n\n // Read the schema file/url\n return read(args.schema, this.$refs, args.options)\n .then(function(cached$Ref) {\n var value = cached$Ref.$ref.value;\n if (!value || typeof value !== 'object' || value instanceof Buffer) {\n throw ono.syntax('\"%s\" is not a valid JSON Schema', me._basePath);\n }\n else {\n me.schema = value;\n return maybe(args.callback, Promise.resolve(me.schema));\n }\n })\n .catch(function(e) {\n return maybe(args.callback, Promise.reject(e));\n });\n};\n\n/**\n * Parses the given JSON schema and resolves any JSON references, including references in\n * externally-referenced files.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed and resolved\n * @param {function} [callback]\n * - An error-first callback. The second parameter is a {@link $Refs} object containing the resolved JSON references\n *\n * @returns {Promise}\n * The returned promise resolves with a {@link $Refs} object containing the resolved JSON references\n */\n$RefParser.resolve = function(schema, options, callback) {\n var Class = this; // eslint-disable-line consistent-this\n return new Class().resolve(schema, options, callback);\n};\n\n/**\n * Parses the given JSON schema and resolves any JSON references, including references in\n * externally-referenced files.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed and resolved\n * @param {function} [callback]\n * - An error-first callback. The second parameter is a {@link $Refs} object containing the resolved JSON references\n *\n * @returns {Promise}\n * The returned promise resolves with a {@link $Refs} object containing the resolved JSON references\n */\n$RefParser.prototype.resolve = function(schema, options, callback) {\n var me = this;\n var args = normalizeArgs(arguments);\n\n return this.parse(args.schema, args.options)\n .then(function() {\n return resolve(me, args.options);\n })\n .then(function() {\n return maybe(args.callback, Promise.resolve(me.$refs));\n })\n .catch(function(err) {\n return maybe(args.callback, Promise.reject(err));\n });\n};\n\n/**\n * Parses the given JSON schema, resolves any JSON references, and bundles all external references\n * into the main JSON schema. This produces a JSON schema that only has *internal* references,\n * not any *external* references.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed, resolved, and dereferenced\n * @param {function} [callback] - An error-first callback. The second parameter is the bundled JSON schema object\n * @returns {Promise} - The returned promise resolves with the bundled JSON schema object.\n */\n$RefParser.bundle = function(schema, options, callback) {\n var Class = this; // eslint-disable-line consistent-this\n return new Class().bundle(schema, options, callback);\n};\n\n/**\n * Parses the given JSON schema, resolves any JSON references, and bundles all external references\n * into the main JSON schema. This produces a JSON schema that only has *internal* references,\n * not any *external* references.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed, resolved, and dereferenced\n * @param {function} [callback] - An error-first callback. The second parameter is the bundled JSON schema object\n * @returns {Promise} - The returned promise resolves with the bundled JSON schema object.\n */\n$RefParser.prototype.bundle = function(schema, options, callback) {\n var me = this;\n var args = normalizeArgs(arguments);\n\n return this.resolve(args.schema, args.options)\n .then(function() {\n bundle(me, args.options);\n return maybe(args.callback, Promise.resolve(me.schema));\n })\n .catch(function(err) {\n return maybe(args.callback, Promise.reject(err));\n });\n};\n\n/**\n * Parses the given JSON schema, resolves any JSON references, and dereferences the JSON schema.\n * That is, all JSON references are replaced with their resolved values.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed, resolved, and dereferenced\n * @param {function} [callback] - An error-first callback. The second parameter is the dereferenced JSON schema object\n * @returns {Promise} - The returned promise resolves with the dereferenced JSON schema object.\n */\n$RefParser.dereference = function(schema, options, callback) {\n var Class = this; // eslint-disable-line consistent-this\n return new Class().dereference(schema, options, callback);\n};\n\n/**\n * Parses the given JSON schema, resolves any JSON references, and dereferences the JSON schema.\n * That is, all JSON references are replaced with their resolved values.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed, resolved, and dereferenced\n * @param {function} [callback] - An error-first callback. The second parameter is the dereferenced JSON schema object\n * @returns {Promise} - The returned promise resolves with the dereferenced JSON schema object.\n */\n$RefParser.prototype.dereference = function(schema, options, callback) {\n var me = this;\n var args = normalizeArgs(arguments);\n\n return this.resolve(args.schema, args.options)\n .then(function() {\n dereference(me, args.options);\n return maybe(args.callback, Promise.resolve(me.schema));\n })\n .catch(function(err) {\n return maybe(args.callback, Promise.reject(err));\n });\n};\n\n/**\n * Normalizes the given arguments, accounting for optional args.\n *\n * @param {Arguments} args\n * @returns {object}\n */\nfunction normalizeArgs(args) {\n var options = args[1], callback = args[2];\n if (typeof options === 'function') {\n callback = options;\n options = undefined;\n }\n if (!(options instanceof Options)) {\n options = new Options(options);\n }\n return {\n schema: args[0],\n options: options,\n callback: callback\n };\n}\n", + "'use strict';\n\nvar Promise = require('./promise'),\n Options = require('./options'),\n $Refs = require('./refs'),\n $Ref = require('./ref'),\n read = require('./read'),\n resolve = require('./resolve'),\n bundle = require('./bundle'),\n dereference = require('./dereference'),\n util = require('./util'),\n url = require('url'),\n maybe = require('call-me-maybe'),\n ono = require('ono');\n\nmodule.exports = $RefParser;\nmodule.exports.YAML = require('./yaml');\n\n/**\n * This class parses a JSON schema, builds a map of its JSON references and their resolved values,\n * and provides methods for traversing, manipulating, and dereferencing those references.\n *\n * @constructor\n */\nfunction $RefParser() {\n /**\n * The parsed (and possibly dereferenced) JSON schema object\n *\n * @type {object}\n * @readonly\n */\n this.schema = null;\n\n /**\n * The resolved JSON references\n *\n * @type {$Refs}\n */\n this.$refs = new $Refs();\n}\n\n/**\n * Parses the given JSON schema.\n * This method does not resolve any JSON references.\n * It just reads a single file in JSON or YAML format, and parse it as a JavaScript object.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed\n * @param {function} [callback] - An error-first callback. The second parameter is the parsed JSON schema object.\n * @returns {Promise} - The returned promise resolves with the parsed JSON schema object.\n */\n$RefParser.parse = function(schema, options, callback) {\n var Class = this; // eslint-disable-line consistent-this\n return new Class().parse(schema, options, callback);\n};\n\n/**\n * Parses the given JSON schema.\n * This method does not resolve any JSON references.\n * It just reads a single file in JSON or YAML format, and parse it as a JavaScript object.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed\n * @param {function} [callback] - An error-first callback. The second parameter is the parsed JSON schema object.\n * @returns {Promise} - The returned promise resolves with the parsed JSON schema object.\n */\n$RefParser.prototype.parse = function(schema, options, callback) {\n var args = normalizeArgs(arguments);\n\n if (args.schema && typeof args.schema === 'object') {\n // The schema is an object, not a path/url\n this.schema = args.schema;\n this.$refs._basePath = '';\n var $ref = new $Ref(this.$refs, this.$refs._basePath);\n $ref.setValue(this.schema, args.options);\n\n return maybe(args.callback, Promise.resolve(this.schema));\n }\n\n if (!args.schema || typeof args.schema !== 'string') {\n var err = ono('Expected a file path, URL, or object. Got %s', args.schema);\n return maybe(args.callback, Promise.reject(err));\n }\n\n var me = this;\n\n // Resolve the absolute path of the schema\n args.schema = util.path.localPathToUrl(args.schema);\n args.schema = url.resolve(util.path.cwd(), args.schema);\n this.$refs._basePath = util.path.stripHash(args.schema);\n\n // Read the schema file/url\n return read(args.schema, this.$refs, args.options)\n .then(function(result) {\n var value = result.$ref.value;\n if (!value || typeof value !== 'object' || value instanceof Buffer) {\n throw ono.syntax('\"%s\" is not a valid JSON Schema', me.$refs._basePath);\n }\n else {\n me.schema = value;\n return maybe(args.callback, Promise.resolve(me.schema));\n }\n })\n .catch(function(e) {\n return maybe(args.callback, Promise.reject(e));\n });\n};\n\n/**\n * Parses the given JSON schema and resolves any JSON references, including references in\n * externally-referenced files.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed and resolved\n * @param {function} [callback]\n * - An error-first callback. The second parameter is a {@link $Refs} object containing the resolved JSON references\n *\n * @returns {Promise}\n * The returned promise resolves with a {@link $Refs} object containing the resolved JSON references\n */\n$RefParser.resolve = function(schema, options, callback) {\n var Class = this; // eslint-disable-line consistent-this\n return new Class().resolve(schema, options, callback);\n};\n\n/**\n * Parses the given JSON schema and resolves any JSON references, including references in\n * externally-referenced files.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed and resolved\n * @param {function} [callback]\n * - An error-first callback. The second parameter is a {@link $Refs} object containing the resolved JSON references\n *\n * @returns {Promise}\n * The returned promise resolves with a {@link $Refs} object containing the resolved JSON references\n */\n$RefParser.prototype.resolve = function(schema, options, callback) {\n var me = this;\n var args = normalizeArgs(arguments);\n\n return this.parse(args.schema, args.options)\n .then(function() {\n return resolve(me, args.options);\n })\n .then(function() {\n return maybe(args.callback, Promise.resolve(me.$refs));\n })\n .catch(function(err) {\n return maybe(args.callback, Promise.reject(err));\n });\n};\n\n/**\n * Parses the given JSON schema, resolves any JSON references, and bundles all external references\n * into the main JSON schema. This produces a JSON schema that only has *internal* references,\n * not any *external* references.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed, resolved, and dereferenced\n * @param {function} [callback] - An error-first callback. The second parameter is the bundled JSON schema object\n * @returns {Promise} - The returned promise resolves with the bundled JSON schema object.\n */\n$RefParser.bundle = function(schema, options, callback) {\n var Class = this; // eslint-disable-line consistent-this\n return new Class().bundle(schema, options, callback);\n};\n\n/**\n * Parses the given JSON schema, resolves any JSON references, and bundles all external references\n * into the main JSON schema. This produces a JSON schema that only has *internal* references,\n * not any *external* references.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed, resolved, and dereferenced\n * @param {function} [callback] - An error-first callback. The second parameter is the bundled JSON schema object\n * @returns {Promise} - The returned promise resolves with the bundled JSON schema object.\n */\n$RefParser.prototype.bundle = function(schema, options, callback) {\n var me = this;\n var args = normalizeArgs(arguments);\n\n return this.resolve(args.schema, args.options)\n .then(function() {\n bundle(me, args.options);\n return maybe(args.callback, Promise.resolve(me.schema));\n })\n .catch(function(err) {\n return maybe(args.callback, Promise.reject(err));\n });\n};\n\n/**\n * Parses the given JSON schema, resolves any JSON references, and dereferences the JSON schema.\n * That is, all JSON references are replaced with their resolved values.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed, resolved, and dereferenced\n * @param {function} [callback] - An error-first callback. The second parameter is the dereferenced JSON schema object\n * @returns {Promise} - The returned promise resolves with the dereferenced JSON schema object.\n */\n$RefParser.dereference = function(schema, options, callback) {\n var Class = this; // eslint-disable-line consistent-this\n return new Class().dereference(schema, options, callback);\n};\n\n/**\n * Parses the given JSON schema, resolves any JSON references, and dereferences the JSON schema.\n * That is, all JSON references are replaced with their resolved values.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed, resolved, and dereferenced\n * @param {function} [callback] - An error-first callback. The second parameter is the dereferenced JSON schema object\n * @returns {Promise} - The returned promise resolves with the dereferenced JSON schema object.\n */\n$RefParser.prototype.dereference = function(schema, options, callback) {\n var me = this;\n var args = normalizeArgs(arguments);\n\n return this.resolve(args.schema, args.options)\n .then(function() {\n dereference(me, args.options);\n return maybe(args.callback, Promise.resolve(me.schema));\n })\n .catch(function(err) {\n return maybe(args.callback, Promise.reject(err));\n });\n};\n\n/**\n * Normalizes the given arguments, accounting for optional args.\n *\n * @param {Arguments} args\n * @returns {object}\n */\nfunction normalizeArgs(args) {\n var options = args[1], callback = args[2];\n if (typeof options === 'function') {\n callback = options;\n options = undefined;\n }\n if (!(options instanceof Options)) {\n options = new Options(options);\n }\n return {\n schema: args[0],\n options: options,\n callback: callback\n };\n}\n", "/* eslint lines-around-comment: [2, {beforeBlockComment: false}] */\n'use strict';\n\nmodule.exports = $RefParserOptions;\n\n/**\n * Options that determine how JSON schemas are parsed, dereferenced, and cached.\n *\n * @param {object|$RefParserOptions} [options] - Overridden options\n * @constructor\n */\nfunction $RefParserOptions(options) {\n /**\n * Determines what types of files can be parsed\n */\n this.allow = {\n /**\n * Are JSON files allowed?\n * If false, then all schemas must be in YAML format.\n * @type {boolean}\n */\n json: true,\n\n /**\n * Are YAML files allowed?\n * If false, then all schemas must be in JSON format.\n * @type {boolean}\n */\n yaml: true,\n\n /**\n * Are zero-byte files allowed?\n * If false, then an error will be thrown if a file is empty.\n * @type {boolean}\n */\n empty: true,\n\n /**\n * Can unknown file types be $referenced?\n * If true, then they will be parsed as Buffers (byte arrays).\n * If false, then an error will be thrown.\n * @type {boolean}\n */\n unknown: true\n };\n\n /**\n * Determines the types of JSON references that are allowed.\n */\n this.$refs = {\n /**\n * Allow JSON references to other parts of the same file?\n * @type {boolean}\n */\n internal: true,\n\n /**\n * Allow JSON references to external files/URLs?\n * @type {boolean}\n */\n external: true,\n\n /**\n * Allow circular (recursive) JSON references?\n * If false, then a {@link ReferenceError} will be thrown if a circular reference is found.\n * If \"ignore\", then circular references will not be dereferenced.\n * @type {boolean|string}\n */\n circular: true\n };\n\n /**\n * How long to cache files (in seconds).\n */\n this.cache = {\n /**\n * How long to cache local files, in seconds.\n * @type {number}\n */\n fs: 60, // 1 minute\n\n /**\n * How long to cache files downloaded via HTTP, in seconds.\n * @type {number}\n */\n http: 5 * 60, // 5 minutes\n\n /**\n * How long to cache files downloaded via HTTPS, in seconds.\n * @type {number}\n */\n https: 5 * 60 // 5 minutes\n };\n\n /**\n * HTTP request options\n */\n this.http = {\n /**\n * HTTP headers to send when downloading files.\n */\n headers: {},\n\n /**\n * HTTP request timeout (in milliseconds).\n */\n timeout: 5000,\n\n /**\n * The maximum number of HTTP redirects to follow.\n * To disable automatic following of redirects, set this to zero.\n */\n redirects: 5,\n\n /**\n * The `withCredentials` option of XMLHttpRequest.\n * Set this to `true` if you're downloading files from a CORS-enabled server that requires authentication\n */\n withCredentials: false,\n\n };\n\n merge(options, this);\n}\n\n/**\n * Fast, two-level object merge.\n *\n * @param {?object} src - The object to merge into dest\n * @param {object} dest - The object to be modified\n */\nfunction merge(src, dest) {\n if (src) {\n var topKeys = Object.keys(src);\n for (var i = 0; i < topKeys.length; i++) {\n var topKey = topKeys[i];\n var srcChild = src[topKey];\n if (dest[topKey] === undefined) {\n dest[topKey] = srcChild;\n }\n else {\n var childKeys = Object.keys(srcChild);\n for (var j = 0; j < childKeys.length; j++) {\n var childKey = childKeys[j];\n var srcChildValue = srcChild[childKey];\n if (srcChildValue !== undefined) {\n dest[topKey][childKey] = srcChildValue;\n }\n }\n }\n }\n }\n}\n", "'use strict';\n\nvar YAML = require('./yaml'),\n util = require('./util'),\n ono = require('ono');\n\nmodule.exports = parse;\n\n/**\n * Parses the given data as YAML, JSON, or a raw Buffer (byte array), depending on the options.\n *\n * @param {string|Buffer} data - The data to be parsed\n * @param {string} path - The file path or URL that `data` came from\n * @param {$RefParserOptions} options\n *\n * @returns {string|Buffer|object}\n * If `data` can be parsed as YAML or JSON, then the returned value is a JavaScript object.\n * Otherwise, the returned value is the raw string or Buffer that was passed in.\n */\nfunction parse(data, path, options) {\n var parsed;\n\n try {\n if (options.allow.yaml) {\n util.debug('Parsing YAML file: %s', path);\n parsed = YAML.parse(data.toString());\n util.debug(' Parsed successfully');\n }\n else if (options.allow.json) {\n util.debug('Parsing JSON file: %s', path);\n parsed = JSON.parse(data.toString());\n util.debug(' Parsed successfully');\n }\n else {\n parsed = data;\n }\n }\n catch (e) {\n var ext = util.path.extname(path);\n if (options.allow.unknown && ['.json', '.yaml', '.yml'].indexOf(ext) === -1) {\n // It's not a YAML or JSON file, and unknown formats are allowed,\n // so ignore the parsing error and just return the raw data\n util.debug(' Unknown file format. Not parsed.');\n parsed = data;\n }\n else {\n throw ono.syntax(e, 'Error parsing \"%s\"', path);\n }\n }\n\n if (isEmpty(parsed) && !options.allow.empty) {\n throw ono.syntax('Error parsing \"%s\". \\nParsed value is empty', path);\n }\n\n return parsed;\n}\n\n/**\n * Determines whether the parsed value is \"empty\".\n *\n * @param {*} value\n * @returns {boolean}\n */\nfunction isEmpty(value) {\n return !value ||\n (typeof value === 'object' && Object.keys(value).length === 0) ||\n (typeof value === 'string' && value.trim().length === 0) ||\n (value instanceof Buffer && value.length === 0);\n}\n", - "'use strict';\n\nmodule.exports = Pointer;\n\nvar $Ref = require('./ref'),\n util = require('./util'),\n url = require('url'),\n ono = require('ono'),\n slashes = /\\//g,\n tildes = /~/g,\n escapedSlash = /~1/g,\n escapedTilde = /~0/g;\n\n/**\n * This class represents a single JSON pointer and its resolved value.\n *\n * @param {$Ref} $ref\n * @param {string} path\n * @constructor\n */\nfunction Pointer($ref, path) {\n /**\n * The {@link $Ref} object that contains this {@link Pointer} object.\n * @type {$Ref}\n */\n this.$ref = $ref;\n\n /**\n * The file path or URL, containing the JSON pointer in the hash.\n * This path is relative to the path of the main JSON schema file.\n * @type {string}\n */\n this.path = path;\n\n /**\n * The value of the JSON pointer.\n * Can be any JSON type, not just objects. Unknown file types are represented as Buffers (byte arrays).\n * @type {?*}\n */\n this.value = undefined;\n\n /**\n * Indicates whether the pointer is references itself.\n * @type {boolean}\n */\n this.circular = false;\n}\n\n/**\n * Resolves the value of a nested property within the given object.\n *\n * @param {*} obj - The object that will be crawled\n * @param {$RefParserOptions} [options]\n *\n * @returns {Pointer}\n * Returns a JSON pointer whose {@link Pointer#value} is the resolved value.\n * If resolving this value required resolving other JSON references, then\n * the {@link Pointer#$ref} and {@link Pointer#path} will reflect the resolution path\n * of the resolved value.\n */\nPointer.prototype.resolve = function(obj, options) {\n var tokens = Pointer.parse(this.path);\n\n // Crawl the object, one token at a time\n this.value = obj;\n for (var i = 0; i < tokens.length; i++) {\n if (resolveIf$Ref(this, options)) {\n // The $ref path has changed, so append the remaining tokens to the path\n this.path = Pointer.join(this.path, tokens.slice(i));\n }\n\n var token = tokens[i];\n if (this.value[token] === undefined) {\n throw ono.syntax('Error resolving $ref pointer \"%s\". \\nToken \"%s\" does not exist.', this.path, token);\n }\n else {\n this.value = this.value[token];\n }\n }\n\n // Resolve the final value\n resolveIf$Ref(this, options);\n return this;\n};\n\n/**\n * Sets the value of a nested property within the given object.\n *\n * @param {*} obj - The object that will be crawled\n * @param {*} value - the value to assign\n * @param {$RefParserOptions} [options]\n *\n * @returns {*}\n * Returns the modified object, or an entirely new object if the entire object is overwritten.\n */\nPointer.prototype.set = function(obj, value, options) {\n var tokens = Pointer.parse(this.path);\n var token;\n\n if (tokens.length === 0) {\n // There are no tokens, replace the entire object with the new value\n this.value = value;\n return value;\n }\n\n // Crawl the object, one token at a time\n this.value = obj;\n for (var i = 0; i < tokens.length - 1; i++) {\n resolveIf$Ref(this, options);\n\n token = tokens[i];\n if (this.value && this.value[token] !== undefined) {\n // The token exists\n this.value = this.value[token];\n }\n else {\n // The token doesn't exist, so create it\n this.value = setValue(this, token, {});\n }\n }\n\n // Set the value of the final token\n resolveIf$Ref(this, options);\n token = tokens[tokens.length - 1];\n setValue(this, token, value);\n\n // Return the updated object\n return obj;\n};\n\n/**\n * Parses a JSON pointer (or a path containing a JSON pointer in the hash)\n * and returns an array of the pointer's tokens.\n * (e.g. \"schema.json#/definitions/person/name\" => [\"definitions\", \"person\", \"name\"])\n *\n * The pointer is parsed according to RFC 6901\n * {@link https://tools.ietf.org/html/rfc6901#section-3}\n *\n * @param {string} path\n * @returns {string[]}\n */\nPointer.parse = function(path) {\n // Get the JSON pointer from the path's hash\n var pointer = util.path.getHash(path).substr(1);\n\n // If there's no pointer, then there are no tokens,\n // so return an empty array\n if (!pointer) {\n return [];\n }\n\n // Split into an array\n pointer = pointer.split('/');\n\n // Decode each part, according to RFC 6901\n for (var i = 0; i < pointer.length; i++) {\n pointer[i] = decodeURI(pointer[i].replace(escapedSlash, '/').replace(escapedTilde, '~'));\n }\n\n if (pointer[0] !== '') {\n throw ono.syntax('Invalid $ref pointer \"%s\". Pointers must begin with \"#/\"', pointer);\n }\n\n return pointer.slice(1);\n};\n\n/**\n * Creates a JSON pointer path, by joining one or more tokens to a base path.\n *\n * @param {string} base - The base path (e.g. \"schema.json#/definitions/person\")\n * @param {string|string[]} tokens - The token(s) to append (e.g. [\"name\", \"first\"])\n * @returns {string}\n */\nPointer.join = function(base, tokens) {\n // Ensure that the base path contains a hash\n if (base.indexOf('#') === -1) {\n base += '#';\n }\n\n // Append each token to the base path\n tokens = Array.isArray(tokens) ? tokens : [tokens];\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n // Encode the token, according to RFC 6901\n base += '/' + encodeURI(token.replace(tildes, '~0').replace(slashes, '~1'));\n }\n\n return base;\n};\n\n/**\n * If the given pointer's {@link Pointer#value} is a JSON reference,\n * then the reference is resolved and {@link Pointer#value} is replaced with the resolved value.\n * In addition, {@link Pointer#path} and {@link Pointer#$ref} are updated to reflect the\n * resolution path of the new value.\n *\n * @param {Pointer} pointer\n * @param {$RefParserOptions} [options]\n * @returns {boolean} - Returns `true` if the resolution path changed\n */\nfunction resolveIf$Ref(pointer, options) {\n // Is the value a JSON reference? (and allowed?)\n if ($Ref.isAllowed$Ref(pointer.value, options)) {\n var $refPath = url.resolve(pointer.path, pointer.value.$ref);\n\n if ($refPath === pointer.path) {\n // The value is a reference to itself, so there's nothing to do.\n pointer.circular = true;\n }\n else {\n // Does the JSON reference have other properties (other than \"$ref\")?\n // If so, then don't resolve it, since it represents a new type\n if (Object.keys(pointer.value).length === 1) {\n // Resolve the reference\n var resolved = pointer.$ref.$refs._resolve($refPath);\n pointer.$ref = resolved.$ref;\n pointer.path = resolved.path;\n pointer.value = resolved.value;\n return true;\n }\n }\n }\n}\n\n/**\n * Sets the specified token value of the {@link Pointer#value}.\n *\n * The token is evaluated according to RFC 6901.\n * {@link https://tools.ietf.org/html/rfc6901#section-4}\n *\n * @param {Pointer} pointer - The JSON Pointer whose value will be modified\n * @param {string} token - A JSON Pointer token that indicates how to modify `obj`\n * @param {*} value - The value to assign\n * @returns {*} - Returns the assigned value\n */\nfunction setValue(pointer, token, value) {\n if (pointer.value && typeof pointer.value === 'object') {\n if (token === '-' && Array.isArray(pointer.value)) {\n pointer.value.push(value);\n }\n else {\n pointer.value[token] = value;\n }\n }\n else {\n throw ono.syntax('Error assigning $ref pointer \"%s\". \\nCannot set \"%s\" of a non-object.', pointer.path, token);\n }\n return value;\n}\n", + "'use strict';\n\nvar isWindows = /^win/.test(process.platform),\n forwardSlashPattern = /\\//g,\n protocolPattern = /^([a-z0-9.+-]+):\\/\\//i;\n\n// RegExp patterns to URL-encode special characters in local filesystem paths\nvar urlEncodePatterns = [\n /\\?/g, '%3F',\n /\\#/g, '%23',\n isWindows ? /\\\\/g : /\\//, '/'\n];\n\n// RegExp patterns to URL-decode special characters for local filesystem paths\nvar urlDecodePatterns = [\n /\\%23/g, '#',\n /\\%24/g, '$',\n /\\%26/g, '&',\n /\\%2C/g, ',',\n /\\%40/g, '@'\n];\n\n/**\n * Returns the current working directory (in Node) or the current page URL (in browsers).\n *\n * @returns {string}\n */\nexports.cwd = function cwd() {\n return process.browser ? location.href : process.cwd() + '/';\n};\n\n/**\n * Determines whether the given path is a URL.\n *\n * @param {string} path\n * @returns {boolean}\n */\nexports.isUrl = function isUrl(path) {\n var protocol = protocolPattern.exec(path);\n if (protocol) {\n protocol = protocol[1].toLowerCase();\n return protocol !== 'file';\n }\n return false;\n};\n\n/**\n * If the given path is a local filesystem path, it is converted to a URL.\n *\n * @param {string} path\n * @returns {string}\n */\nexports.localPathToUrl = function localPathToUrl(path) {\n if (!process.browser && !exports.isUrl(path)) {\n // Manually encode characters that are not encoded by `encodeURI`\n for (var i = 0; i < urlEncodePatterns.length; i += 2) {\n path = path.replace(urlEncodePatterns[i], urlEncodePatterns[i + 1]);\n }\n path = encodeURI(path);\n }\n return path;\n};\n\n/**\n * Converts a URL to a local filesystem path\n *\n * @param {string} url\n * @param {boolean} [keepFileProtocol] - If true, then \"file://\" will NOT be stripped\n * @returns {string}\n */\nexports.urlToLocalPath = function urlToLocalPath(url, keepFileProtocol) {\n // Decode URL-encoded characters\n url = decodeURI(url);\n\n // Manually decode characters that are not decoded by `decodeURI`\n for (var i = 0; i < urlDecodePatterns.length; i += 2) {\n url = url.replace(urlDecodePatterns[i], urlDecodePatterns[i + 1]);\n }\n\n // Handle \"file://\" URLs\n var isFileUrl = url.substr(0, 7).toLowerCase() === 'file://';\n if (isFileUrl) {\n var protocol = 'file:///';\n\n // Remove the third \"/\" if there is one\n var path = url[7] === '/' ? url.substr(8) : url.substr(7);\n\n if (isWindows && path[1] === '/') {\n // insert a colon (\":\") after the drive letter on Windows\n path = path[0] + ':' + path.substr(1);\n }\n\n if (keepFileProtocol) {\n url = protocol + path;\n }\n else {\n isFileUrl = false;\n url = isWindows ? path : '/' + path;\n }\n }\n\n // Format path separators on Windows\n if (isWindows && !isFileUrl) {\n url = url.replace(forwardSlashPattern, '\\\\');\n }\n\n return url;\n};\n\n/**\n * Returns the hash (URL fragment), of the given path.\n * If there is no hash, then the root hash (\"#\") is returned.\n *\n * @param {string} path\n * @returns {string}\n */\nexports.getHash = function getHash(path) {\n var hashIndex = path.indexOf('#');\n if (hashIndex >= 0) {\n return path.substr(hashIndex);\n }\n return '#';\n};\n\n/**\n * Removes the hash (URL fragment), if any, from the given path.\n *\n * @param {string} path\n * @returns {string}\n */\nexports.stripHash = function stripHash(path) {\n var hashIndex = path.indexOf('#');\n if (hashIndex >= 0) {\n path = path.substr(0, hashIndex);\n }\n return path;\n};\n\n/**\n * Returns the file extension of the given path.\n *\n * @param {string} path\n * @returns {string}\n */\nexports.extname = function extname(path) {\n var lastDot = path.lastIndexOf('.');\n if (lastDot >= 0) {\n return path.substr(lastDot).toLowerCase();\n }\n return '';\n};\n", + "'use strict';\n\nmodule.exports = Pointer;\n\nvar $Ref = require('./ref'),\n util = require('./util'),\n url = require('url'),\n ono = require('ono'),\n slashes = /\\//g,\n tildes = /~/g,\n escapedSlash = /~1/g,\n escapedTilde = /~0/g;\n\n/**\n * This class represents a single JSON pointer and its resolved value.\n *\n * @param {$Ref} $ref\n * @param {string} path\n * @constructor\n */\nfunction Pointer($ref, path) {\n /**\n * The {@link $Ref} object that contains this {@link Pointer} object.\n * @type {$Ref}\n */\n this.$ref = $ref;\n\n /**\n * The file path or URL, containing the JSON pointer in the hash.\n * This path is relative to the path of the main JSON schema file.\n * @type {string}\n */\n this.path = path;\n\n /**\n * The value of the JSON pointer.\n * Can be any JSON type, not just objects. Unknown file types are represented as Buffers (byte arrays).\n * @type {?*}\n */\n this.value = undefined;\n\n /**\n * Indicates whether the pointer references itself.\n * @type {boolean}\n */\n this.circular = false;\n}\n\n/**\n * Resolves the value of a nested property within the given object.\n *\n * @param {*} obj - The object that will be crawled\n * @param {$RefParserOptions} [options]\n *\n * @returns {Pointer}\n * Returns a JSON pointer whose {@link Pointer#value} is the resolved value.\n * If resolving this value required resolving other JSON references, then\n * the {@link Pointer#$ref} and {@link Pointer#path} will reflect the resolution path\n * of the resolved value.\n */\nPointer.prototype.resolve = function(obj, options) {\n var tokens = Pointer.parse(this.path);\n\n // Crawl the object, one token at a time\n this.value = obj;\n for (var i = 0; i < tokens.length; i++) {\n if (resolveIf$Ref(this, options)) {\n // The $ref path has changed, so append the remaining tokens to the path\n this.path = Pointer.join(this.path, tokens.slice(i));\n }\n\n var token = tokens[i];\n if (this.value[token] === undefined) {\n throw ono.syntax('Error resolving $ref pointer \"%s\". \\nToken \"%s\" does not exist.', this.path, token);\n }\n else {\n this.value = this.value[token];\n }\n }\n\n // Resolve the final value\n resolveIf$Ref(this, options);\n return this;\n};\n\n/**\n * Sets the value of a nested property within the given object.\n *\n * @param {*} obj - The object that will be crawled\n * @param {*} value - the value to assign\n * @param {$RefParserOptions} [options]\n *\n * @returns {*}\n * Returns the modified object, or an entirely new object if the entire object is overwritten.\n */\nPointer.prototype.set = function(obj, value, options) {\n var tokens = Pointer.parse(this.path);\n var token;\n\n if (tokens.length === 0) {\n // There are no tokens, replace the entire object with the new value\n this.value = value;\n return value;\n }\n\n // Crawl the object, one token at a time\n this.value = obj;\n for (var i = 0; i < tokens.length - 1; i++) {\n resolveIf$Ref(this, options);\n\n token = tokens[i];\n if (this.value && this.value[token] !== undefined) {\n // The token exists\n this.value = this.value[token];\n }\n else {\n // The token doesn't exist, so create it\n this.value = setValue(this, token, {});\n }\n }\n\n // Set the value of the final token\n resolveIf$Ref(this, options);\n token = tokens[tokens.length - 1];\n setValue(this, token, value);\n\n // Return the updated object\n return obj;\n};\n\n/**\n * Parses a JSON pointer (or a path containing a JSON pointer in the hash)\n * and returns an array of the pointer's tokens.\n * (e.g. \"schema.json#/definitions/person/name\" => [\"definitions\", \"person\", \"name\"])\n *\n * The pointer is parsed according to RFC 6901\n * {@link https://tools.ietf.org/html/rfc6901#section-3}\n *\n * @param {string} path\n * @returns {string[]}\n */\nPointer.parse = function(path) {\n // Get the JSON pointer from the path's hash\n var pointer = util.path.getHash(path).substr(1);\n\n // If there's no pointer, then there are no tokens,\n // so return an empty array\n if (!pointer) {\n return [];\n }\n\n // Split into an array\n pointer = pointer.split('/');\n\n // Decode each part, according to RFC 6901\n for (var i = 0; i < pointer.length; i++) {\n pointer[i] = decodeURI(pointer[i].replace(escapedSlash, '/').replace(escapedTilde, '~'));\n }\n\n if (pointer[0] !== '') {\n throw ono.syntax('Invalid $ref pointer \"%s\". Pointers must begin with \"#/\"', pointer);\n }\n\n return pointer.slice(1);\n};\n\n/**\n * Creates a JSON pointer path, by joining one or more tokens to a base path.\n *\n * @param {string} base - The base path (e.g. \"schema.json#/definitions/person\")\n * @param {string|string[]} tokens - The token(s) to append (e.g. [\"name\", \"first\"])\n * @returns {string}\n */\nPointer.join = function(base, tokens) {\n // Ensure that the base path contains a hash\n if (base.indexOf('#') === -1) {\n base += '#';\n }\n\n // Append each token to the base path\n tokens = Array.isArray(tokens) ? tokens : [tokens];\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n // Encode the token, according to RFC 6901\n base += '/' + encodeURI(token.replace(tildes, '~0').replace(slashes, '~1'));\n }\n\n return base;\n};\n\n/**\n * If the given pointer's {@link Pointer#value} is a JSON reference,\n * then the reference is resolved and {@link Pointer#value} is replaced with the resolved value.\n * In addition, {@link Pointer#path} and {@link Pointer#$ref} are updated to reflect the\n * resolution path of the new value.\n *\n * @param {Pointer} pointer\n * @param {$RefParserOptions} [options]\n * @returns {boolean} - Returns `true` if the resolution path changed\n */\nfunction resolveIf$Ref(pointer, options) {\n // Is the value a JSON reference? (and allowed?)\n\n if ($Ref.isAllowed$Ref(pointer.value, options)) {\n var $refPath = url.resolve(pointer.path, pointer.value.$ref);\n\n if ($refPath === pointer.path) {\n // The value is a reference to itself, so there's nothing to do.\n pointer.circular = true;\n }\n else {\n var resolved = pointer.$ref.$refs._resolve($refPath);\n\n if (Object.keys(pointer.value).length === 1) {\n // Resolve the reference\n pointer.$ref = resolved.$ref;\n pointer.path = resolved.path;\n pointer.value = resolved.value;\n }\n else {\n // This JSON reference has additional properties (other than \"$ref\"),\n // so it \"extends\" the resolved value, rather than simply pointing to it.\n pointer.value = util.dereference(pointer.value, resolved.value);\n }\n\n return true;\n }\n }\n}\n\n/**\n * Sets the specified token value of the {@link Pointer#value}.\n *\n * The token is evaluated according to RFC 6901.\n * {@link https://tools.ietf.org/html/rfc6901#section-4}\n *\n * @param {Pointer} pointer - The JSON Pointer whose value will be modified\n * @param {string} token - A JSON Pointer token that indicates how to modify `obj`\n * @param {*} value - The value to assign\n * @returns {*} - Returns the assigned value\n */\nfunction setValue(pointer, token, value) {\n if (pointer.value && typeof pointer.value === 'object') {\n if (token === '-' && Array.isArray(pointer.value)) {\n pointer.value.push(value);\n }\n else {\n pointer.value[token] = value;\n }\n }\n else {\n throw ono.syntax('Error assigning $ref pointer \"%s\". \\nCannot set \"%s\" of a non-object.', pointer.path, token);\n }\n return value;\n}\n", "'use strict';\n\n/** @type {Promise} **/\nmodule.exports = typeof Promise === 'function' ? Promise : require('es6-promise').Promise;\n", "'use strict';\n\nvar fs = require('fs'),\n download = require('./download'),\n parse = require('./parse'),\n util = require('./util'),\n $Ref = require('./ref'),\n Promise = require('./promise'),\n url = require('url'),\n ono = require('ono');\n\nmodule.exports = read;\n\n/**\n * Reads the specified file path or URL, possibly from cache.\n *\n * @param {string} path - This path MUST already be resolved, since `read` doesn't know the resolution context\n * @param {$Refs} $refs\n * @param {$RefParserOptions} options\n *\n * @returns {Promise}\n * The promise resolves with an object that contains a {@link $Ref}\n * and a flag indicating whether the {@link $Ref} came from cache or not.\n */\nfunction read(path, $refs, options) {\n try {\n // Remove the URL fragment, if any\n path = util.path.stripHash(path);\n util.debug('Reading %s', path);\n\n // Return from cache, if possible\n var $ref = $refs._get$Ref(path);\n if ($ref && !$ref.isExpired()) {\n util.debug(' cached from %s', $ref.pathType);\n return Promise.resolve({\n $ref: $ref,\n cached: true\n });\n }\n\n // Add a placeholder $ref to the cache, so we don't read this URL multiple times\n $ref = new $Ref($refs, path);\n\n // Read and return the $ref\n return read$Ref($ref, options);\n }\n catch (e) {\n return Promise.reject(e);\n }\n}\n\n/**\n * Reads the specified file path or URL and updates the given {@link $Ref} accordingly.\n *\n * @param {$Ref} $ref - The {@link $Ref} to read and update\n * @param {$RefParserOptions} options\n *\n * @returns {Promise}\n * The promise resolves with the updated {@link $Ref} object (the same instance that was passed in)\n */\nfunction read$Ref($ref, options) {\n try {\n var promise = options.$refs.external && (read$RefFile($ref, options) || read$RefUrl($ref, options));\n\n if (promise) {\n return promise\n .then(function(data) {\n // Update the $ref with the parsed file contents\n var value = parse(data, $ref.path, options);\n $ref.setValue(value, options);\n\n return {\n $ref: $ref,\n cached: false\n };\n });\n }\n else {\n return Promise.reject(ono.syntax('Unable to resolve $ref pointer \"%s\"', $ref.path));\n }\n }\n catch (e) {\n return Promise.reject(e);\n }\n}\n\n/**\n * If the given {@link $Ref#path} is a local file, then the file is read\n * and {@link $Ref#type} is set to \"fs\".\n *\n * @param {$Ref} $ref - The {@link $Ref} to read and update\n * @param {$RefParserOptions} options\n *\n * @returns {Promise|undefined}\n * Returns a promise if {@link $Ref#path} is a local file.\n * The promise resolves with the raw file contents.\n */\nfunction read$RefFile($ref, options) {\n if (process.browser || util.path.isUrl($ref.path)) {\n return;\n }\n\n $ref.pathType = 'fs';\n return new Promise(function(resolve, reject) {\n var file;\n try {\n file = util.path.urlToLocalPath($ref.path);\n }\n catch (err) {\n reject(ono.uri(err, 'Malformed URI: %s', $ref.path));\n }\n\n util.debug('Opening file: %s', file);\n\n try {\n fs.readFile(file, function(err, data) {\n if (err) {\n reject(ono(err, 'Error opening file \"%s\"', $ref.path));\n }\n else {\n resolve(data);\n }\n });\n }\n catch (err) {\n reject(ono(err, 'Error opening file \"%s\"', file));\n }\n });\n}\n\n/**\n * If the given {@link $Ref#path} is a URL, then the file is downloaded\n * and {@link $Ref#type} is set to \"http\" or \"https\".\n *\n * @param {$Ref} $ref - The {@link $Ref} to read and update\n * @param {$RefParserOptions} options\n *\n * @returns {Promise|undefined}\n * Returns a promise if {@link $Ref#path} is a URL.\n * The promise resolves with the raw file contents.\n */\nfunction read$RefUrl($ref, options) {\n var u = url.parse($ref.path);\n\n if (process.browser && !u.protocol) {\n // Use the protocol of the current page\n u.protocol = url.parse(location.href).protocol;\n }\n\n if (u.protocol === 'http:') {\n $ref.pathType = 'http';\n return download(u, options);\n }\n else if (u.protocol === 'https:') {\n $ref.pathType = 'https';\n return download(u, options);\n }\n}\n", - "'use strict';\n\nmodule.exports = $Ref;\n\nvar Pointer = require('./pointer'),\n util = require('./util');\n\n/**\n * This class represents a single JSON reference and its resolved value.\n *\n * @param {$Refs} $refs\n * @param {string} path\n * @constructor\n */\nfunction $Ref($refs, path) {\n path = util.path.stripHash(path);\n\n // Add this $ref to its parent collection\n $refs._$refs[path] = this;\n\n /**\n * The {@link $Refs} object that contains this {@link $Ref} object.\n * @type {$Refs}\n */\n this.$refs = $refs;\n\n /**\n * The file path or URL of the referenced file.\n * This path is relative to the path of the main JSON schema file.\n *\n * This path does NOT contain document fragments (JSON pointers). It always references an ENTIRE file.\n * Use methods such as {@link $Ref#get}, {@link $Ref#resolve}, and {@link $Ref#exists} to get\n * specific JSON pointers within the file.\n *\n * @type {string}\n */\n this.path = path;\n\n /**\n * Indicates the type of {@link $Ref#path} (e.g. \"fs\", \"http\", or \"https\")\n * @type {?string}\n */\n this.pathType = undefined;\n\n /**\n * The path TO this JSON reference from the root of the main JSON schema file.\n * If the same JSON reference occurs multiple times in the schema, then this is the pointer to the\n * FIRST occurrence.\n *\n * This property is used by the {@link $RefParser.bundle} method to re-map other JSON references.\n *\n * @type {string}\n */\n this.pathFromRoot = '#';\n\n /**\n * The resolved value of the JSON reference.\n * Can be any JSON type, not just objects. Unknown file types are represented as Buffers (byte arrays).\n * @type {?*}\n */\n this.value = undefined;\n\n /**\n * The date/time that the cached value will expire.\n * @type {?Date}\n */\n this.expires = undefined;\n}\n\n/**\n * Determines whether the {@link $Ref#value} has expired.\n *\n * @returns {boolean}\n */\n$Ref.prototype.isExpired = function() {\n return !!(this.expires && this.expires <= new Date());\n};\n\n/**\n * Immediately expires the {@link $Ref#value}.\n */\n$Ref.prototype.expire = function() {\n this.expires = new Date();\n};\n\n/**\n * Sets the {@link $Ref#value} and renews the cache expiration.\n *\n * @param {*} value\n * @param {$RefParserOptions} options\n */\n$Ref.prototype.setValue = function(value, options) {\n this.value = value;\n\n // Extend the cache expiration\n var cacheDuration = options.cache[this.pathType];\n if (cacheDuration > 0) {\n var expires = Date.now() + (cacheDuration * 1000);\n this.expires = new Date(expires);\n }\n};\n\n/**\n * Determines whether the given JSON reference exists within this {@link $Ref#value}.\n *\n * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash\n * @returns {boolean}\n */\n$Ref.prototype.exists = function(path) {\n try {\n this.resolve(path);\n return true;\n }\n catch (e) {\n return false;\n }\n};\n\n/**\n * Resolves the given JSON reference within this {@link $Ref#value} and returns the resolved value.\n *\n * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash\n * @param {$RefParserOptions} options\n * @returns {*} - Returns the resolved value\n */\n$Ref.prototype.get = function(path, options) {\n return this.resolve(path, options).value;\n};\n\n/**\n * Resolves the given JSON reference within this {@link $Ref#value}.\n *\n * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash\n * @param {$RefParserOptions} options\n * @returns {Pointer}\n */\n$Ref.prototype.resolve = function(path, options) {\n var pointer = new Pointer(this, path);\n return pointer.resolve(this.value, options);\n};\n\n/**\n * Sets the value of a nested property within this {@link $Ref#value}.\n * If the property, or any of its parents don't exist, they will be created.\n *\n * @param {string} path - The full path of the property to set, optionally with a JSON pointer in the hash\n * @param {*} value - The value to assign\n * @param {$RefParserOptions} options\n */\n$Ref.prototype.set = function(path, value, options) {\n var pointer = new Pointer(this, path);\n this.value = pointer.set(this.value, value, options);\n};\n\n/**\n * Determines whether the given value is a JSON reference.\n *\n * @param {*} value - The value to inspect\n * @returns {boolean}\n */\n$Ref.is$Ref = function(value) {\n return value && typeof value === 'object' && typeof value.$ref === 'string' && value.$ref.length > 0;\n};\n\n/**\n * Determines whether the given value is an external JSON reference.\n *\n * @param {*} value - The value to inspect\n * @returns {boolean}\n */\n$Ref.isExternal$Ref = function(value) {\n return $Ref.is$Ref(value) && value.$ref[0] !== '#';\n};\n\n/**\n * Determines whether the given value is a JSON reference, and whether it is allowed by the options.\n * For example, if it references an external file, then options.$refs.external must be true.\n *\n * @param {*} value - The value to inspect\n * @param {$RefParserOptions} options\n * @returns {boolean}\n */\n$Ref.isAllowed$Ref = function(value, options) {\n if ($Ref.is$Ref(value)) {\n if (value.$ref[0] === '#') {\n if (options.$refs.internal) {\n return true;\n }\n }\n else if (options.$refs.external) {\n return true;\n }\n }\n};\n", - "'use strict';\n\nvar Options = require('./options'),\n util = require('./util'),\n ono = require('ono');\n\nmodule.exports = $Refs;\n\n/**\n * This class is a map of JSON references and their resolved values.\n */\nfunction $Refs() {\n /**\n * Indicates whether the schema contains any circular references.\n *\n * @type {boolean}\n */\n this.circular = false;\n\n /**\n * A map of paths/urls to {@link $Ref} objects\n *\n * @type {object}\n * @protected\n */\n this._$refs = {};\n}\n\n/**\n * Returns the paths of all the files/URLs that are referenced by the JSON schema,\n * including the schema itself.\n *\n * @param {...string|string[]} [types] - Only return paths of the given types (\"fs\", \"http\", \"https\")\n * @returns {string[]}\n */\n$Refs.prototype.paths = function(types) {\n var paths = getPaths(this._$refs, arguments);\n return paths.map(function(path) {\n return path.decoded;\n });\n};\n\n/**\n * Returns the map of JSON references and their resolved values.\n *\n * @param {...string|string[]} [types] - Only return references of the given types (\"fs\", \"http\", \"https\")\n * @returns {object}\n */\n$Refs.prototype.values = function(types) {\n var $refs = this._$refs;\n var paths = getPaths($refs, arguments);\n return paths.reduce(function(obj, path) {\n obj[path.decoded] = $refs[path.encoded].value;\n return obj;\n }, {});\n};\n\n/**\n * Returns a POJO (plain old JavaScript object) for serialization as JSON.\n *\n * @returns {object}\n */\n$Refs.prototype.toJSON = $Refs.prototype.values;\n\n/**\n * Determines whether the given JSON reference has expired.\n * Returns true if the reference does not exist.\n *\n * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash\n * @returns {boolean}\n */\n$Refs.prototype.isExpired = function(path) {\n var $ref = this._get$Ref(path);\n return $ref === undefined || $ref.isExpired();\n};\n\n/**\n * Immediately expires the given JSON reference.\n * If the reference does not exist, nothing happens.\n *\n * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash\n */\n$Refs.prototype.expire = function(path) {\n var $ref = this._get$Ref(path);\n if ($ref) {\n $ref.expire();\n }\n};\n\n/**\n * Determines whether the given JSON reference exists.\n *\n * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash\n * @returns {boolean}\n */\n$Refs.prototype.exists = function(path) {\n try {\n this._resolve(path);\n return true;\n }\n catch (e) {\n return false;\n }\n};\n\n/**\n * Resolves the given JSON reference and returns the resolved value.\n *\n * @param {string} path - The full path being resolved, with a JSON pointer in the hash\n * @param {$RefParserOptions} options\n * @returns {*} - Returns the resolved value\n */\n$Refs.prototype.get = function(path, options) {\n return this._resolve(path, options).value;\n};\n\n/**\n * Sets the value of a nested property within this {@link $Ref#value}.\n * If the property, or any of its parents don't exist, they will be created.\n *\n * @param {string} path - The full path of the property to set, optionally with a JSON pointer in the hash\n * @param {*} value - The value to assign\n * @param {$RefParserOptions} options\n */\n$Refs.prototype.set = function(path, value, options) {\n var withoutHash = util.path.stripHash(path);\n var $ref = this._$refs[withoutHash];\n\n if (!$ref) {\n throw ono('Error resolving $ref pointer \"%s\". \\n\"%s\" not found.', path, withoutHash);\n }\n\n options = new Options(options);\n $ref.set(path, value, options);\n};\n\n/**\n * Resolves the given JSON reference.\n *\n * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash\n * @param {$RefParserOptions} options\n * @returns {Pointer}\n * @protected\n */\n$Refs.prototype._resolve = function(path, options) {\n var withoutHash = util.path.stripHash(path);\n var $ref = this._$refs[withoutHash];\n\n if (!$ref) {\n throw ono('Error resolving $ref pointer \"%s\". \\n\"%s\" not found.', path, withoutHash);\n }\n\n options = new Options(options);\n return $ref.resolve(path, options);\n};\n\n/**\n * Returns the specified {@link $Ref} object, or undefined.\n *\n * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash\n * @returns {$Ref|undefined}\n * @protected\n */\n$Refs.prototype._get$Ref = function(path) {\n var withoutHash = util.path.stripHash(path);\n return this._$refs[withoutHash];\n};\n\n/**\n * Returns the encoded and decoded paths keys of the given object.\n *\n * @param {object} $refs - The object whose keys are URL-encoded paths\n * @param {...string|string[]} [types] - Only return paths of the given types (\"fs\", \"http\", \"https\")\n * @returns {object[]}\n */\nfunction getPaths($refs, types) {\n var paths = Object.keys($refs);\n\n // Filter the paths by type\n types = Array.isArray(types[0]) ? types[0] : Array.prototype.slice.call(types);\n if (types.length > 0 && types[0]) {\n paths = paths.filter(function(key) {\n return types.indexOf($refs[key].pathType) !== -1;\n });\n }\n\n // Decode local filesystem paths\n return paths.map(function(path) {\n return {\n encoded: path,\n decoded: $refs[path].pathType === 'fs' ? util.path.urlToLocalPath(path, true) : path\n };\n });\n}\n", - "'use strict';\n\nvar Promise = require('./promise'),\n $Ref = require('./ref'),\n Pointer = require('./pointer'),\n read = require('./read'),\n util = require('./util'),\n url = require('url'),\n ono = require('ono');\n\nmodule.exports = resolve;\n\n/**\n * Crawls the JSON schema, finds all external JSON references, and resolves their values.\n * This method does not mutate the JSON schema. The resolved values are added to {@link $RefParser#$refs}.\n *\n * NOTE: We only care about EXTERNAL references here. INTERNAL references are only relevant when dereferencing.\n *\n * @param {$RefParser} parser\n * @param {$RefParserOptions} options\n *\n * @returns {Promise}\n * The promise resolves once all JSON references in the schema have been resolved,\n * including nested references that are contained in externally-referenced files.\n */\nfunction resolve(parser, options) {\n try {\n if (!options.$refs.external) {\n // Nothing to resolve, so exit early\n return Promise.resolve();\n }\n\n util.debug('Resolving $ref pointers in %s', parser._basePath);\n var promises = crawl(parser.schema, parser._basePath + '#', '#', parser.$refs, options);\n return Promise.all(promises);\n }\n catch (e) {\n return Promise.reject(e);\n }\n}\n\n/**\n * Recursively crawls the given value, and resolves any external JSON references.\n *\n * @param {*} obj - The value to crawl. If it's not an object or array, it will be ignored.\n * @param {string} path - The file path or URL used to resolve relative JSON references.\n * @param {string} pathFromRoot - The path to this point from the schema root\n * @param {$Refs} $refs\n * @param {$RefParserOptions} options\n *\n * @returns {Promise[]}\n * Returns an array of promises. There will be one promise for each JSON reference in `obj`.\n * If `obj` does not contain any JSON references, then the array will be empty.\n * If any of the JSON references point to files that contain additional JSON references,\n * then the corresponding promise will internally reference an array of promises.\n */\nfunction crawl(obj, path, pathFromRoot, $refs, options) {\n var promises = [];\n\n if (obj && typeof obj === 'object') {\n var keys = Object.keys(obj);\n\n // If there's a \"definitions\" property, then crawl it FIRST.\n // This is important when bundling, since the expected behavior\n // is to bundle everything into definitions if possible.\n var defs = keys.indexOf('definitions');\n if (defs > 0) {\n keys.splice(0, 0, keys.splice(defs, 1)[0]);\n }\n\n keys.forEach(function(key) {\n var keyPath = Pointer.join(path, key);\n var keyPathFromRoot = Pointer.join(pathFromRoot, key);\n var value = obj[key];\n\n if ($Ref.isExternal$Ref(value)) {\n // We found a $ref\n util.debug('Resolving $ref pointer \"%s\" at %s', value.$ref, keyPath);\n var $refPath = url.resolve(path, value.$ref);\n\n // Crawl the $referenced value\n var promise = crawl$Ref($refPath, keyPathFromRoot, $refs, options)\n .catch(function(err) {\n throw ono.syntax(err, 'Error at %s', keyPath);\n });\n promises.push(promise);\n }\n else {\n promises = promises.concat(crawl(value, keyPath, keyPathFromRoot, $refs, options));\n }\n });\n }\n return promises;\n}\n\n/**\n * Reads the file/URL at the given path, and then crawls the resulting value and resolves\n * any external JSON references.\n *\n * @param {string} path - The file path or URL to crawl\n * @param {string} pathFromRoot - The path to this point from the schema root\n * @param {$Refs} $refs\n * @param {$RefParserOptions} options\n *\n * @returns {Promise}\n * The promise resolves once all JSON references in the object have been resolved,\n * including nested references that are contained in externally-referenced files.\n */\nfunction crawl$Ref(path, pathFromRoot, $refs, options) {\n return read(path, $refs, options)\n .then(function(cached$Ref) {\n // If a cached $ref is returned, then we DON'T need to crawl it\n if (!cached$Ref.cached) {\n var $ref = cached$Ref.$ref;\n\n // This is a new $ref, so store the path from the root of the JSON schema to this $ref\n $ref.pathFromRoot = pathFromRoot;\n\n // Crawl the new $ref\n util.debug('Resolving $ref pointers in %s', $ref.path);\n var promises = crawl($ref.value, $ref.path + '#', pathFromRoot, $refs, options);\n return Promise.all(promises);\n }\n });\n}\n", - "'use strict';\n\nvar debug = require('debug'),\n isWindows = /^win/.test(process.platform),\n forwardSlashPattern = /\\//g,\n protocolPattern = /^([a-z0-9.+-]+):\\/\\//i;\n\n// RegExp patterns to URL-encode special characters in local filesystem paths\nvar urlEncodePatterns = [\n /\\?/g, '%3F',\n /\\#/g, '%23',\n isWindows ? /\\\\/g : /\\//, '/'\n];\n\n// RegExp patterns to URL-decode special characters for local filesystem paths\nvar urlDecodePatterns = [\n /\\%23/g, '#',\n /\\%24/g, '$',\n /\\%26/g, '&',\n /\\%2C/g, ',',\n /\\%40/g, '@'\n];\n\n/**\n * Writes messages to stdout.\n * Log messages are suppressed by default, but can be enabled by setting the DEBUG variable.\n * @type {function}\n */\nexports.debug = debug('json-schema-ref-parser');\n\n/**\n * Utility functions for working with paths and URLs.\n */\nexports.path = {};\n\n/**\n * Returns the current working directory (in Node) or the current page URL (in browsers).\n *\n * @returns {string}\n */\nexports.path.cwd = function cwd() {\n return process.browser ? location.href : process.cwd() + '/';\n};\n\n/**\n * Determines whether the given path is a URL.\n *\n * @param {string} path\n * @returns {boolean}\n */\nexports.path.isUrl = function isUrl(path) {\n var protocol = protocolPattern.exec(path);\n if (protocol) {\n protocol = protocol[1].toLowerCase();\n return protocol !== 'file';\n }\n return false;\n};\n\n/**\n * If the given path is a local filesystem path, it is converted to a URL.\n *\n * @param {string} path\n * @returns {string}\n */\nexports.path.localPathToUrl = function localPathToUrl(path) {\n if (!process.browser && !exports.path.isUrl(path)) {\n // Manually encode characters that are not encoded by `encodeURI`\n for (var i = 0; i < urlEncodePatterns.length; i += 2) {\n path = path.replace(urlEncodePatterns[i], urlEncodePatterns[i + 1]);\n }\n path = encodeURI(path);\n }\n return path;\n};\n\n/**\n * Converts a URL to a local filesystem path\n *\n * @param {string} url\n * @param {boolean} [keepFileProtocol] - If true, then \"file://\" will NOT be stripped\n * @returns {string}\n */\nexports.path.urlToLocalPath = function urlToLocalPath(url, keepFileProtocol) {\n // Decode URL-encoded characters\n url = decodeURI(url);\n\n // Manually decode characters that are not decoded by `decodeURI`\n for (var i = 0; i < urlDecodePatterns.length; i += 2) {\n url = url.replace(urlDecodePatterns[i], urlDecodePatterns[i + 1]);\n }\n\n // Handle \"file://\" URLs\n var isFileUrl = url.substr(0, 7).toLowerCase() === 'file://';\n if (isFileUrl) {\n var protocol = 'file:///';\n\n // Remove the third \"/\" if there is one\n var path = url[7] === '/' ? url.substr(8) : url.substr(7);\n\n if (isWindows && path[1] === '/') {\n // insert a colon (\":\") after the drive letter on Windows\n path = path[0] + ':' + path.substr(1);\n }\n\n if (keepFileProtocol) {\n url = protocol + path;\n }\n else {\n isFileUrl = false;\n url = isWindows ? path : '/' + path;\n }\n }\n\n // Format path separators on Windows\n if (isWindows && !isFileUrl) {\n url = url.replace(forwardSlashPattern, '\\\\');\n }\n\n return url;\n};\n\n\n/**\n * Returns the hash (URL fragment), if any, of the given path.\n *\n * @param {string} path\n * @returns {string}\n */\nexports.path.getHash = function getHash(path) {\n var hashIndex = path.indexOf('#');\n if (hashIndex >= 0) {\n return path.substr(hashIndex);\n }\n return '';\n};\n\n/**\n * Removes the hash (URL fragment), if any, from the given path.\n *\n * @param {string} path\n * @returns {string}\n */\nexports.path.stripHash = function stripHash(path) {\n var hashIndex = path.indexOf('#');\n if (hashIndex >= 0) {\n path = path.substr(0, hashIndex);\n }\n return path;\n};\n\n/**\n * Returns the file extension of the given path.\n *\n * @param {string} path\n * @returns {string}\n */\nexports.path.extname = function extname(path) {\n var lastDot = path.lastIndexOf('.');\n if (lastDot >= 0) {\n return path.substr(lastDot).toLowerCase();\n }\n return '';\n};\n", + "'use strict';\n\nmodule.exports = $Ref;\n\nvar Pointer = require('./pointer'),\n util = require('./util');\n\n/**\n * This class represents a single JSON reference and its resolved value.\n *\n * @param {$Refs} $refs\n * @param {string} path\n * @constructor\n */\nfunction $Ref($refs, path) {\n path = util.path.stripHash(path);\n\n // Add this $ref to its parent collection\n $refs._$refs[path] = this;\n\n /**\n * The {@link $Refs} object that contains this {@link $Ref} object.\n * @type {$Refs}\n */\n this.$refs = $refs;\n\n /**\n * The file path or URL of the referenced file.\n * This path is relative to the path of the main JSON schema file.\n *\n * This path does NOT contain document fragments (JSON pointers). It always references an ENTIRE file.\n * Use methods such as {@link $Ref#get}, {@link $Ref#resolve}, and {@link $Ref#exists} to get\n * specific JSON pointers within the file.\n *\n * @type {string}\n */\n this.path = path;\n\n /**\n * Indicates the type of {@link $Ref#path} (e.g. \"fs\", \"http\", or \"https\")\n * @type {?string}\n */\n this.pathType = undefined;\n\n /**\n * The resolved value of the JSON reference.\n * Can be any JSON type, not just objects. Unknown file types are represented as Buffers (byte arrays).\n * @type {?*}\n */\n this.value = undefined;\n\n /**\n * The date/time that the cached value will expire.\n * @type {?Date}\n */\n this.expires = undefined;\n}\n\n/**\n * Determines whether the {@link $Ref#value} has expired.\n *\n * @returns {boolean}\n */\n$Ref.prototype.isExpired = function() {\n return !!(this.expires && this.expires <= new Date());\n};\n\n/**\n * Immediately expires the {@link $Ref#value}.\n */\n$Ref.prototype.expire = function() {\n this.expires = new Date();\n};\n\n/**\n * Sets the {@link $Ref#value} and renews the cache expiration.\n *\n * @param {*} value\n * @param {$RefParserOptions} options\n */\n$Ref.prototype.setValue = function(value, options) {\n this.value = value;\n\n // Extend the cache expiration\n var cacheDuration = options.cache[this.pathType];\n if (cacheDuration > 0) {\n var expires = Date.now() + (cacheDuration * 1000);\n this.expires = new Date(expires);\n }\n};\n\n/**\n * Determines whether the given JSON reference exists within this {@link $Ref#value}.\n *\n * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash\n * @returns {boolean}\n */\n$Ref.prototype.exists = function(path) {\n try {\n this.resolve(path);\n return true;\n }\n catch (e) {\n return false;\n }\n};\n\n/**\n * Resolves the given JSON reference within this {@link $Ref#value} and returns the resolved value.\n *\n * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash\n * @param {$RefParserOptions} options\n * @returns {*} - Returns the resolved value\n */\n$Ref.prototype.get = function(path, options) {\n return this.resolve(path, options).value;\n};\n\n/**\n * Resolves the given JSON reference within this {@link $Ref#value}.\n *\n * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash\n * @param {$RefParserOptions} options\n * @returns {Pointer}\n */\n$Ref.prototype.resolve = function(path, options) {\n var pointer = new Pointer(this, path);\n return pointer.resolve(this.value, options);\n};\n\n/**\n * Sets the value of a nested property within this {@link $Ref#value}.\n * If the property, or any of its parents don't exist, they will be created.\n *\n * @param {string} path - The full path of the property to set, optionally with a JSON pointer in the hash\n * @param {*} value - The value to assign\n * @param {$RefParserOptions} options\n */\n$Ref.prototype.set = function(path, value, options) {\n var pointer = new Pointer(this, path);\n this.value = pointer.set(this.value, value, options);\n};\n\n/**\n * Determines whether the given value is a JSON reference.\n *\n * @param {*} value - The value to inspect\n * @returns {boolean}\n */\n$Ref.is$Ref = function(value) {\n return value && typeof value === 'object' && typeof value.$ref === 'string' && value.$ref.length > 0;\n};\n\n/**\n * Determines whether the given value is an external JSON reference.\n *\n * @param {*} value - The value to inspect\n * @returns {boolean}\n */\n$Ref.isExternal$Ref = function(value) {\n return $Ref.is$Ref(value) && value.$ref[0] !== '#';\n};\n\n/**\n * Determines whether the given value is a JSON reference, and whether it is allowed by the options.\n * For example, if it references an external file, then options.$refs.external must be true.\n *\n * @param {*} value - The value to inspect\n * @param {$RefParserOptions} options\n * @returns {boolean}\n */\n$Ref.isAllowed$Ref = function(value, options) {\n if ($Ref.is$Ref(value)) {\n if (value.$ref[0] === '#') {\n if (options.$refs.internal) {\n return true;\n }\n }\n else if (options.$refs.external) {\n return true;\n }\n }\n};\n", + "'use strict';\n\nvar Options = require('./options'),\n util = require('./util'),\n url = require('url'),\n ono = require('ono');\n\nmodule.exports = $Refs;\n\n/**\n * This class is a map of JSON references and their resolved values.\n */\nfunction $Refs() {\n /**\n * Indicates whether the schema contains any circular references.\n *\n * @type {boolean}\n */\n this.circular = false;\n\n /**\n * The file path or URL of the main JSON schema file.\n * This will be empty if the schema was passed as an object rather than a path.\n *\n * @type {string}\n * @protected\n */\n this._basePath = '';\n\n /**\n * A map of paths/urls to {@link $Ref} objects\n *\n * @type {object}\n * @protected\n */\n this._$refs = {};\n}\n\n/**\n * Returns the paths of all the files/URLs that are referenced by the JSON schema,\n * including the schema itself.\n *\n * @param {...string|string[]} [types] - Only return paths of the given types (\"fs\", \"http\", \"https\")\n * @returns {string[]}\n */\n$Refs.prototype.paths = function(types) {\n var paths = getPaths(this._$refs, arguments);\n return paths.map(function(path) {\n return path.decoded;\n });\n};\n\n/**\n * Returns the map of JSON references and their resolved values.\n *\n * @param {...string|string[]} [types] - Only return references of the given types (\"fs\", \"http\", \"https\")\n * @returns {object}\n */\n$Refs.prototype.values = function(types) {\n var $refs = this._$refs;\n var paths = getPaths($refs, arguments);\n return paths.reduce(function(obj, path) {\n obj[path.decoded] = $refs[path.encoded].value;\n return obj;\n }, {});\n};\n\n/**\n * Returns a POJO (plain old JavaScript object) for serialization as JSON.\n *\n * @returns {object}\n */\n$Refs.prototype.toJSON = $Refs.prototype.values;\n\n/**\n * Determines whether the given JSON reference has expired.\n * Returns true if the reference does not exist.\n *\n * @param {string} path - The path being resolved, optionally with a JSON pointer in the hash\n * @returns {boolean}\n */\n$Refs.prototype.isExpired = function(path) {\n var $ref = this._get$Ref(path);\n return $ref === undefined || $ref.isExpired();\n};\n\n/**\n * Immediately expires the given JSON reference.\n * If the reference does not exist, nothing happens.\n *\n * @param {string} path - The path being resolved, optionally with a JSON pointer in the hash\n */\n$Refs.prototype.expire = function(path) {\n var $ref = this._get$Ref(path);\n if ($ref) {\n $ref.expire();\n }\n};\n\n/**\n * Determines whether the given JSON reference exists.\n *\n * @param {string} path - The path being resolved, optionally with a JSON pointer in the hash\n * @returns {boolean}\n */\n$Refs.prototype.exists = function(path) {\n try {\n this._resolve(path);\n return true;\n }\n catch (e) {\n return false;\n }\n};\n\n/**\n * Resolves the given JSON reference and returns the resolved value.\n *\n * @param {string} path - The path being resolved, with a JSON pointer in the hash\n * @param {$RefParserOptions} options\n * @returns {*} - Returns the resolved value\n */\n$Refs.prototype.get = function(path, options) {\n return this._resolve(path, options).value;\n};\n\n/**\n * Sets the value of a nested property within this {@link $Ref#value}.\n * If the property, or any of its parents don't exist, they will be created.\n *\n * @param {string} path - The path of the property to set, optionally with a JSON pointer in the hash\n * @param {*} value - The value to assign\n * @param {$RefParserOptions} options\n */\n$Refs.prototype.set = function(path, value, options) {\n path = url.resolve(this._basePath, path);\n var withoutHash = util.path.stripHash(path);\n var $ref = this._$refs[withoutHash];\n\n if (!$ref) {\n throw ono('Error resolving $ref pointer \"%s\". \\n\"%s\" not found.', path, withoutHash);\n }\n\n options = new Options(options);\n $ref.set(path, value, options);\n};\n\n/**\n * Resolves the given JSON reference.\n *\n * @param {string} path - The path being resolved, optionally with a JSON pointer in the hash\n * @param {$RefParserOptions} options\n * @returns {Pointer}\n * @protected\n */\n$Refs.prototype._resolve = function(path, options) {\n path = url.resolve(this._basePath, path);\n var withoutHash = util.path.stripHash(path);\n var $ref = this._$refs[withoutHash];\n\n if (!$ref) {\n throw ono('Error resolving $ref pointer \"%s\". \\n\"%s\" not found.', path, withoutHash);\n }\n\n options = new Options(options);\n return $ref.resolve(path, options);\n};\n\n/**\n * Returns the specified {@link $Ref} object, or undefined.\n *\n * @param {string} path - The path being resolved, optionally with a JSON pointer in the hash\n * @returns {$Ref|undefined}\n * @protected\n */\n$Refs.prototype._get$Ref = function(path) {\n path = url.resolve(this._basePath, path);\n var withoutHash = util.path.stripHash(path);\n return this._$refs[withoutHash];\n};\n\n/**\n * Returns the encoded and decoded paths keys of the given object.\n *\n * @param {object} $refs - The object whose keys are URL-encoded paths\n * @param {...string|string[]} [types] - Only return paths of the given types (\"fs\", \"http\", \"https\")\n * @returns {object[]}\n */\nfunction getPaths($refs, types) {\n var paths = Object.keys($refs);\n\n // Filter the paths by type\n types = Array.isArray(types[0]) ? types[0] : Array.prototype.slice.call(types);\n if (types.length > 0 && types[0]) {\n paths = paths.filter(function(key) {\n return types.indexOf($refs[key].pathType) !== -1;\n });\n }\n\n // Decode local filesystem paths\n return paths.map(function(path) {\n return {\n encoded: path,\n decoded: $refs[path].pathType === 'fs' ? util.path.urlToLocalPath(path, true) : path\n };\n });\n}\n", + "'use strict';\n\nvar Promise = require('./promise'),\n $Ref = require('./ref'),\n Pointer = require('./pointer'),\n read = require('./read'),\n util = require('./util'),\n url = require('url');\n\nmodule.exports = resolve;\n\n/**\n * Crawls the JSON schema, finds all external JSON references, and resolves their values.\n * This method does not mutate the JSON schema. The resolved values are added to {@link $RefParser#$refs}.\n *\n * NOTE: We only care about EXTERNAL references here. INTERNAL references are only relevant when dereferencing.\n *\n * @param {$RefParser} parser\n * @param {$RefParserOptions} options\n *\n * @returns {Promise}\n * The promise resolves once all JSON references in the schema have been resolved,\n * including nested references that are contained in externally-referenced files.\n */\nfunction resolve(parser, options) {\n try {\n if (!options.$refs.external) {\n // Nothing to resolve, so exit early\n return Promise.resolve();\n }\n\n util.debug('Resolving $ref pointers in %s', parser.$refs._basePath);\n var promises = crawl(parser.schema, parser.$refs._basePath + '#', parser.$refs, options);\n return Promise.all(promises);\n }\n catch (e) {\n return Promise.reject(e);\n }\n}\n\n/**\n * Recursively crawls the given value, and resolves any external JSON references.\n *\n * @param {*} obj - The value to crawl. If it's not an object or array, it will be ignored.\n * @param {string} path - The full path of `obj`, possibly with a JSON Pointer in the hash\n * @param {$Refs} $refs\n * @param {$RefParserOptions} options\n *\n * @returns {Promise[]}\n * Returns an array of promises. There will be one promise for each JSON reference in `obj`.\n * If `obj` does not contain any JSON references, then the array will be empty.\n * If any of the JSON references point to files that contain additional JSON references,\n * then the corresponding promise will internally reference an array of promises.\n */\nfunction crawl(obj, path, $refs, options) {\n var promises = [];\n\n if (obj && typeof obj === 'object') {\n Object.keys(obj).forEach(function(key) {\n var keyPath = Pointer.join(path, key);\n var value = obj[key];\n\n if ($Ref.isExternal$Ref(value)) {\n var promise = resolve$Ref(value, keyPath, $refs, options);\n promises.push(promise);\n }\n else {\n promises = promises.concat(crawl(value, keyPath, $refs, options));\n }\n });\n }\n return promises;\n}\n\n/**\n * Resolves the given JSON Reference, and then crawls the resulting value.\n *\n * @param {{$ref: string}} $ref - The JSON Reference to resolve\n * @param {string} path - The full path of `$ref`, possibly with a JSON Pointer in the hash\n * @param {$Refs} $refs\n * @param {$RefParserOptions} options\n *\n * @returns {Promise}\n * The promise resolves once all JSON references in the object have been resolved,\n * including nested references that are contained in externally-referenced files.\n */\nfunction resolve$Ref($ref, path, $refs, options) {\n util.debug('Resolving $ref pointer \"%s\" at %s', $ref.$ref, path);\n var resolvedPath = url.resolve(path, $ref.$ref);\n\n return read(resolvedPath, $refs, options)\n .then(function(result) {\n // If the result was already cached, then we DON'T need to crawl it\n if (!result.cached) {\n // Crawl the new $ref\n util.debug('Resolving $ref pointers in %s', result.$ref.path);\n var promises = crawl(result.$ref.value, result.$ref.path + '#', $refs, options);\n return Promise.all(promises);\n }\n });\n}\n", + "'use strict';\n\nvar debug = require('debug'),\n path = require('./path');\n\n/**\n * Writes messages to stdout.\n * Log messages are suppressed by default, but can be enabled by setting the DEBUG variable.\n * @type {function}\n */\nexports.debug = debug('json-schema-ref-parser');\n\nexports.path = path;\n\n/**\n * Returns the resolved value of a JSON Reference.\n * If necessary, the resolved value is merged with the JSON Reference to create a new object\n *\n * @example:\n * {\n * person: {\n * properties: {\n * firstName: { type: string }\n * lastName: { type: string }\n * }\n * }\n * employee: {\n * properties: {\n * $ref: #/person/properties\n * salary: { type: number }\n * }\n * }\n * }\n *\n * When \"person\" and \"employee\" are merged, you end up with the following object:\n *\n * {\n * properties: {\n * firstName: { type: string }\n * lastName: { type: string }\n * salary: { type: number }\n * }\n * }\n *\n * @param {object} $ref - The JSON reference object (the one with the \"$ref\" property)\n * @param {*} resolvedValue - The resolved value, which can be any type\n * @returns {*} - Returns the dereferenced value\n */\nexports.dereference = function($ref, resolvedValue) {\n if (resolvedValue && typeof resolvedValue === 'object' && Object.keys($ref).length > 1) {\n var merged = {};\n Object.keys($ref).forEach(function(key) {\n if (key !== '$ref') {\n merged[key] = $ref[key];\n }\n });\n Object.keys(resolvedValue).forEach(function(key) {\n if (!(key in merged)) {\n merged[key] = resolvedValue[key];\n }\n });\n return merged;\n }\n else {\n // Completely replace the original reference with the resolved value\n return resolvedValue;\n }\n};\n", "/* eslint lines-around-comment: [2, {beforeBlockComment: false}] */\n'use strict';\n\nvar yaml = require('js-yaml'),\n ono = require('ono');\n\n/**\n * Simple YAML parsing functions, similar to {@link JSON.parse} and {@link JSON.stringify}\n */\nmodule.exports = {\n /**\n * Parses a YAML string and returns the value.\n *\n * @param {string} text - The YAML string to be parsed\n * @param {function} [reviver] - Not currently supported. Provided for consistency with {@link JSON.parse}\n * @returns {*}\n */\n parse: function yamlParse(text, reviver) {\n try {\n return yaml.safeLoad(text);\n }\n catch (e) {\n if (e instanceof Error) {\n throw e;\n }\n else {\n // https://github.com/nodeca/js-yaml/issues/153\n throw ono(e, e.message);\n }\n }\n },\n\n /**\n * Converts a JavaScript value to a YAML string.\n *\n * @param {*} value - The value to convert to YAML\n * @param {function|array} replacer - Not currently supported. Provided for consistency with {@link JSON.stringify}\n * @param {string|number} space - The number of spaces to use for indentation, or a string containing the number of spaces.\n * @returns {string}\n */\n stringify: function yamlStringify(value, replacer, space) {\n try {\n var indent = (typeof space === 'string' ? space.length : space) || 2;\n return yaml.safeDump(value, {indent: indent});\n }\n catch (e) {\n if (e instanceof Error) {\n throw e;\n }\n else {\n // https://github.com/nodeca/js-yaml/issues/153\n throw ono(e, e.message);\n }\n }\n }\n};\n", "var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n;(function (exports) {\n\t'use strict';\n\n var Arr = (typeof Uint8Array !== 'undefined')\n ? Uint8Array\n : Array\n\n\tvar PLUS = '+'.charCodeAt(0)\n\tvar SLASH = '/'.charCodeAt(0)\n\tvar NUMBER = '0'.charCodeAt(0)\n\tvar LOWER = 'a'.charCodeAt(0)\n\tvar UPPER = 'A'.charCodeAt(0)\n\tvar PLUS_URL_SAFE = '-'.charCodeAt(0)\n\tvar SLASH_URL_SAFE = '_'.charCodeAt(0)\n\n\tfunction decode (elt) {\n\t\tvar code = elt.charCodeAt(0)\n\t\tif (code === PLUS ||\n\t\t code === PLUS_URL_SAFE)\n\t\t\treturn 62 // '+'\n\t\tif (code === SLASH ||\n\t\t code === SLASH_URL_SAFE)\n\t\t\treturn 63 // '/'\n\t\tif (code < NUMBER)\n\t\t\treturn -1 //no match\n\t\tif (code < NUMBER + 10)\n\t\t\treturn code - NUMBER + 26 + 26\n\t\tif (code < UPPER + 26)\n\t\t\treturn code - UPPER\n\t\tif (code < LOWER + 26)\n\t\t\treturn code - LOWER + 26\n\t}\n\n\tfunction b64ToByteArray (b64) {\n\t\tvar i, j, l, tmp, placeHolders, arr\n\n\t\tif (b64.length % 4 > 0) {\n\t\t\tthrow new Error('Invalid string. Length must be a multiple of 4')\n\t\t}\n\n\t\t// the number of equal signs (place holders)\n\t\t// if there are two placeholders, than the two characters before it\n\t\t// represent one byte\n\t\t// if there is only one, then the three characters before it represent 2 bytes\n\t\t// this is just a cheap hack to not do indexOf twice\n\t\tvar len = b64.length\n\t\tplaceHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0\n\n\t\t// base64 is 4/3 + up to two characters of the original data\n\t\tarr = new Arr(b64.length * 3 / 4 - placeHolders)\n\n\t\t// if there are placeholders, only get up to the last complete 4 chars\n\t\tl = placeHolders > 0 ? b64.length - 4 : b64.length\n\n\t\tvar L = 0\n\n\t\tfunction push (v) {\n\t\t\tarr[L++] = v\n\t\t}\n\n\t\tfor (i = 0, j = 0; i < l; i += 4, j += 3) {\n\t\t\ttmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))\n\t\t\tpush((tmp & 0xFF0000) >> 16)\n\t\t\tpush((tmp & 0xFF00) >> 8)\n\t\t\tpush(tmp & 0xFF)\n\t\t}\n\n\t\tif (placeHolders === 2) {\n\t\t\ttmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)\n\t\t\tpush(tmp & 0xFF)\n\t\t} else if (placeHolders === 1) {\n\t\t\ttmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)\n\t\t\tpush((tmp >> 8) & 0xFF)\n\t\t\tpush(tmp & 0xFF)\n\t\t}\n\n\t\treturn arr\n\t}\n\n\tfunction uint8ToBase64 (uint8) {\n\t\tvar i,\n\t\t\textraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes\n\t\t\toutput = \"\",\n\t\t\ttemp, length\n\n\t\tfunction encode (num) {\n\t\t\treturn lookup.charAt(num)\n\t\t}\n\n\t\tfunction tripletToBase64 (num) {\n\t\t\treturn encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)\n\t\t}\n\n\t\t// go through the array every three bytes, we'll deal with trailing stuff later\n\t\tfor (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {\n\t\t\ttemp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n\t\t\toutput += tripletToBase64(temp)\n\t\t}\n\n\t\t// pad the end with zeros, but make sure to not forget the extra bytes\n\t\tswitch (extraBytes) {\n\t\t\tcase 1:\n\t\t\t\ttemp = uint8[uint8.length - 1]\n\t\t\t\toutput += encode(temp >> 2)\n\t\t\t\toutput += encode((temp << 4) & 0x3F)\n\t\t\t\toutput += '=='\n\t\t\t\tbreak\n\t\t\tcase 2:\n\t\t\t\ttemp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])\n\t\t\t\toutput += encode(temp >> 10)\n\t\t\t\toutput += encode((temp >> 4) & 0x3F)\n\t\t\t\toutput += encode((temp << 2) & 0x3F)\n\t\t\t\toutput += '='\n\t\t\t\tbreak\n\t\t}\n\n\t\treturn output\n\t}\n\n\texports.toByteArray = b64ToByteArray\n\texports.fromByteArray = uint8ToBase64\n}(typeof exports === 'undefined' ? (this.base64js = {}) : exports))\n", "", @@ -126,7 +128,7 @@ "\n/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n && 'undefined' != typeof chrome.storage\n ? chrome.storage.local\n : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n 'lightseagreen',\n 'forestgreen',\n 'goldenrod',\n 'dodgerblue',\n 'darkorchid',\n 'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n // is webkit? http://stackoverflow.com/a/16459606/376773\n return ('WebkitAppearance' in document.documentElement.style) ||\n // is firebug? http://stackoverflow.com/a/398120/376773\n (window.console && (console.firebug || (console.exception && console.table))) ||\n // is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31);\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n return JSON.stringify(v);\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs() {\n var args = arguments;\n var useColors = this.useColors;\n\n args[0] = (useColors ? '%c' : '')\n + this.namespace\n + (useColors ? ' %c' : ' ')\n + args[0]\n + (useColors ? '%c ' : ' ')\n + '+' + exports.humanize(this.diff);\n\n if (!useColors) return args;\n\n var c = 'color: ' + this.color;\n args = [args[0], c, 'color: inherit'].concat(Array.prototype.slice.call(args, 1));\n\n // the final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-z%]/g, function(match) {\n if ('%%' === match) return;\n index++;\n if ('%c' === match) {\n // we only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n\n args.splice(lastC, 0, c);\n return args;\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n // this hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return 'object' === typeof console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n try {\n if (null == namespaces) {\n exports.storage.removeItem('debug');\n } else {\n exports.storage.debug = namespaces;\n }\n } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n var r;\n try {\n r = exports.storage.debug;\n } catch(e) {}\n return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage(){\n try {\n return window.localStorage;\n } catch (e) {}\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = debug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lowercased letter, i.e. \"n\".\n */\n\nexports.formatters = {};\n\n/**\n * Previously assigned color.\n */\n\nvar prevColor = 0;\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n *\n * @return {Number}\n * @api private\n */\n\nfunction selectColor() {\n return exports.colors[prevColor++ % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction debug(namespace) {\n\n // define the `disabled` version\n function disabled() {\n }\n disabled.enabled = false;\n\n // define the `enabled` version\n function enabled() {\n\n var self = enabled;\n\n // set `diff` timestamp\n var curr = +new Date();\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n\n // add the `color` if not set\n if (null == self.useColors) self.useColors = exports.useColors();\n if (null == self.color && self.useColors) self.color = selectColor();\n\n var args = Array.prototype.slice.call(arguments);\n\n args[0] = exports.coerce(args[0]);\n\n if ('string' !== typeof args[0]) {\n // anything else let's inspect with %o\n args = ['%o'].concat(args);\n }\n\n // apply any `formatters` transformations\n var index = 0;\n args[0] = args[0].replace(/%([a-z%])/g, function(match, format) {\n // if we encounter an escaped % then don't increase the array index\n if (match === '%%') return match;\n index++;\n var formatter = exports.formatters[format];\n if ('function' === typeof formatter) {\n var val = args[index];\n match = formatter.call(self, val);\n\n // now we need to remove `args[index]` since it's inlined in the `format`\n args.splice(index, 1);\n index--;\n }\n return match;\n });\n\n if ('function' === typeof exports.formatArgs) {\n args = exports.formatArgs.apply(self, args);\n }\n var logFn = enabled.log || exports.log || console.log.bind(console);\n logFn.apply(self, args);\n }\n enabled.enabled = true;\n\n var fn = exports.enabled(namespace) ? enabled : disabled;\n\n fn.namespace = namespace;\n\n return fn;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n exports.save(namespaces);\n\n var split = (namespaces || '').split(/[\\s,]+/);\n var len = split.length;\n\n for (var i = 0; i < len; i++) {\n if (!split[i]) continue; // ignore empty strings\n namespaces = split[i].replace(/\\*/g, '.*?');\n if (namespaces[0] === '-') {\n exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n exports.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n var i, len;\n for (i = 0, len = exports.skips.length; i < len; i++) {\n if (exports.skips[i].test(name)) {\n return false;\n }\n }\n for (i = 0, len = exports.names.length; i < len; i++) {\n if (exports.names[i].test(name)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n", "/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n", - "/*\n Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n(function (root, factory) {\n 'use strict';\n\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js,\n // Rhino, and plain browser loading.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define(['exports'], factory);\n } else if (typeof exports !== 'undefined') {\n factory(exports);\n } else {\n factory((root.esprima = {}));\n }\n}(this, function (exports) {\n 'use strict';\n\n var Token,\n TokenName,\n FnExprTokens,\n Syntax,\n PlaceHolders,\n Messages,\n Regex,\n source,\n strict,\n index,\n lineNumber,\n lineStart,\n hasLineTerminator,\n lastIndex,\n lastLineNumber,\n lastLineStart,\n startIndex,\n startLineNumber,\n startLineStart,\n scanning,\n length,\n lookahead,\n state,\n extra,\n isBindingElement,\n isAssignmentTarget,\n firstCoverInitializedNameError;\n\n Token = {\n BooleanLiteral: 1,\n EOF: 2,\n Identifier: 3,\n Keyword: 4,\n NullLiteral: 5,\n NumericLiteral: 6,\n Punctuator: 7,\n StringLiteral: 8,\n RegularExpression: 9,\n Template: 10\n };\n\n TokenName = {};\n TokenName[Token.BooleanLiteral] = 'Boolean';\n TokenName[Token.EOF] = '';\n TokenName[Token.Identifier] = 'Identifier';\n TokenName[Token.Keyword] = 'Keyword';\n TokenName[Token.NullLiteral] = 'Null';\n TokenName[Token.NumericLiteral] = 'Numeric';\n TokenName[Token.Punctuator] = 'Punctuator';\n TokenName[Token.StringLiteral] = 'String';\n TokenName[Token.RegularExpression] = 'RegularExpression';\n TokenName[Token.Template] = 'Template';\n\n // A function following one of those tokens is an expression.\n FnExprTokens = ['(', '{', '[', 'in', 'typeof', 'instanceof', 'new',\n 'return', 'case', 'delete', 'throw', 'void',\n // assignment operators\n '=', '+=', '-=', '*=', '/=', '%=', '<<=', '>>=', '>>>=',\n '&=', '|=', '^=', ',',\n // binary/unary operators\n '+', '-', '*', '/', '%', '++', '--', '<<', '>>', '>>>', '&',\n '|', '^', '!', '~', '&&', '||', '?', ':', '===', '==', '>=',\n '<=', '<', '>', '!=', '!=='];\n\n Syntax = {\n AssignmentExpression: 'AssignmentExpression',\n AssignmentPattern: 'AssignmentPattern',\n ArrayExpression: 'ArrayExpression',\n ArrayPattern: 'ArrayPattern',\n ArrowFunctionExpression: 'ArrowFunctionExpression',\n BlockStatement: 'BlockStatement',\n BinaryExpression: 'BinaryExpression',\n BreakStatement: 'BreakStatement',\n CallExpression: 'CallExpression',\n CatchClause: 'CatchClause',\n ClassBody: 'ClassBody',\n ClassDeclaration: 'ClassDeclaration',\n ClassExpression: 'ClassExpression',\n ConditionalExpression: 'ConditionalExpression',\n ContinueStatement: 'ContinueStatement',\n DoWhileStatement: 'DoWhileStatement',\n DebuggerStatement: 'DebuggerStatement',\n EmptyStatement: 'EmptyStatement',\n ExportAllDeclaration: 'ExportAllDeclaration',\n ExportDefaultDeclaration: 'ExportDefaultDeclaration',\n ExportNamedDeclaration: 'ExportNamedDeclaration',\n ExportSpecifier: 'ExportSpecifier',\n ExpressionStatement: 'ExpressionStatement',\n ForStatement: 'ForStatement',\n ForOfStatement: 'ForOfStatement',\n ForInStatement: 'ForInStatement',\n FunctionDeclaration: 'FunctionDeclaration',\n FunctionExpression: 'FunctionExpression',\n Identifier: 'Identifier',\n IfStatement: 'IfStatement',\n ImportDeclaration: 'ImportDeclaration',\n ImportDefaultSpecifier: 'ImportDefaultSpecifier',\n ImportNamespaceSpecifier: 'ImportNamespaceSpecifier',\n ImportSpecifier: 'ImportSpecifier',\n Literal: 'Literal',\n LabeledStatement: 'LabeledStatement',\n LogicalExpression: 'LogicalExpression',\n MemberExpression: 'MemberExpression',\n MetaProperty: 'MetaProperty',\n MethodDefinition: 'MethodDefinition',\n NewExpression: 'NewExpression',\n ObjectExpression: 'ObjectExpression',\n ObjectPattern: 'ObjectPattern',\n Program: 'Program',\n Property: 'Property',\n RestElement: 'RestElement',\n ReturnStatement: 'ReturnStatement',\n SequenceExpression: 'SequenceExpression',\n SpreadElement: 'SpreadElement',\n Super: 'Super',\n SwitchCase: 'SwitchCase',\n SwitchStatement: 'SwitchStatement',\n TaggedTemplateExpression: 'TaggedTemplateExpression',\n TemplateElement: 'TemplateElement',\n TemplateLiteral: 'TemplateLiteral',\n ThisExpression: 'ThisExpression',\n ThrowStatement: 'ThrowStatement',\n TryStatement: 'TryStatement',\n UnaryExpression: 'UnaryExpression',\n UpdateExpression: 'UpdateExpression',\n VariableDeclaration: 'VariableDeclaration',\n VariableDeclarator: 'VariableDeclarator',\n WhileStatement: 'WhileStatement',\n WithStatement: 'WithStatement',\n YieldExpression: 'YieldExpression'\n };\n\n PlaceHolders = {\n ArrowParameterPlaceHolder: 'ArrowParameterPlaceHolder'\n };\n\n // Error messages should be identical to V8.\n Messages = {\n UnexpectedToken: 'Unexpected token %0',\n UnexpectedNumber: 'Unexpected number',\n UnexpectedString: 'Unexpected string',\n UnexpectedIdentifier: 'Unexpected identifier',\n UnexpectedReserved: 'Unexpected reserved word',\n UnexpectedTemplate: 'Unexpected quasi %0',\n UnexpectedEOS: 'Unexpected end of input',\n NewlineAfterThrow: 'Illegal newline after throw',\n InvalidRegExp: 'Invalid regular expression',\n UnterminatedRegExp: 'Invalid regular expression: missing /',\n InvalidLHSInAssignment: 'Invalid left-hand side in assignment',\n InvalidLHSInForIn: 'Invalid left-hand side in for-in',\n InvalidLHSInForLoop: 'Invalid left-hand side in for-loop',\n MultipleDefaultsInSwitch: 'More than one default clause in switch statement',\n NoCatchOrFinally: 'Missing catch or finally after try',\n UnknownLabel: 'Undefined label \\'%0\\'',\n Redeclaration: '%0 \\'%1\\' has already been declared',\n IllegalContinue: 'Illegal continue statement',\n IllegalBreak: 'Illegal break statement',\n IllegalReturn: 'Illegal return statement',\n StrictModeWith: 'Strict mode code may not include a with statement',\n StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode',\n StrictVarName: 'Variable name may not be eval or arguments in strict mode',\n StrictParamName: 'Parameter name eval or arguments is not allowed in strict mode',\n StrictParamDupe: 'Strict mode function may not have duplicate parameter names',\n StrictFunctionName: 'Function name may not be eval or arguments in strict mode',\n StrictOctalLiteral: 'Octal literals are not allowed in strict mode.',\n StrictDelete: 'Delete of an unqualified identifier in strict mode.',\n StrictLHSAssignment: 'Assignment to eval or arguments is not allowed in strict mode',\n StrictLHSPostfix: 'Postfix increment/decrement may not have eval or arguments operand in strict mode',\n StrictLHSPrefix: 'Prefix increment/decrement may not have eval or arguments operand in strict mode',\n StrictReservedWord: 'Use of future reserved word in strict mode',\n TemplateOctalLiteral: 'Octal literals are not allowed in template strings.',\n ParameterAfterRestParameter: 'Rest parameter must be last formal parameter',\n DefaultRestParameter: 'Unexpected token =',\n ObjectPatternAsRestParameter: 'Unexpected token {',\n DuplicateProtoProperty: 'Duplicate __proto__ fields are not allowed in object literals',\n ConstructorSpecialMethod: 'Class constructor may not be an accessor',\n DuplicateConstructor: 'A class may only have one constructor',\n StaticPrototype: 'Classes may not have static property named prototype',\n MissingFromClause: 'Unexpected token',\n NoAsAfterImportNamespace: 'Unexpected token',\n InvalidModuleSpecifier: 'Unexpected token',\n IllegalImportDeclaration: 'Unexpected token',\n IllegalExportDeclaration: 'Unexpected token',\n DuplicateBinding: 'Duplicate binding %0'\n };\n\n // See also tools/generate-unicode-regex.js.\n Regex = {\n // ECMAScript 6/Unicode v7.0.0 NonAsciiIdentifierStart:\n NonAsciiIdentifierStart: /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309B-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF5D-\\uDF61]|\\uD805[\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF98]|\\uD809[\\uDC00-\\uDC6E]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50\\uDF93-\\uDF9F]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD83A[\\uDC00-\\uDCC4]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D]|\\uD87E[\\uDC00-\\uDE1D]/,\n\n // ECMAScript 6/Unicode v7.0.0 NonAsciiIdentifierPart:\n NonAsciiIdentifierPart: /[\\xAA\\xB5\\xB7\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1369-\\u1371\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDDFD\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE38-\\uDE3A\\uDE3F\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE6\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDD0-\\uDDDA\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF01-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB7\\uDEC0-\\uDEC9]|\\uD806[\\uDCA0-\\uDCE9\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF98]|\\uD809[\\uDC00-\\uDC6E]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDEF0-\\uDEF4\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50-\\uDF7E\\uDF8F-\\uDF9F]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/\n };\n\n // Ensure the condition is true, otherwise throw an error.\n // This is only to have a better contract semantic, i.e. another safety net\n // to catch a logic error. The condition shall be fulfilled in normal case.\n // Do NOT use this to enforce a certain condition on any user input.\n\n function assert(condition, message) {\n /* istanbul ignore if */\n if (!condition) {\n throw new Error('ASSERT: ' + message);\n }\n }\n\n function isDecimalDigit(ch) {\n return (ch >= 0x30 && ch <= 0x39); // 0..9\n }\n\n function isHexDigit(ch) {\n return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;\n }\n\n function isOctalDigit(ch) {\n return '01234567'.indexOf(ch) >= 0;\n }\n\n function octalToDecimal(ch) {\n // \\0 is not octal escape sequence\n var octal = (ch !== '0'), code = '01234567'.indexOf(ch);\n\n if (index < length && isOctalDigit(source[index])) {\n octal = true;\n code = code * 8 + '01234567'.indexOf(source[index++]);\n\n // 3 digits are only allowed when string starts\n // with 0, 1, 2, 3\n if ('0123'.indexOf(ch) >= 0 &&\n index < length &&\n isOctalDigit(source[index])) {\n code = code * 8 + '01234567'.indexOf(source[index++]);\n }\n }\n\n return {\n code: code,\n octal: octal\n };\n }\n\n // ECMA-262 11.2 White Space\n\n function isWhiteSpace(ch) {\n return (ch === 0x20) || (ch === 0x09) || (ch === 0x0B) || (ch === 0x0C) || (ch === 0xA0) ||\n (ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0);\n }\n\n // ECMA-262 11.3 Line Terminators\n\n function isLineTerminator(ch) {\n return (ch === 0x0A) || (ch === 0x0D) || (ch === 0x2028) || (ch === 0x2029);\n }\n\n // ECMA-262 11.6 Identifier Names and Identifiers\n\n function fromCodePoint(cp) {\n return (cp < 0x10000) ? String.fromCharCode(cp) :\n String.fromCharCode(0xD800 + ((cp - 0x10000) >> 10)) +\n String.fromCharCode(0xDC00 + ((cp - 0x10000) & 1023));\n }\n\n function isIdentifierStart(ch) {\n return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore)\n (ch >= 0x41 && ch <= 0x5A) || // A..Z\n (ch >= 0x61 && ch <= 0x7A) || // a..z\n (ch === 0x5C) || // \\ (backslash)\n ((ch >= 0x80) && Regex.NonAsciiIdentifierStart.test(fromCodePoint(ch)));\n }\n\n function isIdentifierPart(ch) {\n return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore)\n (ch >= 0x41 && ch <= 0x5A) || // A..Z\n (ch >= 0x61 && ch <= 0x7A) || // a..z\n (ch >= 0x30 && ch <= 0x39) || // 0..9\n (ch === 0x5C) || // \\ (backslash)\n ((ch >= 0x80) && Regex.NonAsciiIdentifierPart.test(fromCodePoint(ch)));\n }\n\n // ECMA-262 11.6.2.2 Future Reserved Words\n\n function isFutureReservedWord(id) {\n switch (id) {\n case 'enum':\n case 'export':\n case 'import':\n case 'super':\n return true;\n default:\n return false;\n }\n }\n\n function isStrictModeReservedWord(id) {\n switch (id) {\n case 'implements':\n case 'interface':\n case 'package':\n case 'private':\n case 'protected':\n case 'public':\n case 'static':\n case 'yield':\n case 'let':\n return true;\n default:\n return false;\n }\n }\n\n function isRestrictedWord(id) {\n return id === 'eval' || id === 'arguments';\n }\n\n // ECMA-262 11.6.2.1 Keywords\n\n function isKeyword(id) {\n switch (id.length) {\n case 2:\n return (id === 'if') || (id === 'in') || (id === 'do');\n case 3:\n return (id === 'var') || (id === 'for') || (id === 'new') ||\n (id === 'try') || (id === 'let');\n case 4:\n return (id === 'this') || (id === 'else') || (id === 'case') ||\n (id === 'void') || (id === 'with') || (id === 'enum');\n case 5:\n return (id === 'while') || (id === 'break') || (id === 'catch') ||\n (id === 'throw') || (id === 'const') || (id === 'yield') ||\n (id === 'class') || (id === 'super');\n case 6:\n return (id === 'return') || (id === 'typeof') || (id === 'delete') ||\n (id === 'switch') || (id === 'export') || (id === 'import');\n case 7:\n return (id === 'default') || (id === 'finally') || (id === 'extends');\n case 8:\n return (id === 'function') || (id === 'continue') || (id === 'debugger');\n case 10:\n return (id === 'instanceof');\n default:\n return false;\n }\n }\n\n // ECMA-262 11.4 Comments\n\n function addComment(type, value, start, end, loc) {\n var comment;\n\n assert(typeof start === 'number', 'Comment must have valid position');\n\n state.lastCommentStart = start;\n\n comment = {\n type: type,\n value: value\n };\n if (extra.range) {\n comment.range = [start, end];\n }\n if (extra.loc) {\n comment.loc = loc;\n }\n extra.comments.push(comment);\n if (extra.attachComment) {\n extra.leadingComments.push(comment);\n extra.trailingComments.push(comment);\n }\n if (extra.tokenize) {\n comment.type = comment.type + 'Comment';\n if (extra.delegate) {\n comment = extra.delegate(comment);\n }\n extra.tokens.push(comment);\n }\n }\n\n function skipSingleLineComment(offset) {\n var start, loc, ch, comment;\n\n start = index - offset;\n loc = {\n start: {\n line: lineNumber,\n column: index - lineStart - offset\n }\n };\n\n while (index < length) {\n ch = source.charCodeAt(index);\n ++index;\n if (isLineTerminator(ch)) {\n hasLineTerminator = true;\n if (extra.comments) {\n comment = source.slice(start + offset, index - 1);\n loc.end = {\n line: lineNumber,\n column: index - lineStart - 1\n };\n addComment('Line', comment, start, index - 1, loc);\n }\n if (ch === 13 && source.charCodeAt(index) === 10) {\n ++index;\n }\n ++lineNumber;\n lineStart = index;\n return;\n }\n }\n\n if (extra.comments) {\n comment = source.slice(start + offset, index);\n loc.end = {\n line: lineNumber,\n column: index - lineStart\n };\n addComment('Line', comment, start, index, loc);\n }\n }\n\n function skipMultiLineComment() {\n var start, loc, ch, comment;\n\n if (extra.comments) {\n start = index - 2;\n loc = {\n start: {\n line: lineNumber,\n column: index - lineStart - 2\n }\n };\n }\n\n while (index < length) {\n ch = source.charCodeAt(index);\n if (isLineTerminator(ch)) {\n if (ch === 0x0D && source.charCodeAt(index + 1) === 0x0A) {\n ++index;\n }\n hasLineTerminator = true;\n ++lineNumber;\n ++index;\n lineStart = index;\n } else if (ch === 0x2A) {\n // Block comment ends with '*/'.\n if (source.charCodeAt(index + 1) === 0x2F) {\n ++index;\n ++index;\n if (extra.comments) {\n comment = source.slice(start + 2, index - 2);\n loc.end = {\n line: lineNumber,\n column: index - lineStart\n };\n addComment('Block', comment, start, index, loc);\n }\n return;\n }\n ++index;\n } else {\n ++index;\n }\n }\n\n // Ran off the end of the file - the whole thing is a comment\n if (extra.comments) {\n loc.end = {\n line: lineNumber,\n column: index - lineStart\n };\n comment = source.slice(start + 2, index);\n addComment('Block', comment, start, index, loc);\n }\n tolerateUnexpectedToken();\n }\n\n function skipComment() {\n var ch, start;\n hasLineTerminator = false;\n\n start = (index === 0);\n while (index < length) {\n ch = source.charCodeAt(index);\n\n if (isWhiteSpace(ch)) {\n ++index;\n } else if (isLineTerminator(ch)) {\n hasLineTerminator = true;\n ++index;\n if (ch === 0x0D && source.charCodeAt(index) === 0x0A) {\n ++index;\n }\n ++lineNumber;\n lineStart = index;\n start = true;\n } else if (ch === 0x2F) { // U+002F is '/'\n ch = source.charCodeAt(index + 1);\n if (ch === 0x2F) {\n ++index;\n ++index;\n skipSingleLineComment(2);\n start = true;\n } else if (ch === 0x2A) { // U+002A is '*'\n ++index;\n ++index;\n skipMultiLineComment();\n } else {\n break;\n }\n } else if (start && ch === 0x2D) { // U+002D is '-'\n // U+003E is '>'\n if ((source.charCodeAt(index + 1) === 0x2D) && (source.charCodeAt(index + 2) === 0x3E)) {\n // '-->' is a single-line comment\n index += 3;\n skipSingleLineComment(3);\n } else {\n break;\n }\n } else if (ch === 0x3C) { // U+003C is '<'\n if (source.slice(index + 1, index + 4) === '!--') {\n ++index; // `<`\n ++index; // `!`\n ++index; // `-`\n ++index; // `-`\n skipSingleLineComment(4);\n } else {\n break;\n }\n } else {\n break;\n }\n }\n }\n\n function scanHexEscape(prefix) {\n var i, len, ch, code = 0;\n\n len = (prefix === 'u') ? 4 : 2;\n for (i = 0; i < len; ++i) {\n if (index < length && isHexDigit(source[index])) {\n ch = source[index++];\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n } else {\n return '';\n }\n }\n return String.fromCharCode(code);\n }\n\n function scanUnicodeCodePointEscape() {\n var ch, code;\n\n ch = source[index];\n code = 0;\n\n // At least, one hex digit is required.\n if (ch === '}') {\n throwUnexpectedToken();\n }\n\n while (index < length) {\n ch = source[index++];\n if (!isHexDigit(ch)) {\n break;\n }\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n }\n\n if (code > 0x10FFFF || ch !== '}') {\n throwUnexpectedToken();\n }\n\n return fromCodePoint(code);\n }\n\n function codePointAt(i) {\n var cp, first, second;\n\n cp = source.charCodeAt(i);\n if (cp >= 0xD800 && cp <= 0xDBFF) {\n second = source.charCodeAt(i + 1);\n if (second >= 0xDC00 && second <= 0xDFFF) {\n first = cp;\n cp = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n }\n }\n\n return cp;\n }\n\n function getComplexIdentifier() {\n var cp, ch, id;\n\n cp = codePointAt(index);\n id = fromCodePoint(cp);\n index += id.length;\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (cp === 0x5C) {\n if (source.charCodeAt(index) !== 0x75) {\n throwUnexpectedToken();\n }\n ++index;\n if (source[index] === '{') {\n ++index;\n ch = scanUnicodeCodePointEscape();\n } else {\n ch = scanHexEscape('u');\n cp = ch.charCodeAt(0);\n if (!ch || ch === '\\\\' || !isIdentifierStart(cp)) {\n throwUnexpectedToken();\n }\n }\n id = ch;\n }\n\n while (index < length) {\n cp = codePointAt(index);\n if (!isIdentifierPart(cp)) {\n break;\n }\n ch = fromCodePoint(cp);\n id += ch;\n index += ch.length;\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (cp === 0x5C) {\n id = id.substr(0, id.length - 1);\n if (source.charCodeAt(index) !== 0x75) {\n throwUnexpectedToken();\n }\n ++index;\n if (source[index] === '{') {\n ++index;\n ch = scanUnicodeCodePointEscape();\n } else {\n ch = scanHexEscape('u');\n cp = ch.charCodeAt(0);\n if (!ch || ch === '\\\\' || !isIdentifierPart(cp)) {\n throwUnexpectedToken();\n }\n }\n id += ch;\n }\n }\n\n return id;\n }\n\n function getIdentifier() {\n var start, ch;\n\n start = index++;\n while (index < length) {\n ch = source.charCodeAt(index);\n if (ch === 0x5C) {\n // Blackslash (U+005C) marks Unicode escape sequence.\n index = start;\n return getComplexIdentifier();\n } else if (ch >= 0xD800 && ch < 0xDFFF) {\n // Need to handle surrogate pairs.\n index = start;\n return getComplexIdentifier();\n }\n if (isIdentifierPart(ch)) {\n ++index;\n } else {\n break;\n }\n }\n\n return source.slice(start, index);\n }\n\n function scanIdentifier() {\n var start, id, type;\n\n start = index;\n\n // Backslash (U+005C) starts an escaped character.\n id = (source.charCodeAt(index) === 0x5C) ? getComplexIdentifier() : getIdentifier();\n\n // There is no keyword or literal with only one character.\n // Thus, it must be an identifier.\n if (id.length === 1) {\n type = Token.Identifier;\n } else if (isKeyword(id)) {\n type = Token.Keyword;\n } else if (id === 'null') {\n type = Token.NullLiteral;\n } else if (id === 'true' || id === 'false') {\n type = Token.BooleanLiteral;\n } else {\n type = Token.Identifier;\n }\n\n return {\n type: type,\n value: id,\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n\n // ECMA-262 11.7 Punctuators\n\n function scanPunctuator() {\n var token, str;\n\n token = {\n type: Token.Punctuator,\n value: '',\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: index,\n end: index\n };\n\n // Check for most common single-character punctuators.\n str = source[index];\n switch (str) {\n\n case '(':\n if (extra.tokenize) {\n extra.openParenToken = extra.tokenValues.length;\n }\n ++index;\n break;\n\n case '{':\n if (extra.tokenize) {\n extra.openCurlyToken = extra.tokenValues.length;\n }\n state.curlyStack.push('{');\n ++index;\n break;\n\n case '.':\n ++index;\n if (source[index] === '.' && source[index + 1] === '.') {\n // Spread operator: ...\n index += 2;\n str = '...';\n }\n break;\n\n case '}':\n ++index;\n state.curlyStack.pop();\n break;\n case ')':\n case ';':\n case ',':\n case '[':\n case ']':\n case ':':\n case '?':\n case '~':\n ++index;\n break;\n\n default:\n // 4-character punctuator.\n str = source.substr(index, 4);\n if (str === '>>>=') {\n index += 4;\n } else {\n\n // 3-character punctuators.\n str = str.substr(0, 3);\n if (str === '===' || str === '!==' || str === '>>>' ||\n str === '<<=' || str === '>>=') {\n index += 3;\n } else {\n\n // 2-character punctuators.\n str = str.substr(0, 2);\n if (str === '&&' || str === '||' || str === '==' || str === '!=' ||\n str === '+=' || str === '-=' || str === '*=' || str === '/=' ||\n str === '++' || str === '--' || str === '<<' || str === '>>' ||\n str === '&=' || str === '|=' || str === '^=' || str === '%=' ||\n str === '<=' || str === '>=' || str === '=>') {\n index += 2;\n } else {\n\n // 1-character punctuators.\n str = source[index];\n if ('<>=!+-*%&|^/'.indexOf(str) >= 0) {\n ++index;\n }\n }\n }\n }\n }\n\n if (index === token.start) {\n throwUnexpectedToken();\n }\n\n token.end = index;\n token.value = str;\n return token;\n }\n\n // ECMA-262 11.8.3 Numeric Literals\n\n function scanHexLiteral(start) {\n var number = '';\n\n while (index < length) {\n if (!isHexDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n\n if (number.length === 0) {\n throwUnexpectedToken();\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwUnexpectedToken();\n }\n\n return {\n type: Token.NumericLiteral,\n value: parseInt('0x' + number, 16),\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n function scanBinaryLiteral(start) {\n var ch, number;\n\n number = '';\n\n while (index < length) {\n ch = source[index];\n if (ch !== '0' && ch !== '1') {\n break;\n }\n number += source[index++];\n }\n\n if (number.length === 0) {\n // only 0b or 0B\n throwUnexpectedToken();\n }\n\n if (index < length) {\n ch = source.charCodeAt(index);\n /* istanbul ignore else */\n if (isIdentifierStart(ch) || isDecimalDigit(ch)) {\n throwUnexpectedToken();\n }\n }\n\n return {\n type: Token.NumericLiteral,\n value: parseInt(number, 2),\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n function scanOctalLiteral(prefix, start) {\n var number, octal;\n\n if (isOctalDigit(prefix)) {\n octal = true;\n number = '0' + source[index++];\n } else {\n octal = false;\n ++index;\n number = '';\n }\n\n while (index < length) {\n if (!isOctalDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n\n if (!octal && number.length === 0) {\n // only 0o or 0O\n throwUnexpectedToken();\n }\n\n if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {\n throwUnexpectedToken();\n }\n\n return {\n type: Token.NumericLiteral,\n value: parseInt(number, 8),\n octal: octal,\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n function isImplicitOctalLiteral() {\n var i, ch;\n\n // Implicit octal, unless there is a non-octal digit.\n // (Annex B.1.1 on Numeric Literals)\n for (i = index + 1; i < length; ++i) {\n ch = source[i];\n if (ch === '8' || ch === '9') {\n return false;\n }\n if (!isOctalDigit(ch)) {\n return true;\n }\n }\n\n return true;\n }\n\n function scanNumericLiteral() {\n var number, start, ch;\n\n ch = source[index];\n assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'),\n 'Numeric literal must start with a decimal digit or a decimal point');\n\n start = index;\n number = '';\n if (ch !== '.') {\n number = source[index++];\n ch = source[index];\n\n // Hex number starts with '0x'.\n // Octal number starts with '0'.\n // Octal number in ES6 starts with '0o'.\n // Binary number in ES6 starts with '0b'.\n if (number === '0') {\n if (ch === 'x' || ch === 'X') {\n ++index;\n return scanHexLiteral(start);\n }\n if (ch === 'b' || ch === 'B') {\n ++index;\n return scanBinaryLiteral(start);\n }\n if (ch === 'o' || ch === 'O') {\n return scanOctalLiteral(ch, start);\n }\n\n if (isOctalDigit(ch)) {\n if (isImplicitOctalLiteral()) {\n return scanOctalLiteral(ch, start);\n }\n }\n }\n\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === '.') {\n number += source[index++];\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === 'e' || ch === 'E') {\n number += source[index++];\n\n ch = source[index];\n if (ch === '+' || ch === '-') {\n number += source[index++];\n }\n if (isDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n } else {\n throwUnexpectedToken();\n }\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwUnexpectedToken();\n }\n\n return {\n type: Token.NumericLiteral,\n value: parseFloat(number),\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n // ECMA-262 11.8.4 String Literals\n\n function scanStringLiteral() {\n var str = '', quote, start, ch, unescaped, octToDec, octal = false;\n\n quote = source[index];\n assert((quote === '\\'' || quote === '\"'),\n 'String literal must starts with a quote');\n\n start = index;\n ++index;\n\n while (index < length) {\n ch = source[index++];\n\n if (ch === quote) {\n quote = '';\n break;\n } else if (ch === '\\\\') {\n ch = source[index++];\n if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'u':\n case 'x':\n if (source[index] === '{') {\n ++index;\n str += scanUnicodeCodePointEscape();\n } else {\n unescaped = scanHexEscape(ch);\n if (!unescaped) {\n throw throwUnexpectedToken();\n }\n str += unescaped;\n }\n break;\n case 'n':\n str += '\\n';\n break;\n case 'r':\n str += '\\r';\n break;\n case 't':\n str += '\\t';\n break;\n case 'b':\n str += '\\b';\n break;\n case 'f':\n str += '\\f';\n break;\n case 'v':\n str += '\\x0B';\n break;\n case '8':\n case '9':\n str += ch;\n tolerateUnexpectedToken();\n break;\n\n default:\n if (isOctalDigit(ch)) {\n octToDec = octalToDecimal(ch);\n\n octal = octToDec.octal || octal;\n str += String.fromCharCode(octToDec.code);\n } else {\n str += ch;\n }\n break;\n }\n } else {\n ++lineNumber;\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n lineStart = index;\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n break;\n } else {\n str += ch;\n }\n }\n\n if (quote !== '') {\n throwUnexpectedToken();\n }\n\n return {\n type: Token.StringLiteral,\n value: str,\n octal: octal,\n lineNumber: startLineNumber,\n lineStart: startLineStart,\n start: start,\n end: index\n };\n }\n\n // ECMA-262 11.8.6 Template Literal Lexical Components\n\n function scanTemplate() {\n var cooked = '', ch, start, rawOffset, terminated, head, tail, restore, unescaped;\n\n terminated = false;\n tail = false;\n start = index;\n head = (source[index] === '`');\n rawOffset = 2;\n\n ++index;\n\n while (index < length) {\n ch = source[index++];\n if (ch === '`') {\n rawOffset = 1;\n tail = true;\n terminated = true;\n break;\n } else if (ch === '$') {\n if (source[index] === '{') {\n state.curlyStack.push('${');\n ++index;\n terminated = true;\n break;\n }\n cooked += ch;\n } else if (ch === '\\\\') {\n ch = source[index++];\n if (!isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'n':\n cooked += '\\n';\n break;\n case 'r':\n cooked += '\\r';\n break;\n case 't':\n cooked += '\\t';\n break;\n case 'u':\n case 'x':\n if (source[index] === '{') {\n ++index;\n cooked += scanUnicodeCodePointEscape();\n } else {\n restore = index;\n unescaped = scanHexEscape(ch);\n if (unescaped) {\n cooked += unescaped;\n } else {\n index = restore;\n cooked += ch;\n }\n }\n break;\n case 'b':\n cooked += '\\b';\n break;\n case 'f':\n cooked += '\\f';\n break;\n case 'v':\n cooked += '\\v';\n break;\n\n default:\n if (ch === '0') {\n if (isDecimalDigit(source.charCodeAt(index))) {\n // Illegal: \\01 \\02 and so on\n throwError(Messages.TemplateOctalLiteral);\n }\n cooked += '\\0';\n } else if (isOctalDigit(ch)) {\n // Illegal: \\1 \\2\n throwError(Messages.TemplateOctalLiteral);\n } else {\n cooked += ch;\n }\n break;\n }\n } else {\n ++lineNumber;\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n lineStart = index;\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n ++lineNumber;\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n lineStart = index;\n cooked += '\\n';\n } else {\n cooked += ch;\n }\n }\n\n if (!terminated) {\n throwUnexpectedToken();\n }\n\n if (!head) {\n state.curlyStack.pop();\n }\n\n return {\n type: Token.Template,\n value: {\n cooked: cooked,\n raw: source.slice(start + 1, index - rawOffset)\n },\n head: head,\n tail: tail,\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n // ECMA-262 11.8.5 Regular Expression Literals\n\n function testRegExp(pattern, flags) {\n // The BMP character to use as a replacement for astral symbols when\n // translating an ES6 \"u\"-flagged pattern to an ES5-compatible\n // approximation.\n // Note: replacing with '\\uFFFF' enables false positives in unlikely\n // scenarios. For example, `[\\u{1044f}-\\u{10440}]` is an invalid\n // pattern that would not be detected by this substitution.\n var astralSubstitute = '\\uFFFF',\n tmp = pattern;\n\n if (flags.indexOf('u') >= 0) {\n tmp = tmp\n // Replace every Unicode escape sequence with the equivalent\n // BMP character or a constant ASCII code point in the case of\n // astral symbols. (See the above note on `astralSubstitute`\n // for more information.)\n .replace(/\\\\u\\{([0-9a-fA-F]+)\\}|\\\\u([a-fA-F0-9]{4})/g, function ($0, $1, $2) {\n var codePoint = parseInt($1 || $2, 16);\n if (codePoint > 0x10FFFF) {\n throwUnexpectedToken(null, Messages.InvalidRegExp);\n }\n if (codePoint <= 0xFFFF) {\n return String.fromCharCode(codePoint);\n }\n return astralSubstitute;\n })\n // Replace each paired surrogate with a single ASCII symbol to\n // avoid throwing on regular expressions that are only valid in\n // combination with the \"u\" flag.\n .replace(\n /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,\n astralSubstitute\n );\n }\n\n // First, detect invalid regular expressions.\n try {\n RegExp(tmp);\n } catch (e) {\n throwUnexpectedToken(null, Messages.InvalidRegExp);\n }\n\n // Return a regular expression object for this pattern-flag pair, or\n // `null` in case the current environment doesn't support the flags it\n // uses.\n try {\n return new RegExp(pattern, flags);\n } catch (exception) {\n return null;\n }\n }\n\n function scanRegExpBody() {\n var ch, str, classMarker, terminated, body;\n\n ch = source[index];\n assert(ch === '/', 'Regular expression literal must start with a slash');\n str = source[index++];\n\n classMarker = false;\n terminated = false;\n while (index < length) {\n ch = source[index++];\n str += ch;\n if (ch === '\\\\') {\n ch = source[index++];\n // ECMA-262 7.8.5\n if (isLineTerminator(ch.charCodeAt(0))) {\n throwUnexpectedToken(null, Messages.UnterminatedRegExp);\n }\n str += ch;\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n throwUnexpectedToken(null, Messages.UnterminatedRegExp);\n } else if (classMarker) {\n if (ch === ']') {\n classMarker = false;\n }\n } else {\n if (ch === '/') {\n terminated = true;\n break;\n } else if (ch === '[') {\n classMarker = true;\n }\n }\n }\n\n if (!terminated) {\n throwUnexpectedToken(null, Messages.UnterminatedRegExp);\n }\n\n // Exclude leading and trailing slash.\n body = str.substr(1, str.length - 2);\n return {\n value: body,\n literal: str\n };\n }\n\n function scanRegExpFlags() {\n var ch, str, flags, restore;\n\n str = '';\n flags = '';\n while (index < length) {\n ch = source[index];\n if (!isIdentifierPart(ch.charCodeAt(0))) {\n break;\n }\n\n ++index;\n if (ch === '\\\\' && index < length) {\n ch = source[index];\n if (ch === 'u') {\n ++index;\n restore = index;\n ch = scanHexEscape('u');\n if (ch) {\n flags += ch;\n for (str += '\\\\u'; restore < index; ++restore) {\n str += source[restore];\n }\n } else {\n index = restore;\n flags += 'u';\n str += '\\\\u';\n }\n tolerateUnexpectedToken();\n } else {\n str += '\\\\';\n tolerateUnexpectedToken();\n }\n } else {\n flags += ch;\n str += ch;\n }\n }\n\n return {\n value: flags,\n literal: str\n };\n }\n\n function scanRegExp() {\n var start, body, flags, value;\n scanning = true;\n\n lookahead = null;\n skipComment();\n start = index;\n\n body = scanRegExpBody();\n flags = scanRegExpFlags();\n value = testRegExp(body.value, flags.value);\n scanning = false;\n if (extra.tokenize) {\n return {\n type: Token.RegularExpression,\n value: value,\n regex: {\n pattern: body.value,\n flags: flags.value\n },\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n return {\n literal: body.literal + flags.literal,\n value: value,\n regex: {\n pattern: body.value,\n flags: flags.value\n },\n start: start,\n end: index\n };\n }\n\n function collectRegex() {\n var pos, loc, regex, token;\n\n skipComment();\n\n pos = index;\n loc = {\n start: {\n line: lineNumber,\n column: index - lineStart\n }\n };\n\n regex = scanRegExp();\n\n loc.end = {\n line: lineNumber,\n column: index - lineStart\n };\n\n /* istanbul ignore next */\n if (!extra.tokenize) {\n // Pop the previous token, which is likely '/' or '/='\n if (extra.tokens.length > 0) {\n token = extra.tokens[extra.tokens.length - 1];\n if (token.range[0] === pos && token.type === 'Punctuator') {\n if (token.value === '/' || token.value === '/=') {\n extra.tokens.pop();\n }\n }\n }\n\n extra.tokens.push({\n type: 'RegularExpression',\n value: regex.literal,\n regex: regex.regex,\n range: [pos, index],\n loc: loc\n });\n }\n\n return regex;\n }\n\n function isIdentifierName(token) {\n return token.type === Token.Identifier ||\n token.type === Token.Keyword ||\n token.type === Token.BooleanLiteral ||\n token.type === Token.NullLiteral;\n }\n\n // Using the following algorithm:\n // https://github.com/mozilla/sweet.js/wiki/design\n\n function advanceSlash() {\n var regex, previous, check;\n\n function testKeyword(value) {\n return value && (value.length > 1) && (value[0] >= 'a') && (value[0] <= 'z');\n }\n\n previous = extra.tokenValues[extra.tokens.length - 1];\n regex = (previous !== null);\n\n switch (previous) {\n case 'this':\n case ']':\n regex = false;\n break;\n\n case ')':\n check = extra.tokenValues[extra.openParenToken - 1];\n regex = (check === 'if' || check === 'while' || check === 'for' || check === 'with');\n break;\n\n case '}':\n // Dividing a function by anything makes little sense,\n // but we have to check for that.\n regex = false;\n if (testKeyword(extra.tokenValues[extra.openCurlyToken - 3])) {\n // Anonymous function, e.g. function(){} /42\n check = extra.tokenValues[extra.openCurlyToken - 4];\n regex = check ? (FnExprTokens.indexOf(check) < 0) : false;\n } else if (testKeyword(extra.tokenValues[extra.openCurlyToken - 4])) {\n // Named function, e.g. function f(){} /42/\n check = extra.tokenValues[extra.openCurlyToken - 5];\n regex = check ? (FnExprTokens.indexOf(check) < 0) : true;\n }\n }\n\n return regex ? collectRegex() : scanPunctuator();\n }\n\n function advance() {\n var cp, token;\n\n if (index >= length) {\n return {\n type: Token.EOF,\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: index,\n end: index\n };\n }\n\n cp = source.charCodeAt(index);\n\n if (isIdentifierStart(cp)) {\n token = scanIdentifier();\n if (strict && isStrictModeReservedWord(token.value)) {\n token.type = Token.Keyword;\n }\n return token;\n }\n\n // Very common: ( and ) and ;\n if (cp === 0x28 || cp === 0x29 || cp === 0x3B) {\n return scanPunctuator();\n }\n\n // String literal starts with single quote (U+0027) or double quote (U+0022).\n if (cp === 0x27 || cp === 0x22) {\n return scanStringLiteral();\n }\n\n // Dot (.) U+002E can also start a floating-point number, hence the need\n // to check the next character.\n if (cp === 0x2E) {\n if (isDecimalDigit(source.charCodeAt(index + 1))) {\n return scanNumericLiteral();\n }\n return scanPunctuator();\n }\n\n if (isDecimalDigit(cp)) {\n return scanNumericLiteral();\n }\n\n // Slash (/) U+002F can also start a regex.\n if (extra.tokenize && cp === 0x2F) {\n return advanceSlash();\n }\n\n // Template literals start with ` (U+0060) for template head\n // or } (U+007D) for template middle or template tail.\n if (cp === 0x60 || (cp === 0x7D && state.curlyStack[state.curlyStack.length - 1] === '${')) {\n return scanTemplate();\n }\n\n // Possible identifier start in a surrogate pair.\n if (cp >= 0xD800 && cp < 0xDFFF) {\n cp = codePointAt(index);\n if (isIdentifierStart(cp)) {\n return scanIdentifier();\n }\n }\n\n return scanPunctuator();\n }\n\n function collectToken() {\n var loc, token, value, entry;\n\n loc = {\n start: {\n line: lineNumber,\n column: index - lineStart\n }\n };\n\n token = advance();\n loc.end = {\n line: lineNumber,\n column: index - lineStart\n };\n\n if (token.type !== Token.EOF) {\n value = source.slice(token.start, token.end);\n entry = {\n type: TokenName[token.type],\n value: value,\n range: [token.start, token.end],\n loc: loc\n };\n if (token.regex) {\n entry.regex = {\n pattern: token.regex.pattern,\n flags: token.regex.flags\n };\n }\n if (extra.tokenValues) {\n extra.tokenValues.push((entry.type === 'Punctuator' || entry.type === 'Keyword') ? entry.value : null);\n }\n if (extra.tokenize) {\n if (!extra.range) {\n delete entry.range;\n }\n if (!extra.loc) {\n delete entry.loc;\n }\n if (extra.delegate) {\n entry = extra.delegate(entry);\n }\n }\n extra.tokens.push(entry);\n }\n\n return token;\n }\n\n function lex() {\n var token;\n scanning = true;\n\n lastIndex = index;\n lastLineNumber = lineNumber;\n lastLineStart = lineStart;\n\n skipComment();\n\n token = lookahead;\n\n startIndex = index;\n startLineNumber = lineNumber;\n startLineStart = lineStart;\n\n lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance();\n scanning = false;\n return token;\n }\n\n function peek() {\n scanning = true;\n\n skipComment();\n\n lastIndex = index;\n lastLineNumber = lineNumber;\n lastLineStart = lineStart;\n\n startIndex = index;\n startLineNumber = lineNumber;\n startLineStart = lineStart;\n\n lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance();\n scanning = false;\n }\n\n function Position() {\n this.line = startLineNumber;\n this.column = startIndex - startLineStart;\n }\n\n function SourceLocation() {\n this.start = new Position();\n this.end = null;\n }\n\n function WrappingSourceLocation(startToken) {\n this.start = {\n line: startToken.lineNumber,\n column: startToken.start - startToken.lineStart\n };\n this.end = null;\n }\n\n function Node() {\n if (extra.range) {\n this.range = [startIndex, 0];\n }\n if (extra.loc) {\n this.loc = new SourceLocation();\n }\n }\n\n function WrappingNode(startToken) {\n if (extra.range) {\n this.range = [startToken.start, 0];\n }\n if (extra.loc) {\n this.loc = new WrappingSourceLocation(startToken);\n }\n }\n\n WrappingNode.prototype = Node.prototype = {\n\n processComment: function () {\n var lastChild,\n innerComments,\n leadingComments,\n trailingComments,\n bottomRight = extra.bottomRightStack,\n i,\n comment,\n last = bottomRight[bottomRight.length - 1];\n\n if (this.type === Syntax.Program) {\n if (this.body.length > 0) {\n return;\n }\n }\n /**\n * patch innnerComments for properties empty block\n * `function a() {/** comments **\\/}`\n */\n\n if (this.type === Syntax.BlockStatement && this.body.length === 0) {\n innerComments = [];\n for (i = extra.leadingComments.length - 1; i >= 0; --i) {\n comment = extra.leadingComments[i];\n if (this.range[1] >= comment.range[1]) {\n innerComments.unshift(comment);\n extra.leadingComments.splice(i, 1);\n extra.trailingComments.splice(i, 1);\n }\n }\n if (innerComments.length) {\n this.innerComments = innerComments;\n //bottomRight.push(this);\n return;\n }\n }\n\n if (extra.trailingComments.length > 0) {\n trailingComments = [];\n for (i = extra.trailingComments.length - 1; i >= 0; --i) {\n comment = extra.trailingComments[i];\n if (comment.range[0] >= this.range[1]) {\n trailingComments.unshift(comment);\n extra.trailingComments.splice(i, 1);\n }\n }\n extra.trailingComments = [];\n } else {\n if (last && last.trailingComments && last.trailingComments[0].range[0] >= this.range[1]) {\n trailingComments = last.trailingComments;\n delete last.trailingComments;\n }\n }\n\n // Eating the stack.\n while (last && last.range[0] >= this.range[0]) {\n lastChild = bottomRight.pop();\n last = bottomRight[bottomRight.length - 1];\n }\n\n if (lastChild) {\n if (lastChild.leadingComments) {\n leadingComments = [];\n for (i = lastChild.leadingComments.length - 1; i >= 0; --i) {\n comment = lastChild.leadingComments[i];\n if (comment.range[1] <= this.range[0]) {\n leadingComments.unshift(comment);\n lastChild.leadingComments.splice(i, 1);\n }\n }\n\n if (!lastChild.leadingComments.length) {\n lastChild.leadingComments = undefined;\n }\n }\n } else if (extra.leadingComments.length > 0) {\n leadingComments = [];\n for (i = extra.leadingComments.length - 1; i >= 0; --i) {\n comment = extra.leadingComments[i];\n if (comment.range[1] <= this.range[0]) {\n leadingComments.unshift(comment);\n extra.leadingComments.splice(i, 1);\n }\n }\n }\n\n\n if (leadingComments && leadingComments.length > 0) {\n this.leadingComments = leadingComments;\n }\n if (trailingComments && trailingComments.length > 0) {\n this.trailingComments = trailingComments;\n }\n\n bottomRight.push(this);\n },\n\n finish: function () {\n if (extra.range) {\n this.range[1] = lastIndex;\n }\n if (extra.loc) {\n this.loc.end = {\n line: lastLineNumber,\n column: lastIndex - lastLineStart\n };\n if (extra.source) {\n this.loc.source = extra.source;\n }\n }\n\n if (extra.attachComment) {\n this.processComment();\n }\n },\n\n finishArrayExpression: function (elements) {\n this.type = Syntax.ArrayExpression;\n this.elements = elements;\n this.finish();\n return this;\n },\n\n finishArrayPattern: function (elements) {\n this.type = Syntax.ArrayPattern;\n this.elements = elements;\n this.finish();\n return this;\n },\n\n finishArrowFunctionExpression: function (params, defaults, body, expression) {\n this.type = Syntax.ArrowFunctionExpression;\n this.id = null;\n this.params = params;\n this.defaults = defaults;\n this.body = body;\n this.generator = false;\n this.expression = expression;\n this.finish();\n return this;\n },\n\n finishAssignmentExpression: function (operator, left, right) {\n this.type = Syntax.AssignmentExpression;\n this.operator = operator;\n this.left = left;\n this.right = right;\n this.finish();\n return this;\n },\n\n finishAssignmentPattern: function (left, right) {\n this.type = Syntax.AssignmentPattern;\n this.left = left;\n this.right = right;\n this.finish();\n return this;\n },\n\n finishBinaryExpression: function (operator, left, right) {\n this.type = (operator === '||' || operator === '&&') ? Syntax.LogicalExpression : Syntax.BinaryExpression;\n this.operator = operator;\n this.left = left;\n this.right = right;\n this.finish();\n return this;\n },\n\n finishBlockStatement: function (body) {\n this.type = Syntax.BlockStatement;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishBreakStatement: function (label) {\n this.type = Syntax.BreakStatement;\n this.label = label;\n this.finish();\n return this;\n },\n\n finishCallExpression: function (callee, args) {\n this.type = Syntax.CallExpression;\n this.callee = callee;\n this.arguments = args;\n this.finish();\n return this;\n },\n\n finishCatchClause: function (param, body) {\n this.type = Syntax.CatchClause;\n this.param = param;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishClassBody: function (body) {\n this.type = Syntax.ClassBody;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishClassDeclaration: function (id, superClass, body) {\n this.type = Syntax.ClassDeclaration;\n this.id = id;\n this.superClass = superClass;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishClassExpression: function (id, superClass, body) {\n this.type = Syntax.ClassExpression;\n this.id = id;\n this.superClass = superClass;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishConditionalExpression: function (test, consequent, alternate) {\n this.type = Syntax.ConditionalExpression;\n this.test = test;\n this.consequent = consequent;\n this.alternate = alternate;\n this.finish();\n return this;\n },\n\n finishContinueStatement: function (label) {\n this.type = Syntax.ContinueStatement;\n this.label = label;\n this.finish();\n return this;\n },\n\n finishDebuggerStatement: function () {\n this.type = Syntax.DebuggerStatement;\n this.finish();\n return this;\n },\n\n finishDoWhileStatement: function (body, test) {\n this.type = Syntax.DoWhileStatement;\n this.body = body;\n this.test = test;\n this.finish();\n return this;\n },\n\n finishEmptyStatement: function () {\n this.type = Syntax.EmptyStatement;\n this.finish();\n return this;\n },\n\n finishExpressionStatement: function (expression) {\n this.type = Syntax.ExpressionStatement;\n this.expression = expression;\n this.finish();\n return this;\n },\n\n finishForStatement: function (init, test, update, body) {\n this.type = Syntax.ForStatement;\n this.init = init;\n this.test = test;\n this.update = update;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishForOfStatement: function (left, right, body) {\n this.type = Syntax.ForOfStatement;\n this.left = left;\n this.right = right;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishForInStatement: function (left, right, body) {\n this.type = Syntax.ForInStatement;\n this.left = left;\n this.right = right;\n this.body = body;\n this.each = false;\n this.finish();\n return this;\n },\n\n finishFunctionDeclaration: function (id, params, defaults, body, generator) {\n this.type = Syntax.FunctionDeclaration;\n this.id = id;\n this.params = params;\n this.defaults = defaults;\n this.body = body;\n this.generator = generator;\n this.expression = false;\n this.finish();\n return this;\n },\n\n finishFunctionExpression: function (id, params, defaults, body, generator) {\n this.type = Syntax.FunctionExpression;\n this.id = id;\n this.params = params;\n this.defaults = defaults;\n this.body = body;\n this.generator = generator;\n this.expression = false;\n this.finish();\n return this;\n },\n\n finishIdentifier: function (name) {\n this.type = Syntax.Identifier;\n this.name = name;\n this.finish();\n return this;\n },\n\n finishIfStatement: function (test, consequent, alternate) {\n this.type = Syntax.IfStatement;\n this.test = test;\n this.consequent = consequent;\n this.alternate = alternate;\n this.finish();\n return this;\n },\n\n finishLabeledStatement: function (label, body) {\n this.type = Syntax.LabeledStatement;\n this.label = label;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishLiteral: function (token) {\n this.type = Syntax.Literal;\n this.value = token.value;\n this.raw = source.slice(token.start, token.end);\n if (token.regex) {\n this.regex = token.regex;\n }\n this.finish();\n return this;\n },\n\n finishMemberExpression: function (accessor, object, property) {\n this.type = Syntax.MemberExpression;\n this.computed = accessor === '[';\n this.object = object;\n this.property = property;\n this.finish();\n return this;\n },\n\n finishMetaProperty: function (meta, property) {\n this.type = Syntax.MetaProperty;\n this.meta = meta;\n this.property = property;\n this.finish();\n return this;\n },\n\n finishNewExpression: function (callee, args) {\n this.type = Syntax.NewExpression;\n this.callee = callee;\n this.arguments = args;\n this.finish();\n return this;\n },\n\n finishObjectExpression: function (properties) {\n this.type = Syntax.ObjectExpression;\n this.properties = properties;\n this.finish();\n return this;\n },\n\n finishObjectPattern: function (properties) {\n this.type = Syntax.ObjectPattern;\n this.properties = properties;\n this.finish();\n return this;\n },\n\n finishPostfixExpression: function (operator, argument) {\n this.type = Syntax.UpdateExpression;\n this.operator = operator;\n this.argument = argument;\n this.prefix = false;\n this.finish();\n return this;\n },\n\n finishProgram: function (body, sourceType) {\n this.type = Syntax.Program;\n this.body = body;\n this.sourceType = sourceType;\n this.finish();\n return this;\n },\n\n finishProperty: function (kind, key, computed, value, method, shorthand) {\n this.type = Syntax.Property;\n this.key = key;\n this.computed = computed;\n this.value = value;\n this.kind = kind;\n this.method = method;\n this.shorthand = shorthand;\n this.finish();\n return this;\n },\n\n finishRestElement: function (argument) {\n this.type = Syntax.RestElement;\n this.argument = argument;\n this.finish();\n return this;\n },\n\n finishReturnStatement: function (argument) {\n this.type = Syntax.ReturnStatement;\n this.argument = argument;\n this.finish();\n return this;\n },\n\n finishSequenceExpression: function (expressions) {\n this.type = Syntax.SequenceExpression;\n this.expressions = expressions;\n this.finish();\n return this;\n },\n\n finishSpreadElement: function (argument) {\n this.type = Syntax.SpreadElement;\n this.argument = argument;\n this.finish();\n return this;\n },\n\n finishSwitchCase: function (test, consequent) {\n this.type = Syntax.SwitchCase;\n this.test = test;\n this.consequent = consequent;\n this.finish();\n return this;\n },\n\n finishSuper: function () {\n this.type = Syntax.Super;\n this.finish();\n return this;\n },\n\n finishSwitchStatement: function (discriminant, cases) {\n this.type = Syntax.SwitchStatement;\n this.discriminant = discriminant;\n this.cases = cases;\n this.finish();\n return this;\n },\n\n finishTaggedTemplateExpression: function (tag, quasi) {\n this.type = Syntax.TaggedTemplateExpression;\n this.tag = tag;\n this.quasi = quasi;\n this.finish();\n return this;\n },\n\n finishTemplateElement: function (value, tail) {\n this.type = Syntax.TemplateElement;\n this.value = value;\n this.tail = tail;\n this.finish();\n return this;\n },\n\n finishTemplateLiteral: function (quasis, expressions) {\n this.type = Syntax.TemplateLiteral;\n this.quasis = quasis;\n this.expressions = expressions;\n this.finish();\n return this;\n },\n\n finishThisExpression: function () {\n this.type = Syntax.ThisExpression;\n this.finish();\n return this;\n },\n\n finishThrowStatement: function (argument) {\n this.type = Syntax.ThrowStatement;\n this.argument = argument;\n this.finish();\n return this;\n },\n\n finishTryStatement: function (block, handler, finalizer) {\n this.type = Syntax.TryStatement;\n this.block = block;\n this.guardedHandlers = [];\n this.handlers = handler ? [handler] : [];\n this.handler = handler;\n this.finalizer = finalizer;\n this.finish();\n return this;\n },\n\n finishUnaryExpression: function (operator, argument) {\n this.type = (operator === '++' || operator === '--') ? Syntax.UpdateExpression : Syntax.UnaryExpression;\n this.operator = operator;\n this.argument = argument;\n this.prefix = true;\n this.finish();\n return this;\n },\n\n finishVariableDeclaration: function (declarations) {\n this.type = Syntax.VariableDeclaration;\n this.declarations = declarations;\n this.kind = 'var';\n this.finish();\n return this;\n },\n\n finishLexicalDeclaration: function (declarations, kind) {\n this.type = Syntax.VariableDeclaration;\n this.declarations = declarations;\n this.kind = kind;\n this.finish();\n return this;\n },\n\n finishVariableDeclarator: function (id, init) {\n this.type = Syntax.VariableDeclarator;\n this.id = id;\n this.init = init;\n this.finish();\n return this;\n },\n\n finishWhileStatement: function (test, body) {\n this.type = Syntax.WhileStatement;\n this.test = test;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishWithStatement: function (object, body) {\n this.type = Syntax.WithStatement;\n this.object = object;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishExportSpecifier: function (local, exported) {\n this.type = Syntax.ExportSpecifier;\n this.exported = exported || local;\n this.local = local;\n this.finish();\n return this;\n },\n\n finishImportDefaultSpecifier: function (local) {\n this.type = Syntax.ImportDefaultSpecifier;\n this.local = local;\n this.finish();\n return this;\n },\n\n finishImportNamespaceSpecifier: function (local) {\n this.type = Syntax.ImportNamespaceSpecifier;\n this.local = local;\n this.finish();\n return this;\n },\n\n finishExportNamedDeclaration: function (declaration, specifiers, src) {\n this.type = Syntax.ExportNamedDeclaration;\n this.declaration = declaration;\n this.specifiers = specifiers;\n this.source = src;\n this.finish();\n return this;\n },\n\n finishExportDefaultDeclaration: function (declaration) {\n this.type = Syntax.ExportDefaultDeclaration;\n this.declaration = declaration;\n this.finish();\n return this;\n },\n\n finishExportAllDeclaration: function (src) {\n this.type = Syntax.ExportAllDeclaration;\n this.source = src;\n this.finish();\n return this;\n },\n\n finishImportSpecifier: function (local, imported) {\n this.type = Syntax.ImportSpecifier;\n this.local = local || imported;\n this.imported = imported;\n this.finish();\n return this;\n },\n\n finishImportDeclaration: function (specifiers, src) {\n this.type = Syntax.ImportDeclaration;\n this.specifiers = specifiers;\n this.source = src;\n this.finish();\n return this;\n },\n\n finishYieldExpression: function (argument, delegate) {\n this.type = Syntax.YieldExpression;\n this.argument = argument;\n this.delegate = delegate;\n this.finish();\n return this;\n }\n };\n\n\n function recordError(error) {\n var e, existing;\n\n for (e = 0; e < extra.errors.length; e++) {\n existing = extra.errors[e];\n // Prevent duplicated error.\n /* istanbul ignore next */\n if (existing.index === error.index && existing.message === error.message) {\n return;\n }\n }\n\n extra.errors.push(error);\n }\n\n function constructError(msg, column) {\n var error = new Error(msg);\n try {\n throw error;\n } catch (base) {\n /* istanbul ignore else */\n if (Object.create && Object.defineProperty) {\n error = Object.create(base);\n Object.defineProperty(error, 'column', { value: column });\n }\n } finally {\n return error;\n }\n }\n\n function createError(line, pos, description) {\n var msg, column, error;\n\n msg = 'Line ' + line + ': ' + description;\n column = pos - (scanning ? lineStart : lastLineStart) + 1;\n error = constructError(msg, column);\n error.lineNumber = line;\n error.description = description;\n error.index = pos;\n return error;\n }\n\n // Throw an exception\n\n function throwError(messageFormat) {\n var args, msg;\n\n args = Array.prototype.slice.call(arguments, 1);\n msg = messageFormat.replace(/%(\\d)/g,\n function (whole, idx) {\n assert(idx < args.length, 'Message reference must be in range');\n return args[idx];\n }\n );\n\n throw createError(lastLineNumber, lastIndex, msg);\n }\n\n function tolerateError(messageFormat) {\n var args, msg, error;\n\n args = Array.prototype.slice.call(arguments, 1);\n /* istanbul ignore next */\n msg = messageFormat.replace(/%(\\d)/g,\n function (whole, idx) {\n assert(idx < args.length, 'Message reference must be in range');\n return args[idx];\n }\n );\n\n error = createError(lineNumber, lastIndex, msg);\n if (extra.errors) {\n recordError(error);\n } else {\n throw error;\n }\n }\n\n // Throw an exception because of the token.\n\n function unexpectedTokenError(token, message) {\n var value, msg = message || Messages.UnexpectedToken;\n\n if (token) {\n if (!message) {\n msg = (token.type === Token.EOF) ? Messages.UnexpectedEOS :\n (token.type === Token.Identifier) ? Messages.UnexpectedIdentifier :\n (token.type === Token.NumericLiteral) ? Messages.UnexpectedNumber :\n (token.type === Token.StringLiteral) ? Messages.UnexpectedString :\n (token.type === Token.Template) ? Messages.UnexpectedTemplate :\n Messages.UnexpectedToken;\n\n if (token.type === Token.Keyword) {\n if (isFutureReservedWord(token.value)) {\n msg = Messages.UnexpectedReserved;\n } else if (strict && isStrictModeReservedWord(token.value)) {\n msg = Messages.StrictReservedWord;\n }\n }\n }\n\n value = (token.type === Token.Template) ? token.value.raw : token.value;\n } else {\n value = 'ILLEGAL';\n }\n\n msg = msg.replace('%0', value);\n\n return (token && typeof token.lineNumber === 'number') ?\n createError(token.lineNumber, token.start, msg) :\n createError(scanning ? lineNumber : lastLineNumber, scanning ? index : lastIndex, msg);\n }\n\n function throwUnexpectedToken(token, message) {\n throw unexpectedTokenError(token, message);\n }\n\n function tolerateUnexpectedToken(token, message) {\n var error = unexpectedTokenError(token, message);\n if (extra.errors) {\n recordError(error);\n } else {\n throw error;\n }\n }\n\n // Expect the next token to match the specified punctuator.\n // If not, an exception will be thrown.\n\n function expect(value) {\n var token = lex();\n if (token.type !== Token.Punctuator || token.value !== value) {\n throwUnexpectedToken(token);\n }\n }\n\n /**\n * @name expectCommaSeparator\n * @description Quietly expect a comma when in tolerant mode, otherwise delegates\n * to expect(value)\n * @since 2.0\n */\n function expectCommaSeparator() {\n var token;\n\n if (extra.errors) {\n token = lookahead;\n if (token.type === Token.Punctuator && token.value === ',') {\n lex();\n } else if (token.type === Token.Punctuator && token.value === ';') {\n lex();\n tolerateUnexpectedToken(token);\n } else {\n tolerateUnexpectedToken(token, Messages.UnexpectedToken);\n }\n } else {\n expect(',');\n }\n }\n\n // Expect the next token to match the specified keyword.\n // If not, an exception will be thrown.\n\n function expectKeyword(keyword) {\n var token = lex();\n if (token.type !== Token.Keyword || token.value !== keyword) {\n throwUnexpectedToken(token);\n }\n }\n\n // Return true if the next token matches the specified punctuator.\n\n function match(value) {\n return lookahead.type === Token.Punctuator && lookahead.value === value;\n }\n\n // Return true if the next token matches the specified keyword\n\n function matchKeyword(keyword) {\n return lookahead.type === Token.Keyword && lookahead.value === keyword;\n }\n\n // Return true if the next token matches the specified contextual keyword\n // (where an identifier is sometimes a keyword depending on the context)\n\n function matchContextualKeyword(keyword) {\n return lookahead.type === Token.Identifier && lookahead.value === keyword;\n }\n\n // Return true if the next token is an assignment operator\n\n function matchAssign() {\n var op;\n\n if (lookahead.type !== Token.Punctuator) {\n return false;\n }\n op = lookahead.value;\n return op === '=' ||\n op === '*=' ||\n op === '/=' ||\n op === '%=' ||\n op === '+=' ||\n op === '-=' ||\n op === '<<=' ||\n op === '>>=' ||\n op === '>>>=' ||\n op === '&=' ||\n op === '^=' ||\n op === '|=';\n }\n\n function consumeSemicolon() {\n // Catch the very common case first: immediately a semicolon (U+003B).\n if (source.charCodeAt(startIndex) === 0x3B || match(';')) {\n lex();\n return;\n }\n\n if (hasLineTerminator) {\n return;\n }\n\n // FIXME(ikarienator): this is seemingly an issue in the previous location info convention.\n lastIndex = startIndex;\n lastLineNumber = startLineNumber;\n lastLineStart = startLineStart;\n\n if (lookahead.type !== Token.EOF && !match('}')) {\n throwUnexpectedToken(lookahead);\n }\n }\n\n // Cover grammar support.\n //\n // When an assignment expression position starts with an left parenthesis, the determination of the type\n // of the syntax is to be deferred arbitrarily long until the end of the parentheses pair (plus a lookahead)\n // or the first comma. This situation also defers the determination of all the expressions nested in the pair.\n //\n // There are three productions that can be parsed in a parentheses pair that needs to be determined\n // after the outermost pair is closed. They are:\n //\n // 1. AssignmentExpression\n // 2. BindingElements\n // 3. AssignmentTargets\n //\n // In order to avoid exponential backtracking, we use two flags to denote if the production can be\n // binding element or assignment target.\n //\n // The three productions have the relationship:\n //\n // BindingElements ⊆ AssignmentTargets ⊆ AssignmentExpression\n //\n // with a single exception that CoverInitializedName when used directly in an Expression, generates\n // an early error. Therefore, we need the third state, firstCoverInitializedNameError, to track the\n // first usage of CoverInitializedName and report it when we reached the end of the parentheses pair.\n //\n // isolateCoverGrammar function runs the given parser function with a new cover grammar context, and it does not\n // effect the current flags. This means the production the parser parses is only used as an expression. Therefore\n // the CoverInitializedName check is conducted.\n //\n // inheritCoverGrammar function runs the given parse function with a new cover grammar context, and it propagates\n // the flags outside of the parser. This means the production the parser parses is used as a part of a potential\n // pattern. The CoverInitializedName check is deferred.\n function isolateCoverGrammar(parser) {\n var oldIsBindingElement = isBindingElement,\n oldIsAssignmentTarget = isAssignmentTarget,\n oldFirstCoverInitializedNameError = firstCoverInitializedNameError,\n result;\n isBindingElement = true;\n isAssignmentTarget = true;\n firstCoverInitializedNameError = null;\n result = parser();\n if (firstCoverInitializedNameError !== null) {\n throwUnexpectedToken(firstCoverInitializedNameError);\n }\n isBindingElement = oldIsBindingElement;\n isAssignmentTarget = oldIsAssignmentTarget;\n firstCoverInitializedNameError = oldFirstCoverInitializedNameError;\n return result;\n }\n\n function inheritCoverGrammar(parser) {\n var oldIsBindingElement = isBindingElement,\n oldIsAssignmentTarget = isAssignmentTarget,\n oldFirstCoverInitializedNameError = firstCoverInitializedNameError,\n result;\n isBindingElement = true;\n isAssignmentTarget = true;\n firstCoverInitializedNameError = null;\n result = parser();\n isBindingElement = isBindingElement && oldIsBindingElement;\n isAssignmentTarget = isAssignmentTarget && oldIsAssignmentTarget;\n firstCoverInitializedNameError = oldFirstCoverInitializedNameError || firstCoverInitializedNameError;\n return result;\n }\n\n // ECMA-262 13.3.3 Destructuring Binding Patterns\n\n function parseArrayPattern(params, kind) {\n var node = new Node(), elements = [], rest, restNode;\n expect('[');\n\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else {\n if (match('...')) {\n restNode = new Node();\n lex();\n params.push(lookahead);\n rest = parseVariableIdentifier(kind);\n elements.push(restNode.finishRestElement(rest));\n break;\n } else {\n elements.push(parsePatternWithDefault(params, kind));\n }\n if (!match(']')) {\n expect(',');\n }\n }\n\n }\n\n expect(']');\n\n return node.finishArrayPattern(elements);\n }\n\n function parsePropertyPattern(params, kind) {\n var node = new Node(), key, keyToken, computed = match('['), init;\n if (lookahead.type === Token.Identifier) {\n keyToken = lookahead;\n key = parseVariableIdentifier();\n if (match('=')) {\n params.push(keyToken);\n lex();\n init = parseAssignmentExpression();\n\n return node.finishProperty(\n 'init', key, false,\n new WrappingNode(keyToken).finishAssignmentPattern(key, init), false, false);\n } else if (!match(':')) {\n params.push(keyToken);\n return node.finishProperty('init', key, false, key, false, true);\n }\n } else {\n key = parseObjectPropertyKey();\n }\n expect(':');\n init = parsePatternWithDefault(params, kind);\n return node.finishProperty('init', key, computed, init, false, false);\n }\n\n function parseObjectPattern(params, kind) {\n var node = new Node(), properties = [];\n\n expect('{');\n\n while (!match('}')) {\n properties.push(parsePropertyPattern(params, kind));\n if (!match('}')) {\n expect(',');\n }\n }\n\n lex();\n\n return node.finishObjectPattern(properties);\n }\n\n function parsePattern(params, kind) {\n if (match('[')) {\n return parseArrayPattern(params, kind);\n } else if (match('{')) {\n return parseObjectPattern(params, kind);\n } else if (matchKeyword('let')) {\n if (kind === 'const' || kind === 'let') {\n tolerateUnexpectedToken(lookahead, Messages.UnexpectedToken);\n }\n }\n\n params.push(lookahead);\n return parseVariableIdentifier(kind);\n }\n\n function parsePatternWithDefault(params, kind) {\n var startToken = lookahead, pattern, previousAllowYield, right;\n pattern = parsePattern(params, kind);\n if (match('=')) {\n lex();\n previousAllowYield = state.allowYield;\n state.allowYield = true;\n right = isolateCoverGrammar(parseAssignmentExpression);\n state.allowYield = previousAllowYield;\n pattern = new WrappingNode(startToken).finishAssignmentPattern(pattern, right);\n }\n return pattern;\n }\n\n // ECMA-262 12.2.5 Array Initializer\n\n function parseArrayInitializer() {\n var elements = [], node = new Node(), restSpread;\n\n expect('[');\n\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else if (match('...')) {\n restSpread = new Node();\n lex();\n restSpread.finishSpreadElement(inheritCoverGrammar(parseAssignmentExpression));\n\n if (!match(']')) {\n isAssignmentTarget = isBindingElement = false;\n expect(',');\n }\n elements.push(restSpread);\n } else {\n elements.push(inheritCoverGrammar(parseAssignmentExpression));\n\n if (!match(']')) {\n expect(',');\n }\n }\n }\n\n lex();\n\n return node.finishArrayExpression(elements);\n }\n\n // ECMA-262 12.2.6 Object Initializer\n\n function parsePropertyFunction(node, paramInfo, isGenerator) {\n var previousStrict, body;\n\n isAssignmentTarget = isBindingElement = false;\n\n previousStrict = strict;\n body = isolateCoverGrammar(parseFunctionSourceElements);\n\n if (strict && paramInfo.firstRestricted) {\n tolerateUnexpectedToken(paramInfo.firstRestricted, paramInfo.message);\n }\n if (strict && paramInfo.stricted) {\n tolerateUnexpectedToken(paramInfo.stricted, paramInfo.message);\n }\n\n strict = previousStrict;\n return node.finishFunctionExpression(null, paramInfo.params, paramInfo.defaults, body, isGenerator);\n }\n\n function parsePropertyMethodFunction() {\n var params, method, node = new Node(),\n previousAllowYield = state.allowYield;\n\n state.allowYield = false;\n params = parseParams();\n state.allowYield = previousAllowYield;\n\n state.allowYield = false;\n method = parsePropertyFunction(node, params, false);\n state.allowYield = previousAllowYield;\n\n return method;\n }\n\n function parseObjectPropertyKey() {\n var token, node = new Node(), expr;\n\n token = lex();\n\n // Note: This function is called only from parseObjectProperty(), where\n // EOF and Punctuator tokens are already filtered out.\n\n switch (token.type) {\n case Token.StringLiteral:\n case Token.NumericLiteral:\n if (strict && token.octal) {\n tolerateUnexpectedToken(token, Messages.StrictOctalLiteral);\n }\n return node.finishLiteral(token);\n case Token.Identifier:\n case Token.BooleanLiteral:\n case Token.NullLiteral:\n case Token.Keyword:\n return node.finishIdentifier(token.value);\n case Token.Punctuator:\n if (token.value === '[') {\n expr = isolateCoverGrammar(parseAssignmentExpression);\n expect(']');\n return expr;\n }\n break;\n }\n throwUnexpectedToken(token);\n }\n\n function lookaheadPropertyName() {\n switch (lookahead.type) {\n case Token.Identifier:\n case Token.StringLiteral:\n case Token.BooleanLiteral:\n case Token.NullLiteral:\n case Token.NumericLiteral:\n case Token.Keyword:\n return true;\n case Token.Punctuator:\n return lookahead.value === '[';\n }\n return false;\n }\n\n // This function is to try to parse a MethodDefinition as defined in 14.3. But in the case of object literals,\n // it might be called at a position where there is in fact a short hand identifier pattern or a data property.\n // This can only be determined after we consumed up to the left parentheses.\n //\n // In order to avoid back tracking, it returns `null` if the position is not a MethodDefinition and the caller\n // is responsible to visit other options.\n function tryParseMethodDefinition(token, key, computed, node) {\n var value, options, methodNode, params,\n previousAllowYield = state.allowYield;\n\n if (token.type === Token.Identifier) {\n // check for `get` and `set`;\n\n if (token.value === 'get' && lookaheadPropertyName()) {\n computed = match('[');\n key = parseObjectPropertyKey();\n methodNode = new Node();\n expect('(');\n expect(')');\n\n state.allowYield = false;\n value = parsePropertyFunction(methodNode, {\n params: [],\n defaults: [],\n stricted: null,\n firstRestricted: null,\n message: null\n }, false);\n state.allowYield = previousAllowYield;\n\n return node.finishProperty('get', key, computed, value, false, false);\n } else if (token.value === 'set' && lookaheadPropertyName()) {\n computed = match('[');\n key = parseObjectPropertyKey();\n methodNode = new Node();\n expect('(');\n\n options = {\n params: [],\n defaultCount: 0,\n defaults: [],\n firstRestricted: null,\n paramSet: {}\n };\n if (match(')')) {\n tolerateUnexpectedToken(lookahead);\n } else {\n state.allowYield = false;\n parseParam(options);\n state.allowYield = previousAllowYield;\n if (options.defaultCount === 0) {\n options.defaults = [];\n }\n }\n expect(')');\n\n state.allowYield = false;\n value = parsePropertyFunction(methodNode, options, false);\n state.allowYield = previousAllowYield;\n\n return node.finishProperty('set', key, computed, value, false, false);\n }\n } else if (token.type === Token.Punctuator && token.value === '*' && lookaheadPropertyName()) {\n computed = match('[');\n key = parseObjectPropertyKey();\n methodNode = new Node();\n\n state.allowYield = true;\n params = parseParams();\n state.allowYield = previousAllowYield;\n\n state.allowYield = false;\n value = parsePropertyFunction(methodNode, params, true);\n state.allowYield = previousAllowYield;\n\n return node.finishProperty('init', key, computed, value, true, false);\n }\n\n if (key && match('(')) {\n value = parsePropertyMethodFunction();\n return node.finishProperty('init', key, computed, value, true, false);\n }\n\n // Not a MethodDefinition.\n return null;\n }\n\n function parseObjectProperty(hasProto) {\n var token = lookahead, node = new Node(), computed, key, maybeMethod, proto, value;\n\n computed = match('[');\n if (match('*')) {\n lex();\n } else {\n key = parseObjectPropertyKey();\n }\n maybeMethod = tryParseMethodDefinition(token, key, computed, node);\n if (maybeMethod) {\n return maybeMethod;\n }\n\n if (!key) {\n throwUnexpectedToken(lookahead);\n }\n\n // Check for duplicated __proto__\n if (!computed) {\n proto = (key.type === Syntax.Identifier && key.name === '__proto__') ||\n (key.type === Syntax.Literal && key.value === '__proto__');\n if (hasProto.value && proto) {\n tolerateError(Messages.DuplicateProtoProperty);\n }\n hasProto.value |= proto;\n }\n\n if (match(':')) {\n lex();\n value = inheritCoverGrammar(parseAssignmentExpression);\n return node.finishProperty('init', key, computed, value, false, false);\n }\n\n if (token.type === Token.Identifier) {\n if (match('=')) {\n firstCoverInitializedNameError = lookahead;\n lex();\n value = isolateCoverGrammar(parseAssignmentExpression);\n return node.finishProperty('init', key, computed,\n new WrappingNode(token).finishAssignmentPattern(key, value), false, true);\n }\n return node.finishProperty('init', key, computed, key, false, true);\n }\n\n throwUnexpectedToken(lookahead);\n }\n\n function parseObjectInitializer() {\n var properties = [], hasProto = {value: false}, node = new Node();\n\n expect('{');\n\n while (!match('}')) {\n properties.push(parseObjectProperty(hasProto));\n\n if (!match('}')) {\n expectCommaSeparator();\n }\n }\n\n expect('}');\n\n return node.finishObjectExpression(properties);\n }\n\n function reinterpretExpressionAsPattern(expr) {\n var i;\n switch (expr.type) {\n case Syntax.Identifier:\n case Syntax.MemberExpression:\n case Syntax.RestElement:\n case Syntax.AssignmentPattern:\n break;\n case Syntax.SpreadElement:\n expr.type = Syntax.RestElement;\n reinterpretExpressionAsPattern(expr.argument);\n break;\n case Syntax.ArrayExpression:\n expr.type = Syntax.ArrayPattern;\n for (i = 0; i < expr.elements.length; i++) {\n if (expr.elements[i] !== null) {\n reinterpretExpressionAsPattern(expr.elements[i]);\n }\n }\n break;\n case Syntax.ObjectExpression:\n expr.type = Syntax.ObjectPattern;\n for (i = 0; i < expr.properties.length; i++) {\n reinterpretExpressionAsPattern(expr.properties[i].value);\n }\n break;\n case Syntax.AssignmentExpression:\n expr.type = Syntax.AssignmentPattern;\n reinterpretExpressionAsPattern(expr.left);\n break;\n default:\n // Allow other node type for tolerant parsing.\n break;\n }\n }\n\n // ECMA-262 12.2.9 Template Literals\n\n function parseTemplateElement(option) {\n var node, token;\n\n if (lookahead.type !== Token.Template || (option.head && !lookahead.head)) {\n throwUnexpectedToken();\n }\n\n node = new Node();\n token = lex();\n\n return node.finishTemplateElement({ raw: token.value.raw, cooked: token.value.cooked }, token.tail);\n }\n\n function parseTemplateLiteral() {\n var quasi, quasis, expressions, node = new Node();\n\n quasi = parseTemplateElement({ head: true });\n quasis = [quasi];\n expressions = [];\n\n while (!quasi.tail) {\n expressions.push(parseExpression());\n quasi = parseTemplateElement({ head: false });\n quasis.push(quasi);\n }\n\n return node.finishTemplateLiteral(quasis, expressions);\n }\n\n // ECMA-262 12.2.10 The Grouping Operator\n\n function parseGroupExpression() {\n var expr, expressions, startToken, i, params = [];\n\n expect('(');\n\n if (match(')')) {\n lex();\n if (!match('=>')) {\n expect('=>');\n }\n return {\n type: PlaceHolders.ArrowParameterPlaceHolder,\n params: [],\n rawParams: []\n };\n }\n\n startToken = lookahead;\n if (match('...')) {\n expr = parseRestElement(params);\n expect(')');\n if (!match('=>')) {\n expect('=>');\n }\n return {\n type: PlaceHolders.ArrowParameterPlaceHolder,\n params: [expr]\n };\n }\n\n isBindingElement = true;\n expr = inheritCoverGrammar(parseAssignmentExpression);\n\n if (match(',')) {\n isAssignmentTarget = false;\n expressions = [expr];\n\n while (startIndex < length) {\n if (!match(',')) {\n break;\n }\n lex();\n\n if (match('...')) {\n if (!isBindingElement) {\n throwUnexpectedToken(lookahead);\n }\n expressions.push(parseRestElement(params));\n expect(')');\n if (!match('=>')) {\n expect('=>');\n }\n isBindingElement = false;\n for (i = 0; i < expressions.length; i++) {\n reinterpretExpressionAsPattern(expressions[i]);\n }\n return {\n type: PlaceHolders.ArrowParameterPlaceHolder,\n params: expressions\n };\n }\n\n expressions.push(inheritCoverGrammar(parseAssignmentExpression));\n }\n\n expr = new WrappingNode(startToken).finishSequenceExpression(expressions);\n }\n\n\n expect(')');\n\n if (match('=>')) {\n if (expr.type === Syntax.Identifier && expr.name === 'yield') {\n return {\n type: PlaceHolders.ArrowParameterPlaceHolder,\n params: [expr]\n };\n }\n\n if (!isBindingElement) {\n throwUnexpectedToken(lookahead);\n }\n\n if (expr.type === Syntax.SequenceExpression) {\n for (i = 0; i < expr.expressions.length; i++) {\n reinterpretExpressionAsPattern(expr.expressions[i]);\n }\n } else {\n reinterpretExpressionAsPattern(expr);\n }\n\n expr = {\n type: PlaceHolders.ArrowParameterPlaceHolder,\n params: expr.type === Syntax.SequenceExpression ? expr.expressions : [expr]\n };\n }\n isBindingElement = false;\n return expr;\n }\n\n\n // ECMA-262 12.2 Primary Expressions\n\n function parsePrimaryExpression() {\n var type, token, expr, node;\n\n if (match('(')) {\n isBindingElement = false;\n return inheritCoverGrammar(parseGroupExpression);\n }\n\n if (match('[')) {\n return inheritCoverGrammar(parseArrayInitializer);\n }\n\n if (match('{')) {\n return inheritCoverGrammar(parseObjectInitializer);\n }\n\n type = lookahead.type;\n node = new Node();\n\n if (type === Token.Identifier) {\n if (state.sourceType === 'module' && lookahead.value === 'await') {\n tolerateUnexpectedToken(lookahead);\n }\n expr = node.finishIdentifier(lex().value);\n } else if (type === Token.StringLiteral || type === Token.NumericLiteral) {\n isAssignmentTarget = isBindingElement = false;\n if (strict && lookahead.octal) {\n tolerateUnexpectedToken(lookahead, Messages.StrictOctalLiteral);\n }\n expr = node.finishLiteral(lex());\n } else if (type === Token.Keyword) {\n if (!strict && state.allowYield && matchKeyword('yield')) {\n return parseNonComputedProperty();\n }\n if (!strict && matchKeyword('let')) {\n return node.finishIdentifier(lex().value);\n }\n isAssignmentTarget = isBindingElement = false;\n if (matchKeyword('function')) {\n return parseFunctionExpression();\n }\n if (matchKeyword('this')) {\n lex();\n return node.finishThisExpression();\n }\n if (matchKeyword('class')) {\n return parseClassExpression();\n }\n throwUnexpectedToken(lex());\n } else if (type === Token.BooleanLiteral) {\n isAssignmentTarget = isBindingElement = false;\n token = lex();\n token.value = (token.value === 'true');\n expr = node.finishLiteral(token);\n } else if (type === Token.NullLiteral) {\n isAssignmentTarget = isBindingElement = false;\n token = lex();\n token.value = null;\n expr = node.finishLiteral(token);\n } else if (match('/') || match('/=')) {\n isAssignmentTarget = isBindingElement = false;\n index = startIndex;\n\n if (typeof extra.tokens !== 'undefined') {\n token = collectRegex();\n } else {\n token = scanRegExp();\n }\n lex();\n expr = node.finishLiteral(token);\n } else if (type === Token.Template) {\n expr = parseTemplateLiteral();\n } else {\n throwUnexpectedToken(lex());\n }\n\n return expr;\n }\n\n // ECMA-262 12.3 Left-Hand-Side Expressions\n\n function parseArguments() {\n var args = [], expr;\n\n expect('(');\n\n if (!match(')')) {\n while (startIndex < length) {\n if (match('...')) {\n expr = new Node();\n lex();\n expr.finishSpreadElement(isolateCoverGrammar(parseAssignmentExpression));\n } else {\n expr = isolateCoverGrammar(parseAssignmentExpression);\n }\n args.push(expr);\n if (match(')')) {\n break;\n }\n expectCommaSeparator();\n }\n }\n\n expect(')');\n\n return args;\n }\n\n function parseNonComputedProperty() {\n var token, node = new Node();\n\n token = lex();\n\n if (!isIdentifierName(token)) {\n throwUnexpectedToken(token);\n }\n\n return node.finishIdentifier(token.value);\n }\n\n function parseNonComputedMember() {\n expect('.');\n\n return parseNonComputedProperty();\n }\n\n function parseComputedMember() {\n var expr;\n\n expect('[');\n\n expr = isolateCoverGrammar(parseExpression);\n\n expect(']');\n\n return expr;\n }\n\n // ECMA-262 12.3.3 The new Operator\n\n function parseNewExpression() {\n var callee, args, node = new Node();\n\n expectKeyword('new');\n\n if (match('.')) {\n lex();\n if (lookahead.type === Token.Identifier && lookahead.value === 'target') {\n if (state.inFunctionBody) {\n lex();\n return node.finishMetaProperty('new', 'target');\n }\n }\n throwUnexpectedToken(lookahead);\n }\n\n callee = isolateCoverGrammar(parseLeftHandSideExpression);\n args = match('(') ? parseArguments() : [];\n\n isAssignmentTarget = isBindingElement = false;\n\n return node.finishNewExpression(callee, args);\n }\n\n // ECMA-262 12.3.4 Function Calls\n\n function parseLeftHandSideExpressionAllowCall() {\n var quasi, expr, args, property, startToken, previousAllowIn = state.allowIn;\n\n startToken = lookahead;\n state.allowIn = true;\n\n if (matchKeyword('super') && state.inFunctionBody) {\n expr = new Node();\n lex();\n expr = expr.finishSuper();\n if (!match('(') && !match('.') && !match('[')) {\n throwUnexpectedToken(lookahead);\n }\n } else {\n expr = inheritCoverGrammar(matchKeyword('new') ? parseNewExpression : parsePrimaryExpression);\n }\n\n for (;;) {\n if (match('.')) {\n isBindingElement = false;\n isAssignmentTarget = true;\n property = parseNonComputedMember();\n expr = new WrappingNode(startToken).finishMemberExpression('.', expr, property);\n } else if (match('(')) {\n isBindingElement = false;\n isAssignmentTarget = false;\n args = parseArguments();\n expr = new WrappingNode(startToken).finishCallExpression(expr, args);\n } else if (match('[')) {\n isBindingElement = false;\n isAssignmentTarget = true;\n property = parseComputedMember();\n expr = new WrappingNode(startToken).finishMemberExpression('[', expr, property);\n } else if (lookahead.type === Token.Template && lookahead.head) {\n quasi = parseTemplateLiteral();\n expr = new WrappingNode(startToken).finishTaggedTemplateExpression(expr, quasi);\n } else {\n break;\n }\n }\n state.allowIn = previousAllowIn;\n\n return expr;\n }\n\n // ECMA-262 12.3 Left-Hand-Side Expressions\n\n function parseLeftHandSideExpression() {\n var quasi, expr, property, startToken;\n assert(state.allowIn, 'callee of new expression always allow in keyword.');\n\n startToken = lookahead;\n\n if (matchKeyword('super') && state.inFunctionBody) {\n expr = new Node();\n lex();\n expr = expr.finishSuper();\n if (!match('[') && !match('.')) {\n throwUnexpectedToken(lookahead);\n }\n } else {\n expr = inheritCoverGrammar(matchKeyword('new') ? parseNewExpression : parsePrimaryExpression);\n }\n\n for (;;) {\n if (match('[')) {\n isBindingElement = false;\n isAssignmentTarget = true;\n property = parseComputedMember();\n expr = new WrappingNode(startToken).finishMemberExpression('[', expr, property);\n } else if (match('.')) {\n isBindingElement = false;\n isAssignmentTarget = true;\n property = parseNonComputedMember();\n expr = new WrappingNode(startToken).finishMemberExpression('.', expr, property);\n } else if (lookahead.type === Token.Template && lookahead.head) {\n quasi = parseTemplateLiteral();\n expr = new WrappingNode(startToken).finishTaggedTemplateExpression(expr, quasi);\n } else {\n break;\n }\n }\n return expr;\n }\n\n // ECMA-262 12.4 Postfix Expressions\n\n function parsePostfixExpression() {\n var expr, token, startToken = lookahead;\n\n expr = inheritCoverGrammar(parseLeftHandSideExpressionAllowCall);\n\n if (!hasLineTerminator && lookahead.type === Token.Punctuator) {\n if (match('++') || match('--')) {\n // ECMA-262 11.3.1, 11.3.2\n if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {\n tolerateError(Messages.StrictLHSPostfix);\n }\n\n if (!isAssignmentTarget) {\n tolerateError(Messages.InvalidLHSInAssignment);\n }\n\n isAssignmentTarget = isBindingElement = false;\n\n token = lex();\n expr = new WrappingNode(startToken).finishPostfixExpression(token.value, expr);\n }\n }\n\n return expr;\n }\n\n // ECMA-262 12.5 Unary Operators\n\n function parseUnaryExpression() {\n var token, expr, startToken;\n\n if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.Keyword) {\n expr = parsePostfixExpression();\n } else if (match('++') || match('--')) {\n startToken = lookahead;\n token = lex();\n expr = inheritCoverGrammar(parseUnaryExpression);\n // ECMA-262 11.4.4, 11.4.5\n if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {\n tolerateError(Messages.StrictLHSPrefix);\n }\n\n if (!isAssignmentTarget) {\n tolerateError(Messages.InvalidLHSInAssignment);\n }\n expr = new WrappingNode(startToken).finishUnaryExpression(token.value, expr);\n isAssignmentTarget = isBindingElement = false;\n } else if (match('+') || match('-') || match('~') || match('!')) {\n startToken = lookahead;\n token = lex();\n expr = inheritCoverGrammar(parseUnaryExpression);\n expr = new WrappingNode(startToken).finishUnaryExpression(token.value, expr);\n isAssignmentTarget = isBindingElement = false;\n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n startToken = lookahead;\n token = lex();\n expr = inheritCoverGrammar(parseUnaryExpression);\n expr = new WrappingNode(startToken).finishUnaryExpression(token.value, expr);\n if (strict && expr.operator === 'delete' && expr.argument.type === Syntax.Identifier) {\n tolerateError(Messages.StrictDelete);\n }\n isAssignmentTarget = isBindingElement = false;\n } else {\n expr = parsePostfixExpression();\n }\n\n return expr;\n }\n\n function binaryPrecedence(token, allowIn) {\n var prec = 0;\n\n if (token.type !== Token.Punctuator && token.type !== Token.Keyword) {\n return 0;\n }\n\n switch (token.value) {\n case '||':\n prec = 1;\n break;\n\n case '&&':\n prec = 2;\n break;\n\n case '|':\n prec = 3;\n break;\n\n case '^':\n prec = 4;\n break;\n\n case '&':\n prec = 5;\n break;\n\n case '==':\n case '!=':\n case '===':\n case '!==':\n prec = 6;\n break;\n\n case '<':\n case '>':\n case '<=':\n case '>=':\n case 'instanceof':\n prec = 7;\n break;\n\n case 'in':\n prec = allowIn ? 7 : 0;\n break;\n\n case '<<':\n case '>>':\n case '>>>':\n prec = 8;\n break;\n\n case '+':\n case '-':\n prec = 9;\n break;\n\n case '*':\n case '/':\n case '%':\n prec = 11;\n break;\n\n default:\n break;\n }\n\n return prec;\n }\n\n // ECMA-262 12.6 Multiplicative Operators\n // ECMA-262 12.7 Additive Operators\n // ECMA-262 12.8 Bitwise Shift Operators\n // ECMA-262 12.9 Relational Operators\n // ECMA-262 12.10 Equality Operators\n // ECMA-262 12.11 Binary Bitwise Operators\n // ECMA-262 12.12 Binary Logical Operators\n\n function parseBinaryExpression() {\n var marker, markers, expr, token, prec, stack, right, operator, left, i;\n\n marker = lookahead;\n left = inheritCoverGrammar(parseUnaryExpression);\n\n token = lookahead;\n prec = binaryPrecedence(token, state.allowIn);\n if (prec === 0) {\n return left;\n }\n isAssignmentTarget = isBindingElement = false;\n token.prec = prec;\n lex();\n\n markers = [marker, lookahead];\n right = isolateCoverGrammar(parseUnaryExpression);\n\n stack = [left, token, right];\n\n while ((prec = binaryPrecedence(lookahead, state.allowIn)) > 0) {\n\n // Reduce: make a binary expression from the three topmost entries.\n while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {\n right = stack.pop();\n operator = stack.pop().value;\n left = stack.pop();\n markers.pop();\n expr = new WrappingNode(markers[markers.length - 1]).finishBinaryExpression(operator, left, right);\n stack.push(expr);\n }\n\n // Shift.\n token = lex();\n token.prec = prec;\n stack.push(token);\n markers.push(lookahead);\n expr = isolateCoverGrammar(parseUnaryExpression);\n stack.push(expr);\n }\n\n // Final reduce to clean-up the stack.\n i = stack.length - 1;\n expr = stack[i];\n markers.pop();\n while (i > 1) {\n expr = new WrappingNode(markers.pop()).finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i -= 2;\n }\n\n return expr;\n }\n\n\n // ECMA-262 12.13 Conditional Operator\n\n function parseConditionalExpression() {\n var expr, previousAllowIn, consequent, alternate, startToken;\n\n startToken = lookahead;\n\n expr = inheritCoverGrammar(parseBinaryExpression);\n if (match('?')) {\n lex();\n previousAllowIn = state.allowIn;\n state.allowIn = true;\n consequent = isolateCoverGrammar(parseAssignmentExpression);\n state.allowIn = previousAllowIn;\n expect(':');\n alternate = isolateCoverGrammar(parseAssignmentExpression);\n\n expr = new WrappingNode(startToken).finishConditionalExpression(expr, consequent, alternate);\n isAssignmentTarget = isBindingElement = false;\n }\n\n return expr;\n }\n\n // ECMA-262 14.2 Arrow Function Definitions\n\n function parseConciseBody() {\n if (match('{')) {\n return parseFunctionSourceElements();\n }\n return isolateCoverGrammar(parseAssignmentExpression);\n }\n\n function checkPatternParam(options, param) {\n var i;\n switch (param.type) {\n case Syntax.Identifier:\n validateParam(options, param, param.name);\n break;\n case Syntax.RestElement:\n checkPatternParam(options, param.argument);\n break;\n case Syntax.AssignmentPattern:\n checkPatternParam(options, param.left);\n break;\n case Syntax.ArrayPattern:\n for (i = 0; i < param.elements.length; i++) {\n if (param.elements[i] !== null) {\n checkPatternParam(options, param.elements[i]);\n }\n }\n break;\n case Syntax.YieldExpression:\n break;\n default:\n assert(param.type === Syntax.ObjectPattern, 'Invalid type');\n for (i = 0; i < param.properties.length; i++) {\n checkPatternParam(options, param.properties[i].value);\n }\n break;\n }\n }\n function reinterpretAsCoverFormalsList(expr) {\n var i, len, param, params, defaults, defaultCount, options, token;\n\n defaults = [];\n defaultCount = 0;\n params = [expr];\n\n switch (expr.type) {\n case Syntax.Identifier:\n break;\n case PlaceHolders.ArrowParameterPlaceHolder:\n params = expr.params;\n break;\n default:\n return null;\n }\n\n options = {\n paramSet: {}\n };\n\n for (i = 0, len = params.length; i < len; i += 1) {\n param = params[i];\n switch (param.type) {\n case Syntax.AssignmentPattern:\n params[i] = param.left;\n if (param.right.type === Syntax.YieldExpression) {\n if (param.right.argument) {\n throwUnexpectedToken(lookahead);\n }\n param.right.type = Syntax.Identifier;\n param.right.name = 'yield';\n delete param.right.argument;\n delete param.right.delegate;\n }\n defaults.push(param.right);\n ++defaultCount;\n checkPatternParam(options, param.left);\n break;\n default:\n checkPatternParam(options, param);\n params[i] = param;\n defaults.push(null);\n break;\n }\n }\n\n if (strict || !state.allowYield) {\n for (i = 0, len = params.length; i < len; i += 1) {\n param = params[i];\n if (param.type === Syntax.YieldExpression) {\n throwUnexpectedToken(lookahead);\n }\n }\n }\n\n if (options.message === Messages.StrictParamDupe) {\n token = strict ? options.stricted : options.firstRestricted;\n throwUnexpectedToken(token, options.message);\n }\n\n if (defaultCount === 0) {\n defaults = [];\n }\n\n return {\n params: params,\n defaults: defaults,\n stricted: options.stricted,\n firstRestricted: options.firstRestricted,\n message: options.message\n };\n }\n\n function parseArrowFunctionExpression(options, node) {\n var previousStrict, previousAllowYield, body;\n\n if (hasLineTerminator) {\n tolerateUnexpectedToken(lookahead);\n }\n expect('=>');\n\n previousStrict = strict;\n previousAllowYield = state.allowYield;\n state.allowYield = true;\n\n body = parseConciseBody();\n\n if (strict && options.firstRestricted) {\n throwUnexpectedToken(options.firstRestricted, options.message);\n }\n if (strict && options.stricted) {\n tolerateUnexpectedToken(options.stricted, options.message);\n }\n\n strict = previousStrict;\n state.allowYield = previousAllowYield;\n\n return node.finishArrowFunctionExpression(options.params, options.defaults, body, body.type !== Syntax.BlockStatement);\n }\n\n // ECMA-262 14.4 Yield expression\n\n function parseYieldExpression() {\n var argument, expr, delegate, previousAllowYield;\n\n argument = null;\n expr = new Node();\n delegate = false;\n\n expectKeyword('yield');\n\n if (!hasLineTerminator) {\n previousAllowYield = state.allowYield;\n state.allowYield = false;\n delegate = match('*');\n if (delegate) {\n lex();\n argument = parseAssignmentExpression();\n } else {\n if (!match(';') && !match('}') && !match(')') && lookahead.type !== Token.EOF) {\n argument = parseAssignmentExpression();\n }\n }\n state.allowYield = previousAllowYield;\n }\n\n return expr.finishYieldExpression(argument, delegate);\n }\n\n // ECMA-262 12.14 Assignment Operators\n\n function parseAssignmentExpression() {\n var token, expr, right, list, startToken;\n\n startToken = lookahead;\n token = lookahead;\n\n if (!state.allowYield && matchKeyword('yield')) {\n return parseYieldExpression();\n }\n\n expr = parseConditionalExpression();\n\n if (expr.type === PlaceHolders.ArrowParameterPlaceHolder || match('=>')) {\n isAssignmentTarget = isBindingElement = false;\n list = reinterpretAsCoverFormalsList(expr);\n\n if (list) {\n firstCoverInitializedNameError = null;\n return parseArrowFunctionExpression(list, new WrappingNode(startToken));\n }\n\n return expr;\n }\n\n if (matchAssign()) {\n if (!isAssignmentTarget) {\n tolerateError(Messages.InvalidLHSInAssignment);\n }\n\n // ECMA-262 12.1.2\n if (strict && expr.type === Syntax.Identifier) {\n if (isRestrictedWord(expr.name)) {\n tolerateUnexpectedToken(token, Messages.StrictLHSAssignment);\n }\n if (isStrictModeReservedWord(expr.name)) {\n tolerateUnexpectedToken(token, Messages.StrictReservedWord);\n }\n }\n\n if (!match('=')) {\n isAssignmentTarget = isBindingElement = false;\n } else {\n reinterpretExpressionAsPattern(expr);\n }\n\n token = lex();\n right = isolateCoverGrammar(parseAssignmentExpression);\n expr = new WrappingNode(startToken).finishAssignmentExpression(token.value, expr, right);\n firstCoverInitializedNameError = null;\n }\n\n return expr;\n }\n\n // ECMA-262 12.15 Comma Operator\n\n function parseExpression() {\n var expr, startToken = lookahead, expressions;\n\n expr = isolateCoverGrammar(parseAssignmentExpression);\n\n if (match(',')) {\n expressions = [expr];\n\n while (startIndex < length) {\n if (!match(',')) {\n break;\n }\n lex();\n expressions.push(isolateCoverGrammar(parseAssignmentExpression));\n }\n\n expr = new WrappingNode(startToken).finishSequenceExpression(expressions);\n }\n\n return expr;\n }\n\n // ECMA-262 13.2 Block\n\n function parseStatementListItem() {\n if (lookahead.type === Token.Keyword) {\n switch (lookahead.value) {\n case 'export':\n if (state.sourceType !== 'module') {\n tolerateUnexpectedToken(lookahead, Messages.IllegalExportDeclaration);\n }\n return parseExportDeclaration();\n case 'import':\n if (state.sourceType !== 'module') {\n tolerateUnexpectedToken(lookahead, Messages.IllegalImportDeclaration);\n }\n return parseImportDeclaration();\n case 'const':\n return parseLexicalDeclaration({inFor: false});\n case 'function':\n return parseFunctionDeclaration(new Node());\n case 'class':\n return parseClassDeclaration();\n }\n }\n\n if (matchKeyword('let') && isLexicalDeclaration()) {\n return parseLexicalDeclaration({inFor: false});\n }\n\n return parseStatement();\n }\n\n function parseStatementList() {\n var list = [];\n while (startIndex < length) {\n if (match('}')) {\n break;\n }\n list.push(parseStatementListItem());\n }\n\n return list;\n }\n\n function parseBlock() {\n var block, node = new Node();\n\n expect('{');\n\n block = parseStatementList();\n\n expect('}');\n\n return node.finishBlockStatement(block);\n }\n\n // ECMA-262 13.3.2 Variable Statement\n\n function parseVariableIdentifier(kind) {\n var token, node = new Node();\n\n token = lex();\n\n if (token.type === Token.Keyword && token.value === 'yield') {\n if (strict) {\n tolerateUnexpectedToken(token, Messages.StrictReservedWord);\n } if (!state.allowYield) {\n throwUnexpectedToken(token);\n }\n } else if (token.type !== Token.Identifier) {\n if (strict && token.type === Token.Keyword && isStrictModeReservedWord(token.value)) {\n tolerateUnexpectedToken(token, Messages.StrictReservedWord);\n } else {\n if (strict || token.value !== 'let' || kind !== 'var') {\n throwUnexpectedToken(token);\n }\n }\n } else if (state.sourceType === 'module' && token.type === Token.Identifier && token.value === 'await') {\n tolerateUnexpectedToken(token);\n }\n\n return node.finishIdentifier(token.value);\n }\n\n function parseVariableDeclaration(options) {\n var init = null, id, node = new Node(), params = [];\n\n id = parsePattern(params, 'var');\n\n // ECMA-262 12.2.1\n if (strict && isRestrictedWord(id.name)) {\n tolerateError(Messages.StrictVarName);\n }\n\n if (match('=')) {\n lex();\n init = isolateCoverGrammar(parseAssignmentExpression);\n } else if (id.type !== Syntax.Identifier && !options.inFor) {\n expect('=');\n }\n\n return node.finishVariableDeclarator(id, init);\n }\n\n function parseVariableDeclarationList(options) {\n var opt, list;\n\n opt = { inFor: options.inFor };\n list = [parseVariableDeclaration(opt)];\n\n while (match(',')) {\n lex();\n list.push(parseVariableDeclaration(opt));\n }\n\n return list;\n }\n\n function parseVariableStatement(node) {\n var declarations;\n\n expectKeyword('var');\n\n declarations = parseVariableDeclarationList({ inFor: false });\n\n consumeSemicolon();\n\n return node.finishVariableDeclaration(declarations);\n }\n\n // ECMA-262 13.3.1 Let and Const Declarations\n\n function parseLexicalBinding(kind, options) {\n var init = null, id, node = new Node(), params = [];\n\n id = parsePattern(params, kind);\n\n // ECMA-262 12.2.1\n if (strict && id.type === Syntax.Identifier && isRestrictedWord(id.name)) {\n tolerateError(Messages.StrictVarName);\n }\n\n if (kind === 'const') {\n if (!matchKeyword('in') && !matchContextualKeyword('of')) {\n expect('=');\n init = isolateCoverGrammar(parseAssignmentExpression);\n }\n } else if ((!options.inFor && id.type !== Syntax.Identifier) || match('=')) {\n expect('=');\n init = isolateCoverGrammar(parseAssignmentExpression);\n }\n\n return node.finishVariableDeclarator(id, init);\n }\n\n function parseBindingList(kind, options) {\n var list = [parseLexicalBinding(kind, options)];\n\n while (match(',')) {\n lex();\n list.push(parseLexicalBinding(kind, options));\n }\n\n return list;\n }\n\n\n function tokenizerState() {\n return {\n index: index,\n lineNumber: lineNumber,\n lineStart: lineStart,\n hasLineTerminator: hasLineTerminator,\n lastIndex: lastIndex,\n lastLineNumber: lastLineNumber,\n lastLineStart: lastLineStart,\n startIndex: startIndex,\n startLineNumber: startLineNumber,\n startLineStart: startLineStart,\n lookahead: lookahead,\n tokenCount: extra.tokens ? extra.tokens.length : 0\n };\n }\n\n function resetTokenizerState(ts) {\n index = ts.index;\n lineNumber = ts.lineNumber;\n lineStart = ts.lineStart;\n hasLineTerminator = ts.hasLineTerminator;\n lastIndex = ts.lastIndex;\n lastLineNumber = ts.lastLineNumber;\n lastLineStart = ts.lastLineStart;\n startIndex = ts.startIndex;\n startLineNumber = ts.startLineNumber;\n startLineStart = ts.startLineStart;\n lookahead = ts.lookahead;\n if (extra.tokens) {\n extra.tokens.splice(ts.tokenCount, extra.tokens.length);\n }\n }\n\n function isLexicalDeclaration() {\n var lexical, ts;\n\n ts = tokenizerState();\n\n lex();\n lexical = (lookahead.type === Token.Identifier) || match('[') || match('{') ||\n matchKeyword('let') || matchKeyword('yield');\n\n resetTokenizerState(ts);\n\n return lexical;\n }\n\n function parseLexicalDeclaration(options) {\n var kind, declarations, node = new Node();\n\n kind = lex().value;\n assert(kind === 'let' || kind === 'const', 'Lexical declaration must be either let or const');\n\n declarations = parseBindingList(kind, options);\n\n consumeSemicolon();\n\n return node.finishLexicalDeclaration(declarations, kind);\n }\n\n function parseRestElement(params) {\n var param, node = new Node();\n\n lex();\n\n if (match('{')) {\n throwError(Messages.ObjectPatternAsRestParameter);\n }\n\n params.push(lookahead);\n\n param = parseVariableIdentifier();\n\n if (match('=')) {\n throwError(Messages.DefaultRestParameter);\n }\n\n if (!match(')')) {\n throwError(Messages.ParameterAfterRestParameter);\n }\n\n return node.finishRestElement(param);\n }\n\n // ECMA-262 13.4 Empty Statement\n\n function parseEmptyStatement(node) {\n expect(';');\n return node.finishEmptyStatement();\n }\n\n // ECMA-262 12.4 Expression Statement\n\n function parseExpressionStatement(node) {\n var expr = parseExpression();\n consumeSemicolon();\n return node.finishExpressionStatement(expr);\n }\n\n // ECMA-262 13.6 If statement\n\n function parseIfStatement(node) {\n var test, consequent, alternate;\n\n expectKeyword('if');\n\n expect('(');\n\n test = parseExpression();\n\n expect(')');\n\n consequent = parseStatement();\n\n if (matchKeyword('else')) {\n lex();\n alternate = parseStatement();\n } else {\n alternate = null;\n }\n\n return node.finishIfStatement(test, consequent, alternate);\n }\n\n // ECMA-262 13.7 Iteration Statements\n\n function parseDoWhileStatement(node) {\n var body, test, oldInIteration;\n\n expectKeyword('do');\n\n oldInIteration = state.inIteration;\n state.inIteration = true;\n\n body = parseStatement();\n\n state.inIteration = oldInIteration;\n\n expectKeyword('while');\n\n expect('(');\n\n test = parseExpression();\n\n expect(')');\n\n if (match(';')) {\n lex();\n }\n\n return node.finishDoWhileStatement(body, test);\n }\n\n function parseWhileStatement(node) {\n var test, body, oldInIteration;\n\n expectKeyword('while');\n\n expect('(');\n\n test = parseExpression();\n\n expect(')');\n\n oldInIteration = state.inIteration;\n state.inIteration = true;\n\n body = parseStatement();\n\n state.inIteration = oldInIteration;\n\n return node.finishWhileStatement(test, body);\n }\n\n function parseForStatement(node) {\n var init, forIn, initSeq, initStartToken, test, update, left, right, kind, declarations,\n body, oldInIteration, previousAllowIn = state.allowIn;\n\n init = test = update = null;\n forIn = true;\n\n expectKeyword('for');\n\n expect('(');\n\n if (match(';')) {\n lex();\n } else {\n if (matchKeyword('var')) {\n init = new Node();\n lex();\n\n state.allowIn = false;\n declarations = parseVariableDeclarationList({ inFor: true });\n state.allowIn = previousAllowIn;\n\n if (declarations.length === 1 && matchKeyword('in')) {\n init = init.finishVariableDeclaration(declarations);\n lex();\n left = init;\n right = parseExpression();\n init = null;\n } else if (declarations.length === 1 && declarations[0].init === null && matchContextualKeyword('of')) {\n init = init.finishVariableDeclaration(declarations);\n lex();\n left = init;\n right = parseAssignmentExpression();\n init = null;\n forIn = false;\n } else {\n init = init.finishVariableDeclaration(declarations);\n expect(';');\n }\n } else if (matchKeyword('const') || matchKeyword('let')) {\n init = new Node();\n kind = lex().value;\n\n if (!strict && lookahead.value === 'in') {\n init = init.finishIdentifier(kind);\n lex();\n left = init;\n right = parseExpression();\n init = null;\n } else {\n state.allowIn = false;\n declarations = parseBindingList(kind, {inFor: true});\n state.allowIn = previousAllowIn;\n\n if (declarations.length === 1 && declarations[0].init === null && matchKeyword('in')) {\n init = init.finishLexicalDeclaration(declarations, kind);\n lex();\n left = init;\n right = parseExpression();\n init = null;\n } else if (declarations.length === 1 && declarations[0].init === null && matchContextualKeyword('of')) {\n init = init.finishLexicalDeclaration(declarations, kind);\n lex();\n left = init;\n right = parseAssignmentExpression();\n init = null;\n forIn = false;\n } else {\n consumeSemicolon();\n init = init.finishLexicalDeclaration(declarations, kind);\n }\n }\n } else {\n initStartToken = lookahead;\n state.allowIn = false;\n init = inheritCoverGrammar(parseAssignmentExpression);\n state.allowIn = previousAllowIn;\n\n if (matchKeyword('in')) {\n if (!isAssignmentTarget) {\n tolerateError(Messages.InvalidLHSInForIn);\n }\n\n lex();\n reinterpretExpressionAsPattern(init);\n left = init;\n right = parseExpression();\n init = null;\n } else if (matchContextualKeyword('of')) {\n if (!isAssignmentTarget) {\n tolerateError(Messages.InvalidLHSInForLoop);\n }\n\n lex();\n reinterpretExpressionAsPattern(init);\n left = init;\n right = parseAssignmentExpression();\n init = null;\n forIn = false;\n } else {\n if (match(',')) {\n initSeq = [init];\n while (match(',')) {\n lex();\n initSeq.push(isolateCoverGrammar(parseAssignmentExpression));\n }\n init = new WrappingNode(initStartToken).finishSequenceExpression(initSeq);\n }\n expect(';');\n }\n }\n }\n\n if (typeof left === 'undefined') {\n\n if (!match(';')) {\n test = parseExpression();\n }\n expect(';');\n\n if (!match(')')) {\n update = parseExpression();\n }\n }\n\n expect(')');\n\n oldInIteration = state.inIteration;\n state.inIteration = true;\n\n body = isolateCoverGrammar(parseStatement);\n\n state.inIteration = oldInIteration;\n\n return (typeof left === 'undefined') ?\n node.finishForStatement(init, test, update, body) :\n forIn ? node.finishForInStatement(left, right, body) :\n node.finishForOfStatement(left, right, body);\n }\n\n // ECMA-262 13.8 The continue statement\n\n function parseContinueStatement(node) {\n var label = null, key;\n\n expectKeyword('continue');\n\n // Optimize the most common form: 'continue;'.\n if (source.charCodeAt(startIndex) === 0x3B) {\n lex();\n\n if (!state.inIteration) {\n throwError(Messages.IllegalContinue);\n }\n\n return node.finishContinueStatement(null);\n }\n\n if (hasLineTerminator) {\n if (!state.inIteration) {\n throwError(Messages.IllegalContinue);\n }\n\n return node.finishContinueStatement(null);\n }\n\n if (lookahead.type === Token.Identifier) {\n label = parseVariableIdentifier();\n\n key = '$' + label.name;\n if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) {\n throwError(Messages.UnknownLabel, label.name);\n }\n }\n\n consumeSemicolon();\n\n if (label === null && !state.inIteration) {\n throwError(Messages.IllegalContinue);\n }\n\n return node.finishContinueStatement(label);\n }\n\n // ECMA-262 13.9 The break statement\n\n function parseBreakStatement(node) {\n var label = null, key;\n\n expectKeyword('break');\n\n // Catch the very common case first: immediately a semicolon (U+003B).\n if (source.charCodeAt(lastIndex) === 0x3B) {\n lex();\n\n if (!(state.inIteration || state.inSwitch)) {\n throwError(Messages.IllegalBreak);\n }\n\n return node.finishBreakStatement(null);\n }\n\n if (hasLineTerminator) {\n if (!(state.inIteration || state.inSwitch)) {\n throwError(Messages.IllegalBreak);\n }\n } else if (lookahead.type === Token.Identifier) {\n label = parseVariableIdentifier();\n\n key = '$' + label.name;\n if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) {\n throwError(Messages.UnknownLabel, label.name);\n }\n }\n\n consumeSemicolon();\n\n if (label === null && !(state.inIteration || state.inSwitch)) {\n throwError(Messages.IllegalBreak);\n }\n\n return node.finishBreakStatement(label);\n }\n\n // ECMA-262 13.10 The return statement\n\n function parseReturnStatement(node) {\n var argument = null;\n\n expectKeyword('return');\n\n if (!state.inFunctionBody) {\n tolerateError(Messages.IllegalReturn);\n }\n\n // 'return' followed by a space and an identifier is very common.\n if (source.charCodeAt(lastIndex) === 0x20) {\n if (isIdentifierStart(source.charCodeAt(lastIndex + 1))) {\n argument = parseExpression();\n consumeSemicolon();\n return node.finishReturnStatement(argument);\n }\n }\n\n if (hasLineTerminator) {\n // HACK\n return node.finishReturnStatement(null);\n }\n\n if (!match(';')) {\n if (!match('}') && lookahead.type !== Token.EOF) {\n argument = parseExpression();\n }\n }\n\n consumeSemicolon();\n\n return node.finishReturnStatement(argument);\n }\n\n // ECMA-262 13.11 The with statement\n\n function parseWithStatement(node) {\n var object, body;\n\n if (strict) {\n tolerateError(Messages.StrictModeWith);\n }\n\n expectKeyword('with');\n\n expect('(');\n\n object = parseExpression();\n\n expect(')');\n\n body = parseStatement();\n\n return node.finishWithStatement(object, body);\n }\n\n // ECMA-262 13.12 The switch statement\n\n function parseSwitchCase() {\n var test, consequent = [], statement, node = new Node();\n\n if (matchKeyword('default')) {\n lex();\n test = null;\n } else {\n expectKeyword('case');\n test = parseExpression();\n }\n expect(':');\n\n while (startIndex < length) {\n if (match('}') || matchKeyword('default') || matchKeyword('case')) {\n break;\n }\n statement = parseStatementListItem();\n consequent.push(statement);\n }\n\n return node.finishSwitchCase(test, consequent);\n }\n\n function parseSwitchStatement(node) {\n var discriminant, cases, clause, oldInSwitch, defaultFound;\n\n expectKeyword('switch');\n\n expect('(');\n\n discriminant = parseExpression();\n\n expect(')');\n\n expect('{');\n\n cases = [];\n\n if (match('}')) {\n lex();\n return node.finishSwitchStatement(discriminant, cases);\n }\n\n oldInSwitch = state.inSwitch;\n state.inSwitch = true;\n defaultFound = false;\n\n while (startIndex < length) {\n if (match('}')) {\n break;\n }\n clause = parseSwitchCase();\n if (clause.test === null) {\n if (defaultFound) {\n throwError(Messages.MultipleDefaultsInSwitch);\n }\n defaultFound = true;\n }\n cases.push(clause);\n }\n\n state.inSwitch = oldInSwitch;\n\n expect('}');\n\n return node.finishSwitchStatement(discriminant, cases);\n }\n\n // ECMA-262 13.14 The throw statement\n\n function parseThrowStatement(node) {\n var argument;\n\n expectKeyword('throw');\n\n if (hasLineTerminator) {\n throwError(Messages.NewlineAfterThrow);\n }\n\n argument = parseExpression();\n\n consumeSemicolon();\n\n return node.finishThrowStatement(argument);\n }\n\n // ECMA-262 13.15 The try statement\n\n function parseCatchClause() {\n var param, params = [], paramMap = {}, key, i, body, node = new Node();\n\n expectKeyword('catch');\n\n expect('(');\n if (match(')')) {\n throwUnexpectedToken(lookahead);\n }\n\n param = parsePattern(params);\n for (i = 0; i < params.length; i++) {\n key = '$' + params[i].value;\n if (Object.prototype.hasOwnProperty.call(paramMap, key)) {\n tolerateError(Messages.DuplicateBinding, params[i].value);\n }\n paramMap[key] = true;\n }\n\n // ECMA-262 12.14.1\n if (strict && isRestrictedWord(param.name)) {\n tolerateError(Messages.StrictCatchVariable);\n }\n\n expect(')');\n body = parseBlock();\n return node.finishCatchClause(param, body);\n }\n\n function parseTryStatement(node) {\n var block, handler = null, finalizer = null;\n\n expectKeyword('try');\n\n block = parseBlock();\n\n if (matchKeyword('catch')) {\n handler = parseCatchClause();\n }\n\n if (matchKeyword('finally')) {\n lex();\n finalizer = parseBlock();\n }\n\n if (!handler && !finalizer) {\n throwError(Messages.NoCatchOrFinally);\n }\n\n return node.finishTryStatement(block, handler, finalizer);\n }\n\n // ECMA-262 13.16 The debugger statement\n\n function parseDebuggerStatement(node) {\n expectKeyword('debugger');\n\n consumeSemicolon();\n\n return node.finishDebuggerStatement();\n }\n\n // 13 Statements\n\n function parseStatement() {\n var type = lookahead.type,\n expr,\n labeledBody,\n key,\n node;\n\n if (type === Token.EOF) {\n throwUnexpectedToken(lookahead);\n }\n\n if (type === Token.Punctuator && lookahead.value === '{') {\n return parseBlock();\n }\n isAssignmentTarget = isBindingElement = true;\n node = new Node();\n\n if (type === Token.Punctuator) {\n switch (lookahead.value) {\n case ';':\n return parseEmptyStatement(node);\n case '(':\n return parseExpressionStatement(node);\n default:\n break;\n }\n } else if (type === Token.Keyword) {\n switch (lookahead.value) {\n case 'break':\n return parseBreakStatement(node);\n case 'continue':\n return parseContinueStatement(node);\n case 'debugger':\n return parseDebuggerStatement(node);\n case 'do':\n return parseDoWhileStatement(node);\n case 'for':\n return parseForStatement(node);\n case 'function':\n return parseFunctionDeclaration(node);\n case 'if':\n return parseIfStatement(node);\n case 'return':\n return parseReturnStatement(node);\n case 'switch':\n return parseSwitchStatement(node);\n case 'throw':\n return parseThrowStatement(node);\n case 'try':\n return parseTryStatement(node);\n case 'var':\n return parseVariableStatement(node);\n case 'while':\n return parseWhileStatement(node);\n case 'with':\n return parseWithStatement(node);\n default:\n break;\n }\n }\n\n expr = parseExpression();\n\n // ECMA-262 12.12 Labelled Statements\n if ((expr.type === Syntax.Identifier) && match(':')) {\n lex();\n\n key = '$' + expr.name;\n if (Object.prototype.hasOwnProperty.call(state.labelSet, key)) {\n throwError(Messages.Redeclaration, 'Label', expr.name);\n }\n\n state.labelSet[key] = true;\n labeledBody = parseStatement();\n delete state.labelSet[key];\n return node.finishLabeledStatement(expr, labeledBody);\n }\n\n consumeSemicolon();\n\n return node.finishExpressionStatement(expr);\n }\n\n // ECMA-262 14.1 Function Definition\n\n function parseFunctionSourceElements() {\n var statement, body = [], token, directive, firstRestricted,\n oldLabelSet, oldInIteration, oldInSwitch, oldInFunctionBody, oldParenthesisCount,\n node = new Node();\n\n expect('{');\n\n while (startIndex < length) {\n if (lookahead.type !== Token.StringLiteral) {\n break;\n }\n token = lookahead;\n\n statement = parseStatementListItem();\n body.push(statement);\n if (statement.expression.type !== Syntax.Literal) {\n // this is not directive\n break;\n }\n directive = source.slice(token.start + 1, token.end - 1);\n if (directive === 'use strict') {\n strict = true;\n if (firstRestricted) {\n tolerateUnexpectedToken(firstRestricted, Messages.StrictOctalLiteral);\n }\n } else {\n if (!firstRestricted && token.octal) {\n firstRestricted = token;\n }\n }\n }\n\n oldLabelSet = state.labelSet;\n oldInIteration = state.inIteration;\n oldInSwitch = state.inSwitch;\n oldInFunctionBody = state.inFunctionBody;\n oldParenthesisCount = state.parenthesizedCount;\n\n state.labelSet = {};\n state.inIteration = false;\n state.inSwitch = false;\n state.inFunctionBody = true;\n state.parenthesizedCount = 0;\n\n while (startIndex < length) {\n if (match('}')) {\n break;\n }\n body.push(parseStatementListItem());\n }\n\n expect('}');\n\n state.labelSet = oldLabelSet;\n state.inIteration = oldInIteration;\n state.inSwitch = oldInSwitch;\n state.inFunctionBody = oldInFunctionBody;\n state.parenthesizedCount = oldParenthesisCount;\n\n return node.finishBlockStatement(body);\n }\n\n function validateParam(options, param, name) {\n var key = '$' + name;\n if (strict) {\n if (isRestrictedWord(name)) {\n options.stricted = param;\n options.message = Messages.StrictParamName;\n }\n if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {\n options.stricted = param;\n options.message = Messages.StrictParamDupe;\n }\n } else if (!options.firstRestricted) {\n if (isRestrictedWord(name)) {\n options.firstRestricted = param;\n options.message = Messages.StrictParamName;\n } else if (isStrictModeReservedWord(name)) {\n options.firstRestricted = param;\n options.message = Messages.StrictReservedWord;\n } else if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {\n options.stricted = param;\n options.message = Messages.StrictParamDupe;\n }\n }\n options.paramSet[key] = true;\n }\n\n function parseParam(options) {\n var token, param, params = [], i, def;\n\n token = lookahead;\n if (token.value === '...') {\n param = parseRestElement(params);\n validateParam(options, param.argument, param.argument.name);\n options.params.push(param);\n options.defaults.push(null);\n return false;\n }\n\n param = parsePatternWithDefault(params);\n for (i = 0; i < params.length; i++) {\n validateParam(options, params[i], params[i].value);\n }\n\n if (param.type === Syntax.AssignmentPattern) {\n def = param.right;\n param = param.left;\n ++options.defaultCount;\n }\n\n options.params.push(param);\n options.defaults.push(def);\n\n return !match(')');\n }\n\n function parseParams(firstRestricted) {\n var options;\n\n options = {\n params: [],\n defaultCount: 0,\n defaults: [],\n firstRestricted: firstRestricted\n };\n\n expect('(');\n\n if (!match(')')) {\n options.paramSet = {};\n while (startIndex < length) {\n if (!parseParam(options)) {\n break;\n }\n expect(',');\n }\n }\n\n expect(')');\n\n if (options.defaultCount === 0) {\n options.defaults = [];\n }\n\n return {\n params: options.params,\n defaults: options.defaults,\n stricted: options.stricted,\n firstRestricted: options.firstRestricted,\n message: options.message\n };\n }\n\n function parseFunctionDeclaration(node, identifierIsOptional) {\n var id = null, params = [], defaults = [], body, token, stricted, tmp, firstRestricted, message, previousStrict,\n isGenerator, previousAllowYield;\n\n previousAllowYield = state.allowYield;\n\n expectKeyword('function');\n\n isGenerator = match('*');\n if (isGenerator) {\n lex();\n }\n\n if (!identifierIsOptional || !match('(')) {\n token = lookahead;\n id = parseVariableIdentifier();\n if (strict) {\n if (isRestrictedWord(token.value)) {\n tolerateUnexpectedToken(token, Messages.StrictFunctionName);\n }\n } else {\n if (isRestrictedWord(token.value)) {\n firstRestricted = token;\n message = Messages.StrictFunctionName;\n } else if (isStrictModeReservedWord(token.value)) {\n firstRestricted = token;\n message = Messages.StrictReservedWord;\n }\n }\n }\n\n state.allowYield = !isGenerator;\n tmp = parseParams(firstRestricted);\n params = tmp.params;\n defaults = tmp.defaults;\n stricted = tmp.stricted;\n firstRestricted = tmp.firstRestricted;\n if (tmp.message) {\n message = tmp.message;\n }\n\n\n previousStrict = strict;\n body = parseFunctionSourceElements();\n if (strict && firstRestricted) {\n throwUnexpectedToken(firstRestricted, message);\n }\n if (strict && stricted) {\n tolerateUnexpectedToken(stricted, message);\n }\n\n strict = previousStrict;\n state.allowYield = previousAllowYield;\n\n return node.finishFunctionDeclaration(id, params, defaults, body, isGenerator);\n }\n\n function parseFunctionExpression() {\n var token, id = null, stricted, firstRestricted, message, tmp,\n params = [], defaults = [], body, previousStrict, node = new Node(),\n isGenerator, previousAllowYield;\n\n previousAllowYield = state.allowYield;\n\n expectKeyword('function');\n\n isGenerator = match('*');\n if (isGenerator) {\n lex();\n }\n\n state.allowYield = !isGenerator;\n if (!match('(')) {\n token = lookahead;\n id = (!strict && !isGenerator && matchKeyword('yield')) ? parseNonComputedProperty() : parseVariableIdentifier();\n if (strict) {\n if (isRestrictedWord(token.value)) {\n tolerateUnexpectedToken(token, Messages.StrictFunctionName);\n }\n } else {\n if (isRestrictedWord(token.value)) {\n firstRestricted = token;\n message = Messages.StrictFunctionName;\n } else if (isStrictModeReservedWord(token.value)) {\n firstRestricted = token;\n message = Messages.StrictReservedWord;\n }\n }\n }\n\n tmp = parseParams(firstRestricted);\n params = tmp.params;\n defaults = tmp.defaults;\n stricted = tmp.stricted;\n firstRestricted = tmp.firstRestricted;\n if (tmp.message) {\n message = tmp.message;\n }\n\n previousStrict = strict;\n body = parseFunctionSourceElements();\n if (strict && firstRestricted) {\n throwUnexpectedToken(firstRestricted, message);\n }\n if (strict && stricted) {\n tolerateUnexpectedToken(stricted, message);\n }\n strict = previousStrict;\n state.allowYield = previousAllowYield;\n\n return node.finishFunctionExpression(id, params, defaults, body, isGenerator);\n }\n\n // ECMA-262 14.5 Class Definitions\n\n function parseClassBody() {\n var classBody, token, isStatic, hasConstructor = false, body, method, computed, key;\n\n classBody = new Node();\n\n expect('{');\n body = [];\n while (!match('}')) {\n if (match(';')) {\n lex();\n } else {\n method = new Node();\n token = lookahead;\n isStatic = false;\n computed = match('[');\n if (match('*')) {\n lex();\n } else {\n key = parseObjectPropertyKey();\n if (key.name === 'static' && (lookaheadPropertyName() || match('*'))) {\n token = lookahead;\n isStatic = true;\n computed = match('[');\n if (match('*')) {\n lex();\n } else {\n key = parseObjectPropertyKey();\n }\n }\n }\n method = tryParseMethodDefinition(token, key, computed, method);\n if (method) {\n method['static'] = isStatic; // jscs:ignore requireDotNotation\n if (method.kind === 'init') {\n method.kind = 'method';\n }\n if (!isStatic) {\n if (!method.computed && (method.key.name || method.key.value.toString()) === 'constructor') {\n if (method.kind !== 'method' || !method.method || method.value.generator) {\n throwUnexpectedToken(token, Messages.ConstructorSpecialMethod);\n }\n if (hasConstructor) {\n throwUnexpectedToken(token, Messages.DuplicateConstructor);\n } else {\n hasConstructor = true;\n }\n method.kind = 'constructor';\n }\n } else {\n if (!method.computed && (method.key.name || method.key.value.toString()) === 'prototype') {\n throwUnexpectedToken(token, Messages.StaticPrototype);\n }\n }\n method.type = Syntax.MethodDefinition;\n delete method.method;\n delete method.shorthand;\n body.push(method);\n } else {\n throwUnexpectedToken(lookahead);\n }\n }\n }\n lex();\n return classBody.finishClassBody(body);\n }\n\n function parseClassDeclaration(identifierIsOptional) {\n var id = null, superClass = null, classNode = new Node(), classBody, previousStrict = strict;\n strict = true;\n\n expectKeyword('class');\n\n if (!identifierIsOptional || lookahead.type === Token.Identifier) {\n id = parseVariableIdentifier();\n }\n\n if (matchKeyword('extends')) {\n lex();\n superClass = isolateCoverGrammar(parseLeftHandSideExpressionAllowCall);\n }\n classBody = parseClassBody();\n strict = previousStrict;\n\n return classNode.finishClassDeclaration(id, superClass, classBody);\n }\n\n function parseClassExpression() {\n var id = null, superClass = null, classNode = new Node(), classBody, previousStrict = strict;\n strict = true;\n\n expectKeyword('class');\n\n if (lookahead.type === Token.Identifier) {\n id = parseVariableIdentifier();\n }\n\n if (matchKeyword('extends')) {\n lex();\n superClass = isolateCoverGrammar(parseLeftHandSideExpressionAllowCall);\n }\n classBody = parseClassBody();\n strict = previousStrict;\n\n return classNode.finishClassExpression(id, superClass, classBody);\n }\n\n // ECMA-262 15.2 Modules\n\n function parseModuleSpecifier() {\n var node = new Node();\n\n if (lookahead.type !== Token.StringLiteral) {\n throwError(Messages.InvalidModuleSpecifier);\n }\n return node.finishLiteral(lex());\n }\n\n // ECMA-262 15.2.3 Exports\n\n function parseExportSpecifier() {\n var exported, local, node = new Node(), def;\n if (matchKeyword('default')) {\n // export {default} from 'something';\n def = new Node();\n lex();\n local = def.finishIdentifier('default');\n } else {\n local = parseVariableIdentifier();\n }\n if (matchContextualKeyword('as')) {\n lex();\n exported = parseNonComputedProperty();\n }\n return node.finishExportSpecifier(local, exported);\n }\n\n function parseExportNamedDeclaration(node) {\n var declaration = null,\n isExportFromIdentifier,\n src = null, specifiers = [];\n\n // non-default export\n if (lookahead.type === Token.Keyword) {\n // covers:\n // export var f = 1;\n switch (lookahead.value) {\n case 'let':\n case 'const':\n declaration = parseLexicalDeclaration({inFor: false});\n return node.finishExportNamedDeclaration(declaration, specifiers, null);\n case 'var':\n case 'class':\n case 'function':\n declaration = parseStatementListItem();\n return node.finishExportNamedDeclaration(declaration, specifiers, null);\n }\n }\n\n expect('{');\n while (!match('}')) {\n isExportFromIdentifier = isExportFromIdentifier || matchKeyword('default');\n specifiers.push(parseExportSpecifier());\n if (!match('}')) {\n expect(',');\n if (match('}')) {\n break;\n }\n }\n }\n expect('}');\n\n if (matchContextualKeyword('from')) {\n // covering:\n // export {default} from 'foo';\n // export {foo} from 'foo';\n lex();\n src = parseModuleSpecifier();\n consumeSemicolon();\n } else if (isExportFromIdentifier) {\n // covering:\n // export {default}; // missing fromClause\n throwError(lookahead.value ?\n Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value);\n } else {\n // cover\n // export {foo};\n consumeSemicolon();\n }\n return node.finishExportNamedDeclaration(declaration, specifiers, src);\n }\n\n function parseExportDefaultDeclaration(node) {\n var declaration = null,\n expression = null;\n\n // covers:\n // export default ...\n expectKeyword('default');\n\n if (matchKeyword('function')) {\n // covers:\n // export default function foo () {}\n // export default function () {}\n declaration = parseFunctionDeclaration(new Node(), true);\n return node.finishExportDefaultDeclaration(declaration);\n }\n if (matchKeyword('class')) {\n declaration = parseClassDeclaration(true);\n return node.finishExportDefaultDeclaration(declaration);\n }\n\n if (matchContextualKeyword('from')) {\n throwError(Messages.UnexpectedToken, lookahead.value);\n }\n\n // covers:\n // export default {};\n // export default [];\n // export default (1 + 2);\n if (match('{')) {\n expression = parseObjectInitializer();\n } else if (match('[')) {\n expression = parseArrayInitializer();\n } else {\n expression = parseAssignmentExpression();\n }\n consumeSemicolon();\n return node.finishExportDefaultDeclaration(expression);\n }\n\n function parseExportAllDeclaration(node) {\n var src;\n\n // covers:\n // export * from 'foo';\n expect('*');\n if (!matchContextualKeyword('from')) {\n throwError(lookahead.value ?\n Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value);\n }\n lex();\n src = parseModuleSpecifier();\n consumeSemicolon();\n\n return node.finishExportAllDeclaration(src);\n }\n\n function parseExportDeclaration() {\n var node = new Node();\n if (state.inFunctionBody) {\n throwError(Messages.IllegalExportDeclaration);\n }\n\n expectKeyword('export');\n\n if (matchKeyword('default')) {\n return parseExportDefaultDeclaration(node);\n }\n if (match('*')) {\n return parseExportAllDeclaration(node);\n }\n return parseExportNamedDeclaration(node);\n }\n\n // ECMA-262 15.2.2 Imports\n\n function parseImportSpecifier() {\n // import {} ...;\n var local, imported, node = new Node();\n\n imported = parseNonComputedProperty();\n if (matchContextualKeyword('as')) {\n lex();\n local = parseVariableIdentifier();\n }\n\n return node.finishImportSpecifier(local, imported);\n }\n\n function parseNamedImports() {\n var specifiers = [];\n // {foo, bar as bas}\n expect('{');\n while (!match('}')) {\n specifiers.push(parseImportSpecifier());\n if (!match('}')) {\n expect(',');\n if (match('}')) {\n break;\n }\n }\n }\n expect('}');\n return specifiers;\n }\n\n function parseImportDefaultSpecifier() {\n // import ...;\n var local, node = new Node();\n\n local = parseNonComputedProperty();\n\n return node.finishImportDefaultSpecifier(local);\n }\n\n function parseImportNamespaceSpecifier() {\n // import <* as foo> ...;\n var local, node = new Node();\n\n expect('*');\n if (!matchContextualKeyword('as')) {\n throwError(Messages.NoAsAfterImportNamespace);\n }\n lex();\n local = parseNonComputedProperty();\n\n return node.finishImportNamespaceSpecifier(local);\n }\n\n function parseImportDeclaration() {\n var specifiers = [], src, node = new Node();\n\n if (state.inFunctionBody) {\n throwError(Messages.IllegalImportDeclaration);\n }\n\n expectKeyword('import');\n\n if (lookahead.type === Token.StringLiteral) {\n // import 'foo';\n src = parseModuleSpecifier();\n } else {\n\n if (match('{')) {\n // import {bar}\n specifiers = specifiers.concat(parseNamedImports());\n } else if (match('*')) {\n // import * as foo\n specifiers.push(parseImportNamespaceSpecifier());\n } else if (isIdentifierName(lookahead) && !matchKeyword('default')) {\n // import foo\n specifiers.push(parseImportDefaultSpecifier());\n if (match(',')) {\n lex();\n if (match('*')) {\n // import foo, * as foo\n specifiers.push(parseImportNamespaceSpecifier());\n } else if (match('{')) {\n // import foo, {bar}\n specifiers = specifiers.concat(parseNamedImports());\n } else {\n throwUnexpectedToken(lookahead);\n }\n }\n } else {\n throwUnexpectedToken(lex());\n }\n\n if (!matchContextualKeyword('from')) {\n throwError(lookahead.value ?\n Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value);\n }\n lex();\n src = parseModuleSpecifier();\n }\n\n consumeSemicolon();\n return node.finishImportDeclaration(specifiers, src);\n }\n\n // ECMA-262 15.1 Scripts\n\n function parseScriptBody() {\n var statement, body = [], token, directive, firstRestricted;\n\n while (startIndex < length) {\n token = lookahead;\n if (token.type !== Token.StringLiteral) {\n break;\n }\n\n statement = parseStatementListItem();\n body.push(statement);\n if (statement.expression.type !== Syntax.Literal) {\n // this is not directive\n break;\n }\n directive = source.slice(token.start + 1, token.end - 1);\n if (directive === 'use strict') {\n strict = true;\n if (firstRestricted) {\n tolerateUnexpectedToken(firstRestricted, Messages.StrictOctalLiteral);\n }\n } else {\n if (!firstRestricted && token.octal) {\n firstRestricted = token;\n }\n }\n }\n\n while (startIndex < length) {\n statement = parseStatementListItem();\n /* istanbul ignore if */\n if (typeof statement === 'undefined') {\n break;\n }\n body.push(statement);\n }\n return body;\n }\n\n function parseProgram() {\n var body, node;\n\n peek();\n node = new Node();\n\n body = parseScriptBody();\n return node.finishProgram(body, state.sourceType);\n }\n\n function filterTokenLocation() {\n var i, entry, token, tokens = [];\n\n for (i = 0; i < extra.tokens.length; ++i) {\n entry = extra.tokens[i];\n token = {\n type: entry.type,\n value: entry.value\n };\n if (entry.regex) {\n token.regex = {\n pattern: entry.regex.pattern,\n flags: entry.regex.flags\n };\n }\n if (extra.range) {\n token.range = entry.range;\n }\n if (extra.loc) {\n token.loc = entry.loc;\n }\n tokens.push(token);\n }\n\n extra.tokens = tokens;\n }\n\n function tokenize(code, options, delegate) {\n var toString,\n tokens;\n\n toString = String;\n if (typeof code !== 'string' && !(code instanceof String)) {\n code = toString(code);\n }\n\n source = code;\n index = 0;\n lineNumber = (source.length > 0) ? 1 : 0;\n lineStart = 0;\n startIndex = index;\n startLineNumber = lineNumber;\n startLineStart = lineStart;\n length = source.length;\n lookahead = null;\n state = {\n allowIn: true,\n allowYield: true,\n labelSet: {},\n inFunctionBody: false,\n inIteration: false,\n inSwitch: false,\n lastCommentStart: -1,\n curlyStack: []\n };\n\n extra = {};\n\n // Options matching.\n options = options || {};\n\n // Of course we collect tokens here.\n options.tokens = true;\n extra.tokens = [];\n extra.tokenValues = [];\n extra.tokenize = true;\n extra.delegate = delegate;\n\n // The following two fields are necessary to compute the Regex tokens.\n extra.openParenToken = -1;\n extra.openCurlyToken = -1;\n\n extra.range = (typeof options.range === 'boolean') && options.range;\n extra.loc = (typeof options.loc === 'boolean') && options.loc;\n\n if (typeof options.comment === 'boolean' && options.comment) {\n extra.comments = [];\n }\n if (typeof options.tolerant === 'boolean' && options.tolerant) {\n extra.errors = [];\n }\n\n try {\n peek();\n if (lookahead.type === Token.EOF) {\n return extra.tokens;\n }\n\n lex();\n while (lookahead.type !== Token.EOF) {\n try {\n lex();\n } catch (lexError) {\n if (extra.errors) {\n recordError(lexError);\n // We have to break on the first error\n // to avoid infinite loops.\n break;\n } else {\n throw lexError;\n }\n }\n }\n\n tokens = extra.tokens;\n if (typeof extra.errors !== 'undefined') {\n tokens.errors = extra.errors;\n }\n } catch (e) {\n throw e;\n } finally {\n extra = {};\n }\n return tokens;\n }\n\n function parse(code, options) {\n var program, toString;\n\n toString = String;\n if (typeof code !== 'string' && !(code instanceof String)) {\n code = toString(code);\n }\n\n source = code;\n index = 0;\n lineNumber = (source.length > 0) ? 1 : 0;\n lineStart = 0;\n startIndex = index;\n startLineNumber = lineNumber;\n startLineStart = lineStart;\n length = source.length;\n lookahead = null;\n state = {\n allowIn: true,\n allowYield: true,\n labelSet: {},\n inFunctionBody: false,\n inIteration: false,\n inSwitch: false,\n lastCommentStart: -1,\n curlyStack: [],\n sourceType: 'script'\n };\n strict = false;\n\n extra = {};\n if (typeof options !== 'undefined') {\n extra.range = (typeof options.range === 'boolean') && options.range;\n extra.loc = (typeof options.loc === 'boolean') && options.loc;\n extra.attachComment = (typeof options.attachComment === 'boolean') && options.attachComment;\n\n if (extra.loc && options.source !== null && options.source !== undefined) {\n extra.source = toString(options.source);\n }\n\n if (typeof options.tokens === 'boolean' && options.tokens) {\n extra.tokens = [];\n }\n if (typeof options.comment === 'boolean' && options.comment) {\n extra.comments = [];\n }\n if (typeof options.tolerant === 'boolean' && options.tolerant) {\n extra.errors = [];\n }\n if (extra.attachComment) {\n extra.range = true;\n extra.comments = [];\n extra.bottomRightStack = [];\n extra.trailingComments = [];\n extra.leadingComments = [];\n }\n if (options.sourceType === 'module') {\n // very restrictive condition for now\n state.sourceType = options.sourceType;\n strict = true;\n }\n }\n\n try {\n program = parseProgram();\n if (typeof extra.comments !== 'undefined') {\n program.comments = extra.comments;\n }\n if (typeof extra.tokens !== 'undefined') {\n filterTokenLocation();\n program.tokens = extra.tokens;\n }\n if (typeof extra.errors !== 'undefined') {\n program.errors = extra.errors;\n }\n } catch (e) {\n throw e;\n } finally {\n extra = {};\n }\n\n return program;\n }\n\n // Sync with *.json manifests.\n exports.version = '2.7.1';\n\n exports.tokenize = tokenize;\n\n exports.parse = parse;\n\n // Deep copy.\n /* istanbul ignore next */\n exports.Syntax = (function () {\n var name, types = {};\n\n if (typeof Object.create === 'function') {\n types = Object.create(null);\n }\n\n for (name in Syntax) {\n if (Syntax.hasOwnProperty(name)) {\n types[name] = Syntax[name];\n }\n }\n\n if (typeof Object.freeze === 'function') {\n Object.freeze(types);\n }\n\n return types;\n }());\n\n}));\n/* vim: set sw=4 ts=4 et tw=80 : */\n", + "/*\n Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n(function (root, factory) {\n 'use strict';\n\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js,\n // Rhino, and plain browser loading.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define(['exports'], factory);\n } else if (typeof exports !== 'undefined') {\n factory(exports);\n } else {\n factory((root.esprima = {}));\n }\n}(this, function (exports) {\n 'use strict';\n\n var Token,\n TokenName,\n FnExprTokens,\n Syntax,\n PlaceHolders,\n Messages,\n Regex,\n source,\n strict,\n index,\n lineNumber,\n lineStart,\n hasLineTerminator,\n lastIndex,\n lastLineNumber,\n lastLineStart,\n startIndex,\n startLineNumber,\n startLineStart,\n scanning,\n length,\n lookahead,\n state,\n extra,\n isBindingElement,\n isAssignmentTarget,\n firstCoverInitializedNameError;\n\n Token = {\n BooleanLiteral: 1,\n EOF: 2,\n Identifier: 3,\n Keyword: 4,\n NullLiteral: 5,\n NumericLiteral: 6,\n Punctuator: 7,\n StringLiteral: 8,\n RegularExpression: 9,\n Template: 10\n };\n\n TokenName = {};\n TokenName[Token.BooleanLiteral] = 'Boolean';\n TokenName[Token.EOF] = '';\n TokenName[Token.Identifier] = 'Identifier';\n TokenName[Token.Keyword] = 'Keyword';\n TokenName[Token.NullLiteral] = 'Null';\n TokenName[Token.NumericLiteral] = 'Numeric';\n TokenName[Token.Punctuator] = 'Punctuator';\n TokenName[Token.StringLiteral] = 'String';\n TokenName[Token.RegularExpression] = 'RegularExpression';\n TokenName[Token.Template] = 'Template';\n\n // A function following one of those tokens is an expression.\n FnExprTokens = ['(', '{', '[', 'in', 'typeof', 'instanceof', 'new',\n 'return', 'case', 'delete', 'throw', 'void',\n // assignment operators\n '=', '+=', '-=', '*=', '/=', '%=', '<<=', '>>=', '>>>=',\n '&=', '|=', '^=', ',',\n // binary/unary operators\n '+', '-', '*', '/', '%', '++', '--', '<<', '>>', '>>>', '&',\n '|', '^', '!', '~', '&&', '||', '?', ':', '===', '==', '>=',\n '<=', '<', '>', '!=', '!=='];\n\n Syntax = {\n AssignmentExpression: 'AssignmentExpression',\n AssignmentPattern: 'AssignmentPattern',\n ArrayExpression: 'ArrayExpression',\n ArrayPattern: 'ArrayPattern',\n ArrowFunctionExpression: 'ArrowFunctionExpression',\n BlockStatement: 'BlockStatement',\n BinaryExpression: 'BinaryExpression',\n BreakStatement: 'BreakStatement',\n CallExpression: 'CallExpression',\n CatchClause: 'CatchClause',\n ClassBody: 'ClassBody',\n ClassDeclaration: 'ClassDeclaration',\n ClassExpression: 'ClassExpression',\n ConditionalExpression: 'ConditionalExpression',\n ContinueStatement: 'ContinueStatement',\n DoWhileStatement: 'DoWhileStatement',\n DebuggerStatement: 'DebuggerStatement',\n EmptyStatement: 'EmptyStatement',\n ExportAllDeclaration: 'ExportAllDeclaration',\n ExportDefaultDeclaration: 'ExportDefaultDeclaration',\n ExportNamedDeclaration: 'ExportNamedDeclaration',\n ExportSpecifier: 'ExportSpecifier',\n ExpressionStatement: 'ExpressionStatement',\n ForStatement: 'ForStatement',\n ForOfStatement: 'ForOfStatement',\n ForInStatement: 'ForInStatement',\n FunctionDeclaration: 'FunctionDeclaration',\n FunctionExpression: 'FunctionExpression',\n Identifier: 'Identifier',\n IfStatement: 'IfStatement',\n ImportDeclaration: 'ImportDeclaration',\n ImportDefaultSpecifier: 'ImportDefaultSpecifier',\n ImportNamespaceSpecifier: 'ImportNamespaceSpecifier',\n ImportSpecifier: 'ImportSpecifier',\n Literal: 'Literal',\n LabeledStatement: 'LabeledStatement',\n LogicalExpression: 'LogicalExpression',\n MemberExpression: 'MemberExpression',\n MetaProperty: 'MetaProperty',\n MethodDefinition: 'MethodDefinition',\n NewExpression: 'NewExpression',\n ObjectExpression: 'ObjectExpression',\n ObjectPattern: 'ObjectPattern',\n Program: 'Program',\n Property: 'Property',\n RestElement: 'RestElement',\n ReturnStatement: 'ReturnStatement',\n SequenceExpression: 'SequenceExpression',\n SpreadElement: 'SpreadElement',\n Super: 'Super',\n SwitchCase: 'SwitchCase',\n SwitchStatement: 'SwitchStatement',\n TaggedTemplateExpression: 'TaggedTemplateExpression',\n TemplateElement: 'TemplateElement',\n TemplateLiteral: 'TemplateLiteral',\n ThisExpression: 'ThisExpression',\n ThrowStatement: 'ThrowStatement',\n TryStatement: 'TryStatement',\n UnaryExpression: 'UnaryExpression',\n UpdateExpression: 'UpdateExpression',\n VariableDeclaration: 'VariableDeclaration',\n VariableDeclarator: 'VariableDeclarator',\n WhileStatement: 'WhileStatement',\n WithStatement: 'WithStatement',\n YieldExpression: 'YieldExpression'\n };\n\n PlaceHolders = {\n ArrowParameterPlaceHolder: 'ArrowParameterPlaceHolder'\n };\n\n // Error messages should be identical to V8.\n Messages = {\n UnexpectedToken: 'Unexpected token %0',\n UnexpectedNumber: 'Unexpected number',\n UnexpectedString: 'Unexpected string',\n UnexpectedIdentifier: 'Unexpected identifier',\n UnexpectedReserved: 'Unexpected reserved word',\n UnexpectedTemplate: 'Unexpected quasi %0',\n UnexpectedEOS: 'Unexpected end of input',\n NewlineAfterThrow: 'Illegal newline after throw',\n InvalidRegExp: 'Invalid regular expression',\n UnterminatedRegExp: 'Invalid regular expression: missing /',\n InvalidLHSInAssignment: 'Invalid left-hand side in assignment',\n InvalidLHSInForIn: 'Invalid left-hand side in for-in',\n InvalidLHSInForLoop: 'Invalid left-hand side in for-loop',\n MultipleDefaultsInSwitch: 'More than one default clause in switch statement',\n NoCatchOrFinally: 'Missing catch or finally after try',\n UnknownLabel: 'Undefined label \\'%0\\'',\n Redeclaration: '%0 \\'%1\\' has already been declared',\n IllegalContinue: 'Illegal continue statement',\n IllegalBreak: 'Illegal break statement',\n IllegalReturn: 'Illegal return statement',\n StrictModeWith: 'Strict mode code may not include a with statement',\n StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode',\n StrictVarName: 'Variable name may not be eval or arguments in strict mode',\n StrictParamName: 'Parameter name eval or arguments is not allowed in strict mode',\n StrictParamDupe: 'Strict mode function may not have duplicate parameter names',\n StrictFunctionName: 'Function name may not be eval or arguments in strict mode',\n StrictOctalLiteral: 'Octal literals are not allowed in strict mode.',\n StrictDelete: 'Delete of an unqualified identifier in strict mode.',\n StrictLHSAssignment: 'Assignment to eval or arguments is not allowed in strict mode',\n StrictLHSPostfix: 'Postfix increment/decrement may not have eval or arguments operand in strict mode',\n StrictLHSPrefix: 'Prefix increment/decrement may not have eval or arguments operand in strict mode',\n StrictReservedWord: 'Use of future reserved word in strict mode',\n TemplateOctalLiteral: 'Octal literals are not allowed in template strings.',\n ParameterAfterRestParameter: 'Rest parameter must be last formal parameter',\n DefaultRestParameter: 'Unexpected token =',\n ObjectPatternAsRestParameter: 'Unexpected token {',\n DuplicateProtoProperty: 'Duplicate __proto__ fields are not allowed in object literals',\n ConstructorSpecialMethod: 'Class constructor may not be an accessor',\n DuplicateConstructor: 'A class may only have one constructor',\n StaticPrototype: 'Classes may not have static property named prototype',\n MissingFromClause: 'Unexpected token',\n NoAsAfterImportNamespace: 'Unexpected token',\n InvalidModuleSpecifier: 'Unexpected token',\n IllegalImportDeclaration: 'Unexpected token',\n IllegalExportDeclaration: 'Unexpected token',\n DuplicateBinding: 'Duplicate binding %0'\n };\n\n // See also tools/generate-unicode-regex.js.\n Regex = {\n // ECMAScript 6/Unicode v7.0.0 NonAsciiIdentifierStart:\n NonAsciiIdentifierStart: /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309B-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF5D-\\uDF61]|\\uD805[\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF98]|\\uD809[\\uDC00-\\uDC6E]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50\\uDF93-\\uDF9F]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD83A[\\uDC00-\\uDCC4]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D]|\\uD87E[\\uDC00-\\uDE1D]/,\n\n // ECMAScript 6/Unicode v7.0.0 NonAsciiIdentifierPart:\n NonAsciiIdentifierPart: /[\\xAA\\xB5\\xB7\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1369-\\u1371\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDDFD\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE38-\\uDE3A\\uDE3F\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE6\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDD0-\\uDDDA\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF01-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB7\\uDEC0-\\uDEC9]|\\uD806[\\uDCA0-\\uDCE9\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF98]|\\uD809[\\uDC00-\\uDC6E]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDEF0-\\uDEF4\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50-\\uDF7E\\uDF8F-\\uDF9F]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/\n };\n\n // Ensure the condition is true, otherwise throw an error.\n // This is only to have a better contract semantic, i.e. another safety net\n // to catch a logic error. The condition shall be fulfilled in normal case.\n // Do NOT use this to enforce a certain condition on any user input.\n\n function assert(condition, message) {\n /* istanbul ignore if */\n if (!condition) {\n throw new Error('ASSERT: ' + message);\n }\n }\n\n function isDecimalDigit(ch) {\n return (ch >= 0x30 && ch <= 0x39); // 0..9\n }\n\n function isHexDigit(ch) {\n return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;\n }\n\n function isOctalDigit(ch) {\n return '01234567'.indexOf(ch) >= 0;\n }\n\n function octalToDecimal(ch) {\n // \\0 is not octal escape sequence\n var octal = (ch !== '0'), code = '01234567'.indexOf(ch);\n\n if (index < length && isOctalDigit(source[index])) {\n octal = true;\n code = code * 8 + '01234567'.indexOf(source[index++]);\n\n // 3 digits are only allowed when string starts\n // with 0, 1, 2, 3\n if ('0123'.indexOf(ch) >= 0 &&\n index < length &&\n isOctalDigit(source[index])) {\n code = code * 8 + '01234567'.indexOf(source[index++]);\n }\n }\n\n return {\n code: code,\n octal: octal\n };\n }\n\n // ECMA-262 11.2 White Space\n\n function isWhiteSpace(ch) {\n return (ch === 0x20) || (ch === 0x09) || (ch === 0x0B) || (ch === 0x0C) || (ch === 0xA0) ||\n (ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0);\n }\n\n // ECMA-262 11.3 Line Terminators\n\n function isLineTerminator(ch) {\n return (ch === 0x0A) || (ch === 0x0D) || (ch === 0x2028) || (ch === 0x2029);\n }\n\n // ECMA-262 11.6 Identifier Names and Identifiers\n\n function fromCodePoint(cp) {\n return (cp < 0x10000) ? String.fromCharCode(cp) :\n String.fromCharCode(0xD800 + ((cp - 0x10000) >> 10)) +\n String.fromCharCode(0xDC00 + ((cp - 0x10000) & 1023));\n }\n\n function isIdentifierStart(ch) {\n return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore)\n (ch >= 0x41 && ch <= 0x5A) || // A..Z\n (ch >= 0x61 && ch <= 0x7A) || // a..z\n (ch === 0x5C) || // \\ (backslash)\n ((ch >= 0x80) && Regex.NonAsciiIdentifierStart.test(fromCodePoint(ch)));\n }\n\n function isIdentifierPart(ch) {\n return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore)\n (ch >= 0x41 && ch <= 0x5A) || // A..Z\n (ch >= 0x61 && ch <= 0x7A) || // a..z\n (ch >= 0x30 && ch <= 0x39) || // 0..9\n (ch === 0x5C) || // \\ (backslash)\n ((ch >= 0x80) && Regex.NonAsciiIdentifierPart.test(fromCodePoint(ch)));\n }\n\n // ECMA-262 11.6.2.2 Future Reserved Words\n\n function isFutureReservedWord(id) {\n switch (id) {\n case 'enum':\n case 'export':\n case 'import':\n case 'super':\n return true;\n default:\n return false;\n }\n }\n\n function isStrictModeReservedWord(id) {\n switch (id) {\n case 'implements':\n case 'interface':\n case 'package':\n case 'private':\n case 'protected':\n case 'public':\n case 'static':\n case 'yield':\n case 'let':\n return true;\n default:\n return false;\n }\n }\n\n function isRestrictedWord(id) {\n return id === 'eval' || id === 'arguments';\n }\n\n // ECMA-262 11.6.2.1 Keywords\n\n function isKeyword(id) {\n switch (id.length) {\n case 2:\n return (id === 'if') || (id === 'in') || (id === 'do');\n case 3:\n return (id === 'var') || (id === 'for') || (id === 'new') ||\n (id === 'try') || (id === 'let');\n case 4:\n return (id === 'this') || (id === 'else') || (id === 'case') ||\n (id === 'void') || (id === 'with') || (id === 'enum');\n case 5:\n return (id === 'while') || (id === 'break') || (id === 'catch') ||\n (id === 'throw') || (id === 'const') || (id === 'yield') ||\n (id === 'class') || (id === 'super');\n case 6:\n return (id === 'return') || (id === 'typeof') || (id === 'delete') ||\n (id === 'switch') || (id === 'export') || (id === 'import');\n case 7:\n return (id === 'default') || (id === 'finally') || (id === 'extends');\n case 8:\n return (id === 'function') || (id === 'continue') || (id === 'debugger');\n case 10:\n return (id === 'instanceof');\n default:\n return false;\n }\n }\n\n // ECMA-262 11.4 Comments\n\n function addComment(type, value, start, end, loc) {\n var comment;\n\n assert(typeof start === 'number', 'Comment must have valid position');\n\n state.lastCommentStart = start;\n\n comment = {\n type: type,\n value: value\n };\n if (extra.range) {\n comment.range = [start, end];\n }\n if (extra.loc) {\n comment.loc = loc;\n }\n extra.comments.push(comment);\n if (extra.attachComment) {\n extra.leadingComments.push(comment);\n extra.trailingComments.push(comment);\n }\n if (extra.tokenize) {\n comment.type = comment.type + 'Comment';\n if (extra.delegate) {\n comment = extra.delegate(comment);\n }\n extra.tokens.push(comment);\n }\n }\n\n function skipSingleLineComment(offset) {\n var start, loc, ch, comment;\n\n start = index - offset;\n loc = {\n start: {\n line: lineNumber,\n column: index - lineStart - offset\n }\n };\n\n while (index < length) {\n ch = source.charCodeAt(index);\n ++index;\n if (isLineTerminator(ch)) {\n hasLineTerminator = true;\n if (extra.comments) {\n comment = source.slice(start + offset, index - 1);\n loc.end = {\n line: lineNumber,\n column: index - lineStart - 1\n };\n addComment('Line', comment, start, index - 1, loc);\n }\n if (ch === 13 && source.charCodeAt(index) === 10) {\n ++index;\n }\n ++lineNumber;\n lineStart = index;\n return;\n }\n }\n\n if (extra.comments) {\n comment = source.slice(start + offset, index);\n loc.end = {\n line: lineNumber,\n column: index - lineStart\n };\n addComment('Line', comment, start, index, loc);\n }\n }\n\n function skipMultiLineComment() {\n var start, loc, ch, comment;\n\n if (extra.comments) {\n start = index - 2;\n loc = {\n start: {\n line: lineNumber,\n column: index - lineStart - 2\n }\n };\n }\n\n while (index < length) {\n ch = source.charCodeAt(index);\n if (isLineTerminator(ch)) {\n if (ch === 0x0D && source.charCodeAt(index + 1) === 0x0A) {\n ++index;\n }\n hasLineTerminator = true;\n ++lineNumber;\n ++index;\n lineStart = index;\n } else if (ch === 0x2A) {\n // Block comment ends with '*/'.\n if (source.charCodeAt(index + 1) === 0x2F) {\n ++index;\n ++index;\n if (extra.comments) {\n comment = source.slice(start + 2, index - 2);\n loc.end = {\n line: lineNumber,\n column: index - lineStart\n };\n addComment('Block', comment, start, index, loc);\n }\n return;\n }\n ++index;\n } else {\n ++index;\n }\n }\n\n // Ran off the end of the file - the whole thing is a comment\n if (extra.comments) {\n loc.end = {\n line: lineNumber,\n column: index - lineStart\n };\n comment = source.slice(start + 2, index);\n addComment('Block', comment, start, index, loc);\n }\n tolerateUnexpectedToken();\n }\n\n function skipComment() {\n var ch, start;\n hasLineTerminator = false;\n\n start = (index === 0);\n while (index < length) {\n ch = source.charCodeAt(index);\n\n if (isWhiteSpace(ch)) {\n ++index;\n } else if (isLineTerminator(ch)) {\n hasLineTerminator = true;\n ++index;\n if (ch === 0x0D && source.charCodeAt(index) === 0x0A) {\n ++index;\n }\n ++lineNumber;\n lineStart = index;\n start = true;\n } else if (ch === 0x2F) { // U+002F is '/'\n ch = source.charCodeAt(index + 1);\n if (ch === 0x2F) {\n ++index;\n ++index;\n skipSingleLineComment(2);\n start = true;\n } else if (ch === 0x2A) { // U+002A is '*'\n ++index;\n ++index;\n skipMultiLineComment();\n } else {\n break;\n }\n } else if (start && ch === 0x2D) { // U+002D is '-'\n // U+003E is '>'\n if ((source.charCodeAt(index + 1) === 0x2D) && (source.charCodeAt(index + 2) === 0x3E)) {\n // '-->' is a single-line comment\n index += 3;\n skipSingleLineComment(3);\n } else {\n break;\n }\n } else if (ch === 0x3C) { // U+003C is '<'\n if (source.slice(index + 1, index + 4) === '!--') {\n ++index; // `<`\n ++index; // `!`\n ++index; // `-`\n ++index; // `-`\n skipSingleLineComment(4);\n } else {\n break;\n }\n } else {\n break;\n }\n }\n }\n\n function scanHexEscape(prefix) {\n var i, len, ch, code = 0;\n\n len = (prefix === 'u') ? 4 : 2;\n for (i = 0; i < len; ++i) {\n if (index < length && isHexDigit(source[index])) {\n ch = source[index++];\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n } else {\n return '';\n }\n }\n return String.fromCharCode(code);\n }\n\n function scanUnicodeCodePointEscape() {\n var ch, code;\n\n ch = source[index];\n code = 0;\n\n // At least, one hex digit is required.\n if (ch === '}') {\n throwUnexpectedToken();\n }\n\n while (index < length) {\n ch = source[index++];\n if (!isHexDigit(ch)) {\n break;\n }\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n }\n\n if (code > 0x10FFFF || ch !== '}') {\n throwUnexpectedToken();\n }\n\n return fromCodePoint(code);\n }\n\n function codePointAt(i) {\n var cp, first, second;\n\n cp = source.charCodeAt(i);\n if (cp >= 0xD800 && cp <= 0xDBFF) {\n second = source.charCodeAt(i + 1);\n if (second >= 0xDC00 && second <= 0xDFFF) {\n first = cp;\n cp = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n }\n }\n\n return cp;\n }\n\n function getComplexIdentifier() {\n var cp, ch, id;\n\n cp = codePointAt(index);\n id = fromCodePoint(cp);\n index += id.length;\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (cp === 0x5C) {\n if (source.charCodeAt(index) !== 0x75) {\n throwUnexpectedToken();\n }\n ++index;\n if (source[index] === '{') {\n ++index;\n ch = scanUnicodeCodePointEscape();\n } else {\n ch = scanHexEscape('u');\n cp = ch.charCodeAt(0);\n if (!ch || ch === '\\\\' || !isIdentifierStart(cp)) {\n throwUnexpectedToken();\n }\n }\n id = ch;\n }\n\n while (index < length) {\n cp = codePointAt(index);\n if (!isIdentifierPart(cp)) {\n break;\n }\n ch = fromCodePoint(cp);\n id += ch;\n index += ch.length;\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (cp === 0x5C) {\n id = id.substr(0, id.length - 1);\n if (source.charCodeAt(index) !== 0x75) {\n throwUnexpectedToken();\n }\n ++index;\n if (source[index] === '{') {\n ++index;\n ch = scanUnicodeCodePointEscape();\n } else {\n ch = scanHexEscape('u');\n cp = ch.charCodeAt(0);\n if (!ch || ch === '\\\\' || !isIdentifierPart(cp)) {\n throwUnexpectedToken();\n }\n }\n id += ch;\n }\n }\n\n return id;\n }\n\n function getIdentifier() {\n var start, ch;\n\n start = index++;\n while (index < length) {\n ch = source.charCodeAt(index);\n if (ch === 0x5C) {\n // Blackslash (U+005C) marks Unicode escape sequence.\n index = start;\n return getComplexIdentifier();\n } else if (ch >= 0xD800 && ch < 0xDFFF) {\n // Need to handle surrogate pairs.\n index = start;\n return getComplexIdentifier();\n }\n if (isIdentifierPart(ch)) {\n ++index;\n } else {\n break;\n }\n }\n\n return source.slice(start, index);\n }\n\n function scanIdentifier() {\n var start, id, type;\n\n start = index;\n\n // Backslash (U+005C) starts an escaped character.\n id = (source.charCodeAt(index) === 0x5C) ? getComplexIdentifier() : getIdentifier();\n\n // There is no keyword or literal with only one character.\n // Thus, it must be an identifier.\n if (id.length === 1) {\n type = Token.Identifier;\n } else if (isKeyword(id)) {\n type = Token.Keyword;\n } else if (id === 'null') {\n type = Token.NullLiteral;\n } else if (id === 'true' || id === 'false') {\n type = Token.BooleanLiteral;\n } else {\n type = Token.Identifier;\n }\n\n return {\n type: type,\n value: id,\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n\n // ECMA-262 11.7 Punctuators\n\n function scanPunctuator() {\n var token, str;\n\n token = {\n type: Token.Punctuator,\n value: '',\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: index,\n end: index\n };\n\n // Check for most common single-character punctuators.\n str = source[index];\n switch (str) {\n\n case '(':\n if (extra.tokenize) {\n extra.openParenToken = extra.tokenValues.length;\n }\n ++index;\n break;\n\n case '{':\n if (extra.tokenize) {\n extra.openCurlyToken = extra.tokenValues.length;\n }\n state.curlyStack.push('{');\n ++index;\n break;\n\n case '.':\n ++index;\n if (source[index] === '.' && source[index + 1] === '.') {\n // Spread operator: ...\n index += 2;\n str = '...';\n }\n break;\n\n case '}':\n ++index;\n state.curlyStack.pop();\n break;\n case ')':\n case ';':\n case ',':\n case '[':\n case ']':\n case ':':\n case '?':\n case '~':\n ++index;\n break;\n\n default:\n // 4-character punctuator.\n str = source.substr(index, 4);\n if (str === '>>>=') {\n index += 4;\n } else {\n\n // 3-character punctuators.\n str = str.substr(0, 3);\n if (str === '===' || str === '!==' || str === '>>>' ||\n str === '<<=' || str === '>>=') {\n index += 3;\n } else {\n\n // 2-character punctuators.\n str = str.substr(0, 2);\n if (str === '&&' || str === '||' || str === '==' || str === '!=' ||\n str === '+=' || str === '-=' || str === '*=' || str === '/=' ||\n str === '++' || str === '--' || str === '<<' || str === '>>' ||\n str === '&=' || str === '|=' || str === '^=' || str === '%=' ||\n str === '<=' || str === '>=' || str === '=>') {\n index += 2;\n } else {\n\n // 1-character punctuators.\n str = source[index];\n if ('<>=!+-*%&|^/'.indexOf(str) >= 0) {\n ++index;\n }\n }\n }\n }\n }\n\n if (index === token.start) {\n throwUnexpectedToken();\n }\n\n token.end = index;\n token.value = str;\n return token;\n }\n\n // ECMA-262 11.8.3 Numeric Literals\n\n function scanHexLiteral(start) {\n var number = '';\n\n while (index < length) {\n if (!isHexDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n\n if (number.length === 0) {\n throwUnexpectedToken();\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwUnexpectedToken();\n }\n\n return {\n type: Token.NumericLiteral,\n value: parseInt('0x' + number, 16),\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n function scanBinaryLiteral(start) {\n var ch, number;\n\n number = '';\n\n while (index < length) {\n ch = source[index];\n if (ch !== '0' && ch !== '1') {\n break;\n }\n number += source[index++];\n }\n\n if (number.length === 0) {\n // only 0b or 0B\n throwUnexpectedToken();\n }\n\n if (index < length) {\n ch = source.charCodeAt(index);\n /* istanbul ignore else */\n if (isIdentifierStart(ch) || isDecimalDigit(ch)) {\n throwUnexpectedToken();\n }\n }\n\n return {\n type: Token.NumericLiteral,\n value: parseInt(number, 2),\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n function scanOctalLiteral(prefix, start) {\n var number, octal;\n\n if (isOctalDigit(prefix)) {\n octal = true;\n number = '0' + source[index++];\n } else {\n octal = false;\n ++index;\n number = '';\n }\n\n while (index < length) {\n if (!isOctalDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n\n if (!octal && number.length === 0) {\n // only 0o or 0O\n throwUnexpectedToken();\n }\n\n if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {\n throwUnexpectedToken();\n }\n\n return {\n type: Token.NumericLiteral,\n value: parseInt(number, 8),\n octal: octal,\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n function isImplicitOctalLiteral() {\n var i, ch;\n\n // Implicit octal, unless there is a non-octal digit.\n // (Annex B.1.1 on Numeric Literals)\n for (i = index + 1; i < length; ++i) {\n ch = source[i];\n if (ch === '8' || ch === '9') {\n return false;\n }\n if (!isOctalDigit(ch)) {\n return true;\n }\n }\n\n return true;\n }\n\n function scanNumericLiteral() {\n var number, start, ch;\n\n ch = source[index];\n assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'),\n 'Numeric literal must start with a decimal digit or a decimal point');\n\n start = index;\n number = '';\n if (ch !== '.') {\n number = source[index++];\n ch = source[index];\n\n // Hex number starts with '0x'.\n // Octal number starts with '0'.\n // Octal number in ES6 starts with '0o'.\n // Binary number in ES6 starts with '0b'.\n if (number === '0') {\n if (ch === 'x' || ch === 'X') {\n ++index;\n return scanHexLiteral(start);\n }\n if (ch === 'b' || ch === 'B') {\n ++index;\n return scanBinaryLiteral(start);\n }\n if (ch === 'o' || ch === 'O') {\n return scanOctalLiteral(ch, start);\n }\n\n if (isOctalDigit(ch)) {\n if (isImplicitOctalLiteral()) {\n return scanOctalLiteral(ch, start);\n }\n }\n }\n\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === '.') {\n number += source[index++];\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === 'e' || ch === 'E') {\n number += source[index++];\n\n ch = source[index];\n if (ch === '+' || ch === '-') {\n number += source[index++];\n }\n if (isDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n } else {\n throwUnexpectedToken();\n }\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwUnexpectedToken();\n }\n\n return {\n type: Token.NumericLiteral,\n value: parseFloat(number),\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n // ECMA-262 11.8.4 String Literals\n\n function scanStringLiteral() {\n var str = '', quote, start, ch, unescaped, octToDec, octal = false;\n\n quote = source[index];\n assert((quote === '\\'' || quote === '\"'),\n 'String literal must starts with a quote');\n\n start = index;\n ++index;\n\n while (index < length) {\n ch = source[index++];\n\n if (ch === quote) {\n quote = '';\n break;\n } else if (ch === '\\\\') {\n ch = source[index++];\n if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'u':\n case 'x':\n if (source[index] === '{') {\n ++index;\n str += scanUnicodeCodePointEscape();\n } else {\n unescaped = scanHexEscape(ch);\n if (!unescaped) {\n throw throwUnexpectedToken();\n }\n str += unescaped;\n }\n break;\n case 'n':\n str += '\\n';\n break;\n case 'r':\n str += '\\r';\n break;\n case 't':\n str += '\\t';\n break;\n case 'b':\n str += '\\b';\n break;\n case 'f':\n str += '\\f';\n break;\n case 'v':\n str += '\\x0B';\n break;\n case '8':\n case '9':\n str += ch;\n tolerateUnexpectedToken();\n break;\n\n default:\n if (isOctalDigit(ch)) {\n octToDec = octalToDecimal(ch);\n\n octal = octToDec.octal || octal;\n str += String.fromCharCode(octToDec.code);\n } else {\n str += ch;\n }\n break;\n }\n } else {\n ++lineNumber;\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n lineStart = index;\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n break;\n } else {\n str += ch;\n }\n }\n\n if (quote !== '') {\n throwUnexpectedToken();\n }\n\n return {\n type: Token.StringLiteral,\n value: str,\n octal: octal,\n lineNumber: startLineNumber,\n lineStart: startLineStart,\n start: start,\n end: index\n };\n }\n\n // ECMA-262 11.8.6 Template Literal Lexical Components\n\n function scanTemplate() {\n var cooked = '', ch, start, rawOffset, terminated, head, tail, restore, unescaped;\n\n terminated = false;\n tail = false;\n start = index;\n head = (source[index] === '`');\n rawOffset = 2;\n\n ++index;\n\n while (index < length) {\n ch = source[index++];\n if (ch === '`') {\n rawOffset = 1;\n tail = true;\n terminated = true;\n break;\n } else if (ch === '$') {\n if (source[index] === '{') {\n state.curlyStack.push('${');\n ++index;\n terminated = true;\n break;\n }\n cooked += ch;\n } else if (ch === '\\\\') {\n ch = source[index++];\n if (!isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'n':\n cooked += '\\n';\n break;\n case 'r':\n cooked += '\\r';\n break;\n case 't':\n cooked += '\\t';\n break;\n case 'u':\n case 'x':\n if (source[index] === '{') {\n ++index;\n cooked += scanUnicodeCodePointEscape();\n } else {\n restore = index;\n unescaped = scanHexEscape(ch);\n if (unescaped) {\n cooked += unescaped;\n } else {\n index = restore;\n cooked += ch;\n }\n }\n break;\n case 'b':\n cooked += '\\b';\n break;\n case 'f':\n cooked += '\\f';\n break;\n case 'v':\n cooked += '\\v';\n break;\n\n default:\n if (ch === '0') {\n if (isDecimalDigit(source.charCodeAt(index))) {\n // Illegal: \\01 \\02 and so on\n throwError(Messages.TemplateOctalLiteral);\n }\n cooked += '\\0';\n } else if (isOctalDigit(ch)) {\n // Illegal: \\1 \\2\n throwError(Messages.TemplateOctalLiteral);\n } else {\n cooked += ch;\n }\n break;\n }\n } else {\n ++lineNumber;\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n lineStart = index;\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n ++lineNumber;\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n lineStart = index;\n cooked += '\\n';\n } else {\n cooked += ch;\n }\n }\n\n if (!terminated) {\n throwUnexpectedToken();\n }\n\n if (!head) {\n state.curlyStack.pop();\n }\n\n return {\n type: Token.Template,\n value: {\n cooked: cooked,\n raw: source.slice(start + 1, index - rawOffset)\n },\n head: head,\n tail: tail,\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n // ECMA-262 11.8.5 Regular Expression Literals\n\n function testRegExp(pattern, flags) {\n // The BMP character to use as a replacement for astral symbols when\n // translating an ES6 \"u\"-flagged pattern to an ES5-compatible\n // approximation.\n // Note: replacing with '\\uFFFF' enables false positives in unlikely\n // scenarios. For example, `[\\u{1044f}-\\u{10440}]` is an invalid\n // pattern that would not be detected by this substitution.\n var astralSubstitute = '\\uFFFF',\n tmp = pattern;\n\n if (flags.indexOf('u') >= 0) {\n tmp = tmp\n // Replace every Unicode escape sequence with the equivalent\n // BMP character or a constant ASCII code point in the case of\n // astral symbols. (See the above note on `astralSubstitute`\n // for more information.)\n .replace(/\\\\u\\{([0-9a-fA-F]+)\\}|\\\\u([a-fA-F0-9]{4})/g, function ($0, $1, $2) {\n var codePoint = parseInt($1 || $2, 16);\n if (codePoint > 0x10FFFF) {\n throwUnexpectedToken(null, Messages.InvalidRegExp);\n }\n if (codePoint <= 0xFFFF) {\n return String.fromCharCode(codePoint);\n }\n return astralSubstitute;\n })\n // Replace each paired surrogate with a single ASCII symbol to\n // avoid throwing on regular expressions that are only valid in\n // combination with the \"u\" flag.\n .replace(\n /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,\n astralSubstitute\n );\n }\n\n // First, detect invalid regular expressions.\n try {\n RegExp(tmp);\n } catch (e) {\n throwUnexpectedToken(null, Messages.InvalidRegExp);\n }\n\n // Return a regular expression object for this pattern-flag pair, or\n // `null` in case the current environment doesn't support the flags it\n // uses.\n try {\n return new RegExp(pattern, flags);\n } catch (exception) {\n return null;\n }\n }\n\n function scanRegExpBody() {\n var ch, str, classMarker, terminated, body;\n\n ch = source[index];\n assert(ch === '/', 'Regular expression literal must start with a slash');\n str = source[index++];\n\n classMarker = false;\n terminated = false;\n while (index < length) {\n ch = source[index++];\n str += ch;\n if (ch === '\\\\') {\n ch = source[index++];\n // ECMA-262 7.8.5\n if (isLineTerminator(ch.charCodeAt(0))) {\n throwUnexpectedToken(null, Messages.UnterminatedRegExp);\n }\n str += ch;\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n throwUnexpectedToken(null, Messages.UnterminatedRegExp);\n } else if (classMarker) {\n if (ch === ']') {\n classMarker = false;\n }\n } else {\n if (ch === '/') {\n terminated = true;\n break;\n } else if (ch === '[') {\n classMarker = true;\n }\n }\n }\n\n if (!terminated) {\n throwUnexpectedToken(null, Messages.UnterminatedRegExp);\n }\n\n // Exclude leading and trailing slash.\n body = str.substr(1, str.length - 2);\n return {\n value: body,\n literal: str\n };\n }\n\n function scanRegExpFlags() {\n var ch, str, flags, restore;\n\n str = '';\n flags = '';\n while (index < length) {\n ch = source[index];\n if (!isIdentifierPart(ch.charCodeAt(0))) {\n break;\n }\n\n ++index;\n if (ch === '\\\\' && index < length) {\n ch = source[index];\n if (ch === 'u') {\n ++index;\n restore = index;\n ch = scanHexEscape('u');\n if (ch) {\n flags += ch;\n for (str += '\\\\u'; restore < index; ++restore) {\n str += source[restore];\n }\n } else {\n index = restore;\n flags += 'u';\n str += '\\\\u';\n }\n tolerateUnexpectedToken();\n } else {\n str += '\\\\';\n tolerateUnexpectedToken();\n }\n } else {\n flags += ch;\n str += ch;\n }\n }\n\n return {\n value: flags,\n literal: str\n };\n }\n\n function scanRegExp() {\n var start, body, flags, value;\n scanning = true;\n\n lookahead = null;\n skipComment();\n start = index;\n\n body = scanRegExpBody();\n flags = scanRegExpFlags();\n value = testRegExp(body.value, flags.value);\n scanning = false;\n if (extra.tokenize) {\n return {\n type: Token.RegularExpression,\n value: value,\n regex: {\n pattern: body.value,\n flags: flags.value\n },\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n return {\n literal: body.literal + flags.literal,\n value: value,\n regex: {\n pattern: body.value,\n flags: flags.value\n },\n start: start,\n end: index\n };\n }\n\n function collectRegex() {\n var pos, loc, regex, token;\n\n skipComment();\n\n pos = index;\n loc = {\n start: {\n line: lineNumber,\n column: index - lineStart\n }\n };\n\n regex = scanRegExp();\n\n loc.end = {\n line: lineNumber,\n column: index - lineStart\n };\n\n /* istanbul ignore next */\n if (!extra.tokenize) {\n // Pop the previous token, which is likely '/' or '/='\n if (extra.tokens.length > 0) {\n token = extra.tokens[extra.tokens.length - 1];\n if (token.range[0] === pos && token.type === 'Punctuator') {\n if (token.value === '/' || token.value === '/=') {\n extra.tokens.pop();\n }\n }\n }\n\n extra.tokens.push({\n type: 'RegularExpression',\n value: regex.literal,\n regex: regex.regex,\n range: [pos, index],\n loc: loc\n });\n }\n\n return regex;\n }\n\n function isIdentifierName(token) {\n return token.type === Token.Identifier ||\n token.type === Token.Keyword ||\n token.type === Token.BooleanLiteral ||\n token.type === Token.NullLiteral;\n }\n\n // Using the following algorithm:\n // https://github.com/mozilla/sweet.js/wiki/design\n\n function advanceSlash() {\n var regex, previous, check;\n\n function testKeyword(value) {\n return value && (value.length > 1) && (value[0] >= 'a') && (value[0] <= 'z');\n }\n\n previous = extra.tokenValues[extra.tokens.length - 1];\n regex = (previous !== null);\n\n switch (previous) {\n case 'this':\n case ']':\n regex = false;\n break;\n\n case ')':\n check = extra.tokenValues[extra.openParenToken - 1];\n regex = (check === 'if' || check === 'while' || check === 'for' || check === 'with');\n break;\n\n case '}':\n // Dividing a function by anything makes little sense,\n // but we have to check for that.\n regex = false;\n if (testKeyword(extra.tokenValues[extra.openCurlyToken - 3])) {\n // Anonymous function, e.g. function(){} /42\n check = extra.tokenValues[extra.openCurlyToken - 4];\n regex = check ? (FnExprTokens.indexOf(check) < 0) : false;\n } else if (testKeyword(extra.tokenValues[extra.openCurlyToken - 4])) {\n // Named function, e.g. function f(){} /42/\n check = extra.tokenValues[extra.openCurlyToken - 5];\n regex = check ? (FnExprTokens.indexOf(check) < 0) : true;\n }\n }\n\n return regex ? collectRegex() : scanPunctuator();\n }\n\n function advance() {\n var cp, token;\n\n if (index >= length) {\n return {\n type: Token.EOF,\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: index,\n end: index\n };\n }\n\n cp = source.charCodeAt(index);\n\n if (isIdentifierStart(cp)) {\n token = scanIdentifier();\n if (strict && isStrictModeReservedWord(token.value)) {\n token.type = Token.Keyword;\n }\n return token;\n }\n\n // Very common: ( and ) and ;\n if (cp === 0x28 || cp === 0x29 || cp === 0x3B) {\n return scanPunctuator();\n }\n\n // String literal starts with single quote (U+0027) or double quote (U+0022).\n if (cp === 0x27 || cp === 0x22) {\n return scanStringLiteral();\n }\n\n // Dot (.) U+002E can also start a floating-point number, hence the need\n // to check the next character.\n if (cp === 0x2E) {\n if (isDecimalDigit(source.charCodeAt(index + 1))) {\n return scanNumericLiteral();\n }\n return scanPunctuator();\n }\n\n if (isDecimalDigit(cp)) {\n return scanNumericLiteral();\n }\n\n // Slash (/) U+002F can also start a regex.\n if (extra.tokenize && cp === 0x2F) {\n return advanceSlash();\n }\n\n // Template literals start with ` (U+0060) for template head\n // or } (U+007D) for template middle or template tail.\n if (cp === 0x60 || (cp === 0x7D && state.curlyStack[state.curlyStack.length - 1] === '${')) {\n return scanTemplate();\n }\n\n // Possible identifier start in a surrogate pair.\n if (cp >= 0xD800 && cp < 0xDFFF) {\n cp = codePointAt(index);\n if (isIdentifierStart(cp)) {\n return scanIdentifier();\n }\n }\n\n return scanPunctuator();\n }\n\n function collectToken() {\n var loc, token, value, entry;\n\n loc = {\n start: {\n line: lineNumber,\n column: index - lineStart\n }\n };\n\n token = advance();\n loc.end = {\n line: lineNumber,\n column: index - lineStart\n };\n\n if (token.type !== Token.EOF) {\n value = source.slice(token.start, token.end);\n entry = {\n type: TokenName[token.type],\n value: value,\n range: [token.start, token.end],\n loc: loc\n };\n if (token.regex) {\n entry.regex = {\n pattern: token.regex.pattern,\n flags: token.regex.flags\n };\n }\n if (extra.tokenValues) {\n extra.tokenValues.push((entry.type === 'Punctuator' || entry.type === 'Keyword') ? entry.value : null);\n }\n if (extra.tokenize) {\n if (!extra.range) {\n delete entry.range;\n }\n if (!extra.loc) {\n delete entry.loc;\n }\n if (extra.delegate) {\n entry = extra.delegate(entry);\n }\n }\n extra.tokens.push(entry);\n }\n\n return token;\n }\n\n function lex() {\n var token;\n scanning = true;\n\n lastIndex = index;\n lastLineNumber = lineNumber;\n lastLineStart = lineStart;\n\n skipComment();\n\n token = lookahead;\n\n startIndex = index;\n startLineNumber = lineNumber;\n startLineStart = lineStart;\n\n lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance();\n scanning = false;\n return token;\n }\n\n function peek() {\n scanning = true;\n\n skipComment();\n\n lastIndex = index;\n lastLineNumber = lineNumber;\n lastLineStart = lineStart;\n\n startIndex = index;\n startLineNumber = lineNumber;\n startLineStart = lineStart;\n\n lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance();\n scanning = false;\n }\n\n function Position() {\n this.line = startLineNumber;\n this.column = startIndex - startLineStart;\n }\n\n function SourceLocation() {\n this.start = new Position();\n this.end = null;\n }\n\n function WrappingSourceLocation(startToken) {\n this.start = {\n line: startToken.lineNumber,\n column: startToken.start - startToken.lineStart\n };\n this.end = null;\n }\n\n function Node() {\n if (extra.range) {\n this.range = [startIndex, 0];\n }\n if (extra.loc) {\n this.loc = new SourceLocation();\n }\n }\n\n function WrappingNode(startToken) {\n if (extra.range) {\n this.range = [startToken.start, 0];\n }\n if (extra.loc) {\n this.loc = new WrappingSourceLocation(startToken);\n }\n }\n\n WrappingNode.prototype = Node.prototype = {\n\n processComment: function () {\n var lastChild,\n innerComments,\n leadingComments,\n trailingComments,\n bottomRight = extra.bottomRightStack,\n i,\n comment,\n last = bottomRight[bottomRight.length - 1];\n\n if (this.type === Syntax.Program) {\n if (this.body.length > 0) {\n return;\n }\n }\n /**\n * patch innnerComments for properties empty block\n * `function a() {/** comments **\\/}`\n */\n\n if (this.type === Syntax.BlockStatement && this.body.length === 0) {\n innerComments = [];\n for (i = extra.leadingComments.length - 1; i >= 0; --i) {\n comment = extra.leadingComments[i];\n if (this.range[1] >= comment.range[1]) {\n innerComments.unshift(comment);\n extra.leadingComments.splice(i, 1);\n extra.trailingComments.splice(i, 1);\n }\n }\n if (innerComments.length) {\n this.innerComments = innerComments;\n //bottomRight.push(this);\n return;\n }\n }\n\n if (extra.trailingComments.length > 0) {\n trailingComments = [];\n for (i = extra.trailingComments.length - 1; i >= 0; --i) {\n comment = extra.trailingComments[i];\n if (comment.range[0] >= this.range[1]) {\n trailingComments.unshift(comment);\n extra.trailingComments.splice(i, 1);\n }\n }\n extra.trailingComments = [];\n } else {\n if (last && last.trailingComments && last.trailingComments[0].range[0] >= this.range[1]) {\n trailingComments = last.trailingComments;\n delete last.trailingComments;\n }\n }\n\n // Eating the stack.\n while (last && last.range[0] >= this.range[0]) {\n lastChild = bottomRight.pop();\n last = bottomRight[bottomRight.length - 1];\n }\n\n if (lastChild) {\n if (lastChild.leadingComments) {\n leadingComments = [];\n for (i = lastChild.leadingComments.length - 1; i >= 0; --i) {\n comment = lastChild.leadingComments[i];\n if (comment.range[1] <= this.range[0]) {\n leadingComments.unshift(comment);\n lastChild.leadingComments.splice(i, 1);\n }\n }\n\n if (!lastChild.leadingComments.length) {\n lastChild.leadingComments = undefined;\n }\n }\n } else if (extra.leadingComments.length > 0) {\n leadingComments = [];\n for (i = extra.leadingComments.length - 1; i >= 0; --i) {\n comment = extra.leadingComments[i];\n if (comment.range[1] <= this.range[0]) {\n leadingComments.unshift(comment);\n extra.leadingComments.splice(i, 1);\n }\n }\n }\n\n\n if (leadingComments && leadingComments.length > 0) {\n this.leadingComments = leadingComments;\n }\n if (trailingComments && trailingComments.length > 0) {\n this.trailingComments = trailingComments;\n }\n\n bottomRight.push(this);\n },\n\n finish: function () {\n if (extra.range) {\n this.range[1] = lastIndex;\n }\n if (extra.loc) {\n this.loc.end = {\n line: lastLineNumber,\n column: lastIndex - lastLineStart\n };\n if (extra.source) {\n this.loc.source = extra.source;\n }\n }\n\n if (extra.attachComment) {\n this.processComment();\n }\n },\n\n finishArrayExpression: function (elements) {\n this.type = Syntax.ArrayExpression;\n this.elements = elements;\n this.finish();\n return this;\n },\n\n finishArrayPattern: function (elements) {\n this.type = Syntax.ArrayPattern;\n this.elements = elements;\n this.finish();\n return this;\n },\n\n finishArrowFunctionExpression: function (params, defaults, body, expression) {\n this.type = Syntax.ArrowFunctionExpression;\n this.id = null;\n this.params = params;\n this.defaults = defaults;\n this.body = body;\n this.generator = false;\n this.expression = expression;\n this.finish();\n return this;\n },\n\n finishAssignmentExpression: function (operator, left, right) {\n this.type = Syntax.AssignmentExpression;\n this.operator = operator;\n this.left = left;\n this.right = right;\n this.finish();\n return this;\n },\n\n finishAssignmentPattern: function (left, right) {\n this.type = Syntax.AssignmentPattern;\n this.left = left;\n this.right = right;\n this.finish();\n return this;\n },\n\n finishBinaryExpression: function (operator, left, right) {\n this.type = (operator === '||' || operator === '&&') ? Syntax.LogicalExpression : Syntax.BinaryExpression;\n this.operator = operator;\n this.left = left;\n this.right = right;\n this.finish();\n return this;\n },\n\n finishBlockStatement: function (body) {\n this.type = Syntax.BlockStatement;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishBreakStatement: function (label) {\n this.type = Syntax.BreakStatement;\n this.label = label;\n this.finish();\n return this;\n },\n\n finishCallExpression: function (callee, args) {\n this.type = Syntax.CallExpression;\n this.callee = callee;\n this.arguments = args;\n this.finish();\n return this;\n },\n\n finishCatchClause: function (param, body) {\n this.type = Syntax.CatchClause;\n this.param = param;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishClassBody: function (body) {\n this.type = Syntax.ClassBody;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishClassDeclaration: function (id, superClass, body) {\n this.type = Syntax.ClassDeclaration;\n this.id = id;\n this.superClass = superClass;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishClassExpression: function (id, superClass, body) {\n this.type = Syntax.ClassExpression;\n this.id = id;\n this.superClass = superClass;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishConditionalExpression: function (test, consequent, alternate) {\n this.type = Syntax.ConditionalExpression;\n this.test = test;\n this.consequent = consequent;\n this.alternate = alternate;\n this.finish();\n return this;\n },\n\n finishContinueStatement: function (label) {\n this.type = Syntax.ContinueStatement;\n this.label = label;\n this.finish();\n return this;\n },\n\n finishDebuggerStatement: function () {\n this.type = Syntax.DebuggerStatement;\n this.finish();\n return this;\n },\n\n finishDoWhileStatement: function (body, test) {\n this.type = Syntax.DoWhileStatement;\n this.body = body;\n this.test = test;\n this.finish();\n return this;\n },\n\n finishEmptyStatement: function () {\n this.type = Syntax.EmptyStatement;\n this.finish();\n return this;\n },\n\n finishExpressionStatement: function (expression) {\n this.type = Syntax.ExpressionStatement;\n this.expression = expression;\n this.finish();\n return this;\n },\n\n finishForStatement: function (init, test, update, body) {\n this.type = Syntax.ForStatement;\n this.init = init;\n this.test = test;\n this.update = update;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishForOfStatement: function (left, right, body) {\n this.type = Syntax.ForOfStatement;\n this.left = left;\n this.right = right;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishForInStatement: function (left, right, body) {\n this.type = Syntax.ForInStatement;\n this.left = left;\n this.right = right;\n this.body = body;\n this.each = false;\n this.finish();\n return this;\n },\n\n finishFunctionDeclaration: function (id, params, defaults, body, generator) {\n this.type = Syntax.FunctionDeclaration;\n this.id = id;\n this.params = params;\n this.defaults = defaults;\n this.body = body;\n this.generator = generator;\n this.expression = false;\n this.finish();\n return this;\n },\n\n finishFunctionExpression: function (id, params, defaults, body, generator) {\n this.type = Syntax.FunctionExpression;\n this.id = id;\n this.params = params;\n this.defaults = defaults;\n this.body = body;\n this.generator = generator;\n this.expression = false;\n this.finish();\n return this;\n },\n\n finishIdentifier: function (name) {\n this.type = Syntax.Identifier;\n this.name = name;\n this.finish();\n return this;\n },\n\n finishIfStatement: function (test, consequent, alternate) {\n this.type = Syntax.IfStatement;\n this.test = test;\n this.consequent = consequent;\n this.alternate = alternate;\n this.finish();\n return this;\n },\n\n finishLabeledStatement: function (label, body) {\n this.type = Syntax.LabeledStatement;\n this.label = label;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishLiteral: function (token) {\n this.type = Syntax.Literal;\n this.value = token.value;\n this.raw = source.slice(token.start, token.end);\n if (token.regex) {\n this.regex = token.regex;\n }\n this.finish();\n return this;\n },\n\n finishMemberExpression: function (accessor, object, property) {\n this.type = Syntax.MemberExpression;\n this.computed = accessor === '[';\n this.object = object;\n this.property = property;\n this.finish();\n return this;\n },\n\n finishMetaProperty: function (meta, property) {\n this.type = Syntax.MetaProperty;\n this.meta = meta;\n this.property = property;\n this.finish();\n return this;\n },\n\n finishNewExpression: function (callee, args) {\n this.type = Syntax.NewExpression;\n this.callee = callee;\n this.arguments = args;\n this.finish();\n return this;\n },\n\n finishObjectExpression: function (properties) {\n this.type = Syntax.ObjectExpression;\n this.properties = properties;\n this.finish();\n return this;\n },\n\n finishObjectPattern: function (properties) {\n this.type = Syntax.ObjectPattern;\n this.properties = properties;\n this.finish();\n return this;\n },\n\n finishPostfixExpression: function (operator, argument) {\n this.type = Syntax.UpdateExpression;\n this.operator = operator;\n this.argument = argument;\n this.prefix = false;\n this.finish();\n return this;\n },\n\n finishProgram: function (body, sourceType) {\n this.type = Syntax.Program;\n this.body = body;\n this.sourceType = sourceType;\n this.finish();\n return this;\n },\n\n finishProperty: function (kind, key, computed, value, method, shorthand) {\n this.type = Syntax.Property;\n this.key = key;\n this.computed = computed;\n this.value = value;\n this.kind = kind;\n this.method = method;\n this.shorthand = shorthand;\n this.finish();\n return this;\n },\n\n finishRestElement: function (argument) {\n this.type = Syntax.RestElement;\n this.argument = argument;\n this.finish();\n return this;\n },\n\n finishReturnStatement: function (argument) {\n this.type = Syntax.ReturnStatement;\n this.argument = argument;\n this.finish();\n return this;\n },\n\n finishSequenceExpression: function (expressions) {\n this.type = Syntax.SequenceExpression;\n this.expressions = expressions;\n this.finish();\n return this;\n },\n\n finishSpreadElement: function (argument) {\n this.type = Syntax.SpreadElement;\n this.argument = argument;\n this.finish();\n return this;\n },\n\n finishSwitchCase: function (test, consequent) {\n this.type = Syntax.SwitchCase;\n this.test = test;\n this.consequent = consequent;\n this.finish();\n return this;\n },\n\n finishSuper: function () {\n this.type = Syntax.Super;\n this.finish();\n return this;\n },\n\n finishSwitchStatement: function (discriminant, cases) {\n this.type = Syntax.SwitchStatement;\n this.discriminant = discriminant;\n this.cases = cases;\n this.finish();\n return this;\n },\n\n finishTaggedTemplateExpression: function (tag, quasi) {\n this.type = Syntax.TaggedTemplateExpression;\n this.tag = tag;\n this.quasi = quasi;\n this.finish();\n return this;\n },\n\n finishTemplateElement: function (value, tail) {\n this.type = Syntax.TemplateElement;\n this.value = value;\n this.tail = tail;\n this.finish();\n return this;\n },\n\n finishTemplateLiteral: function (quasis, expressions) {\n this.type = Syntax.TemplateLiteral;\n this.quasis = quasis;\n this.expressions = expressions;\n this.finish();\n return this;\n },\n\n finishThisExpression: function () {\n this.type = Syntax.ThisExpression;\n this.finish();\n return this;\n },\n\n finishThrowStatement: function (argument) {\n this.type = Syntax.ThrowStatement;\n this.argument = argument;\n this.finish();\n return this;\n },\n\n finishTryStatement: function (block, handler, finalizer) {\n this.type = Syntax.TryStatement;\n this.block = block;\n this.guardedHandlers = [];\n this.handlers = handler ? [handler] : [];\n this.handler = handler;\n this.finalizer = finalizer;\n this.finish();\n return this;\n },\n\n finishUnaryExpression: function (operator, argument) {\n this.type = (operator === '++' || operator === '--') ? Syntax.UpdateExpression : Syntax.UnaryExpression;\n this.operator = operator;\n this.argument = argument;\n this.prefix = true;\n this.finish();\n return this;\n },\n\n finishVariableDeclaration: function (declarations) {\n this.type = Syntax.VariableDeclaration;\n this.declarations = declarations;\n this.kind = 'var';\n this.finish();\n return this;\n },\n\n finishLexicalDeclaration: function (declarations, kind) {\n this.type = Syntax.VariableDeclaration;\n this.declarations = declarations;\n this.kind = kind;\n this.finish();\n return this;\n },\n\n finishVariableDeclarator: function (id, init) {\n this.type = Syntax.VariableDeclarator;\n this.id = id;\n this.init = init;\n this.finish();\n return this;\n },\n\n finishWhileStatement: function (test, body) {\n this.type = Syntax.WhileStatement;\n this.test = test;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishWithStatement: function (object, body) {\n this.type = Syntax.WithStatement;\n this.object = object;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishExportSpecifier: function (local, exported) {\n this.type = Syntax.ExportSpecifier;\n this.exported = exported || local;\n this.local = local;\n this.finish();\n return this;\n },\n\n finishImportDefaultSpecifier: function (local) {\n this.type = Syntax.ImportDefaultSpecifier;\n this.local = local;\n this.finish();\n return this;\n },\n\n finishImportNamespaceSpecifier: function (local) {\n this.type = Syntax.ImportNamespaceSpecifier;\n this.local = local;\n this.finish();\n return this;\n },\n\n finishExportNamedDeclaration: function (declaration, specifiers, src) {\n this.type = Syntax.ExportNamedDeclaration;\n this.declaration = declaration;\n this.specifiers = specifiers;\n this.source = src;\n this.finish();\n return this;\n },\n\n finishExportDefaultDeclaration: function (declaration) {\n this.type = Syntax.ExportDefaultDeclaration;\n this.declaration = declaration;\n this.finish();\n return this;\n },\n\n finishExportAllDeclaration: function (src) {\n this.type = Syntax.ExportAllDeclaration;\n this.source = src;\n this.finish();\n return this;\n },\n\n finishImportSpecifier: function (local, imported) {\n this.type = Syntax.ImportSpecifier;\n this.local = local || imported;\n this.imported = imported;\n this.finish();\n return this;\n },\n\n finishImportDeclaration: function (specifiers, src) {\n this.type = Syntax.ImportDeclaration;\n this.specifiers = specifiers;\n this.source = src;\n this.finish();\n return this;\n },\n\n finishYieldExpression: function (argument, delegate) {\n this.type = Syntax.YieldExpression;\n this.argument = argument;\n this.delegate = delegate;\n this.finish();\n return this;\n }\n };\n\n\n function recordError(error) {\n var e, existing;\n\n for (e = 0; e < extra.errors.length; e++) {\n existing = extra.errors[e];\n // Prevent duplicated error.\n /* istanbul ignore next */\n if (existing.index === error.index && existing.message === error.message) {\n return;\n }\n }\n\n extra.errors.push(error);\n }\n\n function constructError(msg, column) {\n var error = new Error(msg);\n try {\n throw error;\n } catch (base) {\n /* istanbul ignore else */\n if (Object.create && Object.defineProperty) {\n error = Object.create(base);\n Object.defineProperty(error, 'column', { value: column });\n }\n } finally {\n return error;\n }\n }\n\n function createError(line, pos, description) {\n var msg, column, error;\n\n msg = 'Line ' + line + ': ' + description;\n column = pos - (scanning ? lineStart : lastLineStart) + 1;\n error = constructError(msg, column);\n error.lineNumber = line;\n error.description = description;\n error.index = pos;\n return error;\n }\n\n // Throw an exception\n\n function throwError(messageFormat) {\n var args, msg;\n\n args = Array.prototype.slice.call(arguments, 1);\n msg = messageFormat.replace(/%(\\d)/g,\n function (whole, idx) {\n assert(idx < args.length, 'Message reference must be in range');\n return args[idx];\n }\n );\n\n throw createError(lastLineNumber, lastIndex, msg);\n }\n\n function tolerateError(messageFormat) {\n var args, msg, error;\n\n args = Array.prototype.slice.call(arguments, 1);\n /* istanbul ignore next */\n msg = messageFormat.replace(/%(\\d)/g,\n function (whole, idx) {\n assert(idx < args.length, 'Message reference must be in range');\n return args[idx];\n }\n );\n\n error = createError(lineNumber, lastIndex, msg);\n if (extra.errors) {\n recordError(error);\n } else {\n throw error;\n }\n }\n\n // Throw an exception because of the token.\n\n function unexpectedTokenError(token, message) {\n var value, msg = message || Messages.UnexpectedToken;\n\n if (token) {\n if (!message) {\n msg = (token.type === Token.EOF) ? Messages.UnexpectedEOS :\n (token.type === Token.Identifier) ? Messages.UnexpectedIdentifier :\n (token.type === Token.NumericLiteral) ? Messages.UnexpectedNumber :\n (token.type === Token.StringLiteral) ? Messages.UnexpectedString :\n (token.type === Token.Template) ? Messages.UnexpectedTemplate :\n Messages.UnexpectedToken;\n\n if (token.type === Token.Keyword) {\n if (isFutureReservedWord(token.value)) {\n msg = Messages.UnexpectedReserved;\n } else if (strict && isStrictModeReservedWord(token.value)) {\n msg = Messages.StrictReservedWord;\n }\n }\n }\n\n value = (token.type === Token.Template) ? token.value.raw : token.value;\n } else {\n value = 'ILLEGAL';\n }\n\n msg = msg.replace('%0', value);\n\n return (token && typeof token.lineNumber === 'number') ?\n createError(token.lineNumber, token.start, msg) :\n createError(scanning ? lineNumber : lastLineNumber, scanning ? index : lastIndex, msg);\n }\n\n function throwUnexpectedToken(token, message) {\n throw unexpectedTokenError(token, message);\n }\n\n function tolerateUnexpectedToken(token, message) {\n var error = unexpectedTokenError(token, message);\n if (extra.errors) {\n recordError(error);\n } else {\n throw error;\n }\n }\n\n // Expect the next token to match the specified punctuator.\n // If not, an exception will be thrown.\n\n function expect(value) {\n var token = lex();\n if (token.type !== Token.Punctuator || token.value !== value) {\n throwUnexpectedToken(token);\n }\n }\n\n /**\n * @name expectCommaSeparator\n * @description Quietly expect a comma when in tolerant mode, otherwise delegates\n * to expect(value)\n * @since 2.0\n */\n function expectCommaSeparator() {\n var token;\n\n if (extra.errors) {\n token = lookahead;\n if (token.type === Token.Punctuator && token.value === ',') {\n lex();\n } else if (token.type === Token.Punctuator && token.value === ';') {\n lex();\n tolerateUnexpectedToken(token);\n } else {\n tolerateUnexpectedToken(token, Messages.UnexpectedToken);\n }\n } else {\n expect(',');\n }\n }\n\n // Expect the next token to match the specified keyword.\n // If not, an exception will be thrown.\n\n function expectKeyword(keyword) {\n var token = lex();\n if (token.type !== Token.Keyword || token.value !== keyword) {\n throwUnexpectedToken(token);\n }\n }\n\n // Return true if the next token matches the specified punctuator.\n\n function match(value) {\n return lookahead.type === Token.Punctuator && lookahead.value === value;\n }\n\n // Return true if the next token matches the specified keyword\n\n function matchKeyword(keyword) {\n return lookahead.type === Token.Keyword && lookahead.value === keyword;\n }\n\n // Return true if the next token matches the specified contextual keyword\n // (where an identifier is sometimes a keyword depending on the context)\n\n function matchContextualKeyword(keyword) {\n return lookahead.type === Token.Identifier && lookahead.value === keyword;\n }\n\n // Return true if the next token is an assignment operator\n\n function matchAssign() {\n var op;\n\n if (lookahead.type !== Token.Punctuator) {\n return false;\n }\n op = lookahead.value;\n return op === '=' ||\n op === '*=' ||\n op === '/=' ||\n op === '%=' ||\n op === '+=' ||\n op === '-=' ||\n op === '<<=' ||\n op === '>>=' ||\n op === '>>>=' ||\n op === '&=' ||\n op === '^=' ||\n op === '|=';\n }\n\n function consumeSemicolon() {\n // Catch the very common case first: immediately a semicolon (U+003B).\n if (source.charCodeAt(startIndex) === 0x3B || match(';')) {\n lex();\n return;\n }\n\n if (hasLineTerminator) {\n return;\n }\n\n // FIXME(ikarienator): this is seemingly an issue in the previous location info convention.\n lastIndex = startIndex;\n lastLineNumber = startLineNumber;\n lastLineStart = startLineStart;\n\n if (lookahead.type !== Token.EOF && !match('}')) {\n throwUnexpectedToken(lookahead);\n }\n }\n\n // Cover grammar support.\n //\n // When an assignment expression position starts with an left parenthesis, the determination of the type\n // of the syntax is to be deferred arbitrarily long until the end of the parentheses pair (plus a lookahead)\n // or the first comma. This situation also defers the determination of all the expressions nested in the pair.\n //\n // There are three productions that can be parsed in a parentheses pair that needs to be determined\n // after the outermost pair is closed. They are:\n //\n // 1. AssignmentExpression\n // 2. BindingElements\n // 3. AssignmentTargets\n //\n // In order to avoid exponential backtracking, we use two flags to denote if the production can be\n // binding element or assignment target.\n //\n // The three productions have the relationship:\n //\n // BindingElements ⊆ AssignmentTargets ⊆ AssignmentExpression\n //\n // with a single exception that CoverInitializedName when used directly in an Expression, generates\n // an early error. Therefore, we need the third state, firstCoverInitializedNameError, to track the\n // first usage of CoverInitializedName and report it when we reached the end of the parentheses pair.\n //\n // isolateCoverGrammar function runs the given parser function with a new cover grammar context, and it does not\n // effect the current flags. This means the production the parser parses is only used as an expression. Therefore\n // the CoverInitializedName check is conducted.\n //\n // inheritCoverGrammar function runs the given parse function with a new cover grammar context, and it propagates\n // the flags outside of the parser. This means the production the parser parses is used as a part of a potential\n // pattern. The CoverInitializedName check is deferred.\n function isolateCoverGrammar(parser) {\n var oldIsBindingElement = isBindingElement,\n oldIsAssignmentTarget = isAssignmentTarget,\n oldFirstCoverInitializedNameError = firstCoverInitializedNameError,\n result;\n isBindingElement = true;\n isAssignmentTarget = true;\n firstCoverInitializedNameError = null;\n result = parser();\n if (firstCoverInitializedNameError !== null) {\n throwUnexpectedToken(firstCoverInitializedNameError);\n }\n isBindingElement = oldIsBindingElement;\n isAssignmentTarget = oldIsAssignmentTarget;\n firstCoverInitializedNameError = oldFirstCoverInitializedNameError;\n return result;\n }\n\n function inheritCoverGrammar(parser) {\n var oldIsBindingElement = isBindingElement,\n oldIsAssignmentTarget = isAssignmentTarget,\n oldFirstCoverInitializedNameError = firstCoverInitializedNameError,\n result;\n isBindingElement = true;\n isAssignmentTarget = true;\n firstCoverInitializedNameError = null;\n result = parser();\n isBindingElement = isBindingElement && oldIsBindingElement;\n isAssignmentTarget = isAssignmentTarget && oldIsAssignmentTarget;\n firstCoverInitializedNameError = oldFirstCoverInitializedNameError || firstCoverInitializedNameError;\n return result;\n }\n\n // ECMA-262 13.3.3 Destructuring Binding Patterns\n\n function parseArrayPattern(params, kind) {\n var node = new Node(), elements = [], rest, restNode;\n expect('[');\n\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else {\n if (match('...')) {\n restNode = new Node();\n lex();\n params.push(lookahead);\n rest = parseVariableIdentifier(kind);\n elements.push(restNode.finishRestElement(rest));\n break;\n } else {\n elements.push(parsePatternWithDefault(params, kind));\n }\n if (!match(']')) {\n expect(',');\n }\n }\n\n }\n\n expect(']');\n\n return node.finishArrayPattern(elements);\n }\n\n function parsePropertyPattern(params, kind) {\n var node = new Node(), key, keyToken, computed = match('['), init;\n if (lookahead.type === Token.Identifier) {\n keyToken = lookahead;\n key = parseVariableIdentifier();\n if (match('=')) {\n params.push(keyToken);\n lex();\n init = parseAssignmentExpression();\n\n return node.finishProperty(\n 'init', key, false,\n new WrappingNode(keyToken).finishAssignmentPattern(key, init), false, false);\n } else if (!match(':')) {\n params.push(keyToken);\n return node.finishProperty('init', key, false, key, false, true);\n }\n } else {\n key = parseObjectPropertyKey();\n }\n expect(':');\n init = parsePatternWithDefault(params, kind);\n return node.finishProperty('init', key, computed, init, false, false);\n }\n\n function parseObjectPattern(params, kind) {\n var node = new Node(), properties = [];\n\n expect('{');\n\n while (!match('}')) {\n properties.push(parsePropertyPattern(params, kind));\n if (!match('}')) {\n expect(',');\n }\n }\n\n lex();\n\n return node.finishObjectPattern(properties);\n }\n\n function parsePattern(params, kind) {\n if (match('[')) {\n return parseArrayPattern(params, kind);\n } else if (match('{')) {\n return parseObjectPattern(params, kind);\n } else if (matchKeyword('let')) {\n if (kind === 'const' || kind === 'let') {\n tolerateUnexpectedToken(lookahead, Messages.UnexpectedToken);\n }\n }\n\n params.push(lookahead);\n return parseVariableIdentifier(kind);\n }\n\n function parsePatternWithDefault(params, kind) {\n var startToken = lookahead, pattern, previousAllowYield, right;\n pattern = parsePattern(params, kind);\n if (match('=')) {\n lex();\n previousAllowYield = state.allowYield;\n state.allowYield = true;\n right = isolateCoverGrammar(parseAssignmentExpression);\n state.allowYield = previousAllowYield;\n pattern = new WrappingNode(startToken).finishAssignmentPattern(pattern, right);\n }\n return pattern;\n }\n\n // ECMA-262 12.2.5 Array Initializer\n\n function parseArrayInitializer() {\n var elements = [], node = new Node(), restSpread;\n\n expect('[');\n\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else if (match('...')) {\n restSpread = new Node();\n lex();\n restSpread.finishSpreadElement(inheritCoverGrammar(parseAssignmentExpression));\n\n if (!match(']')) {\n isAssignmentTarget = isBindingElement = false;\n expect(',');\n }\n elements.push(restSpread);\n } else {\n elements.push(inheritCoverGrammar(parseAssignmentExpression));\n\n if (!match(']')) {\n expect(',');\n }\n }\n }\n\n lex();\n\n return node.finishArrayExpression(elements);\n }\n\n // ECMA-262 12.2.6 Object Initializer\n\n function parsePropertyFunction(node, paramInfo, isGenerator) {\n var previousStrict, body;\n\n isAssignmentTarget = isBindingElement = false;\n\n previousStrict = strict;\n body = isolateCoverGrammar(parseFunctionSourceElements);\n\n if (strict && paramInfo.firstRestricted) {\n tolerateUnexpectedToken(paramInfo.firstRestricted, paramInfo.message);\n }\n if (strict && paramInfo.stricted) {\n tolerateUnexpectedToken(paramInfo.stricted, paramInfo.message);\n }\n\n strict = previousStrict;\n return node.finishFunctionExpression(null, paramInfo.params, paramInfo.defaults, body, isGenerator);\n }\n\n function parsePropertyMethodFunction() {\n var params, method, node = new Node(),\n previousAllowYield = state.allowYield;\n\n state.allowYield = false;\n params = parseParams();\n state.allowYield = previousAllowYield;\n\n state.allowYield = false;\n method = parsePropertyFunction(node, params, false);\n state.allowYield = previousAllowYield;\n\n return method;\n }\n\n function parseObjectPropertyKey() {\n var token, node = new Node(), expr;\n\n token = lex();\n\n // Note: This function is called only from parseObjectProperty(), where\n // EOF and Punctuator tokens are already filtered out.\n\n switch (token.type) {\n case Token.StringLiteral:\n case Token.NumericLiteral:\n if (strict && token.octal) {\n tolerateUnexpectedToken(token, Messages.StrictOctalLiteral);\n }\n return node.finishLiteral(token);\n case Token.Identifier:\n case Token.BooleanLiteral:\n case Token.NullLiteral:\n case Token.Keyword:\n return node.finishIdentifier(token.value);\n case Token.Punctuator:\n if (token.value === '[') {\n expr = isolateCoverGrammar(parseAssignmentExpression);\n expect(']');\n return expr;\n }\n break;\n }\n throwUnexpectedToken(token);\n }\n\n function lookaheadPropertyName() {\n switch (lookahead.type) {\n case Token.Identifier:\n case Token.StringLiteral:\n case Token.BooleanLiteral:\n case Token.NullLiteral:\n case Token.NumericLiteral:\n case Token.Keyword:\n return true;\n case Token.Punctuator:\n return lookahead.value === '[';\n }\n return false;\n }\n\n // This function is to try to parse a MethodDefinition as defined in 14.3. But in the case of object literals,\n // it might be called at a position where there is in fact a short hand identifier pattern or a data property.\n // This can only be determined after we consumed up to the left parentheses.\n //\n // In order to avoid back tracking, it returns `null` if the position is not a MethodDefinition and the caller\n // is responsible to visit other options.\n function tryParseMethodDefinition(token, key, computed, node) {\n var value, options, methodNode, params,\n previousAllowYield = state.allowYield;\n\n if (token.type === Token.Identifier) {\n // check for `get` and `set`;\n\n if (token.value === 'get' && lookaheadPropertyName()) {\n computed = match('[');\n key = parseObjectPropertyKey();\n methodNode = new Node();\n expect('(');\n expect(')');\n\n state.allowYield = false;\n value = parsePropertyFunction(methodNode, {\n params: [],\n defaults: [],\n stricted: null,\n firstRestricted: null,\n message: null\n }, false);\n state.allowYield = previousAllowYield;\n\n return node.finishProperty('get', key, computed, value, false, false);\n } else if (token.value === 'set' && lookaheadPropertyName()) {\n computed = match('[');\n key = parseObjectPropertyKey();\n methodNode = new Node();\n expect('(');\n\n options = {\n params: [],\n defaultCount: 0,\n defaults: [],\n firstRestricted: null,\n paramSet: {}\n };\n if (match(')')) {\n tolerateUnexpectedToken(lookahead);\n } else {\n state.allowYield = false;\n parseParam(options);\n state.allowYield = previousAllowYield;\n if (options.defaultCount === 0) {\n options.defaults = [];\n }\n }\n expect(')');\n\n state.allowYield = false;\n value = parsePropertyFunction(methodNode, options, false);\n state.allowYield = previousAllowYield;\n\n return node.finishProperty('set', key, computed, value, false, false);\n }\n } else if (token.type === Token.Punctuator && token.value === '*' && lookaheadPropertyName()) {\n computed = match('[');\n key = parseObjectPropertyKey();\n methodNode = new Node();\n\n state.allowYield = true;\n params = parseParams();\n state.allowYield = previousAllowYield;\n\n state.allowYield = false;\n value = parsePropertyFunction(methodNode, params, true);\n state.allowYield = previousAllowYield;\n\n return node.finishProperty('init', key, computed, value, true, false);\n }\n\n if (key && match('(')) {\n value = parsePropertyMethodFunction();\n return node.finishProperty('init', key, computed, value, true, false);\n }\n\n // Not a MethodDefinition.\n return null;\n }\n\n function parseObjectProperty(hasProto) {\n var token = lookahead, node = new Node(), computed, key, maybeMethod, proto, value;\n\n computed = match('[');\n if (match('*')) {\n lex();\n } else {\n key = parseObjectPropertyKey();\n }\n maybeMethod = tryParseMethodDefinition(token, key, computed, node);\n if (maybeMethod) {\n return maybeMethod;\n }\n\n if (!key) {\n throwUnexpectedToken(lookahead);\n }\n\n // Check for duplicated __proto__\n if (!computed) {\n proto = (key.type === Syntax.Identifier && key.name === '__proto__') ||\n (key.type === Syntax.Literal && key.value === '__proto__');\n if (hasProto.value && proto) {\n tolerateError(Messages.DuplicateProtoProperty);\n }\n hasProto.value |= proto;\n }\n\n if (match(':')) {\n lex();\n value = inheritCoverGrammar(parseAssignmentExpression);\n return node.finishProperty('init', key, computed, value, false, false);\n }\n\n if (token.type === Token.Identifier) {\n if (match('=')) {\n firstCoverInitializedNameError = lookahead;\n lex();\n value = isolateCoverGrammar(parseAssignmentExpression);\n return node.finishProperty('init', key, computed,\n new WrappingNode(token).finishAssignmentPattern(key, value), false, true);\n }\n return node.finishProperty('init', key, computed, key, false, true);\n }\n\n throwUnexpectedToken(lookahead);\n }\n\n function parseObjectInitializer() {\n var properties = [], hasProto = {value: false}, node = new Node();\n\n expect('{');\n\n while (!match('}')) {\n properties.push(parseObjectProperty(hasProto));\n\n if (!match('}')) {\n expectCommaSeparator();\n }\n }\n\n expect('}');\n\n return node.finishObjectExpression(properties);\n }\n\n function reinterpretExpressionAsPattern(expr) {\n var i;\n switch (expr.type) {\n case Syntax.Identifier:\n case Syntax.MemberExpression:\n case Syntax.RestElement:\n case Syntax.AssignmentPattern:\n break;\n case Syntax.SpreadElement:\n expr.type = Syntax.RestElement;\n reinterpretExpressionAsPattern(expr.argument);\n break;\n case Syntax.ArrayExpression:\n expr.type = Syntax.ArrayPattern;\n for (i = 0; i < expr.elements.length; i++) {\n if (expr.elements[i] !== null) {\n reinterpretExpressionAsPattern(expr.elements[i]);\n }\n }\n break;\n case Syntax.ObjectExpression:\n expr.type = Syntax.ObjectPattern;\n for (i = 0; i < expr.properties.length; i++) {\n reinterpretExpressionAsPattern(expr.properties[i].value);\n }\n break;\n case Syntax.AssignmentExpression:\n expr.type = Syntax.AssignmentPattern;\n reinterpretExpressionAsPattern(expr.left);\n break;\n default:\n // Allow other node type for tolerant parsing.\n break;\n }\n }\n\n // ECMA-262 12.2.9 Template Literals\n\n function parseTemplateElement(option) {\n var node, token;\n\n if (lookahead.type !== Token.Template || (option.head && !lookahead.head)) {\n throwUnexpectedToken();\n }\n\n node = new Node();\n token = lex();\n\n return node.finishTemplateElement({ raw: token.value.raw, cooked: token.value.cooked }, token.tail);\n }\n\n function parseTemplateLiteral() {\n var quasi, quasis, expressions, node = new Node();\n\n quasi = parseTemplateElement({ head: true });\n quasis = [quasi];\n expressions = [];\n\n while (!quasi.tail) {\n expressions.push(parseExpression());\n quasi = parseTemplateElement({ head: false });\n quasis.push(quasi);\n }\n\n return node.finishTemplateLiteral(quasis, expressions);\n }\n\n // ECMA-262 12.2.10 The Grouping Operator\n\n function parseGroupExpression() {\n var expr, expressions, startToken, i, params = [];\n\n expect('(');\n\n if (match(')')) {\n lex();\n if (!match('=>')) {\n expect('=>');\n }\n return {\n type: PlaceHolders.ArrowParameterPlaceHolder,\n params: [],\n rawParams: []\n };\n }\n\n startToken = lookahead;\n if (match('...')) {\n expr = parseRestElement(params);\n expect(')');\n if (!match('=>')) {\n expect('=>');\n }\n return {\n type: PlaceHolders.ArrowParameterPlaceHolder,\n params: [expr]\n };\n }\n\n isBindingElement = true;\n expr = inheritCoverGrammar(parseAssignmentExpression);\n\n if (match(',')) {\n isAssignmentTarget = false;\n expressions = [expr];\n\n while (startIndex < length) {\n if (!match(',')) {\n break;\n }\n lex();\n\n if (match('...')) {\n if (!isBindingElement) {\n throwUnexpectedToken(lookahead);\n }\n expressions.push(parseRestElement(params));\n expect(')');\n if (!match('=>')) {\n expect('=>');\n }\n isBindingElement = false;\n for (i = 0; i < expressions.length; i++) {\n reinterpretExpressionAsPattern(expressions[i]);\n }\n return {\n type: PlaceHolders.ArrowParameterPlaceHolder,\n params: expressions\n };\n }\n\n expressions.push(inheritCoverGrammar(parseAssignmentExpression));\n }\n\n expr = new WrappingNode(startToken).finishSequenceExpression(expressions);\n }\n\n\n expect(')');\n\n if (match('=>')) {\n if (expr.type === Syntax.Identifier && expr.name === 'yield') {\n return {\n type: PlaceHolders.ArrowParameterPlaceHolder,\n params: [expr]\n };\n }\n\n if (!isBindingElement) {\n throwUnexpectedToken(lookahead);\n }\n\n if (expr.type === Syntax.SequenceExpression) {\n for (i = 0; i < expr.expressions.length; i++) {\n reinterpretExpressionAsPattern(expr.expressions[i]);\n }\n } else {\n reinterpretExpressionAsPattern(expr);\n }\n\n expr = {\n type: PlaceHolders.ArrowParameterPlaceHolder,\n params: expr.type === Syntax.SequenceExpression ? expr.expressions : [expr]\n };\n }\n isBindingElement = false;\n return expr;\n }\n\n\n // ECMA-262 12.2 Primary Expressions\n\n function parsePrimaryExpression() {\n var type, token, expr, node;\n\n if (match('(')) {\n isBindingElement = false;\n return inheritCoverGrammar(parseGroupExpression);\n }\n\n if (match('[')) {\n return inheritCoverGrammar(parseArrayInitializer);\n }\n\n if (match('{')) {\n return inheritCoverGrammar(parseObjectInitializer);\n }\n\n type = lookahead.type;\n node = new Node();\n\n if (type === Token.Identifier) {\n if (state.sourceType === 'module' && lookahead.value === 'await') {\n tolerateUnexpectedToken(lookahead);\n }\n expr = node.finishIdentifier(lex().value);\n } else if (type === Token.StringLiteral || type === Token.NumericLiteral) {\n isAssignmentTarget = isBindingElement = false;\n if (strict && lookahead.octal) {\n tolerateUnexpectedToken(lookahead, Messages.StrictOctalLiteral);\n }\n expr = node.finishLiteral(lex());\n } else if (type === Token.Keyword) {\n if (!strict && state.allowYield && matchKeyword('yield')) {\n return parseNonComputedProperty();\n }\n if (!strict && matchKeyword('let')) {\n return node.finishIdentifier(lex().value);\n }\n isAssignmentTarget = isBindingElement = false;\n if (matchKeyword('function')) {\n return parseFunctionExpression();\n }\n if (matchKeyword('this')) {\n lex();\n return node.finishThisExpression();\n }\n if (matchKeyword('class')) {\n return parseClassExpression();\n }\n throwUnexpectedToken(lex());\n } else if (type === Token.BooleanLiteral) {\n isAssignmentTarget = isBindingElement = false;\n token = lex();\n token.value = (token.value === 'true');\n expr = node.finishLiteral(token);\n } else if (type === Token.NullLiteral) {\n isAssignmentTarget = isBindingElement = false;\n token = lex();\n token.value = null;\n expr = node.finishLiteral(token);\n } else if (match('/') || match('/=')) {\n isAssignmentTarget = isBindingElement = false;\n index = startIndex;\n\n if (typeof extra.tokens !== 'undefined') {\n token = collectRegex();\n } else {\n token = scanRegExp();\n }\n lex();\n expr = node.finishLiteral(token);\n } else if (type === Token.Template) {\n expr = parseTemplateLiteral();\n } else {\n throwUnexpectedToken(lex());\n }\n\n return expr;\n }\n\n // ECMA-262 12.3 Left-Hand-Side Expressions\n\n function parseArguments() {\n var args = [], expr;\n\n expect('(');\n\n if (!match(')')) {\n while (startIndex < length) {\n if (match('...')) {\n expr = new Node();\n lex();\n expr.finishSpreadElement(isolateCoverGrammar(parseAssignmentExpression));\n } else {\n expr = isolateCoverGrammar(parseAssignmentExpression);\n }\n args.push(expr);\n if (match(')')) {\n break;\n }\n expectCommaSeparator();\n }\n }\n\n expect(')');\n\n return args;\n }\n\n function parseNonComputedProperty() {\n var token, node = new Node();\n\n token = lex();\n\n if (!isIdentifierName(token)) {\n throwUnexpectedToken(token);\n }\n\n return node.finishIdentifier(token.value);\n }\n\n function parseNonComputedMember() {\n expect('.');\n\n return parseNonComputedProperty();\n }\n\n function parseComputedMember() {\n var expr;\n\n expect('[');\n\n expr = isolateCoverGrammar(parseExpression);\n\n expect(']');\n\n return expr;\n }\n\n // ECMA-262 12.3.3 The new Operator\n\n function parseNewExpression() {\n var callee, args, node = new Node();\n\n expectKeyword('new');\n\n if (match('.')) {\n lex();\n if (lookahead.type === Token.Identifier && lookahead.value === 'target') {\n if (state.inFunctionBody) {\n lex();\n return node.finishMetaProperty('new', 'target');\n }\n }\n throwUnexpectedToken(lookahead);\n }\n\n callee = isolateCoverGrammar(parseLeftHandSideExpression);\n args = match('(') ? parseArguments() : [];\n\n isAssignmentTarget = isBindingElement = false;\n\n return node.finishNewExpression(callee, args);\n }\n\n // ECMA-262 12.3.4 Function Calls\n\n function parseLeftHandSideExpressionAllowCall() {\n var quasi, expr, args, property, startToken, previousAllowIn = state.allowIn;\n\n startToken = lookahead;\n state.allowIn = true;\n\n if (matchKeyword('super') && state.inFunctionBody) {\n expr = new Node();\n lex();\n expr = expr.finishSuper();\n if (!match('(') && !match('.') && !match('[')) {\n throwUnexpectedToken(lookahead);\n }\n } else {\n expr = inheritCoverGrammar(matchKeyword('new') ? parseNewExpression : parsePrimaryExpression);\n }\n\n for (;;) {\n if (match('.')) {\n isBindingElement = false;\n isAssignmentTarget = true;\n property = parseNonComputedMember();\n expr = new WrappingNode(startToken).finishMemberExpression('.', expr, property);\n } else if (match('(')) {\n isBindingElement = false;\n isAssignmentTarget = false;\n args = parseArguments();\n expr = new WrappingNode(startToken).finishCallExpression(expr, args);\n } else if (match('[')) {\n isBindingElement = false;\n isAssignmentTarget = true;\n property = parseComputedMember();\n expr = new WrappingNode(startToken).finishMemberExpression('[', expr, property);\n } else if (lookahead.type === Token.Template && lookahead.head) {\n quasi = parseTemplateLiteral();\n expr = new WrappingNode(startToken).finishTaggedTemplateExpression(expr, quasi);\n } else {\n break;\n }\n }\n state.allowIn = previousAllowIn;\n\n return expr;\n }\n\n // ECMA-262 12.3 Left-Hand-Side Expressions\n\n function parseLeftHandSideExpression() {\n var quasi, expr, property, startToken;\n assert(state.allowIn, 'callee of new expression always allow in keyword.');\n\n startToken = lookahead;\n\n if (matchKeyword('super') && state.inFunctionBody) {\n expr = new Node();\n lex();\n expr = expr.finishSuper();\n if (!match('[') && !match('.')) {\n throwUnexpectedToken(lookahead);\n }\n } else {\n expr = inheritCoverGrammar(matchKeyword('new') ? parseNewExpression : parsePrimaryExpression);\n }\n\n for (;;) {\n if (match('[')) {\n isBindingElement = false;\n isAssignmentTarget = true;\n property = parseComputedMember();\n expr = new WrappingNode(startToken).finishMemberExpression('[', expr, property);\n } else if (match('.')) {\n isBindingElement = false;\n isAssignmentTarget = true;\n property = parseNonComputedMember();\n expr = new WrappingNode(startToken).finishMemberExpression('.', expr, property);\n } else if (lookahead.type === Token.Template && lookahead.head) {\n quasi = parseTemplateLiteral();\n expr = new WrappingNode(startToken).finishTaggedTemplateExpression(expr, quasi);\n } else {\n break;\n }\n }\n return expr;\n }\n\n // ECMA-262 12.4 Postfix Expressions\n\n function parsePostfixExpression() {\n var expr, token, startToken = lookahead;\n\n expr = inheritCoverGrammar(parseLeftHandSideExpressionAllowCall);\n\n if (!hasLineTerminator && lookahead.type === Token.Punctuator) {\n if (match('++') || match('--')) {\n // ECMA-262 11.3.1, 11.3.2\n if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {\n tolerateError(Messages.StrictLHSPostfix);\n }\n\n if (!isAssignmentTarget) {\n tolerateError(Messages.InvalidLHSInAssignment);\n }\n\n isAssignmentTarget = isBindingElement = false;\n\n token = lex();\n expr = new WrappingNode(startToken).finishPostfixExpression(token.value, expr);\n }\n }\n\n return expr;\n }\n\n // ECMA-262 12.5 Unary Operators\n\n function parseUnaryExpression() {\n var token, expr, startToken;\n\n if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.Keyword) {\n expr = parsePostfixExpression();\n } else if (match('++') || match('--')) {\n startToken = lookahead;\n token = lex();\n expr = inheritCoverGrammar(parseUnaryExpression);\n // ECMA-262 11.4.4, 11.4.5\n if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {\n tolerateError(Messages.StrictLHSPrefix);\n }\n\n if (!isAssignmentTarget) {\n tolerateError(Messages.InvalidLHSInAssignment);\n }\n expr = new WrappingNode(startToken).finishUnaryExpression(token.value, expr);\n isAssignmentTarget = isBindingElement = false;\n } else if (match('+') || match('-') || match('~') || match('!')) {\n startToken = lookahead;\n token = lex();\n expr = inheritCoverGrammar(parseUnaryExpression);\n expr = new WrappingNode(startToken).finishUnaryExpression(token.value, expr);\n isAssignmentTarget = isBindingElement = false;\n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n startToken = lookahead;\n token = lex();\n expr = inheritCoverGrammar(parseUnaryExpression);\n expr = new WrappingNode(startToken).finishUnaryExpression(token.value, expr);\n if (strict && expr.operator === 'delete' && expr.argument.type === Syntax.Identifier) {\n tolerateError(Messages.StrictDelete);\n }\n isAssignmentTarget = isBindingElement = false;\n } else {\n expr = parsePostfixExpression();\n }\n\n return expr;\n }\n\n function binaryPrecedence(token, allowIn) {\n var prec = 0;\n\n if (token.type !== Token.Punctuator && token.type !== Token.Keyword) {\n return 0;\n }\n\n switch (token.value) {\n case '||':\n prec = 1;\n break;\n\n case '&&':\n prec = 2;\n break;\n\n case '|':\n prec = 3;\n break;\n\n case '^':\n prec = 4;\n break;\n\n case '&':\n prec = 5;\n break;\n\n case '==':\n case '!=':\n case '===':\n case '!==':\n prec = 6;\n break;\n\n case '<':\n case '>':\n case '<=':\n case '>=':\n case 'instanceof':\n prec = 7;\n break;\n\n case 'in':\n prec = allowIn ? 7 : 0;\n break;\n\n case '<<':\n case '>>':\n case '>>>':\n prec = 8;\n break;\n\n case '+':\n case '-':\n prec = 9;\n break;\n\n case '*':\n case '/':\n case '%':\n prec = 11;\n break;\n\n default:\n break;\n }\n\n return prec;\n }\n\n // ECMA-262 12.6 Multiplicative Operators\n // ECMA-262 12.7 Additive Operators\n // ECMA-262 12.8 Bitwise Shift Operators\n // ECMA-262 12.9 Relational Operators\n // ECMA-262 12.10 Equality Operators\n // ECMA-262 12.11 Binary Bitwise Operators\n // ECMA-262 12.12 Binary Logical Operators\n\n function parseBinaryExpression() {\n var marker, markers, expr, token, prec, stack, right, operator, left, i;\n\n marker = lookahead;\n left = inheritCoverGrammar(parseUnaryExpression);\n\n token = lookahead;\n prec = binaryPrecedence(token, state.allowIn);\n if (prec === 0) {\n return left;\n }\n isAssignmentTarget = isBindingElement = false;\n token.prec = prec;\n lex();\n\n markers = [marker, lookahead];\n right = isolateCoverGrammar(parseUnaryExpression);\n\n stack = [left, token, right];\n\n while ((prec = binaryPrecedence(lookahead, state.allowIn)) > 0) {\n\n // Reduce: make a binary expression from the three topmost entries.\n while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {\n right = stack.pop();\n operator = stack.pop().value;\n left = stack.pop();\n markers.pop();\n expr = new WrappingNode(markers[markers.length - 1]).finishBinaryExpression(operator, left, right);\n stack.push(expr);\n }\n\n // Shift.\n token = lex();\n token.prec = prec;\n stack.push(token);\n markers.push(lookahead);\n expr = isolateCoverGrammar(parseUnaryExpression);\n stack.push(expr);\n }\n\n // Final reduce to clean-up the stack.\n i = stack.length - 1;\n expr = stack[i];\n markers.pop();\n while (i > 1) {\n expr = new WrappingNode(markers.pop()).finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i -= 2;\n }\n\n return expr;\n }\n\n\n // ECMA-262 12.13 Conditional Operator\n\n function parseConditionalExpression() {\n var expr, previousAllowIn, consequent, alternate, startToken;\n\n startToken = lookahead;\n\n expr = inheritCoverGrammar(parseBinaryExpression);\n if (match('?')) {\n lex();\n previousAllowIn = state.allowIn;\n state.allowIn = true;\n consequent = isolateCoverGrammar(parseAssignmentExpression);\n state.allowIn = previousAllowIn;\n expect(':');\n alternate = isolateCoverGrammar(parseAssignmentExpression);\n\n expr = new WrappingNode(startToken).finishConditionalExpression(expr, consequent, alternate);\n isAssignmentTarget = isBindingElement = false;\n }\n\n return expr;\n }\n\n // ECMA-262 14.2 Arrow Function Definitions\n\n function parseConciseBody() {\n if (match('{')) {\n return parseFunctionSourceElements();\n }\n return isolateCoverGrammar(parseAssignmentExpression);\n }\n\n function checkPatternParam(options, param) {\n var i;\n switch (param.type) {\n case Syntax.Identifier:\n validateParam(options, param, param.name);\n break;\n case Syntax.RestElement:\n checkPatternParam(options, param.argument);\n break;\n case Syntax.AssignmentPattern:\n checkPatternParam(options, param.left);\n break;\n case Syntax.ArrayPattern:\n for (i = 0; i < param.elements.length; i++) {\n if (param.elements[i] !== null) {\n checkPatternParam(options, param.elements[i]);\n }\n }\n break;\n case Syntax.YieldExpression:\n break;\n default:\n assert(param.type === Syntax.ObjectPattern, 'Invalid type');\n for (i = 0; i < param.properties.length; i++) {\n checkPatternParam(options, param.properties[i].value);\n }\n break;\n }\n }\n function reinterpretAsCoverFormalsList(expr) {\n var i, len, param, params, defaults, defaultCount, options, token;\n\n defaults = [];\n defaultCount = 0;\n params = [expr];\n\n switch (expr.type) {\n case Syntax.Identifier:\n break;\n case PlaceHolders.ArrowParameterPlaceHolder:\n params = expr.params;\n break;\n default:\n return null;\n }\n\n options = {\n paramSet: {}\n };\n\n for (i = 0, len = params.length; i < len; i += 1) {\n param = params[i];\n switch (param.type) {\n case Syntax.AssignmentPattern:\n params[i] = param.left;\n if (param.right.type === Syntax.YieldExpression) {\n if (param.right.argument) {\n throwUnexpectedToken(lookahead);\n }\n param.right.type = Syntax.Identifier;\n param.right.name = 'yield';\n delete param.right.argument;\n delete param.right.delegate;\n }\n defaults.push(param.right);\n ++defaultCount;\n checkPatternParam(options, param.left);\n break;\n default:\n checkPatternParam(options, param);\n params[i] = param;\n defaults.push(null);\n break;\n }\n }\n\n if (strict || !state.allowYield) {\n for (i = 0, len = params.length; i < len; i += 1) {\n param = params[i];\n if (param.type === Syntax.YieldExpression) {\n throwUnexpectedToken(lookahead);\n }\n }\n }\n\n if (options.message === Messages.StrictParamDupe) {\n token = strict ? options.stricted : options.firstRestricted;\n throwUnexpectedToken(token, options.message);\n }\n\n if (defaultCount === 0) {\n defaults = [];\n }\n\n return {\n params: params,\n defaults: defaults,\n stricted: options.stricted,\n firstRestricted: options.firstRestricted,\n message: options.message\n };\n }\n\n function parseArrowFunctionExpression(options, node) {\n var previousStrict, previousAllowYield, body;\n\n if (hasLineTerminator) {\n tolerateUnexpectedToken(lookahead);\n }\n expect('=>');\n\n previousStrict = strict;\n previousAllowYield = state.allowYield;\n state.allowYield = true;\n\n body = parseConciseBody();\n\n if (strict && options.firstRestricted) {\n throwUnexpectedToken(options.firstRestricted, options.message);\n }\n if (strict && options.stricted) {\n tolerateUnexpectedToken(options.stricted, options.message);\n }\n\n strict = previousStrict;\n state.allowYield = previousAllowYield;\n\n return node.finishArrowFunctionExpression(options.params, options.defaults, body, body.type !== Syntax.BlockStatement);\n }\n\n // ECMA-262 14.4 Yield expression\n\n function parseYieldExpression() {\n var argument, expr, delegate, previousAllowYield;\n\n argument = null;\n expr = new Node();\n delegate = false;\n\n expectKeyword('yield');\n\n if (!hasLineTerminator) {\n previousAllowYield = state.allowYield;\n state.allowYield = false;\n delegate = match('*');\n if (delegate) {\n lex();\n argument = parseAssignmentExpression();\n } else {\n if (!match(';') && !match('}') && !match(')') && lookahead.type !== Token.EOF) {\n argument = parseAssignmentExpression();\n }\n }\n state.allowYield = previousAllowYield;\n }\n\n return expr.finishYieldExpression(argument, delegate);\n }\n\n // ECMA-262 12.14 Assignment Operators\n\n function parseAssignmentExpression() {\n var token, expr, right, list, startToken;\n\n startToken = lookahead;\n token = lookahead;\n\n if (!state.allowYield && matchKeyword('yield')) {\n return parseYieldExpression();\n }\n\n expr = parseConditionalExpression();\n\n if (expr.type === PlaceHolders.ArrowParameterPlaceHolder || match('=>')) {\n isAssignmentTarget = isBindingElement = false;\n list = reinterpretAsCoverFormalsList(expr);\n\n if (list) {\n firstCoverInitializedNameError = null;\n return parseArrowFunctionExpression(list, new WrappingNode(startToken));\n }\n\n return expr;\n }\n\n if (matchAssign()) {\n if (!isAssignmentTarget) {\n tolerateError(Messages.InvalidLHSInAssignment);\n }\n\n // ECMA-262 12.1.1\n if (strict && expr.type === Syntax.Identifier) {\n if (isRestrictedWord(expr.name)) {\n tolerateUnexpectedToken(token, Messages.StrictLHSAssignment);\n }\n if (isStrictModeReservedWord(expr.name)) {\n tolerateUnexpectedToken(token, Messages.StrictReservedWord);\n }\n }\n\n if (!match('=')) {\n isAssignmentTarget = isBindingElement = false;\n } else {\n reinterpretExpressionAsPattern(expr);\n }\n\n token = lex();\n right = isolateCoverGrammar(parseAssignmentExpression);\n expr = new WrappingNode(startToken).finishAssignmentExpression(token.value, expr, right);\n firstCoverInitializedNameError = null;\n }\n\n return expr;\n }\n\n // ECMA-262 12.15 Comma Operator\n\n function parseExpression() {\n var expr, startToken = lookahead, expressions;\n\n expr = isolateCoverGrammar(parseAssignmentExpression);\n\n if (match(',')) {\n expressions = [expr];\n\n while (startIndex < length) {\n if (!match(',')) {\n break;\n }\n lex();\n expressions.push(isolateCoverGrammar(parseAssignmentExpression));\n }\n\n expr = new WrappingNode(startToken).finishSequenceExpression(expressions);\n }\n\n return expr;\n }\n\n // ECMA-262 13.2 Block\n\n function parseStatementListItem() {\n if (lookahead.type === Token.Keyword) {\n switch (lookahead.value) {\n case 'export':\n if (state.sourceType !== 'module') {\n tolerateUnexpectedToken(lookahead, Messages.IllegalExportDeclaration);\n }\n return parseExportDeclaration();\n case 'import':\n if (state.sourceType !== 'module') {\n tolerateUnexpectedToken(lookahead, Messages.IllegalImportDeclaration);\n }\n return parseImportDeclaration();\n case 'const':\n return parseLexicalDeclaration({inFor: false});\n case 'function':\n return parseFunctionDeclaration(new Node());\n case 'class':\n return parseClassDeclaration();\n }\n }\n\n if (matchKeyword('let') && isLexicalDeclaration()) {\n return parseLexicalDeclaration({inFor: false});\n }\n\n return parseStatement();\n }\n\n function parseStatementList() {\n var list = [];\n while (startIndex < length) {\n if (match('}')) {\n break;\n }\n list.push(parseStatementListItem());\n }\n\n return list;\n }\n\n function parseBlock() {\n var block, node = new Node();\n\n expect('{');\n\n block = parseStatementList();\n\n expect('}');\n\n return node.finishBlockStatement(block);\n }\n\n // ECMA-262 13.3.2 Variable Statement\n\n function parseVariableIdentifier(kind) {\n var token, node = new Node();\n\n token = lex();\n\n if (token.type === Token.Keyword && token.value === 'yield') {\n if (strict) {\n tolerateUnexpectedToken(token, Messages.StrictReservedWord);\n } if (!state.allowYield) {\n throwUnexpectedToken(token);\n }\n } else if (token.type !== Token.Identifier) {\n if (strict && token.type === Token.Keyword && isStrictModeReservedWord(token.value)) {\n tolerateUnexpectedToken(token, Messages.StrictReservedWord);\n } else {\n if (strict || token.value !== 'let' || kind !== 'var') {\n throwUnexpectedToken(token);\n }\n }\n } else if (state.sourceType === 'module' && token.type === Token.Identifier && token.value === 'await') {\n tolerateUnexpectedToken(token);\n }\n\n return node.finishIdentifier(token.value);\n }\n\n function parseVariableDeclaration(options) {\n var init = null, id, node = new Node(), params = [];\n\n id = parsePattern(params, 'var');\n\n // ECMA-262 12.2.1\n if (strict && isRestrictedWord(id.name)) {\n tolerateError(Messages.StrictVarName);\n }\n\n if (match('=')) {\n lex();\n init = isolateCoverGrammar(parseAssignmentExpression);\n } else if (id.type !== Syntax.Identifier && !options.inFor) {\n expect('=');\n }\n\n return node.finishVariableDeclarator(id, init);\n }\n\n function parseVariableDeclarationList(options) {\n var opt, list;\n\n opt = { inFor: options.inFor };\n list = [parseVariableDeclaration(opt)];\n\n while (match(',')) {\n lex();\n list.push(parseVariableDeclaration(opt));\n }\n\n return list;\n }\n\n function parseVariableStatement(node) {\n var declarations;\n\n expectKeyword('var');\n\n declarations = parseVariableDeclarationList({ inFor: false });\n\n consumeSemicolon();\n\n return node.finishVariableDeclaration(declarations);\n }\n\n // ECMA-262 13.3.1 Let and Const Declarations\n\n function parseLexicalBinding(kind, options) {\n var init = null, id, node = new Node(), params = [];\n\n id = parsePattern(params, kind);\n\n // ECMA-262 12.2.1\n if (strict && id.type === Syntax.Identifier && isRestrictedWord(id.name)) {\n tolerateError(Messages.StrictVarName);\n }\n\n if (kind === 'const') {\n if (!matchKeyword('in') && !matchContextualKeyword('of')) {\n expect('=');\n init = isolateCoverGrammar(parseAssignmentExpression);\n }\n } else if ((!options.inFor && id.type !== Syntax.Identifier) || match('=')) {\n expect('=');\n init = isolateCoverGrammar(parseAssignmentExpression);\n }\n\n return node.finishVariableDeclarator(id, init);\n }\n\n function parseBindingList(kind, options) {\n var list = [parseLexicalBinding(kind, options)];\n\n while (match(',')) {\n lex();\n list.push(parseLexicalBinding(kind, options));\n }\n\n return list;\n }\n\n\n function tokenizerState() {\n return {\n index: index,\n lineNumber: lineNumber,\n lineStart: lineStart,\n hasLineTerminator: hasLineTerminator,\n lastIndex: lastIndex,\n lastLineNumber: lastLineNumber,\n lastLineStart: lastLineStart,\n startIndex: startIndex,\n startLineNumber: startLineNumber,\n startLineStart: startLineStart,\n lookahead: lookahead,\n tokenCount: extra.tokens ? extra.tokens.length : 0\n };\n }\n\n function resetTokenizerState(ts) {\n index = ts.index;\n lineNumber = ts.lineNumber;\n lineStart = ts.lineStart;\n hasLineTerminator = ts.hasLineTerminator;\n lastIndex = ts.lastIndex;\n lastLineNumber = ts.lastLineNumber;\n lastLineStart = ts.lastLineStart;\n startIndex = ts.startIndex;\n startLineNumber = ts.startLineNumber;\n startLineStart = ts.startLineStart;\n lookahead = ts.lookahead;\n if (extra.tokens) {\n extra.tokens.splice(ts.tokenCount, extra.tokens.length);\n }\n }\n\n function isLexicalDeclaration() {\n var lexical, ts;\n\n ts = tokenizerState();\n\n lex();\n lexical = (lookahead.type === Token.Identifier) || match('[') || match('{') ||\n matchKeyword('let') || matchKeyword('yield');\n\n resetTokenizerState(ts);\n\n return lexical;\n }\n\n function parseLexicalDeclaration(options) {\n var kind, declarations, node = new Node();\n\n kind = lex().value;\n assert(kind === 'let' || kind === 'const', 'Lexical declaration must be either let or const');\n\n declarations = parseBindingList(kind, options);\n\n consumeSemicolon();\n\n return node.finishLexicalDeclaration(declarations, kind);\n }\n\n function parseRestElement(params) {\n var param, node = new Node();\n\n lex();\n\n if (match('{')) {\n throwError(Messages.ObjectPatternAsRestParameter);\n }\n\n params.push(lookahead);\n\n param = parseVariableIdentifier();\n\n if (match('=')) {\n throwError(Messages.DefaultRestParameter);\n }\n\n if (!match(')')) {\n throwError(Messages.ParameterAfterRestParameter);\n }\n\n return node.finishRestElement(param);\n }\n\n // ECMA-262 13.4 Empty Statement\n\n function parseEmptyStatement(node) {\n expect(';');\n return node.finishEmptyStatement();\n }\n\n // ECMA-262 12.4 Expression Statement\n\n function parseExpressionStatement(node) {\n var expr = parseExpression();\n consumeSemicolon();\n return node.finishExpressionStatement(expr);\n }\n\n // ECMA-262 13.6 If statement\n\n function parseIfStatement(node) {\n var test, consequent, alternate;\n\n expectKeyword('if');\n\n expect('(');\n\n test = parseExpression();\n\n expect(')');\n\n consequent = parseStatement();\n\n if (matchKeyword('else')) {\n lex();\n alternate = parseStatement();\n } else {\n alternate = null;\n }\n\n return node.finishIfStatement(test, consequent, alternate);\n }\n\n // ECMA-262 13.7 Iteration Statements\n\n function parseDoWhileStatement(node) {\n var body, test, oldInIteration;\n\n expectKeyword('do');\n\n oldInIteration = state.inIteration;\n state.inIteration = true;\n\n body = parseStatement();\n\n state.inIteration = oldInIteration;\n\n expectKeyword('while');\n\n expect('(');\n\n test = parseExpression();\n\n expect(')');\n\n if (match(';')) {\n lex();\n }\n\n return node.finishDoWhileStatement(body, test);\n }\n\n function parseWhileStatement(node) {\n var test, body, oldInIteration;\n\n expectKeyword('while');\n\n expect('(');\n\n test = parseExpression();\n\n expect(')');\n\n oldInIteration = state.inIteration;\n state.inIteration = true;\n\n body = parseStatement();\n\n state.inIteration = oldInIteration;\n\n return node.finishWhileStatement(test, body);\n }\n\n function parseForStatement(node) {\n var init, forIn, initSeq, initStartToken, test, update, left, right, kind, declarations,\n body, oldInIteration, previousAllowIn = state.allowIn;\n\n init = test = update = null;\n forIn = true;\n\n expectKeyword('for');\n\n expect('(');\n\n if (match(';')) {\n lex();\n } else {\n if (matchKeyword('var')) {\n init = new Node();\n lex();\n\n state.allowIn = false;\n declarations = parseVariableDeclarationList({ inFor: true });\n state.allowIn = previousAllowIn;\n\n if (declarations.length === 1 && matchKeyword('in')) {\n init = init.finishVariableDeclaration(declarations);\n lex();\n left = init;\n right = parseExpression();\n init = null;\n } else if (declarations.length === 1 && declarations[0].init === null && matchContextualKeyword('of')) {\n init = init.finishVariableDeclaration(declarations);\n lex();\n left = init;\n right = parseAssignmentExpression();\n init = null;\n forIn = false;\n } else {\n init = init.finishVariableDeclaration(declarations);\n expect(';');\n }\n } else if (matchKeyword('const') || matchKeyword('let')) {\n init = new Node();\n kind = lex().value;\n\n if (!strict && lookahead.value === 'in') {\n init = init.finishIdentifier(kind);\n lex();\n left = init;\n right = parseExpression();\n init = null;\n } else {\n state.allowIn = false;\n declarations = parseBindingList(kind, {inFor: true});\n state.allowIn = previousAllowIn;\n\n if (declarations.length === 1 && declarations[0].init === null && matchKeyword('in')) {\n init = init.finishLexicalDeclaration(declarations, kind);\n lex();\n left = init;\n right = parseExpression();\n init = null;\n } else if (declarations.length === 1 && declarations[0].init === null && matchContextualKeyword('of')) {\n init = init.finishLexicalDeclaration(declarations, kind);\n lex();\n left = init;\n right = parseAssignmentExpression();\n init = null;\n forIn = false;\n } else {\n consumeSemicolon();\n init = init.finishLexicalDeclaration(declarations, kind);\n }\n }\n } else {\n initStartToken = lookahead;\n state.allowIn = false;\n init = inheritCoverGrammar(parseAssignmentExpression);\n state.allowIn = previousAllowIn;\n\n if (matchKeyword('in')) {\n if (!isAssignmentTarget) {\n tolerateError(Messages.InvalidLHSInForIn);\n }\n\n lex();\n reinterpretExpressionAsPattern(init);\n left = init;\n right = parseExpression();\n init = null;\n } else if (matchContextualKeyword('of')) {\n if (!isAssignmentTarget) {\n tolerateError(Messages.InvalidLHSInForLoop);\n }\n\n lex();\n reinterpretExpressionAsPattern(init);\n left = init;\n right = parseAssignmentExpression();\n init = null;\n forIn = false;\n } else {\n if (match(',')) {\n initSeq = [init];\n while (match(',')) {\n lex();\n initSeq.push(isolateCoverGrammar(parseAssignmentExpression));\n }\n init = new WrappingNode(initStartToken).finishSequenceExpression(initSeq);\n }\n expect(';');\n }\n }\n }\n\n if (typeof left === 'undefined') {\n\n if (!match(';')) {\n test = parseExpression();\n }\n expect(';');\n\n if (!match(')')) {\n update = parseExpression();\n }\n }\n\n expect(')');\n\n oldInIteration = state.inIteration;\n state.inIteration = true;\n\n body = isolateCoverGrammar(parseStatement);\n\n state.inIteration = oldInIteration;\n\n return (typeof left === 'undefined') ?\n node.finishForStatement(init, test, update, body) :\n forIn ? node.finishForInStatement(left, right, body) :\n node.finishForOfStatement(left, right, body);\n }\n\n // ECMA-262 13.8 The continue statement\n\n function parseContinueStatement(node) {\n var label = null, key;\n\n expectKeyword('continue');\n\n // Optimize the most common form: 'continue;'.\n if (source.charCodeAt(startIndex) === 0x3B) {\n lex();\n\n if (!state.inIteration) {\n throwError(Messages.IllegalContinue);\n }\n\n return node.finishContinueStatement(null);\n }\n\n if (hasLineTerminator) {\n if (!state.inIteration) {\n throwError(Messages.IllegalContinue);\n }\n\n return node.finishContinueStatement(null);\n }\n\n if (lookahead.type === Token.Identifier) {\n label = parseVariableIdentifier();\n\n key = '$' + label.name;\n if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) {\n throwError(Messages.UnknownLabel, label.name);\n }\n }\n\n consumeSemicolon();\n\n if (label === null && !state.inIteration) {\n throwError(Messages.IllegalContinue);\n }\n\n return node.finishContinueStatement(label);\n }\n\n // ECMA-262 13.9 The break statement\n\n function parseBreakStatement(node) {\n var label = null, key;\n\n expectKeyword('break');\n\n // Catch the very common case first: immediately a semicolon (U+003B).\n if (source.charCodeAt(lastIndex) === 0x3B) {\n lex();\n\n if (!(state.inIteration || state.inSwitch)) {\n throwError(Messages.IllegalBreak);\n }\n\n return node.finishBreakStatement(null);\n }\n\n if (hasLineTerminator) {\n if (!(state.inIteration || state.inSwitch)) {\n throwError(Messages.IllegalBreak);\n }\n } else if (lookahead.type === Token.Identifier) {\n label = parseVariableIdentifier();\n\n key = '$' + label.name;\n if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) {\n throwError(Messages.UnknownLabel, label.name);\n }\n }\n\n consumeSemicolon();\n\n if (label === null && !(state.inIteration || state.inSwitch)) {\n throwError(Messages.IllegalBreak);\n }\n\n return node.finishBreakStatement(label);\n }\n\n // ECMA-262 13.10 The return statement\n\n function parseReturnStatement(node) {\n var argument = null;\n\n expectKeyword('return');\n\n if (!state.inFunctionBody) {\n tolerateError(Messages.IllegalReturn);\n }\n\n // 'return' followed by a space and an identifier is very common.\n if (source.charCodeAt(lastIndex) === 0x20) {\n if (isIdentifierStart(source.charCodeAt(lastIndex + 1))) {\n argument = parseExpression();\n consumeSemicolon();\n return node.finishReturnStatement(argument);\n }\n }\n\n if (hasLineTerminator) {\n // HACK\n return node.finishReturnStatement(null);\n }\n\n if (!match(';')) {\n if (!match('}') && lookahead.type !== Token.EOF) {\n argument = parseExpression();\n }\n }\n\n consumeSemicolon();\n\n return node.finishReturnStatement(argument);\n }\n\n // ECMA-262 13.11 The with statement\n\n function parseWithStatement(node) {\n var object, body;\n\n if (strict) {\n tolerateError(Messages.StrictModeWith);\n }\n\n expectKeyword('with');\n\n expect('(');\n\n object = parseExpression();\n\n expect(')');\n\n body = parseStatement();\n\n return node.finishWithStatement(object, body);\n }\n\n // ECMA-262 13.12 The switch statement\n\n function parseSwitchCase() {\n var test, consequent = [], statement, node = new Node();\n\n if (matchKeyword('default')) {\n lex();\n test = null;\n } else {\n expectKeyword('case');\n test = parseExpression();\n }\n expect(':');\n\n while (startIndex < length) {\n if (match('}') || matchKeyword('default') || matchKeyword('case')) {\n break;\n }\n statement = parseStatementListItem();\n consequent.push(statement);\n }\n\n return node.finishSwitchCase(test, consequent);\n }\n\n function parseSwitchStatement(node) {\n var discriminant, cases, clause, oldInSwitch, defaultFound;\n\n expectKeyword('switch');\n\n expect('(');\n\n discriminant = parseExpression();\n\n expect(')');\n\n expect('{');\n\n cases = [];\n\n if (match('}')) {\n lex();\n return node.finishSwitchStatement(discriminant, cases);\n }\n\n oldInSwitch = state.inSwitch;\n state.inSwitch = true;\n defaultFound = false;\n\n while (startIndex < length) {\n if (match('}')) {\n break;\n }\n clause = parseSwitchCase();\n if (clause.test === null) {\n if (defaultFound) {\n throwError(Messages.MultipleDefaultsInSwitch);\n }\n defaultFound = true;\n }\n cases.push(clause);\n }\n\n state.inSwitch = oldInSwitch;\n\n expect('}');\n\n return node.finishSwitchStatement(discriminant, cases);\n }\n\n // ECMA-262 13.14 The throw statement\n\n function parseThrowStatement(node) {\n var argument;\n\n expectKeyword('throw');\n\n if (hasLineTerminator) {\n throwError(Messages.NewlineAfterThrow);\n }\n\n argument = parseExpression();\n\n consumeSemicolon();\n\n return node.finishThrowStatement(argument);\n }\n\n // ECMA-262 13.15 The try statement\n\n function parseCatchClause() {\n var param, params = [], paramMap = {}, key, i, body, node = new Node();\n\n expectKeyword('catch');\n\n expect('(');\n if (match(')')) {\n throwUnexpectedToken(lookahead);\n }\n\n param = parsePattern(params);\n for (i = 0; i < params.length; i++) {\n key = '$' + params[i].value;\n if (Object.prototype.hasOwnProperty.call(paramMap, key)) {\n tolerateError(Messages.DuplicateBinding, params[i].value);\n }\n paramMap[key] = true;\n }\n\n // ECMA-262 12.14.1\n if (strict && isRestrictedWord(param.name)) {\n tolerateError(Messages.StrictCatchVariable);\n }\n\n expect(')');\n body = parseBlock();\n return node.finishCatchClause(param, body);\n }\n\n function parseTryStatement(node) {\n var block, handler = null, finalizer = null;\n\n expectKeyword('try');\n\n block = parseBlock();\n\n if (matchKeyword('catch')) {\n handler = parseCatchClause();\n }\n\n if (matchKeyword('finally')) {\n lex();\n finalizer = parseBlock();\n }\n\n if (!handler && !finalizer) {\n throwError(Messages.NoCatchOrFinally);\n }\n\n return node.finishTryStatement(block, handler, finalizer);\n }\n\n // ECMA-262 13.16 The debugger statement\n\n function parseDebuggerStatement(node) {\n expectKeyword('debugger');\n\n consumeSemicolon();\n\n return node.finishDebuggerStatement();\n }\n\n // 13 Statements\n\n function parseStatement() {\n var type = lookahead.type,\n expr,\n labeledBody,\n key,\n node;\n\n if (type === Token.EOF) {\n throwUnexpectedToken(lookahead);\n }\n\n if (type === Token.Punctuator && lookahead.value === '{') {\n return parseBlock();\n }\n isAssignmentTarget = isBindingElement = true;\n node = new Node();\n\n if (type === Token.Punctuator) {\n switch (lookahead.value) {\n case ';':\n return parseEmptyStatement(node);\n case '(':\n return parseExpressionStatement(node);\n default:\n break;\n }\n } else if (type === Token.Keyword) {\n switch (lookahead.value) {\n case 'break':\n return parseBreakStatement(node);\n case 'continue':\n return parseContinueStatement(node);\n case 'debugger':\n return parseDebuggerStatement(node);\n case 'do':\n return parseDoWhileStatement(node);\n case 'for':\n return parseForStatement(node);\n case 'function':\n return parseFunctionDeclaration(node);\n case 'if':\n return parseIfStatement(node);\n case 'return':\n return parseReturnStatement(node);\n case 'switch':\n return parseSwitchStatement(node);\n case 'throw':\n return parseThrowStatement(node);\n case 'try':\n return parseTryStatement(node);\n case 'var':\n return parseVariableStatement(node);\n case 'while':\n return parseWhileStatement(node);\n case 'with':\n return parseWithStatement(node);\n default:\n break;\n }\n }\n\n expr = parseExpression();\n\n // ECMA-262 12.12 Labelled Statements\n if ((expr.type === Syntax.Identifier) && match(':')) {\n lex();\n\n key = '$' + expr.name;\n if (Object.prototype.hasOwnProperty.call(state.labelSet, key)) {\n throwError(Messages.Redeclaration, 'Label', expr.name);\n }\n\n state.labelSet[key] = true;\n labeledBody = parseStatement();\n delete state.labelSet[key];\n return node.finishLabeledStatement(expr, labeledBody);\n }\n\n consumeSemicolon();\n\n return node.finishExpressionStatement(expr);\n }\n\n // ECMA-262 14.1 Function Definition\n\n function parseFunctionSourceElements() {\n var statement, body = [], token, directive, firstRestricted,\n oldLabelSet, oldInIteration, oldInSwitch, oldInFunctionBody, oldParenthesisCount,\n node = new Node();\n\n expect('{');\n\n while (startIndex < length) {\n if (lookahead.type !== Token.StringLiteral) {\n break;\n }\n token = lookahead;\n\n statement = parseStatementListItem();\n body.push(statement);\n if (statement.expression.type !== Syntax.Literal) {\n // this is not directive\n break;\n }\n directive = source.slice(token.start + 1, token.end - 1);\n if (directive === 'use strict') {\n strict = true;\n if (firstRestricted) {\n tolerateUnexpectedToken(firstRestricted, Messages.StrictOctalLiteral);\n }\n } else {\n if (!firstRestricted && token.octal) {\n firstRestricted = token;\n }\n }\n }\n\n oldLabelSet = state.labelSet;\n oldInIteration = state.inIteration;\n oldInSwitch = state.inSwitch;\n oldInFunctionBody = state.inFunctionBody;\n oldParenthesisCount = state.parenthesizedCount;\n\n state.labelSet = {};\n state.inIteration = false;\n state.inSwitch = false;\n state.inFunctionBody = true;\n state.parenthesizedCount = 0;\n\n while (startIndex < length) {\n if (match('}')) {\n break;\n }\n body.push(parseStatementListItem());\n }\n\n expect('}');\n\n state.labelSet = oldLabelSet;\n state.inIteration = oldInIteration;\n state.inSwitch = oldInSwitch;\n state.inFunctionBody = oldInFunctionBody;\n state.parenthesizedCount = oldParenthesisCount;\n\n return node.finishBlockStatement(body);\n }\n\n function validateParam(options, param, name) {\n var key = '$' + name;\n if (strict) {\n if (isRestrictedWord(name)) {\n options.stricted = param;\n options.message = Messages.StrictParamName;\n }\n if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {\n options.stricted = param;\n options.message = Messages.StrictParamDupe;\n }\n } else if (!options.firstRestricted) {\n if (isRestrictedWord(name)) {\n options.firstRestricted = param;\n options.message = Messages.StrictParamName;\n } else if (isStrictModeReservedWord(name)) {\n options.firstRestricted = param;\n options.message = Messages.StrictReservedWord;\n } else if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {\n options.stricted = param;\n options.message = Messages.StrictParamDupe;\n }\n }\n options.paramSet[key] = true;\n }\n\n function parseParam(options) {\n var token, param, params = [], i, def;\n\n token = lookahead;\n if (token.value === '...') {\n param = parseRestElement(params);\n validateParam(options, param.argument, param.argument.name);\n options.params.push(param);\n options.defaults.push(null);\n return false;\n }\n\n param = parsePatternWithDefault(params);\n for (i = 0; i < params.length; i++) {\n validateParam(options, params[i], params[i].value);\n }\n\n if (param.type === Syntax.AssignmentPattern) {\n def = param.right;\n param = param.left;\n ++options.defaultCount;\n }\n\n options.params.push(param);\n options.defaults.push(def);\n\n return !match(')');\n }\n\n function parseParams(firstRestricted) {\n var options;\n\n options = {\n params: [],\n defaultCount: 0,\n defaults: [],\n firstRestricted: firstRestricted\n };\n\n expect('(');\n\n if (!match(')')) {\n options.paramSet = {};\n while (startIndex < length) {\n if (!parseParam(options)) {\n break;\n }\n expect(',');\n }\n }\n\n expect(')');\n\n if (options.defaultCount === 0) {\n options.defaults = [];\n }\n\n return {\n params: options.params,\n defaults: options.defaults,\n stricted: options.stricted,\n firstRestricted: options.firstRestricted,\n message: options.message\n };\n }\n\n function parseFunctionDeclaration(node, identifierIsOptional) {\n var id = null, params = [], defaults = [], body, token, stricted, tmp, firstRestricted, message, previousStrict,\n isGenerator, previousAllowYield;\n\n previousAllowYield = state.allowYield;\n\n expectKeyword('function');\n\n isGenerator = match('*');\n if (isGenerator) {\n lex();\n }\n\n if (!identifierIsOptional || !match('(')) {\n token = lookahead;\n id = parseVariableIdentifier();\n if (strict) {\n if (isRestrictedWord(token.value)) {\n tolerateUnexpectedToken(token, Messages.StrictFunctionName);\n }\n } else {\n if (isRestrictedWord(token.value)) {\n firstRestricted = token;\n message = Messages.StrictFunctionName;\n } else if (isStrictModeReservedWord(token.value)) {\n firstRestricted = token;\n message = Messages.StrictReservedWord;\n }\n }\n }\n\n state.allowYield = !isGenerator;\n tmp = parseParams(firstRestricted);\n params = tmp.params;\n defaults = tmp.defaults;\n stricted = tmp.stricted;\n firstRestricted = tmp.firstRestricted;\n if (tmp.message) {\n message = tmp.message;\n }\n\n\n previousStrict = strict;\n body = parseFunctionSourceElements();\n if (strict && firstRestricted) {\n throwUnexpectedToken(firstRestricted, message);\n }\n if (strict && stricted) {\n tolerateUnexpectedToken(stricted, message);\n }\n\n strict = previousStrict;\n state.allowYield = previousAllowYield;\n\n return node.finishFunctionDeclaration(id, params, defaults, body, isGenerator);\n }\n\n function parseFunctionExpression() {\n var token, id = null, stricted, firstRestricted, message, tmp,\n params = [], defaults = [], body, previousStrict, node = new Node(),\n isGenerator, previousAllowYield;\n\n previousAllowYield = state.allowYield;\n\n expectKeyword('function');\n\n isGenerator = match('*');\n if (isGenerator) {\n lex();\n }\n\n state.allowYield = !isGenerator;\n if (!match('(')) {\n token = lookahead;\n id = (!strict && !isGenerator && matchKeyword('yield')) ? parseNonComputedProperty() : parseVariableIdentifier();\n if (strict) {\n if (isRestrictedWord(token.value)) {\n tolerateUnexpectedToken(token, Messages.StrictFunctionName);\n }\n } else {\n if (isRestrictedWord(token.value)) {\n firstRestricted = token;\n message = Messages.StrictFunctionName;\n } else if (isStrictModeReservedWord(token.value)) {\n firstRestricted = token;\n message = Messages.StrictReservedWord;\n }\n }\n }\n\n tmp = parseParams(firstRestricted);\n params = tmp.params;\n defaults = tmp.defaults;\n stricted = tmp.stricted;\n firstRestricted = tmp.firstRestricted;\n if (tmp.message) {\n message = tmp.message;\n }\n\n previousStrict = strict;\n body = parseFunctionSourceElements();\n if (strict && firstRestricted) {\n throwUnexpectedToken(firstRestricted, message);\n }\n if (strict && stricted) {\n tolerateUnexpectedToken(stricted, message);\n }\n strict = previousStrict;\n state.allowYield = previousAllowYield;\n\n return node.finishFunctionExpression(id, params, defaults, body, isGenerator);\n }\n\n // ECMA-262 14.5 Class Definitions\n\n function parseClassBody() {\n var classBody, token, isStatic, hasConstructor = false, body, method, computed, key;\n\n classBody = new Node();\n\n expect('{');\n body = [];\n while (!match('}')) {\n if (match(';')) {\n lex();\n } else {\n method = new Node();\n token = lookahead;\n isStatic = false;\n computed = match('[');\n if (match('*')) {\n lex();\n } else {\n key = parseObjectPropertyKey();\n if (key.name === 'static' && (lookaheadPropertyName() || match('*'))) {\n token = lookahead;\n isStatic = true;\n computed = match('[');\n if (match('*')) {\n lex();\n } else {\n key = parseObjectPropertyKey();\n }\n }\n }\n method = tryParseMethodDefinition(token, key, computed, method);\n if (method) {\n method['static'] = isStatic; // jscs:ignore requireDotNotation\n if (method.kind === 'init') {\n method.kind = 'method';\n }\n if (!isStatic) {\n if (!method.computed && (method.key.name || method.key.value.toString()) === 'constructor') {\n if (method.kind !== 'method' || !method.method || method.value.generator) {\n throwUnexpectedToken(token, Messages.ConstructorSpecialMethod);\n }\n if (hasConstructor) {\n throwUnexpectedToken(token, Messages.DuplicateConstructor);\n } else {\n hasConstructor = true;\n }\n method.kind = 'constructor';\n }\n } else {\n if (!method.computed && (method.key.name || method.key.value.toString()) === 'prototype') {\n throwUnexpectedToken(token, Messages.StaticPrototype);\n }\n }\n method.type = Syntax.MethodDefinition;\n delete method.method;\n delete method.shorthand;\n body.push(method);\n } else {\n throwUnexpectedToken(lookahead);\n }\n }\n }\n lex();\n return classBody.finishClassBody(body);\n }\n\n function parseClassDeclaration(identifierIsOptional) {\n var id = null, superClass = null, classNode = new Node(), classBody, previousStrict = strict;\n strict = true;\n\n expectKeyword('class');\n\n if (!identifierIsOptional || lookahead.type === Token.Identifier) {\n id = parseVariableIdentifier();\n }\n\n if (matchKeyword('extends')) {\n lex();\n superClass = isolateCoverGrammar(parseLeftHandSideExpressionAllowCall);\n }\n classBody = parseClassBody();\n strict = previousStrict;\n\n return classNode.finishClassDeclaration(id, superClass, classBody);\n }\n\n function parseClassExpression() {\n var id = null, superClass = null, classNode = new Node(), classBody, previousStrict = strict;\n strict = true;\n\n expectKeyword('class');\n\n if (lookahead.type === Token.Identifier) {\n id = parseVariableIdentifier();\n }\n\n if (matchKeyword('extends')) {\n lex();\n superClass = isolateCoverGrammar(parseLeftHandSideExpressionAllowCall);\n }\n classBody = parseClassBody();\n strict = previousStrict;\n\n return classNode.finishClassExpression(id, superClass, classBody);\n }\n\n // ECMA-262 15.2 Modules\n\n function parseModuleSpecifier() {\n var node = new Node();\n\n if (lookahead.type !== Token.StringLiteral) {\n throwError(Messages.InvalidModuleSpecifier);\n }\n return node.finishLiteral(lex());\n }\n\n // ECMA-262 15.2.3 Exports\n\n function parseExportSpecifier() {\n var exported, local, node = new Node(), def;\n if (matchKeyword('default')) {\n // export {default} from 'something';\n def = new Node();\n lex();\n local = def.finishIdentifier('default');\n } else {\n local = parseVariableIdentifier();\n }\n if (matchContextualKeyword('as')) {\n lex();\n exported = parseNonComputedProperty();\n }\n return node.finishExportSpecifier(local, exported);\n }\n\n function parseExportNamedDeclaration(node) {\n var declaration = null,\n isExportFromIdentifier,\n src = null, specifiers = [];\n\n // non-default export\n if (lookahead.type === Token.Keyword) {\n // covers:\n // export var f = 1;\n switch (lookahead.value) {\n case 'let':\n case 'const':\n declaration = parseLexicalDeclaration({inFor: false});\n return node.finishExportNamedDeclaration(declaration, specifiers, null);\n case 'var':\n case 'class':\n case 'function':\n declaration = parseStatementListItem();\n return node.finishExportNamedDeclaration(declaration, specifiers, null);\n }\n }\n\n expect('{');\n while (!match('}')) {\n isExportFromIdentifier = isExportFromIdentifier || matchKeyword('default');\n specifiers.push(parseExportSpecifier());\n if (!match('}')) {\n expect(',');\n if (match('}')) {\n break;\n }\n }\n }\n expect('}');\n\n if (matchContextualKeyword('from')) {\n // covering:\n // export {default} from 'foo';\n // export {foo} from 'foo';\n lex();\n src = parseModuleSpecifier();\n consumeSemicolon();\n } else if (isExportFromIdentifier) {\n // covering:\n // export {default}; // missing fromClause\n throwError(lookahead.value ?\n Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value);\n } else {\n // cover\n // export {foo};\n consumeSemicolon();\n }\n return node.finishExportNamedDeclaration(declaration, specifiers, src);\n }\n\n function parseExportDefaultDeclaration(node) {\n var declaration = null,\n expression = null;\n\n // covers:\n // export default ...\n expectKeyword('default');\n\n if (matchKeyword('function')) {\n // covers:\n // export default function foo () {}\n // export default function () {}\n declaration = parseFunctionDeclaration(new Node(), true);\n return node.finishExportDefaultDeclaration(declaration);\n }\n if (matchKeyword('class')) {\n declaration = parseClassDeclaration(true);\n return node.finishExportDefaultDeclaration(declaration);\n }\n\n if (matchContextualKeyword('from')) {\n throwError(Messages.UnexpectedToken, lookahead.value);\n }\n\n // covers:\n // export default {};\n // export default [];\n // export default (1 + 2);\n if (match('{')) {\n expression = parseObjectInitializer();\n } else if (match('[')) {\n expression = parseArrayInitializer();\n } else {\n expression = parseAssignmentExpression();\n }\n consumeSemicolon();\n return node.finishExportDefaultDeclaration(expression);\n }\n\n function parseExportAllDeclaration(node) {\n var src;\n\n // covers:\n // export * from 'foo';\n expect('*');\n if (!matchContextualKeyword('from')) {\n throwError(lookahead.value ?\n Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value);\n }\n lex();\n src = parseModuleSpecifier();\n consumeSemicolon();\n\n return node.finishExportAllDeclaration(src);\n }\n\n function parseExportDeclaration() {\n var node = new Node();\n if (state.inFunctionBody) {\n throwError(Messages.IllegalExportDeclaration);\n }\n\n expectKeyword('export');\n\n if (matchKeyword('default')) {\n return parseExportDefaultDeclaration(node);\n }\n if (match('*')) {\n return parseExportAllDeclaration(node);\n }\n return parseExportNamedDeclaration(node);\n }\n\n // ECMA-262 15.2.2 Imports\n\n function parseImportSpecifier() {\n // import {} ...;\n var local, imported, node = new Node();\n\n imported = parseNonComputedProperty();\n if (matchContextualKeyword('as')) {\n lex();\n local = parseVariableIdentifier();\n }\n\n return node.finishImportSpecifier(local, imported);\n }\n\n function parseNamedImports() {\n var specifiers = [];\n // {foo, bar as bas}\n expect('{');\n while (!match('}')) {\n specifiers.push(parseImportSpecifier());\n if (!match('}')) {\n expect(',');\n if (match('}')) {\n break;\n }\n }\n }\n expect('}');\n return specifiers;\n }\n\n function parseImportDefaultSpecifier() {\n // import ...;\n var local, node = new Node();\n\n local = parseNonComputedProperty();\n\n return node.finishImportDefaultSpecifier(local);\n }\n\n function parseImportNamespaceSpecifier() {\n // import <* as foo> ...;\n var local, node = new Node();\n\n expect('*');\n if (!matchContextualKeyword('as')) {\n throwError(Messages.NoAsAfterImportNamespace);\n }\n lex();\n local = parseNonComputedProperty();\n\n return node.finishImportNamespaceSpecifier(local);\n }\n\n function parseImportDeclaration() {\n var specifiers = [], src, node = new Node();\n\n if (state.inFunctionBody) {\n throwError(Messages.IllegalImportDeclaration);\n }\n\n expectKeyword('import');\n\n if (lookahead.type === Token.StringLiteral) {\n // import 'foo';\n src = parseModuleSpecifier();\n } else {\n\n if (match('{')) {\n // import {bar}\n specifiers = specifiers.concat(parseNamedImports());\n } else if (match('*')) {\n // import * as foo\n specifiers.push(parseImportNamespaceSpecifier());\n } else if (isIdentifierName(lookahead) && !matchKeyword('default')) {\n // import foo\n specifiers.push(parseImportDefaultSpecifier());\n if (match(',')) {\n lex();\n if (match('*')) {\n // import foo, * as foo\n specifiers.push(parseImportNamespaceSpecifier());\n } else if (match('{')) {\n // import foo, {bar}\n specifiers = specifiers.concat(parseNamedImports());\n } else {\n throwUnexpectedToken(lookahead);\n }\n }\n } else {\n throwUnexpectedToken(lex());\n }\n\n if (!matchContextualKeyword('from')) {\n throwError(lookahead.value ?\n Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value);\n }\n lex();\n src = parseModuleSpecifier();\n }\n\n consumeSemicolon();\n return node.finishImportDeclaration(specifiers, src);\n }\n\n // ECMA-262 15.1 Scripts\n\n function parseScriptBody() {\n var statement, body = [], token, directive, firstRestricted;\n\n while (startIndex < length) {\n token = lookahead;\n if (token.type !== Token.StringLiteral) {\n break;\n }\n\n statement = parseStatementListItem();\n body.push(statement);\n if (statement.expression.type !== Syntax.Literal) {\n // this is not directive\n break;\n }\n directive = source.slice(token.start + 1, token.end - 1);\n if (directive === 'use strict') {\n strict = true;\n if (firstRestricted) {\n tolerateUnexpectedToken(firstRestricted, Messages.StrictOctalLiteral);\n }\n } else {\n if (!firstRestricted && token.octal) {\n firstRestricted = token;\n }\n }\n }\n\n while (startIndex < length) {\n statement = parseStatementListItem();\n /* istanbul ignore if */\n if (typeof statement === 'undefined') {\n break;\n }\n body.push(statement);\n }\n return body;\n }\n\n function parseProgram() {\n var body, node;\n\n peek();\n node = new Node();\n\n body = parseScriptBody();\n return node.finishProgram(body, state.sourceType);\n }\n\n function filterTokenLocation() {\n var i, entry, token, tokens = [];\n\n for (i = 0; i < extra.tokens.length; ++i) {\n entry = extra.tokens[i];\n token = {\n type: entry.type,\n value: entry.value\n };\n if (entry.regex) {\n token.regex = {\n pattern: entry.regex.pattern,\n flags: entry.regex.flags\n };\n }\n if (extra.range) {\n token.range = entry.range;\n }\n if (extra.loc) {\n token.loc = entry.loc;\n }\n tokens.push(token);\n }\n\n extra.tokens = tokens;\n }\n\n function tokenize(code, options, delegate) {\n var toString,\n tokens;\n\n toString = String;\n if (typeof code !== 'string' && !(code instanceof String)) {\n code = toString(code);\n }\n\n source = code;\n index = 0;\n lineNumber = (source.length > 0) ? 1 : 0;\n lineStart = 0;\n startIndex = index;\n startLineNumber = lineNumber;\n startLineStart = lineStart;\n length = source.length;\n lookahead = null;\n state = {\n allowIn: true,\n allowYield: true,\n labelSet: {},\n inFunctionBody: false,\n inIteration: false,\n inSwitch: false,\n lastCommentStart: -1,\n curlyStack: []\n };\n\n extra = {};\n\n // Options matching.\n options = options || {};\n\n // Of course we collect tokens here.\n options.tokens = true;\n extra.tokens = [];\n extra.tokenValues = [];\n extra.tokenize = true;\n extra.delegate = delegate;\n\n // The following two fields are necessary to compute the Regex tokens.\n extra.openParenToken = -1;\n extra.openCurlyToken = -1;\n\n extra.range = (typeof options.range === 'boolean') && options.range;\n extra.loc = (typeof options.loc === 'boolean') && options.loc;\n\n if (typeof options.comment === 'boolean' && options.comment) {\n extra.comments = [];\n }\n if (typeof options.tolerant === 'boolean' && options.tolerant) {\n extra.errors = [];\n }\n\n try {\n peek();\n if (lookahead.type === Token.EOF) {\n return extra.tokens;\n }\n\n lex();\n while (lookahead.type !== Token.EOF) {\n try {\n lex();\n } catch (lexError) {\n if (extra.errors) {\n recordError(lexError);\n // We have to break on the first error\n // to avoid infinite loops.\n break;\n } else {\n throw lexError;\n }\n }\n }\n\n tokens = extra.tokens;\n if (typeof extra.errors !== 'undefined') {\n tokens.errors = extra.errors;\n }\n } catch (e) {\n throw e;\n } finally {\n extra = {};\n }\n return tokens;\n }\n\n function parse(code, options) {\n var program, toString;\n\n toString = String;\n if (typeof code !== 'string' && !(code instanceof String)) {\n code = toString(code);\n }\n\n source = code;\n index = 0;\n lineNumber = (source.length > 0) ? 1 : 0;\n lineStart = 0;\n startIndex = index;\n startLineNumber = lineNumber;\n startLineStart = lineStart;\n length = source.length;\n lookahead = null;\n state = {\n allowIn: true,\n allowYield: true,\n labelSet: {},\n inFunctionBody: false,\n inIteration: false,\n inSwitch: false,\n lastCommentStart: -1,\n curlyStack: [],\n sourceType: 'script'\n };\n strict = false;\n\n extra = {};\n if (typeof options !== 'undefined') {\n extra.range = (typeof options.range === 'boolean') && options.range;\n extra.loc = (typeof options.loc === 'boolean') && options.loc;\n extra.attachComment = (typeof options.attachComment === 'boolean') && options.attachComment;\n\n if (extra.loc && options.source !== null && options.source !== undefined) {\n extra.source = toString(options.source);\n }\n\n if (typeof options.tokens === 'boolean' && options.tokens) {\n extra.tokens = [];\n }\n if (typeof options.comment === 'boolean' && options.comment) {\n extra.comments = [];\n }\n if (typeof options.tolerant === 'boolean' && options.tolerant) {\n extra.errors = [];\n }\n if (extra.attachComment) {\n extra.range = true;\n extra.comments = [];\n extra.bottomRightStack = [];\n extra.trailingComments = [];\n extra.leadingComments = [];\n }\n if (options.sourceType === 'module') {\n // very restrictive condition for now\n state.sourceType = options.sourceType;\n strict = true;\n }\n }\n\n try {\n program = parseProgram();\n if (typeof extra.comments !== 'undefined') {\n program.comments = extra.comments;\n }\n if (typeof extra.tokens !== 'undefined') {\n filterTokenLocation();\n program.tokens = extra.tokens;\n }\n if (typeof extra.errors !== 'undefined') {\n program.errors = extra.errors;\n }\n } catch (e) {\n throw e;\n } finally {\n extra = {};\n }\n\n return program;\n }\n\n // Sync with *.json manifests.\n exports.version = '2.7.1';\n\n exports.tokenize = tokenize;\n\n exports.parse = parse;\n\n // Deep copy.\n /* istanbul ignore next */\n exports.Syntax = (function () {\n var name, types = {};\n\n if (typeof Object.create === 'function') {\n types = Object.create(null);\n }\n\n for (name in Syntax) {\n if (Syntax.hasOwnProperty(name)) {\n types[name] = Syntax[name];\n }\n }\n\n if (typeof Object.freeze === 'function') {\n Object.freeze(types);\n }\n\n return types;\n }());\n\n}));\n/* vim: set sw=4 ts=4 et tw=80 : */\n", "// 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\nfunction EventEmitter() {\n this._events = this._events || {};\n this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n if (!isNumber(n) || n < 0 || isNaN(n))\n throw TypeError('n must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n var er, handler, len, args, i, listeners;\n\n if (!this._events)\n this._events = {};\n\n // If there is no 'error' event listener then throw.\n if (type === 'error') {\n if (!this._events.error ||\n (isObject(this._events.error) && !this._events.error.length)) {\n er = arguments[1];\n if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n }\n throw TypeError('Uncaught, unspecified \"error\" event.');\n }\n }\n\n handler = this._events[type];\n\n if (isUndefined(handler))\n return false;\n\n if (isFunction(handler)) {\n switch (arguments.length) {\n // fast cases\n case 1:\n handler.call(this);\n break;\n case 2:\n handler.call(this, arguments[1]);\n break;\n case 3:\n handler.call(this, arguments[1], arguments[2]);\n break;\n // slower\n default:\n args = Array.prototype.slice.call(arguments, 1);\n handler.apply(this, args);\n }\n } else if (isObject(handler)) {\n args = Array.prototype.slice.call(arguments, 1);\n listeners = handler.slice();\n len = listeners.length;\n for (i = 0; i < len; i++)\n listeners[i].apply(this, args);\n }\n\n return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n var m;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events)\n this._events = {};\n\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (this._events.newListener)\n this.emit('newListener', type,\n isFunction(listener.listener) ?\n listener.listener : listener);\n\n if (!this._events[type])\n // Optimize the case of one listener. Don't need the extra array object.\n this._events[type] = listener;\n else if (isObject(this._events[type]))\n // If we've already got an array, just append.\n this._events[type].push(listener);\n else\n // Adding the second element, need to change to array.\n this._events[type] = [this._events[type], listener];\n\n // Check for listener leak\n if (isObject(this._events[type]) && !this._events[type].warned) {\n if (!isUndefined(this._maxListeners)) {\n m = this._maxListeners;\n } else {\n m = EventEmitter.defaultMaxListeners;\n }\n\n if (m && m > 0 && this._events[type].length > m) {\n this._events[type].warned = true;\n console.error('(node) warning: possible EventEmitter memory ' +\n 'leak detected. %d listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit.',\n this._events[type].length);\n if (typeof console.trace === 'function') {\n // not supported in IE 10\n console.trace();\n }\n }\n }\n\n return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n var fired = false;\n\n function g() {\n this.removeListener(type, g);\n\n if (!fired) {\n fired = true;\n listener.apply(this, arguments);\n }\n }\n\n g.listener = listener;\n this.on(type, g);\n\n return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n var list, position, length, i;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events || !this._events[type])\n return this;\n\n list = this._events[type];\n length = list.length;\n position = -1;\n\n if (list === listener ||\n (isFunction(list.listener) && list.listener === listener)) {\n delete this._events[type];\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n\n } else if (isObject(list)) {\n for (i = length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list.length = 0;\n delete this._events[type];\n } else {\n list.splice(position, 1);\n }\n\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n }\n\n return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n var key, listeners;\n\n if (!this._events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!this._events.removeListener) {\n if (arguments.length === 0)\n this._events = {};\n else if (this._events[type])\n delete this._events[type];\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n for (key in this._events) {\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = {};\n return this;\n }\n\n listeners = this._events[type];\n\n if (isFunction(listeners)) {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n while (listeners.length)\n this.removeListener(type, listeners[listeners.length - 1]);\n }\n delete this._events[type];\n\n return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n var ret;\n if (!this._events || !this._events[type])\n ret = [];\n else if (isFunction(this._events[type]))\n ret = [this._events[type]];\n else\n ret = this._events[type].slice();\n return ret;\n};\n\nEventEmitter.prototype.listenerCount = function(type) {\n if (this._events) {\n var evlistener = this._events[type];\n\n if (isFunction(evlistener))\n return 1;\n else if (evlistener)\n return evlistener.length;\n }\n return 0;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n return emitter.listenerCount(type);\n};\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n", "var http = require('http');\n\nvar https = module.exports;\n\nfor (var key in http) {\n if (http.hasOwnProperty(key)) https[key] = http[key];\n};\n\nhttps.request = function (params, cb) {\n if (!params) params = {};\n params.scheme = 'https';\n params.protocol = 'https:';\n return http.request.call(this, params, cb);\n}\n", "exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n", diff --git a/dist/ref-parser.min.js b/dist/ref-parser.min.js index aff63727..3ed79b7c 100644 --- a/dist/ref-parser.min.js +++ b/dist/ref-parser.min.js @@ -5,24 +5,24 @@ * @link https://github.com/BigstickCarpet/json-schema-ref-parser * @license MIT */ -"use strict";function bundle(e,r){util.debug("Bundling $ref pointers in %s",e._basePath),remap(e.$refs,r),dereference(e._basePath,e.$refs,r)}function remap(e,r){var t=[];Object.keys(e._$refs).forEach(function(f){var a=e._$refs[f];crawl(a.value,a.path+"#",e,t,r)});for(var f=0;f0&&f.splice(0,0,f.splice(o,1)[0]),f.forEach(function(f){var o=Pointer.join(r,f),l=Pointer.join(t,f),h=e[f];$Ref.is$Ref(h)?i.some(function(r){return r.parent===e&&r.key===f})||inventory$Ref(e,f,r,l,i,a,n):crawl(h,o,l,i,a,n)})}}function inventory$Ref(e,r,t,i,a,n,f){var o=e[r],l=url.resolve(t,o.$ref),h=n._resolve(l,f),u=Pointer.parse(i).length,s=util.path.stripHash(h.path),c=util.path.getHash(h.path),p=s!==n._basePath,d=Object.keys(o).length>1;a.push({$ref:o,parent:e,key:r,pathFromRoot:i,depth:u,file:s,hash:c,value:h.value,circular:h.circular,extended:d,external:p}),crawl(h.value,h.path,i,a,n,f)}function remap(e){e.sort(function(e,r){return e.file!==r.file?e.file1){var n={};return Object.keys(e).forEach(function(r){"$ref"!==r&&(n[r]=e[r])}),Object.keys(r).forEach(function(e){e in n||(n[e]=r[e])}),n}return r}function foundCircularReference(e,r,n){if(r.circular=!0,!n.$refs.circular)throw ono.reference("Circular $ref pointer found at %s",e);return!0}var $Ref=require("./ref"),Pointer=require("./pointer"),util=require("./util"),ono=require("ono"),url=require("url");module.exports=dereference; +},{"./pointer":8,"./ref":11,"./util":14,"url":90}],2:[function(require,module,exports){ +"use strict";function dereference(e,r){util.debug("Dereferencing $ref pointers in %s",e.$refs._basePath),e.$refs.circular=!1,crawl(e.schema,e.$refs._basePath,"#",[],e.$refs,r)}function crawl(e,r,n,i,u,f){var c=!1;return e&&"object"==typeof e&&(i.push(e),Object.keys(e).forEach(function(o){var a=Pointer.join(r,o),l=Pointer.join(n,o),t=e[o],s=!1;if($Ref.isAllowed$Ref(t,f)){var $=dereference$Ref(t,a,l,i,u,f);s=$.circular,e[o]=$.value}else s=-1===i.indexOf(t)?crawl(t,a,l,i,u,f):foundCircularReference(a,u,f);c=c||s}),i.pop()),c}function dereference$Ref(e,r,n,i,u,f){util.debug('Dereferencing $ref pointer "%s" at %s',e.$ref,r);var c=url.resolve(r,e.$ref),o=u._resolve(c,f),a=o.circular,l=a||-1!==i.indexOf(o.value);l&&foundCircularReference(r,u,f);var t=util.dereference(e,o.value);return l||(l=crawl(t,o.path,n,i,u,f)),l&&!a&&"ignore"===f.$refs.circular&&(t=e),a&&(t.$ref=n),{circular:l,value:t}}function foundCircularReference(e,r,n){if(r.circular=!0,!n.$refs.circular)throw ono.reference("Circular $ref pointer found at %s",e);return!0}var $Ref=require("./ref"),Pointer=require("./pointer"),util=require("./util"),ono=require("ono"),url=require("url");module.exports=dereference; -},{"./pointer":7,"./ref":10,"./util":13,"ono":66,"url":89}],3:[function(require,module,exports){ +},{"./pointer":8,"./ref":11,"./util":14,"ono":67,"url":90}],3:[function(require,module,exports){ (function (Buffer){ "use strict";function download(t,e,o){return new Promise(function(r,n){t=url.parse(t),o=o||[],o.push(t.href),get(t,e).then(function(s){if(s.statusCode>=400)throw ono({status:s.statusCode},"HTTP ERROR %d",s.statusCode);if(s.statusCode>=300)if(o.length>e.http.redirects)n(ono({status:s.statusCode},"Error downloading %s. \nToo many redirects: \n %s",o[0],o.join(" \n ")));else{if(!s.headers.location)throw ono({status:s.statusCode},"HTTP %d redirect with no location header",s.statusCode);util.debug("HTTP %d redirect %s -> %s",s.statusCode,t.href,s.headers.location);var u=url.resolve(t,s.headers.location);download(u,e,o).then(r,n)}else{if(204===s.statusCode&&!e.allow.empty)throw ono({status:204},"HTTP 204 (No Content)");r(s.body||new Buffer(0))}})["catch"](function(e){n(ono(e,"Error downloading",t.href))})})}function get(t,e){return new Promise(function(o,r){util.debug("GET",t.href);var n="https:"===t.protocol?https:http,s=n.get({hostname:t.hostname,port:t.port,path:t.path,auth:t.auth,headers:e.http.headers,withCredentials:e.http.withCredentials});"function"==typeof s.setTimeout&&s.setTimeout(e.http.timeout),s.on("timeout",function(){s.abort()}),s.on("error",r),s.once("response",function(t){t.body=new Buffer(0),t.on("data",function(e){t.body=Buffer.concat([t.body,new Buffer(e)])}),t.on("error",r),t.on("end",function(){o(t)})})})}var http=require("http"),https=require("https"),url=require("url"),util=require("./util"),Promise=require("./promise"),ono=require("ono");module.exports=download; }).call(this,require("buffer").Buffer) -},{"./promise":8,"./util":13,"buffer":18,"http":84,"https":28,"ono":66,"url":89}],4:[function(require,module,exports){ +},{"./promise":9,"./util":14,"buffer":19,"http":85,"https":29,"ono":67,"url":90}],4:[function(require,module,exports){ (function (Buffer){ -"use strict";function $RefParser(){this.schema=null,this.$refs=new $Refs,this._basePath=""}function normalizeArgs(e){var r=e[1],t=e[2];return"function"==typeof r&&(t=r,r=void 0),r instanceof Options||(r=new Options(r)),{schema:e[0],options:r,callback:t}}var Promise=require("./promise"),Options=require("./options"),$Refs=require("./refs"),$Ref=require("./ref"),read=require("./read"),resolve=require("./resolve"),bundle=require("./bundle"),dereference=require("./dereference"),util=require("./util"),url=require("url"),maybe=require("call-me-maybe"),ono=require("ono");module.exports=$RefParser,module.exports.YAML=require("./yaml"),$RefParser.parse=function(e,r,t){var s=this;return(new s).parse(e,r,t)},$RefParser.prototype.parse=function(e,r,t){var s=normalizeArgs(arguments);if(s.schema&&"object"==typeof s.schema){this.schema=s.schema,this._basePath="";var a=new $Ref(this.$refs,this._basePath);return a.setValue(this.schema,s.options),maybe(s.callback,Promise.resolve(this.schema))}if(!s.schema||"string"!=typeof s.schema){var n=ono("Expected a file path, URL, or object. Got %s",s.schema);return maybe(s.callback,Promise.reject(n))}var o=this;return s.schema=util.path.localPathToUrl(s.schema),s.schema=url.resolve(util.path.cwd(),s.schema),this._basePath=util.path.stripHash(s.schema),read(s.schema,this.$refs,s.options).then(function(e){var r=e.$ref.value;if(!r||"object"!=typeof r||r instanceof Buffer)throw ono.syntax('"%s" is not a valid JSON Schema',o._basePath);return o.schema=r,maybe(s.callback,Promise.resolve(o.schema))})["catch"](function(e){return maybe(s.callback,Promise.reject(e))})},$RefParser.resolve=function(e,r,t){var s=this;return(new s).resolve(e,r,t)},$RefParser.prototype.resolve=function(e,r,t){var s=this,a=normalizeArgs(arguments);return this.parse(a.schema,a.options).then(function(){return resolve(s,a.options)}).then(function(){return maybe(a.callback,Promise.resolve(s.$refs))})["catch"](function(e){return maybe(a.callback,Promise.reject(e))})},$RefParser.bundle=function(e,r,t){var s=this;return(new s).bundle(e,r,t)},$RefParser.prototype.bundle=function(e,r,t){var s=this,a=normalizeArgs(arguments);return this.resolve(a.schema,a.options).then(function(){return bundle(s,a.options),maybe(a.callback,Promise.resolve(s.schema))})["catch"](function(e){return maybe(a.callback,Promise.reject(e))})},$RefParser.dereference=function(e,r,t){var s=this;return(new s).dereference(e,r,t)},$RefParser.prototype.dereference=function(e,r,t){var s=this,a=normalizeArgs(arguments);return this.resolve(a.schema,a.options).then(function(){return dereference(s,a.options),maybe(a.callback,Promise.resolve(s.schema))})["catch"](function(e){return maybe(a.callback,Promise.reject(e))})}; +"use strict";function $RefParser(){this.schema=null,this.$refs=new $Refs}function normalizeArgs(e){var r=e[1],s=e[2];return"function"==typeof r&&(s=r,r=void 0),r instanceof Options||(r=new Options(r)),{schema:e[0],options:r,callback:s}}var Promise=require("./promise"),Options=require("./options"),$Refs=require("./refs"),$Ref=require("./ref"),read=require("./read"),resolve=require("./resolve"),bundle=require("./bundle"),dereference=require("./dereference"),util=require("./util"),url=require("url"),maybe=require("call-me-maybe"),ono=require("ono");module.exports=$RefParser,module.exports.YAML=require("./yaml"),$RefParser.parse=function(e,r,s){var t=this;return(new t).parse(e,r,s)},$RefParser.prototype.parse=function(e,r,s){var t=normalizeArgs(arguments);if(t.schema&&"object"==typeof t.schema){this.schema=t.schema,this.$refs._basePath="";var a=new $Ref(this.$refs,this.$refs._basePath);return a.setValue(this.schema,t.options),maybe(t.callback,Promise.resolve(this.schema))}if(!t.schema||"string"!=typeof t.schema){var n=ono("Expected a file path, URL, or object. Got %s",t.schema);return maybe(t.callback,Promise.reject(n))}var o=this;return t.schema=util.path.localPathToUrl(t.schema),t.schema=url.resolve(util.path.cwd(),t.schema),this.$refs._basePath=util.path.stripHash(t.schema),read(t.schema,this.$refs,t.options).then(function(e){var r=e.$ref.value;if(!r||"object"!=typeof r||r instanceof Buffer)throw ono.syntax('"%s" is not a valid JSON Schema',o.$refs._basePath);return o.schema=r,maybe(t.callback,Promise.resolve(o.schema))})["catch"](function(e){return maybe(t.callback,Promise.reject(e))})},$RefParser.resolve=function(e,r,s){var t=this;return(new t).resolve(e,r,s)},$RefParser.prototype.resolve=function(e,r,s){var t=this,a=normalizeArgs(arguments);return this.parse(a.schema,a.options).then(function(){return resolve(t,a.options)}).then(function(){return maybe(a.callback,Promise.resolve(t.$refs))})["catch"](function(e){return maybe(a.callback,Promise.reject(e))})},$RefParser.bundle=function(e,r,s){var t=this;return(new t).bundle(e,r,s)},$RefParser.prototype.bundle=function(e,r,s){var t=this,a=normalizeArgs(arguments);return this.resolve(a.schema,a.options).then(function(){return bundle(t,a.options),maybe(a.callback,Promise.resolve(t.schema))})["catch"](function(e){return maybe(a.callback,Promise.reject(e))})},$RefParser.dereference=function(e,r,s){var t=this;return(new t).dereference(e,r,s)},$RefParser.prototype.dereference=function(e,r,s){var t=this,a=normalizeArgs(arguments);return this.resolve(a.schema,a.options).then(function(){return dereference(t,a.options),maybe(a.callback,Promise.resolve(t.schema))})["catch"](function(e){return maybe(a.callback,Promise.reject(e))})}; }).call(this,require("buffer").Buffer) -},{"./bundle":1,"./dereference":2,"./options":5,"./promise":8,"./read":9,"./ref":10,"./refs":11,"./resolve":12,"./util":13,"./yaml":14,"buffer":18,"call-me-maybe":21,"ono":66,"url":89}],5:[function(require,module,exports){ +},{"./bundle":1,"./dereference":2,"./options":5,"./promise":9,"./read":10,"./ref":11,"./refs":12,"./resolve":13,"./util":14,"./yaml":15,"buffer":19,"call-me-maybe":22,"ono":67,"url":90}],5:[function(require,module,exports){ "use strict";function $RefParserOptions(e){this.allow={json:!0,yaml:!0,empty:!0,unknown:!0},this.$refs={internal:!0,external:!0,circular:!0},this.cache={fs:60,http:300,https:300},this.http={headers:{},timeout:5e3,redirects:5,withCredentials:!1},merge(e,this)}function merge(e,t){if(e)for(var r=Object.keys(e),s=0;s=0?r.substr(e):"#"},exports.stripHash=function(r){var e=r.indexOf("#");return e>=0&&(r=r.substr(0,e)),r},exports.extname=function(r){var e=r.lastIndexOf(".");return e>=0?r.substr(e).toLowerCase():""}; + +}).call(this,require('_process')) + +},{"_process":69}],8:[function(require,module,exports){ +"use strict";function Pointer(e,r){this.$ref=e,this.path=r,this.value=void 0,this.circular=!1}function resolveIf$Ref(e,r){if($Ref.isAllowed$Ref(e.value,r)){var t=url.resolve(e.path,e.value.$ref);if(t!==e.path){var i=e.$ref.$refs._resolve(t);return 1===Object.keys(e.value).length?(e.$ref=i.$ref,e.path=i.path,e.value=i.value):e.value=util.dereference(e.value,i.value),!0}e.circular=!0}}function setValue(e,r,t){if(!e.value||"object"!=typeof e.value)throw ono.syntax('Error assigning $ref pointer "%s". \nCannot set "%s" of a non-object.',e.path,r);return"-"===r&&Array.isArray(e.value)?e.value.push(t):e.value[r]=t,t}module.exports=Pointer;var $Ref=require("./ref"),util=require("./util"),url=require("url"),ono=require("ono"),slashes=/\//g,tildes=/~/g,escapedSlash=/~1/g,escapedTilde=/~0/g;Pointer.prototype.resolve=function(e,r){var t=Pointer.parse(this.path);this.value=e;for(var i=0;i0){var r=Date.now()+1e3*i;this.expires=new Date(r)}},$Ref.prototype.exists=function(e){try{return this.resolve(e),!0}catch(t){return!1}},$Ref.prototype.get=function(e,t){return this.resolve(e,t).value},$Ref.prototype.resolve=function(e,t){var i=new Pointer(this,e);return i.resolve(this.value,t)},$Ref.prototype.set=function(e,t,i){var r=new Pointer(this,e);this.value=r.set(this.value,t,i)},$Ref.is$Ref=function(e){return e&&"object"==typeof e&&"string"==typeof e.$ref&&e.$ref.length>0},$Ref.isExternal$Ref=function(e){return $Ref.is$Ref(e)&&"#"!==e.$ref[0]},$Ref.isAllowed$Ref=function(e,t){if($Ref.is$Ref(e))if("#"===e.$ref[0]){if(t.$refs.internal)return!0}else if(t.$refs.external)return!0}; +},{"./download":3,"./parse":6,"./promise":9,"./ref":11,"./util":14,"_process":69,"fs":18,"ono":67,"url":90}],11:[function(require,module,exports){ +"use strict";function $Ref(e,t){t=util.path.stripHash(t),e._$refs[t]=this,this.$refs=e,this.path=t,this.pathType=void 0,this.value=void 0,this.expires=void 0}module.exports=$Ref;var Pointer=require("./pointer"),util=require("./util");$Ref.prototype.isExpired=function(){return!!(this.expires&&this.expires<=new Date)},$Ref.prototype.expire=function(){this.expires=new Date},$Ref.prototype.setValue=function(e,t){this.value=e;var i=t.cache[this.pathType];if(i>0){var r=Date.now()+1e3*i;this.expires=new Date(r)}},$Ref.prototype.exists=function(e){try{return this.resolve(e),!0}catch(t){return!1}},$Ref.prototype.get=function(e,t){return this.resolve(e,t).value},$Ref.prototype.resolve=function(e,t){var i=new Pointer(this,e);return i.resolve(this.value,t)},$Ref.prototype.set=function(e,t,i){var r=new Pointer(this,e);this.value=r.set(this.value,t,i)},$Ref.is$Ref=function(e){return e&&"object"==typeof e&&"string"==typeof e.$ref&&e.$ref.length>0},$Ref.isExternal$Ref=function(e){return $Ref.is$Ref(e)&&"#"!==e.$ref[0]},$Ref.isAllowed$Ref=function(e,t){if($Ref.is$Ref(e))if("#"===e.$ref[0]){if(t.$refs.internal)return!0}else if(t.$refs.external)return!0}; -},{"./pointer":7,"./util":13}],11:[function(require,module,exports){ -"use strict";function $Refs(){this.circular=!1,this._$refs={}}function getPaths(e,t){var r=Object.keys(e);return t=Array.isArray(t[0])?t[0]:Array.prototype.slice.call(t),t.length>0&&t[0]&&(r=r.filter(function(r){return-1!==t.indexOf(e[r].pathType)})),r.map(function(t){return{encoded:t,decoded:"fs"===e[t].pathType?util.path.urlToLocalPath(t,!0):t}})}var Options=require("./options"),util=require("./util"),ono=require("ono");module.exports=$Refs,$Refs.prototype.paths=function(e){var t=getPaths(this._$refs,arguments);return t.map(function(e){return e.decoded})},$Refs.prototype.values=function(e){var t=this._$refs,r=getPaths(t,arguments);return r.reduce(function(e,r){return e[r.decoded]=t[r.encoded].value,e},{})},$Refs.prototype.toJSON=$Refs.prototype.values,$Refs.prototype.isExpired=function(e){var t=this._get$Ref(e);return void 0===t||t.isExpired()},$Refs.prototype.expire=function(e){var t=this._get$Ref(e);t&&t.expire()},$Refs.prototype.exists=function(e){try{return this._resolve(e),!0}catch(t){return!1}},$Refs.prototype.get=function(e,t){return this._resolve(e,t).value},$Refs.prototype.set=function(e,t,r){var o=util.path.stripHash(e),s=this._$refs[o];if(!s)throw ono('Error resolving $ref pointer "%s". \n"%s" not found.',e,o);r=new Options(r),s.set(e,t,r)},$Refs.prototype._resolve=function(e,t){var r=util.path.stripHash(e),o=this._$refs[r];if(!o)throw ono('Error resolving $ref pointer "%s". \n"%s" not found.',e,r);return t=new Options(t),o.resolve(e,t)},$Refs.prototype._get$Ref=function(e){var t=util.path.stripHash(e);return this._$refs[t]}; +},{"./pointer":8,"./util":14}],12:[function(require,module,exports){ +"use strict";function $Refs(){this.circular=!1,this._basePath="",this._$refs={}}function getPaths(e,t){var r=Object.keys(e);return t=Array.isArray(t[0])?t[0]:Array.prototype.slice.call(t),t.length>0&&t[0]&&(r=r.filter(function(r){return-1!==t.indexOf(e[r].pathType)})),r.map(function(t){return{encoded:t,decoded:"fs"===e[t].pathType?util.path.urlToLocalPath(t,!0):t}})}var Options=require("./options"),util=require("./util"),url=require("url"),ono=require("ono");module.exports=$Refs,$Refs.prototype.paths=function(e){var t=getPaths(this._$refs,arguments);return t.map(function(e){return e.decoded})},$Refs.prototype.values=function(e){var t=this._$refs,r=getPaths(t,arguments);return r.reduce(function(e,r){return e[r.decoded]=t[r.encoded].value,e},{})},$Refs.prototype.toJSON=$Refs.prototype.values,$Refs.prototype.isExpired=function(e){var t=this._get$Ref(e);return void 0===t||t.isExpired()},$Refs.prototype.expire=function(e){var t=this._get$Ref(e);t&&t.expire()},$Refs.prototype.exists=function(e){try{return this._resolve(e),!0}catch(t){return!1}},$Refs.prototype.get=function(e,t){return this._resolve(e,t).value},$Refs.prototype.set=function(e,t,r){e=url.resolve(this._basePath,e);var o=util.path.stripHash(e),s=this._$refs[o];if(!s)throw ono('Error resolving $ref pointer "%s". \n"%s" not found.',e,o);r=new Options(r),s.set(e,t,r)},$Refs.prototype._resolve=function(e,t){e=url.resolve(this._basePath,e);var r=util.path.stripHash(e),o=this._$refs[r];if(!o)throw ono('Error resolving $ref pointer "%s". \n"%s" not found.',e,r);return t=new Options(t),o.resolve(e,t)},$Refs.prototype._get$Ref=function(e){e=url.resolve(this._basePath,e);var t=util.path.stripHash(e);return this._$refs[t]}; -},{"./options":5,"./util":13,"ono":66}],12:[function(require,module,exports){ -"use strict";function resolve(e,r){try{if(!r.$refs.external)return Promise.resolve();util.debug("Resolving $ref pointers in %s",e._basePath);var i=crawl(e.schema,e._basePath+"#","#",e.$refs,r);return Promise.all(i)}catch(t){return Promise.reject(t)}}function crawl(e,r,i,t,o){var n=[];if(e&&"object"==typeof e){var a=Object.keys(e),s=a.indexOf("definitions");s>0&&a.splice(0,0,a.splice(s,1)[0]),a.forEach(function(a){var s=Pointer.join(r,a),u=Pointer.join(i,a),l=e[a];if($Ref.isExternal$Ref(l)){util.debug('Resolving $ref pointer "%s" at %s',l.$ref,s);var c=url.resolve(r,l.$ref),f=crawl$Ref(c,u,t,o)["catch"](function(e){throw ono.syntax(e,"Error at %s",s)});n.push(f)}else n=n.concat(crawl(l,s,u,t,o))})}return n}function crawl$Ref(e,r,i,t){return read(e,i,t).then(function(e){if(!e.cached){var o=e.$ref;o.pathFromRoot=r,util.debug("Resolving $ref pointers in %s",o.path);var n=crawl(o.value,o.path+"#",r,i,t);return Promise.all(n)}})}var Promise=require("./promise"),$Ref=require("./ref"),Pointer=require("./pointer"),read=require("./read"),util=require("./util"),url=require("url"),ono=require("ono");module.exports=resolve; +},{"./options":5,"./util":14,"ono":67,"url":90}],13:[function(require,module,exports){ +"use strict";function resolve(e,r){try{if(!r.$refs.external)return Promise.resolve();util.debug("Resolving $ref pointers in %s",e.$refs._basePath);var t=crawl(e.schema,e.$refs._basePath+"#",e.$refs,r);return Promise.all(t)}catch(i){return Promise.reject(i)}}function crawl(e,r,t,i){var s=[];return e&&"object"==typeof e&&Object.keys(e).forEach(function(o){var n=Pointer.join(r,o),u=e[o];if($Ref.isExternal$Ref(u)){var a=resolve$Ref(u,n,t,i);s.push(a)}else s=s.concat(crawl(u,n,t,i))}),s}function resolve$Ref(e,r,t,i){util.debug('Resolving $ref pointer "%s" at %s',e.$ref,r);var s=url.resolve(r,e.$ref);return read(s,t,i).then(function(e){if(!e.cached){util.debug("Resolving $ref pointers in %s",e.$ref.path);var r=crawl(e.$ref.value,e.$ref.path+"#",t,i);return Promise.all(r)}})}var Promise=require("./promise"),$Ref=require("./ref"),Pointer=require("./pointer"),read=require("./read"),util=require("./util"),url=require("url");module.exports=resolve; -},{"./pointer":7,"./promise":8,"./read":9,"./ref":10,"./util":13,"ono":66,"url":89}],13:[function(require,module,exports){ -(function (process){ -"use strict";var debug=require("debug"),isWindows=/^win/.test(process.platform),forwardSlashPattern=/\//g,protocolPattern=/^([a-z0-9.+-]+):\/\//i,urlEncodePatterns=[/\?/g,"%3F",/\#/g,"%23",isWindows?/\\/g:/\//,"/"],urlDecodePatterns=[/\%23/g,"#",/\%24/g,"$",/\%26/g,"&",/\%2C/g,",",/\%40/g,"@"];exports.debug=debug("json-schema-ref-parser"),exports.path={},exports.path.cwd=function(){return process.browser?location.href:process.cwd()+"/"},exports.path.isUrl=function(r){var e=protocolPattern.exec(r);return e?(e=e[1].toLowerCase(),"file"!==e):!1},exports.path.localPathToUrl=function(r){if(!process.browser&&!exports.path.isUrl(r)){for(var e=0;e=0?r.substr(e):""},exports.path.stripHash=function(r){var e=r.indexOf("#");return e>=0&&(r=r.substr(0,e)),r},exports.path.extname=function(r){var e=r.lastIndexOf(".");return e>=0?r.substr(e).toLowerCase():""}; - -}).call(this,require('_process')) +},{"./pointer":8,"./promise":9,"./read":10,"./ref":11,"./util":14,"url":90}],14:[function(require,module,exports){ +"use strict";var debug=require("debug"),path=require("./path");exports.debug=debug("json-schema-ref-parser"),exports.path=path,exports.dereference=function(e,r){if(r&&"object"==typeof r&&Object.keys(e).length>1){var t={};return Object.keys(e).forEach(function(r){"$ref"!==r&&(t[r]=e[r])}),Object.keys(r).forEach(function(e){e in t||(t[e]=r[e])}),t}return r}; -},{"_process":68,"debug":23}],14:[function(require,module,exports){ +},{"./path":7,"debug":24}],15:[function(require,module,exports){ "use strict";var yaml=require("js-yaml"),ono=require("ono");module.exports={parse:function(r,e){try{return yaml.safeLoad(r)}catch(o){throw o instanceof Error?o:ono(o,o.message)}},stringify:function(r,e,o){try{var t=("string"==typeof o?o.length:o)||2;return yaml.safeDump(r,{indent:t})}catch(n){throw n instanceof Error?n:ono(n,n.message)}}}; -},{"js-yaml":35,"ono":66}],15:[function(require,module,exports){ +},{"js-yaml":36,"ono":67}],16:[function(require,module,exports){ var lookup="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";!function(t){"use strict";function r(t){var r=t.charCodeAt(0);return r===h||r===u?62:r===c||r===f?63:o>r?-1:o+10>r?r-o+26+26:i+26>r?r-i:A+26>r?r-A+26:void 0}function e(t){function e(t){i[f++]=t}var n,h,c,o,A,i;if(t.length%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var u=t.length;A="="===t.charAt(u-2)?2:"="===t.charAt(u-1)?1:0,i=new a(3*t.length/4-A),c=A>0?t.length-4:t.length;var f=0;for(n=0,h=0;c>n;n+=4,h+=3)o=r(t.charAt(n))<<18|r(t.charAt(n+1))<<12|r(t.charAt(n+2))<<6|r(t.charAt(n+3)),e((16711680&o)>>16),e((65280&o)>>8),e(255&o);return 2===A?(o=r(t.charAt(n))<<2|r(t.charAt(n+1))>>4,e(255&o)):1===A&&(o=r(t.charAt(n))<<10|r(t.charAt(n+1))<<4|r(t.charAt(n+2))>>2,e(o>>8&255),e(255&o)),i}function n(t){function r(t){return lookup.charAt(t)}function e(t){return r(t>>18&63)+r(t>>12&63)+r(t>>6&63)+r(63&t)}var n,a,h,c=t.length%3,o="";for(n=0,h=t.length-c;h>n;n+=3)a=(t[n]<<16)+(t[n+1]<<8)+t[n+2],o+=e(a);switch(c){case 1:a=t[t.length-1],o+=r(a>>2),o+=r(a<<4&63),o+="==";break;case 2:a=(t[t.length-2]<<8)+t[t.length-1],o+=r(a>>10),o+=r(a>>4&63),o+=r(a<<2&63),o+="="}return o}var a="undefined"!=typeof Uint8Array?Uint8Array:Array,h="+".charCodeAt(0),c="/".charCodeAt(0),o="0".charCodeAt(0),A="a".charCodeAt(0),i="A".charCodeAt(0),u="-".charCodeAt(0),f="_".charCodeAt(0);t.toByteArray=e,t.fromByteArray=n}("undefined"==typeof exports?this.base64js={}:exports); -},{}],16:[function(require,module,exports){ - },{}],17:[function(require,module,exports){ },{}],18:[function(require,module,exports){ + +},{}],19:[function(require,module,exports){ (function (global){ /*! * The buffer module from node.js, for the browser. @@ -80,31 +83,31 @@ var lookup="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";!f }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"base64-js":15,"ieee754":29,"isarray":19}],19:[function(require,module,exports){ +},{"base64-js":16,"ieee754":30,"isarray":20}],20:[function(require,module,exports){ var toString={}.toString;module.exports=Array.isArray||function(r){return"[object Array]"==toString.call(r)}; -},{}],20:[function(require,module,exports){ +},{}],21:[function(require,module,exports){ module.exports={100:"Continue",101:"Switching Protocols",102:"Processing",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",300:"Multiple Choices",301:"Moved Permanently",302:"Moved Temporarily",303:"See Other",304:"Not Modified",305:"Use Proxy",307:"Temporary Redirect",308:"Permanent Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Time-out",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Request Entity Too Large",414:"Request-URI Too Large",415:"Unsupported Media Type",416:"Requested Range Not Satisfiable",417:"Expectation Failed",418:"I'm a teapot",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",425:"Unordered Collection",426:"Upgrade Required",428:"Precondition Required",429:"Too Many Requests",431:"Request Header Fields Too Large",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Time-out",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",509:"Bandwidth Limit Exceeded",510:"Not Extended",511:"Network Authentication Required"}; -},{}],21:[function(require,module,exports){ +},{}],22:[function(require,module,exports){ (function (process,global){ "use strict";var next=global.process&&process.nextTick||global.setImmediate||function(n){setTimeout(n,0)};module.exports=function(n,t){return n?void t.then(function(t){next(function(){n(null,t)})},function(t){next(function(){n(t)})}):t}; }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"_process":68}],22:[function(require,module,exports){ +},{"_process":69}],23:[function(require,module,exports){ (function (Buffer){ function isArray(r){return Array.isArray?Array.isArray(r):"[object Array]"===objectToString(r)}function isBoolean(r){return"boolean"==typeof r}function isNull(r){return null===r}function isNullOrUndefined(r){return null==r}function isNumber(r){return"number"==typeof r}function isString(r){return"string"==typeof r}function isSymbol(r){return"symbol"==typeof r}function isUndefined(r){return void 0===r}function isRegExp(r){return"[object RegExp]"===objectToString(r)}function isObject(r){return"object"==typeof r&&null!==r}function isDate(r){return"[object Date]"===objectToString(r)}function isError(r){return"[object Error]"===objectToString(r)||r instanceof Error}function isFunction(r){return"function"==typeof r}function isPrimitive(r){return null===r||"boolean"==typeof r||"number"==typeof r||"string"==typeof r||"symbol"==typeof r||"undefined"==typeof r}function objectToString(r){return Object.prototype.toString.call(r)}exports.isArray=isArray,exports.isBoolean=isBoolean,exports.isNull=isNull,exports.isNullOrUndefined=isNullOrUndefined,exports.isNumber=isNumber,exports.isString=isString,exports.isSymbol=isSymbol,exports.isUndefined=isUndefined,exports.isRegExp=isRegExp,exports.isObject=isObject,exports.isDate=isDate,exports.isError=isError,exports.isFunction=isFunction,exports.isPrimitive=isPrimitive,exports.isBuffer=Buffer.isBuffer; }).call(this,{"isBuffer":require("../../is-buffer/index.js")}) -},{"../../is-buffer/index.js":33}],23:[function(require,module,exports){ +},{"../../is-buffer/index.js":34}],24:[function(require,module,exports){ function useColors(){return"WebkitAppearance"in document.documentElement.style||window.console&&(console.firebug||console.exception&&console.table)||navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31}function formatArgs(){var o=arguments,e=this.useColors;if(o[0]=(e?"%c":"")+this.namespace+(e?" %c":" ")+o[0]+(e?"%c ":" ")+"+"+exports.humanize(this.diff),!e)return o;var r="color: "+this.color;o=[o[0],r,"color: inherit"].concat(Array.prototype.slice.call(o,1));var t=0,s=0;return o[0].replace(/%[a-z%]/g,function(o){"%%"!==o&&(t++,"%c"===o&&(s=t))}),o.splice(s,0,r),o}function log(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function save(o){try{null==o?exports.storage.removeItem("debug"):exports.storage.debug=o}catch(e){}}function load(){var o;try{o=exports.storage.debug}catch(e){}return o}function localstorage(){try{return window.localStorage}catch(o){}}exports=module.exports=require("./debug"),exports.log=log,exports.formatArgs=formatArgs,exports.save=save,exports.load=load,exports.useColors=useColors,exports.storage="undefined"!=typeof chrome&&"undefined"!=typeof chrome.storage?chrome.storage.local:localstorage(),exports.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],exports.formatters.j=function(o){return JSON.stringify(o)},exports.enable(load()); -},{"./debug":24}],24:[function(require,module,exports){ +},{"./debug":25}],25:[function(require,module,exports){ function selectColor(){return exports.colors[prevColor++%exports.colors.length]}function debug(e){function r(){}function o(){var e=o,r=+new Date,s=r-(prevTime||r);e.diff=s,e.prev=prevTime,e.curr=r,prevTime=r,null==e.useColors&&(e.useColors=exports.useColors()),null==e.color&&e.useColors&&(e.color=selectColor());var t=Array.prototype.slice.call(arguments);t[0]=exports.coerce(t[0]),"string"!=typeof t[0]&&(t=["%o"].concat(t));var n=0;t[0]=t[0].replace(/%([a-z%])/g,function(r,o){if("%%"===r)return r;n++;var s=exports.formatters[o];if("function"==typeof s){var p=t[n];r=s.call(e,p),t.splice(n,1),n--}return r}),"function"==typeof exports.formatArgs&&(t=exports.formatArgs.apply(e,t));var p=o.log||exports.log||console.log.bind(console);p.apply(e,t)}r.enabled=!1,o.enabled=!0;var s=exports.enabled(e)?o:r;return s.namespace=e,s}function enable(e){exports.save(e);for(var r=(e||"").split(/[\s,]+/),o=r.length,s=0;o>s;s++)r[s]&&(e=r[s].replace(/\*/g,".*?"),"-"===e[0]?exports.skips.push(new RegExp("^"+e.substr(1)+"$")):exports.names.push(new RegExp("^"+e+"$")))}function disable(){exports.enable("")}function enabled(e){var r,o;for(r=0,o=exports.skips.length;o>r;r++)if(exports.skips[r].test(e))return!1;for(r=0,o=exports.names.length;o>r;r++)if(exports.names[r].test(e))return!0;return!1}function coerce(e){return e instanceof Error?e.stack||e.message:e}exports=module.exports=debug,exports.coerce=coerce,exports.disable=disable,exports.enable=enable,exports.enabled=enabled,exports.humanize=require("ms"),exports.names=[],exports.skips=[],exports.formatters={};var prevColor=0,prevTime; -},{"ms":65}],25:[function(require,module,exports){ +},{"ms":66}],26:[function(require,module,exports){ (function (process,global){ /*! * @overview es6-promise - a tiny implementation of Promises/A+. @@ -117,21 +120,21 @@ function selectColor(){return exports.colors[prevColor++%exports.colors.length]} }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"_process":68}],26:[function(require,module,exports){ +},{"_process":69}],27:[function(require,module,exports){ !function(e,u){"use strict";"function"==typeof define&&define.amd?define(["exports"],u):u("undefined"!=typeof exports?exports:e.esprima={})}(this,function(e){"use strict";function u(e,u){if(!e)throw new Error("ASSERT: "+u)}function t(e){return e>=48&&57>=e}function n(e){return"0123456789abcdefABCDEF".indexOf(e)>=0}function i(e){return"01234567".indexOf(e)>=0}function r(e){var u="0"!==e,t="01234567".indexOf(e);return Et>st&&i(rt[st])&&(u=!0,t=8*t+"01234567".indexOf(rt[st++]),"0123".indexOf(e)>=0&&Et>st&&i(rt[st])&&(t=8*t+"01234567".indexOf(rt[st++]))),{code:t,octal:u}}function a(e){return 32===e||9===e||11===e||12===e||160===e||e>=5760&&[5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279].indexOf(e)>=0}function s(e){return 10===e||13===e||8232===e||8233===e}function o(e){return 65536>e?String.fromCharCode(e):String.fromCharCode(55296+(e-65536>>10))+String.fromCharCode(56320+(e-65536&1023))}function l(e){return 36===e||95===e||e>=65&&90>=e||e>=97&&122>=e||92===e||e>=128&&it.NonAsciiIdentifierStart.test(o(e))}function D(e){return 36===e||95===e||e>=65&&90>=e||e>=97&&122>=e||e>=48&&57>=e||92===e||e>=128&&it.NonAsciiIdentifierPart.test(o(e))}function c(e){switch(e){case"enum":case"export":case"import":case"super":return!0;default:return!1}}function f(e){switch(e){case"implements":case"interface":case"package":case"private":case"protected":case"public":case"static":case"yield":case"let":return!0;default:return!1}}function h(e){return"eval"===e||"arguments"===e}function p(e){switch(e.length){case 2:return"if"===e||"in"===e||"do"===e;case 3:return"var"===e||"for"===e||"new"===e||"try"===e||"let"===e;case 4:return"this"===e||"else"===e||"case"===e||"void"===e||"with"===e||"enum"===e;case 5:return"while"===e||"break"===e||"catch"===e||"throw"===e||"const"===e||"yield"===e||"class"===e||"super"===e;case 6:return"return"===e||"typeof"===e||"delete"===e||"switch"===e||"export"===e||"import"===e;case 7:return"default"===e||"finally"===e||"extends"===e;case 8:return"function"===e||"continue"===e||"debugger"===e;case 10:return"instanceof"===e;default:return!1}}function C(e,t,n,i,r){var a;u("number"==typeof n,"Comment must have valid position"),mt.lastCommentStart=n,a={type:e,value:t},Bt.range&&(a.range=[n,i]),Bt.loc&&(a.loc=r),Bt.comments.push(a),Bt.attachComment&&(Bt.leadingComments.push(a),Bt.trailingComments.push(a)),Bt.tokenize&&(a.type=a.type+"Comment",Bt.delegate&&(a=Bt.delegate(a)),Bt.tokens.push(a))}function F(e){var u,t,n,i;for(u=st-e,t={start:{line:ot,column:st-lt-e}};Et>st;)if(n=rt.charCodeAt(st),++st,s(n))return Dt=!0,Bt.comments&&(i=rt.slice(u+e,st-1),t.end={line:ot,column:st-lt-1},C("Line",i,u,st-1,t)),13===n&&10===rt.charCodeAt(st)&&++st,++ot,void(lt=st);Bt.comments&&(i=rt.slice(u+e,st),t.end={line:ot,column:st-lt},C("Line",i,u,st,t))}function A(){var e,u,t,n;for(Bt.comments&&(e=st-2,u={start:{line:ot,column:st-lt-2}});Et>st;)if(t=rt.charCodeAt(st),s(t))13===t&&10===rt.charCodeAt(st+1)&&++st,Dt=!0,++ot,++st,lt=st;else if(42===t){if(47===rt.charCodeAt(st+1))return++st,++st,void(Bt.comments&&(n=rt.slice(e+2,st-2),u.end={line:ot,column:st-lt},C("Block",n,e,st,u)));++st}else++st;Bt.comments&&(u.end={line:ot,column:st-lt},n=rt.slice(e+2,st),C("Block",n,e,st,u)),te()}function E(){var e,u;for(Dt=!1,u=0===st;Et>st;)if(e=rt.charCodeAt(st),a(e))++st;else if(s(e))Dt=!0,++st,13===e&&10===rt.charCodeAt(st)&&++st,++ot,lt=st,u=!0;else if(47===e)if(e=rt.charCodeAt(st+1),47===e)++st,++st,F(2),u=!0;else{if(42!==e)break;++st,++st,A()}else if(u&&45===e){if(45!==rt.charCodeAt(st+1)||62!==rt.charCodeAt(st+2))break;st+=3,F(3)}else{if(60!==e)break;if("!--"!==rt.slice(st+1,st+4))break;++st,++st,++st,++st,F(4)}}function d(e){var u,t,i,r=0;for(t="u"===e?4:2,u=0;t>u;++u){if(!(Et>st&&n(rt[st])))return"";i=rt[st++],r=16*r+"0123456789abcdef".indexOf(i.toLowerCase())}return String.fromCharCode(r)}function m(){var e,u;for(e=rt[st],u=0,"}"===e&&ue();Et>st&&(e=rt[st++],n(e));)u=16*u+"0123456789abcdef".indexOf(e.toLowerCase());return(u>1114111||"}"!==e)&&ue(),o(u)}function B(e){var u,t,n;return u=rt.charCodeAt(e),u>=55296&&56319>=u&&(n=rt.charCodeAt(e+1),n>=56320&&57343>=n&&(t=u,u=1024*(t-55296)+n-56320+65536)),u}function y(){var e,u,t;for(e=B(st),t=o(e),st+=t.length,92===e&&(117!==rt.charCodeAt(st)&&ue(),++st,"{"===rt[st]?(++st,u=m()):(u=d("u"),e=u.charCodeAt(0),u&&"\\"!==u&&l(e)||ue()),t=u);Et>st&&(e=B(st),D(e));)u=o(e),t+=u,st+=u.length,92===e&&(t=t.substr(0,t.length-1),117!==rt.charCodeAt(st)&&ue(),++st,"{"===rt[st]?(++st,u=m()):(u=d("u"),e=u.charCodeAt(0),u&&"\\"!==u&&D(e)||ue()),t+=u);return t}function g(){var e,u;for(e=st++;Et>st;){if(u=rt.charCodeAt(st),92===u)return st=e,y();if(u>=55296&&57343>u)return st=e,y();if(!D(u))break;++st}return rt.slice(e,st)}function S(){var e,u,t;return e=st,u=92===rt.charCodeAt(st)?y():g(),t=1===u.length?Qu.Identifier:p(u)?Qu.Keyword:"null"===u?Qu.NullLiteral:"true"===u||"false"===u?Qu.BooleanLiteral:Qu.Identifier,{type:t,value:u,lineNumber:ot,lineStart:lt,start:e,end:st}}function v(){var e,u;switch(e={type:Qu.Punctuator,value:"",lineNumber:ot,lineStart:lt,start:st,end:st},u=rt[st]){case"(":Bt.tokenize&&(Bt.openParenToken=Bt.tokenValues.length),++st;break;case"{":Bt.tokenize&&(Bt.openCurlyToken=Bt.tokenValues.length),mt.curlyStack.push("{"),++st;break;case".":++st,"."===rt[st]&&"."===rt[st+1]&&(st+=2,u="...");break;case"}":++st,mt.curlyStack.pop();break;case")":case";":case",":case"[":case"]":case":":case"?":case"~":++st;break;default:u=rt.substr(st,4),">>>="===u?st+=4:(u=u.substr(0,3),"==="===u||"!=="===u||">>>"===u||"<<="===u||">>="===u?st+=3:(u=u.substr(0,2),"&&"===u||"||"===u||"=="===u||"!="===u||"+="===u||"-="===u||"*="===u||"/="===u||"++"===u||"--"===u||"<<"===u||">>"===u||"&="===u||"|="===u||"^="===u||"%="===u||"<="===u||">="===u||"=>"===u?st+=2:(u=rt[st],"<>=!+-*%&|^/".indexOf(u)>=0&&++st)))}return st===e.start&&ue(),e.end=st,e.value=u,e}function x(e){for(var u="";Et>st&&n(rt[st]);)u+=rt[st++];return 0===u.length&&ue(),l(rt.charCodeAt(st))&&ue(),{type:Qu.NumericLiteral,value:parseInt("0x"+u,16),lineNumber:ot,lineStart:lt,start:e,end:st}}function w(e){var u,n;for(n="";Et>st&&(u=rt[st],"0"===u||"1"===u);)n+=rt[st++];return 0===n.length&&ue(),Et>st&&(u=rt.charCodeAt(st),(l(u)||t(u))&&ue()),{type:Qu.NumericLiteral,value:parseInt(n,2),lineNumber:ot,lineStart:lt,start:e,end:st}}function b(e,u){var n,r;for(i(e)?(r=!0,n="0"+rt[st++]):(r=!1,++st,n="");Et>st&&i(rt[st]);)n+=rt[st++];return r||0!==n.length||ue(),(l(rt.charCodeAt(st))||t(rt.charCodeAt(st)))&&ue(),{type:Qu.NumericLiteral,value:parseInt(n,8),octal:r,lineNumber:ot,lineStart:lt,start:u,end:st}}function k(){var e,u;for(e=st+1;Et>e;++e){if(u=rt[e],"8"===u||"9"===u)return!1;if(!i(u))return!0}return!0}function I(){var e,n,r;if(r=rt[st],u(t(r.charCodeAt(0))||"."===r,"Numeric literal must start with a decimal digit or a decimal point"),n=st,e="","."!==r){if(e=rt[st++],r=rt[st],"0"===e){if("x"===r||"X"===r)return++st,x(n);if("b"===r||"B"===r)return++st,w(n);if("o"===r||"O"===r)return b(r,n);if(i(r)&&k())return b(r,n)}for(;t(rt.charCodeAt(st));)e+=rt[st++];r=rt[st]}if("."===r){for(e+=rt[st++];t(rt.charCodeAt(st));)e+=rt[st++];r=rt[st]}if("e"===r||"E"===r)if(e+=rt[st++],r=rt[st],("+"===r||"-"===r)&&(e+=rt[st++]),t(rt.charCodeAt(st)))for(;t(rt.charCodeAt(st));)e+=rt[st++];else ue();return l(rt.charCodeAt(st))&&ue(),{type:Qu.NumericLiteral,value:parseFloat(e),lineNumber:ot,lineStart:lt,start:n,end:st}}function P(){var e,t,n,a,o,l="",D=!1;for(e=rt[st],u("'"===e||'"'===e,"String literal must starts with a quote"),t=st,++st;Et>st;){if(n=rt[st++],n===e){e="";break}if("\\"===n)if(n=rt[st++],n&&s(n.charCodeAt(0)))++ot,"\r"===n&&"\n"===rt[st]&&++st,lt=st;else switch(n){case"u":case"x":if("{"===rt[st])++st,l+=m();else{if(a=d(n),!a)throw ue();l+=a}break;case"n":l+="\n";break;case"r":l+="\r";break;case"t":l+=" ";break;case"b":l+="\b";break;case"f":l+="\f";break;case"v":l+="\x0B";break;case"8":case"9":l+=n,te();break;default:i(n)?(o=r(n),D=o.octal||D,l+=String.fromCharCode(o.code)):l+=n}else{if(s(n.charCodeAt(0)))break;l+=n}}return""!==e&&ue(),{type:Qu.StringLiteral,value:l,octal:D,lineNumber:Ct,lineStart:Ft,start:t,end:st}}function L(){var e,u,n,r,a,o,l,D,c="";for(r=!1,o=!1,u=st,a="`"===rt[st],n=2,++st;Et>st;){if(e=rt[st++],"`"===e){n=1,o=!0,r=!0;break}if("$"===e){if("{"===rt[st]){mt.curlyStack.push("${"),++st,r=!0;break}c+=e}else if("\\"===e)if(e=rt[st++],s(e.charCodeAt(0)))++ot,"\r"===e&&"\n"===rt[st]&&++st,lt=st;else switch(e){case"n":c+="\n";break;case"r":c+="\r";break;case"t":c+=" ";break;case"u":case"x":"{"===rt[st]?(++st,c+=m()):(l=st,D=d(e),D?c+=D:(st=l,c+=e));break;case"b":c+="\b";break;case"f":c+="\f";break;case"v":c+="\x0B";break;default:"0"===e?(t(rt.charCodeAt(st))&&Q(nt.TemplateOctalLiteral),c+="\x00"):i(e)?Q(nt.TemplateOctalLiteral):c+=e}else s(e.charCodeAt(0))?(++ot,"\r"===e&&"\n"===rt[st]&&++st,lt=st,c+="\n"):c+=e}return r||ue(),a||mt.curlyStack.pop(),{type:Qu.Template,value:{cooked:c,raw:rt.slice(u+1,st-n)},head:a,tail:o,lineNumber:ot,lineStart:lt,start:u,end:st}}function T(e,u){var t="￿",n=e;u.indexOf("u")>=0&&(n=n.replace(/\\u\{([0-9a-fA-F]+)\}|\\u([a-fA-F0-9]{4})/g,function(e,u,n){var i=parseInt(u||n,16);return i>1114111&&ue(null,nt.InvalidRegExp),65535>=i?String.fromCharCode(i):t}).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,t));try{RegExp(n)}catch(i){ue(null,nt.InvalidRegExp)}try{return new RegExp(e,u)}catch(r){return null}}function N(){var e,t,n,i,r;for(e=rt[st],u("/"===e,"Regular expression literal must start with a slash"),t=rt[st++],n=!1,i=!1;Et>st;)if(e=rt[st++],t+=e,"\\"===e)e=rt[st++],s(e.charCodeAt(0))&&ue(null,nt.UnterminatedRegExp),t+=e;else if(s(e.charCodeAt(0)))ue(null,nt.UnterminatedRegExp);else if(n)"]"===e&&(n=!1);else{if("/"===e){i=!0;break}"["===e&&(n=!0)}return i||ue(null,nt.UnterminatedRegExp),r=t.substr(1,t.length-2),{value:r,literal:t}}function O(){var e,u,t,n;for(u="",t="";Et>st&&(e=rt[st],D(e.charCodeAt(0)));)if(++st,"\\"===e&&Et>st)if(e=rt[st],"u"===e){if(++st,n=st,e=d("u"))for(t+=e,u+="\\u";st>n;++n)u+=rt[n];else st=n,t+="u",u+="\\u";te()}else u+="\\",te();else t+=e,u+=e;return{value:t,literal:u}}function R(){var e,u,t,n;return At=!0,dt=null,E(),e=st,u=N(),t=O(),n=T(u.value,t.value),At=!1,Bt.tokenize?{type:Qu.RegularExpression,value:n,regex:{pattern:u.value,flags:t.value},lineNumber:ot,lineStart:lt,start:e,end:st}:{literal:u.literal+t.literal,value:n,regex:{pattern:u.value,flags:t.value},start:e,end:st}}function U(){var e,u,t,n;return E(),e=st,u={start:{line:ot,column:st-lt}},t=R(),u.end={line:ot,column:st-lt},Bt.tokenize||(Bt.tokens.length>0&&(n=Bt.tokens[Bt.tokens.length-1],n.range[0]===e&&"Punctuator"===n.type&&("/"===n.value||"/="===n.value)&&Bt.tokens.pop()),Bt.tokens.push({type:"RegularExpression",value:t.literal,regex:t.regex,range:[e,st],loc:u})),t}function Y(e){return e.type===Qu.Identifier||e.type===Qu.Keyword||e.type===Qu.BooleanLiteral||e.type===Qu.NullLiteral}function M(){function e(e){return e&&e.length>1&&e[0]>="a"&&e[0]<="z"}var u,t,n;switch(t=Bt.tokenValues[Bt.tokens.length-1],u=null!==t,t){case"this":case"]":u=!1;break;case")":n=Bt.tokenValues[Bt.openParenToken-1],u="if"===n||"while"===n||"for"===n||"with"===n;break;case"}":u=!1,e(Bt.tokenValues[Bt.openCurlyToken-3])?(n=Bt.tokenValues[Bt.openCurlyToken-4],u=n?et.indexOf(n)<0:!1):e(Bt.tokenValues[Bt.openCurlyToken-4])&&(n=Bt.tokenValues[Bt.openCurlyToken-5],u=n?et.indexOf(n)<0:!0)}return u?U():v()}function j(){var e,u;return st>=Et?{type:Qu.EOF,lineNumber:ot,lineStart:lt,start:st,end:st}:(e=rt.charCodeAt(st),l(e)?(u=S(),at&&f(u.value)&&(u.type=Qu.Keyword),u):40===e||41===e||59===e?v():39===e||34===e?P():46===e?t(rt.charCodeAt(st+1))?I():v():t(e)?I():Bt.tokenize&&47===e?M():96===e||125===e&&"${"===mt.curlyStack[mt.curlyStack.length-1]?L():e>=55296&&57343>e&&(e=B(st),l(e))?S():v())}function V(){var e,u,t,n;return e={start:{line:ot,column:st-lt}},u=j(),e.end={line:ot,column:st-lt},u.type!==Qu.EOF&&(t=rt.slice(u.start,u.end),n={type:Zu[u.type],value:t,range:[u.start,u.end],loc:e},u.regex&&(n.regex={pattern:u.regex.pattern,flags:u.regex.flags}),Bt.tokenValues&&Bt.tokenValues.push("Punctuator"===n.type||"Keyword"===n.type?n.value:null),Bt.tokenize&&(Bt.range||delete n.range,Bt.loc||delete n.loc,Bt.delegate&&(n=Bt.delegate(n))),Bt.tokens.push(n)),u}function W(){var e;return At=!0,ct=st,ft=ot,ht=lt,E(),e=dt,pt=st,Ct=ot,Ft=lt,dt="undefined"!=typeof Bt.tokens?V():j(),At=!1,e}function H(){At=!0,E(),ct=st,ft=ot,ht=lt,pt=st,Ct=ot,Ft=lt,dt="undefined"!=typeof Bt.tokens?V():j(),At=!1}function K(){this.line=Ct,this.column=pt-Ft}function q(){this.start=new K,this.end=null}function z(e){this.start={line:e.lineNumber,column:e.start-e.lineStart},this.end=null}function _(){Bt.range&&(this.range=[pt,0]),Bt.loc&&(this.loc=new q)}function $(e){Bt.range&&(this.range=[e.start,0]),Bt.loc&&(this.loc=new z(e))}function G(e){var u,t;for(u=0;u>="===e||">>>="===e||"&="===e||"^="===e||"|="===e)}function De(){return 59===rt.charCodeAt(pt)||ae(";")?void W():void(Dt||(ct=pt,ft=Ct,ht=Ft,dt.type===Qu.EOF||ae("}")||ue(dt)))}function ce(e){var u,t=yt,n=gt,i=St;return yt=!0,gt=!0,St=null,u=e(),null!==St&&ue(St),yt=t,gt=n,St=i,u}function fe(e){var u,t=yt,n=gt,i=St;return yt=!0,gt=!0,St=null,u=e(),yt=yt&&t,gt=gt&&n,St=i||St,u}function he(e,u){var t,n,i=new _,r=[];for(ne("[");!ae("]");)if(ae(","))W(),r.push(null);else{if(ae("...")){n=new _,W(),e.push(dt),t=Ze(u),r.push(n.finishRestElement(t));break}r.push(Ae(e,u)),ae("]")||ne(",")}return ne("]"),i.finishArrayPattern(r)}function pe(e,u){var t,n,i,r=new _,a=ae("[");if(dt.type===Qu.Identifier){if(n=dt,t=Ze(),ae("="))return e.push(n),W(),i=$e(),r.finishProperty("init",t,!1,new $(n).finishAssignmentPattern(t,i),!1,!1);if(!ae(":"))return e.push(n),r.finishProperty("init",t,!1,t,!1,!0)}else t=Be();return ne(":"),i=Ae(e,u),r.finishProperty("init",t,a,i,!1,!1)}function Ce(e,u){var t=new _,n=[];for(ne("{");!ae("}");)n.push(pe(e,u)),ae("}")||ne(",");return W(),t.finishObjectPattern(n)}function Fe(e,u){return ae("[")?he(e,u):ae("{")?Ce(e,u):(se("let")&&("const"===u||"let"===u)&&te(dt,nt.UnexpectedToken),e.push(dt),Ze(u))}function Ae(e,u){var t,n,i,r=dt;return t=Fe(e,u),ae("=")&&(W(),n=mt.allowYield,mt.allowYield=!0,i=ce($e),mt.allowYield=n,t=new $(r).finishAssignmentPattern(t,i)),t}function Ee(){var e,u=[],t=new _;for(ne("[");!ae("]");)ae(",")?(W(),u.push(null)):ae("...")?(e=new _,W(),e.finishSpreadElement(fe($e)),ae("]")||(gt=yt=!1,ne(",")),u.push(e)):(u.push(fe($e)),ae("]")||ne(","));return W(),t.finishArrayExpression(u)}function de(e,u,t){var n,i;return gt=yt=!1,n=at,i=ce(wu),at&&u.firstRestricted&&te(u.firstRestricted,u.message),at&&u.stricted&&te(u.stricted,u.message),at=n,e.finishFunctionExpression(null,u.params,u.defaults,i,t)}function me(){var e,u,t=new _,n=mt.allowYield;return mt.allowYield=!1,e=Iu(),mt.allowYield=n,mt.allowYield=!1,u=de(t,e,!1),mt.allowYield=n,u}function Be(){var e,u,t=new _;switch(e=W(),e.type){case Qu.StringLiteral:case Qu.NumericLiteral:return at&&e.octal&&te(e,nt.StrictOctalLiteral),t.finishLiteral(e);case Qu.Identifier:case Qu.BooleanLiteral:case Qu.NullLiteral:case Qu.Keyword:return t.finishIdentifier(e.value);case Qu.Punctuator:if("["===e.value)return u=ce($e),ne("]"),u}ue(e)}function ye(){switch(dt.type){case Qu.Identifier:case Qu.StringLiteral:case Qu.BooleanLiteral:case Qu.NullLiteral:case Qu.NumericLiteral:case Qu.Keyword:return!0;case Qu.Punctuator:return"["===dt.value}return!1}function ge(e,u,t,n){var i,r,a,s,o=mt.allowYield;if(e.type===Qu.Identifier){if("get"===e.value&&ye())return t=ae("["),u=Be(),a=new _,ne("("),ne(")"),mt.allowYield=!1,i=de(a,{params:[],defaults:[],stricted:null,firstRestricted:null,message:null},!1),mt.allowYield=o,n.finishProperty("get",u,t,i,!1,!1);if("set"===e.value&&ye())return t=ae("["),u=Be(),a=new _,ne("("),r={params:[],defaultCount:0,defaults:[],firstRestricted:null,paramSet:{}},ae(")")?te(dt):(mt.allowYield=!1,ku(r),mt.allowYield=o,0===r.defaultCount&&(r.defaults=[])),ne(")"),mt.allowYield=!1,i=de(a,r,!1),mt.allowYield=o,n.finishProperty("set",u,t,i,!1,!1)}else if(e.type===Qu.Punctuator&&"*"===e.value&&ye())return t=ae("["),u=Be(),a=new _,mt.allowYield=!0,s=Iu(),mt.allowYield=o,mt.allowYield=!1,i=de(a,s,!0),mt.allowYield=o,n.finishProperty("init",u,t,i,!0,!1);return u&&ae("(")?(i=me(),n.finishProperty("init",u,t,i,!0,!1)):null}function Se(e){var u,t,n,i,r,a=dt,s=new _;return u=ae("["),ae("*")?W():t=Be(),(n=ge(a,t,u,s))?n:(t||ue(dt),u||(i=t.type===ut.Identifier&&"__proto__"===t.name||t.type===ut.Literal&&"__proto__"===t.value,e.value&&i&&Z(nt.DuplicateProtoProperty),e.value|=i),ae(":")?(W(),r=fe($e),s.finishProperty("init",t,u,r,!1,!1)):a.type===Qu.Identifier?ae("=")?(St=dt,W(),r=ce($e),s.finishProperty("init",t,u,new $(a).finishAssignmentPattern(t,r),!1,!0)):s.finishProperty("init",t,u,t,!1,!0):void ue(dt))}function ve(){var e=[],u={value:!1},t=new _;for(ne("{");!ae("}");)e.push(Se(u)),ae("}")||ie();return ne("}"),t.finishObjectExpression(e)}function xe(e){var u;switch(e.type){case ut.Identifier:case ut.MemberExpression:case ut.RestElement:case ut.AssignmentPattern:break;case ut.SpreadElement:e.type=ut.RestElement,xe(e.argument);break;case ut.ArrayExpression:for(e.type=ut.ArrayPattern,u=0;u")||ne("=>"),{type:tt.ArrowParameterPlaceHolder,params:[],rawParams:[]};if(t=dt,ae("..."))return e=lu(i),ne(")"),ae("=>")||ne("=>"),{type:tt.ArrowParameterPlaceHolder,params:[e]};if(yt=!0,e=fe($e),ae(",")){for(gt=!1,u=[e];Et>pt&&ae(",");){if(W(),ae("...")){for(yt||ue(dt),u.push(lu(i)),ne(")"),ae("=>")||ne("=>"),yt=!1,n=0;n")){if(e.type===ut.Identifier&&"yield"===e.name)return{type:tt.ArrowParameterPlaceHolder,params:[e]};if(yt||ue(dt),e.type===ut.SequenceExpression)for(n=0;npt&&(ae("...")?(e=new _,W(),e.finishSpreadElement(ce($e))):e=ce($e),u.push(e),!ae(")"));)ie();return ne(")"),u}function Le(){var e,u=new _;return e=W(),Y(e)||ue(e),u.finishIdentifier(e.value)}function Te(){return ne("."),Le()}function Ne(){var e;return ne("["),e=ce(Ge),ne("]"),e}function Oe(){var e,u,t=new _;if(re("new"),ae(".")){if(W(),dt.type===Qu.Identifier&&"target"===dt.value&&mt.inFunctionBody)return W(),t.finishMetaProperty("new","target");ue(dt)}return e=ce(Ue),u=ae("(")?Pe():[],gt=yt=!1,t.finishNewExpression(e,u)}function Re(){var e,u,t,n,i,r=mt.allowIn;for(i=dt,mt.allowIn=!0,se("super")&&mt.inFunctionBody?(u=new _,W(),u=u.finishSuper(),ae("(")||ae(".")||ae("[")||ue(dt)):u=fe(se("new")?Oe:Ie);;)if(ae("."))yt=!1,gt=!0,n=Te(),u=new $(i).finishMemberExpression(".",u,n);else if(ae("("))yt=!1,gt=!1,t=Pe(),u=new $(i).finishCallExpression(u,t);else if(ae("["))yt=!1,gt=!0,n=Ne(),u=new $(i).finishMemberExpression("[",u,n);else{if(dt.type!==Qu.Template||!dt.head)break;e=be(),u=new $(i).finishTaggedTemplateExpression(u,e)}return mt.allowIn=r,u}function Ue(){var e,t,n,i;for(u(mt.allowIn,"callee of new expression always allow in keyword."),i=dt,se("super")&&mt.inFunctionBody?(t=new _,W(),t=t.finishSuper(),ae("[")||ae(".")||ue(dt)):t=fe(se("new")?Oe:Ie);;)if(ae("["))yt=!1,gt=!0,n=Ne(),t=new $(i).finishMemberExpression("[",t,n);else if(ae("."))yt=!1,gt=!0,n=Te(),t=new $(i).finishMemberExpression(".",t,n);else{if(dt.type!==Qu.Template||!dt.head)break;e=be(),t=new $(i).finishTaggedTemplateExpression(t,e)}return t}function Ye(){var e,u,t=dt;return e=fe(Re),Dt||dt.type!==Qu.Punctuator||(ae("++")||ae("--"))&&(at&&e.type===ut.Identifier&&h(e.name)&&Z(nt.StrictLHSPostfix),gt||Z(nt.InvalidLHSInAssignment),gt=yt=!1,u=W(),e=new $(t).finishPostfixExpression(u.value,e)),e}function Me(){var e,u,t;return dt.type!==Qu.Punctuator&&dt.type!==Qu.Keyword?u=Ye():ae("++")||ae("--")?(t=dt,e=W(),u=fe(Me),at&&u.type===ut.Identifier&&h(u.name)&&Z(nt.StrictLHSPrefix),gt||Z(nt.InvalidLHSInAssignment),u=new $(t).finishUnaryExpression(e.value,u),gt=yt=!1):ae("+")||ae("-")||ae("~")||ae("!")?(t=dt,e=W(),u=fe(Me),u=new $(t).finishUnaryExpression(e.value,u),gt=yt=!1):se("delete")||se("void")||se("typeof")?(t=dt,e=W(),u=fe(Me),u=new $(t).finishUnaryExpression(e.value,u),at&&"delete"===u.operator&&u.argument.type===ut.Identifier&&Z(nt.StrictDelete),gt=yt=!1):u=Ye(),u}function je(e,u){var t=0;if(e.type!==Qu.Punctuator&&e.type!==Qu.Keyword)return 0;switch(e.value){case"||":t=1;break;case"&&":t=2;break;case"|":t=3;break;case"^":t=4;break;case"&":t=5;break;case"==":case"!=":case"===":case"!==":t=6;break;case"<":case">":case"<=":case">=":case"instanceof":t=7;break;case"in":t=u?7:0;break;case"<<":case">>":case">>>":t=8;break;case"+":case"-":t=9;break;case"*":case"/":case"%":t=11}return t}function Ve(){var e,u,t,n,i,r,a,s,o,l;if(e=dt,o=fe(Me),n=dt,i=je(n,mt.allowIn),0===i)return o;for(gt=yt=!1,n.prec=i,W(),u=[e,dt],a=ce(Me),r=[o,n,a];(i=je(dt,mt.allowIn))>0;){for(;r.length>2&&i<=r[r.length-2].prec;)a=r.pop(),s=r.pop().value,o=r.pop(),u.pop(),t=new $(u[u.length-1]).finishBinaryExpression(s,o,a),r.push(t);n=W(),n.prec=i,r.push(n),u.push(dt),t=ce(Me),r.push(t)}for(l=r.length-1,t=r[l],u.pop();l>1;)t=new $(u.pop()).finishBinaryExpression(r[l-1].value,r[l-2],t),l-=2;return t}function We(){var e,u,t,n,i;return i=dt,e=fe(Ve),ae("?")&&(W(),u=mt.allowIn,mt.allowIn=!0,t=ce($e),mt.allowIn=u,ne(":"),n=ce($e),e=new $(i).finishConditionalExpression(e,t,n),gt=yt=!1),e}function He(){return ae("{")?wu():ce($e)}function Ke(e,t){var n;switch(t.type){case ut.Identifier:bu(e,t,t.name);break;case ut.RestElement:Ke(e,t.argument);break;case ut.AssignmentPattern:Ke(e,t.left);break;case ut.ArrayPattern:for(n=0;nu;u+=1)switch(n=i[u],n.type){case ut.AssignmentPattern:i[u]=n.left,n.right.type===ut.YieldExpression&&(n.right.argument&&ue(dt),n.right.type=ut.Identifier,n.right.name="yield",delete n.right.argument,delete n.right.delegate),r.push(n.right),++a,Ke(s,n.left);break;default:Ke(s,n),i[u]=n,r.push(null)}if(at||!mt.allowYield)for(u=0,t=i.length;t>u;u+=1)n=i[u],n.type===ut.YieldExpression&&ue(dt);return s.message===nt.StrictParamDupe&&(o=at?s.stricted:s.firstRestricted,ue(o,s.message)),0===a&&(r=[]),{params:i,defaults:r,stricted:s.stricted,firstRestricted:s.firstRestricted,message:s.message}}function ze(e,u){var t,n,i;return Dt&&te(dt),ne("=>"),t=at,n=mt.allowYield,mt.allowYield=!0,i=He(),at&&e.firstRestricted&&ue(e.firstRestricted,e.message),at&&e.stricted&&te(e.stricted,e.message),at=t,mt.allowYield=n,u.finishArrowFunctionExpression(e.params,e.defaults,i,i.type!==ut.BlockStatement)}function _e(){var e,u,t,n;return e=null,u=new _,t=!1,re("yield"),Dt||(n=mt.allowYield,mt.allowYield=!1,t=ae("*"),t?(W(),e=$e()):ae(";")||ae("}")||ae(")")||dt.type===Qu.EOF||(e=$e()),mt.allowYield=n),u.finishYieldExpression(e,t)}function $e(){var e,u,t,n,i;return i=dt,e=dt,!mt.allowYield&&se("yield")?_e():(u=We(),u.type===tt.ArrowParameterPlaceHolder||ae("=>")?(gt=yt=!1,n=qe(u),n?(St=null,ze(n,new $(i))):u):(le()&&(gt||Z(nt.InvalidLHSInAssignment),at&&u.type===ut.Identifier&&(h(u.name)&&te(e,nt.StrictLHSAssignment),f(u.name)&&te(e,nt.StrictReservedWord)),ae("=")?xe(u):gt=yt=!1,e=W(),t=ce($e),u=new $(i).finishAssignmentExpression(e.value,u,t),St=null),u))}function Ge(){var e,u,t=dt;if(e=ce($e),ae(",")){for(u=[e];Et>pt&&ae(",");)W(),u.push(ce($e));e=new $(t).finishSequenceExpression(u)}return e}function Xe(){if(dt.type===Qu.Keyword)switch(dt.value){case"export":return"module"!==mt.sourceType&&te(dt,nt.IllegalExportDeclaration),Vu();case"import":return"module"!==mt.sourceType&&te(dt,nt.IllegalImportDeclaration),zu();case"const":return ou({inFor:!1});case"function":return Pu(new _);case"class":return Nu()}return se("let")&&su()?ou({inFor:!1}):xu()}function Je(){for(var e=[];Et>pt&&!ae("}");)e.push(Xe());return e}function Qe(){var e,u=new _;return ne("{"),e=Je(),ne("}"),u.finishBlockStatement(e)}function Ze(e){var u,t=new _;return u=W(),u.type===Qu.Keyword&&"yield"===u.value?(at&&te(u,nt.StrictReservedWord),mt.allowYield||ue(u)):u.type!==Qu.Identifier?at&&u.type===Qu.Keyword&&f(u.value)?te(u,nt.StrictReservedWord):(at||"let"!==u.value||"var"!==e)&&ue(u):"module"===mt.sourceType&&u.type===Qu.Identifier&&"await"===u.value&&te(u),t.finishIdentifier(u.value)}function eu(e){var u,t=null,n=new _,i=[];return u=Fe(i,"var"),at&&h(u.name)&&Z(nt.StrictVarName),ae("=")?(W(),t=ce($e)):u.type===ut.Identifier||e.inFor||ne("="),n.finishVariableDeclarator(u,t)}function uu(e){var u,t;for(u={inFor:e.inFor},t=[eu(u)];ae(",");)W(),t.push(eu(u));return t}function tu(e){var u;return re("var"),u=uu({inFor:!1}),De(),e.finishVariableDeclaration(u)}function nu(e,u){var t,n=null,i=new _,r=[];return t=Fe(r,e),at&&t.type===ut.Identifier&&h(t.name)&&Z(nt.StrictVarName),"const"===e?se("in")||oe("of")||(ne("="),n=ce($e)):(!u.inFor&&t.type!==ut.Identifier||ae("="))&&(ne("="),n=ce($e)),i.finishVariableDeclarator(t,n)}function iu(e,u){for(var t=[nu(e,u)];ae(",");)W(),t.push(nu(e,u));return t}function ru(){return{index:st,lineNumber:ot,lineStart:lt,hasLineTerminator:Dt,lastIndex:ct,lastLineNumber:ft,lastLineStart:ht,startIndex:pt,startLineNumber:Ct,startLineStart:Ft,lookahead:dt,tokenCount:Bt.tokens?Bt.tokens.length:0}}function au(e){st=e.index,ot=e.lineNumber,lt=e.lineStart,Dt=e.hasLineTerminator,ct=e.lastIndex,ft=e.lastLineNumber,ht=e.lastLineStart,pt=e.startIndex,Ct=e.startLineNumber,Ft=e.startLineStart,dt=e.lookahead,Bt.tokens&&Bt.tokens.splice(e.tokenCount,Bt.tokens.length)}function su(){var e,u;return u=ru(),W(),e=dt.type===Qu.Identifier||ae("[")||ae("{")||se("let")||se("yield"),au(u),e}function ou(e){var t,n,i=new _;return t=W().value,u("let"===t||"const"===t,"Lexical declaration must be either let or const"),n=iu(t,e),De(),i.finishLexicalDeclaration(n,t)}function lu(e){var u,t=new _;return W(),ae("{")&&Q(nt.ObjectPatternAsRestParameter),e.push(dt),u=Ze(),ae("=")&&Q(nt.DefaultRestParameter),ae(")")||Q(nt.ParameterAfterRestParameter),t.finishRestElement(u)}function Du(e){return ne(";"),e.finishEmptyStatement()}function cu(e){var u=Ge();return De(),e.finishExpressionStatement(u)}function fu(e){var u,t,n;return re("if"),ne("("),u=Ge(),ne(")"),t=xu(),se("else")?(W(),n=xu()):n=null,e.finishIfStatement(u,t,n)}function hu(e){var u,t,n;return re("do"),n=mt.inIteration,mt.inIteration=!0,u=xu(),mt.inIteration=n,re("while"),ne("("),t=Ge(),ne(")"),ae(";")&&W(),e.finishDoWhileStatement(u,t)}function pu(e){var u,t,n;return re("while"),ne("("),u=Ge(),ne(")"),n=mt.inIteration,mt.inIteration=!0,t=xu(),mt.inIteration=n,e.finishWhileStatement(u,t)}function Cu(e){var u,t,n,i,r,a,s,o,l,D,c,f,h=mt.allowIn;if(u=r=a=null,t=!0,re("for"),ne("("),ae(";"))W();else if(se("var"))u=new _,W(),mt.allowIn=!1,D=uu({inFor:!0}),mt.allowIn=h,1===D.length&&se("in")?(u=u.finishVariableDeclaration(D),W(),s=u,o=Ge(),u=null):1===D.length&&null===D[0].init&&oe("of")?(u=u.finishVariableDeclaration(D),W(),s=u,o=$e(),u=null,t=!1):(u=u.finishVariableDeclaration(D),ne(";"));else if(se("const")||se("let"))u=new _,l=W().value,at||"in"!==dt.value?(mt.allowIn=!1,D=iu(l,{inFor:!0}),mt.allowIn=h,1===D.length&&null===D[0].init&&se("in")?(u=u.finishLexicalDeclaration(D,l),W(),s=u,o=Ge(),u=null):1===D.length&&null===D[0].init&&oe("of")?(u=u.finishLexicalDeclaration(D,l),W(),s=u,o=$e(),u=null,t=!1):(De(),u=u.finishLexicalDeclaration(D,l))):(u=u.finishIdentifier(l),W(),s=u,o=Ge(),u=null);else if(i=dt,mt.allowIn=!1,u=fe($e),mt.allowIn=h,se("in"))gt||Z(nt.InvalidLHSInForIn),W(),xe(u),s=u,o=Ge(),u=null;else if(oe("of"))gt||Z(nt.InvalidLHSInForLoop),W(),xe(u),s=u,o=$e(),u=null,t=!1;else{if(ae(",")){for(n=[u];ae(",");)W(),n.push(ce($e));u=new $(i).finishSequenceExpression(n)}ne(";")}return"undefined"==typeof s&&(ae(";")||(r=Ge()),ne(";"),ae(")")||(a=Ge())),ne(")"),f=mt.inIteration,mt.inIteration=!0,c=ce(xu),mt.inIteration=f,"undefined"==typeof s?e.finishForStatement(u,r,a,c):t?e.finishForInStatement(s,o,c):e.finishForOfStatement(s,o,c)}function Fu(e){var u,t=null;return re("continue"), 59===rt.charCodeAt(pt)?(W(),mt.inIteration||Q(nt.IllegalContinue),e.finishContinueStatement(null)):Dt?(mt.inIteration||Q(nt.IllegalContinue),e.finishContinueStatement(null)):(dt.type===Qu.Identifier&&(t=Ze(),u="$"+t.name,Object.prototype.hasOwnProperty.call(mt.labelSet,u)||Q(nt.UnknownLabel,t.name)),De(),null!==t||mt.inIteration||Q(nt.IllegalContinue),e.finishContinueStatement(t))}function Au(e){var u,t=null;return re("break"),59===rt.charCodeAt(ct)?(W(),mt.inIteration||mt.inSwitch||Q(nt.IllegalBreak),e.finishBreakStatement(null)):(Dt?mt.inIteration||mt.inSwitch||Q(nt.IllegalBreak):dt.type===Qu.Identifier&&(t=Ze(),u="$"+t.name,Object.prototype.hasOwnProperty.call(mt.labelSet,u)||Q(nt.UnknownLabel,t.name)),De(),null!==t||mt.inIteration||mt.inSwitch||Q(nt.IllegalBreak),e.finishBreakStatement(t))}function Eu(e){var u=null;return re("return"),mt.inFunctionBody||Z(nt.IllegalReturn),32===rt.charCodeAt(ct)&&l(rt.charCodeAt(ct+1))?(u=Ge(),De(),e.finishReturnStatement(u)):Dt?e.finishReturnStatement(null):(ae(";")||ae("}")||dt.type===Qu.EOF||(u=Ge()),De(),e.finishReturnStatement(u))}function du(e){var u,t;return at&&Z(nt.StrictModeWith),re("with"),ne("("),u=Ge(),ne(")"),t=xu(),e.finishWithStatement(u,t)}function mu(){var e,u,t=[],n=new _;for(se("default")?(W(),e=null):(re("case"),e=Ge()),ne(":");Et>pt&&!(ae("}")||se("default")||se("case"));)u=Xe(),t.push(u);return n.finishSwitchCase(e,t)}function Bu(e){var u,t,n,i,r;if(re("switch"),ne("("),u=Ge(),ne(")"),ne("{"),t=[],ae("}"))return W(),e.finishSwitchStatement(u,t);for(i=mt.inSwitch,mt.inSwitch=!0,r=!1;Et>pt&&!ae("}");)n=mu(),null===n.test&&(r&&Q(nt.MultipleDefaultsInSwitch),r=!0),t.push(n);return mt.inSwitch=i,ne("}"),e.finishSwitchStatement(u,t)}function yu(e){var u;return re("throw"),Dt&&Q(nt.NewlineAfterThrow),u=Ge(),De(),e.finishThrowStatement(u)}function gu(){var e,u,t,n,i=[],r={},a=new _;for(re("catch"),ne("("),ae(")")&&ue(dt),e=Fe(i),t=0;tpt&&dt.type===Qu.StringLiteral&&(u=dt,e=Xe(),l.push(e),e.expression.type===ut.Literal);)t=rt.slice(u.start+1,u.end-1),"use strict"===t?(at=!0,n&&te(n,nt.StrictOctalLiteral)):!n&&u.octal&&(n=u);for(i=mt.labelSet,r=mt.inIteration,a=mt.inSwitch,s=mt.inFunctionBody,o=mt.parenthesizedCount,mt.labelSet={},mt.inIteration=!1,mt.inSwitch=!1,mt.inFunctionBody=!0,mt.parenthesizedCount=0;Et>pt&&!ae("}");)l.push(Xe());return ne("}"),mt.labelSet=i,mt.inIteration=r,mt.inSwitch=a,mt.inFunctionBody=s,mt.parenthesizedCount=o,D.finishBlockStatement(l)}function bu(e,u,t){var n="$"+t;at?(h(t)&&(e.stricted=u,e.message=nt.StrictParamName),Object.prototype.hasOwnProperty.call(e.paramSet,n)&&(e.stricted=u,e.message=nt.StrictParamDupe)):e.firstRestricted||(h(t)?(e.firstRestricted=u,e.message=nt.StrictParamName):f(t)?(e.firstRestricted=u,e.message=nt.StrictReservedWord):Object.prototype.hasOwnProperty.call(e.paramSet,n)&&(e.stricted=u,e.message=nt.StrictParamDupe)),e.paramSet[n]=!0}function ku(e){var u,t,n,i,r=[];if(u=dt,"..."===u.value)return t=lu(r),bu(e,t.argument,t.argument.name),e.params.push(t),e.defaults.push(null),!1;for(t=Ae(r),n=0;npt&&ku(u);)ne(",");return ne(")"),0===u.defaultCount&&(u.defaults=[]),{params:u.params,defaults:u.defaults,stricted:u.stricted,firstRestricted:u.firstRestricted,message:u.message}}function Pu(e,u){var t,n,i,r,a,s,o,l,D,c=null,p=[],C=[];return D=mt.allowYield,re("function"),l=ae("*"),l&&W(),u&&ae("(")||(n=dt,c=Ze(),at?h(n.value)&&te(n,nt.StrictFunctionName):h(n.value)?(a=n,s=nt.StrictFunctionName):f(n.value)&&(a=n,s=nt.StrictReservedWord)),mt.allowYield=!l,r=Iu(a),p=r.params,C=r.defaults,i=r.stricted,a=r.firstRestricted,r.message&&(s=r.message),o=at,t=wu(),at&&a&&ue(a,s),at&&i&&te(i,s),at=o,mt.allowYield=D,e.finishFunctionDeclaration(c,p,C,t,l)}function Lu(){var e,u,t,n,i,r,a,s,o,l=null,D=[],c=[],p=new _;return o=mt.allowYield,re("function"),s=ae("*"),s&&W(),mt.allowYield=!s,ae("(")||(e=dt,l=at||s||!se("yield")?Ze():Le(),at?h(e.value)&&te(e,nt.StrictFunctionName):h(e.value)?(t=e,n=nt.StrictFunctionName):f(e.value)&&(t=e,n=nt.StrictReservedWord)),i=Iu(t),D=i.params,c=i.defaults,u=i.stricted,t=i.firstRestricted,i.message&&(n=i.message),a=at,r=wu(),at&&t&&ue(t,n),at&&u&&te(u,n),at=a,mt.allowYield=o,p.finishFunctionExpression(l,D,c,r,s)}function Tu(){var e,u,t,n,i,r,a,s=!1;for(e=new _,ne("{"),n=[];!ae("}");)ae(";")?W():(i=new _,u=dt,t=!1,r=ae("["),ae("*")?W():(a=Be(),"static"===a.name&&(ye()||ae("*"))&&(u=dt,t=!0,r=ae("["),ae("*")?W():a=Be())),i=ge(u,a,r,i),i?(i["static"]=t,"init"===i.kind&&(i.kind="method"),t?i.computed||"prototype"!==(i.key.name||i.key.value.toString())||ue(u,nt.StaticPrototype):i.computed||"constructor"!==(i.key.name||i.key.value.toString())||(("method"!==i.kind||!i.method||i.value.generator)&&ue(u,nt.ConstructorSpecialMethod),s?ue(u,nt.DuplicateConstructor):s=!0,i.kind="constructor"),i.type=ut.MethodDefinition,delete i.method,delete i.shorthand,n.push(i)):ue(dt));return W(),e.finishClassBody(n)}function Nu(e){var u,t=null,n=null,i=new _,r=at;return at=!0,re("class"),e&&dt.type!==Qu.Identifier||(t=Ze()),se("extends")&&(W(),n=ce(Re)),u=Tu(),at=r,i.finishClassDeclaration(t,n,u)}function Ou(){var e,u=null,t=null,n=new _,i=at;return at=!0,re("class"),dt.type===Qu.Identifier&&(u=Ze()),se("extends")&&(W(),t=ce(Re)),e=Tu(),at=i,n.finishClassExpression(u,t,e)}function Ru(){var e=new _;return dt.type!==Qu.StringLiteral&&Q(nt.InvalidModuleSpecifier),e.finishLiteral(W())}function Uu(){var e,u,t,n=new _;return se("default")?(t=new _,W(),u=t.finishIdentifier("default")):u=Ze(),oe("as")&&(W(),e=Le()),n.finishExportSpecifier(u,e)}function Yu(e){var u,t=null,n=null,i=[];if(dt.type===Qu.Keyword)switch(dt.value){case"let":case"const":return t=ou({inFor:!1}),e.finishExportNamedDeclaration(t,i,null);case"var":case"class":case"function":return t=Xe(),e.finishExportNamedDeclaration(t,i,null)}for(ne("{");!ae("}")&&(u=u||se("default"),i.push(Uu()),ae("}")||(ne(","),!ae("}"))););return ne("}"),oe("from")?(W(),n=Ru(),De()):u?Q(dt.value?nt.UnexpectedToken:nt.MissingFromClause,dt.value):De(),e.finishExportNamedDeclaration(t,i,n)}function Mu(e){var u=null,t=null;return re("default"),se("function")?(u=Pu(new _,!0),e.finishExportDefaultDeclaration(u)):se("class")?(u=Nu(!0),e.finishExportDefaultDeclaration(u)):(oe("from")&&Q(nt.UnexpectedToken,dt.value),t=ae("{")?ve():ae("[")?Ee():$e(),De(),e.finishExportDefaultDeclaration(t))}function ju(e){var u;return ne("*"),oe("from")||Q(dt.value?nt.UnexpectedToken:nt.MissingFromClause,dt.value),W(),u=Ru(),De(),e.finishExportAllDeclaration(u)}function Vu(){var e=new _;return mt.inFunctionBody&&Q(nt.IllegalExportDeclaration),re("export"),se("default")?Mu(e):ae("*")?ju(e):Yu(e)}function Wu(){var e,u,t=new _;return u=Le(),oe("as")&&(W(),e=Ze()),t.finishImportSpecifier(e,u)}function Hu(){var e=[];for(ne("{");!ae("}")&&(e.push(Wu()),ae("}")||(ne(","),!ae("}"))););return ne("}"),e}function Ku(){var e,u=new _;return e=Le(),u.finishImportDefaultSpecifier(e)}function qu(){var e,u=new _;return ne("*"),oe("as")||Q(nt.NoAsAfterImportNamespace),W(),e=Le(),u.finishImportNamespaceSpecifier(e)}function zu(){var e,u=[],t=new _;return mt.inFunctionBody&&Q(nt.IllegalImportDeclaration),re("import"),dt.type===Qu.StringLiteral?e=Ru():(ae("{")?u=u.concat(Hu()):ae("*")?u.push(qu()):Y(dt)&&!se("default")?(u.push(Ku()),ae(",")&&(W(),ae("*")?u.push(qu()):ae("{")?u=u.concat(Hu()):ue(dt))):ue(W()),oe("from")||Q(dt.value?nt.UnexpectedToken:nt.MissingFromClause,dt.value),W(),e=Ru()),De(),t.finishImportDeclaration(u,e)}function _u(){for(var e,u,t,n,i=[];Et>pt&&(u=dt,u.type===Qu.StringLiteral)&&(e=Xe(),i.push(e),e.expression.type===ut.Literal);)t=rt.slice(u.start+1,u.end-1),"use strict"===t?(at=!0,n&&te(n,nt.StrictOctalLiteral)):!n&&u.octal&&(n=u);for(;Et>pt&&(e=Xe(),"undefined"!=typeof e);)i.push(e);return i}function $u(){var e,u;return H(),u=new _,e=_u(),u.finishProgram(e,mt.sourceType)}function Gu(){var e,u,t,n=[];for(e=0;e0?1:0,lt=0,pt=st,Ct=ot,Ft=lt,Et=rt.length,dt=null,mt={allowIn:!0,allowYield:!0,labelSet:{},inFunctionBody:!1,inIteration:!1,inSwitch:!1,lastCommentStart:-1,curlyStack:[]},Bt={},u=u||{},u.tokens=!0,Bt.tokens=[],Bt.tokenValues=[],Bt.tokenize=!0,Bt.delegate=t,Bt.openParenToken=-1,Bt.openCurlyToken=-1,Bt.range="boolean"==typeof u.range&&u.range,Bt.loc="boolean"==typeof u.loc&&u.loc,"boolean"==typeof u.comment&&u.comment&&(Bt.comments=[]),"boolean"==typeof u.tolerant&&u.tolerant&&(Bt.errors=[]);try{if(H(),dt.type===Qu.EOF)return Bt.tokens;for(W();dt.type!==Qu.EOF;)try{W()}catch(r){if(Bt.errors){G(r);break}throw r}i=Bt.tokens,"undefined"!=typeof Bt.errors&&(i.errors=Bt.errors)}catch(a){throw a}finally{Bt={}}return i}function Ju(e,u){var t,n;n=String,"string"==typeof e||e instanceof String||(e=n(e)),rt=e,st=0,ot=rt.length>0?1:0,lt=0,pt=st,Ct=ot,Ft=lt,Et=rt.length,dt=null,mt={allowIn:!0,allowYield:!0,labelSet:{},inFunctionBody:!1,inIteration:!1,inSwitch:!1,lastCommentStart:-1,curlyStack:[],sourceType:"script"},at=!1,Bt={},"undefined"!=typeof u&&(Bt.range="boolean"==typeof u.range&&u.range,Bt.loc="boolean"==typeof u.loc&&u.loc,Bt.attachComment="boolean"==typeof u.attachComment&&u.attachComment,Bt.loc&&null!==u.source&&void 0!==u.source&&(Bt.source=n(u.source)),"boolean"==typeof u.tokens&&u.tokens&&(Bt.tokens=[]),"boolean"==typeof u.comment&&u.comment&&(Bt.comments=[]),"boolean"==typeof u.tolerant&&u.tolerant&&(Bt.errors=[]),Bt.attachComment&&(Bt.range=!0,Bt.comments=[],Bt.bottomRightStack=[],Bt.trailingComments=[],Bt.leadingComments=[]),"module"===u.sourceType&&(mt.sourceType=u.sourceType,at=!0));try{t=$u(),"undefined"!=typeof Bt.comments&&(t.comments=Bt.comments),"undefined"!=typeof Bt.tokens&&(Gu(),t.tokens=Bt.tokens),"undefined"!=typeof Bt.errors&&(t.errors=Bt.errors)}catch(i){throw i}finally{Bt={}}return t}var Qu,Zu,et,ut,tt,nt,it,rt,at,st,ot,lt,Dt,ct,ft,ht,pt,Ct,Ft,At,Et,dt,mt,Bt,yt,gt,St;Qu={BooleanLiteral:1,EOF:2,Identifier:3,Keyword:4,NullLiteral:5,NumericLiteral:6,Punctuator:7,StringLiteral:8,RegularExpression:9,Template:10},Zu={},Zu[Qu.BooleanLiteral]="Boolean",Zu[Qu.EOF]="",Zu[Qu.Identifier]="Identifier",Zu[Qu.Keyword]="Keyword",Zu[Qu.NullLiteral]="Null",Zu[Qu.NumericLiteral]="Numeric",Zu[Qu.Punctuator]="Punctuator",Zu[Qu.StringLiteral]="String",Zu[Qu.RegularExpression]="RegularExpression",Zu[Qu.Template]="Template",et=["(","{","[","in","typeof","instanceof","new","return","case","delete","throw","void","=","+=","-=","*=","/=","%=","<<=",">>=",">>>=","&=","|=","^=",",","+","-","*","/","%","++","--","<<",">>",">>>","&","|","^","!","~","&&","||","?",":","===","==",">=","<=","<",">","!=","!=="],ut={AssignmentExpression:"AssignmentExpression",AssignmentPattern:"AssignmentPattern",ArrayExpression:"ArrayExpression",ArrayPattern:"ArrayPattern",ArrowFunctionExpression:"ArrowFunctionExpression",BlockStatement:"BlockStatement",BinaryExpression:"BinaryExpression",BreakStatement:"BreakStatement",CallExpression:"CallExpression",CatchClause:"CatchClause",ClassBody:"ClassBody",ClassDeclaration:"ClassDeclaration",ClassExpression:"ClassExpression",ConditionalExpression:"ConditionalExpression",ContinueStatement:"ContinueStatement",DoWhileStatement:"DoWhileStatement",DebuggerStatement:"DebuggerStatement",EmptyStatement:"EmptyStatement",ExportAllDeclaration:"ExportAllDeclaration",ExportDefaultDeclaration:"ExportDefaultDeclaration",ExportNamedDeclaration:"ExportNamedDeclaration",ExportSpecifier:"ExportSpecifier",ExpressionStatement:"ExpressionStatement",ForStatement:"ForStatement",ForOfStatement:"ForOfStatement",ForInStatement:"ForInStatement",FunctionDeclaration:"FunctionDeclaration",FunctionExpression:"FunctionExpression",Identifier:"Identifier",IfStatement:"IfStatement",ImportDeclaration:"ImportDeclaration",ImportDefaultSpecifier:"ImportDefaultSpecifier",ImportNamespaceSpecifier:"ImportNamespaceSpecifier",ImportSpecifier:"ImportSpecifier",Literal:"Literal",LabeledStatement:"LabeledStatement",LogicalExpression:"LogicalExpression",MemberExpression:"MemberExpression",MetaProperty:"MetaProperty",MethodDefinition:"MethodDefinition",NewExpression:"NewExpression",ObjectExpression:"ObjectExpression",ObjectPattern:"ObjectPattern",Program:"Program",Property:"Property",RestElement:"RestElement",ReturnStatement:"ReturnStatement",SequenceExpression:"SequenceExpression",SpreadElement:"SpreadElement",Super:"Super",SwitchCase:"SwitchCase",SwitchStatement:"SwitchStatement",TaggedTemplateExpression:"TaggedTemplateExpression",TemplateElement:"TemplateElement",TemplateLiteral:"TemplateLiteral",ThisExpression:"ThisExpression",ThrowStatement:"ThrowStatement",TryStatement:"TryStatement",UnaryExpression:"UnaryExpression",UpdateExpression:"UpdateExpression",VariableDeclaration:"VariableDeclaration",VariableDeclarator:"VariableDeclarator",WhileStatement:"WhileStatement",WithStatement:"WithStatement",YieldExpression:"YieldExpression"},tt={ArrowParameterPlaceHolder:"ArrowParameterPlaceHolder"},nt={UnexpectedToken:"Unexpected token %0",UnexpectedNumber:"Unexpected number",UnexpectedString:"Unexpected string",UnexpectedIdentifier:"Unexpected identifier",UnexpectedReserved:"Unexpected reserved word",UnexpectedTemplate:"Unexpected quasi %0",UnexpectedEOS:"Unexpected end of input",NewlineAfterThrow:"Illegal newline after throw",InvalidRegExp:"Invalid regular expression",UnterminatedRegExp:"Invalid regular expression: missing /",InvalidLHSInAssignment:"Invalid left-hand side in assignment",InvalidLHSInForIn:"Invalid left-hand side in for-in",InvalidLHSInForLoop:"Invalid left-hand side in for-loop",MultipleDefaultsInSwitch:"More than one default clause in switch statement",NoCatchOrFinally:"Missing catch or finally after try",UnknownLabel:"Undefined label '%0'",Redeclaration:"%0 '%1' has already been declared",IllegalContinue:"Illegal continue statement",IllegalBreak:"Illegal break statement",IllegalReturn:"Illegal return statement",StrictModeWith:"Strict mode code may not include a with statement",StrictCatchVariable:"Catch variable may not be eval or arguments in strict mode",StrictVarName:"Variable name may not be eval or arguments in strict mode",StrictParamName:"Parameter name eval or arguments is not allowed in strict mode",StrictParamDupe:"Strict mode function may not have duplicate parameter names",StrictFunctionName:"Function name may not be eval or arguments in strict mode",StrictOctalLiteral:"Octal literals are not allowed in strict mode.",StrictDelete:"Delete of an unqualified identifier in strict mode.",StrictLHSAssignment:"Assignment to eval or arguments is not allowed in strict mode",StrictLHSPostfix:"Postfix increment/decrement may not have eval or arguments operand in strict mode",StrictLHSPrefix:"Prefix increment/decrement may not have eval or arguments operand in strict mode",StrictReservedWord:"Use of future reserved word in strict mode",TemplateOctalLiteral:"Octal literals are not allowed in template strings.",ParameterAfterRestParameter:"Rest parameter must be last formal parameter",DefaultRestParameter:"Unexpected token =",ObjectPatternAsRestParameter:"Unexpected token {",DuplicateProtoProperty:"Duplicate __proto__ fields are not allowed in object literals",ConstructorSpecialMethod:"Class constructor may not be an accessor",DuplicateConstructor:"A class may only have one constructor",StaticPrototype:"Classes may not have static property named prototype",MissingFromClause:"Unexpected token",NoAsAfterImportNamespace:"Unexpected token",InvalidModuleSpecifier:"Unexpected token",IllegalImportDeclaration:"Unexpected token",IllegalExportDeclaration:"Unexpected token",DuplicateBinding:"Duplicate binding %0"},it={NonAsciiIdentifierStart:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B2\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDE00-\uDE11\uDE13-\uDE2B\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDE00-\uDE2F\uDE44\uDE80-\uDEAA]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF98]|\uD809[\uDC00-\uDC6E]|[\uD80C\uD840-\uD868\uD86A-\uD86C][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D]|\uD87E[\uDC00-\uDE1D]/,NonAsciiIdentifierPart:/[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B2\u08E4-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA69D\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2D\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDD0-\uDDDA\uDE00-\uDE11\uDE13-\uDE37\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF01-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF98]|\uD809[\uDC00-\uDC6E]|[\uD80C\uD840-\uD868\uD86A-\uD86C][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/},$.prototype=_.prototype={processComment:function(){var e,u,t,n,i,r,a=Bt.bottomRightStack,s=a[a.length-1];if(!(this.type===ut.Program&&this.body.length>0)){if(this.type===ut.BlockStatement&&0===this.body.length){for(u=[],i=Bt.leadingComments.length-1;i>=0;--i)r=Bt.leadingComments[i],this.range[1]>=r.range[1]&&(u.unshift(r),Bt.leadingComments.splice(i,1),Bt.trailingComments.splice(i,1));if(u.length)return void(this.innerComments=u)}if(Bt.trailingComments.length>0){ for(n=[],i=Bt.trailingComments.length-1;i>=0;--i)r=Bt.trailingComments[i],r.range[0]>=this.range[1]&&(n.unshift(r),Bt.trailingComments.splice(i,1));Bt.trailingComments=[]}else s&&s.trailingComments&&s.trailingComments[0].range[0]>=this.range[1]&&(n=s.trailingComments,delete s.trailingComments);for(;s&&s.range[0]>=this.range[0];)e=a.pop(),s=a[a.length-1];if(e){if(e.leadingComments){for(t=[],i=e.leadingComments.length-1;i>=0;--i)r=e.leadingComments[i],r.range[1]<=this.range[0]&&(t.unshift(r),e.leadingComments.splice(i,1));e.leadingComments.length||(e.leadingComments=void 0)}}else if(Bt.leadingComments.length>0)for(t=[],i=Bt.leadingComments.length-1;i>=0;--i)r=Bt.leadingComments[i],r.range[1]<=this.range[0]&&(t.unshift(r),Bt.leadingComments.splice(i,1));t&&t.length>0&&(this.leadingComments=t),n&&n.length>0&&(this.trailingComments=n),a.push(this)}},finish:function(){Bt.range&&(this.range[1]=ct),Bt.loc&&(this.loc.end={line:ft,column:ct-ht},Bt.source&&(this.loc.source=Bt.source)),Bt.attachComment&&this.processComment()},finishArrayExpression:function(e){return this.type=ut.ArrayExpression,this.elements=e,this.finish(),this},finishArrayPattern:function(e){return this.type=ut.ArrayPattern,this.elements=e,this.finish(),this},finishArrowFunctionExpression:function(e,u,t,n){return this.type=ut.ArrowFunctionExpression,this.id=null,this.params=e,this.defaults=u,this.body=t,this.generator=!1,this.expression=n,this.finish(),this},finishAssignmentExpression:function(e,u,t){return this.type=ut.AssignmentExpression,this.operator=e,this.left=u,this.right=t,this.finish(),this},finishAssignmentPattern:function(e,u){return this.type=ut.AssignmentPattern,this.left=e,this.right=u,this.finish(),this},finishBinaryExpression:function(e,u,t){return this.type="||"===e||"&&"===e?ut.LogicalExpression:ut.BinaryExpression,this.operator=e,this.left=u,this.right=t,this.finish(),this},finishBlockStatement:function(e){return this.type=ut.BlockStatement,this.body=e,this.finish(),this},finishBreakStatement:function(e){return this.type=ut.BreakStatement,this.label=e,this.finish(),this},finishCallExpression:function(e,u){return this.type=ut.CallExpression,this.callee=e,this.arguments=u,this.finish(),this},finishCatchClause:function(e,u){return this.type=ut.CatchClause,this.param=e,this.body=u,this.finish(),this},finishClassBody:function(e){return this.type=ut.ClassBody,this.body=e,this.finish(),this},finishClassDeclaration:function(e,u,t){return this.type=ut.ClassDeclaration,this.id=e,this.superClass=u,this.body=t,this.finish(),this},finishClassExpression:function(e,u,t){return this.type=ut.ClassExpression,this.id=e,this.superClass=u,this.body=t,this.finish(),this},finishConditionalExpression:function(e,u,t){return this.type=ut.ConditionalExpression,this.test=e,this.consequent=u,this.alternate=t,this.finish(),this},finishContinueStatement:function(e){return this.type=ut.ContinueStatement,this.label=e,this.finish(),this},finishDebuggerStatement:function(){return this.type=ut.DebuggerStatement,this.finish(),this},finishDoWhileStatement:function(e,u){return this.type=ut.DoWhileStatement,this.body=e,this.test=u,this.finish(),this},finishEmptyStatement:function(){return this.type=ut.EmptyStatement,this.finish(),this},finishExpressionStatement:function(e){return this.type=ut.ExpressionStatement,this.expression=e,this.finish(),this},finishForStatement:function(e,u,t,n){return this.type=ut.ForStatement,this.init=e,this.test=u,this.update=t,this.body=n,this.finish(),this},finishForOfStatement:function(e,u,t){return this.type=ut.ForOfStatement,this.left=e,this.right=u,this.body=t,this.finish(),this},finishForInStatement:function(e,u,t){return this.type=ut.ForInStatement,this.left=e,this.right=u,this.body=t,this.each=!1,this.finish(),this},finishFunctionDeclaration:function(e,u,t,n,i){return this.type=ut.FunctionDeclaration,this.id=e,this.params=u,this.defaults=t,this.body=n,this.generator=i,this.expression=!1,this.finish(),this},finishFunctionExpression:function(e,u,t,n,i){return this.type=ut.FunctionExpression,this.id=e,this.params=u,this.defaults=t,this.body=n,this.generator=i,this.expression=!1,this.finish(),this},finishIdentifier:function(e){return this.type=ut.Identifier,this.name=e,this.finish(),this},finishIfStatement:function(e,u,t){return this.type=ut.IfStatement,this.test=e,this.consequent=u,this.alternate=t,this.finish(),this},finishLabeledStatement:function(e,u){return this.type=ut.LabeledStatement,this.label=e,this.body=u,this.finish(),this},finishLiteral:function(e){return this.type=ut.Literal,this.value=e.value,this.raw=rt.slice(e.start,e.end),e.regex&&(this.regex=e.regex),this.finish(),this},finishMemberExpression:function(e,u,t){return this.type=ut.MemberExpression,this.computed="["===e,this.object=u,this.property=t,this.finish(),this},finishMetaProperty:function(e,u){return this.type=ut.MetaProperty,this.meta=e,this.property=u,this.finish(),this},finishNewExpression:function(e,u){return this.type=ut.NewExpression,this.callee=e,this.arguments=u,this.finish(),this},finishObjectExpression:function(e){return this.type=ut.ObjectExpression,this.properties=e,this.finish(),this},finishObjectPattern:function(e){return this.type=ut.ObjectPattern,this.properties=e,this.finish(),this},finishPostfixExpression:function(e,u){return this.type=ut.UpdateExpression,this.operator=e,this.argument=u,this.prefix=!1,this.finish(),this},finishProgram:function(e,u){return this.type=ut.Program,this.body=e,this.sourceType=u,this.finish(),this},finishProperty:function(e,u,t,n,i,r){return this.type=ut.Property,this.key=u,this.computed=t,this.value=n,this.kind=e,this.method=i,this.shorthand=r,this.finish(),this},finishRestElement:function(e){return this.type=ut.RestElement,this.argument=e,this.finish(),this},finishReturnStatement:function(e){return this.type=ut.ReturnStatement,this.argument=e,this.finish(),this},finishSequenceExpression:function(e){return this.type=ut.SequenceExpression,this.expressions=e,this.finish(),this},finishSpreadElement:function(e){return this.type=ut.SpreadElement,this.argument=e,this.finish(),this},finishSwitchCase:function(e,u){return this.type=ut.SwitchCase,this.test=e,this.consequent=u,this.finish(),this},finishSuper:function(){return this.type=ut.Super,this.finish(),this},finishSwitchStatement:function(e,u){return this.type=ut.SwitchStatement,this.discriminant=e,this.cases=u,this.finish(),this},finishTaggedTemplateExpression:function(e,u){return this.type=ut.TaggedTemplateExpression,this.tag=e,this.quasi=u,this.finish(),this},finishTemplateElement:function(e,u){return this.type=ut.TemplateElement,this.value=e,this.tail=u,this.finish(),this},finishTemplateLiteral:function(e,u){return this.type=ut.TemplateLiteral,this.quasis=e,this.expressions=u,this.finish(),this},finishThisExpression:function(){return this.type=ut.ThisExpression,this.finish(),this},finishThrowStatement:function(e){return this.type=ut.ThrowStatement,this.argument=e,this.finish(),this},finishTryStatement:function(e,u,t){return this.type=ut.TryStatement,this.block=e,this.guardedHandlers=[],this.handlers=u?[u]:[],this.handler=u,this.finalizer=t,this.finish(),this},finishUnaryExpression:function(e,u){return this.type="++"===e||"--"===e?ut.UpdateExpression:ut.UnaryExpression,this.operator=e,this.argument=u,this.prefix=!0,this.finish(),this},finishVariableDeclaration:function(e){return this.type=ut.VariableDeclaration,this.declarations=e,this.kind="var",this.finish(),this},finishLexicalDeclaration:function(e,u){return this.type=ut.VariableDeclaration,this.declarations=e,this.kind=u,this.finish(),this},finishVariableDeclarator:function(e,u){return this.type=ut.VariableDeclarator,this.id=e,this.init=u,this.finish(),this},finishWhileStatement:function(e,u){return this.type=ut.WhileStatement,this.test=e,this.body=u,this.finish(),this},finishWithStatement:function(e,u){return this.type=ut.WithStatement,this.object=e,this.body=u,this.finish(),this},finishExportSpecifier:function(e,u){return this.type=ut.ExportSpecifier,this.exported=u||e,this.local=e,this.finish(),this},finishImportDefaultSpecifier:function(e){return this.type=ut.ImportDefaultSpecifier,this.local=e,this.finish(),this},finishImportNamespaceSpecifier:function(e){return this.type=ut.ImportNamespaceSpecifier,this.local=e,this.finish(),this},finishExportNamedDeclaration:function(e,u,t){return this.type=ut.ExportNamedDeclaration,this.declaration=e,this.specifiers=u,this.source=t,this.finish(),this},finishExportDefaultDeclaration:function(e){return this.type=ut.ExportDefaultDeclaration,this.declaration=e,this.finish(),this},finishExportAllDeclaration:function(e){return this.type=ut.ExportAllDeclaration,this.source=e,this.finish(),this},finishImportSpecifier:function(e,u){return this.type=ut.ImportSpecifier,this.local=e||u,this.imported=u,this.finish(),this},finishImportDeclaration:function(e,u){return this.type=ut.ImportDeclaration,this.specifiers=e,this.source=u,this.finish(),this},finishYieldExpression:function(e,u){return this.type=ut.YieldExpression,this.argument=e,this.delegate=u,this.finish(),this}},e.version="2.7.1",e.tokenize=Xu,e.parse=Ju,e.Syntax=function(){var e,u={};"function"==typeof Object.create&&(u=Object.create(null));for(e in ut)ut.hasOwnProperty(e)&&(u[e]=ut[e]);return"function"==typeof Object.freeze&&Object.freeze(u),u}()}); -},{}],27:[function(require,module,exports){ +},{}],28:[function(require,module,exports){ function EventEmitter(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function isFunction(e){return"function"==typeof e}function isNumber(e){return"number"==typeof e}function isObject(e){return"object"==typeof e&&null!==e}function isUndefined(e){return void 0===e}module.exports=EventEmitter,EventEmitter.EventEmitter=EventEmitter,EventEmitter.prototype._events=void 0,EventEmitter.prototype._maxListeners=void 0,EventEmitter.defaultMaxListeners=10,EventEmitter.prototype.setMaxListeners=function(e){if(!isNumber(e)||0>e||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},EventEmitter.prototype.emit=function(e){var t,n,i,s,r,o;if(this._events||(this._events={}),"error"===e&&(!this._events.error||isObject(this._events.error)&&!this._events.error.length)){if(t=arguments[1],t instanceof Error)throw t;throw TypeError('Uncaught, unspecified "error" event.')}if(n=this._events[e],isUndefined(n))return!1;if(isFunction(n))switch(arguments.length){case 1:n.call(this);break;case 2:n.call(this,arguments[1]);break;case 3:n.call(this,arguments[1],arguments[2]);break;default:s=Array.prototype.slice.call(arguments,1),n.apply(this,s)}else if(isObject(n))for(s=Array.prototype.slice.call(arguments,1),o=n.slice(),i=o.length,r=0;i>r;r++)o[r].apply(this,s);return!0},EventEmitter.prototype.addListener=function(e,t){var n;if(!isFunction(t))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",e,isFunction(t.listener)?t.listener:t),this._events[e]?isObject(this._events[e])?this._events[e].push(t):this._events[e]=[this._events[e],t]:this._events[e]=t,isObject(this._events[e])&&!this._events[e].warned&&(n=isUndefined(this._maxListeners)?EventEmitter.defaultMaxListeners:this._maxListeners,n&&n>0&&this._events[e].length>n&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace())),this},EventEmitter.prototype.on=EventEmitter.prototype.addListener,EventEmitter.prototype.once=function(e,t){function n(){this.removeListener(e,n),i||(i=!0,t.apply(this,arguments))}if(!isFunction(t))throw TypeError("listener must be a function");var i=!1;return n.listener=t,this.on(e,n),this},EventEmitter.prototype.removeListener=function(e,t){var n,i,s,r;if(!isFunction(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(n=this._events[e],s=n.length,i=-1,n===t||isFunction(n.listener)&&n.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(isObject(n)){for(r=s;r-- >0;)if(n[r]===t||n[r].listener&&n[r].listener===t){i=r;break}if(0>i)return this;1===n.length?(n.length=0,delete this._events[e]):n.splice(i,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},EventEmitter.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(n=this._events[e],isFunction(n))this.removeListener(e,n);else if(n)for(;n.length;)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},EventEmitter.prototype.listeners=function(e){var t;return t=this._events&&this._events[e]?isFunction(this._events[e])?[this._events[e]]:this._events[e].slice():[]},EventEmitter.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(isFunction(t))return 1;if(t)return t.length}return 0},EventEmitter.listenerCount=function(e,t){return e.listenerCount(t)}; -},{}],28:[function(require,module,exports){ +},{}],29:[function(require,module,exports){ var http=require("http"),https=module.exports;for(var key in http)http.hasOwnProperty(key)&&(https[key]=http[key]);https.request=function(t,e){return t||(t={}),t.scheme="https",t.protocol="https:",http.request.call(this,t,e)}; -},{"http":84}],29:[function(require,module,exports){ +},{"http":85}],30:[function(require,module,exports){ exports.read=function(a,o,t,r,h){var M,p,w=8*h-r-1,f=(1<>1,i=-7,N=t?h-1:0,n=t?-1:1,s=a[o+N];for(N+=n,M=s&(1<<-i)-1,s>>=-i,i+=w;i>0;M=256*M+a[o+N],N+=n,i-=8);for(p=M&(1<<-i)-1,M>>=-i,i+=r;i>0;p=256*p+a[o+N],N+=n,i-=8);if(0===M)M=1-e;else{if(M===f)return p?NaN:(s?-1:1)*(1/0);p+=Math.pow(2,r),M-=e}return(s?-1:1)*p*Math.pow(2,M-r)},exports.write=function(a,o,t,r,h,M){var p,w,f,e=8*M-h-1,i=(1<>1,n=23===h?Math.pow(2,-24)-Math.pow(2,-77):0,s=r?0:M-1,u=r?1:-1,l=0>o||0===o&&0>1/o?1:0;for(o=Math.abs(o),isNaN(o)||o===1/0?(w=isNaN(o)?1:0,p=i):(p=Math.floor(Math.log(o)/Math.LN2),o*(f=Math.pow(2,-p))<1&&(p--,f*=2),o+=p+N>=1?n/f:n*Math.pow(2,1-N),o*f>=2&&(p++,f/=2),p+N>=i?(w=0,p=i):p+N>=1?(w=(o*f-1)*Math.pow(2,h),p+=N):(w=o*Math.pow(2,N-1)*Math.pow(2,h),p=0));h>=8;a[t+s]=255&w,s+=u,w/=256,h-=8);for(p=p<0;a[t+s]=255&p,s+=u,p/=256,e-=8);a[t+s-u]|=128*l}; -},{}],30:[function(require,module,exports){ +},{}],31:[function(require,module,exports){ /*! * node-inherit * Copyright(c) 2011 Dmitry Filatov @@ -139,112 +142,112 @@ exports.read=function(a,o,t,r,h){var M,p,w=8*h-r-1,f=(1<>1,i=-7,N=t?h- */ module.exports=require("./lib/inherit"); -},{"./lib/inherit":31}],31:[function(require,module,exports){ +},{"./lib/inherit":32}],32:[function(require,module,exports){ !function(t){function r(t){var r=a(t);if(v)for(var n,o=0;n=g[o++];)t.hasOwnProperty(n)&&r.push(n);return r}function n(t,n,o){for(var e,i,c=r(o),f=0,a=c.length;a>f;)"__self"!==(e=c[f++])&&(i=o[e],l(i)&&(!u||i.toString().indexOf(".__base")>-1)?n[e]=function(r,o){var e=t[r]?t[r]:"__constructor"===r?n.__self.__parent:y;return function(){var t=this.__base;this.__base=e;var r=o.apply(this,arguments);return this.__base=t,r}}(e,i):n[e]=i)}function o(t,r){for(var n,o=1;n=t[o++];)r?l(n)?e.self(r,n.prototype,n):e.self(r,n):r=l(n)?e(t[0],n.prototype,n):e(t[0],n);return r||t[0]}function e(){var t=arguments,r=_(t[0]),e=r||l(t[0]),u=e?r?o(t[0]):t[0]:i,c=t[e?1:0]||{},a=t[e?2:1],s=c.__constructor||e&&u.prototype.__constructor?function(){return this.__constructor.apply(this,arguments)}:e?function(){return u.apply(this,arguments)}:function(){};if(!e)return s.prototype=c,s.prototype.__self=s.prototype.constructor=s,p(s,a);p(s,u),s.__parent=u;var y=u.prototype,v=s.prototype=f(y);return v.__self=v.constructor=s,c&&n(y,v,c),a&&n(u,s,a),s}var u=function(){"_"}.toString().indexOf("_")>-1,i=function(){},c=Object.prototype.hasOwnProperty,f=Object.create||function(t){var r=function(){};return r.prototype=t,new r},a=Object.keys||function(t){var r=[];for(var n in t)c.call(t,n)&&r.push(n);return r},p=function(t,r){for(var n in r)c.call(r,n)&&(t[n]=r[n]);return t},s=Object.prototype.toString,_=Array.isArray||function(t){return"[object Array]"===s.call(t)},l=function(t){return"[object Function]"===s.call(t)},y=function(){},v=!0,h={toString:""};for(var b in h)h.hasOwnProperty(b)&&(v=!1);var g=v?["toString","valueOf"]:null;e.self=function(){var t=arguments,r=_(t[0]),e=r?o(t[0],t[0][0]):t[0],u=t[1],i=t[2],c=e.prototype;return u&&n(c,c,u),i&&n(e,e,i),e};var O=!0;"object"==typeof exports&&(module.exports=e,O=!1),"object"==typeof modules&&(modules.define("inherit",function(t){t(e)}),O=!1),"function"==typeof define&&(define(function(t,r,n){n.exports=e}),O=!1),O&&(t.inherit=e)}(this); -},{}],32:[function(require,module,exports){ +},{}],33:[function(require,module,exports){ "function"==typeof Object.create?module.exports=function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:module.exports=function(t,e){t.super_=e;var o=function(){};o.prototype=e.prototype,t.prototype=new o,t.prototype.constructor=t}; -},{}],33:[function(require,module,exports){ +},{}],34:[function(require,module,exports){ module.exports=function(r){return!(null==r||!(r._isBuffer||r.constructor&&"function"==typeof r.constructor.isBuffer&&r.constructor.isBuffer(r)))}; -},{}],34:[function(require,module,exports){ +},{}],35:[function(require,module,exports){ module.exports=Array.isArray||function(r){return"[object Array]"==Object.prototype.toString.call(r)}; -},{}],35:[function(require,module,exports){ +},{}],36:[function(require,module,exports){ "use strict";var yaml=require("./lib/js-yaml.js");module.exports=yaml; -},{"./lib/js-yaml.js":36}],36:[function(require,module,exports){ +},{"./lib/js-yaml.js":37}],37:[function(require,module,exports){ "use strict";function deprecated(e){return function(){throw new Error("Function "+e+" is deprecated and cannot be used.")}}var loader=require("./js-yaml/loader"),dumper=require("./js-yaml/dumper");module.exports.Type=require("./js-yaml/type"),module.exports.Schema=require("./js-yaml/schema"),module.exports.FAILSAFE_SCHEMA=require("./js-yaml/schema/failsafe"),module.exports.JSON_SCHEMA=require("./js-yaml/schema/json"),module.exports.CORE_SCHEMA=require("./js-yaml/schema/core"),module.exports.DEFAULT_SAFE_SCHEMA=require("./js-yaml/schema/default_safe"),module.exports.DEFAULT_FULL_SCHEMA=require("./js-yaml/schema/default_full"),module.exports.load=loader.load,module.exports.loadAll=loader.loadAll,module.exports.safeLoad=loader.safeLoad,module.exports.safeLoadAll=loader.safeLoadAll,module.exports.dump=dumper.dump,module.exports.safeDump=dumper.safeDump,module.exports.YAMLException=require("./js-yaml/exception"),module.exports.MINIMAL_SCHEMA=require("./js-yaml/schema/failsafe"),module.exports.SAFE_SCHEMA=require("./js-yaml/schema/default_safe"),module.exports.DEFAULT_SCHEMA=require("./js-yaml/schema/default_full"),module.exports.scan=deprecated("scan"),module.exports.parse=deprecated("parse"),module.exports.compose=deprecated("compose"),module.exports.addConstructor=deprecated("addConstructor"); -},{"./js-yaml/dumper":38,"./js-yaml/exception":39,"./js-yaml/loader":40,"./js-yaml/schema":42,"./js-yaml/schema/core":43,"./js-yaml/schema/default_full":44,"./js-yaml/schema/default_safe":45,"./js-yaml/schema/failsafe":46,"./js-yaml/schema/json":47,"./js-yaml/type":48}],37:[function(require,module,exports){ +},{"./js-yaml/dumper":39,"./js-yaml/exception":40,"./js-yaml/loader":41,"./js-yaml/schema":43,"./js-yaml/schema/core":44,"./js-yaml/schema/default_full":45,"./js-yaml/schema/default_safe":46,"./js-yaml/schema/failsafe":47,"./js-yaml/schema/json":48,"./js-yaml/type":49}],38:[function(require,module,exports){ "use strict";function isNothing(e){return"undefined"==typeof e||null===e}function isObject(e){return"object"==typeof e&&null!==e}function toArray(e){return Array.isArray(e)?e:isNothing(e)?[]:[e]}function extend(e,t){var r,o,n,i;if(t)for(i=Object.keys(t),r=0,o=i.length;o>r;r+=1)n=i[r],e[n]=t[n];return e}function repeat(e,t){var r,o="";for(r=0;t>r;r+=1)o+=e;return o}function isNegativeZero(e){return 0===e&&Number.NEGATIVE_INFINITY===1/e}module.exports.isNothing=isNothing,module.exports.isObject=isObject,module.exports.toArray=toArray,module.exports.repeat=repeat,module.exports.isNegativeZero=isNegativeZero,module.exports.extend=extend; -},{}],38:[function(require,module,exports){ +},{}],39:[function(require,module,exports){ "use strict";function compileStyleMap(e,t){var n,i,r,E,o,s,c;if(null===t)return{};for(n={},i=Object.keys(t),r=0,E=i.length;E>r;r+=1)o=i[r],s=String(t[o]),"!!"===o.slice(0,2)&&(o="tag:yaml.org,2002:"+o.slice(2)),c=e.compiledTypeMap[o],c&&_hasOwnProperty.call(c.styleAliases,s)&&(s=c.styleAliases[s]),n[o]=s;return n}function encodeHex(e){var t,n,i;if(t=e.toString(16).toUpperCase(),255>=e)n="x",i=2;else if(65535>=e)n="u",i=4;else{if(!(4294967295>=e))throw new YAMLException("code point within a string may not be greater than 0xFFFFFFFF");n="U",i=8}return"\\"+n+common.repeat("0",i-t.length)+t}function State(e){this.schema=e.schema||DEFAULT_FULL_SCHEMA,this.indent=Math.max(1,e.indent||2),this.skipInvalid=e.skipInvalid||!1,this.flowLevel=common.isNothing(e.flowLevel)?-1:e.flowLevel,this.styleMap=compileStyleMap(this.schema,e.styles||null),this.sortKeys=e.sortKeys||!1,this.lineWidth=e.lineWidth||80,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result="",this.duplicates=[],this.usedDuplicates=null}function indentString(e,t){for(var n,i=common.repeat(" ",t),r=0,E=-1,o="",s=e.length;s>r;)E=e.indexOf("\n",r),-1===E?(n=e.slice(r),r=s):(n=e.slice(r,E+1),r=E+1),n.length&&"\n"!==n&&(o+=i),o+=n;return o}function generateNextLine(e,t){return"\n"+common.repeat(" ",e.indent*t)}function testImplicitResolving(e,t){var n,i,r;for(n=0,i=e.implicitTypes.length;i>n;n+=1)if(r=e.implicitTypes[n],r.resolve(t))return!0;return!1}function StringBuilder(e){this.source=e,this.result="",this.checkpoint=0}function writeScalar(e,t,n,i){var r,E,o,s,c,p,l,u,A,a,C,_,d,f,S,h,R,m,g,N,H;if(0===t.length)return void(e.dump="''");if(-1!==DEPRECATED_BOOLEANS_SYNTAX.indexOf(t))return void(e.dump="'"+t+"'");for(r=!0,E=t.length?t.charCodeAt(0):0,o=CHAR_SPACE===E||CHAR_SPACE===t.charCodeAt(t.length-1),(CHAR_MINUS===E||CHAR_QUESTION===E||CHAR_COMMERCIAL_AT===E||CHAR_GRAVE_ACCENT===E)&&(r=!1),o?(r=!1,s=!1,c=!1):(s=!i,c=!i),p=!0,l=new StringBuilder(t),u=!1,A=0,a=0,C=e.indent*n,_=e.lineWidth,-1===_&&(_=9007199254740991),40>C?_-=C:_=40,f=0;f0&&(R=t.charCodeAt(f-1),R===CHAR_SPACE&&(c=!1,s=!1)),s&&(m=f-A,A=f,m>a&&(a=m))),d!==CHAR_DOUBLE_QUOTE&&(p=!1),l.takeUpTo(f),l.escapeChar())}if(r&&testImplicitResolving(e,t)&&(r=!1),g="",(s||c)&&(N=0,t.charCodeAt(t.length-1)===CHAR_LINE_FEED&&(N+=1,t.charCodeAt(t.length-2)===CHAR_LINE_FEED&&(N+=1)),0===N?g="-":2===N&&(g="+")),c&&_>a&&(s=!1),u||(c=!1),r)e.dump=t;else if(p)e.dump="'"+t+"'";else if(s)H=fold(t,_),e.dump=">"+g+"\n"+indentString(H,C);else if(c)g||(t=t.replace(/\n$/,"")),e.dump="|"+g+"\n"+indentString(t,C);else{if(!l)throw new Error("Failed to dump scalar value");l.finish(),e.dump='"'+l.result+'"'}}function fold(e,t){var n,i="",r=0,E=e.length,o=/\n+$/.exec(e);for(o&&(E=o.index+1);E>r;)n=e.indexOf("\n",r),n>E||-1===n?(i&&(i+="\n\n"),i+=foldLine(e.slice(r,E),t),r=E):(i&&(i+="\n\n"),i+=foldLine(e.slice(r,n),t),r=n+1);return o&&"\n"!==o[0]&&(i+=o[0]),i}function foldLine(e,t){if(""===e)return e;for(var n,i,r,E=/[^\s] [^\s]/g,o="",s=0,c=0,p=E.exec(e);p;)n=p.index,n-c>t&&(i=s!==c?s:n,o&&(o+="\n"),r=e.slice(c,i),o+=r,c=i+1),s=n+1,p=E.exec(e);return o&&(o+="\n"),o+=c!==s&&e.length-c>t?e.slice(c,s)+"\n"+e.slice(s+1):e.slice(c)}function simpleChar(e){return CHAR_TAB!==e&&CHAR_LINE_FEED!==e&&CHAR_CARRIAGE_RETURN!==e&&CHAR_COMMA!==e&&CHAR_LEFT_SQUARE_BRACKET!==e&&CHAR_RIGHT_SQUARE_BRACKET!==e&&CHAR_LEFT_CURLY_BRACKET!==e&&CHAR_RIGHT_CURLY_BRACKET!==e&&CHAR_SHARP!==e&&CHAR_AMPERSAND!==e&&CHAR_ASTERISK!==e&&CHAR_EXCLAMATION!==e&&CHAR_VERTICAL_LINE!==e&&CHAR_GREATER_THAN!==e&&CHAR_SINGLE_QUOTE!==e&&CHAR_DOUBLE_QUOTE!==e&&CHAR_PERCENT!==e&&CHAR_COLON!==e&&!ESCAPE_SEQUENCES[e]&&!needsHexEscape(e)}function needsHexEscape(e){return!(e>=32&&126>=e||133===e||e>=160&&55295>=e||e>=57344&&65533>=e||e>=65536&&1114111>=e)}function writeFlowSequence(e,t,n){var i,r,E="",o=e.tag;for(i=0,r=n.length;r>i;i+=1)writeNode(e,t,n[i],!1,!1)&&(0!==i&&(E+=", "),E+=e.dump);e.tag=o,e.dump="["+E+"]"}function writeBlockSequence(e,t,n,i){var r,E,o="",s=e.tag;for(r=0,E=n.length;E>r;r+=1)writeNode(e,t+1,n[r],!0,!0)&&(i&&0===r||(o+=generateNextLine(e,t)),o+="- "+e.dump);e.tag=s,e.dump=o||"[]"}function writeFlowMapping(e,t,n){var i,r,E,o,s,c="",p=e.tag,l=Object.keys(n);for(i=0,r=l.length;r>i;i+=1)s="",0!==i&&(s+=", "),E=l[i],o=n[E],writeNode(e,t,E,!1,!1)&&(e.dump.length>1024&&(s+="? "),s+=e.dump+": ",writeNode(e,t,o,!1,!1)&&(s+=e.dump,c+=s));e.tag=p,e.dump="{"+c+"}"}function writeBlockMapping(e,t,n,i){var r,E,o,s,c,p,l="",u=e.tag,A=Object.keys(n);if(e.sortKeys===!0)A.sort();else if("function"==typeof e.sortKeys)A.sort(e.sortKeys);else if(e.sortKeys)throw new YAMLException("sortKeys must be a boolean or a function");for(r=0,E=A.length;E>r;r+=1)p="",i&&0===r||(p+=generateNextLine(e,t)),o=A[r],s=n[o],writeNode(e,t+1,o,!0,!0,!0)&&(c=null!==e.tag&&"?"!==e.tag||e.dump&&e.dump.length>1024,c&&(p+=e.dump&&CHAR_LINE_FEED===e.dump.charCodeAt(0)?"?":"? "),p+=e.dump,c&&(p+=generateNextLine(e,t)),writeNode(e,t+1,s,!0,c)&&(p+=e.dump&&CHAR_LINE_FEED===e.dump.charCodeAt(0)?":":": ",p+=e.dump,l+=p));e.tag=u,e.dump=l||"{}"}function detectType(e,t,n){var i,r,E,o,s,c;for(r=n?e.explicitTypes:e.implicitTypes,E=0,o=r.length;o>E;E+=1)if(s=r[E],(s.instanceOf||s.predicate)&&(!s.instanceOf||"object"==typeof t&&t instanceof s.instanceOf)&&(!s.predicate||s.predicate(t))){if(e.tag=n?s.tag:"?",s.represent){if(c=e.styleMap[s.tag]||s.defaultStyle,"[object Function]"===_toString.call(s.represent))i=s.represent(t,c);else{if(!_hasOwnProperty.call(s.represent,c))throw new YAMLException("!<"+s.tag+'> tag resolver accepts not "'+c+'" style');i=s.represent[c](t,c)}e.dump=i}return!0}return!1}function writeNode(e,t,n,i,r,E){e.tag=null,e.dump=n,detectType(e,n,!1)||detectType(e,n,!0);var o=_toString.call(e.dump);i&&(i=0>e.flowLevel||e.flowLevel>t);var s,c,p="[object Object]"===o||"[object Array]"===o;if(p&&(s=e.duplicates.indexOf(n),c=-1!==s),(null!==e.tag&&"?"!==e.tag||c||2!==e.indent&&t>0)&&(r=!1),c&&e.usedDuplicates[s])e.dump="*ref_"+s;else{if(p&&c&&!e.usedDuplicates[s]&&(e.usedDuplicates[s]=!0),"[object Object]"===o)i&&0!==Object.keys(e.dump).length?(writeBlockMapping(e,t,e.dump,r),c&&(e.dump="&ref_"+s+e.dump)):(writeFlowMapping(e,t,e.dump),c&&(e.dump="&ref_"+s+" "+e.dump));else if("[object Array]"===o)i&&0!==e.dump.length?(writeBlockSequence(e,t,e.dump,r),c&&(e.dump="&ref_"+s+e.dump)):(writeFlowSequence(e,t,e.dump),c&&(e.dump="&ref_"+s+" "+e.dump));else{if("[object String]"!==o){if(e.skipInvalid)return!1;throw new YAMLException("unacceptable kind of an object to dump "+o)}"?"!==e.tag&&writeScalar(e,e.dump,t,E)}null!==e.tag&&"?"!==e.tag&&(e.dump="!<"+e.tag+"> "+e.dump)}return!0}function getDuplicateReferences(e,t){var n,i,r=[],E=[];for(inspectNode(e,r,E),n=0,i=E.length;i>n;n+=1)t.duplicates.push(r[E[n]]);t.usedDuplicates=new Array(i)}function inspectNode(e,t,n){var i,r,E;if(null!==e&&"object"==typeof e)if(r=t.indexOf(e),-1!==r)-1===n.indexOf(r)&&n.push(r);else if(t.push(e),Array.isArray(e))for(r=0,E=e.length;E>r;r+=1)inspectNode(e[r],t,n);else for(i=Object.keys(e),r=0,E=i.length;E>r;r+=1)inspectNode(e[i[r]],t,n)}function dump(e,t){t=t||{};var n=new State(t);return getDuplicateReferences(e,n),writeNode(n,0,e,!0,!0)?n.dump+"\n":""}function safeDump(e,t){return dump(e,common.extend({schema:DEFAULT_SAFE_SCHEMA},t))}var common=require("./common"),YAMLException=require("./exception"),DEFAULT_FULL_SCHEMA=require("./schema/default_full"),DEFAULT_SAFE_SCHEMA=require("./schema/default_safe"),_toString=Object.prototype.toString,_hasOwnProperty=Object.prototype.hasOwnProperty,CHAR_TAB=9,CHAR_LINE_FEED=10,CHAR_CARRIAGE_RETURN=13,CHAR_SPACE=32,CHAR_EXCLAMATION=33,CHAR_DOUBLE_QUOTE=34,CHAR_SHARP=35,CHAR_PERCENT=37,CHAR_AMPERSAND=38,CHAR_SINGLE_QUOTE=39,CHAR_ASTERISK=42,CHAR_COMMA=44,CHAR_MINUS=45,CHAR_COLON=58,CHAR_GREATER_THAN=62,CHAR_QUESTION=63,CHAR_COMMERCIAL_AT=64,CHAR_LEFT_SQUARE_BRACKET=91,CHAR_RIGHT_SQUARE_BRACKET=93,CHAR_GRAVE_ACCENT=96,CHAR_LEFT_CURLY_BRACKET=123,CHAR_VERTICAL_LINE=124,CHAR_RIGHT_CURLY_BRACKET=125,ESCAPE_SEQUENCES={};ESCAPE_SEQUENCES[0]="\\0",ESCAPE_SEQUENCES[7]="\\a",ESCAPE_SEQUENCES[8]="\\b",ESCAPE_SEQUENCES[9]="\\t",ESCAPE_SEQUENCES[10]="\\n",ESCAPE_SEQUENCES[11]="\\v",ESCAPE_SEQUENCES[12]="\\f",ESCAPE_SEQUENCES[13]="\\r",ESCAPE_SEQUENCES[27]="\\e",ESCAPE_SEQUENCES[34]='\\"',ESCAPE_SEQUENCES[92]="\\\\",ESCAPE_SEQUENCES[133]="\\N",ESCAPE_SEQUENCES[160]="\\_",ESCAPE_SEQUENCES[8232]="\\L",ESCAPE_SEQUENCES[8233]="\\P";var DEPRECATED_BOOLEANS_SYNTAX=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];StringBuilder.prototype.takeUpTo=function(e){var t;if(e checkpoint"),t.position=e,t.checkpoint=this.checkpoint,t;return this.result+=this.source.slice(this.checkpoint,e),this.checkpoint=e,this},StringBuilder.prototype.escapeChar=function(){var e,t;return e=this.source.charCodeAt(this.checkpoint),t=ESCAPE_SEQUENCES[e]||encodeHex(e),this.result+=t,this.checkpoint+=1,this},StringBuilder.prototype.finish=function(){this.source.length>this.checkpoint&&this.takeUpTo(this.source.length)},module.exports.dump=dump,module.exports.safeDump=safeDump; -},{"./common":37,"./exception":39,"./schema/default_full":44,"./schema/default_safe":45}],39:[function(require,module,exports){ +},{"./common":38,"./exception":40,"./schema/default_full":45,"./schema/default_safe":46}],40:[function(require,module,exports){ "use strict";function YAMLException(r,t){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||"",this.name="YAMLException",this.reason=r,this.mark=t,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():"")}var inherits=require("inherit");inherits(YAMLException,Error),YAMLException.prototype.toString=function(r){var t=this.name+": ";return t+=this.reason||"(unknown reason)",!r&&this.mark&&(t+=" "+this.mark.toString()),t},module.exports=YAMLException; -},{"inherit":30}],40:[function(require,module,exports){ +},{"inherit":31}],41:[function(require,module,exports){ "use strict";function is_EOL(e){return 10===e||13===e}function is_WHITE_SPACE(e){return 9===e||32===e}function is_WS_OR_EOL(e){return 9===e||32===e||10===e||13===e}function is_FLOW_INDICATOR(e){return 44===e||91===e||93===e||123===e||125===e}function fromHexCode(e){var t;return e>=48&&57>=e?e-48:(t=32|e,t>=97&&102>=t?t-97+10:-1)}function escapedHexLen(e){return 120===e?2:117===e?4:85===e?8:0}function fromDecimalCode(e){return e>=48&&57>=e?e-48:-1}function simpleEscapeSequence(e){return 48===e?"\x00":97===e?"":98===e?"\b":116===e?" ":9===e?" ":110===e?"\n":118===e?"\x0B":102===e?"\f":114===e?"\r":101===e?"":32===e?" ":34===e?'"':47===e?"/":92===e?"\\":78===e?"…":95===e?" ":76===e?"\u2028":80===e?"\u2029":""}function charFromCodepoint(e){return 65535>=e?String.fromCharCode(e):String.fromCharCode((e-65536>>10)+55296,(e-65536&1023)+56320)}function State(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||DEFAULT_FULL_SCHEMA,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function generateError(e,t){return new YAMLException(t,new Mark(e.filename,e.input,e.position,e.line,e.position-e.lineStart))}function throwError(e,t){throw generateError(e,t)}function throwWarning(e,t){e.onWarning&&e.onWarning.call(null,generateError(e,t))}function captureSegment(e,t,n,i){var o,r,a,p;if(n>t){if(p=e.input.slice(t,n),i)for(o=0,r=p.length;r>o;o+=1)a=p.charCodeAt(o),9===a||a>=32&&1114111>=a||throwError(e,"expected valid JSON character");else PATTERN_NON_PRINTABLE.test(p)&&throwError(e,"the stream contains non-printable characters");e.result+=p}}function mergeMappings(e,t,n){var i,o,r,a;for(common.isObject(n)||throwError(e,"cannot merge mappings; the provided source object is unacceptable"),i=Object.keys(n),r=0,a=i.length;a>r;r+=1)o=i[r],_hasOwnProperty.call(t,o)||(t[o]=n[o])}function storeMappingPair(e,t,n,i,o){var r,a;if(i=String(i),null===t&&(t={}),"tag:yaml.org,2002:merge"===n)if(Array.isArray(o))for(r=0,a=o.length;a>r;r+=1)mergeMappings(e,t,o[r]);else mergeMappings(e,t,o);else t[i]=o;return t}function readLineBreak(e){var t;t=e.input.charCodeAt(e.position),10===t?e.position++:13===t?(e.position++,10===e.input.charCodeAt(e.position)&&e.position++):throwError(e,"a line break is expected"),e.line+=1,e.lineStart=e.position}function skipSeparationSpace(e,t,n){for(var i=0,o=e.input.charCodeAt(e.position);0!==o;){for(;is_WHITE_SPACE(o);)o=e.input.charCodeAt(++e.position);if(t&&35===o)do o=e.input.charCodeAt(++e.position);while(10!==o&&13!==o&&0!==o);if(!is_EOL(o))break;for(readLineBreak(e),o=e.input.charCodeAt(e.position),i++,e.lineIndent=0;32===o;)e.lineIndent++,o=e.input.charCodeAt(++e.position)}return-1!==n&&0!==i&&e.lineIndent1&&(e.result+=common.repeat("\n",t-1))}function readPlainScalar(e,t,n){var i,o,r,a,p,s,c,l,u,d=e.kind,h=e.result;if(u=e.input.charCodeAt(e.position),is_WS_OR_EOL(u)||is_FLOW_INDICATOR(u)||35===u||38===u||42===u||33===u||124===u||62===u||39===u||34===u||37===u||64===u||96===u)return!1;if((63===u||45===u)&&(o=e.input.charCodeAt(e.position+1),is_WS_OR_EOL(o)||n&&is_FLOW_INDICATOR(o)))return!1;for(e.kind="scalar",e.result="",r=a=e.position,p=!1;0!==u;){if(58===u){if(o=e.input.charCodeAt(e.position+1),is_WS_OR_EOL(o)||n&&is_FLOW_INDICATOR(o))break}else if(35===u){if(i=e.input.charCodeAt(e.position-1),is_WS_OR_EOL(i))break}else{if(e.position===e.lineStart&&testDocumentSeparator(e)||n&&is_FLOW_INDICATOR(u))break;if(is_EOL(u)){if(s=e.line,c=e.lineStart,l=e.lineIndent,skipSeparationSpace(e,!1,-1),e.lineIndent>=t){p=!0,u=e.input.charCodeAt(e.position);continue}e.position=a,e.line=s,e.lineStart=c,e.lineIndent=l;break}}p&&(captureSegment(e,r,a,!1),writeFoldedLines(e,e.line-s),r=a=e.position,p=!1),is_WHITE_SPACE(u)||(a=e.position+1),u=e.input.charCodeAt(++e.position)}return captureSegment(e,r,a,!1),e.result?!0:(e.kind=d,e.result=h,!1)}function readSingleQuotedScalar(e,t){var n,i,o;if(n=e.input.charCodeAt(e.position),39!==n)return!1;for(e.kind="scalar",e.result="",e.position++,i=o=e.position;0!==(n=e.input.charCodeAt(e.position));)if(39===n){if(captureSegment(e,i,e.position,!0),n=e.input.charCodeAt(++e.position),39!==n)return!0;i=o=e.position,e.position++}else is_EOL(n)?(captureSegment(e,i,o,!0),writeFoldedLines(e,skipSeparationSpace(e,!1,t)),i=o=e.position):e.position===e.lineStart&&testDocumentSeparator(e)?throwError(e,"unexpected end of the document within a single quoted scalar"):(e.position++,o=e.position);throwError(e,"unexpected end of the stream within a single quoted scalar")}function readDoubleQuotedScalar(e,t){var n,i,o,r,a,p;if(p=e.input.charCodeAt(e.position),34!==p)return!1;for(e.kind="scalar",e.result="",e.position++,n=i=e.position;0!==(p=e.input.charCodeAt(e.position));){if(34===p)return captureSegment(e,n,e.position,!0),e.position++,!0;if(92===p){if(captureSegment(e,n,e.position,!0),p=e.input.charCodeAt(++e.position),is_EOL(p))skipSeparationSpace(e,!1,t);else if(256>p&&simpleEscapeCheck[p])e.result+=simpleEscapeMap[p],e.position++;else if((a=escapedHexLen(p))>0){for(o=a,r=0;o>0;o--)p=e.input.charCodeAt(++e.position),(a=fromHexCode(p))>=0?r=(r<<4)+a:throwError(e,"expected hexadecimal character");e.result+=charFromCodepoint(r),e.position++}else throwError(e,"unknown escape sequence");n=i=e.position}else is_EOL(p)?(captureSegment(e,n,i,!0),writeFoldedLines(e,skipSeparationSpace(e,!1,t)),n=i=e.position):e.position===e.lineStart&&testDocumentSeparator(e)?throwError(e,"unexpected end of the document within a double quoted scalar"):(e.position++,i=e.position)}throwError(e,"unexpected end of the stream within a double quoted scalar")}function readFlowCollection(e,t){var n,i,o,r,a,p,s,c,l,u,d,h=!0,f=e.tag,_=e.anchor;if(d=e.input.charCodeAt(e.position),91===d)r=93,s=!1,i=[];else{if(123!==d)return!1;r=125,s=!0,i={}}for(null!==e.anchor&&(e.anchorMap[e.anchor]=i),d=e.input.charCodeAt(++e.position);0!==d;){if(skipSeparationSpace(e,!0,t),d=e.input.charCodeAt(e.position),d===r)return e.position++,e.tag=f,e.anchor=_,e.kind=s?"mapping":"sequence",e.result=i,!0;h||throwError(e,"missed comma between flow collection entries"),l=c=u=null,a=p=!1,63===d&&(o=e.input.charCodeAt(e.position+1),is_WS_OR_EOL(o)&&(a=p=!0,e.position++,skipSeparationSpace(e,!0,t))),n=e.line,composeNode(e,t,CONTEXT_FLOW_IN,!1,!0),l=e.tag,c=e.result,skipSeparationSpace(e,!0,t),d=e.input.charCodeAt(e.position),!p&&e.line!==n||58!==d||(a=!0,d=e.input.charCodeAt(++e.position),skipSeparationSpace(e,!0,t),composeNode(e,t,CONTEXT_FLOW_IN,!1,!0),u=e.result),s?storeMappingPair(e,i,l,c,u):a?i.push(storeMappingPair(e,null,l,c,u)):i.push(c),skipSeparationSpace(e,!0,t),d=e.input.charCodeAt(e.position),44===d?(h=!0,d=e.input.charCodeAt(++e.position)):h=!1}throwError(e,"unexpected end of the stream within a flow collection")}function readBlockScalar(e,t){var n,i,o,r,a=CHOMPING_CLIP,p=!1,s=t,c=0,l=!1;if(r=e.input.charCodeAt(e.position),124===r)i=!1;else{if(62!==r)return!1;i=!0}for(e.kind="scalar",e.result="";0!==r;)if(r=e.input.charCodeAt(++e.position),43===r||45===r)CHOMPING_CLIP===a?a=43===r?CHOMPING_KEEP:CHOMPING_STRIP:throwError(e,"repeat of a chomping mode identifier");else{if(!((o=fromDecimalCode(r))>=0))break;0===o?throwError(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):p?throwError(e,"repeat of an indentation width identifier"):(s=t+o-1,p=!0)}if(is_WHITE_SPACE(r)){do r=e.input.charCodeAt(++e.position);while(is_WHITE_SPACE(r));if(35===r)do r=e.input.charCodeAt(++e.position);while(!is_EOL(r)&&0!==r)}for(;0!==r;){for(readLineBreak(e),e.lineIndent=0,r=e.input.charCodeAt(e.position);(!p||e.lineIndents&&(s=e.lineIndent),is_EOL(r))c++;else{if(e.lineIndentt)&&0!==o)throwError(e,"bad indentation of a sequence entry");else if(e.lineIndentt)&&(composeNode(e,t,CONTEXT_BLOCK_OUT,!0,o)&&(h?u=e.result:d=e.result),h||(storeMappingPair(e,c,l,u,d),l=u=d=null),skipSeparationSpace(e,!0,-1),a=e.input.charCodeAt(e.position)),e.lineIndent>t&&0!==a)throwError(e,"bad indentation of a mapping entry");else if(e.lineIndentt?h=1:e.lineIndent===t?h=0:e.lineIndentt?h=1:e.lineIndent===t?h=0:e.lineIndents;s+=1)if(l=e.implicitTypes[s],l.resolve(e.result)){e.result=l.construct(e.result),e.tag=l.tag,null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);break}}else _hasOwnProperty.call(e.typeMap,e.tag)?(l=e.typeMap[e.tag],null!==e.result&&l.kind!==e.kind&&throwError(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+l.kind+'", not "'+e.kind+'"'),l.resolve(e.result)?(e.result=l.construct(e.result),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):throwError(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")):throwError(e,"unknown tag !<"+e.tag+">");return null!==e.tag||null!==e.anchor||_}function readDocument(e){var t,n,i,o,r=e.position,a=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap={},e.anchorMap={};0!==(o=e.input.charCodeAt(e.position))&&(skipSeparationSpace(e,!0,-1),o=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==o));){for(a=!0,o=e.input.charCodeAt(++e.position),t=e.position;0!==o&&!is_WS_OR_EOL(o);)o=e.input.charCodeAt(++e.position);for(n=e.input.slice(t,e.position),i=[],n.length<1&&throwError(e,"directive name must not be less than one character in length");0!==o;){for(;is_WHITE_SPACE(o);)o=e.input.charCodeAt(++e.position);if(35===o){do o=e.input.charCodeAt(++e.position);while(0!==o&&!is_EOL(o));break}if(is_EOL(o))break;for(t=e.position;0!==o&&!is_WS_OR_EOL(o);)o=e.input.charCodeAt(++e.position);i.push(e.input.slice(t,e.position))}0!==o&&readLineBreak(e),_hasOwnProperty.call(directiveHandlers,n)?directiveHandlers[n](e,n,i):throwWarning(e,'unknown document directive "'+n+'"')}return skipSeparationSpace(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,skipSeparationSpace(e,!0,-1)):a&&throwError(e,"directives end mark is expected"),composeNode(e,e.lineIndent-1,CONTEXT_BLOCK_OUT,!1,!0),skipSeparationSpace(e,!0,-1),e.checkLineBreaks&&PATTERN_NON_ASCII_LINE_BREAKS.test(e.input.slice(r,e.position))&&throwWarning(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&testDocumentSeparator(e)?void(46===e.input.charCodeAt(e.position)&&(e.position+=3,skipSeparationSpace(e,!0,-1))):void(e.positioni;i+=1)t(r[i])}function load(e,t){var n=loadDocuments(e,t);if(0!==n.length){if(1===n.length)return n[0];throw new YAMLException("expected a single document in the stream, but found more")}}function safeLoadAll(e,t,n){loadAll(e,t,common.extend({schema:DEFAULT_SAFE_SCHEMA},n))}function safeLoad(e,t){return load(e,common.extend({schema:DEFAULT_SAFE_SCHEMA},t))}for(var common=require("./common"),YAMLException=require("./exception"),Mark=require("./mark"),DEFAULT_SAFE_SCHEMA=require("./schema/default_safe"),DEFAULT_FULL_SCHEMA=require("./schema/default_full"),_hasOwnProperty=Object.prototype.hasOwnProperty,CONTEXT_FLOW_IN=1,CONTEXT_FLOW_OUT=2,CONTEXT_BLOCK_IN=3,CONTEXT_BLOCK_OUT=4,CHOMPING_CLIP=1,CHOMPING_STRIP=2,CHOMPING_KEEP=3,PATTERN_NON_PRINTABLE=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,PATTERN_NON_ASCII_LINE_BREAKS=/[\x85\u2028\u2029]/,PATTERN_FLOW_INDICATORS=/[,\[\]\{\}]/,PATTERN_TAG_HANDLE=/^(?:!|!!|![a-z\-]+!)$/i,PATTERN_TAG_URI=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i,simpleEscapeCheck=new Array(256),simpleEscapeMap=new Array(256),i=0;256>i;i++)simpleEscapeCheck[i]=simpleEscapeSequence(i)?1:0,simpleEscapeMap[i]=simpleEscapeSequence(i);var directiveHandlers={YAML:function(e,t,n){var i,o,r;null!==e.version&&throwError(e,"duplication of %YAML directive"),1!==n.length&&throwError(e,"YAML directive accepts exactly one argument"),i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]),null===i&&throwError(e,"ill-formed argument of the YAML directive"),o=parseInt(i[1],10),r=parseInt(i[2],10),1!==o&&throwError(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=2>r,1!==r&&2!==r&&throwWarning(e,"unsupported YAML version of the document")},TAG:function(e,t,n){var i,o;2!==n.length&&throwError(e,"TAG directive accepts exactly two arguments"),i=n[0],o=n[1],PATTERN_TAG_HANDLE.test(i)||throwError(e,"ill-formed tag handle (first argument) of the TAG directive"),_hasOwnProperty.call(e.tagMap,i)&&throwError(e,'there is a previously declared suffix for "'+i+'" tag handle'),PATTERN_TAG_URI.test(o)||throwError(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[i]=o}};module.exports.loadAll=loadAll,module.exports.load=load,module.exports.safeLoadAll=safeLoadAll,module.exports.safeLoad=safeLoad; -},{"./common":37,"./exception":39,"./mark":41,"./schema/default_full":44,"./schema/default_safe":45}],41:[function(require,module,exports){ +},{"./common":38,"./exception":40,"./mark":42,"./schema/default_full":45,"./schema/default_safe":46}],42:[function(require,module,exports){ "use strict";function Mark(t,i,n,e,r){this.name=t,this.buffer=i,this.position=n,this.line=e,this.column=r}var common=require("./common");Mark.prototype.getSnippet=function(t,i){var n,e,r,o,s;if(!this.buffer)return null;for(t=t||4,i=i||75,n="",e=this.position;e>0&&-1==="\x00\r\n…\u2028\u2029".indexOf(this.buffer.charAt(e-1));)if(e-=1,this.position-e>i/2-1){n=" ... ",e+=5;break}for(r="",o=this.position;oi/2-1){r=" ... ",o-=5;break}return s=this.buffer.slice(e,o),common.repeat(" ",t)+n+s+r+"\n"+common.repeat(" ",t+this.position-e+n.length)+"^"},Mark.prototype.toString=function(t){var i,n="";return this.name&&(n+='in "'+this.name+'" '),n+="at line "+(this.line+1)+", column "+(this.column+1),t||(i=this.getSnippet(),i&&(n+=":\n"+i)),n},module.exports=Mark; -},{"./common":37}],42:[function(require,module,exports){ +},{"./common":38}],43:[function(require,module,exports){ "use strict";function compileList(i,e,t){var c=[];return i.include.forEach(function(i){t=compileList(i,e,t)}),i[e].forEach(function(i){t.forEach(function(e,t){e.tag===i.tag&&c.push(t)}),t.push(i)}),t.filter(function(i,e){return-1===c.indexOf(e)})}function compileMap(){function i(i){c[i.tag]=i}var e,t,c={};for(e=0,t=arguments.length;t>e;e+=1)arguments[e].forEach(i);return c}function Schema(i){this.include=i.include||[],this.implicit=i.implicit||[],this.explicit=i.explicit||[],this.implicit.forEach(function(i){if(i.loadKind&&"scalar"!==i.loadKind)throw new YAMLException("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.")}),this.compiledImplicit=compileList(this,"implicit",[]),this.compiledExplicit=compileList(this,"explicit",[]),this.compiledTypeMap=compileMap(this.compiledImplicit,this.compiledExplicit)}var common=require("./common"),YAMLException=require("./exception"),Type=require("./type");Schema.DEFAULT=null,Schema.create=function(){var i,e;switch(arguments.length){case 1:i=Schema.DEFAULT,e=arguments[0];break;case 2:i=arguments[0],e=arguments[1];break;default:throw new YAMLException("Wrong number of arguments for Schema.create function")}if(i=common.toArray(i),e=common.toArray(e),!i.every(function(i){return i instanceof Schema}))throw new YAMLException("Specified list of super schemas (or a single Schema object) contains a non-Schema object.");if(!e.every(function(i){return i instanceof Type}))throw new YAMLException("Specified list of YAML types (or a single Type object) contains a non-Type object.");return new Schema({include:i,explicit:e})},module.exports=Schema; -},{"./common":37,"./exception":39,"./type":48}],43:[function(require,module,exports){ +},{"./common":38,"./exception":40,"./type":49}],44:[function(require,module,exports){ "use strict";var Schema=require("../schema");module.exports=new Schema({include:[require("./json")]}); -},{"../schema":42,"./json":47}],44:[function(require,module,exports){ +},{"../schema":43,"./json":48}],45:[function(require,module,exports){ "use strict";var Schema=require("../schema");module.exports=Schema.DEFAULT=new Schema({include:[require("./default_safe")],explicit:[require("../type/js/undefined"),require("../type/js/regexp"),require("../type/js/function")]}); -},{"../schema":42,"../type/js/function":53,"../type/js/regexp":54,"../type/js/undefined":55,"./default_safe":45}],45:[function(require,module,exports){ +},{"../schema":43,"../type/js/function":54,"../type/js/regexp":55,"../type/js/undefined":56,"./default_safe":46}],46:[function(require,module,exports){ "use strict";var Schema=require("../schema");module.exports=new Schema({include:[require("./core")],implicit:[require("../type/timestamp"),require("../type/merge")],explicit:[require("../type/binary"),require("../type/omap"),require("../type/pairs"),require("../type/set")]}); -},{"../schema":42,"../type/binary":49,"../type/merge":57,"../type/omap":59,"../type/pairs":60,"../type/set":62,"../type/timestamp":64,"./core":43}],46:[function(require,module,exports){ +},{"../schema":43,"../type/binary":50,"../type/merge":58,"../type/omap":60,"../type/pairs":61,"../type/set":63,"../type/timestamp":65,"./core":44}],47:[function(require,module,exports){ "use strict";var Schema=require("../schema");module.exports=new Schema({explicit:[require("../type/str"),require("../type/seq"),require("../type/map")]}); -},{"../schema":42,"../type/map":56,"../type/seq":61,"../type/str":63}],47:[function(require,module,exports){ +},{"../schema":43,"../type/map":57,"../type/seq":62,"../type/str":64}],48:[function(require,module,exports){ "use strict";var Schema=require("../schema");module.exports=new Schema({include:[require("./failsafe")],implicit:[require("../type/null"),require("../type/bool"),require("../type/int"),require("../type/float")]}); -},{"../schema":42,"../type/bool":50,"../type/float":51,"../type/int":52,"../type/null":58,"./failsafe":46}],48:[function(require,module,exports){ +},{"../schema":43,"../type/bool":51,"../type/float":52,"../type/int":53,"../type/null":59,"./failsafe":47}],49:[function(require,module,exports){ "use strict";function compileStyleAliases(e){var t={};return null!==e&&Object.keys(e).forEach(function(n){e[n].forEach(function(e){t[String(e)]=n})}),t}function Type(e,t){if(t=t||{},Object.keys(t).forEach(function(t){if(-1===TYPE_CONSTRUCTOR_OPTIONS.indexOf(t))throw new YAMLException('Unknown option "'+t+'" is met in definition of "'+e+'" YAML type.')}),this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(e){return e},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.defaultStyle=t.defaultStyle||null,this.styleAliases=compileStyleAliases(t.styleAliases||null),-1===YAML_NODE_KINDS.indexOf(this.kind))throw new YAMLException('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')}var YAMLException=require("./exception"),TYPE_CONSTRUCTOR_OPTIONS=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],YAML_NODE_KINDS=["scalar","sequence","mapping"];module.exports=Type; -},{"./exception":39}],49:[function(require,module,exports){ +},{"./exception":40}],50:[function(require,module,exports){ "use strict";function resolveYamlBinary(r){if(null===r)return!1;var e,n,u=0,t=r.length,f=BASE64_MAP;for(n=0;t>n;n++)if(e=f.indexOf(r.charAt(n)),!(e>64)){if(0>e)return!1;u+=6}return u%8===0}function constructYamlBinary(r){var e,n,u=r.replace(/[\r\n=]/g,""),t=u.length,f=BASE64_MAP,a=0,i=[];for(e=0;t>e;e++)e%4===0&&e&&(i.push(a>>16&255),i.push(a>>8&255),i.push(255&a)),a=a<<6|f.indexOf(u.charAt(e));return n=t%4*6,0===n?(i.push(a>>16&255),i.push(a>>8&255),i.push(255&a)):18===n?(i.push(a>>10&255),i.push(a>>2&255)):12===n&&i.push(a>>4&255),NodeBuffer?new NodeBuffer(i):i}function representYamlBinary(r){var e,n,u="",t=0,f=r.length,a=BASE64_MAP;for(e=0;f>e;e++)e%3===0&&e&&(u+=a[t>>18&63],u+=a[t>>12&63],u+=a[t>>6&63],u+=a[63&t]),t=(t<<8)+r[e];return n=f%3,0===n?(u+=a[t>>18&63],u+=a[t>>12&63],u+=a[t>>6&63],u+=a[63&t]):2===n?(u+=a[t>>10&63],u+=a[t>>4&63],u+=a[t<<2&63],u+=a[64]):1===n&&(u+=a[t>>2&63],u+=a[t<<4&63],u+=a[64],u+=a[64]),u}function isBinary(r){return NodeBuffer&&NodeBuffer.isBuffer(r)}var NodeBuffer=require("buffer").Buffer,Type=require("../type"),BASE64_MAP="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";module.exports=new Type("tag:yaml.org,2002:binary",{kind:"scalar",resolve:resolveYamlBinary,construct:constructYamlBinary,predicate:isBinary,represent:representYamlBinary}); -},{"../type":48,"buffer":16}],50:[function(require,module,exports){ +},{"../type":49,"buffer":17}],51:[function(require,module,exports){ "use strict";function resolveYamlBoolean(e){if(null===e)return!1;var r=e.length;return 4===r&&("true"===e||"True"===e||"TRUE"===e)||5===r&&("false"===e||"False"===e||"FALSE"===e)}function constructYamlBoolean(e){return"true"===e||"True"===e||"TRUE"===e}function isBoolean(e){return"[object Boolean]"===Object.prototype.toString.call(e)}var Type=require("../type");module.exports=new Type("tag:yaml.org,2002:bool",{kind:"scalar",resolve:resolveYamlBoolean,construct:constructYamlBoolean,predicate:isBoolean,represent:{lowercase:function(e){return e?"true":"false"},uppercase:function(e){return e?"TRUE":"FALSE"},camelcase:function(e){return e?"True":"False"}},defaultStyle:"lowercase"}); -},{"../type":48}],51:[function(require,module,exports){ +},{"../type":49}],52:[function(require,module,exports){ "use strict";function resolveYamlFloat(e){return null===e?!1:YAML_FLOAT_PATTERN.test(e)?!0:!1}function constructYamlFloat(e){var r,t,a,n;return r=e.replace(/_/g,"").toLowerCase(),t="-"===r[0]?-1:1,n=[],0<="+-".indexOf(r[0])&&(r=r.slice(1)),".inf"===r?1===t?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===r?NaN:0<=r.indexOf(":")?(r.split(":").forEach(function(e){n.unshift(parseFloat(e,10))}),r=0,a=1,n.forEach(function(e){r+=e*a,a*=60}),t*r):t*parseFloat(r,10)}function representYamlFloat(e,r){var t;if(isNaN(e))switch(r){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(r){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(r){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(common.isNegativeZero(e))return"-0.0";return t=e.toString(10),SCIENTIFIC_WITHOUT_DOT.test(t)?t.replace("e",".e"):t}function isFloat(e){return"[object Number]"===Object.prototype.toString.call(e)&&(0!==e%1||common.isNegativeZero(e))}var common=require("../common"),Type=require("../type"),YAML_FLOAT_PATTERN=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)\\.[0-9_]*(?:[eE][-+][0-9]+)?|\\.[0-9_]+(?:[eE][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"),SCIENTIFIC_WITHOUT_DOT=/^[-+]?[0-9]+e/;module.exports=new Type("tag:yaml.org,2002:float",{kind:"scalar",resolve:resolveYamlFloat,construct:constructYamlFloat,predicate:isFloat,represent:representYamlFloat,defaultStyle:"lowercase"}); -},{"../common":37,"../type":48}],52:[function(require,module,exports){ +},{"../common":38,"../type":49}],53:[function(require,module,exports){ "use strict";function isHexCode(e){return e>=48&&57>=e||e>=65&&70>=e||e>=97&&102>=e}function isOctCode(e){return e>=48&&55>=e}function isDecCode(e){return e>=48&&57>=e}function resolveYamlInteger(e){if(null===e)return!1;var r,t=e.length,n=0,i=!1;if(!t)return!1;if(r=e[n],("-"===r||"+"===r)&&(r=e[++n]),"0"===r){if(n+1===t)return!0;if(r=e[++n],"b"===r){for(n++;t>n;n++)if(r=e[n],"_"!==r){if("0"!==r&&"1"!==r)return!1;i=!0}return i}if("x"===r){for(n++;t>n;n++)if(r=e[n],"_"!==r){if(!isHexCode(e.charCodeAt(n)))return!1;i=!0}return i}for(;t>n;n++)if(r=e[n],"_"!==r){if(!isOctCode(e.charCodeAt(n)))return!1;i=!0}return i}for(;t>n;n++)if(r=e[n],"_"!==r){if(":"===r)break;if(!isDecCode(e.charCodeAt(n)))return!1;i=!0}return i?":"!==r?!0:/^(:[0-5]?[0-9])+$/.test(e.slice(n)):!1}function constructYamlInteger(e){var r,t,n=e,i=1,o=[];return-1!==n.indexOf("_")&&(n=n.replace(/_/g,"")),r=n[0],("-"===r||"+"===r)&&("-"===r&&(i=-1),n=n.slice(1),r=n[0]),"0"===n?0:"0"===r?"b"===n[1]?i*parseInt(n.slice(2),2):"x"===n[1]?i*parseInt(n,16):i*parseInt(n,8):-1!==n.indexOf(":")?(n.split(":").forEach(function(e){o.unshift(parseInt(e,10))}),n=0,t=1,o.forEach(function(e){n+=e*t,t*=60}),i*n):i*parseInt(n,10)}function isInteger(e){return"[object Number]"===Object.prototype.toString.call(e)&&0===e%1&&!common.isNegativeZero(e)}var common=require("../common"),Type=require("../type");module.exports=new Type("tag:yaml.org,2002:int",{kind:"scalar",resolve:resolveYamlInteger,construct:constructYamlInteger,predicate:isInteger,represent:{binary:function(e){return"0b"+e.toString(2)},octal:function(e){return"0"+e.toString(8)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return"0x"+e.toString(16).toUpperCase()}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}); -},{"../common":37,"../type":48}],53:[function(require,module,exports){ +},{"../common":38,"../type":49}],54:[function(require,module,exports){ "use strict";function resolveJavascriptFunction(e){if(null===e)return!1;try{var r="("+e+")",n=esprima.parse(r,{range:!0});return"Program"!==n.type||1!==n.body.length||"ExpressionStatement"!==n.body[0].type||"FunctionExpression"!==n.body[0].expression.type?!1:!0}catch(t){return!1}}function constructJavascriptFunction(e){var r,n="("+e+")",t=esprima.parse(n,{range:!0}),o=[];if("Program"!==t.type||1!==t.body.length||"ExpressionStatement"!==t.body[0].type||"FunctionExpression"!==t.body[0].expression.type)throw new Error("Failed to resolve function");return t.body[0].expression.params.forEach(function(e){o.push(e.name)}),r=t.body[0].expression.body.range,new Function(o,n.slice(r[0]+1,r[1]-1))}function representJavascriptFunction(e){return e.toString()}function isFunction(e){return"[object Function]"===Object.prototype.toString.call(e)}var esprima;try{esprima=require("esprima")}catch(_){"undefined"!=typeof window&&(esprima=window.esprima)}var Type=require("../../type");module.exports=new Type("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:resolveJavascriptFunction,construct:constructJavascriptFunction,predicate:isFunction,represent:representJavascriptFunction}); -},{"../../type":48,"esprima":26}],54:[function(require,module,exports){ +},{"../../type":49,"esprima":27}],55:[function(require,module,exports){ "use strict";function resolveJavascriptRegExp(e){if(null===e)return!1;if(0===e.length)return!1;var r=e,t=/\/([gim]*)$/.exec(e),n="";if("/"===r[0]){if(t&&(n=t[1]),n.length>3)return!1;if("/"!==r[r.length-n.length-1])return!1;r=r.slice(1,r.length-n.length-1)}try{return!0}catch(i){return!1}}function constructJavascriptRegExp(e){var r=e,t=/\/([gim]*)$/.exec(e),n="";return"/"===r[0]&&(t&&(n=t[1]),r=r.slice(1,r.length-n.length-1)),new RegExp(r,n)}function representJavascriptRegExp(e){var r="/"+e.source+"/";return e.global&&(r+="g"),e.multiline&&(r+="m"),e.ignoreCase&&(r+="i"),r}function isRegExp(e){return"[object RegExp]"===Object.prototype.toString.call(e)}var Type=require("../../type");module.exports=new Type("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:resolveJavascriptRegExp,construct:constructJavascriptRegExp,predicate:isRegExp,represent:representJavascriptRegExp}); -},{"../../type":48}],55:[function(require,module,exports){ +},{"../../type":49}],56:[function(require,module,exports){ "use strict";function resolveJavascriptUndefined(){return!0}function constructJavascriptUndefined(){}function representJavascriptUndefined(){return""}function isUndefined(e){return"undefined"==typeof e}var Type=require("../../type");module.exports=new Type("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:resolveJavascriptUndefined,construct:constructJavascriptUndefined,predicate:isUndefined,represent:representJavascriptUndefined}); -},{"../../type":48}],56:[function(require,module,exports){ +},{"../../type":49}],57:[function(require,module,exports){ "use strict";var Type=require("../type");module.exports=new Type("tag:yaml.org,2002:map",{kind:"mapping",construct:function(e){return null!==e?e:{}}}); -},{"../type":48}],57:[function(require,module,exports){ +},{"../type":49}],58:[function(require,module,exports){ "use strict";function resolveYamlMerge(e){return"<<"===e||null===e}var Type=require("../type");module.exports=new Type("tag:yaml.org,2002:merge",{kind:"scalar",resolve:resolveYamlMerge}); -},{"../type":48}],58:[function(require,module,exports){ +},{"../type":49}],59:[function(require,module,exports){ "use strict";function resolveYamlNull(l){if(null===l)return!0;var e=l.length;return 1===e&&"~"===l||4===e&&("null"===l||"Null"===l||"NULL"===l)}function constructYamlNull(){return null}function isNull(l){return null===l}var Type=require("../type");module.exports=new Type("tag:yaml.org,2002:null",{kind:"scalar",resolve:resolveYamlNull,construct:constructYamlNull,predicate:isNull,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"}); -},{"../type":48}],59:[function(require,module,exports){ +},{"../type":49}],60:[function(require,module,exports){ "use strict";function resolveYamlOmap(r){if(null===r)return!0;var t,e,n,o,u,a=[],l=r;for(t=0,e=l.length;e>t;t+=1){if(n=l[t],u=!1,"[object Object]"!==_toString.call(n))return!1;for(o in n)if(_hasOwnProperty.call(n,o)){if(u)return!1;u=!0}if(!u)return!1;if(-1!==a.indexOf(o))return!1;a.push(o)}return!0}function constructYamlOmap(r){return null!==r?r:[]}var Type=require("../type"),_hasOwnProperty=Object.prototype.hasOwnProperty,_toString=Object.prototype.toString;module.exports=new Type("tag:yaml.org,2002:omap",{kind:"sequence",resolve:resolveYamlOmap,construct:constructYamlOmap}); -},{"../type":48}],60:[function(require,module,exports){ +},{"../type":49}],61:[function(require,module,exports){ "use strict";function resolveYamlPairs(r){if(null===r)return!0;var e,t,n,l,o,a=r;for(o=new Array(a.length),e=0,t=a.length;t>e;e+=1){if(n=a[e],"[object Object]"!==_toString.call(n))return!1;if(l=Object.keys(n),1!==l.length)return!1;o[e]=[l[0],n[l[0]]]}return!0}function constructYamlPairs(r){if(null===r)return[];var e,t,n,l,o,a=r;for(o=new Array(a.length),e=0,t=a.length;t>e;e+=1)n=a[e],l=Object.keys(n),o[e]=[l[0],n[l[0]]];return o}var Type=require("../type"),_toString=Object.prototype.toString;module.exports=new Type("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:resolveYamlPairs,construct:constructYamlPairs}); -},{"../type":48}],61:[function(require,module,exports){ +},{"../type":49}],62:[function(require,module,exports){ "use strict";var Type=require("../type");module.exports=new Type("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(e){return null!==e?e:[]}}); -},{"../type":48}],62:[function(require,module,exports){ +},{"../type":49}],63:[function(require,module,exports){ "use strict";function resolveYamlSet(e){if(null===e)return!0;var r,t=e;for(r in t)if(_hasOwnProperty.call(t,r)&&null!==t[r])return!1;return!0}function constructYamlSet(e){return null!==e?e:{}}var Type=require("../type"),_hasOwnProperty=Object.prototype.hasOwnProperty;module.exports=new Type("tag:yaml.org,2002:set",{kind:"mapping",resolve:resolveYamlSet,construct:constructYamlSet}); -},{"../type":48}],63:[function(require,module,exports){ +},{"../type":49}],64:[function(require,module,exports){ "use strict";var Type=require("../type");module.exports=new Type("tag:yaml.org,2002:str",{kind:"scalar",construct:function(r){return null!==r?r:""}}); -},{"../type":48}],64:[function(require,module,exports){ +},{"../type":49}],65:[function(require,module,exports){ "use strict";function resolveYamlTimestamp(e){return null===e?!1:null===YAML_TIMESTAMP_REGEXP.exec(e)?!1:!0}function constructYamlTimestamp(e){var t,r,n,a,m,s,l,i,T,o,u=0,c=null;if(t=YAML_TIMESTAMP_REGEXP.exec(e),null===t)throw new Error("Date resolve error");if(r=+t[1],n=+t[2]-1,a=+t[3],!t[4])return new Date(Date.UTC(r,n,a));if(m=+t[4],s=+t[5],l=+t[6],t[7]){for(u=t[7].slice(0,3);u.length<3;)u+="0";u=+u}return t[9]&&(i=+t[10],T=+(t[11]||0),c=6e4*(60*i+T),"-"===t[9]&&(c=-c)),o=new Date(Date.UTC(r,n,a,m,s,l,u)),c&&o.setTime(o.getTime()-c),o}function representYamlTimestamp(e){return e.toISOString()}var Type=require("../type"),YAML_TIMESTAMP_REGEXP=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?)?$");module.exports=new Type("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:resolveYamlTimestamp,construct:constructYamlTimestamp,instanceOf:Date,represent:representYamlTimestamp}); -},{"../type":48}],65:[function(require,module,exports){ +},{"../type":49}],66:[function(require,module,exports){ function parse(e){if(e=""+e,!(e.length>1e4)){var a=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(a){var r=parseFloat(a[1]),c=(a[2]||"ms").toLowerCase();switch(c){case"years":case"year":case"yrs":case"yr":case"y":return r*y;case"days":case"day":case"d":return r*d;case"hours":case"hour":case"hrs":case"hr":case"h":return r*h;case"minutes":case"minute":case"mins":case"min":case"m":return r*m;case"seconds":case"second":case"secs":case"sec":case"s":return r*s;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r}}}}function short(e){return e>=d?Math.round(e/d)+"d":e>=h?Math.round(e/h)+"h":e>=m?Math.round(e/m)+"m":e>=s?Math.round(e/s)+"s":e+"ms"}function long(e){return plural(e,d,"day")||plural(e,h,"hour")||plural(e,m,"minute")||plural(e,s,"second")||e+" ms"}function plural(s,e,a){return e>s?void 0:1.5*e>s?Math.floor(s/e)+" "+a:Math.ceil(s/e)+" "+a+"s"}var s=1e3,m=60*s,h=60*m,d=24*h,y=365.25*d;module.exports=function(s,e){return e=e||{},"string"==typeof s?parse(s):e["long"]?long(s):short(s)}; -},{}],66:[function(require,module,exports){ +},{}],67:[function(require,module,exports){ /**! * Ono v2.0.1 * @@ -253,113 +256,113 @@ function parse(e){if(e=""+e,!(e.length>1e4)){var a=/^((?:\d+)?\.?\d+) *(millisec */ "use strict";function create(r){return function(e,t,o,n){var a,c=module.exports.formatter;"string"==typeof e?(a=c.apply(null,arguments),e=t=void 0):a="string"==typeof t?c.apply(null,slice.call(arguments,1)):c.apply(null,slice.call(arguments,2)),e instanceof Error||(t=e,e=void 0),e&&(a+=(a?" \n":"")+e.message);var i=new r(a);return extendError(i,e),extendToJSON(i),extend(i,t),i}}function extendError(r,e){if(e){var t=e.stack;t&&(r.stack+=" \n\n"+e.stack),extend(r,e,!0)}}function extendToJSON(r){r.toJSON=errorToJSON,r.inspect=errorToJSON}function extend(r,e,t){if(e&&"object"==typeof e)for(var o=Object.keys(e),n=0;n=0))try{r[a]=e[a]}catch(c){}}}function errorToJSON(){var r={},e=Object.keys(this);e=e.concat(vendorSpecificErrorProperties);for(var t=0;t1)for(var r=1;r1&&(t=r[0]+"@",e=r[1]),e=e.replace(S,".");var u=e.split("."),i=n(u,o).join(".");return t+i}function t(e){for(var o,n,r=[],t=0,u=e.length;u>t;)o=e.charCodeAt(t++),o>=55296&&56319>=o&&u>t?(n=e.charCodeAt(t++),56320==(64512&n)?r.push(((1023&o)<<10)+(1023&n)+65536):(r.push(o),t--)):r.push(o);return r}function u(e){return n(e,function(e){var o="";return e>65535&&(e-=65536,o+=P(e>>>10&1023|55296),e=56320|1023&e),o+=P(e)}).join("")}function i(e){return 10>e-48?e-22:26>e-65?e-65:26>e-97?e-97:b}function f(e,o){return e+22+75*(26>e)-((0!=o)<<5)}function c(e,o,n){var r=0;for(e=n?M(e/j):e>>1,e+=M(e/o);e>L*C>>1;r+=b)e=M(e/L);return M(r+(L+1)*e/(e+m))}function l(e){var n,r,t,f,l,s,d,a,p,h,v=[],g=e.length,w=0,m=I,j=A;for(r=e.lastIndexOf(E),0>r&&(r=0),t=0;r>t;++t)e.charCodeAt(t)>=128&&o("not-basic"),v.push(e.charCodeAt(t));for(f=r>0?r+1:0;g>f;){for(l=w,s=1,d=b;f>=g&&o("invalid-input"),a=i(e.charCodeAt(f++)),(a>=b||a>M((x-w)/s))&&o("overflow"),w+=a*s,p=j>=d?y:d>=j+C?C:d-j,!(p>a);d+=b)h=b-p,s>M(x/h)&&o("overflow"),s*=h;n=v.length+1,j=c(w-l,n,0==l),M(w/n)>x-m&&o("overflow"),m+=M(w/n),w%=n,v.splice(w++,0,m)}return u(v)}function s(e){var n,r,u,i,l,s,d,a,p,h,v,g,w,m,j,F=[];for(e=t(e),g=e.length,n=I,r=0,l=A,s=0;g>s;++s)v=e[s],128>v&&F.push(P(v));for(u=i=F.length,i&&F.push(E);g>u;){for(d=x,s=0;g>s;++s)v=e[s],v>=n&&d>v&&(d=v);for(w=u+1,d-n>M((x-r)/w)&&o("overflow"),r+=(d-n)*w,n=d,s=0;g>s;++s)if(v=e[s],n>v&&++r>x&&o("overflow"),v==n){for(a=r,p=b;h=l>=p?y:p>=l+C?C:p-l,!(h>a);p+=b)j=a-h,m=b-h,F.push(P(f(h+j%m,0))),a=M(j/m);F.push(P(f(a,0))),l=c(r,w,u==i),r=0,++u}++r,++n}return F.join("")}function d(e){return r(e,function(e){return F.test(e)?l(e.slice(4).toLowerCase()):e})}function a(e){return r(e,function(e){return O.test(e)?"xn--"+s(e):e})}var p="object"==typeof exports&&exports&&!exports.nodeType&&exports,h="object"==typeof module&&module&&!module.nodeType&&module,v="object"==typeof global&&global;(v.global===v||v.window===v||v.self===v)&&(e=v);var g,w,x=2147483647,b=36,y=1,C=26,m=38,j=700,A=72,I=128,E="-",F=/^xn--/,O=/[^\x20-\x7E]/,S=/[\x2E\u3002\uFF0E\uFF61]/g,T={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},L=b-y,M=Math.floor,P=String.fromCharCode;if(g={version:"1.3.2",ucs2:{decode:t,encode:u},decode:l,encode:s,toASCII:a,toUnicode:d},"function"==typeof define&&"object"==typeof define.amd&&define.amd)define("punycode",function(){return g});else if(p&&h)if(module.exports==p)h.exports=g;else for(w in g)g.hasOwnProperty(w)&&(p[w]=g[w]);else e.punycode=g}(this); }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],70:[function(require,module,exports){ +},{}],71:[function(require,module,exports){ "use strict";function hasOwnProperty(r,e){return Object.prototype.hasOwnProperty.call(r,e)}module.exports=function(r,e,t,n){e=e||"&",t=t||"=";var o={};if("string"!=typeof r||0===r.length)return o;var a=/\+/g;r=r.split(e);var s=1e3;n&&"number"==typeof n.maxKeys&&(s=n.maxKeys);var p=r.length;s>0&&p>s&&(p=s);for(var y=0;p>y;++y){var u,c,i,l,f=r[y].replace(a,"%20"),v=f.indexOf(t);v>=0?(u=f.substr(0,v),c=f.substr(v+1)):(u=f,c=""),i=decodeURIComponent(u),l=decodeURIComponent(c),hasOwnProperty(o,i)?isArray(o[i])?o[i].push(l):o[i]=[o[i],l]:o[i]=l}return o};var isArray=Array.isArray||function(r){return"[object Array]"===Object.prototype.toString.call(r)}; -},{}],71:[function(require,module,exports){ +},{}],72:[function(require,module,exports){ "use strict";function map(r,e){if(r.map)return r.map(e);for(var t=[],n=0;nr;r++)t(e[r],r)}var objectKeys=Object.keys||function(e){var t=[];for(var r in e)t.push(r);return t};module.exports=Duplex;var processNextTick=require("process-nextick-args"),util=require("core-util-is");util.inherits=require("inherits");var Readable=require("./_stream_readable"),Writable=require("./_stream_writable");util.inherits(Duplex,Readable);for(var keys=objectKeys(Writable.prototype),v=0;v0)if(t.ended&&!a){var d=new Error("stream.push() after EOF");e.emit("error",d)}else if(t.endEmitted&&a){var d=new Error("stream.unshift() after end event");e.emit("error",d)}else!t.decoder||a||n||(r=t.decoder.write(r)),a||(t.reading=!1),t.flowing&&0===t.length&&!t.sync?(e.emit("data",r),e.read(0)):(t.length+=t.objectMode?1:r.length,a?t.buffer.unshift(r):t.buffer.push(r),t.needReadable&&emitReadable(e)),maybeReadMore(e,t);else a||(t.reading=!1);return needMoreData(t)}function needMoreData(e){return!e.ended&&(e.needReadable||e.length=MAX_HWM?e=MAX_HWM:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}function howMuchToRead(e,t){return 0===t.length&&t.ended?0:t.objectMode?0===e?0:1:null===e||isNaN(e)?t.flowing&&t.buffer.length?t.buffer[0].length:t.length:0>=e?0:(e>t.highWaterMark&&(t.highWaterMark=computeNewHighWaterMark(e)),e>t.length?t.ended?t.length:(t.needReadable=!0,0):e)}function chunkInvalid(e,t){var r=null;return Buffer.isBuffer(t)||"string"==typeof t||null===t||void 0===t||e.objectMode||(r=new TypeError("Invalid non-string/buffer chunk")),r}function onEofChunk(e,t){if(!t.ended){if(t.decoder){var r=t.decoder.end();r&&r.length&&(t.buffer.push(r),t.length+=t.objectMode?1:r.length)}t.ended=!0,emitReadable(e)}}function emitReadable(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(debug("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?processNextTick(emitReadable_,e):emitReadable_(e))}function emitReadable_(e){debug("emit readable"),e.emit("readable"),flow(e)}function maybeReadMore(e,t){t.readingMore||(t.readingMore=!0,processNextTick(maybeReadMore_,e,t))}function maybeReadMore_(e,t){for(var r=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=a)r=i?n.join(""):1===n.length?n[0]:Buffer.concat(n,a),n.length=0;else if(eu&&e>l;u++){var o=n[0],h=Math.min(e-l,o.length);i?r+=o.slice(0,h):o.copy(r,l,0,h),h0)throw new Error("endReadable called on non-empty stream");t.endEmitted||(t.ended=!0,processNextTick(endReadableNT,t,e))}function endReadableNT(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function forEach(e,t){for(var r=0,n=e.length;n>r;r++)t(e[r],r)}function indexOf(e,t){for(var r=0,n=e.length;n>r;r++)if(e[r]===t)return r;return-1}module.exports=Readable;var processNextTick=require("process-nextick-args"),isArray=require("isarray"),Buffer=require("buffer").Buffer;Readable.ReadableState=ReadableState;var EE=require("events"),EElistenerCount=function(e,t){return e.listeners(t).length},Stream;!function(){try{Stream=require("stream")}catch(e){}finally{Stream||(Stream=require("events").EventEmitter)}}();var Buffer=require("buffer").Buffer,util=require("core-util-is");util.inherits=require("inherits");var debugUtil=require("util"),debug;debug=debugUtil&&debugUtil.debuglog?debugUtil.debuglog("stream"):function(){};var StringDecoder;util.inherits(Readable,Stream);var Duplex,Duplex;Readable.prototype.push=function(e,t){var r=this._readableState;return r.objectMode||"string"!=typeof e||(t=t||r.defaultEncoding,t!==r.encoding&&(e=new Buffer(e,t),t="")),readableAddChunk(this,r,e,t,!1)},Readable.prototype.unshift=function(e){var t=this._readableState;return readableAddChunk(this,t,e,"",!0)},Readable.prototype.isPaused=function(){return this._readableState.flowing===!1},Readable.prototype.setEncoding=function(e){return StringDecoder||(StringDecoder=require("string_decoder/").StringDecoder),this._readableState.decoder=new StringDecoder(e),this._readableState.encoding=e,this};var MAX_HWM=8388608;Readable.prototype.read=function(e){debug("read",e);var t=this._readableState,r=e;if(("number"!=typeof e||e>0)&&(t.emittedReadable=!1),0===e&&t.needReadable&&(t.length>=t.highWaterMark||t.ended))return debug("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?endReadable(this):emitReadable(this),null;if(e=howMuchToRead(e,t),0===e&&t.ended)return 0===t.length&&endReadable(this),null;var n=t.needReadable;debug("need readable",n),(0===t.length||t.length-e0?fromList(e,t):null,null===a&&(t.needReadable=!0,e=0),t.length-=e,0!==t.length||t.ended||(t.needReadable=!0),r!==e&&t.ended&&0===t.length&&endReadable(this),null!==a&&this.emit("data",a),a},Readable.prototype._read=function(e){this.emit("error",new Error("not implemented"))},Readable.prototype.pipe=function(e,t){function r(e){debug("onunpipe"),e===s&&a()}function n(){debug("onend"),e.end()}function a(){debug("cleanup"),e.removeListener("close",o),e.removeListener("finish",l),e.removeListener("drain",c),e.removeListener("error",d),e.removeListener("unpipe",r),s.removeListener("end",n),s.removeListener("end",a),s.removeListener("data",i),g=!0,!h.awaitDrain||e._writableState&&!e._writableState.needDrain||c()}function i(t){debug("ondata");var r=e.write(t);!1===r&&(1!==h.pipesCount||h.pipes[0]!==e||1!==s.listenerCount("data")||g||(debug("false write response, pause",s._readableState.awaitDrain),s._readableState.awaitDrain++),s.pause())}function d(t){debug("onerror",t),u(),e.removeListener("error",d),0===EElistenerCount(e,"error")&&e.emit("error",t)}function o(){e.removeListener("finish",l),u()}function l(){debug("onfinish"),e.removeListener("close",o),u()}function u(){debug("unpipe"),s.unpipe(e)}var s=this,h=this._readableState;switch(h.pipesCount){case 0:h.pipes=e;break;case 1:h.pipes=[h.pipes,e];break;default:h.pipes.push(e)}h.pipesCount+=1,debug("pipe count=%d opts=%j",h.pipesCount,t);var f=(!t||t.end!==!1)&&e!==process.stdout&&e!==process.stderr,p=f?n:a;h.endEmitted?processNextTick(p):s.once("end",p),e.on("unpipe",r);var c=pipeOnDrain(s);e.on("drain",c);var g=!1;return s.on("data",i),e._events&&e._events.error?isArray(e._events.error)?e._events.error.unshift(d):e._events.error=[d,e._events.error]:e.on("error",d),e.once("close",o),e.once("finish",l),e.emit("pipe",s),h.flowing||(debug("pipe resume"),s.resume()),e},Readable.prototype.unpipe=function(e){var t=this._readableState;if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes?this:(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this),this);if(!e){var r=t.pipes,n=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var a=0;n>a;a++)r[a].emit("unpipe",this);return this}var a=indexOf(t.pipes,e);return-1===a?this:(t.pipes.splice(a,1),t.pipesCount-=1,1===t.pipesCount&&(t.pipes=t.pipes[0]),e.emit("unpipe",this),this)},Readable.prototype.on=function(e,t){var r=Stream.prototype.on.call(this,e,t);if("data"===e&&!1!==this._readableState.flowing&&this.resume(),"readable"===e&&this.readable){var n=this._readableState;n.readableListening||(n.readableListening=!0,n.emittedReadable=!1,n.needReadable=!0,n.reading?n.length&&emitReadable(this,n):processNextTick(nReadingNextTick,this))}return r},Readable.prototype.addListener=Readable.prototype.on,Readable.prototype.resume=function(){var e=this._readableState;return e.flowing||(debug("resume"),e.flowing=!0,resume(this,e)),this},Readable.prototype.pause=function(){return debug("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(debug("pause"),this._readableState.flowing=!1,this.emit("pause")),this},Readable.prototype.wrap=function(e){var t=this._readableState,r=!1,n=this;e.on("end",function(){if(debug("wrapped end"),t.decoder&&!t.ended){var e=t.decoder.end();e&&e.length&&n.push(e)}n.push(null)}),e.on("data",function(a){if(debug("wrapped data"),t.decoder&&(a=t.decoder.write(a)),(!t.objectMode||null!==a&&void 0!==a)&&(t.objectMode||a&&a.length)){var i=n.push(a);i||(r=!0,e.pause())}});for(var a in e)void 0===this[a]&&"function"==typeof e[a]&&(this[a]=function(t){return function(){return e[t].apply(e,arguments)}}(a));var i=["error","close","destroy","pause","resume"];return forEach(i,function(t){e.on(t,n.emit.bind(n,t))}),n._read=function(t){debug("wrapped _read",t),r&&(r=!1,e.resume())},n},Readable._fromList=fromList; }).call(this,require('_process')) -},{"./_stream_duplex":74,"_process":68,"buffer":18,"core-util-is":22,"events":27,"inherits":32,"isarray":34,"process-nextick-args":67,"stream":83,"string_decoder/":88,"util":16}],77:[function(require,module,exports){ +},{"./_stream_duplex":75,"_process":69,"buffer":19,"core-util-is":23,"events":28,"inherits":33,"isarray":35,"process-nextick-args":68,"stream":84,"string_decoder/":89,"util":17}],78:[function(require,module,exports){ "use strict";function TransformState(r){this.afterTransform=function(t,n){return afterTransform(r,t,n)},this.needTransform=!1,this.transforming=!1,this.writecb=null,this.writechunk=null}function afterTransform(r,t,n){var e=r._transformState;e.transforming=!1;var a=e.writecb;if(!a)return r.emit("error",new Error("no writecb in Transform class"));e.writechunk=null,e.writecb=null,null!==n&&void 0!==n&&r.push(n),a&&a(t);var i=r._readableState;i.reading=!1,(i.needReadable||i.length-1))throw new TypeError("Unknown encoding: "+e);this._writableState.defaultEncoding=e},Writable.prototype._write=function(e,t,r){r(new Error("not implemented"))},Writable.prototype._writev=null,Writable.prototype.end=function(e,t,r){var i=this._writableState;"function"==typeof e?(r=e,e=null,t=null):"function"==typeof t&&(r=t,t=null),null!==e&&void 0!==e&&this.write(e,t),i.corked&&(i.corked=1,this.uncork()),i.ending||i.finished||endWritable(this,i,r)}; -},{"./_stream_duplex":74,"buffer":18,"core-util-is":22,"events":27,"inherits":32,"process-nextick-args":67,"stream":83,"util-deprecate":91}],79:[function(require,module,exports){ +},{"./_stream_duplex":75,"buffer":19,"core-util-is":23,"events":28,"inherits":33,"process-nextick-args":68,"stream":84,"util-deprecate":92}],80:[function(require,module,exports){ module.exports=require("./lib/_stream_passthrough.js"); -},{"./lib/_stream_passthrough.js":75}],80:[function(require,module,exports){ +},{"./lib/_stream_passthrough.js":76}],81:[function(require,module,exports){ var Stream=function(){try{return require("stream")}catch(r){}}();exports=module.exports=require("./lib/_stream_readable.js"),exports.Stream=Stream||exports,exports.Readable=exports,exports.Writable=require("./lib/_stream_writable.js"),exports.Duplex=require("./lib/_stream_duplex.js"),exports.Transform=require("./lib/_stream_transform.js"),exports.PassThrough=require("./lib/_stream_passthrough.js"); -},{"./lib/_stream_duplex.js":74,"./lib/_stream_passthrough.js":75,"./lib/_stream_readable.js":76,"./lib/_stream_transform.js":77,"./lib/_stream_writable.js":78,"stream":83}],81:[function(require,module,exports){ +},{"./lib/_stream_duplex.js":75,"./lib/_stream_passthrough.js":76,"./lib/_stream_readable.js":77,"./lib/_stream_transform.js":78,"./lib/_stream_writable.js":79,"stream":84}],82:[function(require,module,exports){ module.exports=require("./lib/_stream_transform.js"); -},{"./lib/_stream_transform.js":77}],82:[function(require,module,exports){ +},{"./lib/_stream_transform.js":78}],83:[function(require,module,exports){ module.exports=require("./lib/_stream_writable.js"); -},{"./lib/_stream_writable.js":78}],83:[function(require,module,exports){ +},{"./lib/_stream_writable.js":79}],84:[function(require,module,exports){ function Stream(){EE.call(this)}module.exports=Stream;var EE=require("events").EventEmitter,inherits=require("inherits");inherits(Stream,EE),Stream.Readable=require("readable-stream/readable.js"),Stream.Writable=require("readable-stream/writable.js"),Stream.Duplex=require("readable-stream/duplex.js"),Stream.Transform=require("readable-stream/transform.js"),Stream.PassThrough=require("readable-stream/passthrough.js"),Stream.Stream=Stream,Stream.prototype.pipe=function(e,r){function t(r){e.writable&&!1===e.write(r)&&m.pause&&m.pause()}function n(){m.readable&&m.resume&&m.resume()}function a(){u||(u=!0,e.end())}function o(){u||(u=!0,"function"==typeof e.destroy&&e.destroy())}function i(e){if(s(),0===EE.listenerCount(this,"error"))throw e}function s(){m.removeListener("data",t),e.removeListener("drain",n),m.removeListener("end",a),m.removeListener("close",o),m.removeListener("error",i),e.removeListener("error",i),m.removeListener("end",s),m.removeListener("close",s),e.removeListener("close",s)}var m=this;m.on("data",t),e.on("drain",n),e._isStdio||r&&r.end===!1||(m.on("end",a),m.on("close",o));var u=!1;return m.on("error",i),e.on("error",i),m.on("end",s),m.on("close",s),e.on("close",s),e.emit("pipe",m),e}; -},{"events":27,"inherits":32,"readable-stream/duplex.js":73,"readable-stream/passthrough.js":79,"readable-stream/readable.js":80,"readable-stream/transform.js":81,"readable-stream/writable.js":82}],84:[function(require,module,exports){ +},{"events":28,"inherits":33,"readable-stream/duplex.js":74,"readable-stream/passthrough.js":80,"readable-stream/readable.js":81,"readable-stream/transform.js":82,"readable-stream/writable.js":83}],85:[function(require,module,exports){ var ClientRequest=require("./lib/request"),extend=require("xtend"),statusCodes=require("builtin-status-codes"),url=require("url"),http=exports;http.request=function(t,e){t="string"==typeof t?url.parse(t):extend(t);var r=t.protocol||"",s=t.hostname||t.host,n=t.port,u=t.path||"/";s&&-1!==s.indexOf(":")&&(s="["+s+"]"),t.url=(s?r+"//"+s:"")+(n?":"+n:"")+u,t.method=(t.method||"GET").toUpperCase(),t.headers=t.headers||{};var C=new ClientRequest(t);return e&&C.on("response",e),C},http.get=function(t,e){var r=http.request(t,e);return r.end(),r},http.Agent=function(){},http.Agent.defaultMaxSockets=4,http.STATUS_CODES=statusCodes,http.METHODS=["CHECKOUT","CONNECT","COPY","DELETE","GET","HEAD","LOCK","M-SEARCH","MERGE","MKACTIVITY","MKCOL","MOVE","NOTIFY","OPTIONS","PATCH","POST","PROPFIND","PROPPATCH","PURGE","PUT","REPORT","SEARCH","SUBSCRIBE","TRACE","UNLOCK","UNSUBSCRIBE"]; -},{"./lib/request":86,"builtin-status-codes":20,"url":89,"xtend":94}],85:[function(require,module,exports){ +},{"./lib/request":87,"builtin-status-codes":21,"url":90,"xtend":95}],86:[function(require,module,exports){ (function (global){ function checkTypeSupport(e){try{return xhr.responseType=e,xhr.responseType===e}catch(r){}return!1}function isFunction(e){return"function"==typeof e}exports.fetch=isFunction(global.fetch)&&isFunction(global.ReadableByteStream),exports.blobConstructor=!1;try{new Blob([new ArrayBuffer(1)]),exports.blobConstructor=!0}catch(e){}var xhr=new global.XMLHttpRequest;xhr.open("GET",global.location.host?"/":"https://example.com");var haveArrayBuffer="undefined"!=typeof global.ArrayBuffer,haveSlice=haveArrayBuffer&&isFunction(global.ArrayBuffer.prototype.slice);exports.arraybuffer=haveArrayBuffer&&checkTypeSupport("arraybuffer"),exports.msstream=!exports.fetch&&haveSlice&&checkTypeSupport("ms-stream"),exports.mozchunkedarraybuffer=!exports.fetch&&haveArrayBuffer&&checkTypeSupport("moz-chunked-arraybuffer"),exports.overrideMimeType=isFunction(xhr.overrideMimeType),exports.vbArray=isFunction(global.VBArray),xhr=null; }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],86:[function(require,module,exports){ +},{}],87:[function(require,module,exports){ (function (process,global,Buffer){ function decideMode(e){return capability.fetch?"fetch":capability.mozchunkedarraybuffer?"moz-chunked-arraybuffer":capability.msstream?"ms-stream":capability.arraybuffer&&e?"arraybuffer":capability.vbArray&&e?"text:vbarray":"text"}function statusValid(e){try{return null!==e.status}catch(t){return!1}}var capability=require("./capability"),inherits=require("inherits"),response=require("./response"),stream=require("stream"),IncomingMessage=response.IncomingMessage,rStates=response.readyStates,ClientRequest=module.exports=function(e){var t=this;stream.Writable.call(t),t._opts=e,t._body=[],t._headers={},e.auth&&t.setHeader("Authorization","Basic "+new Buffer(e.auth).toString("base64")),Object.keys(e.headers).forEach(function(r){t.setHeader(r,e.headers[r])});var r;if("prefer-streaming"===e.mode)r=!1;else if("allow-wrong-content-type"===e.mode)r=!capability.overrideMimeType;else{if(e.mode&&"default"!==e.mode&&"prefer-fast"!==e.mode)throw new Error("Invalid value for opts.mode");r=!0}t._mode=decideMode(r),t.on("finish",function(){t._onFinish()})};inherits(ClientRequest,stream.Writable),ClientRequest.prototype.setHeader=function(e,t){var r=this,o=e.toLowerCase();-1===unsafeHeaders.indexOf(o)&&(r._headers[o]={name:e,value:t})},ClientRequest.prototype.getHeader=function(e){var t=this;return t._headers[e.toLowerCase()].value},ClientRequest.prototype.removeHeader=function(e){var t=this;delete t._headers[e.toLowerCase()]},ClientRequest.prototype._onFinish=function(){var e=this;if(!e._destroyed){var t,r=e._opts,o=e._headers;if(("POST"===r.method||"PUT"===r.method||"PATCH"===r.method)&&(t=capability.blobConstructor?new global.Blob(e._body.map(function(e){return e.toArrayBuffer()}),{type:(o["content-type"]||{}).value||""}):Buffer.concat(e._body).toString()),"fetch"===e._mode){var n=Object.keys(o).map(function(e){return[o[e].name,o[e].value]});global.fetch(e._opts.url,{method:e._opts.method,headers:n,body:t,mode:"cors",credentials:r.withCredentials?"include":"same-origin"}).then(function(t){e._fetchResponse=t,e._connect()},function(t){e.emit("error",t)})}else{var s=e._xhr=new global.XMLHttpRequest;try{s.open(e._opts.method,e._opts.url,!0)}catch(i){return void process.nextTick(function(){e.emit("error",i)})}"responseType"in s&&(s.responseType=e._mode.split(":")[0]),"withCredentials"in s&&(s.withCredentials=!!r.withCredentials),"text"===e._mode&&"overrideMimeType"in s&&s.overrideMimeType("text/plain; charset=x-user-defined"),Object.keys(o).forEach(function(e){s.setRequestHeader(o[e].name,o[e].value)}),e._response=null,s.onreadystatechange=function(){switch(s.readyState){case rStates.LOADING:case rStates.DONE:e._onXHRProgress()}},"moz-chunked-arraybuffer"===e._mode&&(s.onprogress=function(){e._onXHRProgress()}),s.onerror=function(){e._destroyed||e.emit("error",new Error("XHR error"))};try{s.send(t)}catch(i){return void process.nextTick(function(){e.emit("error",i)})}}}},ClientRequest.prototype._onXHRProgress=function(){var e=this;statusValid(e._xhr)&&!e._destroyed&&(e._response||e._connect(),e._response._onXHRProgress())},ClientRequest.prototype._connect=function(){var e=this;e._destroyed||(e._response=new IncomingMessage(e._xhr,e._fetchResponse,e._mode),e.emit("response",e._response))},ClientRequest.prototype._write=function(e,t,r){var o=this;o._body.push(e),r()},ClientRequest.prototype.abort=ClientRequest.prototype.destroy=function(){var e=this;e._destroyed=!0,e._response&&(e._response._destroyed=!0),e._xhr&&e._xhr.abort()},ClientRequest.prototype.end=function(e,t,r){var o=this;"function"==typeof e&&(r=e,e=void 0),stream.Writable.prototype.end.call(o,e,t,r)},ClientRequest.prototype.flushHeaders=function(){},ClientRequest.prototype.setTimeout=function(){},ClientRequest.prototype.setNoDelay=function(){},ClientRequest.prototype.setSocketKeepAlive=function(){};var unsafeHeaders=["accept-charset","accept-encoding","access-control-request-headers","access-control-request-method","connection","content-length","cookie","cookie2","date","dnt","expect","host","keep-alive","origin","referer","te","trailer","transfer-encoding","upgrade","user-agent","via"]; }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer) -},{"./capability":85,"./response":87,"_process":68,"buffer":18,"inherits":32,"stream":83}],87:[function(require,module,exports){ +},{"./capability":86,"./response":88,"_process":69,"buffer":19,"inherits":33,"stream":84}],88:[function(require,module,exports){ (function (process,global,Buffer){ var capability=require("./capability"),inherits=require("inherits"),stream=require("stream"),rStates=exports.readyStates={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},IncomingMessage=exports.IncomingMessage=function(e,r,a){function s(){u.read().then(function(e){if(!t._destroyed){if(e.done)return void t.push(null);t.push(new Buffer(e.value)),s()}})}var t=this;if(stream.Readable.call(t),t._mode=a,t.headers={},t.rawHeaders=[],t.trailers={},t.rawTrailers=[],t.on("end",function(){process.nextTick(function(){t.emit("close")})}),"fetch"===a){t._fetchResponse=r,t.statusCode=r.status,t.statusMessage=r.statusText;for(var n,o,i=r.headers[Symbol.iterator]();n=(o=i.next()).value,!o.done;)t.headers[n[0].toLowerCase()]=n[1],t.rawHeaders.push(n[0],n[1]);var u=r.body.getReader();s()}else{t._xhr=e,t._pos=0,t.statusCode=e.status,t.statusMessage=e.statusText;var h=e.getAllResponseHeaders().split(/\r?\n/);if(h.forEach(function(e){var r=e.match(/^([^:]+):\s*(.*)/);if(r){var a=r[1].toLowerCase();void 0!==t.headers[a]?t.headers[a]+=", "+r[2]:t.headers[a]=r[2],t.rawHeaders.push(r[1],r[2])}}),t._charset="x-user-defined",!capability.overrideMimeType){var f=t.rawHeaders["mime-type"];if(f){var c=f.match(/;\s*charset=([^;])(;|$)/);c&&(t._charset=c[1].toLowerCase())}t._charset||(t._charset="utf-8")}}};inherits(IncomingMessage,stream.Readable),IncomingMessage.prototype._read=function(){},IncomingMessage.prototype._onXHRProgress=function(){var e=this,r=e._xhr,a=null;switch(e._mode){case"text:vbarray":if(r.readyState!==rStates.DONE)break;try{a=new global.VBArray(r.responseBody).toArray()}catch(s){}if(null!==a){e.push(new Buffer(a));break}case"text":try{a=r.responseText}catch(s){e._mode="text:vbarray";break}if(a.length>e._pos){var t=a.substr(e._pos);if("x-user-defined"===e._charset){for(var n=new Buffer(t.length),o=0;oe._pos&&(e.push(new Buffer(new Uint8Array(i.result.slice(e._pos)))),e._pos=i.result.byteLength)},i.onload=function(){e.push(null)},i.readAsArrayBuffer(a)}e._xhr.readyState===rStates.DONE&&"ms-stream"!==e._mode&&e.push(null)}; }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer) -},{"./capability":85,"_process":68,"buffer":18,"inherits":32,"stream":83}],88:[function(require,module,exports){ +},{"./capability":86,"_process":69,"buffer":19,"inherits":33,"stream":84}],89:[function(require,module,exports){ function assertEncoding(e){if(e&&!isBufferEncoding(e))throw new Error("Unknown encoding: "+e)}function passThroughWrite(e){return e.toString(this.encoding)}function utf16DetectIncompleteChar(e){this.charReceived=e.length%2,this.charLength=this.charReceived?2:0}function base64DetectIncompleteChar(e){this.charReceived=e.length%3,this.charLength=this.charReceived?3:0}var Buffer=require("buffer").Buffer,isBufferEncoding=Buffer.isEncoding||function(e){switch(e&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}},StringDecoder=exports.StringDecoder=function(e){switch(this.encoding=(e||"utf8").toLowerCase().replace(/[-_]/,""),assertEncoding(e),this.encoding){case"utf8":this.surrogateSize=3;break;case"ucs2":case"utf16le":this.surrogateSize=2,this.detectIncompleteChar=utf16DetectIncompleteChar;break;case"base64":this.surrogateSize=3,this.detectIncompleteChar=base64DetectIncompleteChar;break;default:return void(this.write=passThroughWrite)}this.charBuffer=new Buffer(6),this.charReceived=0,this.charLength=0};StringDecoder.prototype.write=function(e){for(var t="";this.charLength;){var r=e.length>=this.charLength-this.charReceived?this.charLength-this.charReceived:e.length;if(e.copy(this.charBuffer,this.charReceived,0,r),this.charReceived+=r,this.charReceived=55296&&56319>=h)){if(this.charReceived=this.charLength=0,0===e.length)return t;break}this.charLength+=this.surrogateSize,t=""}this.detectIncompleteChar(e);var i=e.length;this.charLength&&(e.copy(this.charBuffer,0,e.length-this.charReceived,i),i-=this.charReceived),t+=e.toString(this.encoding,0,i);var i=t.length-1,h=t.charCodeAt(i);if(h>=55296&&56319>=h){var c=this.surrogateSize;return this.charLength+=c,this.charReceived+=c,this.charBuffer.copy(this.charBuffer,c,0,c),e.copy(this.charBuffer,0,0,c),t.substring(0,i)}return t},StringDecoder.prototype.detectIncompleteChar=function(e){for(var t=e.length>=3?3:e.length;t>0;t--){var r=e[e.length-t];if(1==t&&r>>5==6){this.charLength=2;break}if(2>=t&&r>>4==14){this.charLength=3;break}if(3>=t&&r>>3==30){this.charLength=4;break}}this.charReceived=t},StringDecoder.prototype.end=function(e){var t="";if(e&&e.length&&(t=this.write(e)),this.charReceived){var r=this.charReceived,h=this.charBuffer,i=this.encoding;t+=h.slice(0,r).toString(i)}return t}; -},{"buffer":18}],89:[function(require,module,exports){ +},{"buffer":19}],90:[function(require,module,exports){ "use strict";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}function urlParse(t,s,e){if(t&&util.isObject(t)&&t instanceof Url)return t;var h=new Url;return h.parse(t,s,e),h}function urlFormat(t){return util.isString(t)&&(t=urlParse(t)),t instanceof Url?t.format():Url.prototype.format.call(t)}function urlResolve(t,s){return urlParse(t,!1,!0).resolve(s)}function urlResolveObject(t,s){return t?urlParse(t,!1,!0).resolveObject(s):s}var punycode=require("punycode"),util=require("./util");exports.parse=urlParse,exports.resolve=urlResolve,exports.resolveObject=urlResolveObject,exports.format=urlFormat,exports.Url=Url;var protocolPattern=/^([a-z0-9.+-]+:)/i,portPattern=/:[0-9]*$/,simplePathPattern=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,delims=["<",">",'"',"`"," ","\r","\n"," "],unwise=["{","}","|","\\","^","`"].concat(delims),autoEscape=["'"].concat(unwise),nonHostChars=["%","/","?",";","#"].concat(autoEscape),hostEndingChars=["/","?","#"],hostnameMaxLen=255,hostnamePartPattern=/^[+a-z0-9A-Z_-]{0,63}$/,hostnamePartStart=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,unsafeProtocol={javascript:!0,"javascript:":!0},hostlessProtocol={javascript:!0,"javascript:":!0},slashedProtocol={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},querystring=require("querystring");Url.prototype.parse=function(t,s,e){if(!util.isString(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var h=t.indexOf("?"),r=-1!==h&&hm)&&(c=m)}var v,g;g=-1===c?n.lastIndexOf("@"):n.lastIndexOf("@",c),-1!==g&&(v=n.slice(0,g),n=n.slice(g+1),this.auth=decodeURIComponent(v)),c=-1;for(var f=0;fm)&&(c=m)}-1===c&&(c=n.length),this.host=n.slice(0,c),n=n.slice(c),this.parseHost(),this.hostname=this.hostname||"";var y="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!y)for(var P=this.hostname.split(/\./),f=0,d=P.length;d>f;f++){var q=P[f];if(q&&!q.match(hostnamePartPattern)){for(var b="",O=0,j=q.length;j>O;O++)b+=q.charCodeAt(O)>127?"x":q[O];if(!b.match(hostnamePartPattern)){var x=P.slice(0,f),U=P.slice(f+1),C=q.match(hostnamePartStart);C&&(x.push(C[1]),U.unshift(C[2])),U.length&&(n="/"+U.join(".")+n),this.hostname=x.join(".");break}}}this.hostname.length>hostnameMaxLen?this.hostname="":this.hostname=this.hostname.toLowerCase(),y||(this.hostname=punycode.toASCII(this.hostname));var A=this.port?":"+this.port:"",w=this.hostname||"";this.host=w+A,this.href+=this.host,y&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==n[0]&&(n="/"+n))}if(!unsafeProtocol[u])for(var f=0,d=autoEscape.length;d>f;f++){var E=autoEscape[f];if(-1!==n.indexOf(E)){var I=encodeURIComponent(E);I===E&&(I=escape(E)),n=n.split(E).join(I)}}var R=n.indexOf("#");-1!==R&&(this.hash=n.substr(R),n=n.slice(0,R));var S=n.indexOf("?");if(-1!==S?(this.search=n.substr(S),this.query=n.substr(S+1),s&&(this.query=querystring.parse(this.query)),n=n.slice(0,S)):s&&(this.search="",this.query={}),n&&(this.pathname=n),slashedProtocol[u]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var A=this.pathname||"",k=this.search||"";this.path=A+k}return this.href=this.format(),this},Url.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var s=this.protocol||"",e=this.pathname||"",h=this.hash||"",r=!1,a="";this.host?r=t+this.host:this.hostname&&(r=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(r+=":"+this.port)),this.query&&util.isObject(this.query)&&Object.keys(this.query).length&&(a=querystring.stringify(this.query));var o=this.search||a&&"?"+a||"";return s&&":"!==s.substr(-1)&&(s+=":"),this.slashes||(!s||slashedProtocol[s])&&r!==!1?(r="//"+(r||""),e&&"/"!==e.charAt(0)&&(e="/"+e)):r||(r=""),h&&"#"!==h.charAt(0)&&(h="#"+h),o&&"?"!==o.charAt(0)&&(o="?"+o),e=e.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),o=o.replace("#","%23"),s+r+e+o+h},Url.prototype.resolve=function(t){return this.resolveObject(urlParse(t,!1,!0)).format()},Url.prototype.resolveObject=function(t){if(util.isString(t)){var s=new Url;s.parse(t,!1,!0),t=s}for(var e=new Url,h=Object.keys(this),r=0;r0?e.host.split("@"):!1;b&&(e.auth=b.shift(),e.host=e.hostname=b.shift())}return e.search=t.search,e.query=t.query,util.isNull(e.pathname)&&util.isNull(e.search)||(e.path=(e.pathname?e.pathname:"")+(e.search?e.search:"")),e.href=e.format(),e}if(!d.length)return e.pathname=null,e.search?e.path="/"+e.search:e.path=null,e.href=e.format(),e;for(var O=d.slice(-1)[0],j=(e.host||t.host||d.length>1)&&("."===O||".."===O)||""===O,x=0,U=d.length;U>=0;U--)O=d[U],"."===O?d.splice(U,1):".."===O?(d.splice(U,1),x++):x&&(d.splice(U,1),x--);if(!y&&!P)for(;x--;x)d.unshift("..");!y||""===d[0]||d[0]&&"/"===d[0].charAt(0)||d.unshift(""),j&&"/"!==d.join("/").substr(-1)&&d.push("");var C=""===d[0]||d[0]&&"/"===d[0].charAt(0);if(q){e.hostname=e.host=C?"":d.length?d.shift():"";var b=e.host&&e.host.indexOf("@")>0?e.host.split("@"):!1;b&&(e.auth=b.shift(),e.host=e.hostname=b.shift())}return y=y||e.host&&d.length,y&&!C&&d.unshift(""),d.length?e.pathname=d.join("/"):(e.pathname=null,e.path=null),util.isNull(e.pathname)&&util.isNull(e.search)||(e.path=(e.pathname?e.pathname:"")+(e.search?e.search:"")),e.auth=t.auth||e.auth,e.slashes=e.slashes||t.slashes,e.href=e.format(),e},Url.prototype.parseHost=function(){var t=this.host,s=portPattern.exec(t);s&&(s=s[0],":"!==s&&(this.port=s.substr(1)),t=t.substr(0,t.length-s.length)),t&&(this.hostname=t)}; -},{"./util":90,"punycode":69,"querystring":72}],90:[function(require,module,exports){ +},{"./util":91,"punycode":70,"querystring":73}],91:[function(require,module,exports){ "use strict";module.exports={isString:function(n){return"string"==typeof n},isObject:function(n){return"object"==typeof n&&null!==n},isNull:function(n){return null===n},isNullOrUndefined:function(n){return null==n}}; -},{}],91:[function(require,module,exports){ +},{}],92:[function(require,module,exports){ (function (global){ function deprecate(r,e){function o(){if(!t){if(config("throwDeprecation"))throw new Error(e);config("traceDeprecation")?console.trace(e):console.warn(e),t=!0}return r.apply(this,arguments)}if(config("noDeprecation"))return r;var t=!1;return o}function config(r){try{if(!global.localStorage)return!1}catch(e){return!1}var o=global.localStorage[r];return null==o?!1:"true"===String(o).toLowerCase()}module.exports=deprecate; }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],92:[function(require,module,exports){ +},{}],93:[function(require,module,exports){ module.exports=function(o){return o&&"object"==typeof o&&"function"==typeof o.copy&&"function"==typeof o.fill&&"function"==typeof o.readUInt8}; -},{}],93:[function(require,module,exports){ +},{}],94:[function(require,module,exports){ (function (process,global){ function inspect(e,r){var t={seen:[],stylize:stylizeNoColor};return arguments.length>=3&&(t.depth=arguments[2]),arguments.length>=4&&(t.colors=arguments[3]),isBoolean(r)?t.showHidden=r:r&&exports._extend(t,r),isUndefined(t.showHidden)&&(t.showHidden=!1),isUndefined(t.depth)&&(t.depth=2),isUndefined(t.colors)&&(t.colors=!1),isUndefined(t.customInspect)&&(t.customInspect=!0),t.colors&&(t.stylize=stylizeWithColor),formatValue(t,e,t.depth)}function stylizeWithColor(e,r){var t=inspect.styles[r];return t?"["+inspect.colors[t][0]+"m"+e+"["+inspect.colors[t][1]+"m":e}function stylizeNoColor(e,r){return e}function arrayToHash(e){var r={};return e.forEach(function(e,t){r[e]=!0}),r}function formatValue(e,r,t){if(e.customInspect&&r&&isFunction(r.inspect)&&r.inspect!==exports.inspect&&(!r.constructor||r.constructor.prototype!==r)){var n=r.inspect(t,e);return isString(n)||(n=formatValue(e,n,t)),n}var i=formatPrimitive(e,r);if(i)return i;var o=Object.keys(r),s=arrayToHash(o);if(e.showHidden&&(o=Object.getOwnPropertyNames(r)),isError(r)&&(o.indexOf("message")>=0||o.indexOf("description")>=0))return formatError(r);if(0===o.length){if(isFunction(r)){var u=r.name?": "+r.name:"";return e.stylize("[Function"+u+"]","special")}if(isRegExp(r))return e.stylize(RegExp.prototype.toString.call(r),"regexp");if(isDate(r))return e.stylize(Date.prototype.toString.call(r),"date");if(isError(r))return formatError(r)}var a="",c=!1,l=["{","}"];if(isArray(r)&&(c=!0,l=["[","]"]),isFunction(r)){var p=r.name?": "+r.name:"";a=" [Function"+p+"]"}if(isRegExp(r)&&(a=" "+RegExp.prototype.toString.call(r)),isDate(r)&&(a=" "+Date.prototype.toUTCString.call(r)),isError(r)&&(a=" "+formatError(r)),0===o.length&&(!c||0==r.length))return l[0]+a+l[1];if(0>t)return isRegExp(r)?e.stylize(RegExp.prototype.toString.call(r),"regexp"):e.stylize("[Object]","special");e.seen.push(r);var f;return f=c?formatArray(e,r,t,s,o):o.map(function(n){return formatProperty(e,r,t,s,n,c)}),e.seen.pop(),reduceToSingleString(f,a,l)}function formatPrimitive(e,r){if(isUndefined(r))return e.stylize("undefined","undefined");if(isString(r)){var t="'"+JSON.stringify(r).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(t,"string")}return isNumber(r)?e.stylize(""+r,"number"):isBoolean(r)?e.stylize(""+r,"boolean"):isNull(r)?e.stylize("null","null"):void 0}function formatError(e){return"["+Error.prototype.toString.call(e)+"]"}function formatArray(e,r,t,n,i){for(var o=[],s=0,u=r.length;u>s;++s)hasOwnProperty(r,String(s))?o.push(formatProperty(e,r,t,n,String(s),!0)):o.push("");return i.forEach(function(i){i.match(/^\d+$/)||o.push(formatProperty(e,r,t,n,i,!0))}),o}function formatProperty(e,r,t,n,i,o){var s,u,a;if(a=Object.getOwnPropertyDescriptor(r,i)||{value:r[i]},a.get?u=a.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):a.set&&(u=e.stylize("[Setter]","special")),hasOwnProperty(n,i)||(s="["+i+"]"),u||(e.seen.indexOf(a.value)<0?(u=isNull(t)?formatValue(e,a.value,null):formatValue(e,a.value,t-1),u.indexOf("\n")>-1&&(u=o?u.split("\n").map(function(e){return" "+e}).join("\n").substr(2):"\n"+u.split("\n").map(function(e){return" "+e}).join("\n"))):u=e.stylize("[Circular]","special")),isUndefined(s)){if(o&&i.match(/^\d+$/))return u;s=JSON.stringify(""+i),s.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(s=s.substr(1,s.length-2),s=e.stylize(s,"name")):(s=s.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),s=e.stylize(s,"string"))}return s+": "+u}function reduceToSingleString(e,r,t){var n=0,i=e.reduce(function(e,r){return n++,r.indexOf("\n")>=0&&n++,e+r.replace(/\u001b\[\d\d?m/g,"").length+1},0);return i>60?t[0]+(""===r?"":r+"\n ")+" "+e.join(",\n ")+" "+t[1]:t[0]+r+" "+e.join(", ")+" "+t[1]}function isArray(e){return Array.isArray(e)}function isBoolean(e){return"boolean"==typeof e}function isNull(e){return null===e}function isNullOrUndefined(e){return null==e}function isNumber(e){return"number"==typeof e}function isString(e){return"string"==typeof e}function isSymbol(e){return"symbol"==typeof e}function isUndefined(e){return void 0===e}function isRegExp(e){return isObject(e)&&"[object RegExp]"===objectToString(e)}function isObject(e){return"object"==typeof e&&null!==e}function isDate(e){return isObject(e)&&"[object Date]"===objectToString(e)}function isError(e){return isObject(e)&&("[object Error]"===objectToString(e)||e instanceof Error)}function isFunction(e){return"function"==typeof e}function isPrimitive(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||"undefined"==typeof e}function objectToString(e){return Object.prototype.toString.call(e)}function pad(e){return 10>e?"0"+e.toString(10):e.toString(10)}function timestamp(){var e=new Date,r=[pad(e.getHours()),pad(e.getMinutes()),pad(e.getSeconds())].join(":");return[e.getDate(),months[e.getMonth()],r].join(" ")}function hasOwnProperty(e,r){return Object.prototype.hasOwnProperty.call(e,r)}var formatRegExp=/%[sdj%]/g;exports.format=function(e){if(!isString(e)){for(var r=[],t=0;t=i)return e;switch(e){case"%s":return String(n[t++]);case"%d":return Number(n[t++]);case"%j":try{return JSON.stringify(n[t++])}catch(r){return"[Circular]"}default:return e}}),s=n[t];i>t;s=n[++t])o+=isNull(s)||!isObject(s)?" "+s:" "+inspect(s);return o},exports.deprecate=function(e,r){function t(){if(!n){if(process.throwDeprecation)throw new Error(r);process.traceDeprecation?console.trace(r):console.error(r),n=!0}return e.apply(this,arguments)}if(isUndefined(global.process))return function(){return exports.deprecate(e,r).apply(this,arguments)};if(process.noDeprecation===!0)return e;var n=!1;return t};var debugs={},debugEnviron;exports.debuglog=function(e){if(isUndefined(debugEnviron)&&(debugEnviron=process.env.NODE_DEBUG||""),e=e.toUpperCase(),!debugs[e])if(new RegExp("\\b"+e+"\\b","i").test(debugEnviron)){var r=process.pid;debugs[e]=function(){var t=exports.format.apply(exports,arguments);console.error("%s %d: %s",e,r,t)}}else debugs[e]=function(){};return debugs[e]},exports.inspect=inspect,inspect.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},inspect.styles={special:"cyan",number:"yellow","boolean":"yellow",undefined:"grey","null":"bold",string:"green",date:"magenta",regexp:"red"},exports.isArray=isArray,exports.isBoolean=isBoolean,exports.isNull=isNull,exports.isNullOrUndefined=isNullOrUndefined,exports.isNumber=isNumber,exports.isString=isString,exports.isSymbol=isSymbol,exports.isUndefined=isUndefined,exports.isRegExp=isRegExp,exports.isObject=isObject,exports.isDate=isDate,exports.isError=isError,exports.isFunction=isFunction,exports.isPrimitive=isPrimitive,exports.isBuffer=require("./support/isBuffer");var months=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];exports.log=function(){console.log("%s - %s",timestamp(),exports.format.apply(exports,arguments))},exports.inherits=require("inherits"),exports._extend=function(e,r){if(!r||!isObject(r))return e;for(var t=Object.keys(r),n=t.length;n--;)e[t[n]]=r[t[n]];return e}; }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./support/isBuffer":92,"_process":68,"inherits":32}],94:[function(require,module,exports){ +},{"./support/isBuffer":93,"_process":69,"inherits":33}],95:[function(require,module,exports){ function extend(){for(var r={},e=0;e 1) {\n // The current value has additional properties (other than \"$ref\"),\n // so merge the resolved value rather than completely replacing the reference\n var merged = {};\n Object.keys(currentValue).forEach(function(key) {\n if (key !== '$ref') {\n merged[key] = currentValue[key];\n }\n });\n Object.keys(resolvedValue).forEach(function(key) {\n if (!(key in merged)) {\n merged[key] = resolvedValue[key];\n }\n });\n return merged;\n }\n else {\n // Completely replace the original reference with the resolved value\n return resolvedValue;\n }\n}\n\n/**\n * Called when a circular reference is found.\n * It sets the {@link $Refs#circular} flag, and throws an error if options.$refs.circular is false.\n *\n * @param {string} keyPath - The JSON Reference path of the circular reference\n * @param {$Refs} $refs\n * @param {$RefParserOptions} options\n * @returns {boolean} - always returns true, to indicate that a circular reference was found\n */\nfunction foundCircularReference(keyPath, $refs, options) {\n $refs.circular = true;\n if (!options.$refs.circular) {\n throw ono.reference('Circular $ref pointer found at %s', keyPath);\n }\n return true;\n}\n", + "/** !\n * JSON Schema $Ref Parser v2.1.2\n *\n * @link https://github.com/BigstickCarpet/json-schema-ref-parser\n * @license MIT\n */\n'use strict';\n\nvar $Ref = require('./ref'),\n Pointer = require('./pointer'),\n util = require('./util'),\n url = require('url');\n\nmodule.exports = bundle;\n\n/**\n * Bundles all external JSON references into the main JSON schema, thus resulting in a schema that\n * only has *internal* references, not any *external* references.\n * This method mutates the JSON schema object, adding new references and re-mapping existing ones.\n *\n * @param {$RefParser} parser\n * @param {$RefParserOptions} options\n */\nfunction bundle(parser, options) {\n util.debug('Bundling $ref pointers in %s', parser.$refs._basePath);\n\n // Build an inventory of all $ref pointers in the JSON Schema\n var inventory = [];\n crawl(parser.schema, parser.$refs._basePath + '#', '#', inventory, parser.$refs, options);\n\n // Remap all $ref pointers\n remap(inventory);\n}\n\n/**\n * Recursively crawls the given value, and inventories all JSON references.\n *\n * @param {*} obj - The value to crawl. If it's not an object or array, it will be ignored.\n * @param {string} path - The full path of `obj`, possibly with a JSON Pointer in the hash\n * @param {string} pathFromRoot - The path of `obj` from the schema root\n * @param {object[]} inventory - An array of already-inventoried $ref pointers\n * @param {$Refs} $refs\n * @param {$RefParserOptions} options\n */\nfunction crawl(obj, path, pathFromRoot, inventory, $refs, options) {\n if (obj && typeof obj === 'object') {\n var keys = Object.keys(obj);\n\n // Most people will expect references to be bundled into the the \"definitions\" property,\n // so we always crawl that property first, if it exists.\n var defs = keys.indexOf('definitions');\n if (defs > 0) {\n keys.splice(0, 0, keys.splice(defs, 1)[0]);\n }\n\n keys.forEach(function(key) {\n var keyPath = Pointer.join(path, key);\n var keyPathFromRoot = Pointer.join(pathFromRoot, key);\n var value = obj[key];\n\n if ($Ref.is$Ref(value)) {\n // Skip this $ref if we've already inventoried it\n if (!inventory.some(function(i) { return i.parent === obj && i.key === key; })) {\n inventory$Ref(obj, key, path, keyPathFromRoot, inventory, $refs, options);\n }\n }\n else {\n crawl(value, keyPath, keyPathFromRoot, inventory, $refs, options);\n }\n });\n }\n}\n\n/**\n * Inventories the given JSON Reference (i.e. records detailed information about it so we can\n * optimize all $refs in the schema), and then crawls the resolved value.\n *\n * @param {object} $refParent - The object that contains a JSON Reference as one of its keys\n * @param {string} $refKey - The key in `$refParent` that is a JSON Reference\n * @param {string} path - The full path of the JSON Reference at `$refKey`, possibly with a JSON Pointer in the hash\n * @param {string} pathFromRoot - The path of the JSON Reference at `$refKey`, from the schema root\n * @param {object[]} inventory - An array of already-inventoried $ref pointers\n * @param {$Refs} $refs\n * @param {$RefParserOptions} options\n */\nfunction inventory$Ref($refParent, $refKey, path, pathFromRoot, inventory, $refs, options) {\n var $ref = $refParent[$refKey];\n var $refPath = url.resolve(path, $ref.$ref);\n var pointer = $refs._resolve($refPath, options);\n var depth = Pointer.parse(pathFromRoot).length;\n var file = util.path.stripHash(pointer.path);\n var hash = util.path.getHash(pointer.path);\n var external = file !== $refs._basePath;\n var extended = Object.keys($ref).length > 1;\n\n inventory.push({\n $ref: $ref, // The JSON Reference (e.g. {$ref: string})\n parent: $refParent, // The object that contains this $ref pointer\n key: $refKey, // The key in `parent` that is the $ref pointer\n pathFromRoot: pathFromRoot, // The path to the $ref pointer, from the JSON Schema root\n depth: depth, // How far from the JSON Schema root is this $ref pointer?\n file: file, // The file that the $ref pointer resolves to\n hash: hash, // The hash within `file` that the $ref pointer resolves to\n value: pointer.value, // The resolved value of the $ref pointer\n circular: pointer.circular, // Is this $ref pointer DIRECTLY circular? (i.e. it references itself)\n extended: extended, // Does this $ref extend its resolved value? (i.e. it has extra properties, in addition to \"$ref\")\n external: external // Does this $ref pointer point to a file other than the main JSON Schema file?\n });\n\n // Recursively crawl the resolved value\n crawl(pointer.value, pointer.path, pathFromRoot, inventory, $refs, options);\n}\n\n/**\n * Re-maps every $ref pointer, so that they're all relative to the root of the JSON Schema.\n * Each referenced value is dereferenced EXACTLY ONCE. All subsequent references to the same\n * value are re-mapped to point to the first reference.\n *\n * @example:\n * {\n * first: { $ref: somefile.json#/some/part },\n * second: { $ref: somefile.json#/another/part },\n * third: { $ref: somefile.json },\n * fourth: { $ref: somefile.json#/some/part/sub/part }\n * }\n *\n * In this example, there are four references to the same file, but since the third reference points\n * to the ENTIRE file, that's the only one we need to dereference. The other three can just be\n * remapped to point inside the third one.\n *\n * On the other hand, if the third reference DIDN'T exist, then the first and second would both need\n * to be dereferenced, since they point to different parts of the file. The fourth reference does NOT\n * need to be dereferenced, because it can be remapped to point inside the first one.\n *\n * @param {object[]} inventory\n */\nfunction remap(inventory) {\n // Group & sort all the $ref pointers, so they're in the order that we need to dereference/remap them\n inventory.sort(function(a, b) {\n if (a.file !== b.file) {\n return a.file < b.file ? -1 : +1; // Group all the $refs that point to the same file\n }\n else if (a.hash !== b.hash) {\n return a.hash < b.hash ? -1 : +1; // Group all the $refs that point to the same part of the file\n }\n else if (a.circular !== b.circular) {\n return a.circular ? -1 : +1; // If the $ref points to itself, then sort it higher than other $refs that point to this $ref\n }\n else if (a.extended !== b.extended) {\n return a.extended ? +1 : -1; // If the $ref extends the resolved value, then sort it lower than other $refs that don't extend the value\n }\n else if (a.depth !== b.depth) {\n return a.depth - b.depth; // Sort $refs by how close they are to the JSON Schema root\n }\n else {\n // If all else is equal, use the $ref that's in the \"definitions\" property\n return b.pathFromRoot.lastIndexOf('/definitions') - a.pathFromRoot.lastIndexOf('/definitions');\n }\n });\n\n var file, hash, pathFromRoot;\n inventory.forEach(function(i) {\n util.debug('Re-mapping $ref pointer \"%s\" at %s', i.$ref.$ref, i.pathFromRoot);\n\n if (!i.external) {\n // This $ref already resolves to the main JSON Schema file\n i.$ref.$ref = i.hash;\n }\n else if (i.file !== file || i.hash.indexOf(hash) !== 0) {\n // We've moved to a new file or new hash\n file = i.file;\n hash = i.hash;\n pathFromRoot = i.pathFromRoot;\n\n // This is the first $ref to point to this value, so dereference the value.\n // Any other $refs that point to the same value will point to this $ref instead\n i.$ref = i.parent[i.key] = util.dereference(i.$ref, i.value);\n\n if (i.circular) {\n // This $ref points to itself\n i.$ref.$ref = i.pathFromRoot;\n }\n }\n else {\n // This $ref points to the same value as the prevous $ref\n i.$ref.$ref = Pointer.join(pathFromRoot, Pointer.parse(i.hash));\n }\n\n util.debug(' new value: %s', (i.$ref && i.$ref.$ref) ? i.$ref.$ref : '[object Object]');\n });\n}\n", + "'use strict';\n\nvar $Ref = require('./ref'),\n Pointer = require('./pointer'),\n util = require('./util'),\n ono = require('ono'),\n url = require('url');\n\nmodule.exports = dereference;\n\n/**\n * Crawls the JSON schema, finds all JSON references, and dereferences them.\n * This method mutates the JSON schema object, replacing JSON references with their resolved value.\n *\n * @param {$RefParser} parser\n * @param {$RefParserOptions} options\n */\nfunction dereference(parser, options) {\n util.debug('Dereferencing $ref pointers in %s', parser.$refs._basePath);\n parser.$refs.circular = false;\n crawl(parser.schema, parser.$refs._basePath, '#', [], parser.$refs, options);\n}\n\n/**\n * Recursively crawls the given value, and dereferences any JSON references.\n *\n * @param {*} obj - The value to crawl. If it's not an object or array, it will be ignored.\n * @param {string} path - The full path of `obj`, possibly with a JSON Pointer in the hash\n * @param {string} pathFromRoot - The path of `obj` from the schema root\n * @param {object[]} parents - An array of the parent objects that have already been dereferenced\n * @param {$Refs} $refs\n * @param {$RefParserOptions} options\n * @returns {boolean} - Returns true if a circular reference was found\n */\nfunction crawl(obj, path, pathFromRoot, parents, $refs, options) {\n var isCircular = false;\n\n if (obj && typeof obj === 'object') {\n parents.push(obj);\n\n Object.keys(obj).forEach(function(key) {\n var keyPath = Pointer.join(path, key);\n var keyPathFromRoot = Pointer.join(pathFromRoot, key);\n var value = obj[key];\n var circular = false;\n\n if ($Ref.isAllowed$Ref(value, options)) {\n var dereferenced = dereference$Ref(value, keyPath, keyPathFromRoot, parents, $refs, options);\n circular = dereferenced.circular;\n obj[key] = dereferenced.value;\n }\n else {\n if (parents.indexOf(value) === -1) {\n circular = crawl(value, keyPath, keyPathFromRoot, parents, $refs, options);\n }\n else {\n circular = foundCircularReference(keyPath, $refs, options);\n }\n }\n\n // Set the \"isCircular\" flag if this or any other property is circular\n isCircular = isCircular || circular;\n });\n\n parents.pop();\n }\n return isCircular;\n}\n\n/**\n * Dereferences the given JSON Reference, and then crawls the resulting value.\n *\n * @param {{$ref: string}} $ref - The JSON Reference to resolve\n * @param {string} path - The full path of `$ref`, possibly with a JSON Pointer in the hash\n * @param {string} pathFromRoot - The path of `$ref` from the schema root\n * @param {object[]} parents - An array of the parent objects that have already been dereferenced\n * @param {$Refs} $refs\n * @param {$RefParserOptions} options\n * @returns {object}\n */\nfunction dereference$Ref($ref, path, pathFromRoot, parents, $refs, options) {\n util.debug('Dereferencing $ref pointer \"%s\" at %s', $ref.$ref, path);\n\n var $refPath = url.resolve(path, $ref.$ref);\n var pointer = $refs._resolve($refPath, options);\n\n // Check for circular references\n var directCircular = pointer.circular;\n var circular = directCircular || parents.indexOf(pointer.value) !== -1;\n circular && foundCircularReference(path, $refs, options);\n\n // Dereference the JSON reference\n var dereferencedValue = util.dereference($ref, pointer.value);\n\n // Crawl the dereferenced value (unless it's circular)\n if (!circular) {\n // If the `crawl` method returns true, then dereferenced value is circular\n circular = crawl(dereferencedValue, pointer.path, pathFromRoot, parents, $refs, options);\n }\n\n if (circular && !directCircular && options.$refs.circular === 'ignore') {\n // The user has chosen to \"ignore\" circular references, so don't change the value\n dereferencedValue = $ref;\n }\n\n if (directCircular) {\n // The pointer is a DIRECT circular reference (i.e. it references itself).\n // So replace the $ref path with the absolute path from the JSON Schema root\n dereferencedValue.$ref = pathFromRoot;\n }\n\n return {\n circular: circular,\n value: dereferencedValue\n };\n}\n\n/**\n * Called when a circular reference is found.\n * It sets the {@link $Refs#circular} flag, and throws an error if options.$refs.circular is false.\n *\n * @param {string} keyPath - The JSON Reference path of the circular reference\n * @param {$Refs} $refs\n * @param {$RefParserOptions} options\n * @returns {boolean} - always returns true, to indicate that a circular reference was found\n */\nfunction foundCircularReference(keyPath, $refs, options) {\n $refs.circular = true;\n if (!options.$refs.circular) {\n throw ono.reference('Circular $ref pointer found at %s', keyPath);\n }\n return true;\n}\n", "'use strict';\n\nvar http = require('http'),\n https = require('https'),\n url = require('url'),\n util = require('./util'),\n Promise = require('./promise'),\n ono = require('ono');\n\nmodule.exports = download;\n\n/**\n * Downloads the given file.\n *\n * @param {Url|string} u - The url to download (can be a parsed {@link Url} object)\n * @param {$RefParserOptions} options\n * @param {number} [redirects] - The redirect URLs that have already been followed\n *\n * @returns {Promise}\n * The promise resolves with the raw downloaded data, or rejects if there is an HTTP error.\n */\nfunction download(u, options, redirects) {\n return new Promise(function(resolve, reject) {\n u = url.parse(u);\n redirects = redirects || [];\n redirects.push(u.href);\n\n get(u, options)\n .then(function(res) {\n if (res.statusCode >= 400) {\n throw ono({status: res.statusCode}, 'HTTP ERROR %d', res.statusCode);\n }\n else if (res.statusCode >= 300) {\n if (redirects.length > options.http.redirects) {\n reject(ono({status: res.statusCode}, 'Error downloading %s. \\nToo many redirects: \\n %s',\n redirects[0], redirects.join(' \\n ')));\n }\n else if (!res.headers.location) {\n throw ono({status: res.statusCode}, 'HTTP %d redirect with no location header', res.statusCode);\n }\n else {\n util.debug('HTTP %d redirect %s -> %s', res.statusCode, u.href, res.headers.location);\n var redirectTo = url.resolve(u, res.headers.location);\n download(redirectTo, options, redirects).then(resolve, reject);\n }\n }\n else if (res.statusCode === 204 && !options.allow.empty) {\n throw ono({status: 204}, 'HTTP 204 (No Content)');\n }\n else {\n resolve(res.body || new Buffer(0));\n }\n })\n .catch(function(err) {\n reject(ono(err, 'Error downloading', u.href));\n });\n });\n}\n\n/**\n * Sends an HTTP GET request.\n *\n * @param {Url} u - A parsed {@link Url} object\n * @param {$RefParserOptions} options\n *\n * @returns {Promise}\n * The promise resolves with the HTTP Response object.\n */\nfunction get(u, options) {\n return new Promise(function(resolve, reject) {\n util.debug('GET', u.href);\n\n var protocol = u.protocol === 'https:' ? https : http;\n var req = protocol.get({\n hostname: u.hostname,\n port: u.port,\n path: u.path,\n auth: u.auth,\n headers: options.http.headers,\n withCredentials: options.http.withCredentials\n });\n\n if (typeof req.setTimeout === 'function') {\n req.setTimeout(options.http.timeout);\n }\n\n req.on('timeout', function() {\n req.abort();\n });\n\n req.on('error', reject);\n\n req.once('response', function(res) {\n res.body = new Buffer(0);\n\n res.on('data', function(data) {\n res.body = Buffer.concat([res.body, new Buffer(data)]);\n });\n\n res.on('error', reject);\n\n res.on('end', function() {\n resolve(res);\n });\n });\n });\n}\n", - "'use strict';\n\nvar Promise = require('./promise'),\n Options = require('./options'),\n $Refs = require('./refs'),\n $Ref = require('./ref'),\n read = require('./read'),\n resolve = require('./resolve'),\n bundle = require('./bundle'),\n dereference = require('./dereference'),\n util = require('./util'),\n url = require('url'),\n maybe = require('call-me-maybe'),\n ono = require('ono');\n\nmodule.exports = $RefParser;\nmodule.exports.YAML = require('./yaml');\n\n/**\n * This class parses a JSON schema, builds a map of its JSON references and their resolved values,\n * and provides methods for traversing, manipulating, and dereferencing those references.\n *\n * @constructor\n */\nfunction $RefParser() {\n /**\n * The parsed (and possibly dereferenced) JSON schema object\n *\n * @type {object}\n * @readonly\n */\n this.schema = null;\n\n /**\n * The resolved JSON references\n *\n * @type {$Refs}\n */\n this.$refs = new $Refs();\n\n /**\n * The file path or URL of the main JSON schema file.\n * This will be empty if the schema was passed as an object rather than a path.\n *\n * @type {string}\n * @protected\n */\n this._basePath = '';\n}\n\n/**\n * Parses the given JSON schema.\n * This method does not resolve any JSON references.\n * It just reads a single file in JSON or YAML format, and parse it as a JavaScript object.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed\n * @param {function} [callback] - An error-first callback. The second parameter is the parsed JSON schema object.\n * @returns {Promise} - The returned promise resolves with the parsed JSON schema object.\n */\n$RefParser.parse = function(schema, options, callback) {\n var Class = this; // eslint-disable-line consistent-this\n return new Class().parse(schema, options, callback);\n};\n\n/**\n * Parses the given JSON schema.\n * This method does not resolve any JSON references.\n * It just reads a single file in JSON or YAML format, and parse it as a JavaScript object.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed\n * @param {function} [callback] - An error-first callback. The second parameter is the parsed JSON schema object.\n * @returns {Promise} - The returned promise resolves with the parsed JSON schema object.\n */\n$RefParser.prototype.parse = function(schema, options, callback) {\n var args = normalizeArgs(arguments);\n\n if (args.schema && typeof args.schema === 'object') {\n // The schema is an object, not a path/url\n this.schema = args.schema;\n this._basePath = '';\n var $ref = new $Ref(this.$refs, this._basePath);\n $ref.setValue(this.schema, args.options);\n\n return maybe(args.callback, Promise.resolve(this.schema));\n }\n\n if (!args.schema || typeof args.schema !== 'string') {\n var err = ono('Expected a file path, URL, or object. Got %s', args.schema);\n return maybe(args.callback, Promise.reject(err));\n }\n\n var me = this;\n\n // Resolve the absolute path of the schema\n args.schema = util.path.localPathToUrl(args.schema);\n args.schema = url.resolve(util.path.cwd(), args.schema);\n this._basePath = util.path.stripHash(args.schema);\n\n // Read the schema file/url\n return read(args.schema, this.$refs, args.options)\n .then(function(cached$Ref) {\n var value = cached$Ref.$ref.value;\n if (!value || typeof value !== 'object' || value instanceof Buffer) {\n throw ono.syntax('\"%s\" is not a valid JSON Schema', me._basePath);\n }\n else {\n me.schema = value;\n return maybe(args.callback, Promise.resolve(me.schema));\n }\n })\n .catch(function(e) {\n return maybe(args.callback, Promise.reject(e));\n });\n};\n\n/**\n * Parses the given JSON schema and resolves any JSON references, including references in\n * externally-referenced files.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed and resolved\n * @param {function} [callback]\n * - An error-first callback. The second parameter is a {@link $Refs} object containing the resolved JSON references\n *\n * @returns {Promise}\n * The returned promise resolves with a {@link $Refs} object containing the resolved JSON references\n */\n$RefParser.resolve = function(schema, options, callback) {\n var Class = this; // eslint-disable-line consistent-this\n return new Class().resolve(schema, options, callback);\n};\n\n/**\n * Parses the given JSON schema and resolves any JSON references, including references in\n * externally-referenced files.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed and resolved\n * @param {function} [callback]\n * - An error-first callback. The second parameter is a {@link $Refs} object containing the resolved JSON references\n *\n * @returns {Promise}\n * The returned promise resolves with a {@link $Refs} object containing the resolved JSON references\n */\n$RefParser.prototype.resolve = function(schema, options, callback) {\n var me = this;\n var args = normalizeArgs(arguments);\n\n return this.parse(args.schema, args.options)\n .then(function() {\n return resolve(me, args.options);\n })\n .then(function() {\n return maybe(args.callback, Promise.resolve(me.$refs));\n })\n .catch(function(err) {\n return maybe(args.callback, Promise.reject(err));\n });\n};\n\n/**\n * Parses the given JSON schema, resolves any JSON references, and bundles all external references\n * into the main JSON schema. This produces a JSON schema that only has *internal* references,\n * not any *external* references.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed, resolved, and dereferenced\n * @param {function} [callback] - An error-first callback. The second parameter is the bundled JSON schema object\n * @returns {Promise} - The returned promise resolves with the bundled JSON schema object.\n */\n$RefParser.bundle = function(schema, options, callback) {\n var Class = this; // eslint-disable-line consistent-this\n return new Class().bundle(schema, options, callback);\n};\n\n/**\n * Parses the given JSON schema, resolves any JSON references, and bundles all external references\n * into the main JSON schema. This produces a JSON schema that only has *internal* references,\n * not any *external* references.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed, resolved, and dereferenced\n * @param {function} [callback] - An error-first callback. The second parameter is the bundled JSON schema object\n * @returns {Promise} - The returned promise resolves with the bundled JSON schema object.\n */\n$RefParser.prototype.bundle = function(schema, options, callback) {\n var me = this;\n var args = normalizeArgs(arguments);\n\n return this.resolve(args.schema, args.options)\n .then(function() {\n bundle(me, args.options);\n return maybe(args.callback, Promise.resolve(me.schema));\n })\n .catch(function(err) {\n return maybe(args.callback, Promise.reject(err));\n });\n};\n\n/**\n * Parses the given JSON schema, resolves any JSON references, and dereferences the JSON schema.\n * That is, all JSON references are replaced with their resolved values.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed, resolved, and dereferenced\n * @param {function} [callback] - An error-first callback. The second parameter is the dereferenced JSON schema object\n * @returns {Promise} - The returned promise resolves with the dereferenced JSON schema object.\n */\n$RefParser.dereference = function(schema, options, callback) {\n var Class = this; // eslint-disable-line consistent-this\n return new Class().dereference(schema, options, callback);\n};\n\n/**\n * Parses the given JSON schema, resolves any JSON references, and dereferences the JSON schema.\n * That is, all JSON references are replaced with their resolved values.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed, resolved, and dereferenced\n * @param {function} [callback] - An error-first callback. The second parameter is the dereferenced JSON schema object\n * @returns {Promise} - The returned promise resolves with the dereferenced JSON schema object.\n */\n$RefParser.prototype.dereference = function(schema, options, callback) {\n var me = this;\n var args = normalizeArgs(arguments);\n\n return this.resolve(args.schema, args.options)\n .then(function() {\n dereference(me, args.options);\n return maybe(args.callback, Promise.resolve(me.schema));\n })\n .catch(function(err) {\n return maybe(args.callback, Promise.reject(err));\n });\n};\n\n/**\n * Normalizes the given arguments, accounting for optional args.\n *\n * @param {Arguments} args\n * @returns {object}\n */\nfunction normalizeArgs(args) {\n var options = args[1], callback = args[2];\n if (typeof options === 'function') {\n callback = options;\n options = undefined;\n }\n if (!(options instanceof Options)) {\n options = new Options(options);\n }\n return {\n schema: args[0],\n options: options,\n callback: callback\n };\n}\n", + "'use strict';\n\nvar Promise = require('./promise'),\n Options = require('./options'),\n $Refs = require('./refs'),\n $Ref = require('./ref'),\n read = require('./read'),\n resolve = require('./resolve'),\n bundle = require('./bundle'),\n dereference = require('./dereference'),\n util = require('./util'),\n url = require('url'),\n maybe = require('call-me-maybe'),\n ono = require('ono');\n\nmodule.exports = $RefParser;\nmodule.exports.YAML = require('./yaml');\n\n/**\n * This class parses a JSON schema, builds a map of its JSON references and their resolved values,\n * and provides methods for traversing, manipulating, and dereferencing those references.\n *\n * @constructor\n */\nfunction $RefParser() {\n /**\n * The parsed (and possibly dereferenced) JSON schema object\n *\n * @type {object}\n * @readonly\n */\n this.schema = null;\n\n /**\n * The resolved JSON references\n *\n * @type {$Refs}\n */\n this.$refs = new $Refs();\n}\n\n/**\n * Parses the given JSON schema.\n * This method does not resolve any JSON references.\n * It just reads a single file in JSON or YAML format, and parse it as a JavaScript object.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed\n * @param {function} [callback] - An error-first callback. The second parameter is the parsed JSON schema object.\n * @returns {Promise} - The returned promise resolves with the parsed JSON schema object.\n */\n$RefParser.parse = function(schema, options, callback) {\n var Class = this; // eslint-disable-line consistent-this\n return new Class().parse(schema, options, callback);\n};\n\n/**\n * Parses the given JSON schema.\n * This method does not resolve any JSON references.\n * It just reads a single file in JSON or YAML format, and parse it as a JavaScript object.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed\n * @param {function} [callback] - An error-first callback. The second parameter is the parsed JSON schema object.\n * @returns {Promise} - The returned promise resolves with the parsed JSON schema object.\n */\n$RefParser.prototype.parse = function(schema, options, callback) {\n var args = normalizeArgs(arguments);\n\n if (args.schema && typeof args.schema === 'object') {\n // The schema is an object, not a path/url\n this.schema = args.schema;\n this.$refs._basePath = '';\n var $ref = new $Ref(this.$refs, this.$refs._basePath);\n $ref.setValue(this.schema, args.options);\n\n return maybe(args.callback, Promise.resolve(this.schema));\n }\n\n if (!args.schema || typeof args.schema !== 'string') {\n var err = ono('Expected a file path, URL, or object. Got %s', args.schema);\n return maybe(args.callback, Promise.reject(err));\n }\n\n var me = this;\n\n // Resolve the absolute path of the schema\n args.schema = util.path.localPathToUrl(args.schema);\n args.schema = url.resolve(util.path.cwd(), args.schema);\n this.$refs._basePath = util.path.stripHash(args.schema);\n\n // Read the schema file/url\n return read(args.schema, this.$refs, args.options)\n .then(function(result) {\n var value = result.$ref.value;\n if (!value || typeof value !== 'object' || value instanceof Buffer) {\n throw ono.syntax('\"%s\" is not a valid JSON Schema', me.$refs._basePath);\n }\n else {\n me.schema = value;\n return maybe(args.callback, Promise.resolve(me.schema));\n }\n })\n .catch(function(e) {\n return maybe(args.callback, Promise.reject(e));\n });\n};\n\n/**\n * Parses the given JSON schema and resolves any JSON references, including references in\n * externally-referenced files.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed and resolved\n * @param {function} [callback]\n * - An error-first callback. The second parameter is a {@link $Refs} object containing the resolved JSON references\n *\n * @returns {Promise}\n * The returned promise resolves with a {@link $Refs} object containing the resolved JSON references\n */\n$RefParser.resolve = function(schema, options, callback) {\n var Class = this; // eslint-disable-line consistent-this\n return new Class().resolve(schema, options, callback);\n};\n\n/**\n * Parses the given JSON schema and resolves any JSON references, including references in\n * externally-referenced files.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed and resolved\n * @param {function} [callback]\n * - An error-first callback. The second parameter is a {@link $Refs} object containing the resolved JSON references\n *\n * @returns {Promise}\n * The returned promise resolves with a {@link $Refs} object containing the resolved JSON references\n */\n$RefParser.prototype.resolve = function(schema, options, callback) {\n var me = this;\n var args = normalizeArgs(arguments);\n\n return this.parse(args.schema, args.options)\n .then(function() {\n return resolve(me, args.options);\n })\n .then(function() {\n return maybe(args.callback, Promise.resolve(me.$refs));\n })\n .catch(function(err) {\n return maybe(args.callback, Promise.reject(err));\n });\n};\n\n/**\n * Parses the given JSON schema, resolves any JSON references, and bundles all external references\n * into the main JSON schema. This produces a JSON schema that only has *internal* references,\n * not any *external* references.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed, resolved, and dereferenced\n * @param {function} [callback] - An error-first callback. The second parameter is the bundled JSON schema object\n * @returns {Promise} - The returned promise resolves with the bundled JSON schema object.\n */\n$RefParser.bundle = function(schema, options, callback) {\n var Class = this; // eslint-disable-line consistent-this\n return new Class().bundle(schema, options, callback);\n};\n\n/**\n * Parses the given JSON schema, resolves any JSON references, and bundles all external references\n * into the main JSON schema. This produces a JSON schema that only has *internal* references,\n * not any *external* references.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed, resolved, and dereferenced\n * @param {function} [callback] - An error-first callback. The second parameter is the bundled JSON schema object\n * @returns {Promise} - The returned promise resolves with the bundled JSON schema object.\n */\n$RefParser.prototype.bundle = function(schema, options, callback) {\n var me = this;\n var args = normalizeArgs(arguments);\n\n return this.resolve(args.schema, args.options)\n .then(function() {\n bundle(me, args.options);\n return maybe(args.callback, Promise.resolve(me.schema));\n })\n .catch(function(err) {\n return maybe(args.callback, Promise.reject(err));\n });\n};\n\n/**\n * Parses the given JSON schema, resolves any JSON references, and dereferences the JSON schema.\n * That is, all JSON references are replaced with their resolved values.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed, resolved, and dereferenced\n * @param {function} [callback] - An error-first callback. The second parameter is the dereferenced JSON schema object\n * @returns {Promise} - The returned promise resolves with the dereferenced JSON schema object.\n */\n$RefParser.dereference = function(schema, options, callback) {\n var Class = this; // eslint-disable-line consistent-this\n return new Class().dereference(schema, options, callback);\n};\n\n/**\n * Parses the given JSON schema, resolves any JSON references, and dereferences the JSON schema.\n * That is, all JSON references are replaced with their resolved values.\n *\n * @param {string|object} schema - The file path or URL of the JSON schema. Or a JSON schema object.\n * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed, resolved, and dereferenced\n * @param {function} [callback] - An error-first callback. The second parameter is the dereferenced JSON schema object\n * @returns {Promise} - The returned promise resolves with the dereferenced JSON schema object.\n */\n$RefParser.prototype.dereference = function(schema, options, callback) {\n var me = this;\n var args = normalizeArgs(arguments);\n\n return this.resolve(args.schema, args.options)\n .then(function() {\n dereference(me, args.options);\n return maybe(args.callback, Promise.resolve(me.schema));\n })\n .catch(function(err) {\n return maybe(args.callback, Promise.reject(err));\n });\n};\n\n/**\n * Normalizes the given arguments, accounting for optional args.\n *\n * @param {Arguments} args\n * @returns {object}\n */\nfunction normalizeArgs(args) {\n var options = args[1], callback = args[2];\n if (typeof options === 'function') {\n callback = options;\n options = undefined;\n }\n if (!(options instanceof Options)) {\n options = new Options(options);\n }\n return {\n schema: args[0],\n options: options,\n callback: callback\n };\n}\n", "/* eslint lines-around-comment: [2, {beforeBlockComment: false}] */\n'use strict';\n\nmodule.exports = $RefParserOptions;\n\n/**\n * Options that determine how JSON schemas are parsed, dereferenced, and cached.\n *\n * @param {object|$RefParserOptions} [options] - Overridden options\n * @constructor\n */\nfunction $RefParserOptions(options) {\n /**\n * Determines what types of files can be parsed\n */\n this.allow = {\n /**\n * Are JSON files allowed?\n * If false, then all schemas must be in YAML format.\n * @type {boolean}\n */\n json: true,\n\n /**\n * Are YAML files allowed?\n * If false, then all schemas must be in JSON format.\n * @type {boolean}\n */\n yaml: true,\n\n /**\n * Are zero-byte files allowed?\n * If false, then an error will be thrown if a file is empty.\n * @type {boolean}\n */\n empty: true,\n\n /**\n * Can unknown file types be $referenced?\n * If true, then they will be parsed as Buffers (byte arrays).\n * If false, then an error will be thrown.\n * @type {boolean}\n */\n unknown: true\n };\n\n /**\n * Determines the types of JSON references that are allowed.\n */\n this.$refs = {\n /**\n * Allow JSON references to other parts of the same file?\n * @type {boolean}\n */\n internal: true,\n\n /**\n * Allow JSON references to external files/URLs?\n * @type {boolean}\n */\n external: true,\n\n /**\n * Allow circular (recursive) JSON references?\n * If false, then a {@link ReferenceError} will be thrown if a circular reference is found.\n * If \"ignore\", then circular references will not be dereferenced.\n * @type {boolean|string}\n */\n circular: true\n };\n\n /**\n * How long to cache files (in seconds).\n */\n this.cache = {\n /**\n * How long to cache local files, in seconds.\n * @type {number}\n */\n fs: 60, // 1 minute\n\n /**\n * How long to cache files downloaded via HTTP, in seconds.\n * @type {number}\n */\n http: 5 * 60, // 5 minutes\n\n /**\n * How long to cache files downloaded via HTTPS, in seconds.\n * @type {number}\n */\n https: 5 * 60 // 5 minutes\n };\n\n /**\n * HTTP request options\n */\n this.http = {\n /**\n * HTTP headers to send when downloading files.\n */\n headers: {},\n\n /**\n * HTTP request timeout (in milliseconds).\n */\n timeout: 5000,\n\n /**\n * The maximum number of HTTP redirects to follow.\n * To disable automatic following of redirects, set this to zero.\n */\n redirects: 5,\n\n /**\n * The `withCredentials` option of XMLHttpRequest.\n * Set this to `true` if you're downloading files from a CORS-enabled server that requires authentication\n */\n withCredentials: false,\n\n };\n\n merge(options, this);\n}\n\n/**\n * Fast, two-level object merge.\n *\n * @param {?object} src - The object to merge into dest\n * @param {object} dest - The object to be modified\n */\nfunction merge(src, dest) {\n if (src) {\n var topKeys = Object.keys(src);\n for (var i = 0; i < topKeys.length; i++) {\n var topKey = topKeys[i];\n var srcChild = src[topKey];\n if (dest[topKey] === undefined) {\n dest[topKey] = srcChild;\n }\n else {\n var childKeys = Object.keys(srcChild);\n for (var j = 0; j < childKeys.length; j++) {\n var childKey = childKeys[j];\n var srcChildValue = srcChild[childKey];\n if (srcChildValue !== undefined) {\n dest[topKey][childKey] = srcChildValue;\n }\n }\n }\n }\n }\n}\n", "'use strict';\n\nvar YAML = require('./yaml'),\n util = require('./util'),\n ono = require('ono');\n\nmodule.exports = parse;\n\n/**\n * Parses the given data as YAML, JSON, or a raw Buffer (byte array), depending on the options.\n *\n * @param {string|Buffer} data - The data to be parsed\n * @param {string} path - The file path or URL that `data` came from\n * @param {$RefParserOptions} options\n *\n * @returns {string|Buffer|object}\n * If `data` can be parsed as YAML or JSON, then the returned value is a JavaScript object.\n * Otherwise, the returned value is the raw string or Buffer that was passed in.\n */\nfunction parse(data, path, options) {\n var parsed;\n\n try {\n if (options.allow.yaml) {\n util.debug('Parsing YAML file: %s', path);\n parsed = YAML.parse(data.toString());\n util.debug(' Parsed successfully');\n }\n else if (options.allow.json) {\n util.debug('Parsing JSON file: %s', path);\n parsed = JSON.parse(data.toString());\n util.debug(' Parsed successfully');\n }\n else {\n parsed = data;\n }\n }\n catch (e) {\n var ext = util.path.extname(path);\n if (options.allow.unknown && ['.json', '.yaml', '.yml'].indexOf(ext) === -1) {\n // It's not a YAML or JSON file, and unknown formats are allowed,\n // so ignore the parsing error and just return the raw data\n util.debug(' Unknown file format. Not parsed.');\n parsed = data;\n }\n else {\n throw ono.syntax(e, 'Error parsing \"%s\"', path);\n }\n }\n\n if (isEmpty(parsed) && !options.allow.empty) {\n throw ono.syntax('Error parsing \"%s\". \\nParsed value is empty', path);\n }\n\n return parsed;\n}\n\n/**\n * Determines whether the parsed value is \"empty\".\n *\n * @param {*} value\n * @returns {boolean}\n */\nfunction isEmpty(value) {\n return !value ||\n (typeof value === 'object' && Object.keys(value).length === 0) ||\n (typeof value === 'string' && value.trim().length === 0) ||\n (value instanceof Buffer && value.length === 0);\n}\n", - "'use strict';\n\nmodule.exports = Pointer;\n\nvar $Ref = require('./ref'),\n util = require('./util'),\n url = require('url'),\n ono = require('ono'),\n slashes = /\\//g,\n tildes = /~/g,\n escapedSlash = /~1/g,\n escapedTilde = /~0/g;\n\n/**\n * This class represents a single JSON pointer and its resolved value.\n *\n * @param {$Ref} $ref\n * @param {string} path\n * @constructor\n */\nfunction Pointer($ref, path) {\n /**\n * The {@link $Ref} object that contains this {@link Pointer} object.\n * @type {$Ref}\n */\n this.$ref = $ref;\n\n /**\n * The file path or URL, containing the JSON pointer in the hash.\n * This path is relative to the path of the main JSON schema file.\n * @type {string}\n */\n this.path = path;\n\n /**\n * The value of the JSON pointer.\n * Can be any JSON type, not just objects. Unknown file types are represented as Buffers (byte arrays).\n * @type {?*}\n */\n this.value = undefined;\n\n /**\n * Indicates whether the pointer is references itself.\n * @type {boolean}\n */\n this.circular = false;\n}\n\n/**\n * Resolves the value of a nested property within the given object.\n *\n * @param {*} obj - The object that will be crawled\n * @param {$RefParserOptions} [options]\n *\n * @returns {Pointer}\n * Returns a JSON pointer whose {@link Pointer#value} is the resolved value.\n * If resolving this value required resolving other JSON references, then\n * the {@link Pointer#$ref} and {@link Pointer#path} will reflect the resolution path\n * of the resolved value.\n */\nPointer.prototype.resolve = function(obj, options) {\n var tokens = Pointer.parse(this.path);\n\n // Crawl the object, one token at a time\n this.value = obj;\n for (var i = 0; i < tokens.length; i++) {\n if (resolveIf$Ref(this, options)) {\n // The $ref path has changed, so append the remaining tokens to the path\n this.path = Pointer.join(this.path, tokens.slice(i));\n }\n\n var token = tokens[i];\n if (this.value[token] === undefined) {\n throw ono.syntax('Error resolving $ref pointer \"%s\". \\nToken \"%s\" does not exist.', this.path, token);\n }\n else {\n this.value = this.value[token];\n }\n }\n\n // Resolve the final value\n resolveIf$Ref(this, options);\n return this;\n};\n\n/**\n * Sets the value of a nested property within the given object.\n *\n * @param {*} obj - The object that will be crawled\n * @param {*} value - the value to assign\n * @param {$RefParserOptions} [options]\n *\n * @returns {*}\n * Returns the modified object, or an entirely new object if the entire object is overwritten.\n */\nPointer.prototype.set = function(obj, value, options) {\n var tokens = Pointer.parse(this.path);\n var token;\n\n if (tokens.length === 0) {\n // There are no tokens, replace the entire object with the new value\n this.value = value;\n return value;\n }\n\n // Crawl the object, one token at a time\n this.value = obj;\n for (var i = 0; i < tokens.length - 1; i++) {\n resolveIf$Ref(this, options);\n\n token = tokens[i];\n if (this.value && this.value[token] !== undefined) {\n // The token exists\n this.value = this.value[token];\n }\n else {\n // The token doesn't exist, so create it\n this.value = setValue(this, token, {});\n }\n }\n\n // Set the value of the final token\n resolveIf$Ref(this, options);\n token = tokens[tokens.length - 1];\n setValue(this, token, value);\n\n // Return the updated object\n return obj;\n};\n\n/**\n * Parses a JSON pointer (or a path containing a JSON pointer in the hash)\n * and returns an array of the pointer's tokens.\n * (e.g. \"schema.json#/definitions/person/name\" => [\"definitions\", \"person\", \"name\"])\n *\n * The pointer is parsed according to RFC 6901\n * {@link https://tools.ietf.org/html/rfc6901#section-3}\n *\n * @param {string} path\n * @returns {string[]}\n */\nPointer.parse = function(path) {\n // Get the JSON pointer from the path's hash\n var pointer = util.path.getHash(path).substr(1);\n\n // If there's no pointer, then there are no tokens,\n // so return an empty array\n if (!pointer) {\n return [];\n }\n\n // Split into an array\n pointer = pointer.split('/');\n\n // Decode each part, according to RFC 6901\n for (var i = 0; i < pointer.length; i++) {\n pointer[i] = decodeURI(pointer[i].replace(escapedSlash, '/').replace(escapedTilde, '~'));\n }\n\n if (pointer[0] !== '') {\n throw ono.syntax('Invalid $ref pointer \"%s\". Pointers must begin with \"#/\"', pointer);\n }\n\n return pointer.slice(1);\n};\n\n/**\n * Creates a JSON pointer path, by joining one or more tokens to a base path.\n *\n * @param {string} base - The base path (e.g. \"schema.json#/definitions/person\")\n * @param {string|string[]} tokens - The token(s) to append (e.g. [\"name\", \"first\"])\n * @returns {string}\n */\nPointer.join = function(base, tokens) {\n // Ensure that the base path contains a hash\n if (base.indexOf('#') === -1) {\n base += '#';\n }\n\n // Append each token to the base path\n tokens = Array.isArray(tokens) ? tokens : [tokens];\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n // Encode the token, according to RFC 6901\n base += '/' + encodeURI(token.replace(tildes, '~0').replace(slashes, '~1'));\n }\n\n return base;\n};\n\n/**\n * If the given pointer's {@link Pointer#value} is a JSON reference,\n * then the reference is resolved and {@link Pointer#value} is replaced with the resolved value.\n * In addition, {@link Pointer#path} and {@link Pointer#$ref} are updated to reflect the\n * resolution path of the new value.\n *\n * @param {Pointer} pointer\n * @param {$RefParserOptions} [options]\n * @returns {boolean} - Returns `true` if the resolution path changed\n */\nfunction resolveIf$Ref(pointer, options) {\n // Is the value a JSON reference? (and allowed?)\n if ($Ref.isAllowed$Ref(pointer.value, options)) {\n var $refPath = url.resolve(pointer.path, pointer.value.$ref);\n\n if ($refPath === pointer.path) {\n // The value is a reference to itself, so there's nothing to do.\n pointer.circular = true;\n }\n else {\n // Does the JSON reference have other properties (other than \"$ref\")?\n // If so, then don't resolve it, since it represents a new type\n if (Object.keys(pointer.value).length === 1) {\n // Resolve the reference\n var resolved = pointer.$ref.$refs._resolve($refPath);\n pointer.$ref = resolved.$ref;\n pointer.path = resolved.path;\n pointer.value = resolved.value;\n return true;\n }\n }\n }\n}\n\n/**\n * Sets the specified token value of the {@link Pointer#value}.\n *\n * The token is evaluated according to RFC 6901.\n * {@link https://tools.ietf.org/html/rfc6901#section-4}\n *\n * @param {Pointer} pointer - The JSON Pointer whose value will be modified\n * @param {string} token - A JSON Pointer token that indicates how to modify `obj`\n * @param {*} value - The value to assign\n * @returns {*} - Returns the assigned value\n */\nfunction setValue(pointer, token, value) {\n if (pointer.value && typeof pointer.value === 'object') {\n if (token === '-' && Array.isArray(pointer.value)) {\n pointer.value.push(value);\n }\n else {\n pointer.value[token] = value;\n }\n }\n else {\n throw ono.syntax('Error assigning $ref pointer \"%s\". \\nCannot set \"%s\" of a non-object.', pointer.path, token);\n }\n return value;\n}\n", + "'use strict';\n\nvar isWindows = /^win/.test(process.platform),\n forwardSlashPattern = /\\//g,\n protocolPattern = /^([a-z0-9.+-]+):\\/\\//i;\n\n// RegExp patterns to URL-encode special characters in local filesystem paths\nvar urlEncodePatterns = [\n /\\?/g, '%3F',\n /\\#/g, '%23',\n isWindows ? /\\\\/g : /\\//, '/'\n];\n\n// RegExp patterns to URL-decode special characters for local filesystem paths\nvar urlDecodePatterns = [\n /\\%23/g, '#',\n /\\%24/g, '$',\n /\\%26/g, '&',\n /\\%2C/g, ',',\n /\\%40/g, '@'\n];\n\n/**\n * Returns the current working directory (in Node) or the current page URL (in browsers).\n *\n * @returns {string}\n */\nexports.cwd = function cwd() {\n return process.browser ? location.href : process.cwd() + '/';\n};\n\n/**\n * Determines whether the given path is a URL.\n *\n * @param {string} path\n * @returns {boolean}\n */\nexports.isUrl = function isUrl(path) {\n var protocol = protocolPattern.exec(path);\n if (protocol) {\n protocol = protocol[1].toLowerCase();\n return protocol !== 'file';\n }\n return false;\n};\n\n/**\n * If the given path is a local filesystem path, it is converted to a URL.\n *\n * @param {string} path\n * @returns {string}\n */\nexports.localPathToUrl = function localPathToUrl(path) {\n if (!process.browser && !exports.isUrl(path)) {\n // Manually encode characters that are not encoded by `encodeURI`\n for (var i = 0; i < urlEncodePatterns.length; i += 2) {\n path = path.replace(urlEncodePatterns[i], urlEncodePatterns[i + 1]);\n }\n path = encodeURI(path);\n }\n return path;\n};\n\n/**\n * Converts a URL to a local filesystem path\n *\n * @param {string} url\n * @param {boolean} [keepFileProtocol] - If true, then \"file://\" will NOT be stripped\n * @returns {string}\n */\nexports.urlToLocalPath = function urlToLocalPath(url, keepFileProtocol) {\n // Decode URL-encoded characters\n url = decodeURI(url);\n\n // Manually decode characters that are not decoded by `decodeURI`\n for (var i = 0; i < urlDecodePatterns.length; i += 2) {\n url = url.replace(urlDecodePatterns[i], urlDecodePatterns[i + 1]);\n }\n\n // Handle \"file://\" URLs\n var isFileUrl = url.substr(0, 7).toLowerCase() === 'file://';\n if (isFileUrl) {\n var protocol = 'file:///';\n\n // Remove the third \"/\" if there is one\n var path = url[7] === '/' ? url.substr(8) : url.substr(7);\n\n if (isWindows && path[1] === '/') {\n // insert a colon (\":\") after the drive letter on Windows\n path = path[0] + ':' + path.substr(1);\n }\n\n if (keepFileProtocol) {\n url = protocol + path;\n }\n else {\n isFileUrl = false;\n url = isWindows ? path : '/' + path;\n }\n }\n\n // Format path separators on Windows\n if (isWindows && !isFileUrl) {\n url = url.replace(forwardSlashPattern, '\\\\');\n }\n\n return url;\n};\n\n/**\n * Returns the hash (URL fragment), of the given path.\n * If there is no hash, then the root hash (\"#\") is returned.\n *\n * @param {string} path\n * @returns {string}\n */\nexports.getHash = function getHash(path) {\n var hashIndex = path.indexOf('#');\n if (hashIndex >= 0) {\n return path.substr(hashIndex);\n }\n return '#';\n};\n\n/**\n * Removes the hash (URL fragment), if any, from the given path.\n *\n * @param {string} path\n * @returns {string}\n */\nexports.stripHash = function stripHash(path) {\n var hashIndex = path.indexOf('#');\n if (hashIndex >= 0) {\n path = path.substr(0, hashIndex);\n }\n return path;\n};\n\n/**\n * Returns the file extension of the given path.\n *\n * @param {string} path\n * @returns {string}\n */\nexports.extname = function extname(path) {\n var lastDot = path.lastIndexOf('.');\n if (lastDot >= 0) {\n return path.substr(lastDot).toLowerCase();\n }\n return '';\n};\n", + "'use strict';\n\nmodule.exports = Pointer;\n\nvar $Ref = require('./ref'),\n util = require('./util'),\n url = require('url'),\n ono = require('ono'),\n slashes = /\\//g,\n tildes = /~/g,\n escapedSlash = /~1/g,\n escapedTilde = /~0/g;\n\n/**\n * This class represents a single JSON pointer and its resolved value.\n *\n * @param {$Ref} $ref\n * @param {string} path\n * @constructor\n */\nfunction Pointer($ref, path) {\n /**\n * The {@link $Ref} object that contains this {@link Pointer} object.\n * @type {$Ref}\n */\n this.$ref = $ref;\n\n /**\n * The file path or URL, containing the JSON pointer in the hash.\n * This path is relative to the path of the main JSON schema file.\n * @type {string}\n */\n this.path = path;\n\n /**\n * The value of the JSON pointer.\n * Can be any JSON type, not just objects. Unknown file types are represented as Buffers (byte arrays).\n * @type {?*}\n */\n this.value = undefined;\n\n /**\n * Indicates whether the pointer references itself.\n * @type {boolean}\n */\n this.circular = false;\n}\n\n/**\n * Resolves the value of a nested property within the given object.\n *\n * @param {*} obj - The object that will be crawled\n * @param {$RefParserOptions} [options]\n *\n * @returns {Pointer}\n * Returns a JSON pointer whose {@link Pointer#value} is the resolved value.\n * If resolving this value required resolving other JSON references, then\n * the {@link Pointer#$ref} and {@link Pointer#path} will reflect the resolution path\n * of the resolved value.\n */\nPointer.prototype.resolve = function(obj, options) {\n var tokens = Pointer.parse(this.path);\n\n // Crawl the object, one token at a time\n this.value = obj;\n for (var i = 0; i < tokens.length; i++) {\n if (resolveIf$Ref(this, options)) {\n // The $ref path has changed, so append the remaining tokens to the path\n this.path = Pointer.join(this.path, tokens.slice(i));\n }\n\n var token = tokens[i];\n if (this.value[token] === undefined) {\n throw ono.syntax('Error resolving $ref pointer \"%s\". \\nToken \"%s\" does not exist.', this.path, token);\n }\n else {\n this.value = this.value[token];\n }\n }\n\n // Resolve the final value\n resolveIf$Ref(this, options);\n return this;\n};\n\n/**\n * Sets the value of a nested property within the given object.\n *\n * @param {*} obj - The object that will be crawled\n * @param {*} value - the value to assign\n * @param {$RefParserOptions} [options]\n *\n * @returns {*}\n * Returns the modified object, or an entirely new object if the entire object is overwritten.\n */\nPointer.prototype.set = function(obj, value, options) {\n var tokens = Pointer.parse(this.path);\n var token;\n\n if (tokens.length === 0) {\n // There are no tokens, replace the entire object with the new value\n this.value = value;\n return value;\n }\n\n // Crawl the object, one token at a time\n this.value = obj;\n for (var i = 0; i < tokens.length - 1; i++) {\n resolveIf$Ref(this, options);\n\n token = tokens[i];\n if (this.value && this.value[token] !== undefined) {\n // The token exists\n this.value = this.value[token];\n }\n else {\n // The token doesn't exist, so create it\n this.value = setValue(this, token, {});\n }\n }\n\n // Set the value of the final token\n resolveIf$Ref(this, options);\n token = tokens[tokens.length - 1];\n setValue(this, token, value);\n\n // Return the updated object\n return obj;\n};\n\n/**\n * Parses a JSON pointer (or a path containing a JSON pointer in the hash)\n * and returns an array of the pointer's tokens.\n * (e.g. \"schema.json#/definitions/person/name\" => [\"definitions\", \"person\", \"name\"])\n *\n * The pointer is parsed according to RFC 6901\n * {@link https://tools.ietf.org/html/rfc6901#section-3}\n *\n * @param {string} path\n * @returns {string[]}\n */\nPointer.parse = function(path) {\n // Get the JSON pointer from the path's hash\n var pointer = util.path.getHash(path).substr(1);\n\n // If there's no pointer, then there are no tokens,\n // so return an empty array\n if (!pointer) {\n return [];\n }\n\n // Split into an array\n pointer = pointer.split('/');\n\n // Decode each part, according to RFC 6901\n for (var i = 0; i < pointer.length; i++) {\n pointer[i] = decodeURI(pointer[i].replace(escapedSlash, '/').replace(escapedTilde, '~'));\n }\n\n if (pointer[0] !== '') {\n throw ono.syntax('Invalid $ref pointer \"%s\". Pointers must begin with \"#/\"', pointer);\n }\n\n return pointer.slice(1);\n};\n\n/**\n * Creates a JSON pointer path, by joining one or more tokens to a base path.\n *\n * @param {string} base - The base path (e.g. \"schema.json#/definitions/person\")\n * @param {string|string[]} tokens - The token(s) to append (e.g. [\"name\", \"first\"])\n * @returns {string}\n */\nPointer.join = function(base, tokens) {\n // Ensure that the base path contains a hash\n if (base.indexOf('#') === -1) {\n base += '#';\n }\n\n // Append each token to the base path\n tokens = Array.isArray(tokens) ? tokens : [tokens];\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n // Encode the token, according to RFC 6901\n base += '/' + encodeURI(token.replace(tildes, '~0').replace(slashes, '~1'));\n }\n\n return base;\n};\n\n/**\n * If the given pointer's {@link Pointer#value} is a JSON reference,\n * then the reference is resolved and {@link Pointer#value} is replaced with the resolved value.\n * In addition, {@link Pointer#path} and {@link Pointer#$ref} are updated to reflect the\n * resolution path of the new value.\n *\n * @param {Pointer} pointer\n * @param {$RefParserOptions} [options]\n * @returns {boolean} - Returns `true` if the resolution path changed\n */\nfunction resolveIf$Ref(pointer, options) {\n // Is the value a JSON reference? (and allowed?)\n\n if ($Ref.isAllowed$Ref(pointer.value, options)) {\n var $refPath = url.resolve(pointer.path, pointer.value.$ref);\n\n if ($refPath === pointer.path) {\n // The value is a reference to itself, so there's nothing to do.\n pointer.circular = true;\n }\n else {\n var resolved = pointer.$ref.$refs._resolve($refPath);\n\n if (Object.keys(pointer.value).length === 1) {\n // Resolve the reference\n pointer.$ref = resolved.$ref;\n pointer.path = resolved.path;\n pointer.value = resolved.value;\n }\n else {\n // This JSON reference has additional properties (other than \"$ref\"),\n // so it \"extends\" the resolved value, rather than simply pointing to it.\n pointer.value = util.dereference(pointer.value, resolved.value);\n }\n\n return true;\n }\n }\n}\n\n/**\n * Sets the specified token value of the {@link Pointer#value}.\n *\n * The token is evaluated according to RFC 6901.\n * {@link https://tools.ietf.org/html/rfc6901#section-4}\n *\n * @param {Pointer} pointer - The JSON Pointer whose value will be modified\n * @param {string} token - A JSON Pointer token that indicates how to modify `obj`\n * @param {*} value - The value to assign\n * @returns {*} - Returns the assigned value\n */\nfunction setValue(pointer, token, value) {\n if (pointer.value && typeof pointer.value === 'object') {\n if (token === '-' && Array.isArray(pointer.value)) {\n pointer.value.push(value);\n }\n else {\n pointer.value[token] = value;\n }\n }\n else {\n throw ono.syntax('Error assigning $ref pointer \"%s\". \\nCannot set \"%s\" of a non-object.', pointer.path, token);\n }\n return value;\n}\n", "'use strict';\n\n/** @type {Promise} **/\nmodule.exports = typeof Promise === 'function' ? Promise : require('es6-promise').Promise;\n", "'use strict';\n\nvar fs = require('fs'),\n download = require('./download'),\n parse = require('./parse'),\n util = require('./util'),\n $Ref = require('./ref'),\n Promise = require('./promise'),\n url = require('url'),\n ono = require('ono');\n\nmodule.exports = read;\n\n/**\n * Reads the specified file path or URL, possibly from cache.\n *\n * @param {string} path - This path MUST already be resolved, since `read` doesn't know the resolution context\n * @param {$Refs} $refs\n * @param {$RefParserOptions} options\n *\n * @returns {Promise}\n * The promise resolves with an object that contains a {@link $Ref}\n * and a flag indicating whether the {@link $Ref} came from cache or not.\n */\nfunction read(path, $refs, options) {\n try {\n // Remove the URL fragment, if any\n path = util.path.stripHash(path);\n util.debug('Reading %s', path);\n\n // Return from cache, if possible\n var $ref = $refs._get$Ref(path);\n if ($ref && !$ref.isExpired()) {\n util.debug(' cached from %s', $ref.pathType);\n return Promise.resolve({\n $ref: $ref,\n cached: true\n });\n }\n\n // Add a placeholder $ref to the cache, so we don't read this URL multiple times\n $ref = new $Ref($refs, path);\n\n // Read and return the $ref\n return read$Ref($ref, options);\n }\n catch (e) {\n return Promise.reject(e);\n }\n}\n\n/**\n * Reads the specified file path or URL and updates the given {@link $Ref} accordingly.\n *\n * @param {$Ref} $ref - The {@link $Ref} to read and update\n * @param {$RefParserOptions} options\n *\n * @returns {Promise}\n * The promise resolves with the updated {@link $Ref} object (the same instance that was passed in)\n */\nfunction read$Ref($ref, options) {\n try {\n var promise = options.$refs.external && (read$RefFile($ref, options) || read$RefUrl($ref, options));\n\n if (promise) {\n return promise\n .then(function(data) {\n // Update the $ref with the parsed file contents\n var value = parse(data, $ref.path, options);\n $ref.setValue(value, options);\n\n return {\n $ref: $ref,\n cached: false\n };\n });\n }\n else {\n return Promise.reject(ono.syntax('Unable to resolve $ref pointer \"%s\"', $ref.path));\n }\n }\n catch (e) {\n return Promise.reject(e);\n }\n}\n\n/**\n * If the given {@link $Ref#path} is a local file, then the file is read\n * and {@link $Ref#type} is set to \"fs\".\n *\n * @param {$Ref} $ref - The {@link $Ref} to read and update\n * @param {$RefParserOptions} options\n *\n * @returns {Promise|undefined}\n * Returns a promise if {@link $Ref#path} is a local file.\n * The promise resolves with the raw file contents.\n */\nfunction read$RefFile($ref, options) {\n if (process.browser || util.path.isUrl($ref.path)) {\n return;\n }\n\n $ref.pathType = 'fs';\n return new Promise(function(resolve, reject) {\n var file;\n try {\n file = util.path.urlToLocalPath($ref.path);\n }\n catch (err) {\n reject(ono.uri(err, 'Malformed URI: %s', $ref.path));\n }\n\n util.debug('Opening file: %s', file);\n\n try {\n fs.readFile(file, function(err, data) {\n if (err) {\n reject(ono(err, 'Error opening file \"%s\"', $ref.path));\n }\n else {\n resolve(data);\n }\n });\n }\n catch (err) {\n reject(ono(err, 'Error opening file \"%s\"', file));\n }\n });\n}\n\n/**\n * If the given {@link $Ref#path} is a URL, then the file is downloaded\n * and {@link $Ref#type} is set to \"http\" or \"https\".\n *\n * @param {$Ref} $ref - The {@link $Ref} to read and update\n * @param {$RefParserOptions} options\n *\n * @returns {Promise|undefined}\n * Returns a promise if {@link $Ref#path} is a URL.\n * The promise resolves with the raw file contents.\n */\nfunction read$RefUrl($ref, options) {\n var u = url.parse($ref.path);\n\n if (process.browser && !u.protocol) {\n // Use the protocol of the current page\n u.protocol = url.parse(location.href).protocol;\n }\n\n if (u.protocol === 'http:') {\n $ref.pathType = 'http';\n return download(u, options);\n }\n else if (u.protocol === 'https:') {\n $ref.pathType = 'https';\n return download(u, options);\n }\n}\n", - "'use strict';\n\nmodule.exports = $Ref;\n\nvar Pointer = require('./pointer'),\n util = require('./util');\n\n/**\n * This class represents a single JSON reference and its resolved value.\n *\n * @param {$Refs} $refs\n * @param {string} path\n * @constructor\n */\nfunction $Ref($refs, path) {\n path = util.path.stripHash(path);\n\n // Add this $ref to its parent collection\n $refs._$refs[path] = this;\n\n /**\n * The {@link $Refs} object that contains this {@link $Ref} object.\n * @type {$Refs}\n */\n this.$refs = $refs;\n\n /**\n * The file path or URL of the referenced file.\n * This path is relative to the path of the main JSON schema file.\n *\n * This path does NOT contain document fragments (JSON pointers). It always references an ENTIRE file.\n * Use methods such as {@link $Ref#get}, {@link $Ref#resolve}, and {@link $Ref#exists} to get\n * specific JSON pointers within the file.\n *\n * @type {string}\n */\n this.path = path;\n\n /**\n * Indicates the type of {@link $Ref#path} (e.g. \"fs\", \"http\", or \"https\")\n * @type {?string}\n */\n this.pathType = undefined;\n\n /**\n * The path TO this JSON reference from the root of the main JSON schema file.\n * If the same JSON reference occurs multiple times in the schema, then this is the pointer to the\n * FIRST occurrence.\n *\n * This property is used by the {@link $RefParser.bundle} method to re-map other JSON references.\n *\n * @type {string}\n */\n this.pathFromRoot = '#';\n\n /**\n * The resolved value of the JSON reference.\n * Can be any JSON type, not just objects. Unknown file types are represented as Buffers (byte arrays).\n * @type {?*}\n */\n this.value = undefined;\n\n /**\n * The date/time that the cached value will expire.\n * @type {?Date}\n */\n this.expires = undefined;\n}\n\n/**\n * Determines whether the {@link $Ref#value} has expired.\n *\n * @returns {boolean}\n */\n$Ref.prototype.isExpired = function() {\n return !!(this.expires && this.expires <= new Date());\n};\n\n/**\n * Immediately expires the {@link $Ref#value}.\n */\n$Ref.prototype.expire = function() {\n this.expires = new Date();\n};\n\n/**\n * Sets the {@link $Ref#value} and renews the cache expiration.\n *\n * @param {*} value\n * @param {$RefParserOptions} options\n */\n$Ref.prototype.setValue = function(value, options) {\n this.value = value;\n\n // Extend the cache expiration\n var cacheDuration = options.cache[this.pathType];\n if (cacheDuration > 0) {\n var expires = Date.now() + (cacheDuration * 1000);\n this.expires = new Date(expires);\n }\n};\n\n/**\n * Determines whether the given JSON reference exists within this {@link $Ref#value}.\n *\n * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash\n * @returns {boolean}\n */\n$Ref.prototype.exists = function(path) {\n try {\n this.resolve(path);\n return true;\n }\n catch (e) {\n return false;\n }\n};\n\n/**\n * Resolves the given JSON reference within this {@link $Ref#value} and returns the resolved value.\n *\n * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash\n * @param {$RefParserOptions} options\n * @returns {*} - Returns the resolved value\n */\n$Ref.prototype.get = function(path, options) {\n return this.resolve(path, options).value;\n};\n\n/**\n * Resolves the given JSON reference within this {@link $Ref#value}.\n *\n * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash\n * @param {$RefParserOptions} options\n * @returns {Pointer}\n */\n$Ref.prototype.resolve = function(path, options) {\n var pointer = new Pointer(this, path);\n return pointer.resolve(this.value, options);\n};\n\n/**\n * Sets the value of a nested property within this {@link $Ref#value}.\n * If the property, or any of its parents don't exist, they will be created.\n *\n * @param {string} path - The full path of the property to set, optionally with a JSON pointer in the hash\n * @param {*} value - The value to assign\n * @param {$RefParserOptions} options\n */\n$Ref.prototype.set = function(path, value, options) {\n var pointer = new Pointer(this, path);\n this.value = pointer.set(this.value, value, options);\n};\n\n/**\n * Determines whether the given value is a JSON reference.\n *\n * @param {*} value - The value to inspect\n * @returns {boolean}\n */\n$Ref.is$Ref = function(value) {\n return value && typeof value === 'object' && typeof value.$ref === 'string' && value.$ref.length > 0;\n};\n\n/**\n * Determines whether the given value is an external JSON reference.\n *\n * @param {*} value - The value to inspect\n * @returns {boolean}\n */\n$Ref.isExternal$Ref = function(value) {\n return $Ref.is$Ref(value) && value.$ref[0] !== '#';\n};\n\n/**\n * Determines whether the given value is a JSON reference, and whether it is allowed by the options.\n * For example, if it references an external file, then options.$refs.external must be true.\n *\n * @param {*} value - The value to inspect\n * @param {$RefParserOptions} options\n * @returns {boolean}\n */\n$Ref.isAllowed$Ref = function(value, options) {\n if ($Ref.is$Ref(value)) {\n if (value.$ref[0] === '#') {\n if (options.$refs.internal) {\n return true;\n }\n }\n else if (options.$refs.external) {\n return true;\n }\n }\n};\n", - "'use strict';\n\nvar Options = require('./options'),\n util = require('./util'),\n ono = require('ono');\n\nmodule.exports = $Refs;\n\n/**\n * This class is a map of JSON references and their resolved values.\n */\nfunction $Refs() {\n /**\n * Indicates whether the schema contains any circular references.\n *\n * @type {boolean}\n */\n this.circular = false;\n\n /**\n * A map of paths/urls to {@link $Ref} objects\n *\n * @type {object}\n * @protected\n */\n this._$refs = {};\n}\n\n/**\n * Returns the paths of all the files/URLs that are referenced by the JSON schema,\n * including the schema itself.\n *\n * @param {...string|string[]} [types] - Only return paths of the given types (\"fs\", \"http\", \"https\")\n * @returns {string[]}\n */\n$Refs.prototype.paths = function(types) {\n var paths = getPaths(this._$refs, arguments);\n return paths.map(function(path) {\n return path.decoded;\n });\n};\n\n/**\n * Returns the map of JSON references and their resolved values.\n *\n * @param {...string|string[]} [types] - Only return references of the given types (\"fs\", \"http\", \"https\")\n * @returns {object}\n */\n$Refs.prototype.values = function(types) {\n var $refs = this._$refs;\n var paths = getPaths($refs, arguments);\n return paths.reduce(function(obj, path) {\n obj[path.decoded] = $refs[path.encoded].value;\n return obj;\n }, {});\n};\n\n/**\n * Returns a POJO (plain old JavaScript object) for serialization as JSON.\n *\n * @returns {object}\n */\n$Refs.prototype.toJSON = $Refs.prototype.values;\n\n/**\n * Determines whether the given JSON reference has expired.\n * Returns true if the reference does not exist.\n *\n * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash\n * @returns {boolean}\n */\n$Refs.prototype.isExpired = function(path) {\n var $ref = this._get$Ref(path);\n return $ref === undefined || $ref.isExpired();\n};\n\n/**\n * Immediately expires the given JSON reference.\n * If the reference does not exist, nothing happens.\n *\n * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash\n */\n$Refs.prototype.expire = function(path) {\n var $ref = this._get$Ref(path);\n if ($ref) {\n $ref.expire();\n }\n};\n\n/**\n * Determines whether the given JSON reference exists.\n *\n * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash\n * @returns {boolean}\n */\n$Refs.prototype.exists = function(path) {\n try {\n this._resolve(path);\n return true;\n }\n catch (e) {\n return false;\n }\n};\n\n/**\n * Resolves the given JSON reference and returns the resolved value.\n *\n * @param {string} path - The full path being resolved, with a JSON pointer in the hash\n * @param {$RefParserOptions} options\n * @returns {*} - Returns the resolved value\n */\n$Refs.prototype.get = function(path, options) {\n return this._resolve(path, options).value;\n};\n\n/**\n * Sets the value of a nested property within this {@link $Ref#value}.\n * If the property, or any of its parents don't exist, they will be created.\n *\n * @param {string} path - The full path of the property to set, optionally with a JSON pointer in the hash\n * @param {*} value - The value to assign\n * @param {$RefParserOptions} options\n */\n$Refs.prototype.set = function(path, value, options) {\n var withoutHash = util.path.stripHash(path);\n var $ref = this._$refs[withoutHash];\n\n if (!$ref) {\n throw ono('Error resolving $ref pointer \"%s\". \\n\"%s\" not found.', path, withoutHash);\n }\n\n options = new Options(options);\n $ref.set(path, value, options);\n};\n\n/**\n * Resolves the given JSON reference.\n *\n * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash\n * @param {$RefParserOptions} options\n * @returns {Pointer}\n * @protected\n */\n$Refs.prototype._resolve = function(path, options) {\n var withoutHash = util.path.stripHash(path);\n var $ref = this._$refs[withoutHash];\n\n if (!$ref) {\n throw ono('Error resolving $ref pointer \"%s\". \\n\"%s\" not found.', path, withoutHash);\n }\n\n options = new Options(options);\n return $ref.resolve(path, options);\n};\n\n/**\n * Returns the specified {@link $Ref} object, or undefined.\n *\n * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash\n * @returns {$Ref|undefined}\n * @protected\n */\n$Refs.prototype._get$Ref = function(path) {\n var withoutHash = util.path.stripHash(path);\n return this._$refs[withoutHash];\n};\n\n/**\n * Returns the encoded and decoded paths keys of the given object.\n *\n * @param {object} $refs - The object whose keys are URL-encoded paths\n * @param {...string|string[]} [types] - Only return paths of the given types (\"fs\", \"http\", \"https\")\n * @returns {object[]}\n */\nfunction getPaths($refs, types) {\n var paths = Object.keys($refs);\n\n // Filter the paths by type\n types = Array.isArray(types[0]) ? types[0] : Array.prototype.slice.call(types);\n if (types.length > 0 && types[0]) {\n paths = paths.filter(function(key) {\n return types.indexOf($refs[key].pathType) !== -1;\n });\n }\n\n // Decode local filesystem paths\n return paths.map(function(path) {\n return {\n encoded: path,\n decoded: $refs[path].pathType === 'fs' ? util.path.urlToLocalPath(path, true) : path\n };\n });\n}\n", - "'use strict';\n\nvar Promise = require('./promise'),\n $Ref = require('./ref'),\n Pointer = require('./pointer'),\n read = require('./read'),\n util = require('./util'),\n url = require('url'),\n ono = require('ono');\n\nmodule.exports = resolve;\n\n/**\n * Crawls the JSON schema, finds all external JSON references, and resolves their values.\n * This method does not mutate the JSON schema. The resolved values are added to {@link $RefParser#$refs}.\n *\n * NOTE: We only care about EXTERNAL references here. INTERNAL references are only relevant when dereferencing.\n *\n * @param {$RefParser} parser\n * @param {$RefParserOptions} options\n *\n * @returns {Promise}\n * The promise resolves once all JSON references in the schema have been resolved,\n * including nested references that are contained in externally-referenced files.\n */\nfunction resolve(parser, options) {\n try {\n if (!options.$refs.external) {\n // Nothing to resolve, so exit early\n return Promise.resolve();\n }\n\n util.debug('Resolving $ref pointers in %s', parser._basePath);\n var promises = crawl(parser.schema, parser._basePath + '#', '#', parser.$refs, options);\n return Promise.all(promises);\n }\n catch (e) {\n return Promise.reject(e);\n }\n}\n\n/**\n * Recursively crawls the given value, and resolves any external JSON references.\n *\n * @param {*} obj - The value to crawl. If it's not an object or array, it will be ignored.\n * @param {string} path - The file path or URL used to resolve relative JSON references.\n * @param {string} pathFromRoot - The path to this point from the schema root\n * @param {$Refs} $refs\n * @param {$RefParserOptions} options\n *\n * @returns {Promise[]}\n * Returns an array of promises. There will be one promise for each JSON reference in `obj`.\n * If `obj` does not contain any JSON references, then the array will be empty.\n * If any of the JSON references point to files that contain additional JSON references,\n * then the corresponding promise will internally reference an array of promises.\n */\nfunction crawl(obj, path, pathFromRoot, $refs, options) {\n var promises = [];\n\n if (obj && typeof obj === 'object') {\n var keys = Object.keys(obj);\n\n // If there's a \"definitions\" property, then crawl it FIRST.\n // This is important when bundling, since the expected behavior\n // is to bundle everything into definitions if possible.\n var defs = keys.indexOf('definitions');\n if (defs > 0) {\n keys.splice(0, 0, keys.splice(defs, 1)[0]);\n }\n\n keys.forEach(function(key) {\n var keyPath = Pointer.join(path, key);\n var keyPathFromRoot = Pointer.join(pathFromRoot, key);\n var value = obj[key];\n\n if ($Ref.isExternal$Ref(value)) {\n // We found a $ref\n util.debug('Resolving $ref pointer \"%s\" at %s', value.$ref, keyPath);\n var $refPath = url.resolve(path, value.$ref);\n\n // Crawl the $referenced value\n var promise = crawl$Ref($refPath, keyPathFromRoot, $refs, options)\n .catch(function(err) {\n throw ono.syntax(err, 'Error at %s', keyPath);\n });\n promises.push(promise);\n }\n else {\n promises = promises.concat(crawl(value, keyPath, keyPathFromRoot, $refs, options));\n }\n });\n }\n return promises;\n}\n\n/**\n * Reads the file/URL at the given path, and then crawls the resulting value and resolves\n * any external JSON references.\n *\n * @param {string} path - The file path or URL to crawl\n * @param {string} pathFromRoot - The path to this point from the schema root\n * @param {$Refs} $refs\n * @param {$RefParserOptions} options\n *\n * @returns {Promise}\n * The promise resolves once all JSON references in the object have been resolved,\n * including nested references that are contained in externally-referenced files.\n */\nfunction crawl$Ref(path, pathFromRoot, $refs, options) {\n return read(path, $refs, options)\n .then(function(cached$Ref) {\n // If a cached $ref is returned, then we DON'T need to crawl it\n if (!cached$Ref.cached) {\n var $ref = cached$Ref.$ref;\n\n // This is a new $ref, so store the path from the root of the JSON schema to this $ref\n $ref.pathFromRoot = pathFromRoot;\n\n // Crawl the new $ref\n util.debug('Resolving $ref pointers in %s', $ref.path);\n var promises = crawl($ref.value, $ref.path + '#', pathFromRoot, $refs, options);\n return Promise.all(promises);\n }\n });\n}\n", - "'use strict';\n\nvar debug = require('debug'),\n isWindows = /^win/.test(process.platform),\n forwardSlashPattern = /\\//g,\n protocolPattern = /^([a-z0-9.+-]+):\\/\\//i;\n\n// RegExp patterns to URL-encode special characters in local filesystem paths\nvar urlEncodePatterns = [\n /\\?/g, '%3F',\n /\\#/g, '%23',\n isWindows ? /\\\\/g : /\\//, '/'\n];\n\n// RegExp patterns to URL-decode special characters for local filesystem paths\nvar urlDecodePatterns = [\n /\\%23/g, '#',\n /\\%24/g, '$',\n /\\%26/g, '&',\n /\\%2C/g, ',',\n /\\%40/g, '@'\n];\n\n/**\n * Writes messages to stdout.\n * Log messages are suppressed by default, but can be enabled by setting the DEBUG variable.\n * @type {function}\n */\nexports.debug = debug('json-schema-ref-parser');\n\n/**\n * Utility functions for working with paths and URLs.\n */\nexports.path = {};\n\n/**\n * Returns the current working directory (in Node) or the current page URL (in browsers).\n *\n * @returns {string}\n */\nexports.path.cwd = function cwd() {\n return process.browser ? location.href : process.cwd() + '/';\n};\n\n/**\n * Determines whether the given path is a URL.\n *\n * @param {string} path\n * @returns {boolean}\n */\nexports.path.isUrl = function isUrl(path) {\n var protocol = protocolPattern.exec(path);\n if (protocol) {\n protocol = protocol[1].toLowerCase();\n return protocol !== 'file';\n }\n return false;\n};\n\n/**\n * If the given path is a local filesystem path, it is converted to a URL.\n *\n * @param {string} path\n * @returns {string}\n */\nexports.path.localPathToUrl = function localPathToUrl(path) {\n if (!process.browser && !exports.path.isUrl(path)) {\n // Manually encode characters that are not encoded by `encodeURI`\n for (var i = 0; i < urlEncodePatterns.length; i += 2) {\n path = path.replace(urlEncodePatterns[i], urlEncodePatterns[i + 1]);\n }\n path = encodeURI(path);\n }\n return path;\n};\n\n/**\n * Converts a URL to a local filesystem path\n *\n * @param {string} url\n * @param {boolean} [keepFileProtocol] - If true, then \"file://\" will NOT be stripped\n * @returns {string}\n */\nexports.path.urlToLocalPath = function urlToLocalPath(url, keepFileProtocol) {\n // Decode URL-encoded characters\n url = decodeURI(url);\n\n // Manually decode characters that are not decoded by `decodeURI`\n for (var i = 0; i < urlDecodePatterns.length; i += 2) {\n url = url.replace(urlDecodePatterns[i], urlDecodePatterns[i + 1]);\n }\n\n // Handle \"file://\" URLs\n var isFileUrl = url.substr(0, 7).toLowerCase() === 'file://';\n if (isFileUrl) {\n var protocol = 'file:///';\n\n // Remove the third \"/\" if there is one\n var path = url[7] === '/' ? url.substr(8) : url.substr(7);\n\n if (isWindows && path[1] === '/') {\n // insert a colon (\":\") after the drive letter on Windows\n path = path[0] + ':' + path.substr(1);\n }\n\n if (keepFileProtocol) {\n url = protocol + path;\n }\n else {\n isFileUrl = false;\n url = isWindows ? path : '/' + path;\n }\n }\n\n // Format path separators on Windows\n if (isWindows && !isFileUrl) {\n url = url.replace(forwardSlashPattern, '\\\\');\n }\n\n return url;\n};\n\n\n/**\n * Returns the hash (URL fragment), if any, of the given path.\n *\n * @param {string} path\n * @returns {string}\n */\nexports.path.getHash = function getHash(path) {\n var hashIndex = path.indexOf('#');\n if (hashIndex >= 0) {\n return path.substr(hashIndex);\n }\n return '';\n};\n\n/**\n * Removes the hash (URL fragment), if any, from the given path.\n *\n * @param {string} path\n * @returns {string}\n */\nexports.path.stripHash = function stripHash(path) {\n var hashIndex = path.indexOf('#');\n if (hashIndex >= 0) {\n path = path.substr(0, hashIndex);\n }\n return path;\n};\n\n/**\n * Returns the file extension of the given path.\n *\n * @param {string} path\n * @returns {string}\n */\nexports.path.extname = function extname(path) {\n var lastDot = path.lastIndexOf('.');\n if (lastDot >= 0) {\n return path.substr(lastDot).toLowerCase();\n }\n return '';\n};\n", + "'use strict';\n\nmodule.exports = $Ref;\n\nvar Pointer = require('./pointer'),\n util = require('./util');\n\n/**\n * This class represents a single JSON reference and its resolved value.\n *\n * @param {$Refs} $refs\n * @param {string} path\n * @constructor\n */\nfunction $Ref($refs, path) {\n path = util.path.stripHash(path);\n\n // Add this $ref to its parent collection\n $refs._$refs[path] = this;\n\n /**\n * The {@link $Refs} object that contains this {@link $Ref} object.\n * @type {$Refs}\n */\n this.$refs = $refs;\n\n /**\n * The file path or URL of the referenced file.\n * This path is relative to the path of the main JSON schema file.\n *\n * This path does NOT contain document fragments (JSON pointers). It always references an ENTIRE file.\n * Use methods such as {@link $Ref#get}, {@link $Ref#resolve}, and {@link $Ref#exists} to get\n * specific JSON pointers within the file.\n *\n * @type {string}\n */\n this.path = path;\n\n /**\n * Indicates the type of {@link $Ref#path} (e.g. \"fs\", \"http\", or \"https\")\n * @type {?string}\n */\n this.pathType = undefined;\n\n /**\n * The resolved value of the JSON reference.\n * Can be any JSON type, not just objects. Unknown file types are represented as Buffers (byte arrays).\n * @type {?*}\n */\n this.value = undefined;\n\n /**\n * The date/time that the cached value will expire.\n * @type {?Date}\n */\n this.expires = undefined;\n}\n\n/**\n * Determines whether the {@link $Ref#value} has expired.\n *\n * @returns {boolean}\n */\n$Ref.prototype.isExpired = function() {\n return !!(this.expires && this.expires <= new Date());\n};\n\n/**\n * Immediately expires the {@link $Ref#value}.\n */\n$Ref.prototype.expire = function() {\n this.expires = new Date();\n};\n\n/**\n * Sets the {@link $Ref#value} and renews the cache expiration.\n *\n * @param {*} value\n * @param {$RefParserOptions} options\n */\n$Ref.prototype.setValue = function(value, options) {\n this.value = value;\n\n // Extend the cache expiration\n var cacheDuration = options.cache[this.pathType];\n if (cacheDuration > 0) {\n var expires = Date.now() + (cacheDuration * 1000);\n this.expires = new Date(expires);\n }\n};\n\n/**\n * Determines whether the given JSON reference exists within this {@link $Ref#value}.\n *\n * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash\n * @returns {boolean}\n */\n$Ref.prototype.exists = function(path) {\n try {\n this.resolve(path);\n return true;\n }\n catch (e) {\n return false;\n }\n};\n\n/**\n * Resolves the given JSON reference within this {@link $Ref#value} and returns the resolved value.\n *\n * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash\n * @param {$RefParserOptions} options\n * @returns {*} - Returns the resolved value\n */\n$Ref.prototype.get = function(path, options) {\n return this.resolve(path, options).value;\n};\n\n/**\n * Resolves the given JSON reference within this {@link $Ref#value}.\n *\n * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash\n * @param {$RefParserOptions} options\n * @returns {Pointer}\n */\n$Ref.prototype.resolve = function(path, options) {\n var pointer = new Pointer(this, path);\n return pointer.resolve(this.value, options);\n};\n\n/**\n * Sets the value of a nested property within this {@link $Ref#value}.\n * If the property, or any of its parents don't exist, they will be created.\n *\n * @param {string} path - The full path of the property to set, optionally with a JSON pointer in the hash\n * @param {*} value - The value to assign\n * @param {$RefParserOptions} options\n */\n$Ref.prototype.set = function(path, value, options) {\n var pointer = new Pointer(this, path);\n this.value = pointer.set(this.value, value, options);\n};\n\n/**\n * Determines whether the given value is a JSON reference.\n *\n * @param {*} value - The value to inspect\n * @returns {boolean}\n */\n$Ref.is$Ref = function(value) {\n return value && typeof value === 'object' && typeof value.$ref === 'string' && value.$ref.length > 0;\n};\n\n/**\n * Determines whether the given value is an external JSON reference.\n *\n * @param {*} value - The value to inspect\n * @returns {boolean}\n */\n$Ref.isExternal$Ref = function(value) {\n return $Ref.is$Ref(value) && value.$ref[0] !== '#';\n};\n\n/**\n * Determines whether the given value is a JSON reference, and whether it is allowed by the options.\n * For example, if it references an external file, then options.$refs.external must be true.\n *\n * @param {*} value - The value to inspect\n * @param {$RefParserOptions} options\n * @returns {boolean}\n */\n$Ref.isAllowed$Ref = function(value, options) {\n if ($Ref.is$Ref(value)) {\n if (value.$ref[0] === '#') {\n if (options.$refs.internal) {\n return true;\n }\n }\n else if (options.$refs.external) {\n return true;\n }\n }\n};\n", + "'use strict';\n\nvar Options = require('./options'),\n util = require('./util'),\n url = require('url'),\n ono = require('ono');\n\nmodule.exports = $Refs;\n\n/**\n * This class is a map of JSON references and their resolved values.\n */\nfunction $Refs() {\n /**\n * Indicates whether the schema contains any circular references.\n *\n * @type {boolean}\n */\n this.circular = false;\n\n /**\n * The file path or URL of the main JSON schema file.\n * This will be empty if the schema was passed as an object rather than a path.\n *\n * @type {string}\n * @protected\n */\n this._basePath = '';\n\n /**\n * A map of paths/urls to {@link $Ref} objects\n *\n * @type {object}\n * @protected\n */\n this._$refs = {};\n}\n\n/**\n * Returns the paths of all the files/URLs that are referenced by the JSON schema,\n * including the schema itself.\n *\n * @param {...string|string[]} [types] - Only return paths of the given types (\"fs\", \"http\", \"https\")\n * @returns {string[]}\n */\n$Refs.prototype.paths = function(types) {\n var paths = getPaths(this._$refs, arguments);\n return paths.map(function(path) {\n return path.decoded;\n });\n};\n\n/**\n * Returns the map of JSON references and their resolved values.\n *\n * @param {...string|string[]} [types] - Only return references of the given types (\"fs\", \"http\", \"https\")\n * @returns {object}\n */\n$Refs.prototype.values = function(types) {\n var $refs = this._$refs;\n var paths = getPaths($refs, arguments);\n return paths.reduce(function(obj, path) {\n obj[path.decoded] = $refs[path.encoded].value;\n return obj;\n }, {});\n};\n\n/**\n * Returns a POJO (plain old JavaScript object) for serialization as JSON.\n *\n * @returns {object}\n */\n$Refs.prototype.toJSON = $Refs.prototype.values;\n\n/**\n * Determines whether the given JSON reference has expired.\n * Returns true if the reference does not exist.\n *\n * @param {string} path - The path being resolved, optionally with a JSON pointer in the hash\n * @returns {boolean}\n */\n$Refs.prototype.isExpired = function(path) {\n var $ref = this._get$Ref(path);\n return $ref === undefined || $ref.isExpired();\n};\n\n/**\n * Immediately expires the given JSON reference.\n * If the reference does not exist, nothing happens.\n *\n * @param {string} path - The path being resolved, optionally with a JSON pointer in the hash\n */\n$Refs.prototype.expire = function(path) {\n var $ref = this._get$Ref(path);\n if ($ref) {\n $ref.expire();\n }\n};\n\n/**\n * Determines whether the given JSON reference exists.\n *\n * @param {string} path - The path being resolved, optionally with a JSON pointer in the hash\n * @returns {boolean}\n */\n$Refs.prototype.exists = function(path) {\n try {\n this._resolve(path);\n return true;\n }\n catch (e) {\n return false;\n }\n};\n\n/**\n * Resolves the given JSON reference and returns the resolved value.\n *\n * @param {string} path - The path being resolved, with a JSON pointer in the hash\n * @param {$RefParserOptions} options\n * @returns {*} - Returns the resolved value\n */\n$Refs.prototype.get = function(path, options) {\n return this._resolve(path, options).value;\n};\n\n/**\n * Sets the value of a nested property within this {@link $Ref#value}.\n * If the property, or any of its parents don't exist, they will be created.\n *\n * @param {string} path - The path of the property to set, optionally with a JSON pointer in the hash\n * @param {*} value - The value to assign\n * @param {$RefParserOptions} options\n */\n$Refs.prototype.set = function(path, value, options) {\n path = url.resolve(this._basePath, path);\n var withoutHash = util.path.stripHash(path);\n var $ref = this._$refs[withoutHash];\n\n if (!$ref) {\n throw ono('Error resolving $ref pointer \"%s\". \\n\"%s\" not found.', path, withoutHash);\n }\n\n options = new Options(options);\n $ref.set(path, value, options);\n};\n\n/**\n * Resolves the given JSON reference.\n *\n * @param {string} path - The path being resolved, optionally with a JSON pointer in the hash\n * @param {$RefParserOptions} options\n * @returns {Pointer}\n * @protected\n */\n$Refs.prototype._resolve = function(path, options) {\n path = url.resolve(this._basePath, path);\n var withoutHash = util.path.stripHash(path);\n var $ref = this._$refs[withoutHash];\n\n if (!$ref) {\n throw ono('Error resolving $ref pointer \"%s\". \\n\"%s\" not found.', path, withoutHash);\n }\n\n options = new Options(options);\n return $ref.resolve(path, options);\n};\n\n/**\n * Returns the specified {@link $Ref} object, or undefined.\n *\n * @param {string} path - The path being resolved, optionally with a JSON pointer in the hash\n * @returns {$Ref|undefined}\n * @protected\n */\n$Refs.prototype._get$Ref = function(path) {\n path = url.resolve(this._basePath, path);\n var withoutHash = util.path.stripHash(path);\n return this._$refs[withoutHash];\n};\n\n/**\n * Returns the encoded and decoded paths keys of the given object.\n *\n * @param {object} $refs - The object whose keys are URL-encoded paths\n * @param {...string|string[]} [types] - Only return paths of the given types (\"fs\", \"http\", \"https\")\n * @returns {object[]}\n */\nfunction getPaths($refs, types) {\n var paths = Object.keys($refs);\n\n // Filter the paths by type\n types = Array.isArray(types[0]) ? types[0] : Array.prototype.slice.call(types);\n if (types.length > 0 && types[0]) {\n paths = paths.filter(function(key) {\n return types.indexOf($refs[key].pathType) !== -1;\n });\n }\n\n // Decode local filesystem paths\n return paths.map(function(path) {\n return {\n encoded: path,\n decoded: $refs[path].pathType === 'fs' ? util.path.urlToLocalPath(path, true) : path\n };\n });\n}\n", + "'use strict';\n\nvar Promise = require('./promise'),\n $Ref = require('./ref'),\n Pointer = require('./pointer'),\n read = require('./read'),\n util = require('./util'),\n url = require('url');\n\nmodule.exports = resolve;\n\n/**\n * Crawls the JSON schema, finds all external JSON references, and resolves their values.\n * This method does not mutate the JSON schema. The resolved values are added to {@link $RefParser#$refs}.\n *\n * NOTE: We only care about EXTERNAL references here. INTERNAL references are only relevant when dereferencing.\n *\n * @param {$RefParser} parser\n * @param {$RefParserOptions} options\n *\n * @returns {Promise}\n * The promise resolves once all JSON references in the schema have been resolved,\n * including nested references that are contained in externally-referenced files.\n */\nfunction resolve(parser, options) {\n try {\n if (!options.$refs.external) {\n // Nothing to resolve, so exit early\n return Promise.resolve();\n }\n\n util.debug('Resolving $ref pointers in %s', parser.$refs._basePath);\n var promises = crawl(parser.schema, parser.$refs._basePath + '#', parser.$refs, options);\n return Promise.all(promises);\n }\n catch (e) {\n return Promise.reject(e);\n }\n}\n\n/**\n * Recursively crawls the given value, and resolves any external JSON references.\n *\n * @param {*} obj - The value to crawl. If it's not an object or array, it will be ignored.\n * @param {string} path - The full path of `obj`, possibly with a JSON Pointer in the hash\n * @param {$Refs} $refs\n * @param {$RefParserOptions} options\n *\n * @returns {Promise[]}\n * Returns an array of promises. There will be one promise for each JSON reference in `obj`.\n * If `obj` does not contain any JSON references, then the array will be empty.\n * If any of the JSON references point to files that contain additional JSON references,\n * then the corresponding promise will internally reference an array of promises.\n */\nfunction crawl(obj, path, $refs, options) {\n var promises = [];\n\n if (obj && typeof obj === 'object') {\n Object.keys(obj).forEach(function(key) {\n var keyPath = Pointer.join(path, key);\n var value = obj[key];\n\n if ($Ref.isExternal$Ref(value)) {\n var promise = resolve$Ref(value, keyPath, $refs, options);\n promises.push(promise);\n }\n else {\n promises = promises.concat(crawl(value, keyPath, $refs, options));\n }\n });\n }\n return promises;\n}\n\n/**\n * Resolves the given JSON Reference, and then crawls the resulting value.\n *\n * @param {{$ref: string}} $ref - The JSON Reference to resolve\n * @param {string} path - The full path of `$ref`, possibly with a JSON Pointer in the hash\n * @param {$Refs} $refs\n * @param {$RefParserOptions} options\n *\n * @returns {Promise}\n * The promise resolves once all JSON references in the object have been resolved,\n * including nested references that are contained in externally-referenced files.\n */\nfunction resolve$Ref($ref, path, $refs, options) {\n util.debug('Resolving $ref pointer \"%s\" at %s', $ref.$ref, path);\n var resolvedPath = url.resolve(path, $ref.$ref);\n\n return read(resolvedPath, $refs, options)\n .then(function(result) {\n // If the result was already cached, then we DON'T need to crawl it\n if (!result.cached) {\n // Crawl the new $ref\n util.debug('Resolving $ref pointers in %s', result.$ref.path);\n var promises = crawl(result.$ref.value, result.$ref.path + '#', $refs, options);\n return Promise.all(promises);\n }\n });\n}\n", + "'use strict';\n\nvar debug = require('debug'),\n path = require('./path');\n\n/**\n * Writes messages to stdout.\n * Log messages are suppressed by default, but can be enabled by setting the DEBUG variable.\n * @type {function}\n */\nexports.debug = debug('json-schema-ref-parser');\n\nexports.path = path;\n\n/**\n * Returns the resolved value of a JSON Reference.\n * If necessary, the resolved value is merged with the JSON Reference to create a new object\n *\n * @example:\n * {\n * person: {\n * properties: {\n * firstName: { type: string }\n * lastName: { type: string }\n * }\n * }\n * employee: {\n * properties: {\n * $ref: #/person/properties\n * salary: { type: number }\n * }\n * }\n * }\n *\n * When \"person\" and \"employee\" are merged, you end up with the following object:\n *\n * {\n * properties: {\n * firstName: { type: string }\n * lastName: { type: string }\n * salary: { type: number }\n * }\n * }\n *\n * @param {object} $ref - The JSON reference object (the one with the \"$ref\" property)\n * @param {*} resolvedValue - The resolved value, which can be any type\n * @returns {*} - Returns the dereferenced value\n */\nexports.dereference = function($ref, resolvedValue) {\n if (resolvedValue && typeof resolvedValue === 'object' && Object.keys($ref).length > 1) {\n var merged = {};\n Object.keys($ref).forEach(function(key) {\n if (key !== '$ref') {\n merged[key] = $ref[key];\n }\n });\n Object.keys(resolvedValue).forEach(function(key) {\n if (!(key in merged)) {\n merged[key] = resolvedValue[key];\n }\n });\n return merged;\n }\n else {\n // Completely replace the original reference with the resolved value\n return resolvedValue;\n }\n};\n", "/* eslint lines-around-comment: [2, {beforeBlockComment: false}] */\n'use strict';\n\nvar yaml = require('js-yaml'),\n ono = require('ono');\n\n/**\n * Simple YAML parsing functions, similar to {@link JSON.parse} and {@link JSON.stringify}\n */\nmodule.exports = {\n /**\n * Parses a YAML string and returns the value.\n *\n * @param {string} text - The YAML string to be parsed\n * @param {function} [reviver] - Not currently supported. Provided for consistency with {@link JSON.parse}\n * @returns {*}\n */\n parse: function yamlParse(text, reviver) {\n try {\n return yaml.safeLoad(text);\n }\n catch (e) {\n if (e instanceof Error) {\n throw e;\n }\n else {\n // https://github.com/nodeca/js-yaml/issues/153\n throw ono(e, e.message);\n }\n }\n },\n\n /**\n * Converts a JavaScript value to a YAML string.\n *\n * @param {*} value - The value to convert to YAML\n * @param {function|array} replacer - Not currently supported. Provided for consistency with {@link JSON.stringify}\n * @param {string|number} space - The number of spaces to use for indentation, or a string containing the number of spaces.\n * @returns {string}\n */\n stringify: function yamlStringify(value, replacer, space) {\n try {\n var indent = (typeof space === 'string' ? space.length : space) || 2;\n return yaml.safeDump(value, {indent: indent});\n }\n catch (e) {\n if (e instanceof Error) {\n throw e;\n }\n else {\n // https://github.com/nodeca/js-yaml/issues/153\n throw ono(e, e.message);\n }\n }\n }\n};\n", "var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n;(function (exports) {\n\t'use strict';\n\n var Arr = (typeof Uint8Array !== 'undefined')\n ? Uint8Array\n : Array\n\n\tvar PLUS = '+'.charCodeAt(0)\n\tvar SLASH = '/'.charCodeAt(0)\n\tvar NUMBER = '0'.charCodeAt(0)\n\tvar LOWER = 'a'.charCodeAt(0)\n\tvar UPPER = 'A'.charCodeAt(0)\n\tvar PLUS_URL_SAFE = '-'.charCodeAt(0)\n\tvar SLASH_URL_SAFE = '_'.charCodeAt(0)\n\n\tfunction decode (elt) {\n\t\tvar code = elt.charCodeAt(0)\n\t\tif (code === PLUS ||\n\t\t code === PLUS_URL_SAFE)\n\t\t\treturn 62 // '+'\n\t\tif (code === SLASH ||\n\t\t code === SLASH_URL_SAFE)\n\t\t\treturn 63 // '/'\n\t\tif (code < NUMBER)\n\t\t\treturn -1 //no match\n\t\tif (code < NUMBER + 10)\n\t\t\treturn code - NUMBER + 26 + 26\n\t\tif (code < UPPER + 26)\n\t\t\treturn code - UPPER\n\t\tif (code < LOWER + 26)\n\t\t\treturn code - LOWER + 26\n\t}\n\n\tfunction b64ToByteArray (b64) {\n\t\tvar i, j, l, tmp, placeHolders, arr\n\n\t\tif (b64.length % 4 > 0) {\n\t\t\tthrow new Error('Invalid string. Length must be a multiple of 4')\n\t\t}\n\n\t\t// the number of equal signs (place holders)\n\t\t// if there are two placeholders, than the two characters before it\n\t\t// represent one byte\n\t\t// if there is only one, then the three characters before it represent 2 bytes\n\t\t// this is just a cheap hack to not do indexOf twice\n\t\tvar len = b64.length\n\t\tplaceHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0\n\n\t\t// base64 is 4/3 + up to two characters of the original data\n\t\tarr = new Arr(b64.length * 3 / 4 - placeHolders)\n\n\t\t// if there are placeholders, only get up to the last complete 4 chars\n\t\tl = placeHolders > 0 ? b64.length - 4 : b64.length\n\n\t\tvar L = 0\n\n\t\tfunction push (v) {\n\t\t\tarr[L++] = v\n\t\t}\n\n\t\tfor (i = 0, j = 0; i < l; i += 4, j += 3) {\n\t\t\ttmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))\n\t\t\tpush((tmp & 0xFF0000) >> 16)\n\t\t\tpush((tmp & 0xFF00) >> 8)\n\t\t\tpush(tmp & 0xFF)\n\t\t}\n\n\t\tif (placeHolders === 2) {\n\t\t\ttmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)\n\t\t\tpush(tmp & 0xFF)\n\t\t} else if (placeHolders === 1) {\n\t\t\ttmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)\n\t\t\tpush((tmp >> 8) & 0xFF)\n\t\t\tpush(tmp & 0xFF)\n\t\t}\n\n\t\treturn arr\n\t}\n\n\tfunction uint8ToBase64 (uint8) {\n\t\tvar i,\n\t\t\textraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes\n\t\t\toutput = \"\",\n\t\t\ttemp, length\n\n\t\tfunction encode (num) {\n\t\t\treturn lookup.charAt(num)\n\t\t}\n\n\t\tfunction tripletToBase64 (num) {\n\t\t\treturn encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)\n\t\t}\n\n\t\t// go through the array every three bytes, we'll deal with trailing stuff later\n\t\tfor (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {\n\t\t\ttemp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n\t\t\toutput += tripletToBase64(temp)\n\t\t}\n\n\t\t// pad the end with zeros, but make sure to not forget the extra bytes\n\t\tswitch (extraBytes) {\n\t\t\tcase 1:\n\t\t\t\ttemp = uint8[uint8.length - 1]\n\t\t\t\toutput += encode(temp >> 2)\n\t\t\t\toutput += encode((temp << 4) & 0x3F)\n\t\t\t\toutput += '=='\n\t\t\t\tbreak\n\t\t\tcase 2:\n\t\t\t\ttemp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])\n\t\t\t\toutput += encode(temp >> 10)\n\t\t\t\toutput += encode((temp >> 4) & 0x3F)\n\t\t\t\toutput += encode((temp << 2) & 0x3F)\n\t\t\t\toutput += '='\n\t\t\t\tbreak\n\t\t}\n\n\t\treturn output\n\t}\n\n\texports.toByteArray = b64ToByteArray\n\texports.fromByteArray = uint8ToBase64\n}(typeof exports === 'undefined' ? (this.base64js = {}) : exports))\n", "\n\n//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9KYW1lcy9Db2RlL29wZW4tc291cmNlL2pzb24tc2NoZW1hLXJlZi1wYXJzZXIvbm9kZV9tb2R1bGVzL2Jyb3dzZXItcmVzb2x2ZS9lbXB0eS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwiZmlsZSI6Im91dC5qcy5tYXAiLCJzb3VyY2VzQ29udGVudCI6WyIiXX0=", @@ -128,7 +130,7 @@ "\n/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n && 'undefined' != typeof chrome.storage\n ? chrome.storage.local\n : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n 'lightseagreen',\n 'forestgreen',\n 'goldenrod',\n 'dodgerblue',\n 'darkorchid',\n 'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n // is webkit? http://stackoverflow.com/a/16459606/376773\n return ('WebkitAppearance' in document.documentElement.style) ||\n // is firebug? http://stackoverflow.com/a/398120/376773\n (window.console && (console.firebug || (console.exception && console.table))) ||\n // is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31);\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n return JSON.stringify(v);\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs() {\n var args = arguments;\n var useColors = this.useColors;\n\n args[0] = (useColors ? '%c' : '')\n + this.namespace\n + (useColors ? ' %c' : ' ')\n + args[0]\n + (useColors ? '%c ' : ' ')\n + '+' + exports.humanize(this.diff);\n\n if (!useColors) return args;\n\n var c = 'color: ' + this.color;\n args = [args[0], c, 'color: inherit'].concat(Array.prototype.slice.call(args, 1));\n\n // the final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-z%]/g, function(match) {\n if ('%%' === match) return;\n index++;\n if ('%c' === match) {\n // we only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n\n args.splice(lastC, 0, c);\n return args;\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n // this hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return 'object' === typeof console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n try {\n if (null == namespaces) {\n exports.storage.removeItem('debug');\n } else {\n exports.storage.debug = namespaces;\n }\n } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n var r;\n try {\n r = exports.storage.debug;\n } catch(e) {}\n return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage(){\n try {\n return window.localStorage;\n } catch (e) {}\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = debug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lowercased letter, i.e. \"n\".\n */\n\nexports.formatters = {};\n\n/**\n * Previously assigned color.\n */\n\nvar prevColor = 0;\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n *\n * @return {Number}\n * @api private\n */\n\nfunction selectColor() {\n return exports.colors[prevColor++ % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction debug(namespace) {\n\n // define the `disabled` version\n function disabled() {\n }\n disabled.enabled = false;\n\n // define the `enabled` version\n function enabled() {\n\n var self = enabled;\n\n // set `diff` timestamp\n var curr = +new Date();\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n\n // add the `color` if not set\n if (null == self.useColors) self.useColors = exports.useColors();\n if (null == self.color && self.useColors) self.color = selectColor();\n\n var args = Array.prototype.slice.call(arguments);\n\n args[0] = exports.coerce(args[0]);\n\n if ('string' !== typeof args[0]) {\n // anything else let's inspect with %o\n args = ['%o'].concat(args);\n }\n\n // apply any `formatters` transformations\n var index = 0;\n args[0] = args[0].replace(/%([a-z%])/g, function(match, format) {\n // if we encounter an escaped % then don't increase the array index\n if (match === '%%') return match;\n index++;\n var formatter = exports.formatters[format];\n if ('function' === typeof formatter) {\n var val = args[index];\n match = formatter.call(self, val);\n\n // now we need to remove `args[index]` since it's inlined in the `format`\n args.splice(index, 1);\n index--;\n }\n return match;\n });\n\n if ('function' === typeof exports.formatArgs) {\n args = exports.formatArgs.apply(self, args);\n }\n var logFn = enabled.log || exports.log || console.log.bind(console);\n logFn.apply(self, args);\n }\n enabled.enabled = true;\n\n var fn = exports.enabled(namespace) ? enabled : disabled;\n\n fn.namespace = namespace;\n\n return fn;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n exports.save(namespaces);\n\n var split = (namespaces || '').split(/[\\s,]+/);\n var len = split.length;\n\n for (var i = 0; i < len; i++) {\n if (!split[i]) continue; // ignore empty strings\n namespaces = split[i].replace(/\\*/g, '.*?');\n if (namespaces[0] === '-') {\n exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n exports.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n var i, len;\n for (i = 0, len = exports.skips.length; i < len; i++) {\n if (exports.skips[i].test(name)) {\n return false;\n }\n }\n for (i = 0, len = exports.names.length; i < len; i++) {\n if (exports.names[i].test(name)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n", "/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n", - "/*\n Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n(function (root, factory) {\n 'use strict';\n\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js,\n // Rhino, and plain browser loading.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define(['exports'], factory);\n } else if (typeof exports !== 'undefined') {\n factory(exports);\n } else {\n factory((root.esprima = {}));\n }\n}(this, function (exports) {\n 'use strict';\n\n var Token,\n TokenName,\n FnExprTokens,\n Syntax,\n PlaceHolders,\n Messages,\n Regex,\n source,\n strict,\n index,\n lineNumber,\n lineStart,\n hasLineTerminator,\n lastIndex,\n lastLineNumber,\n lastLineStart,\n startIndex,\n startLineNumber,\n startLineStart,\n scanning,\n length,\n lookahead,\n state,\n extra,\n isBindingElement,\n isAssignmentTarget,\n firstCoverInitializedNameError;\n\n Token = {\n BooleanLiteral: 1,\n EOF: 2,\n Identifier: 3,\n Keyword: 4,\n NullLiteral: 5,\n NumericLiteral: 6,\n Punctuator: 7,\n StringLiteral: 8,\n RegularExpression: 9,\n Template: 10\n };\n\n TokenName = {};\n TokenName[Token.BooleanLiteral] = 'Boolean';\n TokenName[Token.EOF] = '';\n TokenName[Token.Identifier] = 'Identifier';\n TokenName[Token.Keyword] = 'Keyword';\n TokenName[Token.NullLiteral] = 'Null';\n TokenName[Token.NumericLiteral] = 'Numeric';\n TokenName[Token.Punctuator] = 'Punctuator';\n TokenName[Token.StringLiteral] = 'String';\n TokenName[Token.RegularExpression] = 'RegularExpression';\n TokenName[Token.Template] = 'Template';\n\n // A function following one of those tokens is an expression.\n FnExprTokens = ['(', '{', '[', 'in', 'typeof', 'instanceof', 'new',\n 'return', 'case', 'delete', 'throw', 'void',\n // assignment operators\n '=', '+=', '-=', '*=', '/=', '%=', '<<=', '>>=', '>>>=',\n '&=', '|=', '^=', ',',\n // binary/unary operators\n '+', '-', '*', '/', '%', '++', '--', '<<', '>>', '>>>', '&',\n '|', '^', '!', '~', '&&', '||', '?', ':', '===', '==', '>=',\n '<=', '<', '>', '!=', '!=='];\n\n Syntax = {\n AssignmentExpression: 'AssignmentExpression',\n AssignmentPattern: 'AssignmentPattern',\n ArrayExpression: 'ArrayExpression',\n ArrayPattern: 'ArrayPattern',\n ArrowFunctionExpression: 'ArrowFunctionExpression',\n BlockStatement: 'BlockStatement',\n BinaryExpression: 'BinaryExpression',\n BreakStatement: 'BreakStatement',\n CallExpression: 'CallExpression',\n CatchClause: 'CatchClause',\n ClassBody: 'ClassBody',\n ClassDeclaration: 'ClassDeclaration',\n ClassExpression: 'ClassExpression',\n ConditionalExpression: 'ConditionalExpression',\n ContinueStatement: 'ContinueStatement',\n DoWhileStatement: 'DoWhileStatement',\n DebuggerStatement: 'DebuggerStatement',\n EmptyStatement: 'EmptyStatement',\n ExportAllDeclaration: 'ExportAllDeclaration',\n ExportDefaultDeclaration: 'ExportDefaultDeclaration',\n ExportNamedDeclaration: 'ExportNamedDeclaration',\n ExportSpecifier: 'ExportSpecifier',\n ExpressionStatement: 'ExpressionStatement',\n ForStatement: 'ForStatement',\n ForOfStatement: 'ForOfStatement',\n ForInStatement: 'ForInStatement',\n FunctionDeclaration: 'FunctionDeclaration',\n FunctionExpression: 'FunctionExpression',\n Identifier: 'Identifier',\n IfStatement: 'IfStatement',\n ImportDeclaration: 'ImportDeclaration',\n ImportDefaultSpecifier: 'ImportDefaultSpecifier',\n ImportNamespaceSpecifier: 'ImportNamespaceSpecifier',\n ImportSpecifier: 'ImportSpecifier',\n Literal: 'Literal',\n LabeledStatement: 'LabeledStatement',\n LogicalExpression: 'LogicalExpression',\n MemberExpression: 'MemberExpression',\n MetaProperty: 'MetaProperty',\n MethodDefinition: 'MethodDefinition',\n NewExpression: 'NewExpression',\n ObjectExpression: 'ObjectExpression',\n ObjectPattern: 'ObjectPattern',\n Program: 'Program',\n Property: 'Property',\n RestElement: 'RestElement',\n ReturnStatement: 'ReturnStatement',\n SequenceExpression: 'SequenceExpression',\n SpreadElement: 'SpreadElement',\n Super: 'Super',\n SwitchCase: 'SwitchCase',\n SwitchStatement: 'SwitchStatement',\n TaggedTemplateExpression: 'TaggedTemplateExpression',\n TemplateElement: 'TemplateElement',\n TemplateLiteral: 'TemplateLiteral',\n ThisExpression: 'ThisExpression',\n ThrowStatement: 'ThrowStatement',\n TryStatement: 'TryStatement',\n UnaryExpression: 'UnaryExpression',\n UpdateExpression: 'UpdateExpression',\n VariableDeclaration: 'VariableDeclaration',\n VariableDeclarator: 'VariableDeclarator',\n WhileStatement: 'WhileStatement',\n WithStatement: 'WithStatement',\n YieldExpression: 'YieldExpression'\n };\n\n PlaceHolders = {\n ArrowParameterPlaceHolder: 'ArrowParameterPlaceHolder'\n };\n\n // Error messages should be identical to V8.\n Messages = {\n UnexpectedToken: 'Unexpected token %0',\n UnexpectedNumber: 'Unexpected number',\n UnexpectedString: 'Unexpected string',\n UnexpectedIdentifier: 'Unexpected identifier',\n UnexpectedReserved: 'Unexpected reserved word',\n UnexpectedTemplate: 'Unexpected quasi %0',\n UnexpectedEOS: 'Unexpected end of input',\n NewlineAfterThrow: 'Illegal newline after throw',\n InvalidRegExp: 'Invalid regular expression',\n UnterminatedRegExp: 'Invalid regular expression: missing /',\n InvalidLHSInAssignment: 'Invalid left-hand side in assignment',\n InvalidLHSInForIn: 'Invalid left-hand side in for-in',\n InvalidLHSInForLoop: 'Invalid left-hand side in for-loop',\n MultipleDefaultsInSwitch: 'More than one default clause in switch statement',\n NoCatchOrFinally: 'Missing catch or finally after try',\n UnknownLabel: 'Undefined label \\'%0\\'',\n Redeclaration: '%0 \\'%1\\' has already been declared',\n IllegalContinue: 'Illegal continue statement',\n IllegalBreak: 'Illegal break statement',\n IllegalReturn: 'Illegal return statement',\n StrictModeWith: 'Strict mode code may not include a with statement',\n StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode',\n StrictVarName: 'Variable name may not be eval or arguments in strict mode',\n StrictParamName: 'Parameter name eval or arguments is not allowed in strict mode',\n StrictParamDupe: 'Strict mode function may not have duplicate parameter names',\n StrictFunctionName: 'Function name may not be eval or arguments in strict mode',\n StrictOctalLiteral: 'Octal literals are not allowed in strict mode.',\n StrictDelete: 'Delete of an unqualified identifier in strict mode.',\n StrictLHSAssignment: 'Assignment to eval or arguments is not allowed in strict mode',\n StrictLHSPostfix: 'Postfix increment/decrement may not have eval or arguments operand in strict mode',\n StrictLHSPrefix: 'Prefix increment/decrement may not have eval or arguments operand in strict mode',\n StrictReservedWord: 'Use of future reserved word in strict mode',\n TemplateOctalLiteral: 'Octal literals are not allowed in template strings.',\n ParameterAfterRestParameter: 'Rest parameter must be last formal parameter',\n DefaultRestParameter: 'Unexpected token =',\n ObjectPatternAsRestParameter: 'Unexpected token {',\n DuplicateProtoProperty: 'Duplicate __proto__ fields are not allowed in object literals',\n ConstructorSpecialMethod: 'Class constructor may not be an accessor',\n DuplicateConstructor: 'A class may only have one constructor',\n StaticPrototype: 'Classes may not have static property named prototype',\n MissingFromClause: 'Unexpected token',\n NoAsAfterImportNamespace: 'Unexpected token',\n InvalidModuleSpecifier: 'Unexpected token',\n IllegalImportDeclaration: 'Unexpected token',\n IllegalExportDeclaration: 'Unexpected token',\n DuplicateBinding: 'Duplicate binding %0'\n };\n\n // See also tools/generate-unicode-regex.js.\n Regex = {\n // ECMAScript 6/Unicode v7.0.0 NonAsciiIdentifierStart:\n NonAsciiIdentifierStart: /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309B-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF5D-\\uDF61]|\\uD805[\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF98]|\\uD809[\\uDC00-\\uDC6E]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50\\uDF93-\\uDF9F]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD83A[\\uDC00-\\uDCC4]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D]|\\uD87E[\\uDC00-\\uDE1D]/,\n\n // ECMAScript 6/Unicode v7.0.0 NonAsciiIdentifierPart:\n NonAsciiIdentifierPart: /[\\xAA\\xB5\\xB7\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1369-\\u1371\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDDFD\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE38-\\uDE3A\\uDE3F\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE6\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDD0-\\uDDDA\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF01-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB7\\uDEC0-\\uDEC9]|\\uD806[\\uDCA0-\\uDCE9\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF98]|\\uD809[\\uDC00-\\uDC6E]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDEF0-\\uDEF4\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50-\\uDF7E\\uDF8F-\\uDF9F]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/\n };\n\n // Ensure the condition is true, otherwise throw an error.\n // This is only to have a better contract semantic, i.e. another safety net\n // to catch a logic error. The condition shall be fulfilled in normal case.\n // Do NOT use this to enforce a certain condition on any user input.\n\n function assert(condition, message) {\n /* istanbul ignore if */\n if (!condition) {\n throw new Error('ASSERT: ' + message);\n }\n }\n\n function isDecimalDigit(ch) {\n return (ch >= 0x30 && ch <= 0x39); // 0..9\n }\n\n function isHexDigit(ch) {\n return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;\n }\n\n function isOctalDigit(ch) {\n return '01234567'.indexOf(ch) >= 0;\n }\n\n function octalToDecimal(ch) {\n // \\0 is not octal escape sequence\n var octal = (ch !== '0'), code = '01234567'.indexOf(ch);\n\n if (index < length && isOctalDigit(source[index])) {\n octal = true;\n code = code * 8 + '01234567'.indexOf(source[index++]);\n\n // 3 digits are only allowed when string starts\n // with 0, 1, 2, 3\n if ('0123'.indexOf(ch) >= 0 &&\n index < length &&\n isOctalDigit(source[index])) {\n code = code * 8 + '01234567'.indexOf(source[index++]);\n }\n }\n\n return {\n code: code,\n octal: octal\n };\n }\n\n // ECMA-262 11.2 White Space\n\n function isWhiteSpace(ch) {\n return (ch === 0x20) || (ch === 0x09) || (ch === 0x0B) || (ch === 0x0C) || (ch === 0xA0) ||\n (ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0);\n }\n\n // ECMA-262 11.3 Line Terminators\n\n function isLineTerminator(ch) {\n return (ch === 0x0A) || (ch === 0x0D) || (ch === 0x2028) || (ch === 0x2029);\n }\n\n // ECMA-262 11.6 Identifier Names and Identifiers\n\n function fromCodePoint(cp) {\n return (cp < 0x10000) ? String.fromCharCode(cp) :\n String.fromCharCode(0xD800 + ((cp - 0x10000) >> 10)) +\n String.fromCharCode(0xDC00 + ((cp - 0x10000) & 1023));\n }\n\n function isIdentifierStart(ch) {\n return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore)\n (ch >= 0x41 && ch <= 0x5A) || // A..Z\n (ch >= 0x61 && ch <= 0x7A) || // a..z\n (ch === 0x5C) || // \\ (backslash)\n ((ch >= 0x80) && Regex.NonAsciiIdentifierStart.test(fromCodePoint(ch)));\n }\n\n function isIdentifierPart(ch) {\n return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore)\n (ch >= 0x41 && ch <= 0x5A) || // A..Z\n (ch >= 0x61 && ch <= 0x7A) || // a..z\n (ch >= 0x30 && ch <= 0x39) || // 0..9\n (ch === 0x5C) || // \\ (backslash)\n ((ch >= 0x80) && Regex.NonAsciiIdentifierPart.test(fromCodePoint(ch)));\n }\n\n // ECMA-262 11.6.2.2 Future Reserved Words\n\n function isFutureReservedWord(id) {\n switch (id) {\n case 'enum':\n case 'export':\n case 'import':\n case 'super':\n return true;\n default:\n return false;\n }\n }\n\n function isStrictModeReservedWord(id) {\n switch (id) {\n case 'implements':\n case 'interface':\n case 'package':\n case 'private':\n case 'protected':\n case 'public':\n case 'static':\n case 'yield':\n case 'let':\n return true;\n default:\n return false;\n }\n }\n\n function isRestrictedWord(id) {\n return id === 'eval' || id === 'arguments';\n }\n\n // ECMA-262 11.6.2.1 Keywords\n\n function isKeyword(id) {\n switch (id.length) {\n case 2:\n return (id === 'if') || (id === 'in') || (id === 'do');\n case 3:\n return (id === 'var') || (id === 'for') || (id === 'new') ||\n (id === 'try') || (id === 'let');\n case 4:\n return (id === 'this') || (id === 'else') || (id === 'case') ||\n (id === 'void') || (id === 'with') || (id === 'enum');\n case 5:\n return (id === 'while') || (id === 'break') || (id === 'catch') ||\n (id === 'throw') || (id === 'const') || (id === 'yield') ||\n (id === 'class') || (id === 'super');\n case 6:\n return (id === 'return') || (id === 'typeof') || (id === 'delete') ||\n (id === 'switch') || (id === 'export') || (id === 'import');\n case 7:\n return (id === 'default') || (id === 'finally') || (id === 'extends');\n case 8:\n return (id === 'function') || (id === 'continue') || (id === 'debugger');\n case 10:\n return (id === 'instanceof');\n default:\n return false;\n }\n }\n\n // ECMA-262 11.4 Comments\n\n function addComment(type, value, start, end, loc) {\n var comment;\n\n assert(typeof start === 'number', 'Comment must have valid position');\n\n state.lastCommentStart = start;\n\n comment = {\n type: type,\n value: value\n };\n if (extra.range) {\n comment.range = [start, end];\n }\n if (extra.loc) {\n comment.loc = loc;\n }\n extra.comments.push(comment);\n if (extra.attachComment) {\n extra.leadingComments.push(comment);\n extra.trailingComments.push(comment);\n }\n if (extra.tokenize) {\n comment.type = comment.type + 'Comment';\n if (extra.delegate) {\n comment = extra.delegate(comment);\n }\n extra.tokens.push(comment);\n }\n }\n\n function skipSingleLineComment(offset) {\n var start, loc, ch, comment;\n\n start = index - offset;\n loc = {\n start: {\n line: lineNumber,\n column: index - lineStart - offset\n }\n };\n\n while (index < length) {\n ch = source.charCodeAt(index);\n ++index;\n if (isLineTerminator(ch)) {\n hasLineTerminator = true;\n if (extra.comments) {\n comment = source.slice(start + offset, index - 1);\n loc.end = {\n line: lineNumber,\n column: index - lineStart - 1\n };\n addComment('Line', comment, start, index - 1, loc);\n }\n if (ch === 13 && source.charCodeAt(index) === 10) {\n ++index;\n }\n ++lineNumber;\n lineStart = index;\n return;\n }\n }\n\n if (extra.comments) {\n comment = source.slice(start + offset, index);\n loc.end = {\n line: lineNumber,\n column: index - lineStart\n };\n addComment('Line', comment, start, index, loc);\n }\n }\n\n function skipMultiLineComment() {\n var start, loc, ch, comment;\n\n if (extra.comments) {\n start = index - 2;\n loc = {\n start: {\n line: lineNumber,\n column: index - lineStart - 2\n }\n };\n }\n\n while (index < length) {\n ch = source.charCodeAt(index);\n if (isLineTerminator(ch)) {\n if (ch === 0x0D && source.charCodeAt(index + 1) === 0x0A) {\n ++index;\n }\n hasLineTerminator = true;\n ++lineNumber;\n ++index;\n lineStart = index;\n } else if (ch === 0x2A) {\n // Block comment ends with '*/'.\n if (source.charCodeAt(index + 1) === 0x2F) {\n ++index;\n ++index;\n if (extra.comments) {\n comment = source.slice(start + 2, index - 2);\n loc.end = {\n line: lineNumber,\n column: index - lineStart\n };\n addComment('Block', comment, start, index, loc);\n }\n return;\n }\n ++index;\n } else {\n ++index;\n }\n }\n\n // Ran off the end of the file - the whole thing is a comment\n if (extra.comments) {\n loc.end = {\n line: lineNumber,\n column: index - lineStart\n };\n comment = source.slice(start + 2, index);\n addComment('Block', comment, start, index, loc);\n }\n tolerateUnexpectedToken();\n }\n\n function skipComment() {\n var ch, start;\n hasLineTerminator = false;\n\n start = (index === 0);\n while (index < length) {\n ch = source.charCodeAt(index);\n\n if (isWhiteSpace(ch)) {\n ++index;\n } else if (isLineTerminator(ch)) {\n hasLineTerminator = true;\n ++index;\n if (ch === 0x0D && source.charCodeAt(index) === 0x0A) {\n ++index;\n }\n ++lineNumber;\n lineStart = index;\n start = true;\n } else if (ch === 0x2F) { // U+002F is '/'\n ch = source.charCodeAt(index + 1);\n if (ch === 0x2F) {\n ++index;\n ++index;\n skipSingleLineComment(2);\n start = true;\n } else if (ch === 0x2A) { // U+002A is '*'\n ++index;\n ++index;\n skipMultiLineComment();\n } else {\n break;\n }\n } else if (start && ch === 0x2D) { // U+002D is '-'\n // U+003E is '>'\n if ((source.charCodeAt(index + 1) === 0x2D) && (source.charCodeAt(index + 2) === 0x3E)) {\n // '-->' is a single-line comment\n index += 3;\n skipSingleLineComment(3);\n } else {\n break;\n }\n } else if (ch === 0x3C) { // U+003C is '<'\n if (source.slice(index + 1, index + 4) === '!--') {\n ++index; // `<`\n ++index; // `!`\n ++index; // `-`\n ++index; // `-`\n skipSingleLineComment(4);\n } else {\n break;\n }\n } else {\n break;\n }\n }\n }\n\n function scanHexEscape(prefix) {\n var i, len, ch, code = 0;\n\n len = (prefix === 'u') ? 4 : 2;\n for (i = 0; i < len; ++i) {\n if (index < length && isHexDigit(source[index])) {\n ch = source[index++];\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n } else {\n return '';\n }\n }\n return String.fromCharCode(code);\n }\n\n function scanUnicodeCodePointEscape() {\n var ch, code;\n\n ch = source[index];\n code = 0;\n\n // At least, one hex digit is required.\n if (ch === '}') {\n throwUnexpectedToken();\n }\n\n while (index < length) {\n ch = source[index++];\n if (!isHexDigit(ch)) {\n break;\n }\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n }\n\n if (code > 0x10FFFF || ch !== '}') {\n throwUnexpectedToken();\n }\n\n return fromCodePoint(code);\n }\n\n function codePointAt(i) {\n var cp, first, second;\n\n cp = source.charCodeAt(i);\n if (cp >= 0xD800 && cp <= 0xDBFF) {\n second = source.charCodeAt(i + 1);\n if (second >= 0xDC00 && second <= 0xDFFF) {\n first = cp;\n cp = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n }\n }\n\n return cp;\n }\n\n function getComplexIdentifier() {\n var cp, ch, id;\n\n cp = codePointAt(index);\n id = fromCodePoint(cp);\n index += id.length;\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (cp === 0x5C) {\n if (source.charCodeAt(index) !== 0x75) {\n throwUnexpectedToken();\n }\n ++index;\n if (source[index] === '{') {\n ++index;\n ch = scanUnicodeCodePointEscape();\n } else {\n ch = scanHexEscape('u');\n cp = ch.charCodeAt(0);\n if (!ch || ch === '\\\\' || !isIdentifierStart(cp)) {\n throwUnexpectedToken();\n }\n }\n id = ch;\n }\n\n while (index < length) {\n cp = codePointAt(index);\n if (!isIdentifierPart(cp)) {\n break;\n }\n ch = fromCodePoint(cp);\n id += ch;\n index += ch.length;\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (cp === 0x5C) {\n id = id.substr(0, id.length - 1);\n if (source.charCodeAt(index) !== 0x75) {\n throwUnexpectedToken();\n }\n ++index;\n if (source[index] === '{') {\n ++index;\n ch = scanUnicodeCodePointEscape();\n } else {\n ch = scanHexEscape('u');\n cp = ch.charCodeAt(0);\n if (!ch || ch === '\\\\' || !isIdentifierPart(cp)) {\n throwUnexpectedToken();\n }\n }\n id += ch;\n }\n }\n\n return id;\n }\n\n function getIdentifier() {\n var start, ch;\n\n start = index++;\n while (index < length) {\n ch = source.charCodeAt(index);\n if (ch === 0x5C) {\n // Blackslash (U+005C) marks Unicode escape sequence.\n index = start;\n return getComplexIdentifier();\n } else if (ch >= 0xD800 && ch < 0xDFFF) {\n // Need to handle surrogate pairs.\n index = start;\n return getComplexIdentifier();\n }\n if (isIdentifierPart(ch)) {\n ++index;\n } else {\n break;\n }\n }\n\n return source.slice(start, index);\n }\n\n function scanIdentifier() {\n var start, id, type;\n\n start = index;\n\n // Backslash (U+005C) starts an escaped character.\n id = (source.charCodeAt(index) === 0x5C) ? getComplexIdentifier() : getIdentifier();\n\n // There is no keyword or literal with only one character.\n // Thus, it must be an identifier.\n if (id.length === 1) {\n type = Token.Identifier;\n } else if (isKeyword(id)) {\n type = Token.Keyword;\n } else if (id === 'null') {\n type = Token.NullLiteral;\n } else if (id === 'true' || id === 'false') {\n type = Token.BooleanLiteral;\n } else {\n type = Token.Identifier;\n }\n\n return {\n type: type,\n value: id,\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n\n // ECMA-262 11.7 Punctuators\n\n function scanPunctuator() {\n var token, str;\n\n token = {\n type: Token.Punctuator,\n value: '',\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: index,\n end: index\n };\n\n // Check for most common single-character punctuators.\n str = source[index];\n switch (str) {\n\n case '(':\n if (extra.tokenize) {\n extra.openParenToken = extra.tokenValues.length;\n }\n ++index;\n break;\n\n case '{':\n if (extra.tokenize) {\n extra.openCurlyToken = extra.tokenValues.length;\n }\n state.curlyStack.push('{');\n ++index;\n break;\n\n case '.':\n ++index;\n if (source[index] === '.' && source[index + 1] === '.') {\n // Spread operator: ...\n index += 2;\n str = '...';\n }\n break;\n\n case '}':\n ++index;\n state.curlyStack.pop();\n break;\n case ')':\n case ';':\n case ',':\n case '[':\n case ']':\n case ':':\n case '?':\n case '~':\n ++index;\n break;\n\n default:\n // 4-character punctuator.\n str = source.substr(index, 4);\n if (str === '>>>=') {\n index += 4;\n } else {\n\n // 3-character punctuators.\n str = str.substr(0, 3);\n if (str === '===' || str === '!==' || str === '>>>' ||\n str === '<<=' || str === '>>=') {\n index += 3;\n } else {\n\n // 2-character punctuators.\n str = str.substr(0, 2);\n if (str === '&&' || str === '||' || str === '==' || str === '!=' ||\n str === '+=' || str === '-=' || str === '*=' || str === '/=' ||\n str === '++' || str === '--' || str === '<<' || str === '>>' ||\n str === '&=' || str === '|=' || str === '^=' || str === '%=' ||\n str === '<=' || str === '>=' || str === '=>') {\n index += 2;\n } else {\n\n // 1-character punctuators.\n str = source[index];\n if ('<>=!+-*%&|^/'.indexOf(str) >= 0) {\n ++index;\n }\n }\n }\n }\n }\n\n if (index === token.start) {\n throwUnexpectedToken();\n }\n\n token.end = index;\n token.value = str;\n return token;\n }\n\n // ECMA-262 11.8.3 Numeric Literals\n\n function scanHexLiteral(start) {\n var number = '';\n\n while (index < length) {\n if (!isHexDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n\n if (number.length === 0) {\n throwUnexpectedToken();\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwUnexpectedToken();\n }\n\n return {\n type: Token.NumericLiteral,\n value: parseInt('0x' + number, 16),\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n function scanBinaryLiteral(start) {\n var ch, number;\n\n number = '';\n\n while (index < length) {\n ch = source[index];\n if (ch !== '0' && ch !== '1') {\n break;\n }\n number += source[index++];\n }\n\n if (number.length === 0) {\n // only 0b or 0B\n throwUnexpectedToken();\n }\n\n if (index < length) {\n ch = source.charCodeAt(index);\n /* istanbul ignore else */\n if (isIdentifierStart(ch) || isDecimalDigit(ch)) {\n throwUnexpectedToken();\n }\n }\n\n return {\n type: Token.NumericLiteral,\n value: parseInt(number, 2),\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n function scanOctalLiteral(prefix, start) {\n var number, octal;\n\n if (isOctalDigit(prefix)) {\n octal = true;\n number = '0' + source[index++];\n } else {\n octal = false;\n ++index;\n number = '';\n }\n\n while (index < length) {\n if (!isOctalDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n\n if (!octal && number.length === 0) {\n // only 0o or 0O\n throwUnexpectedToken();\n }\n\n if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {\n throwUnexpectedToken();\n }\n\n return {\n type: Token.NumericLiteral,\n value: parseInt(number, 8),\n octal: octal,\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n function isImplicitOctalLiteral() {\n var i, ch;\n\n // Implicit octal, unless there is a non-octal digit.\n // (Annex B.1.1 on Numeric Literals)\n for (i = index + 1; i < length; ++i) {\n ch = source[i];\n if (ch === '8' || ch === '9') {\n return false;\n }\n if (!isOctalDigit(ch)) {\n return true;\n }\n }\n\n return true;\n }\n\n function scanNumericLiteral() {\n var number, start, ch;\n\n ch = source[index];\n assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'),\n 'Numeric literal must start with a decimal digit or a decimal point');\n\n start = index;\n number = '';\n if (ch !== '.') {\n number = source[index++];\n ch = source[index];\n\n // Hex number starts with '0x'.\n // Octal number starts with '0'.\n // Octal number in ES6 starts with '0o'.\n // Binary number in ES6 starts with '0b'.\n if (number === '0') {\n if (ch === 'x' || ch === 'X') {\n ++index;\n return scanHexLiteral(start);\n }\n if (ch === 'b' || ch === 'B') {\n ++index;\n return scanBinaryLiteral(start);\n }\n if (ch === 'o' || ch === 'O') {\n return scanOctalLiteral(ch, start);\n }\n\n if (isOctalDigit(ch)) {\n if (isImplicitOctalLiteral()) {\n return scanOctalLiteral(ch, start);\n }\n }\n }\n\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === '.') {\n number += source[index++];\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === 'e' || ch === 'E') {\n number += source[index++];\n\n ch = source[index];\n if (ch === '+' || ch === '-') {\n number += source[index++];\n }\n if (isDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n } else {\n throwUnexpectedToken();\n }\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwUnexpectedToken();\n }\n\n return {\n type: Token.NumericLiteral,\n value: parseFloat(number),\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n // ECMA-262 11.8.4 String Literals\n\n function scanStringLiteral() {\n var str = '', quote, start, ch, unescaped, octToDec, octal = false;\n\n quote = source[index];\n assert((quote === '\\'' || quote === '\"'),\n 'String literal must starts with a quote');\n\n start = index;\n ++index;\n\n while (index < length) {\n ch = source[index++];\n\n if (ch === quote) {\n quote = '';\n break;\n } else if (ch === '\\\\') {\n ch = source[index++];\n if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'u':\n case 'x':\n if (source[index] === '{') {\n ++index;\n str += scanUnicodeCodePointEscape();\n } else {\n unescaped = scanHexEscape(ch);\n if (!unescaped) {\n throw throwUnexpectedToken();\n }\n str += unescaped;\n }\n break;\n case 'n':\n str += '\\n';\n break;\n case 'r':\n str += '\\r';\n break;\n case 't':\n str += '\\t';\n break;\n case 'b':\n str += '\\b';\n break;\n case 'f':\n str += '\\f';\n break;\n case 'v':\n str += '\\x0B';\n break;\n case '8':\n case '9':\n str += ch;\n tolerateUnexpectedToken();\n break;\n\n default:\n if (isOctalDigit(ch)) {\n octToDec = octalToDecimal(ch);\n\n octal = octToDec.octal || octal;\n str += String.fromCharCode(octToDec.code);\n } else {\n str += ch;\n }\n break;\n }\n } else {\n ++lineNumber;\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n lineStart = index;\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n break;\n } else {\n str += ch;\n }\n }\n\n if (quote !== '') {\n throwUnexpectedToken();\n }\n\n return {\n type: Token.StringLiteral,\n value: str,\n octal: octal,\n lineNumber: startLineNumber,\n lineStart: startLineStart,\n start: start,\n end: index\n };\n }\n\n // ECMA-262 11.8.6 Template Literal Lexical Components\n\n function scanTemplate() {\n var cooked = '', ch, start, rawOffset, terminated, head, tail, restore, unescaped;\n\n terminated = false;\n tail = false;\n start = index;\n head = (source[index] === '`');\n rawOffset = 2;\n\n ++index;\n\n while (index < length) {\n ch = source[index++];\n if (ch === '`') {\n rawOffset = 1;\n tail = true;\n terminated = true;\n break;\n } else if (ch === '$') {\n if (source[index] === '{') {\n state.curlyStack.push('${');\n ++index;\n terminated = true;\n break;\n }\n cooked += ch;\n } else if (ch === '\\\\') {\n ch = source[index++];\n if (!isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'n':\n cooked += '\\n';\n break;\n case 'r':\n cooked += '\\r';\n break;\n case 't':\n cooked += '\\t';\n break;\n case 'u':\n case 'x':\n if (source[index] === '{') {\n ++index;\n cooked += scanUnicodeCodePointEscape();\n } else {\n restore = index;\n unescaped = scanHexEscape(ch);\n if (unescaped) {\n cooked += unescaped;\n } else {\n index = restore;\n cooked += ch;\n }\n }\n break;\n case 'b':\n cooked += '\\b';\n break;\n case 'f':\n cooked += '\\f';\n break;\n case 'v':\n cooked += '\\v';\n break;\n\n default:\n if (ch === '0') {\n if (isDecimalDigit(source.charCodeAt(index))) {\n // Illegal: \\01 \\02 and so on\n throwError(Messages.TemplateOctalLiteral);\n }\n cooked += '\\0';\n } else if (isOctalDigit(ch)) {\n // Illegal: \\1 \\2\n throwError(Messages.TemplateOctalLiteral);\n } else {\n cooked += ch;\n }\n break;\n }\n } else {\n ++lineNumber;\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n lineStart = index;\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n ++lineNumber;\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n lineStart = index;\n cooked += '\\n';\n } else {\n cooked += ch;\n }\n }\n\n if (!terminated) {\n throwUnexpectedToken();\n }\n\n if (!head) {\n state.curlyStack.pop();\n }\n\n return {\n type: Token.Template,\n value: {\n cooked: cooked,\n raw: source.slice(start + 1, index - rawOffset)\n },\n head: head,\n tail: tail,\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n // ECMA-262 11.8.5 Regular Expression Literals\n\n function testRegExp(pattern, flags) {\n // The BMP character to use as a replacement for astral symbols when\n // translating an ES6 \"u\"-flagged pattern to an ES5-compatible\n // approximation.\n // Note: replacing with '\\uFFFF' enables false positives in unlikely\n // scenarios. For example, `[\\u{1044f}-\\u{10440}]` is an invalid\n // pattern that would not be detected by this substitution.\n var astralSubstitute = '\\uFFFF',\n tmp = pattern;\n\n if (flags.indexOf('u') >= 0) {\n tmp = tmp\n // Replace every Unicode escape sequence with the equivalent\n // BMP character or a constant ASCII code point in the case of\n // astral symbols. (See the above note on `astralSubstitute`\n // for more information.)\n .replace(/\\\\u\\{([0-9a-fA-F]+)\\}|\\\\u([a-fA-F0-9]{4})/g, function ($0, $1, $2) {\n var codePoint = parseInt($1 || $2, 16);\n if (codePoint > 0x10FFFF) {\n throwUnexpectedToken(null, Messages.InvalidRegExp);\n }\n if (codePoint <= 0xFFFF) {\n return String.fromCharCode(codePoint);\n }\n return astralSubstitute;\n })\n // Replace each paired surrogate with a single ASCII symbol to\n // avoid throwing on regular expressions that are only valid in\n // combination with the \"u\" flag.\n .replace(\n /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,\n astralSubstitute\n );\n }\n\n // First, detect invalid regular expressions.\n try {\n RegExp(tmp);\n } catch (e) {\n throwUnexpectedToken(null, Messages.InvalidRegExp);\n }\n\n // Return a regular expression object for this pattern-flag pair, or\n // `null` in case the current environment doesn't support the flags it\n // uses.\n try {\n return new RegExp(pattern, flags);\n } catch (exception) {\n return null;\n }\n }\n\n function scanRegExpBody() {\n var ch, str, classMarker, terminated, body;\n\n ch = source[index];\n assert(ch === '/', 'Regular expression literal must start with a slash');\n str = source[index++];\n\n classMarker = false;\n terminated = false;\n while (index < length) {\n ch = source[index++];\n str += ch;\n if (ch === '\\\\') {\n ch = source[index++];\n // ECMA-262 7.8.5\n if (isLineTerminator(ch.charCodeAt(0))) {\n throwUnexpectedToken(null, Messages.UnterminatedRegExp);\n }\n str += ch;\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n throwUnexpectedToken(null, Messages.UnterminatedRegExp);\n } else if (classMarker) {\n if (ch === ']') {\n classMarker = false;\n }\n } else {\n if (ch === '/') {\n terminated = true;\n break;\n } else if (ch === '[') {\n classMarker = true;\n }\n }\n }\n\n if (!terminated) {\n throwUnexpectedToken(null, Messages.UnterminatedRegExp);\n }\n\n // Exclude leading and trailing slash.\n body = str.substr(1, str.length - 2);\n return {\n value: body,\n literal: str\n };\n }\n\n function scanRegExpFlags() {\n var ch, str, flags, restore;\n\n str = '';\n flags = '';\n while (index < length) {\n ch = source[index];\n if (!isIdentifierPart(ch.charCodeAt(0))) {\n break;\n }\n\n ++index;\n if (ch === '\\\\' && index < length) {\n ch = source[index];\n if (ch === 'u') {\n ++index;\n restore = index;\n ch = scanHexEscape('u');\n if (ch) {\n flags += ch;\n for (str += '\\\\u'; restore < index; ++restore) {\n str += source[restore];\n }\n } else {\n index = restore;\n flags += 'u';\n str += '\\\\u';\n }\n tolerateUnexpectedToken();\n } else {\n str += '\\\\';\n tolerateUnexpectedToken();\n }\n } else {\n flags += ch;\n str += ch;\n }\n }\n\n return {\n value: flags,\n literal: str\n };\n }\n\n function scanRegExp() {\n var start, body, flags, value;\n scanning = true;\n\n lookahead = null;\n skipComment();\n start = index;\n\n body = scanRegExpBody();\n flags = scanRegExpFlags();\n value = testRegExp(body.value, flags.value);\n scanning = false;\n if (extra.tokenize) {\n return {\n type: Token.RegularExpression,\n value: value,\n regex: {\n pattern: body.value,\n flags: flags.value\n },\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n return {\n literal: body.literal + flags.literal,\n value: value,\n regex: {\n pattern: body.value,\n flags: flags.value\n },\n start: start,\n end: index\n };\n }\n\n function collectRegex() {\n var pos, loc, regex, token;\n\n skipComment();\n\n pos = index;\n loc = {\n start: {\n line: lineNumber,\n column: index - lineStart\n }\n };\n\n regex = scanRegExp();\n\n loc.end = {\n line: lineNumber,\n column: index - lineStart\n };\n\n /* istanbul ignore next */\n if (!extra.tokenize) {\n // Pop the previous token, which is likely '/' or '/='\n if (extra.tokens.length > 0) {\n token = extra.tokens[extra.tokens.length - 1];\n if (token.range[0] === pos && token.type === 'Punctuator') {\n if (token.value === '/' || token.value === '/=') {\n extra.tokens.pop();\n }\n }\n }\n\n extra.tokens.push({\n type: 'RegularExpression',\n value: regex.literal,\n regex: regex.regex,\n range: [pos, index],\n loc: loc\n });\n }\n\n return regex;\n }\n\n function isIdentifierName(token) {\n return token.type === Token.Identifier ||\n token.type === Token.Keyword ||\n token.type === Token.BooleanLiteral ||\n token.type === Token.NullLiteral;\n }\n\n // Using the following algorithm:\n // https://github.com/mozilla/sweet.js/wiki/design\n\n function advanceSlash() {\n var regex, previous, check;\n\n function testKeyword(value) {\n return value && (value.length > 1) && (value[0] >= 'a') && (value[0] <= 'z');\n }\n\n previous = extra.tokenValues[extra.tokens.length - 1];\n regex = (previous !== null);\n\n switch (previous) {\n case 'this':\n case ']':\n regex = false;\n break;\n\n case ')':\n check = extra.tokenValues[extra.openParenToken - 1];\n regex = (check === 'if' || check === 'while' || check === 'for' || check === 'with');\n break;\n\n case '}':\n // Dividing a function by anything makes little sense,\n // but we have to check for that.\n regex = false;\n if (testKeyword(extra.tokenValues[extra.openCurlyToken - 3])) {\n // Anonymous function, e.g. function(){} /42\n check = extra.tokenValues[extra.openCurlyToken - 4];\n regex = check ? (FnExprTokens.indexOf(check) < 0) : false;\n } else if (testKeyword(extra.tokenValues[extra.openCurlyToken - 4])) {\n // Named function, e.g. function f(){} /42/\n check = extra.tokenValues[extra.openCurlyToken - 5];\n regex = check ? (FnExprTokens.indexOf(check) < 0) : true;\n }\n }\n\n return regex ? collectRegex() : scanPunctuator();\n }\n\n function advance() {\n var cp, token;\n\n if (index >= length) {\n return {\n type: Token.EOF,\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: index,\n end: index\n };\n }\n\n cp = source.charCodeAt(index);\n\n if (isIdentifierStart(cp)) {\n token = scanIdentifier();\n if (strict && isStrictModeReservedWord(token.value)) {\n token.type = Token.Keyword;\n }\n return token;\n }\n\n // Very common: ( and ) and ;\n if (cp === 0x28 || cp === 0x29 || cp === 0x3B) {\n return scanPunctuator();\n }\n\n // String literal starts with single quote (U+0027) or double quote (U+0022).\n if (cp === 0x27 || cp === 0x22) {\n return scanStringLiteral();\n }\n\n // Dot (.) U+002E can also start a floating-point number, hence the need\n // to check the next character.\n if (cp === 0x2E) {\n if (isDecimalDigit(source.charCodeAt(index + 1))) {\n return scanNumericLiteral();\n }\n return scanPunctuator();\n }\n\n if (isDecimalDigit(cp)) {\n return scanNumericLiteral();\n }\n\n // Slash (/) U+002F can also start a regex.\n if (extra.tokenize && cp === 0x2F) {\n return advanceSlash();\n }\n\n // Template literals start with ` (U+0060) for template head\n // or } (U+007D) for template middle or template tail.\n if (cp === 0x60 || (cp === 0x7D && state.curlyStack[state.curlyStack.length - 1] === '${')) {\n return scanTemplate();\n }\n\n // Possible identifier start in a surrogate pair.\n if (cp >= 0xD800 && cp < 0xDFFF) {\n cp = codePointAt(index);\n if (isIdentifierStart(cp)) {\n return scanIdentifier();\n }\n }\n\n return scanPunctuator();\n }\n\n function collectToken() {\n var loc, token, value, entry;\n\n loc = {\n start: {\n line: lineNumber,\n column: index - lineStart\n }\n };\n\n token = advance();\n loc.end = {\n line: lineNumber,\n column: index - lineStart\n };\n\n if (token.type !== Token.EOF) {\n value = source.slice(token.start, token.end);\n entry = {\n type: TokenName[token.type],\n value: value,\n range: [token.start, token.end],\n loc: loc\n };\n if (token.regex) {\n entry.regex = {\n pattern: token.regex.pattern,\n flags: token.regex.flags\n };\n }\n if (extra.tokenValues) {\n extra.tokenValues.push((entry.type === 'Punctuator' || entry.type === 'Keyword') ? entry.value : null);\n }\n if (extra.tokenize) {\n if (!extra.range) {\n delete entry.range;\n }\n if (!extra.loc) {\n delete entry.loc;\n }\n if (extra.delegate) {\n entry = extra.delegate(entry);\n }\n }\n extra.tokens.push(entry);\n }\n\n return token;\n }\n\n function lex() {\n var token;\n scanning = true;\n\n lastIndex = index;\n lastLineNumber = lineNumber;\n lastLineStart = lineStart;\n\n skipComment();\n\n token = lookahead;\n\n startIndex = index;\n startLineNumber = lineNumber;\n startLineStart = lineStart;\n\n lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance();\n scanning = false;\n return token;\n }\n\n function peek() {\n scanning = true;\n\n skipComment();\n\n lastIndex = index;\n lastLineNumber = lineNumber;\n lastLineStart = lineStart;\n\n startIndex = index;\n startLineNumber = lineNumber;\n startLineStart = lineStart;\n\n lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance();\n scanning = false;\n }\n\n function Position() {\n this.line = startLineNumber;\n this.column = startIndex - startLineStart;\n }\n\n function SourceLocation() {\n this.start = new Position();\n this.end = null;\n }\n\n function WrappingSourceLocation(startToken) {\n this.start = {\n line: startToken.lineNumber,\n column: startToken.start - startToken.lineStart\n };\n this.end = null;\n }\n\n function Node() {\n if (extra.range) {\n this.range = [startIndex, 0];\n }\n if (extra.loc) {\n this.loc = new SourceLocation();\n }\n }\n\n function WrappingNode(startToken) {\n if (extra.range) {\n this.range = [startToken.start, 0];\n }\n if (extra.loc) {\n this.loc = new WrappingSourceLocation(startToken);\n }\n }\n\n WrappingNode.prototype = Node.prototype = {\n\n processComment: function () {\n var lastChild,\n innerComments,\n leadingComments,\n trailingComments,\n bottomRight = extra.bottomRightStack,\n i,\n comment,\n last = bottomRight[bottomRight.length - 1];\n\n if (this.type === Syntax.Program) {\n if (this.body.length > 0) {\n return;\n }\n }\n /**\n * patch innnerComments for properties empty block\n * `function a() {/** comments **\\/}`\n */\n\n if (this.type === Syntax.BlockStatement && this.body.length === 0) {\n innerComments = [];\n for (i = extra.leadingComments.length - 1; i >= 0; --i) {\n comment = extra.leadingComments[i];\n if (this.range[1] >= comment.range[1]) {\n innerComments.unshift(comment);\n extra.leadingComments.splice(i, 1);\n extra.trailingComments.splice(i, 1);\n }\n }\n if (innerComments.length) {\n this.innerComments = innerComments;\n //bottomRight.push(this);\n return;\n }\n }\n\n if (extra.trailingComments.length > 0) {\n trailingComments = [];\n for (i = extra.trailingComments.length - 1; i >= 0; --i) {\n comment = extra.trailingComments[i];\n if (comment.range[0] >= this.range[1]) {\n trailingComments.unshift(comment);\n extra.trailingComments.splice(i, 1);\n }\n }\n extra.trailingComments = [];\n } else {\n if (last && last.trailingComments && last.trailingComments[0].range[0] >= this.range[1]) {\n trailingComments = last.trailingComments;\n delete last.trailingComments;\n }\n }\n\n // Eating the stack.\n while (last && last.range[0] >= this.range[0]) {\n lastChild = bottomRight.pop();\n last = bottomRight[bottomRight.length - 1];\n }\n\n if (lastChild) {\n if (lastChild.leadingComments) {\n leadingComments = [];\n for (i = lastChild.leadingComments.length - 1; i >= 0; --i) {\n comment = lastChild.leadingComments[i];\n if (comment.range[1] <= this.range[0]) {\n leadingComments.unshift(comment);\n lastChild.leadingComments.splice(i, 1);\n }\n }\n\n if (!lastChild.leadingComments.length) {\n lastChild.leadingComments = undefined;\n }\n }\n } else if (extra.leadingComments.length > 0) {\n leadingComments = [];\n for (i = extra.leadingComments.length - 1; i >= 0; --i) {\n comment = extra.leadingComments[i];\n if (comment.range[1] <= this.range[0]) {\n leadingComments.unshift(comment);\n extra.leadingComments.splice(i, 1);\n }\n }\n }\n\n\n if (leadingComments && leadingComments.length > 0) {\n this.leadingComments = leadingComments;\n }\n if (trailingComments && trailingComments.length > 0) {\n this.trailingComments = trailingComments;\n }\n\n bottomRight.push(this);\n },\n\n finish: function () {\n if (extra.range) {\n this.range[1] = lastIndex;\n }\n if (extra.loc) {\n this.loc.end = {\n line: lastLineNumber,\n column: lastIndex - lastLineStart\n };\n if (extra.source) {\n this.loc.source = extra.source;\n }\n }\n\n if (extra.attachComment) {\n this.processComment();\n }\n },\n\n finishArrayExpression: function (elements) {\n this.type = Syntax.ArrayExpression;\n this.elements = elements;\n this.finish();\n return this;\n },\n\n finishArrayPattern: function (elements) {\n this.type = Syntax.ArrayPattern;\n this.elements = elements;\n this.finish();\n return this;\n },\n\n finishArrowFunctionExpression: function (params, defaults, body, expression) {\n this.type = Syntax.ArrowFunctionExpression;\n this.id = null;\n this.params = params;\n this.defaults = defaults;\n this.body = body;\n this.generator = false;\n this.expression = expression;\n this.finish();\n return this;\n },\n\n finishAssignmentExpression: function (operator, left, right) {\n this.type = Syntax.AssignmentExpression;\n this.operator = operator;\n this.left = left;\n this.right = right;\n this.finish();\n return this;\n },\n\n finishAssignmentPattern: function (left, right) {\n this.type = Syntax.AssignmentPattern;\n this.left = left;\n this.right = right;\n this.finish();\n return this;\n },\n\n finishBinaryExpression: function (operator, left, right) {\n this.type = (operator === '||' || operator === '&&') ? Syntax.LogicalExpression : Syntax.BinaryExpression;\n this.operator = operator;\n this.left = left;\n this.right = right;\n this.finish();\n return this;\n },\n\n finishBlockStatement: function (body) {\n this.type = Syntax.BlockStatement;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishBreakStatement: function (label) {\n this.type = Syntax.BreakStatement;\n this.label = label;\n this.finish();\n return this;\n },\n\n finishCallExpression: function (callee, args) {\n this.type = Syntax.CallExpression;\n this.callee = callee;\n this.arguments = args;\n this.finish();\n return this;\n },\n\n finishCatchClause: function (param, body) {\n this.type = Syntax.CatchClause;\n this.param = param;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishClassBody: function (body) {\n this.type = Syntax.ClassBody;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishClassDeclaration: function (id, superClass, body) {\n this.type = Syntax.ClassDeclaration;\n this.id = id;\n this.superClass = superClass;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishClassExpression: function (id, superClass, body) {\n this.type = Syntax.ClassExpression;\n this.id = id;\n this.superClass = superClass;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishConditionalExpression: function (test, consequent, alternate) {\n this.type = Syntax.ConditionalExpression;\n this.test = test;\n this.consequent = consequent;\n this.alternate = alternate;\n this.finish();\n return this;\n },\n\n finishContinueStatement: function (label) {\n this.type = Syntax.ContinueStatement;\n this.label = label;\n this.finish();\n return this;\n },\n\n finishDebuggerStatement: function () {\n this.type = Syntax.DebuggerStatement;\n this.finish();\n return this;\n },\n\n finishDoWhileStatement: function (body, test) {\n this.type = Syntax.DoWhileStatement;\n this.body = body;\n this.test = test;\n this.finish();\n return this;\n },\n\n finishEmptyStatement: function () {\n this.type = Syntax.EmptyStatement;\n this.finish();\n return this;\n },\n\n finishExpressionStatement: function (expression) {\n this.type = Syntax.ExpressionStatement;\n this.expression = expression;\n this.finish();\n return this;\n },\n\n finishForStatement: function (init, test, update, body) {\n this.type = Syntax.ForStatement;\n this.init = init;\n this.test = test;\n this.update = update;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishForOfStatement: function (left, right, body) {\n this.type = Syntax.ForOfStatement;\n this.left = left;\n this.right = right;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishForInStatement: function (left, right, body) {\n this.type = Syntax.ForInStatement;\n this.left = left;\n this.right = right;\n this.body = body;\n this.each = false;\n this.finish();\n return this;\n },\n\n finishFunctionDeclaration: function (id, params, defaults, body, generator) {\n this.type = Syntax.FunctionDeclaration;\n this.id = id;\n this.params = params;\n this.defaults = defaults;\n this.body = body;\n this.generator = generator;\n this.expression = false;\n this.finish();\n return this;\n },\n\n finishFunctionExpression: function (id, params, defaults, body, generator) {\n this.type = Syntax.FunctionExpression;\n this.id = id;\n this.params = params;\n this.defaults = defaults;\n this.body = body;\n this.generator = generator;\n this.expression = false;\n this.finish();\n return this;\n },\n\n finishIdentifier: function (name) {\n this.type = Syntax.Identifier;\n this.name = name;\n this.finish();\n return this;\n },\n\n finishIfStatement: function (test, consequent, alternate) {\n this.type = Syntax.IfStatement;\n this.test = test;\n this.consequent = consequent;\n this.alternate = alternate;\n this.finish();\n return this;\n },\n\n finishLabeledStatement: function (label, body) {\n this.type = Syntax.LabeledStatement;\n this.label = label;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishLiteral: function (token) {\n this.type = Syntax.Literal;\n this.value = token.value;\n this.raw = source.slice(token.start, token.end);\n if (token.regex) {\n this.regex = token.regex;\n }\n this.finish();\n return this;\n },\n\n finishMemberExpression: function (accessor, object, property) {\n this.type = Syntax.MemberExpression;\n this.computed = accessor === '[';\n this.object = object;\n this.property = property;\n this.finish();\n return this;\n },\n\n finishMetaProperty: function (meta, property) {\n this.type = Syntax.MetaProperty;\n this.meta = meta;\n this.property = property;\n this.finish();\n return this;\n },\n\n finishNewExpression: function (callee, args) {\n this.type = Syntax.NewExpression;\n this.callee = callee;\n this.arguments = args;\n this.finish();\n return this;\n },\n\n finishObjectExpression: function (properties) {\n this.type = Syntax.ObjectExpression;\n this.properties = properties;\n this.finish();\n return this;\n },\n\n finishObjectPattern: function (properties) {\n this.type = Syntax.ObjectPattern;\n this.properties = properties;\n this.finish();\n return this;\n },\n\n finishPostfixExpression: function (operator, argument) {\n this.type = Syntax.UpdateExpression;\n this.operator = operator;\n this.argument = argument;\n this.prefix = false;\n this.finish();\n return this;\n },\n\n finishProgram: function (body, sourceType) {\n this.type = Syntax.Program;\n this.body = body;\n this.sourceType = sourceType;\n this.finish();\n return this;\n },\n\n finishProperty: function (kind, key, computed, value, method, shorthand) {\n this.type = Syntax.Property;\n this.key = key;\n this.computed = computed;\n this.value = value;\n this.kind = kind;\n this.method = method;\n this.shorthand = shorthand;\n this.finish();\n return this;\n },\n\n finishRestElement: function (argument) {\n this.type = Syntax.RestElement;\n this.argument = argument;\n this.finish();\n return this;\n },\n\n finishReturnStatement: function (argument) {\n this.type = Syntax.ReturnStatement;\n this.argument = argument;\n this.finish();\n return this;\n },\n\n finishSequenceExpression: function (expressions) {\n this.type = Syntax.SequenceExpression;\n this.expressions = expressions;\n this.finish();\n return this;\n },\n\n finishSpreadElement: function (argument) {\n this.type = Syntax.SpreadElement;\n this.argument = argument;\n this.finish();\n return this;\n },\n\n finishSwitchCase: function (test, consequent) {\n this.type = Syntax.SwitchCase;\n this.test = test;\n this.consequent = consequent;\n this.finish();\n return this;\n },\n\n finishSuper: function () {\n this.type = Syntax.Super;\n this.finish();\n return this;\n },\n\n finishSwitchStatement: function (discriminant, cases) {\n this.type = Syntax.SwitchStatement;\n this.discriminant = discriminant;\n this.cases = cases;\n this.finish();\n return this;\n },\n\n finishTaggedTemplateExpression: function (tag, quasi) {\n this.type = Syntax.TaggedTemplateExpression;\n this.tag = tag;\n this.quasi = quasi;\n this.finish();\n return this;\n },\n\n finishTemplateElement: function (value, tail) {\n this.type = Syntax.TemplateElement;\n this.value = value;\n this.tail = tail;\n this.finish();\n return this;\n },\n\n finishTemplateLiteral: function (quasis, expressions) {\n this.type = Syntax.TemplateLiteral;\n this.quasis = quasis;\n this.expressions = expressions;\n this.finish();\n return this;\n },\n\n finishThisExpression: function () {\n this.type = Syntax.ThisExpression;\n this.finish();\n return this;\n },\n\n finishThrowStatement: function (argument) {\n this.type = Syntax.ThrowStatement;\n this.argument = argument;\n this.finish();\n return this;\n },\n\n finishTryStatement: function (block, handler, finalizer) {\n this.type = Syntax.TryStatement;\n this.block = block;\n this.guardedHandlers = [];\n this.handlers = handler ? [handler] : [];\n this.handler = handler;\n this.finalizer = finalizer;\n this.finish();\n return this;\n },\n\n finishUnaryExpression: function (operator, argument) {\n this.type = (operator === '++' || operator === '--') ? Syntax.UpdateExpression : Syntax.UnaryExpression;\n this.operator = operator;\n this.argument = argument;\n this.prefix = true;\n this.finish();\n return this;\n },\n\n finishVariableDeclaration: function (declarations) {\n this.type = Syntax.VariableDeclaration;\n this.declarations = declarations;\n this.kind = 'var';\n this.finish();\n return this;\n },\n\n finishLexicalDeclaration: function (declarations, kind) {\n this.type = Syntax.VariableDeclaration;\n this.declarations = declarations;\n this.kind = kind;\n this.finish();\n return this;\n },\n\n finishVariableDeclarator: function (id, init) {\n this.type = Syntax.VariableDeclarator;\n this.id = id;\n this.init = init;\n this.finish();\n return this;\n },\n\n finishWhileStatement: function (test, body) {\n this.type = Syntax.WhileStatement;\n this.test = test;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishWithStatement: function (object, body) {\n this.type = Syntax.WithStatement;\n this.object = object;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishExportSpecifier: function (local, exported) {\n this.type = Syntax.ExportSpecifier;\n this.exported = exported || local;\n this.local = local;\n this.finish();\n return this;\n },\n\n finishImportDefaultSpecifier: function (local) {\n this.type = Syntax.ImportDefaultSpecifier;\n this.local = local;\n this.finish();\n return this;\n },\n\n finishImportNamespaceSpecifier: function (local) {\n this.type = Syntax.ImportNamespaceSpecifier;\n this.local = local;\n this.finish();\n return this;\n },\n\n finishExportNamedDeclaration: function (declaration, specifiers, src) {\n this.type = Syntax.ExportNamedDeclaration;\n this.declaration = declaration;\n this.specifiers = specifiers;\n this.source = src;\n this.finish();\n return this;\n },\n\n finishExportDefaultDeclaration: function (declaration) {\n this.type = Syntax.ExportDefaultDeclaration;\n this.declaration = declaration;\n this.finish();\n return this;\n },\n\n finishExportAllDeclaration: function (src) {\n this.type = Syntax.ExportAllDeclaration;\n this.source = src;\n this.finish();\n return this;\n },\n\n finishImportSpecifier: function (local, imported) {\n this.type = Syntax.ImportSpecifier;\n this.local = local || imported;\n this.imported = imported;\n this.finish();\n return this;\n },\n\n finishImportDeclaration: function (specifiers, src) {\n this.type = Syntax.ImportDeclaration;\n this.specifiers = specifiers;\n this.source = src;\n this.finish();\n return this;\n },\n\n finishYieldExpression: function (argument, delegate) {\n this.type = Syntax.YieldExpression;\n this.argument = argument;\n this.delegate = delegate;\n this.finish();\n return this;\n }\n };\n\n\n function recordError(error) {\n var e, existing;\n\n for (e = 0; e < extra.errors.length; e++) {\n existing = extra.errors[e];\n // Prevent duplicated error.\n /* istanbul ignore next */\n if (existing.index === error.index && existing.message === error.message) {\n return;\n }\n }\n\n extra.errors.push(error);\n }\n\n function constructError(msg, column) {\n var error = new Error(msg);\n try {\n throw error;\n } catch (base) {\n /* istanbul ignore else */\n if (Object.create && Object.defineProperty) {\n error = Object.create(base);\n Object.defineProperty(error, 'column', { value: column });\n }\n } finally {\n return error;\n }\n }\n\n function createError(line, pos, description) {\n var msg, column, error;\n\n msg = 'Line ' + line + ': ' + description;\n column = pos - (scanning ? lineStart : lastLineStart) + 1;\n error = constructError(msg, column);\n error.lineNumber = line;\n error.description = description;\n error.index = pos;\n return error;\n }\n\n // Throw an exception\n\n function throwError(messageFormat) {\n var args, msg;\n\n args = Array.prototype.slice.call(arguments, 1);\n msg = messageFormat.replace(/%(\\d)/g,\n function (whole, idx) {\n assert(idx < args.length, 'Message reference must be in range');\n return args[idx];\n }\n );\n\n throw createError(lastLineNumber, lastIndex, msg);\n }\n\n function tolerateError(messageFormat) {\n var args, msg, error;\n\n args = Array.prototype.slice.call(arguments, 1);\n /* istanbul ignore next */\n msg = messageFormat.replace(/%(\\d)/g,\n function (whole, idx) {\n assert(idx < args.length, 'Message reference must be in range');\n return args[idx];\n }\n );\n\n error = createError(lineNumber, lastIndex, msg);\n if (extra.errors) {\n recordError(error);\n } else {\n throw error;\n }\n }\n\n // Throw an exception because of the token.\n\n function unexpectedTokenError(token, message) {\n var value, msg = message || Messages.UnexpectedToken;\n\n if (token) {\n if (!message) {\n msg = (token.type === Token.EOF) ? Messages.UnexpectedEOS :\n (token.type === Token.Identifier) ? Messages.UnexpectedIdentifier :\n (token.type === Token.NumericLiteral) ? Messages.UnexpectedNumber :\n (token.type === Token.StringLiteral) ? Messages.UnexpectedString :\n (token.type === Token.Template) ? Messages.UnexpectedTemplate :\n Messages.UnexpectedToken;\n\n if (token.type === Token.Keyword) {\n if (isFutureReservedWord(token.value)) {\n msg = Messages.UnexpectedReserved;\n } else if (strict && isStrictModeReservedWord(token.value)) {\n msg = Messages.StrictReservedWord;\n }\n }\n }\n\n value = (token.type === Token.Template) ? token.value.raw : token.value;\n } else {\n value = 'ILLEGAL';\n }\n\n msg = msg.replace('%0', value);\n\n return (token && typeof token.lineNumber === 'number') ?\n createError(token.lineNumber, token.start, msg) :\n createError(scanning ? lineNumber : lastLineNumber, scanning ? index : lastIndex, msg);\n }\n\n function throwUnexpectedToken(token, message) {\n throw unexpectedTokenError(token, message);\n }\n\n function tolerateUnexpectedToken(token, message) {\n var error = unexpectedTokenError(token, message);\n if (extra.errors) {\n recordError(error);\n } else {\n throw error;\n }\n }\n\n // Expect the next token to match the specified punctuator.\n // If not, an exception will be thrown.\n\n function expect(value) {\n var token = lex();\n if (token.type !== Token.Punctuator || token.value !== value) {\n throwUnexpectedToken(token);\n }\n }\n\n /**\n * @name expectCommaSeparator\n * @description Quietly expect a comma when in tolerant mode, otherwise delegates\n * to expect(value)\n * @since 2.0\n */\n function expectCommaSeparator() {\n var token;\n\n if (extra.errors) {\n token = lookahead;\n if (token.type === Token.Punctuator && token.value === ',') {\n lex();\n } else if (token.type === Token.Punctuator && token.value === ';') {\n lex();\n tolerateUnexpectedToken(token);\n } else {\n tolerateUnexpectedToken(token, Messages.UnexpectedToken);\n }\n } else {\n expect(',');\n }\n }\n\n // Expect the next token to match the specified keyword.\n // If not, an exception will be thrown.\n\n function expectKeyword(keyword) {\n var token = lex();\n if (token.type !== Token.Keyword || token.value !== keyword) {\n throwUnexpectedToken(token);\n }\n }\n\n // Return true if the next token matches the specified punctuator.\n\n function match(value) {\n return lookahead.type === Token.Punctuator && lookahead.value === value;\n }\n\n // Return true if the next token matches the specified keyword\n\n function matchKeyword(keyword) {\n return lookahead.type === Token.Keyword && lookahead.value === keyword;\n }\n\n // Return true if the next token matches the specified contextual keyword\n // (where an identifier is sometimes a keyword depending on the context)\n\n function matchContextualKeyword(keyword) {\n return lookahead.type === Token.Identifier && lookahead.value === keyword;\n }\n\n // Return true if the next token is an assignment operator\n\n function matchAssign() {\n var op;\n\n if (lookahead.type !== Token.Punctuator) {\n return false;\n }\n op = lookahead.value;\n return op === '=' ||\n op === '*=' ||\n op === '/=' ||\n op === '%=' ||\n op === '+=' ||\n op === '-=' ||\n op === '<<=' ||\n op === '>>=' ||\n op === '>>>=' ||\n op === '&=' ||\n op === '^=' ||\n op === '|=';\n }\n\n function consumeSemicolon() {\n // Catch the very common case first: immediately a semicolon (U+003B).\n if (source.charCodeAt(startIndex) === 0x3B || match(';')) {\n lex();\n return;\n }\n\n if (hasLineTerminator) {\n return;\n }\n\n // FIXME(ikarienator): this is seemingly an issue in the previous location info convention.\n lastIndex = startIndex;\n lastLineNumber = startLineNumber;\n lastLineStart = startLineStart;\n\n if (lookahead.type !== Token.EOF && !match('}')) {\n throwUnexpectedToken(lookahead);\n }\n }\n\n // Cover grammar support.\n //\n // When an assignment expression position starts with an left parenthesis, the determination of the type\n // of the syntax is to be deferred arbitrarily long until the end of the parentheses pair (plus a lookahead)\n // or the first comma. This situation also defers the determination of all the expressions nested in the pair.\n //\n // There are three productions that can be parsed in a parentheses pair that needs to be determined\n // after the outermost pair is closed. They are:\n //\n // 1. AssignmentExpression\n // 2. BindingElements\n // 3. AssignmentTargets\n //\n // In order to avoid exponential backtracking, we use two flags to denote if the production can be\n // binding element or assignment target.\n //\n // The three productions have the relationship:\n //\n // BindingElements ⊆ AssignmentTargets ⊆ AssignmentExpression\n //\n // with a single exception that CoverInitializedName when used directly in an Expression, generates\n // an early error. Therefore, we need the third state, firstCoverInitializedNameError, to track the\n // first usage of CoverInitializedName and report it when we reached the end of the parentheses pair.\n //\n // isolateCoverGrammar function runs the given parser function with a new cover grammar context, and it does not\n // effect the current flags. This means the production the parser parses is only used as an expression. Therefore\n // the CoverInitializedName check is conducted.\n //\n // inheritCoverGrammar function runs the given parse function with a new cover grammar context, and it propagates\n // the flags outside of the parser. This means the production the parser parses is used as a part of a potential\n // pattern. The CoverInitializedName check is deferred.\n function isolateCoverGrammar(parser) {\n var oldIsBindingElement = isBindingElement,\n oldIsAssignmentTarget = isAssignmentTarget,\n oldFirstCoverInitializedNameError = firstCoverInitializedNameError,\n result;\n isBindingElement = true;\n isAssignmentTarget = true;\n firstCoverInitializedNameError = null;\n result = parser();\n if (firstCoverInitializedNameError !== null) {\n throwUnexpectedToken(firstCoverInitializedNameError);\n }\n isBindingElement = oldIsBindingElement;\n isAssignmentTarget = oldIsAssignmentTarget;\n firstCoverInitializedNameError = oldFirstCoverInitializedNameError;\n return result;\n }\n\n function inheritCoverGrammar(parser) {\n var oldIsBindingElement = isBindingElement,\n oldIsAssignmentTarget = isAssignmentTarget,\n oldFirstCoverInitializedNameError = firstCoverInitializedNameError,\n result;\n isBindingElement = true;\n isAssignmentTarget = true;\n firstCoverInitializedNameError = null;\n result = parser();\n isBindingElement = isBindingElement && oldIsBindingElement;\n isAssignmentTarget = isAssignmentTarget && oldIsAssignmentTarget;\n firstCoverInitializedNameError = oldFirstCoverInitializedNameError || firstCoverInitializedNameError;\n return result;\n }\n\n // ECMA-262 13.3.3 Destructuring Binding Patterns\n\n function parseArrayPattern(params, kind) {\n var node = new Node(), elements = [], rest, restNode;\n expect('[');\n\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else {\n if (match('...')) {\n restNode = new Node();\n lex();\n params.push(lookahead);\n rest = parseVariableIdentifier(kind);\n elements.push(restNode.finishRestElement(rest));\n break;\n } else {\n elements.push(parsePatternWithDefault(params, kind));\n }\n if (!match(']')) {\n expect(',');\n }\n }\n\n }\n\n expect(']');\n\n return node.finishArrayPattern(elements);\n }\n\n function parsePropertyPattern(params, kind) {\n var node = new Node(), key, keyToken, computed = match('['), init;\n if (lookahead.type === Token.Identifier) {\n keyToken = lookahead;\n key = parseVariableIdentifier();\n if (match('=')) {\n params.push(keyToken);\n lex();\n init = parseAssignmentExpression();\n\n return node.finishProperty(\n 'init', key, false,\n new WrappingNode(keyToken).finishAssignmentPattern(key, init), false, false);\n } else if (!match(':')) {\n params.push(keyToken);\n return node.finishProperty('init', key, false, key, false, true);\n }\n } else {\n key = parseObjectPropertyKey();\n }\n expect(':');\n init = parsePatternWithDefault(params, kind);\n return node.finishProperty('init', key, computed, init, false, false);\n }\n\n function parseObjectPattern(params, kind) {\n var node = new Node(), properties = [];\n\n expect('{');\n\n while (!match('}')) {\n properties.push(parsePropertyPattern(params, kind));\n if (!match('}')) {\n expect(',');\n }\n }\n\n lex();\n\n return node.finishObjectPattern(properties);\n }\n\n function parsePattern(params, kind) {\n if (match('[')) {\n return parseArrayPattern(params, kind);\n } else if (match('{')) {\n return parseObjectPattern(params, kind);\n } else if (matchKeyword('let')) {\n if (kind === 'const' || kind === 'let') {\n tolerateUnexpectedToken(lookahead, Messages.UnexpectedToken);\n }\n }\n\n params.push(lookahead);\n return parseVariableIdentifier(kind);\n }\n\n function parsePatternWithDefault(params, kind) {\n var startToken = lookahead, pattern, previousAllowYield, right;\n pattern = parsePattern(params, kind);\n if (match('=')) {\n lex();\n previousAllowYield = state.allowYield;\n state.allowYield = true;\n right = isolateCoverGrammar(parseAssignmentExpression);\n state.allowYield = previousAllowYield;\n pattern = new WrappingNode(startToken).finishAssignmentPattern(pattern, right);\n }\n return pattern;\n }\n\n // ECMA-262 12.2.5 Array Initializer\n\n function parseArrayInitializer() {\n var elements = [], node = new Node(), restSpread;\n\n expect('[');\n\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else if (match('...')) {\n restSpread = new Node();\n lex();\n restSpread.finishSpreadElement(inheritCoverGrammar(parseAssignmentExpression));\n\n if (!match(']')) {\n isAssignmentTarget = isBindingElement = false;\n expect(',');\n }\n elements.push(restSpread);\n } else {\n elements.push(inheritCoverGrammar(parseAssignmentExpression));\n\n if (!match(']')) {\n expect(',');\n }\n }\n }\n\n lex();\n\n return node.finishArrayExpression(elements);\n }\n\n // ECMA-262 12.2.6 Object Initializer\n\n function parsePropertyFunction(node, paramInfo, isGenerator) {\n var previousStrict, body;\n\n isAssignmentTarget = isBindingElement = false;\n\n previousStrict = strict;\n body = isolateCoverGrammar(parseFunctionSourceElements);\n\n if (strict && paramInfo.firstRestricted) {\n tolerateUnexpectedToken(paramInfo.firstRestricted, paramInfo.message);\n }\n if (strict && paramInfo.stricted) {\n tolerateUnexpectedToken(paramInfo.stricted, paramInfo.message);\n }\n\n strict = previousStrict;\n return node.finishFunctionExpression(null, paramInfo.params, paramInfo.defaults, body, isGenerator);\n }\n\n function parsePropertyMethodFunction() {\n var params, method, node = new Node(),\n previousAllowYield = state.allowYield;\n\n state.allowYield = false;\n params = parseParams();\n state.allowYield = previousAllowYield;\n\n state.allowYield = false;\n method = parsePropertyFunction(node, params, false);\n state.allowYield = previousAllowYield;\n\n return method;\n }\n\n function parseObjectPropertyKey() {\n var token, node = new Node(), expr;\n\n token = lex();\n\n // Note: This function is called only from parseObjectProperty(), where\n // EOF and Punctuator tokens are already filtered out.\n\n switch (token.type) {\n case Token.StringLiteral:\n case Token.NumericLiteral:\n if (strict && token.octal) {\n tolerateUnexpectedToken(token, Messages.StrictOctalLiteral);\n }\n return node.finishLiteral(token);\n case Token.Identifier:\n case Token.BooleanLiteral:\n case Token.NullLiteral:\n case Token.Keyword:\n return node.finishIdentifier(token.value);\n case Token.Punctuator:\n if (token.value === '[') {\n expr = isolateCoverGrammar(parseAssignmentExpression);\n expect(']');\n return expr;\n }\n break;\n }\n throwUnexpectedToken(token);\n }\n\n function lookaheadPropertyName() {\n switch (lookahead.type) {\n case Token.Identifier:\n case Token.StringLiteral:\n case Token.BooleanLiteral:\n case Token.NullLiteral:\n case Token.NumericLiteral:\n case Token.Keyword:\n return true;\n case Token.Punctuator:\n return lookahead.value === '[';\n }\n return false;\n }\n\n // This function is to try to parse a MethodDefinition as defined in 14.3. But in the case of object literals,\n // it might be called at a position where there is in fact a short hand identifier pattern or a data property.\n // This can only be determined after we consumed up to the left parentheses.\n //\n // In order to avoid back tracking, it returns `null` if the position is not a MethodDefinition and the caller\n // is responsible to visit other options.\n function tryParseMethodDefinition(token, key, computed, node) {\n var value, options, methodNode, params,\n previousAllowYield = state.allowYield;\n\n if (token.type === Token.Identifier) {\n // check for `get` and `set`;\n\n if (token.value === 'get' && lookaheadPropertyName()) {\n computed = match('[');\n key = parseObjectPropertyKey();\n methodNode = new Node();\n expect('(');\n expect(')');\n\n state.allowYield = false;\n value = parsePropertyFunction(methodNode, {\n params: [],\n defaults: [],\n stricted: null,\n firstRestricted: null,\n message: null\n }, false);\n state.allowYield = previousAllowYield;\n\n return node.finishProperty('get', key, computed, value, false, false);\n } else if (token.value === 'set' && lookaheadPropertyName()) {\n computed = match('[');\n key = parseObjectPropertyKey();\n methodNode = new Node();\n expect('(');\n\n options = {\n params: [],\n defaultCount: 0,\n defaults: [],\n firstRestricted: null,\n paramSet: {}\n };\n if (match(')')) {\n tolerateUnexpectedToken(lookahead);\n } else {\n state.allowYield = false;\n parseParam(options);\n state.allowYield = previousAllowYield;\n if (options.defaultCount === 0) {\n options.defaults = [];\n }\n }\n expect(')');\n\n state.allowYield = false;\n value = parsePropertyFunction(methodNode, options, false);\n state.allowYield = previousAllowYield;\n\n return node.finishProperty('set', key, computed, value, false, false);\n }\n } else if (token.type === Token.Punctuator && token.value === '*' && lookaheadPropertyName()) {\n computed = match('[');\n key = parseObjectPropertyKey();\n methodNode = new Node();\n\n state.allowYield = true;\n params = parseParams();\n state.allowYield = previousAllowYield;\n\n state.allowYield = false;\n value = parsePropertyFunction(methodNode, params, true);\n state.allowYield = previousAllowYield;\n\n return node.finishProperty('init', key, computed, value, true, false);\n }\n\n if (key && match('(')) {\n value = parsePropertyMethodFunction();\n return node.finishProperty('init', key, computed, value, true, false);\n }\n\n // Not a MethodDefinition.\n return null;\n }\n\n function parseObjectProperty(hasProto) {\n var token = lookahead, node = new Node(), computed, key, maybeMethod, proto, value;\n\n computed = match('[');\n if (match('*')) {\n lex();\n } else {\n key = parseObjectPropertyKey();\n }\n maybeMethod = tryParseMethodDefinition(token, key, computed, node);\n if (maybeMethod) {\n return maybeMethod;\n }\n\n if (!key) {\n throwUnexpectedToken(lookahead);\n }\n\n // Check for duplicated __proto__\n if (!computed) {\n proto = (key.type === Syntax.Identifier && key.name === '__proto__') ||\n (key.type === Syntax.Literal && key.value === '__proto__');\n if (hasProto.value && proto) {\n tolerateError(Messages.DuplicateProtoProperty);\n }\n hasProto.value |= proto;\n }\n\n if (match(':')) {\n lex();\n value = inheritCoverGrammar(parseAssignmentExpression);\n return node.finishProperty('init', key, computed, value, false, false);\n }\n\n if (token.type === Token.Identifier) {\n if (match('=')) {\n firstCoverInitializedNameError = lookahead;\n lex();\n value = isolateCoverGrammar(parseAssignmentExpression);\n return node.finishProperty('init', key, computed,\n new WrappingNode(token).finishAssignmentPattern(key, value), false, true);\n }\n return node.finishProperty('init', key, computed, key, false, true);\n }\n\n throwUnexpectedToken(lookahead);\n }\n\n function parseObjectInitializer() {\n var properties = [], hasProto = {value: false}, node = new Node();\n\n expect('{');\n\n while (!match('}')) {\n properties.push(parseObjectProperty(hasProto));\n\n if (!match('}')) {\n expectCommaSeparator();\n }\n }\n\n expect('}');\n\n return node.finishObjectExpression(properties);\n }\n\n function reinterpretExpressionAsPattern(expr) {\n var i;\n switch (expr.type) {\n case Syntax.Identifier:\n case Syntax.MemberExpression:\n case Syntax.RestElement:\n case Syntax.AssignmentPattern:\n break;\n case Syntax.SpreadElement:\n expr.type = Syntax.RestElement;\n reinterpretExpressionAsPattern(expr.argument);\n break;\n case Syntax.ArrayExpression:\n expr.type = Syntax.ArrayPattern;\n for (i = 0; i < expr.elements.length; i++) {\n if (expr.elements[i] !== null) {\n reinterpretExpressionAsPattern(expr.elements[i]);\n }\n }\n break;\n case Syntax.ObjectExpression:\n expr.type = Syntax.ObjectPattern;\n for (i = 0; i < expr.properties.length; i++) {\n reinterpretExpressionAsPattern(expr.properties[i].value);\n }\n break;\n case Syntax.AssignmentExpression:\n expr.type = Syntax.AssignmentPattern;\n reinterpretExpressionAsPattern(expr.left);\n break;\n default:\n // Allow other node type for tolerant parsing.\n break;\n }\n }\n\n // ECMA-262 12.2.9 Template Literals\n\n function parseTemplateElement(option) {\n var node, token;\n\n if (lookahead.type !== Token.Template || (option.head && !lookahead.head)) {\n throwUnexpectedToken();\n }\n\n node = new Node();\n token = lex();\n\n return node.finishTemplateElement({ raw: token.value.raw, cooked: token.value.cooked }, token.tail);\n }\n\n function parseTemplateLiteral() {\n var quasi, quasis, expressions, node = new Node();\n\n quasi = parseTemplateElement({ head: true });\n quasis = [quasi];\n expressions = [];\n\n while (!quasi.tail) {\n expressions.push(parseExpression());\n quasi = parseTemplateElement({ head: false });\n quasis.push(quasi);\n }\n\n return node.finishTemplateLiteral(quasis, expressions);\n }\n\n // ECMA-262 12.2.10 The Grouping Operator\n\n function parseGroupExpression() {\n var expr, expressions, startToken, i, params = [];\n\n expect('(');\n\n if (match(')')) {\n lex();\n if (!match('=>')) {\n expect('=>');\n }\n return {\n type: PlaceHolders.ArrowParameterPlaceHolder,\n params: [],\n rawParams: []\n };\n }\n\n startToken = lookahead;\n if (match('...')) {\n expr = parseRestElement(params);\n expect(')');\n if (!match('=>')) {\n expect('=>');\n }\n return {\n type: PlaceHolders.ArrowParameterPlaceHolder,\n params: [expr]\n };\n }\n\n isBindingElement = true;\n expr = inheritCoverGrammar(parseAssignmentExpression);\n\n if (match(',')) {\n isAssignmentTarget = false;\n expressions = [expr];\n\n while (startIndex < length) {\n if (!match(',')) {\n break;\n }\n lex();\n\n if (match('...')) {\n if (!isBindingElement) {\n throwUnexpectedToken(lookahead);\n }\n expressions.push(parseRestElement(params));\n expect(')');\n if (!match('=>')) {\n expect('=>');\n }\n isBindingElement = false;\n for (i = 0; i < expressions.length; i++) {\n reinterpretExpressionAsPattern(expressions[i]);\n }\n return {\n type: PlaceHolders.ArrowParameterPlaceHolder,\n params: expressions\n };\n }\n\n expressions.push(inheritCoverGrammar(parseAssignmentExpression));\n }\n\n expr = new WrappingNode(startToken).finishSequenceExpression(expressions);\n }\n\n\n expect(')');\n\n if (match('=>')) {\n if (expr.type === Syntax.Identifier && expr.name === 'yield') {\n return {\n type: PlaceHolders.ArrowParameterPlaceHolder,\n params: [expr]\n };\n }\n\n if (!isBindingElement) {\n throwUnexpectedToken(lookahead);\n }\n\n if (expr.type === Syntax.SequenceExpression) {\n for (i = 0; i < expr.expressions.length; i++) {\n reinterpretExpressionAsPattern(expr.expressions[i]);\n }\n } else {\n reinterpretExpressionAsPattern(expr);\n }\n\n expr = {\n type: PlaceHolders.ArrowParameterPlaceHolder,\n params: expr.type === Syntax.SequenceExpression ? expr.expressions : [expr]\n };\n }\n isBindingElement = false;\n return expr;\n }\n\n\n // ECMA-262 12.2 Primary Expressions\n\n function parsePrimaryExpression() {\n var type, token, expr, node;\n\n if (match('(')) {\n isBindingElement = false;\n return inheritCoverGrammar(parseGroupExpression);\n }\n\n if (match('[')) {\n return inheritCoverGrammar(parseArrayInitializer);\n }\n\n if (match('{')) {\n return inheritCoverGrammar(parseObjectInitializer);\n }\n\n type = lookahead.type;\n node = new Node();\n\n if (type === Token.Identifier) {\n if (state.sourceType === 'module' && lookahead.value === 'await') {\n tolerateUnexpectedToken(lookahead);\n }\n expr = node.finishIdentifier(lex().value);\n } else if (type === Token.StringLiteral || type === Token.NumericLiteral) {\n isAssignmentTarget = isBindingElement = false;\n if (strict && lookahead.octal) {\n tolerateUnexpectedToken(lookahead, Messages.StrictOctalLiteral);\n }\n expr = node.finishLiteral(lex());\n } else if (type === Token.Keyword) {\n if (!strict && state.allowYield && matchKeyword('yield')) {\n return parseNonComputedProperty();\n }\n if (!strict && matchKeyword('let')) {\n return node.finishIdentifier(lex().value);\n }\n isAssignmentTarget = isBindingElement = false;\n if (matchKeyword('function')) {\n return parseFunctionExpression();\n }\n if (matchKeyword('this')) {\n lex();\n return node.finishThisExpression();\n }\n if (matchKeyword('class')) {\n return parseClassExpression();\n }\n throwUnexpectedToken(lex());\n } else if (type === Token.BooleanLiteral) {\n isAssignmentTarget = isBindingElement = false;\n token = lex();\n token.value = (token.value === 'true');\n expr = node.finishLiteral(token);\n } else if (type === Token.NullLiteral) {\n isAssignmentTarget = isBindingElement = false;\n token = lex();\n token.value = null;\n expr = node.finishLiteral(token);\n } else if (match('/') || match('/=')) {\n isAssignmentTarget = isBindingElement = false;\n index = startIndex;\n\n if (typeof extra.tokens !== 'undefined') {\n token = collectRegex();\n } else {\n token = scanRegExp();\n }\n lex();\n expr = node.finishLiteral(token);\n } else if (type === Token.Template) {\n expr = parseTemplateLiteral();\n } else {\n throwUnexpectedToken(lex());\n }\n\n return expr;\n }\n\n // ECMA-262 12.3 Left-Hand-Side Expressions\n\n function parseArguments() {\n var args = [], expr;\n\n expect('(');\n\n if (!match(')')) {\n while (startIndex < length) {\n if (match('...')) {\n expr = new Node();\n lex();\n expr.finishSpreadElement(isolateCoverGrammar(parseAssignmentExpression));\n } else {\n expr = isolateCoverGrammar(parseAssignmentExpression);\n }\n args.push(expr);\n if (match(')')) {\n break;\n }\n expectCommaSeparator();\n }\n }\n\n expect(')');\n\n return args;\n }\n\n function parseNonComputedProperty() {\n var token, node = new Node();\n\n token = lex();\n\n if (!isIdentifierName(token)) {\n throwUnexpectedToken(token);\n }\n\n return node.finishIdentifier(token.value);\n }\n\n function parseNonComputedMember() {\n expect('.');\n\n return parseNonComputedProperty();\n }\n\n function parseComputedMember() {\n var expr;\n\n expect('[');\n\n expr = isolateCoverGrammar(parseExpression);\n\n expect(']');\n\n return expr;\n }\n\n // ECMA-262 12.3.3 The new Operator\n\n function parseNewExpression() {\n var callee, args, node = new Node();\n\n expectKeyword('new');\n\n if (match('.')) {\n lex();\n if (lookahead.type === Token.Identifier && lookahead.value === 'target') {\n if (state.inFunctionBody) {\n lex();\n return node.finishMetaProperty('new', 'target');\n }\n }\n throwUnexpectedToken(lookahead);\n }\n\n callee = isolateCoverGrammar(parseLeftHandSideExpression);\n args = match('(') ? parseArguments() : [];\n\n isAssignmentTarget = isBindingElement = false;\n\n return node.finishNewExpression(callee, args);\n }\n\n // ECMA-262 12.3.4 Function Calls\n\n function parseLeftHandSideExpressionAllowCall() {\n var quasi, expr, args, property, startToken, previousAllowIn = state.allowIn;\n\n startToken = lookahead;\n state.allowIn = true;\n\n if (matchKeyword('super') && state.inFunctionBody) {\n expr = new Node();\n lex();\n expr = expr.finishSuper();\n if (!match('(') && !match('.') && !match('[')) {\n throwUnexpectedToken(lookahead);\n }\n } else {\n expr = inheritCoverGrammar(matchKeyword('new') ? parseNewExpression : parsePrimaryExpression);\n }\n\n for (;;) {\n if (match('.')) {\n isBindingElement = false;\n isAssignmentTarget = true;\n property = parseNonComputedMember();\n expr = new WrappingNode(startToken).finishMemberExpression('.', expr, property);\n } else if (match('(')) {\n isBindingElement = false;\n isAssignmentTarget = false;\n args = parseArguments();\n expr = new WrappingNode(startToken).finishCallExpression(expr, args);\n } else if (match('[')) {\n isBindingElement = false;\n isAssignmentTarget = true;\n property = parseComputedMember();\n expr = new WrappingNode(startToken).finishMemberExpression('[', expr, property);\n } else if (lookahead.type === Token.Template && lookahead.head) {\n quasi = parseTemplateLiteral();\n expr = new WrappingNode(startToken).finishTaggedTemplateExpression(expr, quasi);\n } else {\n break;\n }\n }\n state.allowIn = previousAllowIn;\n\n return expr;\n }\n\n // ECMA-262 12.3 Left-Hand-Side Expressions\n\n function parseLeftHandSideExpression() {\n var quasi, expr, property, startToken;\n assert(state.allowIn, 'callee of new expression always allow in keyword.');\n\n startToken = lookahead;\n\n if (matchKeyword('super') && state.inFunctionBody) {\n expr = new Node();\n lex();\n expr = expr.finishSuper();\n if (!match('[') && !match('.')) {\n throwUnexpectedToken(lookahead);\n }\n } else {\n expr = inheritCoverGrammar(matchKeyword('new') ? parseNewExpression : parsePrimaryExpression);\n }\n\n for (;;) {\n if (match('[')) {\n isBindingElement = false;\n isAssignmentTarget = true;\n property = parseComputedMember();\n expr = new WrappingNode(startToken).finishMemberExpression('[', expr, property);\n } else if (match('.')) {\n isBindingElement = false;\n isAssignmentTarget = true;\n property = parseNonComputedMember();\n expr = new WrappingNode(startToken).finishMemberExpression('.', expr, property);\n } else if (lookahead.type === Token.Template && lookahead.head) {\n quasi = parseTemplateLiteral();\n expr = new WrappingNode(startToken).finishTaggedTemplateExpression(expr, quasi);\n } else {\n break;\n }\n }\n return expr;\n }\n\n // ECMA-262 12.4 Postfix Expressions\n\n function parsePostfixExpression() {\n var expr, token, startToken = lookahead;\n\n expr = inheritCoverGrammar(parseLeftHandSideExpressionAllowCall);\n\n if (!hasLineTerminator && lookahead.type === Token.Punctuator) {\n if (match('++') || match('--')) {\n // ECMA-262 11.3.1, 11.3.2\n if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {\n tolerateError(Messages.StrictLHSPostfix);\n }\n\n if (!isAssignmentTarget) {\n tolerateError(Messages.InvalidLHSInAssignment);\n }\n\n isAssignmentTarget = isBindingElement = false;\n\n token = lex();\n expr = new WrappingNode(startToken).finishPostfixExpression(token.value, expr);\n }\n }\n\n return expr;\n }\n\n // ECMA-262 12.5 Unary Operators\n\n function parseUnaryExpression() {\n var token, expr, startToken;\n\n if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.Keyword) {\n expr = parsePostfixExpression();\n } else if (match('++') || match('--')) {\n startToken = lookahead;\n token = lex();\n expr = inheritCoverGrammar(parseUnaryExpression);\n // ECMA-262 11.4.4, 11.4.5\n if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {\n tolerateError(Messages.StrictLHSPrefix);\n }\n\n if (!isAssignmentTarget) {\n tolerateError(Messages.InvalidLHSInAssignment);\n }\n expr = new WrappingNode(startToken).finishUnaryExpression(token.value, expr);\n isAssignmentTarget = isBindingElement = false;\n } else if (match('+') || match('-') || match('~') || match('!')) {\n startToken = lookahead;\n token = lex();\n expr = inheritCoverGrammar(parseUnaryExpression);\n expr = new WrappingNode(startToken).finishUnaryExpression(token.value, expr);\n isAssignmentTarget = isBindingElement = false;\n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n startToken = lookahead;\n token = lex();\n expr = inheritCoverGrammar(parseUnaryExpression);\n expr = new WrappingNode(startToken).finishUnaryExpression(token.value, expr);\n if (strict && expr.operator === 'delete' && expr.argument.type === Syntax.Identifier) {\n tolerateError(Messages.StrictDelete);\n }\n isAssignmentTarget = isBindingElement = false;\n } else {\n expr = parsePostfixExpression();\n }\n\n return expr;\n }\n\n function binaryPrecedence(token, allowIn) {\n var prec = 0;\n\n if (token.type !== Token.Punctuator && token.type !== Token.Keyword) {\n return 0;\n }\n\n switch (token.value) {\n case '||':\n prec = 1;\n break;\n\n case '&&':\n prec = 2;\n break;\n\n case '|':\n prec = 3;\n break;\n\n case '^':\n prec = 4;\n break;\n\n case '&':\n prec = 5;\n break;\n\n case '==':\n case '!=':\n case '===':\n case '!==':\n prec = 6;\n break;\n\n case '<':\n case '>':\n case '<=':\n case '>=':\n case 'instanceof':\n prec = 7;\n break;\n\n case 'in':\n prec = allowIn ? 7 : 0;\n break;\n\n case '<<':\n case '>>':\n case '>>>':\n prec = 8;\n break;\n\n case '+':\n case '-':\n prec = 9;\n break;\n\n case '*':\n case '/':\n case '%':\n prec = 11;\n break;\n\n default:\n break;\n }\n\n return prec;\n }\n\n // ECMA-262 12.6 Multiplicative Operators\n // ECMA-262 12.7 Additive Operators\n // ECMA-262 12.8 Bitwise Shift Operators\n // ECMA-262 12.9 Relational Operators\n // ECMA-262 12.10 Equality Operators\n // ECMA-262 12.11 Binary Bitwise Operators\n // ECMA-262 12.12 Binary Logical Operators\n\n function parseBinaryExpression() {\n var marker, markers, expr, token, prec, stack, right, operator, left, i;\n\n marker = lookahead;\n left = inheritCoverGrammar(parseUnaryExpression);\n\n token = lookahead;\n prec = binaryPrecedence(token, state.allowIn);\n if (prec === 0) {\n return left;\n }\n isAssignmentTarget = isBindingElement = false;\n token.prec = prec;\n lex();\n\n markers = [marker, lookahead];\n right = isolateCoverGrammar(parseUnaryExpression);\n\n stack = [left, token, right];\n\n while ((prec = binaryPrecedence(lookahead, state.allowIn)) > 0) {\n\n // Reduce: make a binary expression from the three topmost entries.\n while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {\n right = stack.pop();\n operator = stack.pop().value;\n left = stack.pop();\n markers.pop();\n expr = new WrappingNode(markers[markers.length - 1]).finishBinaryExpression(operator, left, right);\n stack.push(expr);\n }\n\n // Shift.\n token = lex();\n token.prec = prec;\n stack.push(token);\n markers.push(lookahead);\n expr = isolateCoverGrammar(parseUnaryExpression);\n stack.push(expr);\n }\n\n // Final reduce to clean-up the stack.\n i = stack.length - 1;\n expr = stack[i];\n markers.pop();\n while (i > 1) {\n expr = new WrappingNode(markers.pop()).finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i -= 2;\n }\n\n return expr;\n }\n\n\n // ECMA-262 12.13 Conditional Operator\n\n function parseConditionalExpression() {\n var expr, previousAllowIn, consequent, alternate, startToken;\n\n startToken = lookahead;\n\n expr = inheritCoverGrammar(parseBinaryExpression);\n if (match('?')) {\n lex();\n previousAllowIn = state.allowIn;\n state.allowIn = true;\n consequent = isolateCoverGrammar(parseAssignmentExpression);\n state.allowIn = previousAllowIn;\n expect(':');\n alternate = isolateCoverGrammar(parseAssignmentExpression);\n\n expr = new WrappingNode(startToken).finishConditionalExpression(expr, consequent, alternate);\n isAssignmentTarget = isBindingElement = false;\n }\n\n return expr;\n }\n\n // ECMA-262 14.2 Arrow Function Definitions\n\n function parseConciseBody() {\n if (match('{')) {\n return parseFunctionSourceElements();\n }\n return isolateCoverGrammar(parseAssignmentExpression);\n }\n\n function checkPatternParam(options, param) {\n var i;\n switch (param.type) {\n case Syntax.Identifier:\n validateParam(options, param, param.name);\n break;\n case Syntax.RestElement:\n checkPatternParam(options, param.argument);\n break;\n case Syntax.AssignmentPattern:\n checkPatternParam(options, param.left);\n break;\n case Syntax.ArrayPattern:\n for (i = 0; i < param.elements.length; i++) {\n if (param.elements[i] !== null) {\n checkPatternParam(options, param.elements[i]);\n }\n }\n break;\n case Syntax.YieldExpression:\n break;\n default:\n assert(param.type === Syntax.ObjectPattern, 'Invalid type');\n for (i = 0; i < param.properties.length; i++) {\n checkPatternParam(options, param.properties[i].value);\n }\n break;\n }\n }\n function reinterpretAsCoverFormalsList(expr) {\n var i, len, param, params, defaults, defaultCount, options, token;\n\n defaults = [];\n defaultCount = 0;\n params = [expr];\n\n switch (expr.type) {\n case Syntax.Identifier:\n break;\n case PlaceHolders.ArrowParameterPlaceHolder:\n params = expr.params;\n break;\n default:\n return null;\n }\n\n options = {\n paramSet: {}\n };\n\n for (i = 0, len = params.length; i < len; i += 1) {\n param = params[i];\n switch (param.type) {\n case Syntax.AssignmentPattern:\n params[i] = param.left;\n if (param.right.type === Syntax.YieldExpression) {\n if (param.right.argument) {\n throwUnexpectedToken(lookahead);\n }\n param.right.type = Syntax.Identifier;\n param.right.name = 'yield';\n delete param.right.argument;\n delete param.right.delegate;\n }\n defaults.push(param.right);\n ++defaultCount;\n checkPatternParam(options, param.left);\n break;\n default:\n checkPatternParam(options, param);\n params[i] = param;\n defaults.push(null);\n break;\n }\n }\n\n if (strict || !state.allowYield) {\n for (i = 0, len = params.length; i < len; i += 1) {\n param = params[i];\n if (param.type === Syntax.YieldExpression) {\n throwUnexpectedToken(lookahead);\n }\n }\n }\n\n if (options.message === Messages.StrictParamDupe) {\n token = strict ? options.stricted : options.firstRestricted;\n throwUnexpectedToken(token, options.message);\n }\n\n if (defaultCount === 0) {\n defaults = [];\n }\n\n return {\n params: params,\n defaults: defaults,\n stricted: options.stricted,\n firstRestricted: options.firstRestricted,\n message: options.message\n };\n }\n\n function parseArrowFunctionExpression(options, node) {\n var previousStrict, previousAllowYield, body;\n\n if (hasLineTerminator) {\n tolerateUnexpectedToken(lookahead);\n }\n expect('=>');\n\n previousStrict = strict;\n previousAllowYield = state.allowYield;\n state.allowYield = true;\n\n body = parseConciseBody();\n\n if (strict && options.firstRestricted) {\n throwUnexpectedToken(options.firstRestricted, options.message);\n }\n if (strict && options.stricted) {\n tolerateUnexpectedToken(options.stricted, options.message);\n }\n\n strict = previousStrict;\n state.allowYield = previousAllowYield;\n\n return node.finishArrowFunctionExpression(options.params, options.defaults, body, body.type !== Syntax.BlockStatement);\n }\n\n // ECMA-262 14.4 Yield expression\n\n function parseYieldExpression() {\n var argument, expr, delegate, previousAllowYield;\n\n argument = null;\n expr = new Node();\n delegate = false;\n\n expectKeyword('yield');\n\n if (!hasLineTerminator) {\n previousAllowYield = state.allowYield;\n state.allowYield = false;\n delegate = match('*');\n if (delegate) {\n lex();\n argument = parseAssignmentExpression();\n } else {\n if (!match(';') && !match('}') && !match(')') && lookahead.type !== Token.EOF) {\n argument = parseAssignmentExpression();\n }\n }\n state.allowYield = previousAllowYield;\n }\n\n return expr.finishYieldExpression(argument, delegate);\n }\n\n // ECMA-262 12.14 Assignment Operators\n\n function parseAssignmentExpression() {\n var token, expr, right, list, startToken;\n\n startToken = lookahead;\n token = lookahead;\n\n if (!state.allowYield && matchKeyword('yield')) {\n return parseYieldExpression();\n }\n\n expr = parseConditionalExpression();\n\n if (expr.type === PlaceHolders.ArrowParameterPlaceHolder || match('=>')) {\n isAssignmentTarget = isBindingElement = false;\n list = reinterpretAsCoverFormalsList(expr);\n\n if (list) {\n firstCoverInitializedNameError = null;\n return parseArrowFunctionExpression(list, new WrappingNode(startToken));\n }\n\n return expr;\n }\n\n if (matchAssign()) {\n if (!isAssignmentTarget) {\n tolerateError(Messages.InvalidLHSInAssignment);\n }\n\n // ECMA-262 12.1.2\n if (strict && expr.type === Syntax.Identifier) {\n if (isRestrictedWord(expr.name)) {\n tolerateUnexpectedToken(token, Messages.StrictLHSAssignment);\n }\n if (isStrictModeReservedWord(expr.name)) {\n tolerateUnexpectedToken(token, Messages.StrictReservedWord);\n }\n }\n\n if (!match('=')) {\n isAssignmentTarget = isBindingElement = false;\n } else {\n reinterpretExpressionAsPattern(expr);\n }\n\n token = lex();\n right = isolateCoverGrammar(parseAssignmentExpression);\n expr = new WrappingNode(startToken).finishAssignmentExpression(token.value, expr, right);\n firstCoverInitializedNameError = null;\n }\n\n return expr;\n }\n\n // ECMA-262 12.15 Comma Operator\n\n function parseExpression() {\n var expr, startToken = lookahead, expressions;\n\n expr = isolateCoverGrammar(parseAssignmentExpression);\n\n if (match(',')) {\n expressions = [expr];\n\n while (startIndex < length) {\n if (!match(',')) {\n break;\n }\n lex();\n expressions.push(isolateCoverGrammar(parseAssignmentExpression));\n }\n\n expr = new WrappingNode(startToken).finishSequenceExpression(expressions);\n }\n\n return expr;\n }\n\n // ECMA-262 13.2 Block\n\n function parseStatementListItem() {\n if (lookahead.type === Token.Keyword) {\n switch (lookahead.value) {\n case 'export':\n if (state.sourceType !== 'module') {\n tolerateUnexpectedToken(lookahead, Messages.IllegalExportDeclaration);\n }\n return parseExportDeclaration();\n case 'import':\n if (state.sourceType !== 'module') {\n tolerateUnexpectedToken(lookahead, Messages.IllegalImportDeclaration);\n }\n return parseImportDeclaration();\n case 'const':\n return parseLexicalDeclaration({inFor: false});\n case 'function':\n return parseFunctionDeclaration(new Node());\n case 'class':\n return parseClassDeclaration();\n }\n }\n\n if (matchKeyword('let') && isLexicalDeclaration()) {\n return parseLexicalDeclaration({inFor: false});\n }\n\n return parseStatement();\n }\n\n function parseStatementList() {\n var list = [];\n while (startIndex < length) {\n if (match('}')) {\n break;\n }\n list.push(parseStatementListItem());\n }\n\n return list;\n }\n\n function parseBlock() {\n var block, node = new Node();\n\n expect('{');\n\n block = parseStatementList();\n\n expect('}');\n\n return node.finishBlockStatement(block);\n }\n\n // ECMA-262 13.3.2 Variable Statement\n\n function parseVariableIdentifier(kind) {\n var token, node = new Node();\n\n token = lex();\n\n if (token.type === Token.Keyword && token.value === 'yield') {\n if (strict) {\n tolerateUnexpectedToken(token, Messages.StrictReservedWord);\n } if (!state.allowYield) {\n throwUnexpectedToken(token);\n }\n } else if (token.type !== Token.Identifier) {\n if (strict && token.type === Token.Keyword && isStrictModeReservedWord(token.value)) {\n tolerateUnexpectedToken(token, Messages.StrictReservedWord);\n } else {\n if (strict || token.value !== 'let' || kind !== 'var') {\n throwUnexpectedToken(token);\n }\n }\n } else if (state.sourceType === 'module' && token.type === Token.Identifier && token.value === 'await') {\n tolerateUnexpectedToken(token);\n }\n\n return node.finishIdentifier(token.value);\n }\n\n function parseVariableDeclaration(options) {\n var init = null, id, node = new Node(), params = [];\n\n id = parsePattern(params, 'var');\n\n // ECMA-262 12.2.1\n if (strict && isRestrictedWord(id.name)) {\n tolerateError(Messages.StrictVarName);\n }\n\n if (match('=')) {\n lex();\n init = isolateCoverGrammar(parseAssignmentExpression);\n } else if (id.type !== Syntax.Identifier && !options.inFor) {\n expect('=');\n }\n\n return node.finishVariableDeclarator(id, init);\n }\n\n function parseVariableDeclarationList(options) {\n var opt, list;\n\n opt = { inFor: options.inFor };\n list = [parseVariableDeclaration(opt)];\n\n while (match(',')) {\n lex();\n list.push(parseVariableDeclaration(opt));\n }\n\n return list;\n }\n\n function parseVariableStatement(node) {\n var declarations;\n\n expectKeyword('var');\n\n declarations = parseVariableDeclarationList({ inFor: false });\n\n consumeSemicolon();\n\n return node.finishVariableDeclaration(declarations);\n }\n\n // ECMA-262 13.3.1 Let and Const Declarations\n\n function parseLexicalBinding(kind, options) {\n var init = null, id, node = new Node(), params = [];\n\n id = parsePattern(params, kind);\n\n // ECMA-262 12.2.1\n if (strict && id.type === Syntax.Identifier && isRestrictedWord(id.name)) {\n tolerateError(Messages.StrictVarName);\n }\n\n if (kind === 'const') {\n if (!matchKeyword('in') && !matchContextualKeyword('of')) {\n expect('=');\n init = isolateCoverGrammar(parseAssignmentExpression);\n }\n } else if ((!options.inFor && id.type !== Syntax.Identifier) || match('=')) {\n expect('=');\n init = isolateCoverGrammar(parseAssignmentExpression);\n }\n\n return node.finishVariableDeclarator(id, init);\n }\n\n function parseBindingList(kind, options) {\n var list = [parseLexicalBinding(kind, options)];\n\n while (match(',')) {\n lex();\n list.push(parseLexicalBinding(kind, options));\n }\n\n return list;\n }\n\n\n function tokenizerState() {\n return {\n index: index,\n lineNumber: lineNumber,\n lineStart: lineStart,\n hasLineTerminator: hasLineTerminator,\n lastIndex: lastIndex,\n lastLineNumber: lastLineNumber,\n lastLineStart: lastLineStart,\n startIndex: startIndex,\n startLineNumber: startLineNumber,\n startLineStart: startLineStart,\n lookahead: lookahead,\n tokenCount: extra.tokens ? extra.tokens.length : 0\n };\n }\n\n function resetTokenizerState(ts) {\n index = ts.index;\n lineNumber = ts.lineNumber;\n lineStart = ts.lineStart;\n hasLineTerminator = ts.hasLineTerminator;\n lastIndex = ts.lastIndex;\n lastLineNumber = ts.lastLineNumber;\n lastLineStart = ts.lastLineStart;\n startIndex = ts.startIndex;\n startLineNumber = ts.startLineNumber;\n startLineStart = ts.startLineStart;\n lookahead = ts.lookahead;\n if (extra.tokens) {\n extra.tokens.splice(ts.tokenCount, extra.tokens.length);\n }\n }\n\n function isLexicalDeclaration() {\n var lexical, ts;\n\n ts = tokenizerState();\n\n lex();\n lexical = (lookahead.type === Token.Identifier) || match('[') || match('{') ||\n matchKeyword('let') || matchKeyword('yield');\n\n resetTokenizerState(ts);\n\n return lexical;\n }\n\n function parseLexicalDeclaration(options) {\n var kind, declarations, node = new Node();\n\n kind = lex().value;\n assert(kind === 'let' || kind === 'const', 'Lexical declaration must be either let or const');\n\n declarations = parseBindingList(kind, options);\n\n consumeSemicolon();\n\n return node.finishLexicalDeclaration(declarations, kind);\n }\n\n function parseRestElement(params) {\n var param, node = new Node();\n\n lex();\n\n if (match('{')) {\n throwError(Messages.ObjectPatternAsRestParameter);\n }\n\n params.push(lookahead);\n\n param = parseVariableIdentifier();\n\n if (match('=')) {\n throwError(Messages.DefaultRestParameter);\n }\n\n if (!match(')')) {\n throwError(Messages.ParameterAfterRestParameter);\n }\n\n return node.finishRestElement(param);\n }\n\n // ECMA-262 13.4 Empty Statement\n\n function parseEmptyStatement(node) {\n expect(';');\n return node.finishEmptyStatement();\n }\n\n // ECMA-262 12.4 Expression Statement\n\n function parseExpressionStatement(node) {\n var expr = parseExpression();\n consumeSemicolon();\n return node.finishExpressionStatement(expr);\n }\n\n // ECMA-262 13.6 If statement\n\n function parseIfStatement(node) {\n var test, consequent, alternate;\n\n expectKeyword('if');\n\n expect('(');\n\n test = parseExpression();\n\n expect(')');\n\n consequent = parseStatement();\n\n if (matchKeyword('else')) {\n lex();\n alternate = parseStatement();\n } else {\n alternate = null;\n }\n\n return node.finishIfStatement(test, consequent, alternate);\n }\n\n // ECMA-262 13.7 Iteration Statements\n\n function parseDoWhileStatement(node) {\n var body, test, oldInIteration;\n\n expectKeyword('do');\n\n oldInIteration = state.inIteration;\n state.inIteration = true;\n\n body = parseStatement();\n\n state.inIteration = oldInIteration;\n\n expectKeyword('while');\n\n expect('(');\n\n test = parseExpression();\n\n expect(')');\n\n if (match(';')) {\n lex();\n }\n\n return node.finishDoWhileStatement(body, test);\n }\n\n function parseWhileStatement(node) {\n var test, body, oldInIteration;\n\n expectKeyword('while');\n\n expect('(');\n\n test = parseExpression();\n\n expect(')');\n\n oldInIteration = state.inIteration;\n state.inIteration = true;\n\n body = parseStatement();\n\n state.inIteration = oldInIteration;\n\n return node.finishWhileStatement(test, body);\n }\n\n function parseForStatement(node) {\n var init, forIn, initSeq, initStartToken, test, update, left, right, kind, declarations,\n body, oldInIteration, previousAllowIn = state.allowIn;\n\n init = test = update = null;\n forIn = true;\n\n expectKeyword('for');\n\n expect('(');\n\n if (match(';')) {\n lex();\n } else {\n if (matchKeyword('var')) {\n init = new Node();\n lex();\n\n state.allowIn = false;\n declarations = parseVariableDeclarationList({ inFor: true });\n state.allowIn = previousAllowIn;\n\n if (declarations.length === 1 && matchKeyword('in')) {\n init = init.finishVariableDeclaration(declarations);\n lex();\n left = init;\n right = parseExpression();\n init = null;\n } else if (declarations.length === 1 && declarations[0].init === null && matchContextualKeyword('of')) {\n init = init.finishVariableDeclaration(declarations);\n lex();\n left = init;\n right = parseAssignmentExpression();\n init = null;\n forIn = false;\n } else {\n init = init.finishVariableDeclaration(declarations);\n expect(';');\n }\n } else if (matchKeyword('const') || matchKeyword('let')) {\n init = new Node();\n kind = lex().value;\n\n if (!strict && lookahead.value === 'in') {\n init = init.finishIdentifier(kind);\n lex();\n left = init;\n right = parseExpression();\n init = null;\n } else {\n state.allowIn = false;\n declarations = parseBindingList(kind, {inFor: true});\n state.allowIn = previousAllowIn;\n\n if (declarations.length === 1 && declarations[0].init === null && matchKeyword('in')) {\n init = init.finishLexicalDeclaration(declarations, kind);\n lex();\n left = init;\n right = parseExpression();\n init = null;\n } else if (declarations.length === 1 && declarations[0].init === null && matchContextualKeyword('of')) {\n init = init.finishLexicalDeclaration(declarations, kind);\n lex();\n left = init;\n right = parseAssignmentExpression();\n init = null;\n forIn = false;\n } else {\n consumeSemicolon();\n init = init.finishLexicalDeclaration(declarations, kind);\n }\n }\n } else {\n initStartToken = lookahead;\n state.allowIn = false;\n init = inheritCoverGrammar(parseAssignmentExpression);\n state.allowIn = previousAllowIn;\n\n if (matchKeyword('in')) {\n if (!isAssignmentTarget) {\n tolerateError(Messages.InvalidLHSInForIn);\n }\n\n lex();\n reinterpretExpressionAsPattern(init);\n left = init;\n right = parseExpression();\n init = null;\n } else if (matchContextualKeyword('of')) {\n if (!isAssignmentTarget) {\n tolerateError(Messages.InvalidLHSInForLoop);\n }\n\n lex();\n reinterpretExpressionAsPattern(init);\n left = init;\n right = parseAssignmentExpression();\n init = null;\n forIn = false;\n } else {\n if (match(',')) {\n initSeq = [init];\n while (match(',')) {\n lex();\n initSeq.push(isolateCoverGrammar(parseAssignmentExpression));\n }\n init = new WrappingNode(initStartToken).finishSequenceExpression(initSeq);\n }\n expect(';');\n }\n }\n }\n\n if (typeof left === 'undefined') {\n\n if (!match(';')) {\n test = parseExpression();\n }\n expect(';');\n\n if (!match(')')) {\n update = parseExpression();\n }\n }\n\n expect(')');\n\n oldInIteration = state.inIteration;\n state.inIteration = true;\n\n body = isolateCoverGrammar(parseStatement);\n\n state.inIteration = oldInIteration;\n\n return (typeof left === 'undefined') ?\n node.finishForStatement(init, test, update, body) :\n forIn ? node.finishForInStatement(left, right, body) :\n node.finishForOfStatement(left, right, body);\n }\n\n // ECMA-262 13.8 The continue statement\n\n function parseContinueStatement(node) {\n var label = null, key;\n\n expectKeyword('continue');\n\n // Optimize the most common form: 'continue;'.\n if (source.charCodeAt(startIndex) === 0x3B) {\n lex();\n\n if (!state.inIteration) {\n throwError(Messages.IllegalContinue);\n }\n\n return node.finishContinueStatement(null);\n }\n\n if (hasLineTerminator) {\n if (!state.inIteration) {\n throwError(Messages.IllegalContinue);\n }\n\n return node.finishContinueStatement(null);\n }\n\n if (lookahead.type === Token.Identifier) {\n label = parseVariableIdentifier();\n\n key = '$' + label.name;\n if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) {\n throwError(Messages.UnknownLabel, label.name);\n }\n }\n\n consumeSemicolon();\n\n if (label === null && !state.inIteration) {\n throwError(Messages.IllegalContinue);\n }\n\n return node.finishContinueStatement(label);\n }\n\n // ECMA-262 13.9 The break statement\n\n function parseBreakStatement(node) {\n var label = null, key;\n\n expectKeyword('break');\n\n // Catch the very common case first: immediately a semicolon (U+003B).\n if (source.charCodeAt(lastIndex) === 0x3B) {\n lex();\n\n if (!(state.inIteration || state.inSwitch)) {\n throwError(Messages.IllegalBreak);\n }\n\n return node.finishBreakStatement(null);\n }\n\n if (hasLineTerminator) {\n if (!(state.inIteration || state.inSwitch)) {\n throwError(Messages.IllegalBreak);\n }\n } else if (lookahead.type === Token.Identifier) {\n label = parseVariableIdentifier();\n\n key = '$' + label.name;\n if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) {\n throwError(Messages.UnknownLabel, label.name);\n }\n }\n\n consumeSemicolon();\n\n if (label === null && !(state.inIteration || state.inSwitch)) {\n throwError(Messages.IllegalBreak);\n }\n\n return node.finishBreakStatement(label);\n }\n\n // ECMA-262 13.10 The return statement\n\n function parseReturnStatement(node) {\n var argument = null;\n\n expectKeyword('return');\n\n if (!state.inFunctionBody) {\n tolerateError(Messages.IllegalReturn);\n }\n\n // 'return' followed by a space and an identifier is very common.\n if (source.charCodeAt(lastIndex) === 0x20) {\n if (isIdentifierStart(source.charCodeAt(lastIndex + 1))) {\n argument = parseExpression();\n consumeSemicolon();\n return node.finishReturnStatement(argument);\n }\n }\n\n if (hasLineTerminator) {\n // HACK\n return node.finishReturnStatement(null);\n }\n\n if (!match(';')) {\n if (!match('}') && lookahead.type !== Token.EOF) {\n argument = parseExpression();\n }\n }\n\n consumeSemicolon();\n\n return node.finishReturnStatement(argument);\n }\n\n // ECMA-262 13.11 The with statement\n\n function parseWithStatement(node) {\n var object, body;\n\n if (strict) {\n tolerateError(Messages.StrictModeWith);\n }\n\n expectKeyword('with');\n\n expect('(');\n\n object = parseExpression();\n\n expect(')');\n\n body = parseStatement();\n\n return node.finishWithStatement(object, body);\n }\n\n // ECMA-262 13.12 The switch statement\n\n function parseSwitchCase() {\n var test, consequent = [], statement, node = new Node();\n\n if (matchKeyword('default')) {\n lex();\n test = null;\n } else {\n expectKeyword('case');\n test = parseExpression();\n }\n expect(':');\n\n while (startIndex < length) {\n if (match('}') || matchKeyword('default') || matchKeyword('case')) {\n break;\n }\n statement = parseStatementListItem();\n consequent.push(statement);\n }\n\n return node.finishSwitchCase(test, consequent);\n }\n\n function parseSwitchStatement(node) {\n var discriminant, cases, clause, oldInSwitch, defaultFound;\n\n expectKeyword('switch');\n\n expect('(');\n\n discriminant = parseExpression();\n\n expect(')');\n\n expect('{');\n\n cases = [];\n\n if (match('}')) {\n lex();\n return node.finishSwitchStatement(discriminant, cases);\n }\n\n oldInSwitch = state.inSwitch;\n state.inSwitch = true;\n defaultFound = false;\n\n while (startIndex < length) {\n if (match('}')) {\n break;\n }\n clause = parseSwitchCase();\n if (clause.test === null) {\n if (defaultFound) {\n throwError(Messages.MultipleDefaultsInSwitch);\n }\n defaultFound = true;\n }\n cases.push(clause);\n }\n\n state.inSwitch = oldInSwitch;\n\n expect('}');\n\n return node.finishSwitchStatement(discriminant, cases);\n }\n\n // ECMA-262 13.14 The throw statement\n\n function parseThrowStatement(node) {\n var argument;\n\n expectKeyword('throw');\n\n if (hasLineTerminator) {\n throwError(Messages.NewlineAfterThrow);\n }\n\n argument = parseExpression();\n\n consumeSemicolon();\n\n return node.finishThrowStatement(argument);\n }\n\n // ECMA-262 13.15 The try statement\n\n function parseCatchClause() {\n var param, params = [], paramMap = {}, key, i, body, node = new Node();\n\n expectKeyword('catch');\n\n expect('(');\n if (match(')')) {\n throwUnexpectedToken(lookahead);\n }\n\n param = parsePattern(params);\n for (i = 0; i < params.length; i++) {\n key = '$' + params[i].value;\n if (Object.prototype.hasOwnProperty.call(paramMap, key)) {\n tolerateError(Messages.DuplicateBinding, params[i].value);\n }\n paramMap[key] = true;\n }\n\n // ECMA-262 12.14.1\n if (strict && isRestrictedWord(param.name)) {\n tolerateError(Messages.StrictCatchVariable);\n }\n\n expect(')');\n body = parseBlock();\n return node.finishCatchClause(param, body);\n }\n\n function parseTryStatement(node) {\n var block, handler = null, finalizer = null;\n\n expectKeyword('try');\n\n block = parseBlock();\n\n if (matchKeyword('catch')) {\n handler = parseCatchClause();\n }\n\n if (matchKeyword('finally')) {\n lex();\n finalizer = parseBlock();\n }\n\n if (!handler && !finalizer) {\n throwError(Messages.NoCatchOrFinally);\n }\n\n return node.finishTryStatement(block, handler, finalizer);\n }\n\n // ECMA-262 13.16 The debugger statement\n\n function parseDebuggerStatement(node) {\n expectKeyword('debugger');\n\n consumeSemicolon();\n\n return node.finishDebuggerStatement();\n }\n\n // 13 Statements\n\n function parseStatement() {\n var type = lookahead.type,\n expr,\n labeledBody,\n key,\n node;\n\n if (type === Token.EOF) {\n throwUnexpectedToken(lookahead);\n }\n\n if (type === Token.Punctuator && lookahead.value === '{') {\n return parseBlock();\n }\n isAssignmentTarget = isBindingElement = true;\n node = new Node();\n\n if (type === Token.Punctuator) {\n switch (lookahead.value) {\n case ';':\n return parseEmptyStatement(node);\n case '(':\n return parseExpressionStatement(node);\n default:\n break;\n }\n } else if (type === Token.Keyword) {\n switch (lookahead.value) {\n case 'break':\n return parseBreakStatement(node);\n case 'continue':\n return parseContinueStatement(node);\n case 'debugger':\n return parseDebuggerStatement(node);\n case 'do':\n return parseDoWhileStatement(node);\n case 'for':\n return parseForStatement(node);\n case 'function':\n return parseFunctionDeclaration(node);\n case 'if':\n return parseIfStatement(node);\n case 'return':\n return parseReturnStatement(node);\n case 'switch':\n return parseSwitchStatement(node);\n case 'throw':\n return parseThrowStatement(node);\n case 'try':\n return parseTryStatement(node);\n case 'var':\n return parseVariableStatement(node);\n case 'while':\n return parseWhileStatement(node);\n case 'with':\n return parseWithStatement(node);\n default:\n break;\n }\n }\n\n expr = parseExpression();\n\n // ECMA-262 12.12 Labelled Statements\n if ((expr.type === Syntax.Identifier) && match(':')) {\n lex();\n\n key = '$' + expr.name;\n if (Object.prototype.hasOwnProperty.call(state.labelSet, key)) {\n throwError(Messages.Redeclaration, 'Label', expr.name);\n }\n\n state.labelSet[key] = true;\n labeledBody = parseStatement();\n delete state.labelSet[key];\n return node.finishLabeledStatement(expr, labeledBody);\n }\n\n consumeSemicolon();\n\n return node.finishExpressionStatement(expr);\n }\n\n // ECMA-262 14.1 Function Definition\n\n function parseFunctionSourceElements() {\n var statement, body = [], token, directive, firstRestricted,\n oldLabelSet, oldInIteration, oldInSwitch, oldInFunctionBody, oldParenthesisCount,\n node = new Node();\n\n expect('{');\n\n while (startIndex < length) {\n if (lookahead.type !== Token.StringLiteral) {\n break;\n }\n token = lookahead;\n\n statement = parseStatementListItem();\n body.push(statement);\n if (statement.expression.type !== Syntax.Literal) {\n // this is not directive\n break;\n }\n directive = source.slice(token.start + 1, token.end - 1);\n if (directive === 'use strict') {\n strict = true;\n if (firstRestricted) {\n tolerateUnexpectedToken(firstRestricted, Messages.StrictOctalLiteral);\n }\n } else {\n if (!firstRestricted && token.octal) {\n firstRestricted = token;\n }\n }\n }\n\n oldLabelSet = state.labelSet;\n oldInIteration = state.inIteration;\n oldInSwitch = state.inSwitch;\n oldInFunctionBody = state.inFunctionBody;\n oldParenthesisCount = state.parenthesizedCount;\n\n state.labelSet = {};\n state.inIteration = false;\n state.inSwitch = false;\n state.inFunctionBody = true;\n state.parenthesizedCount = 0;\n\n while (startIndex < length) {\n if (match('}')) {\n break;\n }\n body.push(parseStatementListItem());\n }\n\n expect('}');\n\n state.labelSet = oldLabelSet;\n state.inIteration = oldInIteration;\n state.inSwitch = oldInSwitch;\n state.inFunctionBody = oldInFunctionBody;\n state.parenthesizedCount = oldParenthesisCount;\n\n return node.finishBlockStatement(body);\n }\n\n function validateParam(options, param, name) {\n var key = '$' + name;\n if (strict) {\n if (isRestrictedWord(name)) {\n options.stricted = param;\n options.message = Messages.StrictParamName;\n }\n if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {\n options.stricted = param;\n options.message = Messages.StrictParamDupe;\n }\n } else if (!options.firstRestricted) {\n if (isRestrictedWord(name)) {\n options.firstRestricted = param;\n options.message = Messages.StrictParamName;\n } else if (isStrictModeReservedWord(name)) {\n options.firstRestricted = param;\n options.message = Messages.StrictReservedWord;\n } else if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {\n options.stricted = param;\n options.message = Messages.StrictParamDupe;\n }\n }\n options.paramSet[key] = true;\n }\n\n function parseParam(options) {\n var token, param, params = [], i, def;\n\n token = lookahead;\n if (token.value === '...') {\n param = parseRestElement(params);\n validateParam(options, param.argument, param.argument.name);\n options.params.push(param);\n options.defaults.push(null);\n return false;\n }\n\n param = parsePatternWithDefault(params);\n for (i = 0; i < params.length; i++) {\n validateParam(options, params[i], params[i].value);\n }\n\n if (param.type === Syntax.AssignmentPattern) {\n def = param.right;\n param = param.left;\n ++options.defaultCount;\n }\n\n options.params.push(param);\n options.defaults.push(def);\n\n return !match(')');\n }\n\n function parseParams(firstRestricted) {\n var options;\n\n options = {\n params: [],\n defaultCount: 0,\n defaults: [],\n firstRestricted: firstRestricted\n };\n\n expect('(');\n\n if (!match(')')) {\n options.paramSet = {};\n while (startIndex < length) {\n if (!parseParam(options)) {\n break;\n }\n expect(',');\n }\n }\n\n expect(')');\n\n if (options.defaultCount === 0) {\n options.defaults = [];\n }\n\n return {\n params: options.params,\n defaults: options.defaults,\n stricted: options.stricted,\n firstRestricted: options.firstRestricted,\n message: options.message\n };\n }\n\n function parseFunctionDeclaration(node, identifierIsOptional) {\n var id = null, params = [], defaults = [], body, token, stricted, tmp, firstRestricted, message, previousStrict,\n isGenerator, previousAllowYield;\n\n previousAllowYield = state.allowYield;\n\n expectKeyword('function');\n\n isGenerator = match('*');\n if (isGenerator) {\n lex();\n }\n\n if (!identifierIsOptional || !match('(')) {\n token = lookahead;\n id = parseVariableIdentifier();\n if (strict) {\n if (isRestrictedWord(token.value)) {\n tolerateUnexpectedToken(token, Messages.StrictFunctionName);\n }\n } else {\n if (isRestrictedWord(token.value)) {\n firstRestricted = token;\n message = Messages.StrictFunctionName;\n } else if (isStrictModeReservedWord(token.value)) {\n firstRestricted = token;\n message = Messages.StrictReservedWord;\n }\n }\n }\n\n state.allowYield = !isGenerator;\n tmp = parseParams(firstRestricted);\n params = tmp.params;\n defaults = tmp.defaults;\n stricted = tmp.stricted;\n firstRestricted = tmp.firstRestricted;\n if (tmp.message) {\n message = tmp.message;\n }\n\n\n previousStrict = strict;\n body = parseFunctionSourceElements();\n if (strict && firstRestricted) {\n throwUnexpectedToken(firstRestricted, message);\n }\n if (strict && stricted) {\n tolerateUnexpectedToken(stricted, message);\n }\n\n strict = previousStrict;\n state.allowYield = previousAllowYield;\n\n return node.finishFunctionDeclaration(id, params, defaults, body, isGenerator);\n }\n\n function parseFunctionExpression() {\n var token, id = null, stricted, firstRestricted, message, tmp,\n params = [], defaults = [], body, previousStrict, node = new Node(),\n isGenerator, previousAllowYield;\n\n previousAllowYield = state.allowYield;\n\n expectKeyword('function');\n\n isGenerator = match('*');\n if (isGenerator) {\n lex();\n }\n\n state.allowYield = !isGenerator;\n if (!match('(')) {\n token = lookahead;\n id = (!strict && !isGenerator && matchKeyword('yield')) ? parseNonComputedProperty() : parseVariableIdentifier();\n if (strict) {\n if (isRestrictedWord(token.value)) {\n tolerateUnexpectedToken(token, Messages.StrictFunctionName);\n }\n } else {\n if (isRestrictedWord(token.value)) {\n firstRestricted = token;\n message = Messages.StrictFunctionName;\n } else if (isStrictModeReservedWord(token.value)) {\n firstRestricted = token;\n message = Messages.StrictReservedWord;\n }\n }\n }\n\n tmp = parseParams(firstRestricted);\n params = tmp.params;\n defaults = tmp.defaults;\n stricted = tmp.stricted;\n firstRestricted = tmp.firstRestricted;\n if (tmp.message) {\n message = tmp.message;\n }\n\n previousStrict = strict;\n body = parseFunctionSourceElements();\n if (strict && firstRestricted) {\n throwUnexpectedToken(firstRestricted, message);\n }\n if (strict && stricted) {\n tolerateUnexpectedToken(stricted, message);\n }\n strict = previousStrict;\n state.allowYield = previousAllowYield;\n\n return node.finishFunctionExpression(id, params, defaults, body, isGenerator);\n }\n\n // ECMA-262 14.5 Class Definitions\n\n function parseClassBody() {\n var classBody, token, isStatic, hasConstructor = false, body, method, computed, key;\n\n classBody = new Node();\n\n expect('{');\n body = [];\n while (!match('}')) {\n if (match(';')) {\n lex();\n } else {\n method = new Node();\n token = lookahead;\n isStatic = false;\n computed = match('[');\n if (match('*')) {\n lex();\n } else {\n key = parseObjectPropertyKey();\n if (key.name === 'static' && (lookaheadPropertyName() || match('*'))) {\n token = lookahead;\n isStatic = true;\n computed = match('[');\n if (match('*')) {\n lex();\n } else {\n key = parseObjectPropertyKey();\n }\n }\n }\n method = tryParseMethodDefinition(token, key, computed, method);\n if (method) {\n method['static'] = isStatic; // jscs:ignore requireDotNotation\n if (method.kind === 'init') {\n method.kind = 'method';\n }\n if (!isStatic) {\n if (!method.computed && (method.key.name || method.key.value.toString()) === 'constructor') {\n if (method.kind !== 'method' || !method.method || method.value.generator) {\n throwUnexpectedToken(token, Messages.ConstructorSpecialMethod);\n }\n if (hasConstructor) {\n throwUnexpectedToken(token, Messages.DuplicateConstructor);\n } else {\n hasConstructor = true;\n }\n method.kind = 'constructor';\n }\n } else {\n if (!method.computed && (method.key.name || method.key.value.toString()) === 'prototype') {\n throwUnexpectedToken(token, Messages.StaticPrototype);\n }\n }\n method.type = Syntax.MethodDefinition;\n delete method.method;\n delete method.shorthand;\n body.push(method);\n } else {\n throwUnexpectedToken(lookahead);\n }\n }\n }\n lex();\n return classBody.finishClassBody(body);\n }\n\n function parseClassDeclaration(identifierIsOptional) {\n var id = null, superClass = null, classNode = new Node(), classBody, previousStrict = strict;\n strict = true;\n\n expectKeyword('class');\n\n if (!identifierIsOptional || lookahead.type === Token.Identifier) {\n id = parseVariableIdentifier();\n }\n\n if (matchKeyword('extends')) {\n lex();\n superClass = isolateCoverGrammar(parseLeftHandSideExpressionAllowCall);\n }\n classBody = parseClassBody();\n strict = previousStrict;\n\n return classNode.finishClassDeclaration(id, superClass, classBody);\n }\n\n function parseClassExpression() {\n var id = null, superClass = null, classNode = new Node(), classBody, previousStrict = strict;\n strict = true;\n\n expectKeyword('class');\n\n if (lookahead.type === Token.Identifier) {\n id = parseVariableIdentifier();\n }\n\n if (matchKeyword('extends')) {\n lex();\n superClass = isolateCoverGrammar(parseLeftHandSideExpressionAllowCall);\n }\n classBody = parseClassBody();\n strict = previousStrict;\n\n return classNode.finishClassExpression(id, superClass, classBody);\n }\n\n // ECMA-262 15.2 Modules\n\n function parseModuleSpecifier() {\n var node = new Node();\n\n if (lookahead.type !== Token.StringLiteral) {\n throwError(Messages.InvalidModuleSpecifier);\n }\n return node.finishLiteral(lex());\n }\n\n // ECMA-262 15.2.3 Exports\n\n function parseExportSpecifier() {\n var exported, local, node = new Node(), def;\n if (matchKeyword('default')) {\n // export {default} from 'something';\n def = new Node();\n lex();\n local = def.finishIdentifier('default');\n } else {\n local = parseVariableIdentifier();\n }\n if (matchContextualKeyword('as')) {\n lex();\n exported = parseNonComputedProperty();\n }\n return node.finishExportSpecifier(local, exported);\n }\n\n function parseExportNamedDeclaration(node) {\n var declaration = null,\n isExportFromIdentifier,\n src = null, specifiers = [];\n\n // non-default export\n if (lookahead.type === Token.Keyword) {\n // covers:\n // export var f = 1;\n switch (lookahead.value) {\n case 'let':\n case 'const':\n declaration = parseLexicalDeclaration({inFor: false});\n return node.finishExportNamedDeclaration(declaration, specifiers, null);\n case 'var':\n case 'class':\n case 'function':\n declaration = parseStatementListItem();\n return node.finishExportNamedDeclaration(declaration, specifiers, null);\n }\n }\n\n expect('{');\n while (!match('}')) {\n isExportFromIdentifier = isExportFromIdentifier || matchKeyword('default');\n specifiers.push(parseExportSpecifier());\n if (!match('}')) {\n expect(',');\n if (match('}')) {\n break;\n }\n }\n }\n expect('}');\n\n if (matchContextualKeyword('from')) {\n // covering:\n // export {default} from 'foo';\n // export {foo} from 'foo';\n lex();\n src = parseModuleSpecifier();\n consumeSemicolon();\n } else if (isExportFromIdentifier) {\n // covering:\n // export {default}; // missing fromClause\n throwError(lookahead.value ?\n Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value);\n } else {\n // cover\n // export {foo};\n consumeSemicolon();\n }\n return node.finishExportNamedDeclaration(declaration, specifiers, src);\n }\n\n function parseExportDefaultDeclaration(node) {\n var declaration = null,\n expression = null;\n\n // covers:\n // export default ...\n expectKeyword('default');\n\n if (matchKeyword('function')) {\n // covers:\n // export default function foo () {}\n // export default function () {}\n declaration = parseFunctionDeclaration(new Node(), true);\n return node.finishExportDefaultDeclaration(declaration);\n }\n if (matchKeyword('class')) {\n declaration = parseClassDeclaration(true);\n return node.finishExportDefaultDeclaration(declaration);\n }\n\n if (matchContextualKeyword('from')) {\n throwError(Messages.UnexpectedToken, lookahead.value);\n }\n\n // covers:\n // export default {};\n // export default [];\n // export default (1 + 2);\n if (match('{')) {\n expression = parseObjectInitializer();\n } else if (match('[')) {\n expression = parseArrayInitializer();\n } else {\n expression = parseAssignmentExpression();\n }\n consumeSemicolon();\n return node.finishExportDefaultDeclaration(expression);\n }\n\n function parseExportAllDeclaration(node) {\n var src;\n\n // covers:\n // export * from 'foo';\n expect('*');\n if (!matchContextualKeyword('from')) {\n throwError(lookahead.value ?\n Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value);\n }\n lex();\n src = parseModuleSpecifier();\n consumeSemicolon();\n\n return node.finishExportAllDeclaration(src);\n }\n\n function parseExportDeclaration() {\n var node = new Node();\n if (state.inFunctionBody) {\n throwError(Messages.IllegalExportDeclaration);\n }\n\n expectKeyword('export');\n\n if (matchKeyword('default')) {\n return parseExportDefaultDeclaration(node);\n }\n if (match('*')) {\n return parseExportAllDeclaration(node);\n }\n return parseExportNamedDeclaration(node);\n }\n\n // ECMA-262 15.2.2 Imports\n\n function parseImportSpecifier() {\n // import {} ...;\n var local, imported, node = new Node();\n\n imported = parseNonComputedProperty();\n if (matchContextualKeyword('as')) {\n lex();\n local = parseVariableIdentifier();\n }\n\n return node.finishImportSpecifier(local, imported);\n }\n\n function parseNamedImports() {\n var specifiers = [];\n // {foo, bar as bas}\n expect('{');\n while (!match('}')) {\n specifiers.push(parseImportSpecifier());\n if (!match('}')) {\n expect(',');\n if (match('}')) {\n break;\n }\n }\n }\n expect('}');\n return specifiers;\n }\n\n function parseImportDefaultSpecifier() {\n // import ...;\n var local, node = new Node();\n\n local = parseNonComputedProperty();\n\n return node.finishImportDefaultSpecifier(local);\n }\n\n function parseImportNamespaceSpecifier() {\n // import <* as foo> ...;\n var local, node = new Node();\n\n expect('*');\n if (!matchContextualKeyword('as')) {\n throwError(Messages.NoAsAfterImportNamespace);\n }\n lex();\n local = parseNonComputedProperty();\n\n return node.finishImportNamespaceSpecifier(local);\n }\n\n function parseImportDeclaration() {\n var specifiers = [], src, node = new Node();\n\n if (state.inFunctionBody) {\n throwError(Messages.IllegalImportDeclaration);\n }\n\n expectKeyword('import');\n\n if (lookahead.type === Token.StringLiteral) {\n // import 'foo';\n src = parseModuleSpecifier();\n } else {\n\n if (match('{')) {\n // import {bar}\n specifiers = specifiers.concat(parseNamedImports());\n } else if (match('*')) {\n // import * as foo\n specifiers.push(parseImportNamespaceSpecifier());\n } else if (isIdentifierName(lookahead) && !matchKeyword('default')) {\n // import foo\n specifiers.push(parseImportDefaultSpecifier());\n if (match(',')) {\n lex();\n if (match('*')) {\n // import foo, * as foo\n specifiers.push(parseImportNamespaceSpecifier());\n } else if (match('{')) {\n // import foo, {bar}\n specifiers = specifiers.concat(parseNamedImports());\n } else {\n throwUnexpectedToken(lookahead);\n }\n }\n } else {\n throwUnexpectedToken(lex());\n }\n\n if (!matchContextualKeyword('from')) {\n throwError(lookahead.value ?\n Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value);\n }\n lex();\n src = parseModuleSpecifier();\n }\n\n consumeSemicolon();\n return node.finishImportDeclaration(specifiers, src);\n }\n\n // ECMA-262 15.1 Scripts\n\n function parseScriptBody() {\n var statement, body = [], token, directive, firstRestricted;\n\n while (startIndex < length) {\n token = lookahead;\n if (token.type !== Token.StringLiteral) {\n break;\n }\n\n statement = parseStatementListItem();\n body.push(statement);\n if (statement.expression.type !== Syntax.Literal) {\n // this is not directive\n break;\n }\n directive = source.slice(token.start + 1, token.end - 1);\n if (directive === 'use strict') {\n strict = true;\n if (firstRestricted) {\n tolerateUnexpectedToken(firstRestricted, Messages.StrictOctalLiteral);\n }\n } else {\n if (!firstRestricted && token.octal) {\n firstRestricted = token;\n }\n }\n }\n\n while (startIndex < length) {\n statement = parseStatementListItem();\n /* istanbul ignore if */\n if (typeof statement === 'undefined') {\n break;\n }\n body.push(statement);\n }\n return body;\n }\n\n function parseProgram() {\n var body, node;\n\n peek();\n node = new Node();\n\n body = parseScriptBody();\n return node.finishProgram(body, state.sourceType);\n }\n\n function filterTokenLocation() {\n var i, entry, token, tokens = [];\n\n for (i = 0; i < extra.tokens.length; ++i) {\n entry = extra.tokens[i];\n token = {\n type: entry.type,\n value: entry.value\n };\n if (entry.regex) {\n token.regex = {\n pattern: entry.regex.pattern,\n flags: entry.regex.flags\n };\n }\n if (extra.range) {\n token.range = entry.range;\n }\n if (extra.loc) {\n token.loc = entry.loc;\n }\n tokens.push(token);\n }\n\n extra.tokens = tokens;\n }\n\n function tokenize(code, options, delegate) {\n var toString,\n tokens;\n\n toString = String;\n if (typeof code !== 'string' && !(code instanceof String)) {\n code = toString(code);\n }\n\n source = code;\n index = 0;\n lineNumber = (source.length > 0) ? 1 : 0;\n lineStart = 0;\n startIndex = index;\n startLineNumber = lineNumber;\n startLineStart = lineStart;\n length = source.length;\n lookahead = null;\n state = {\n allowIn: true,\n allowYield: true,\n labelSet: {},\n inFunctionBody: false,\n inIteration: false,\n inSwitch: false,\n lastCommentStart: -1,\n curlyStack: []\n };\n\n extra = {};\n\n // Options matching.\n options = options || {};\n\n // Of course we collect tokens here.\n options.tokens = true;\n extra.tokens = [];\n extra.tokenValues = [];\n extra.tokenize = true;\n extra.delegate = delegate;\n\n // The following two fields are necessary to compute the Regex tokens.\n extra.openParenToken = -1;\n extra.openCurlyToken = -1;\n\n extra.range = (typeof options.range === 'boolean') && options.range;\n extra.loc = (typeof options.loc === 'boolean') && options.loc;\n\n if (typeof options.comment === 'boolean' && options.comment) {\n extra.comments = [];\n }\n if (typeof options.tolerant === 'boolean' && options.tolerant) {\n extra.errors = [];\n }\n\n try {\n peek();\n if (lookahead.type === Token.EOF) {\n return extra.tokens;\n }\n\n lex();\n while (lookahead.type !== Token.EOF) {\n try {\n lex();\n } catch (lexError) {\n if (extra.errors) {\n recordError(lexError);\n // We have to break on the first error\n // to avoid infinite loops.\n break;\n } else {\n throw lexError;\n }\n }\n }\n\n tokens = extra.tokens;\n if (typeof extra.errors !== 'undefined') {\n tokens.errors = extra.errors;\n }\n } catch (e) {\n throw e;\n } finally {\n extra = {};\n }\n return tokens;\n }\n\n function parse(code, options) {\n var program, toString;\n\n toString = String;\n if (typeof code !== 'string' && !(code instanceof String)) {\n code = toString(code);\n }\n\n source = code;\n index = 0;\n lineNumber = (source.length > 0) ? 1 : 0;\n lineStart = 0;\n startIndex = index;\n startLineNumber = lineNumber;\n startLineStart = lineStart;\n length = source.length;\n lookahead = null;\n state = {\n allowIn: true,\n allowYield: true,\n labelSet: {},\n inFunctionBody: false,\n inIteration: false,\n inSwitch: false,\n lastCommentStart: -1,\n curlyStack: [],\n sourceType: 'script'\n };\n strict = false;\n\n extra = {};\n if (typeof options !== 'undefined') {\n extra.range = (typeof options.range === 'boolean') && options.range;\n extra.loc = (typeof options.loc === 'boolean') && options.loc;\n extra.attachComment = (typeof options.attachComment === 'boolean') && options.attachComment;\n\n if (extra.loc && options.source !== null && options.source !== undefined) {\n extra.source = toString(options.source);\n }\n\n if (typeof options.tokens === 'boolean' && options.tokens) {\n extra.tokens = [];\n }\n if (typeof options.comment === 'boolean' && options.comment) {\n extra.comments = [];\n }\n if (typeof options.tolerant === 'boolean' && options.tolerant) {\n extra.errors = [];\n }\n if (extra.attachComment) {\n extra.range = true;\n extra.comments = [];\n extra.bottomRightStack = [];\n extra.trailingComments = [];\n extra.leadingComments = [];\n }\n if (options.sourceType === 'module') {\n // very restrictive condition for now\n state.sourceType = options.sourceType;\n strict = true;\n }\n }\n\n try {\n program = parseProgram();\n if (typeof extra.comments !== 'undefined') {\n program.comments = extra.comments;\n }\n if (typeof extra.tokens !== 'undefined') {\n filterTokenLocation();\n program.tokens = extra.tokens;\n }\n if (typeof extra.errors !== 'undefined') {\n program.errors = extra.errors;\n }\n } catch (e) {\n throw e;\n } finally {\n extra = {};\n }\n\n return program;\n }\n\n // Sync with *.json manifests.\n exports.version = '2.7.1';\n\n exports.tokenize = tokenize;\n\n exports.parse = parse;\n\n // Deep copy.\n /* istanbul ignore next */\n exports.Syntax = (function () {\n var name, types = {};\n\n if (typeof Object.create === 'function') {\n types = Object.create(null);\n }\n\n for (name in Syntax) {\n if (Syntax.hasOwnProperty(name)) {\n types[name] = Syntax[name];\n }\n }\n\n if (typeof Object.freeze === 'function') {\n Object.freeze(types);\n }\n\n return types;\n }());\n\n}));\n/* vim: set sw=4 ts=4 et tw=80 : */\n", + "/*\n Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n(function (root, factory) {\n 'use strict';\n\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js,\n // Rhino, and plain browser loading.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define(['exports'], factory);\n } else if (typeof exports !== 'undefined') {\n factory(exports);\n } else {\n factory((root.esprima = {}));\n }\n}(this, function (exports) {\n 'use strict';\n\n var Token,\n TokenName,\n FnExprTokens,\n Syntax,\n PlaceHolders,\n Messages,\n Regex,\n source,\n strict,\n index,\n lineNumber,\n lineStart,\n hasLineTerminator,\n lastIndex,\n lastLineNumber,\n lastLineStart,\n startIndex,\n startLineNumber,\n startLineStart,\n scanning,\n length,\n lookahead,\n state,\n extra,\n isBindingElement,\n isAssignmentTarget,\n firstCoverInitializedNameError;\n\n Token = {\n BooleanLiteral: 1,\n EOF: 2,\n Identifier: 3,\n Keyword: 4,\n NullLiteral: 5,\n NumericLiteral: 6,\n Punctuator: 7,\n StringLiteral: 8,\n RegularExpression: 9,\n Template: 10\n };\n\n TokenName = {};\n TokenName[Token.BooleanLiteral] = 'Boolean';\n TokenName[Token.EOF] = '';\n TokenName[Token.Identifier] = 'Identifier';\n TokenName[Token.Keyword] = 'Keyword';\n TokenName[Token.NullLiteral] = 'Null';\n TokenName[Token.NumericLiteral] = 'Numeric';\n TokenName[Token.Punctuator] = 'Punctuator';\n TokenName[Token.StringLiteral] = 'String';\n TokenName[Token.RegularExpression] = 'RegularExpression';\n TokenName[Token.Template] = 'Template';\n\n // A function following one of those tokens is an expression.\n FnExprTokens = ['(', '{', '[', 'in', 'typeof', 'instanceof', 'new',\n 'return', 'case', 'delete', 'throw', 'void',\n // assignment operators\n '=', '+=', '-=', '*=', '/=', '%=', '<<=', '>>=', '>>>=',\n '&=', '|=', '^=', ',',\n // binary/unary operators\n '+', '-', '*', '/', '%', '++', '--', '<<', '>>', '>>>', '&',\n '|', '^', '!', '~', '&&', '||', '?', ':', '===', '==', '>=',\n '<=', '<', '>', '!=', '!=='];\n\n Syntax = {\n AssignmentExpression: 'AssignmentExpression',\n AssignmentPattern: 'AssignmentPattern',\n ArrayExpression: 'ArrayExpression',\n ArrayPattern: 'ArrayPattern',\n ArrowFunctionExpression: 'ArrowFunctionExpression',\n BlockStatement: 'BlockStatement',\n BinaryExpression: 'BinaryExpression',\n BreakStatement: 'BreakStatement',\n CallExpression: 'CallExpression',\n CatchClause: 'CatchClause',\n ClassBody: 'ClassBody',\n ClassDeclaration: 'ClassDeclaration',\n ClassExpression: 'ClassExpression',\n ConditionalExpression: 'ConditionalExpression',\n ContinueStatement: 'ContinueStatement',\n DoWhileStatement: 'DoWhileStatement',\n DebuggerStatement: 'DebuggerStatement',\n EmptyStatement: 'EmptyStatement',\n ExportAllDeclaration: 'ExportAllDeclaration',\n ExportDefaultDeclaration: 'ExportDefaultDeclaration',\n ExportNamedDeclaration: 'ExportNamedDeclaration',\n ExportSpecifier: 'ExportSpecifier',\n ExpressionStatement: 'ExpressionStatement',\n ForStatement: 'ForStatement',\n ForOfStatement: 'ForOfStatement',\n ForInStatement: 'ForInStatement',\n FunctionDeclaration: 'FunctionDeclaration',\n FunctionExpression: 'FunctionExpression',\n Identifier: 'Identifier',\n IfStatement: 'IfStatement',\n ImportDeclaration: 'ImportDeclaration',\n ImportDefaultSpecifier: 'ImportDefaultSpecifier',\n ImportNamespaceSpecifier: 'ImportNamespaceSpecifier',\n ImportSpecifier: 'ImportSpecifier',\n Literal: 'Literal',\n LabeledStatement: 'LabeledStatement',\n LogicalExpression: 'LogicalExpression',\n MemberExpression: 'MemberExpression',\n MetaProperty: 'MetaProperty',\n MethodDefinition: 'MethodDefinition',\n NewExpression: 'NewExpression',\n ObjectExpression: 'ObjectExpression',\n ObjectPattern: 'ObjectPattern',\n Program: 'Program',\n Property: 'Property',\n RestElement: 'RestElement',\n ReturnStatement: 'ReturnStatement',\n SequenceExpression: 'SequenceExpression',\n SpreadElement: 'SpreadElement',\n Super: 'Super',\n SwitchCase: 'SwitchCase',\n SwitchStatement: 'SwitchStatement',\n TaggedTemplateExpression: 'TaggedTemplateExpression',\n TemplateElement: 'TemplateElement',\n TemplateLiteral: 'TemplateLiteral',\n ThisExpression: 'ThisExpression',\n ThrowStatement: 'ThrowStatement',\n TryStatement: 'TryStatement',\n UnaryExpression: 'UnaryExpression',\n UpdateExpression: 'UpdateExpression',\n VariableDeclaration: 'VariableDeclaration',\n VariableDeclarator: 'VariableDeclarator',\n WhileStatement: 'WhileStatement',\n WithStatement: 'WithStatement',\n YieldExpression: 'YieldExpression'\n };\n\n PlaceHolders = {\n ArrowParameterPlaceHolder: 'ArrowParameterPlaceHolder'\n };\n\n // Error messages should be identical to V8.\n Messages = {\n UnexpectedToken: 'Unexpected token %0',\n UnexpectedNumber: 'Unexpected number',\n UnexpectedString: 'Unexpected string',\n UnexpectedIdentifier: 'Unexpected identifier',\n UnexpectedReserved: 'Unexpected reserved word',\n UnexpectedTemplate: 'Unexpected quasi %0',\n UnexpectedEOS: 'Unexpected end of input',\n NewlineAfterThrow: 'Illegal newline after throw',\n InvalidRegExp: 'Invalid regular expression',\n UnterminatedRegExp: 'Invalid regular expression: missing /',\n InvalidLHSInAssignment: 'Invalid left-hand side in assignment',\n InvalidLHSInForIn: 'Invalid left-hand side in for-in',\n InvalidLHSInForLoop: 'Invalid left-hand side in for-loop',\n MultipleDefaultsInSwitch: 'More than one default clause in switch statement',\n NoCatchOrFinally: 'Missing catch or finally after try',\n UnknownLabel: 'Undefined label \\'%0\\'',\n Redeclaration: '%0 \\'%1\\' has already been declared',\n IllegalContinue: 'Illegal continue statement',\n IllegalBreak: 'Illegal break statement',\n IllegalReturn: 'Illegal return statement',\n StrictModeWith: 'Strict mode code may not include a with statement',\n StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode',\n StrictVarName: 'Variable name may not be eval or arguments in strict mode',\n StrictParamName: 'Parameter name eval or arguments is not allowed in strict mode',\n StrictParamDupe: 'Strict mode function may not have duplicate parameter names',\n StrictFunctionName: 'Function name may not be eval or arguments in strict mode',\n StrictOctalLiteral: 'Octal literals are not allowed in strict mode.',\n StrictDelete: 'Delete of an unqualified identifier in strict mode.',\n StrictLHSAssignment: 'Assignment to eval or arguments is not allowed in strict mode',\n StrictLHSPostfix: 'Postfix increment/decrement may not have eval or arguments operand in strict mode',\n StrictLHSPrefix: 'Prefix increment/decrement may not have eval or arguments operand in strict mode',\n StrictReservedWord: 'Use of future reserved word in strict mode',\n TemplateOctalLiteral: 'Octal literals are not allowed in template strings.',\n ParameterAfterRestParameter: 'Rest parameter must be last formal parameter',\n DefaultRestParameter: 'Unexpected token =',\n ObjectPatternAsRestParameter: 'Unexpected token {',\n DuplicateProtoProperty: 'Duplicate __proto__ fields are not allowed in object literals',\n ConstructorSpecialMethod: 'Class constructor may not be an accessor',\n DuplicateConstructor: 'A class may only have one constructor',\n StaticPrototype: 'Classes may not have static property named prototype',\n MissingFromClause: 'Unexpected token',\n NoAsAfterImportNamespace: 'Unexpected token',\n InvalidModuleSpecifier: 'Unexpected token',\n IllegalImportDeclaration: 'Unexpected token',\n IllegalExportDeclaration: 'Unexpected token',\n DuplicateBinding: 'Duplicate binding %0'\n };\n\n // See also tools/generate-unicode-regex.js.\n Regex = {\n // ECMAScript 6/Unicode v7.0.0 NonAsciiIdentifierStart:\n NonAsciiIdentifierStart: /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309B-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF5D-\\uDF61]|\\uD805[\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF98]|\\uD809[\\uDC00-\\uDC6E]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50\\uDF93-\\uDF9F]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD83A[\\uDC00-\\uDCC4]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D]|\\uD87E[\\uDC00-\\uDE1D]/,\n\n // ECMAScript 6/Unicode v7.0.0 NonAsciiIdentifierPart:\n NonAsciiIdentifierPart: /[\\xAA\\xB5\\xB7\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1369-\\u1371\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDDFD\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE38-\\uDE3A\\uDE3F\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE6\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDD0-\\uDDDA\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF01-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB7\\uDEC0-\\uDEC9]|\\uD806[\\uDCA0-\\uDCE9\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF98]|\\uD809[\\uDC00-\\uDC6E]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDEF0-\\uDEF4\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50-\\uDF7E\\uDF8F-\\uDF9F]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/\n };\n\n // Ensure the condition is true, otherwise throw an error.\n // This is only to have a better contract semantic, i.e. another safety net\n // to catch a logic error. The condition shall be fulfilled in normal case.\n // Do NOT use this to enforce a certain condition on any user input.\n\n function assert(condition, message) {\n /* istanbul ignore if */\n if (!condition) {\n throw new Error('ASSERT: ' + message);\n }\n }\n\n function isDecimalDigit(ch) {\n return (ch >= 0x30 && ch <= 0x39); // 0..9\n }\n\n function isHexDigit(ch) {\n return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;\n }\n\n function isOctalDigit(ch) {\n return '01234567'.indexOf(ch) >= 0;\n }\n\n function octalToDecimal(ch) {\n // \\0 is not octal escape sequence\n var octal = (ch !== '0'), code = '01234567'.indexOf(ch);\n\n if (index < length && isOctalDigit(source[index])) {\n octal = true;\n code = code * 8 + '01234567'.indexOf(source[index++]);\n\n // 3 digits are only allowed when string starts\n // with 0, 1, 2, 3\n if ('0123'.indexOf(ch) >= 0 &&\n index < length &&\n isOctalDigit(source[index])) {\n code = code * 8 + '01234567'.indexOf(source[index++]);\n }\n }\n\n return {\n code: code,\n octal: octal\n };\n }\n\n // ECMA-262 11.2 White Space\n\n function isWhiteSpace(ch) {\n return (ch === 0x20) || (ch === 0x09) || (ch === 0x0B) || (ch === 0x0C) || (ch === 0xA0) ||\n (ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0);\n }\n\n // ECMA-262 11.3 Line Terminators\n\n function isLineTerminator(ch) {\n return (ch === 0x0A) || (ch === 0x0D) || (ch === 0x2028) || (ch === 0x2029);\n }\n\n // ECMA-262 11.6 Identifier Names and Identifiers\n\n function fromCodePoint(cp) {\n return (cp < 0x10000) ? String.fromCharCode(cp) :\n String.fromCharCode(0xD800 + ((cp - 0x10000) >> 10)) +\n String.fromCharCode(0xDC00 + ((cp - 0x10000) & 1023));\n }\n\n function isIdentifierStart(ch) {\n return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore)\n (ch >= 0x41 && ch <= 0x5A) || // A..Z\n (ch >= 0x61 && ch <= 0x7A) || // a..z\n (ch === 0x5C) || // \\ (backslash)\n ((ch >= 0x80) && Regex.NonAsciiIdentifierStart.test(fromCodePoint(ch)));\n }\n\n function isIdentifierPart(ch) {\n return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore)\n (ch >= 0x41 && ch <= 0x5A) || // A..Z\n (ch >= 0x61 && ch <= 0x7A) || // a..z\n (ch >= 0x30 && ch <= 0x39) || // 0..9\n (ch === 0x5C) || // \\ (backslash)\n ((ch >= 0x80) && Regex.NonAsciiIdentifierPart.test(fromCodePoint(ch)));\n }\n\n // ECMA-262 11.6.2.2 Future Reserved Words\n\n function isFutureReservedWord(id) {\n switch (id) {\n case 'enum':\n case 'export':\n case 'import':\n case 'super':\n return true;\n default:\n return false;\n }\n }\n\n function isStrictModeReservedWord(id) {\n switch (id) {\n case 'implements':\n case 'interface':\n case 'package':\n case 'private':\n case 'protected':\n case 'public':\n case 'static':\n case 'yield':\n case 'let':\n return true;\n default:\n return false;\n }\n }\n\n function isRestrictedWord(id) {\n return id === 'eval' || id === 'arguments';\n }\n\n // ECMA-262 11.6.2.1 Keywords\n\n function isKeyword(id) {\n switch (id.length) {\n case 2:\n return (id === 'if') || (id === 'in') || (id === 'do');\n case 3:\n return (id === 'var') || (id === 'for') || (id === 'new') ||\n (id === 'try') || (id === 'let');\n case 4:\n return (id === 'this') || (id === 'else') || (id === 'case') ||\n (id === 'void') || (id === 'with') || (id === 'enum');\n case 5:\n return (id === 'while') || (id === 'break') || (id === 'catch') ||\n (id === 'throw') || (id === 'const') || (id === 'yield') ||\n (id === 'class') || (id === 'super');\n case 6:\n return (id === 'return') || (id === 'typeof') || (id === 'delete') ||\n (id === 'switch') || (id === 'export') || (id === 'import');\n case 7:\n return (id === 'default') || (id === 'finally') || (id === 'extends');\n case 8:\n return (id === 'function') || (id === 'continue') || (id === 'debugger');\n case 10:\n return (id === 'instanceof');\n default:\n return false;\n }\n }\n\n // ECMA-262 11.4 Comments\n\n function addComment(type, value, start, end, loc) {\n var comment;\n\n assert(typeof start === 'number', 'Comment must have valid position');\n\n state.lastCommentStart = start;\n\n comment = {\n type: type,\n value: value\n };\n if (extra.range) {\n comment.range = [start, end];\n }\n if (extra.loc) {\n comment.loc = loc;\n }\n extra.comments.push(comment);\n if (extra.attachComment) {\n extra.leadingComments.push(comment);\n extra.trailingComments.push(comment);\n }\n if (extra.tokenize) {\n comment.type = comment.type + 'Comment';\n if (extra.delegate) {\n comment = extra.delegate(comment);\n }\n extra.tokens.push(comment);\n }\n }\n\n function skipSingleLineComment(offset) {\n var start, loc, ch, comment;\n\n start = index - offset;\n loc = {\n start: {\n line: lineNumber,\n column: index - lineStart - offset\n }\n };\n\n while (index < length) {\n ch = source.charCodeAt(index);\n ++index;\n if (isLineTerminator(ch)) {\n hasLineTerminator = true;\n if (extra.comments) {\n comment = source.slice(start + offset, index - 1);\n loc.end = {\n line: lineNumber,\n column: index - lineStart - 1\n };\n addComment('Line', comment, start, index - 1, loc);\n }\n if (ch === 13 && source.charCodeAt(index) === 10) {\n ++index;\n }\n ++lineNumber;\n lineStart = index;\n return;\n }\n }\n\n if (extra.comments) {\n comment = source.slice(start + offset, index);\n loc.end = {\n line: lineNumber,\n column: index - lineStart\n };\n addComment('Line', comment, start, index, loc);\n }\n }\n\n function skipMultiLineComment() {\n var start, loc, ch, comment;\n\n if (extra.comments) {\n start = index - 2;\n loc = {\n start: {\n line: lineNumber,\n column: index - lineStart - 2\n }\n };\n }\n\n while (index < length) {\n ch = source.charCodeAt(index);\n if (isLineTerminator(ch)) {\n if (ch === 0x0D && source.charCodeAt(index + 1) === 0x0A) {\n ++index;\n }\n hasLineTerminator = true;\n ++lineNumber;\n ++index;\n lineStart = index;\n } else if (ch === 0x2A) {\n // Block comment ends with '*/'.\n if (source.charCodeAt(index + 1) === 0x2F) {\n ++index;\n ++index;\n if (extra.comments) {\n comment = source.slice(start + 2, index - 2);\n loc.end = {\n line: lineNumber,\n column: index - lineStart\n };\n addComment('Block', comment, start, index, loc);\n }\n return;\n }\n ++index;\n } else {\n ++index;\n }\n }\n\n // Ran off the end of the file - the whole thing is a comment\n if (extra.comments) {\n loc.end = {\n line: lineNumber,\n column: index - lineStart\n };\n comment = source.slice(start + 2, index);\n addComment('Block', comment, start, index, loc);\n }\n tolerateUnexpectedToken();\n }\n\n function skipComment() {\n var ch, start;\n hasLineTerminator = false;\n\n start = (index === 0);\n while (index < length) {\n ch = source.charCodeAt(index);\n\n if (isWhiteSpace(ch)) {\n ++index;\n } else if (isLineTerminator(ch)) {\n hasLineTerminator = true;\n ++index;\n if (ch === 0x0D && source.charCodeAt(index) === 0x0A) {\n ++index;\n }\n ++lineNumber;\n lineStart = index;\n start = true;\n } else if (ch === 0x2F) { // U+002F is '/'\n ch = source.charCodeAt(index + 1);\n if (ch === 0x2F) {\n ++index;\n ++index;\n skipSingleLineComment(2);\n start = true;\n } else if (ch === 0x2A) { // U+002A is '*'\n ++index;\n ++index;\n skipMultiLineComment();\n } else {\n break;\n }\n } else if (start && ch === 0x2D) { // U+002D is '-'\n // U+003E is '>'\n if ((source.charCodeAt(index + 1) === 0x2D) && (source.charCodeAt(index + 2) === 0x3E)) {\n // '-->' is a single-line comment\n index += 3;\n skipSingleLineComment(3);\n } else {\n break;\n }\n } else if (ch === 0x3C) { // U+003C is '<'\n if (source.slice(index + 1, index + 4) === '!--') {\n ++index; // `<`\n ++index; // `!`\n ++index; // `-`\n ++index; // `-`\n skipSingleLineComment(4);\n } else {\n break;\n }\n } else {\n break;\n }\n }\n }\n\n function scanHexEscape(prefix) {\n var i, len, ch, code = 0;\n\n len = (prefix === 'u') ? 4 : 2;\n for (i = 0; i < len; ++i) {\n if (index < length && isHexDigit(source[index])) {\n ch = source[index++];\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n } else {\n return '';\n }\n }\n return String.fromCharCode(code);\n }\n\n function scanUnicodeCodePointEscape() {\n var ch, code;\n\n ch = source[index];\n code = 0;\n\n // At least, one hex digit is required.\n if (ch === '}') {\n throwUnexpectedToken();\n }\n\n while (index < length) {\n ch = source[index++];\n if (!isHexDigit(ch)) {\n break;\n }\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n }\n\n if (code > 0x10FFFF || ch !== '}') {\n throwUnexpectedToken();\n }\n\n return fromCodePoint(code);\n }\n\n function codePointAt(i) {\n var cp, first, second;\n\n cp = source.charCodeAt(i);\n if (cp >= 0xD800 && cp <= 0xDBFF) {\n second = source.charCodeAt(i + 1);\n if (second >= 0xDC00 && second <= 0xDFFF) {\n first = cp;\n cp = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n }\n }\n\n return cp;\n }\n\n function getComplexIdentifier() {\n var cp, ch, id;\n\n cp = codePointAt(index);\n id = fromCodePoint(cp);\n index += id.length;\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (cp === 0x5C) {\n if (source.charCodeAt(index) !== 0x75) {\n throwUnexpectedToken();\n }\n ++index;\n if (source[index] === '{') {\n ++index;\n ch = scanUnicodeCodePointEscape();\n } else {\n ch = scanHexEscape('u');\n cp = ch.charCodeAt(0);\n if (!ch || ch === '\\\\' || !isIdentifierStart(cp)) {\n throwUnexpectedToken();\n }\n }\n id = ch;\n }\n\n while (index < length) {\n cp = codePointAt(index);\n if (!isIdentifierPart(cp)) {\n break;\n }\n ch = fromCodePoint(cp);\n id += ch;\n index += ch.length;\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (cp === 0x5C) {\n id = id.substr(0, id.length - 1);\n if (source.charCodeAt(index) !== 0x75) {\n throwUnexpectedToken();\n }\n ++index;\n if (source[index] === '{') {\n ++index;\n ch = scanUnicodeCodePointEscape();\n } else {\n ch = scanHexEscape('u');\n cp = ch.charCodeAt(0);\n if (!ch || ch === '\\\\' || !isIdentifierPart(cp)) {\n throwUnexpectedToken();\n }\n }\n id += ch;\n }\n }\n\n return id;\n }\n\n function getIdentifier() {\n var start, ch;\n\n start = index++;\n while (index < length) {\n ch = source.charCodeAt(index);\n if (ch === 0x5C) {\n // Blackslash (U+005C) marks Unicode escape sequence.\n index = start;\n return getComplexIdentifier();\n } else if (ch >= 0xD800 && ch < 0xDFFF) {\n // Need to handle surrogate pairs.\n index = start;\n return getComplexIdentifier();\n }\n if (isIdentifierPart(ch)) {\n ++index;\n } else {\n break;\n }\n }\n\n return source.slice(start, index);\n }\n\n function scanIdentifier() {\n var start, id, type;\n\n start = index;\n\n // Backslash (U+005C) starts an escaped character.\n id = (source.charCodeAt(index) === 0x5C) ? getComplexIdentifier() : getIdentifier();\n\n // There is no keyword or literal with only one character.\n // Thus, it must be an identifier.\n if (id.length === 1) {\n type = Token.Identifier;\n } else if (isKeyword(id)) {\n type = Token.Keyword;\n } else if (id === 'null') {\n type = Token.NullLiteral;\n } else if (id === 'true' || id === 'false') {\n type = Token.BooleanLiteral;\n } else {\n type = Token.Identifier;\n }\n\n return {\n type: type,\n value: id,\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n\n // ECMA-262 11.7 Punctuators\n\n function scanPunctuator() {\n var token, str;\n\n token = {\n type: Token.Punctuator,\n value: '',\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: index,\n end: index\n };\n\n // Check for most common single-character punctuators.\n str = source[index];\n switch (str) {\n\n case '(':\n if (extra.tokenize) {\n extra.openParenToken = extra.tokenValues.length;\n }\n ++index;\n break;\n\n case '{':\n if (extra.tokenize) {\n extra.openCurlyToken = extra.tokenValues.length;\n }\n state.curlyStack.push('{');\n ++index;\n break;\n\n case '.':\n ++index;\n if (source[index] === '.' && source[index + 1] === '.') {\n // Spread operator: ...\n index += 2;\n str = '...';\n }\n break;\n\n case '}':\n ++index;\n state.curlyStack.pop();\n break;\n case ')':\n case ';':\n case ',':\n case '[':\n case ']':\n case ':':\n case '?':\n case '~':\n ++index;\n break;\n\n default:\n // 4-character punctuator.\n str = source.substr(index, 4);\n if (str === '>>>=') {\n index += 4;\n } else {\n\n // 3-character punctuators.\n str = str.substr(0, 3);\n if (str === '===' || str === '!==' || str === '>>>' ||\n str === '<<=' || str === '>>=') {\n index += 3;\n } else {\n\n // 2-character punctuators.\n str = str.substr(0, 2);\n if (str === '&&' || str === '||' || str === '==' || str === '!=' ||\n str === '+=' || str === '-=' || str === '*=' || str === '/=' ||\n str === '++' || str === '--' || str === '<<' || str === '>>' ||\n str === '&=' || str === '|=' || str === '^=' || str === '%=' ||\n str === '<=' || str === '>=' || str === '=>') {\n index += 2;\n } else {\n\n // 1-character punctuators.\n str = source[index];\n if ('<>=!+-*%&|^/'.indexOf(str) >= 0) {\n ++index;\n }\n }\n }\n }\n }\n\n if (index === token.start) {\n throwUnexpectedToken();\n }\n\n token.end = index;\n token.value = str;\n return token;\n }\n\n // ECMA-262 11.8.3 Numeric Literals\n\n function scanHexLiteral(start) {\n var number = '';\n\n while (index < length) {\n if (!isHexDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n\n if (number.length === 0) {\n throwUnexpectedToken();\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwUnexpectedToken();\n }\n\n return {\n type: Token.NumericLiteral,\n value: parseInt('0x' + number, 16),\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n function scanBinaryLiteral(start) {\n var ch, number;\n\n number = '';\n\n while (index < length) {\n ch = source[index];\n if (ch !== '0' && ch !== '1') {\n break;\n }\n number += source[index++];\n }\n\n if (number.length === 0) {\n // only 0b or 0B\n throwUnexpectedToken();\n }\n\n if (index < length) {\n ch = source.charCodeAt(index);\n /* istanbul ignore else */\n if (isIdentifierStart(ch) || isDecimalDigit(ch)) {\n throwUnexpectedToken();\n }\n }\n\n return {\n type: Token.NumericLiteral,\n value: parseInt(number, 2),\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n function scanOctalLiteral(prefix, start) {\n var number, octal;\n\n if (isOctalDigit(prefix)) {\n octal = true;\n number = '0' + source[index++];\n } else {\n octal = false;\n ++index;\n number = '';\n }\n\n while (index < length) {\n if (!isOctalDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n\n if (!octal && number.length === 0) {\n // only 0o or 0O\n throwUnexpectedToken();\n }\n\n if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {\n throwUnexpectedToken();\n }\n\n return {\n type: Token.NumericLiteral,\n value: parseInt(number, 8),\n octal: octal,\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n function isImplicitOctalLiteral() {\n var i, ch;\n\n // Implicit octal, unless there is a non-octal digit.\n // (Annex B.1.1 on Numeric Literals)\n for (i = index + 1; i < length; ++i) {\n ch = source[i];\n if (ch === '8' || ch === '9') {\n return false;\n }\n if (!isOctalDigit(ch)) {\n return true;\n }\n }\n\n return true;\n }\n\n function scanNumericLiteral() {\n var number, start, ch;\n\n ch = source[index];\n assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'),\n 'Numeric literal must start with a decimal digit or a decimal point');\n\n start = index;\n number = '';\n if (ch !== '.') {\n number = source[index++];\n ch = source[index];\n\n // Hex number starts with '0x'.\n // Octal number starts with '0'.\n // Octal number in ES6 starts with '0o'.\n // Binary number in ES6 starts with '0b'.\n if (number === '0') {\n if (ch === 'x' || ch === 'X') {\n ++index;\n return scanHexLiteral(start);\n }\n if (ch === 'b' || ch === 'B') {\n ++index;\n return scanBinaryLiteral(start);\n }\n if (ch === 'o' || ch === 'O') {\n return scanOctalLiteral(ch, start);\n }\n\n if (isOctalDigit(ch)) {\n if (isImplicitOctalLiteral()) {\n return scanOctalLiteral(ch, start);\n }\n }\n }\n\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === '.') {\n number += source[index++];\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === 'e' || ch === 'E') {\n number += source[index++];\n\n ch = source[index];\n if (ch === '+' || ch === '-') {\n number += source[index++];\n }\n if (isDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n } else {\n throwUnexpectedToken();\n }\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwUnexpectedToken();\n }\n\n return {\n type: Token.NumericLiteral,\n value: parseFloat(number),\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n // ECMA-262 11.8.4 String Literals\n\n function scanStringLiteral() {\n var str = '', quote, start, ch, unescaped, octToDec, octal = false;\n\n quote = source[index];\n assert((quote === '\\'' || quote === '\"'),\n 'String literal must starts with a quote');\n\n start = index;\n ++index;\n\n while (index < length) {\n ch = source[index++];\n\n if (ch === quote) {\n quote = '';\n break;\n } else if (ch === '\\\\') {\n ch = source[index++];\n if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'u':\n case 'x':\n if (source[index] === '{') {\n ++index;\n str += scanUnicodeCodePointEscape();\n } else {\n unescaped = scanHexEscape(ch);\n if (!unescaped) {\n throw throwUnexpectedToken();\n }\n str += unescaped;\n }\n break;\n case 'n':\n str += '\\n';\n break;\n case 'r':\n str += '\\r';\n break;\n case 't':\n str += '\\t';\n break;\n case 'b':\n str += '\\b';\n break;\n case 'f':\n str += '\\f';\n break;\n case 'v':\n str += '\\x0B';\n break;\n case '8':\n case '9':\n str += ch;\n tolerateUnexpectedToken();\n break;\n\n default:\n if (isOctalDigit(ch)) {\n octToDec = octalToDecimal(ch);\n\n octal = octToDec.octal || octal;\n str += String.fromCharCode(octToDec.code);\n } else {\n str += ch;\n }\n break;\n }\n } else {\n ++lineNumber;\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n lineStart = index;\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n break;\n } else {\n str += ch;\n }\n }\n\n if (quote !== '') {\n throwUnexpectedToken();\n }\n\n return {\n type: Token.StringLiteral,\n value: str,\n octal: octal,\n lineNumber: startLineNumber,\n lineStart: startLineStart,\n start: start,\n end: index\n };\n }\n\n // ECMA-262 11.8.6 Template Literal Lexical Components\n\n function scanTemplate() {\n var cooked = '', ch, start, rawOffset, terminated, head, tail, restore, unescaped;\n\n terminated = false;\n tail = false;\n start = index;\n head = (source[index] === '`');\n rawOffset = 2;\n\n ++index;\n\n while (index < length) {\n ch = source[index++];\n if (ch === '`') {\n rawOffset = 1;\n tail = true;\n terminated = true;\n break;\n } else if (ch === '$') {\n if (source[index] === '{') {\n state.curlyStack.push('${');\n ++index;\n terminated = true;\n break;\n }\n cooked += ch;\n } else if (ch === '\\\\') {\n ch = source[index++];\n if (!isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'n':\n cooked += '\\n';\n break;\n case 'r':\n cooked += '\\r';\n break;\n case 't':\n cooked += '\\t';\n break;\n case 'u':\n case 'x':\n if (source[index] === '{') {\n ++index;\n cooked += scanUnicodeCodePointEscape();\n } else {\n restore = index;\n unescaped = scanHexEscape(ch);\n if (unescaped) {\n cooked += unescaped;\n } else {\n index = restore;\n cooked += ch;\n }\n }\n break;\n case 'b':\n cooked += '\\b';\n break;\n case 'f':\n cooked += '\\f';\n break;\n case 'v':\n cooked += '\\v';\n break;\n\n default:\n if (ch === '0') {\n if (isDecimalDigit(source.charCodeAt(index))) {\n // Illegal: \\01 \\02 and so on\n throwError(Messages.TemplateOctalLiteral);\n }\n cooked += '\\0';\n } else if (isOctalDigit(ch)) {\n // Illegal: \\1 \\2\n throwError(Messages.TemplateOctalLiteral);\n } else {\n cooked += ch;\n }\n break;\n }\n } else {\n ++lineNumber;\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n lineStart = index;\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n ++lineNumber;\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n lineStart = index;\n cooked += '\\n';\n } else {\n cooked += ch;\n }\n }\n\n if (!terminated) {\n throwUnexpectedToken();\n }\n\n if (!head) {\n state.curlyStack.pop();\n }\n\n return {\n type: Token.Template,\n value: {\n cooked: cooked,\n raw: source.slice(start + 1, index - rawOffset)\n },\n head: head,\n tail: tail,\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n // ECMA-262 11.8.5 Regular Expression Literals\n\n function testRegExp(pattern, flags) {\n // The BMP character to use as a replacement for astral symbols when\n // translating an ES6 \"u\"-flagged pattern to an ES5-compatible\n // approximation.\n // Note: replacing with '\\uFFFF' enables false positives in unlikely\n // scenarios. For example, `[\\u{1044f}-\\u{10440}]` is an invalid\n // pattern that would not be detected by this substitution.\n var astralSubstitute = '\\uFFFF',\n tmp = pattern;\n\n if (flags.indexOf('u') >= 0) {\n tmp = tmp\n // Replace every Unicode escape sequence with the equivalent\n // BMP character or a constant ASCII code point in the case of\n // astral symbols. (See the above note on `astralSubstitute`\n // for more information.)\n .replace(/\\\\u\\{([0-9a-fA-F]+)\\}|\\\\u([a-fA-F0-9]{4})/g, function ($0, $1, $2) {\n var codePoint = parseInt($1 || $2, 16);\n if (codePoint > 0x10FFFF) {\n throwUnexpectedToken(null, Messages.InvalidRegExp);\n }\n if (codePoint <= 0xFFFF) {\n return String.fromCharCode(codePoint);\n }\n return astralSubstitute;\n })\n // Replace each paired surrogate with a single ASCII symbol to\n // avoid throwing on regular expressions that are only valid in\n // combination with the \"u\" flag.\n .replace(\n /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,\n astralSubstitute\n );\n }\n\n // First, detect invalid regular expressions.\n try {\n RegExp(tmp);\n } catch (e) {\n throwUnexpectedToken(null, Messages.InvalidRegExp);\n }\n\n // Return a regular expression object for this pattern-flag pair, or\n // `null` in case the current environment doesn't support the flags it\n // uses.\n try {\n return new RegExp(pattern, flags);\n } catch (exception) {\n return null;\n }\n }\n\n function scanRegExpBody() {\n var ch, str, classMarker, terminated, body;\n\n ch = source[index];\n assert(ch === '/', 'Regular expression literal must start with a slash');\n str = source[index++];\n\n classMarker = false;\n terminated = false;\n while (index < length) {\n ch = source[index++];\n str += ch;\n if (ch === '\\\\') {\n ch = source[index++];\n // ECMA-262 7.8.5\n if (isLineTerminator(ch.charCodeAt(0))) {\n throwUnexpectedToken(null, Messages.UnterminatedRegExp);\n }\n str += ch;\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n throwUnexpectedToken(null, Messages.UnterminatedRegExp);\n } else if (classMarker) {\n if (ch === ']') {\n classMarker = false;\n }\n } else {\n if (ch === '/') {\n terminated = true;\n break;\n } else if (ch === '[') {\n classMarker = true;\n }\n }\n }\n\n if (!terminated) {\n throwUnexpectedToken(null, Messages.UnterminatedRegExp);\n }\n\n // Exclude leading and trailing slash.\n body = str.substr(1, str.length - 2);\n return {\n value: body,\n literal: str\n };\n }\n\n function scanRegExpFlags() {\n var ch, str, flags, restore;\n\n str = '';\n flags = '';\n while (index < length) {\n ch = source[index];\n if (!isIdentifierPart(ch.charCodeAt(0))) {\n break;\n }\n\n ++index;\n if (ch === '\\\\' && index < length) {\n ch = source[index];\n if (ch === 'u') {\n ++index;\n restore = index;\n ch = scanHexEscape('u');\n if (ch) {\n flags += ch;\n for (str += '\\\\u'; restore < index; ++restore) {\n str += source[restore];\n }\n } else {\n index = restore;\n flags += 'u';\n str += '\\\\u';\n }\n tolerateUnexpectedToken();\n } else {\n str += '\\\\';\n tolerateUnexpectedToken();\n }\n } else {\n flags += ch;\n str += ch;\n }\n }\n\n return {\n value: flags,\n literal: str\n };\n }\n\n function scanRegExp() {\n var start, body, flags, value;\n scanning = true;\n\n lookahead = null;\n skipComment();\n start = index;\n\n body = scanRegExpBody();\n flags = scanRegExpFlags();\n value = testRegExp(body.value, flags.value);\n scanning = false;\n if (extra.tokenize) {\n return {\n type: Token.RegularExpression,\n value: value,\n regex: {\n pattern: body.value,\n flags: flags.value\n },\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n return {\n literal: body.literal + flags.literal,\n value: value,\n regex: {\n pattern: body.value,\n flags: flags.value\n },\n start: start,\n end: index\n };\n }\n\n function collectRegex() {\n var pos, loc, regex, token;\n\n skipComment();\n\n pos = index;\n loc = {\n start: {\n line: lineNumber,\n column: index - lineStart\n }\n };\n\n regex = scanRegExp();\n\n loc.end = {\n line: lineNumber,\n column: index - lineStart\n };\n\n /* istanbul ignore next */\n if (!extra.tokenize) {\n // Pop the previous token, which is likely '/' or '/='\n if (extra.tokens.length > 0) {\n token = extra.tokens[extra.tokens.length - 1];\n if (token.range[0] === pos && token.type === 'Punctuator') {\n if (token.value === '/' || token.value === '/=') {\n extra.tokens.pop();\n }\n }\n }\n\n extra.tokens.push({\n type: 'RegularExpression',\n value: regex.literal,\n regex: regex.regex,\n range: [pos, index],\n loc: loc\n });\n }\n\n return regex;\n }\n\n function isIdentifierName(token) {\n return token.type === Token.Identifier ||\n token.type === Token.Keyword ||\n token.type === Token.BooleanLiteral ||\n token.type === Token.NullLiteral;\n }\n\n // Using the following algorithm:\n // https://github.com/mozilla/sweet.js/wiki/design\n\n function advanceSlash() {\n var regex, previous, check;\n\n function testKeyword(value) {\n return value && (value.length > 1) && (value[0] >= 'a') && (value[0] <= 'z');\n }\n\n previous = extra.tokenValues[extra.tokens.length - 1];\n regex = (previous !== null);\n\n switch (previous) {\n case 'this':\n case ']':\n regex = false;\n break;\n\n case ')':\n check = extra.tokenValues[extra.openParenToken - 1];\n regex = (check === 'if' || check === 'while' || check === 'for' || check === 'with');\n break;\n\n case '}':\n // Dividing a function by anything makes little sense,\n // but we have to check for that.\n regex = false;\n if (testKeyword(extra.tokenValues[extra.openCurlyToken - 3])) {\n // Anonymous function, e.g. function(){} /42\n check = extra.tokenValues[extra.openCurlyToken - 4];\n regex = check ? (FnExprTokens.indexOf(check) < 0) : false;\n } else if (testKeyword(extra.tokenValues[extra.openCurlyToken - 4])) {\n // Named function, e.g. function f(){} /42/\n check = extra.tokenValues[extra.openCurlyToken - 5];\n regex = check ? (FnExprTokens.indexOf(check) < 0) : true;\n }\n }\n\n return regex ? collectRegex() : scanPunctuator();\n }\n\n function advance() {\n var cp, token;\n\n if (index >= length) {\n return {\n type: Token.EOF,\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: index,\n end: index\n };\n }\n\n cp = source.charCodeAt(index);\n\n if (isIdentifierStart(cp)) {\n token = scanIdentifier();\n if (strict && isStrictModeReservedWord(token.value)) {\n token.type = Token.Keyword;\n }\n return token;\n }\n\n // Very common: ( and ) and ;\n if (cp === 0x28 || cp === 0x29 || cp === 0x3B) {\n return scanPunctuator();\n }\n\n // String literal starts with single quote (U+0027) or double quote (U+0022).\n if (cp === 0x27 || cp === 0x22) {\n return scanStringLiteral();\n }\n\n // Dot (.) U+002E can also start a floating-point number, hence the need\n // to check the next character.\n if (cp === 0x2E) {\n if (isDecimalDigit(source.charCodeAt(index + 1))) {\n return scanNumericLiteral();\n }\n return scanPunctuator();\n }\n\n if (isDecimalDigit(cp)) {\n return scanNumericLiteral();\n }\n\n // Slash (/) U+002F can also start a regex.\n if (extra.tokenize && cp === 0x2F) {\n return advanceSlash();\n }\n\n // Template literals start with ` (U+0060) for template head\n // or } (U+007D) for template middle or template tail.\n if (cp === 0x60 || (cp === 0x7D && state.curlyStack[state.curlyStack.length - 1] === '${')) {\n return scanTemplate();\n }\n\n // Possible identifier start in a surrogate pair.\n if (cp >= 0xD800 && cp < 0xDFFF) {\n cp = codePointAt(index);\n if (isIdentifierStart(cp)) {\n return scanIdentifier();\n }\n }\n\n return scanPunctuator();\n }\n\n function collectToken() {\n var loc, token, value, entry;\n\n loc = {\n start: {\n line: lineNumber,\n column: index - lineStart\n }\n };\n\n token = advance();\n loc.end = {\n line: lineNumber,\n column: index - lineStart\n };\n\n if (token.type !== Token.EOF) {\n value = source.slice(token.start, token.end);\n entry = {\n type: TokenName[token.type],\n value: value,\n range: [token.start, token.end],\n loc: loc\n };\n if (token.regex) {\n entry.regex = {\n pattern: token.regex.pattern,\n flags: token.regex.flags\n };\n }\n if (extra.tokenValues) {\n extra.tokenValues.push((entry.type === 'Punctuator' || entry.type === 'Keyword') ? entry.value : null);\n }\n if (extra.tokenize) {\n if (!extra.range) {\n delete entry.range;\n }\n if (!extra.loc) {\n delete entry.loc;\n }\n if (extra.delegate) {\n entry = extra.delegate(entry);\n }\n }\n extra.tokens.push(entry);\n }\n\n return token;\n }\n\n function lex() {\n var token;\n scanning = true;\n\n lastIndex = index;\n lastLineNumber = lineNumber;\n lastLineStart = lineStart;\n\n skipComment();\n\n token = lookahead;\n\n startIndex = index;\n startLineNumber = lineNumber;\n startLineStart = lineStart;\n\n lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance();\n scanning = false;\n return token;\n }\n\n function peek() {\n scanning = true;\n\n skipComment();\n\n lastIndex = index;\n lastLineNumber = lineNumber;\n lastLineStart = lineStart;\n\n startIndex = index;\n startLineNumber = lineNumber;\n startLineStart = lineStart;\n\n lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance();\n scanning = false;\n }\n\n function Position() {\n this.line = startLineNumber;\n this.column = startIndex - startLineStart;\n }\n\n function SourceLocation() {\n this.start = new Position();\n this.end = null;\n }\n\n function WrappingSourceLocation(startToken) {\n this.start = {\n line: startToken.lineNumber,\n column: startToken.start - startToken.lineStart\n };\n this.end = null;\n }\n\n function Node() {\n if (extra.range) {\n this.range = [startIndex, 0];\n }\n if (extra.loc) {\n this.loc = new SourceLocation();\n }\n }\n\n function WrappingNode(startToken) {\n if (extra.range) {\n this.range = [startToken.start, 0];\n }\n if (extra.loc) {\n this.loc = new WrappingSourceLocation(startToken);\n }\n }\n\n WrappingNode.prototype = Node.prototype = {\n\n processComment: function () {\n var lastChild,\n innerComments,\n leadingComments,\n trailingComments,\n bottomRight = extra.bottomRightStack,\n i,\n comment,\n last = bottomRight[bottomRight.length - 1];\n\n if (this.type === Syntax.Program) {\n if (this.body.length > 0) {\n return;\n }\n }\n /**\n * patch innnerComments for properties empty block\n * `function a() {/** comments **\\/}`\n */\n\n if (this.type === Syntax.BlockStatement && this.body.length === 0) {\n innerComments = [];\n for (i = extra.leadingComments.length - 1; i >= 0; --i) {\n comment = extra.leadingComments[i];\n if (this.range[1] >= comment.range[1]) {\n innerComments.unshift(comment);\n extra.leadingComments.splice(i, 1);\n extra.trailingComments.splice(i, 1);\n }\n }\n if (innerComments.length) {\n this.innerComments = innerComments;\n //bottomRight.push(this);\n return;\n }\n }\n\n if (extra.trailingComments.length > 0) {\n trailingComments = [];\n for (i = extra.trailingComments.length - 1; i >= 0; --i) {\n comment = extra.trailingComments[i];\n if (comment.range[0] >= this.range[1]) {\n trailingComments.unshift(comment);\n extra.trailingComments.splice(i, 1);\n }\n }\n extra.trailingComments = [];\n } else {\n if (last && last.trailingComments && last.trailingComments[0].range[0] >= this.range[1]) {\n trailingComments = last.trailingComments;\n delete last.trailingComments;\n }\n }\n\n // Eating the stack.\n while (last && last.range[0] >= this.range[0]) {\n lastChild = bottomRight.pop();\n last = bottomRight[bottomRight.length - 1];\n }\n\n if (lastChild) {\n if (lastChild.leadingComments) {\n leadingComments = [];\n for (i = lastChild.leadingComments.length - 1; i >= 0; --i) {\n comment = lastChild.leadingComments[i];\n if (comment.range[1] <= this.range[0]) {\n leadingComments.unshift(comment);\n lastChild.leadingComments.splice(i, 1);\n }\n }\n\n if (!lastChild.leadingComments.length) {\n lastChild.leadingComments = undefined;\n }\n }\n } else if (extra.leadingComments.length > 0) {\n leadingComments = [];\n for (i = extra.leadingComments.length - 1; i >= 0; --i) {\n comment = extra.leadingComments[i];\n if (comment.range[1] <= this.range[0]) {\n leadingComments.unshift(comment);\n extra.leadingComments.splice(i, 1);\n }\n }\n }\n\n\n if (leadingComments && leadingComments.length > 0) {\n this.leadingComments = leadingComments;\n }\n if (trailingComments && trailingComments.length > 0) {\n this.trailingComments = trailingComments;\n }\n\n bottomRight.push(this);\n },\n\n finish: function () {\n if (extra.range) {\n this.range[1] = lastIndex;\n }\n if (extra.loc) {\n this.loc.end = {\n line: lastLineNumber,\n column: lastIndex - lastLineStart\n };\n if (extra.source) {\n this.loc.source = extra.source;\n }\n }\n\n if (extra.attachComment) {\n this.processComment();\n }\n },\n\n finishArrayExpression: function (elements) {\n this.type = Syntax.ArrayExpression;\n this.elements = elements;\n this.finish();\n return this;\n },\n\n finishArrayPattern: function (elements) {\n this.type = Syntax.ArrayPattern;\n this.elements = elements;\n this.finish();\n return this;\n },\n\n finishArrowFunctionExpression: function (params, defaults, body, expression) {\n this.type = Syntax.ArrowFunctionExpression;\n this.id = null;\n this.params = params;\n this.defaults = defaults;\n this.body = body;\n this.generator = false;\n this.expression = expression;\n this.finish();\n return this;\n },\n\n finishAssignmentExpression: function (operator, left, right) {\n this.type = Syntax.AssignmentExpression;\n this.operator = operator;\n this.left = left;\n this.right = right;\n this.finish();\n return this;\n },\n\n finishAssignmentPattern: function (left, right) {\n this.type = Syntax.AssignmentPattern;\n this.left = left;\n this.right = right;\n this.finish();\n return this;\n },\n\n finishBinaryExpression: function (operator, left, right) {\n this.type = (operator === '||' || operator === '&&') ? Syntax.LogicalExpression : Syntax.BinaryExpression;\n this.operator = operator;\n this.left = left;\n this.right = right;\n this.finish();\n return this;\n },\n\n finishBlockStatement: function (body) {\n this.type = Syntax.BlockStatement;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishBreakStatement: function (label) {\n this.type = Syntax.BreakStatement;\n this.label = label;\n this.finish();\n return this;\n },\n\n finishCallExpression: function (callee, args) {\n this.type = Syntax.CallExpression;\n this.callee = callee;\n this.arguments = args;\n this.finish();\n return this;\n },\n\n finishCatchClause: function (param, body) {\n this.type = Syntax.CatchClause;\n this.param = param;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishClassBody: function (body) {\n this.type = Syntax.ClassBody;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishClassDeclaration: function (id, superClass, body) {\n this.type = Syntax.ClassDeclaration;\n this.id = id;\n this.superClass = superClass;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishClassExpression: function (id, superClass, body) {\n this.type = Syntax.ClassExpression;\n this.id = id;\n this.superClass = superClass;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishConditionalExpression: function (test, consequent, alternate) {\n this.type = Syntax.ConditionalExpression;\n this.test = test;\n this.consequent = consequent;\n this.alternate = alternate;\n this.finish();\n return this;\n },\n\n finishContinueStatement: function (label) {\n this.type = Syntax.ContinueStatement;\n this.label = label;\n this.finish();\n return this;\n },\n\n finishDebuggerStatement: function () {\n this.type = Syntax.DebuggerStatement;\n this.finish();\n return this;\n },\n\n finishDoWhileStatement: function (body, test) {\n this.type = Syntax.DoWhileStatement;\n this.body = body;\n this.test = test;\n this.finish();\n return this;\n },\n\n finishEmptyStatement: function () {\n this.type = Syntax.EmptyStatement;\n this.finish();\n return this;\n },\n\n finishExpressionStatement: function (expression) {\n this.type = Syntax.ExpressionStatement;\n this.expression = expression;\n this.finish();\n return this;\n },\n\n finishForStatement: function (init, test, update, body) {\n this.type = Syntax.ForStatement;\n this.init = init;\n this.test = test;\n this.update = update;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishForOfStatement: function (left, right, body) {\n this.type = Syntax.ForOfStatement;\n this.left = left;\n this.right = right;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishForInStatement: function (left, right, body) {\n this.type = Syntax.ForInStatement;\n this.left = left;\n this.right = right;\n this.body = body;\n this.each = false;\n this.finish();\n return this;\n },\n\n finishFunctionDeclaration: function (id, params, defaults, body, generator) {\n this.type = Syntax.FunctionDeclaration;\n this.id = id;\n this.params = params;\n this.defaults = defaults;\n this.body = body;\n this.generator = generator;\n this.expression = false;\n this.finish();\n return this;\n },\n\n finishFunctionExpression: function (id, params, defaults, body, generator) {\n this.type = Syntax.FunctionExpression;\n this.id = id;\n this.params = params;\n this.defaults = defaults;\n this.body = body;\n this.generator = generator;\n this.expression = false;\n this.finish();\n return this;\n },\n\n finishIdentifier: function (name) {\n this.type = Syntax.Identifier;\n this.name = name;\n this.finish();\n return this;\n },\n\n finishIfStatement: function (test, consequent, alternate) {\n this.type = Syntax.IfStatement;\n this.test = test;\n this.consequent = consequent;\n this.alternate = alternate;\n this.finish();\n return this;\n },\n\n finishLabeledStatement: function (label, body) {\n this.type = Syntax.LabeledStatement;\n this.label = label;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishLiteral: function (token) {\n this.type = Syntax.Literal;\n this.value = token.value;\n this.raw = source.slice(token.start, token.end);\n if (token.regex) {\n this.regex = token.regex;\n }\n this.finish();\n return this;\n },\n\n finishMemberExpression: function (accessor, object, property) {\n this.type = Syntax.MemberExpression;\n this.computed = accessor === '[';\n this.object = object;\n this.property = property;\n this.finish();\n return this;\n },\n\n finishMetaProperty: function (meta, property) {\n this.type = Syntax.MetaProperty;\n this.meta = meta;\n this.property = property;\n this.finish();\n return this;\n },\n\n finishNewExpression: function (callee, args) {\n this.type = Syntax.NewExpression;\n this.callee = callee;\n this.arguments = args;\n this.finish();\n return this;\n },\n\n finishObjectExpression: function (properties) {\n this.type = Syntax.ObjectExpression;\n this.properties = properties;\n this.finish();\n return this;\n },\n\n finishObjectPattern: function (properties) {\n this.type = Syntax.ObjectPattern;\n this.properties = properties;\n this.finish();\n return this;\n },\n\n finishPostfixExpression: function (operator, argument) {\n this.type = Syntax.UpdateExpression;\n this.operator = operator;\n this.argument = argument;\n this.prefix = false;\n this.finish();\n return this;\n },\n\n finishProgram: function (body, sourceType) {\n this.type = Syntax.Program;\n this.body = body;\n this.sourceType = sourceType;\n this.finish();\n return this;\n },\n\n finishProperty: function (kind, key, computed, value, method, shorthand) {\n this.type = Syntax.Property;\n this.key = key;\n this.computed = computed;\n this.value = value;\n this.kind = kind;\n this.method = method;\n this.shorthand = shorthand;\n this.finish();\n return this;\n },\n\n finishRestElement: function (argument) {\n this.type = Syntax.RestElement;\n this.argument = argument;\n this.finish();\n return this;\n },\n\n finishReturnStatement: function (argument) {\n this.type = Syntax.ReturnStatement;\n this.argument = argument;\n this.finish();\n return this;\n },\n\n finishSequenceExpression: function (expressions) {\n this.type = Syntax.SequenceExpression;\n this.expressions = expressions;\n this.finish();\n return this;\n },\n\n finishSpreadElement: function (argument) {\n this.type = Syntax.SpreadElement;\n this.argument = argument;\n this.finish();\n return this;\n },\n\n finishSwitchCase: function (test, consequent) {\n this.type = Syntax.SwitchCase;\n this.test = test;\n this.consequent = consequent;\n this.finish();\n return this;\n },\n\n finishSuper: function () {\n this.type = Syntax.Super;\n this.finish();\n return this;\n },\n\n finishSwitchStatement: function (discriminant, cases) {\n this.type = Syntax.SwitchStatement;\n this.discriminant = discriminant;\n this.cases = cases;\n this.finish();\n return this;\n },\n\n finishTaggedTemplateExpression: function (tag, quasi) {\n this.type = Syntax.TaggedTemplateExpression;\n this.tag = tag;\n this.quasi = quasi;\n this.finish();\n return this;\n },\n\n finishTemplateElement: function (value, tail) {\n this.type = Syntax.TemplateElement;\n this.value = value;\n this.tail = tail;\n this.finish();\n return this;\n },\n\n finishTemplateLiteral: function (quasis, expressions) {\n this.type = Syntax.TemplateLiteral;\n this.quasis = quasis;\n this.expressions = expressions;\n this.finish();\n return this;\n },\n\n finishThisExpression: function () {\n this.type = Syntax.ThisExpression;\n this.finish();\n return this;\n },\n\n finishThrowStatement: function (argument) {\n this.type = Syntax.ThrowStatement;\n this.argument = argument;\n this.finish();\n return this;\n },\n\n finishTryStatement: function (block, handler, finalizer) {\n this.type = Syntax.TryStatement;\n this.block = block;\n this.guardedHandlers = [];\n this.handlers = handler ? [handler] : [];\n this.handler = handler;\n this.finalizer = finalizer;\n this.finish();\n return this;\n },\n\n finishUnaryExpression: function (operator, argument) {\n this.type = (operator === '++' || operator === '--') ? Syntax.UpdateExpression : Syntax.UnaryExpression;\n this.operator = operator;\n this.argument = argument;\n this.prefix = true;\n this.finish();\n return this;\n },\n\n finishVariableDeclaration: function (declarations) {\n this.type = Syntax.VariableDeclaration;\n this.declarations = declarations;\n this.kind = 'var';\n this.finish();\n return this;\n },\n\n finishLexicalDeclaration: function (declarations, kind) {\n this.type = Syntax.VariableDeclaration;\n this.declarations = declarations;\n this.kind = kind;\n this.finish();\n return this;\n },\n\n finishVariableDeclarator: function (id, init) {\n this.type = Syntax.VariableDeclarator;\n this.id = id;\n this.init = init;\n this.finish();\n return this;\n },\n\n finishWhileStatement: function (test, body) {\n this.type = Syntax.WhileStatement;\n this.test = test;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishWithStatement: function (object, body) {\n this.type = Syntax.WithStatement;\n this.object = object;\n this.body = body;\n this.finish();\n return this;\n },\n\n finishExportSpecifier: function (local, exported) {\n this.type = Syntax.ExportSpecifier;\n this.exported = exported || local;\n this.local = local;\n this.finish();\n return this;\n },\n\n finishImportDefaultSpecifier: function (local) {\n this.type = Syntax.ImportDefaultSpecifier;\n this.local = local;\n this.finish();\n return this;\n },\n\n finishImportNamespaceSpecifier: function (local) {\n this.type = Syntax.ImportNamespaceSpecifier;\n this.local = local;\n this.finish();\n return this;\n },\n\n finishExportNamedDeclaration: function (declaration, specifiers, src) {\n this.type = Syntax.ExportNamedDeclaration;\n this.declaration = declaration;\n this.specifiers = specifiers;\n this.source = src;\n this.finish();\n return this;\n },\n\n finishExportDefaultDeclaration: function (declaration) {\n this.type = Syntax.ExportDefaultDeclaration;\n this.declaration = declaration;\n this.finish();\n return this;\n },\n\n finishExportAllDeclaration: function (src) {\n this.type = Syntax.ExportAllDeclaration;\n this.source = src;\n this.finish();\n return this;\n },\n\n finishImportSpecifier: function (local, imported) {\n this.type = Syntax.ImportSpecifier;\n this.local = local || imported;\n this.imported = imported;\n this.finish();\n return this;\n },\n\n finishImportDeclaration: function (specifiers, src) {\n this.type = Syntax.ImportDeclaration;\n this.specifiers = specifiers;\n this.source = src;\n this.finish();\n return this;\n },\n\n finishYieldExpression: function (argument, delegate) {\n this.type = Syntax.YieldExpression;\n this.argument = argument;\n this.delegate = delegate;\n this.finish();\n return this;\n }\n };\n\n\n function recordError(error) {\n var e, existing;\n\n for (e = 0; e < extra.errors.length; e++) {\n existing = extra.errors[e];\n // Prevent duplicated error.\n /* istanbul ignore next */\n if (existing.index === error.index && existing.message === error.message) {\n return;\n }\n }\n\n extra.errors.push(error);\n }\n\n function constructError(msg, column) {\n var error = new Error(msg);\n try {\n throw error;\n } catch (base) {\n /* istanbul ignore else */\n if (Object.create && Object.defineProperty) {\n error = Object.create(base);\n Object.defineProperty(error, 'column', { value: column });\n }\n } finally {\n return error;\n }\n }\n\n function createError(line, pos, description) {\n var msg, column, error;\n\n msg = 'Line ' + line + ': ' + description;\n column = pos - (scanning ? lineStart : lastLineStart) + 1;\n error = constructError(msg, column);\n error.lineNumber = line;\n error.description = description;\n error.index = pos;\n return error;\n }\n\n // Throw an exception\n\n function throwError(messageFormat) {\n var args, msg;\n\n args = Array.prototype.slice.call(arguments, 1);\n msg = messageFormat.replace(/%(\\d)/g,\n function (whole, idx) {\n assert(idx < args.length, 'Message reference must be in range');\n return args[idx];\n }\n );\n\n throw createError(lastLineNumber, lastIndex, msg);\n }\n\n function tolerateError(messageFormat) {\n var args, msg, error;\n\n args = Array.prototype.slice.call(arguments, 1);\n /* istanbul ignore next */\n msg = messageFormat.replace(/%(\\d)/g,\n function (whole, idx) {\n assert(idx < args.length, 'Message reference must be in range');\n return args[idx];\n }\n );\n\n error = createError(lineNumber, lastIndex, msg);\n if (extra.errors) {\n recordError(error);\n } else {\n throw error;\n }\n }\n\n // Throw an exception because of the token.\n\n function unexpectedTokenError(token, message) {\n var value, msg = message || Messages.UnexpectedToken;\n\n if (token) {\n if (!message) {\n msg = (token.type === Token.EOF) ? Messages.UnexpectedEOS :\n (token.type === Token.Identifier) ? Messages.UnexpectedIdentifier :\n (token.type === Token.NumericLiteral) ? Messages.UnexpectedNumber :\n (token.type === Token.StringLiteral) ? Messages.UnexpectedString :\n (token.type === Token.Template) ? Messages.UnexpectedTemplate :\n Messages.UnexpectedToken;\n\n if (token.type === Token.Keyword) {\n if (isFutureReservedWord(token.value)) {\n msg = Messages.UnexpectedReserved;\n } else if (strict && isStrictModeReservedWord(token.value)) {\n msg = Messages.StrictReservedWord;\n }\n }\n }\n\n value = (token.type === Token.Template) ? token.value.raw : token.value;\n } else {\n value = 'ILLEGAL';\n }\n\n msg = msg.replace('%0', value);\n\n return (token && typeof token.lineNumber === 'number') ?\n createError(token.lineNumber, token.start, msg) :\n createError(scanning ? lineNumber : lastLineNumber, scanning ? index : lastIndex, msg);\n }\n\n function throwUnexpectedToken(token, message) {\n throw unexpectedTokenError(token, message);\n }\n\n function tolerateUnexpectedToken(token, message) {\n var error = unexpectedTokenError(token, message);\n if (extra.errors) {\n recordError(error);\n } else {\n throw error;\n }\n }\n\n // Expect the next token to match the specified punctuator.\n // If not, an exception will be thrown.\n\n function expect(value) {\n var token = lex();\n if (token.type !== Token.Punctuator || token.value !== value) {\n throwUnexpectedToken(token);\n }\n }\n\n /**\n * @name expectCommaSeparator\n * @description Quietly expect a comma when in tolerant mode, otherwise delegates\n * to expect(value)\n * @since 2.0\n */\n function expectCommaSeparator() {\n var token;\n\n if (extra.errors) {\n token = lookahead;\n if (token.type === Token.Punctuator && token.value === ',') {\n lex();\n } else if (token.type === Token.Punctuator && token.value === ';') {\n lex();\n tolerateUnexpectedToken(token);\n } else {\n tolerateUnexpectedToken(token, Messages.UnexpectedToken);\n }\n } else {\n expect(',');\n }\n }\n\n // Expect the next token to match the specified keyword.\n // If not, an exception will be thrown.\n\n function expectKeyword(keyword) {\n var token = lex();\n if (token.type !== Token.Keyword || token.value !== keyword) {\n throwUnexpectedToken(token);\n }\n }\n\n // Return true if the next token matches the specified punctuator.\n\n function match(value) {\n return lookahead.type === Token.Punctuator && lookahead.value === value;\n }\n\n // Return true if the next token matches the specified keyword\n\n function matchKeyword(keyword) {\n return lookahead.type === Token.Keyword && lookahead.value === keyword;\n }\n\n // Return true if the next token matches the specified contextual keyword\n // (where an identifier is sometimes a keyword depending on the context)\n\n function matchContextualKeyword(keyword) {\n return lookahead.type === Token.Identifier && lookahead.value === keyword;\n }\n\n // Return true if the next token is an assignment operator\n\n function matchAssign() {\n var op;\n\n if (lookahead.type !== Token.Punctuator) {\n return false;\n }\n op = lookahead.value;\n return op === '=' ||\n op === '*=' ||\n op === '/=' ||\n op === '%=' ||\n op === '+=' ||\n op === '-=' ||\n op === '<<=' ||\n op === '>>=' ||\n op === '>>>=' ||\n op === '&=' ||\n op === '^=' ||\n op === '|=';\n }\n\n function consumeSemicolon() {\n // Catch the very common case first: immediately a semicolon (U+003B).\n if (source.charCodeAt(startIndex) === 0x3B || match(';')) {\n lex();\n return;\n }\n\n if (hasLineTerminator) {\n return;\n }\n\n // FIXME(ikarienator): this is seemingly an issue in the previous location info convention.\n lastIndex = startIndex;\n lastLineNumber = startLineNumber;\n lastLineStart = startLineStart;\n\n if (lookahead.type !== Token.EOF && !match('}')) {\n throwUnexpectedToken(lookahead);\n }\n }\n\n // Cover grammar support.\n //\n // When an assignment expression position starts with an left parenthesis, the determination of the type\n // of the syntax is to be deferred arbitrarily long until the end of the parentheses pair (plus a lookahead)\n // or the first comma. This situation also defers the determination of all the expressions nested in the pair.\n //\n // There are three productions that can be parsed in a parentheses pair that needs to be determined\n // after the outermost pair is closed. They are:\n //\n // 1. AssignmentExpression\n // 2. BindingElements\n // 3. AssignmentTargets\n //\n // In order to avoid exponential backtracking, we use two flags to denote if the production can be\n // binding element or assignment target.\n //\n // The three productions have the relationship:\n //\n // BindingElements ⊆ AssignmentTargets ⊆ AssignmentExpression\n //\n // with a single exception that CoverInitializedName when used directly in an Expression, generates\n // an early error. Therefore, we need the third state, firstCoverInitializedNameError, to track the\n // first usage of CoverInitializedName and report it when we reached the end of the parentheses pair.\n //\n // isolateCoverGrammar function runs the given parser function with a new cover grammar context, and it does not\n // effect the current flags. This means the production the parser parses is only used as an expression. Therefore\n // the CoverInitializedName check is conducted.\n //\n // inheritCoverGrammar function runs the given parse function with a new cover grammar context, and it propagates\n // the flags outside of the parser. This means the production the parser parses is used as a part of a potential\n // pattern. The CoverInitializedName check is deferred.\n function isolateCoverGrammar(parser) {\n var oldIsBindingElement = isBindingElement,\n oldIsAssignmentTarget = isAssignmentTarget,\n oldFirstCoverInitializedNameError = firstCoverInitializedNameError,\n result;\n isBindingElement = true;\n isAssignmentTarget = true;\n firstCoverInitializedNameError = null;\n result = parser();\n if (firstCoverInitializedNameError !== null) {\n throwUnexpectedToken(firstCoverInitializedNameError);\n }\n isBindingElement = oldIsBindingElement;\n isAssignmentTarget = oldIsAssignmentTarget;\n firstCoverInitializedNameError = oldFirstCoverInitializedNameError;\n return result;\n }\n\n function inheritCoverGrammar(parser) {\n var oldIsBindingElement = isBindingElement,\n oldIsAssignmentTarget = isAssignmentTarget,\n oldFirstCoverInitializedNameError = firstCoverInitializedNameError,\n result;\n isBindingElement = true;\n isAssignmentTarget = true;\n firstCoverInitializedNameError = null;\n result = parser();\n isBindingElement = isBindingElement && oldIsBindingElement;\n isAssignmentTarget = isAssignmentTarget && oldIsAssignmentTarget;\n firstCoverInitializedNameError = oldFirstCoverInitializedNameError || firstCoverInitializedNameError;\n return result;\n }\n\n // ECMA-262 13.3.3 Destructuring Binding Patterns\n\n function parseArrayPattern(params, kind) {\n var node = new Node(), elements = [], rest, restNode;\n expect('[');\n\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else {\n if (match('...')) {\n restNode = new Node();\n lex();\n params.push(lookahead);\n rest = parseVariableIdentifier(kind);\n elements.push(restNode.finishRestElement(rest));\n break;\n } else {\n elements.push(parsePatternWithDefault(params, kind));\n }\n if (!match(']')) {\n expect(',');\n }\n }\n\n }\n\n expect(']');\n\n return node.finishArrayPattern(elements);\n }\n\n function parsePropertyPattern(params, kind) {\n var node = new Node(), key, keyToken, computed = match('['), init;\n if (lookahead.type === Token.Identifier) {\n keyToken = lookahead;\n key = parseVariableIdentifier();\n if (match('=')) {\n params.push(keyToken);\n lex();\n init = parseAssignmentExpression();\n\n return node.finishProperty(\n 'init', key, false,\n new WrappingNode(keyToken).finishAssignmentPattern(key, init), false, false);\n } else if (!match(':')) {\n params.push(keyToken);\n return node.finishProperty('init', key, false, key, false, true);\n }\n } else {\n key = parseObjectPropertyKey();\n }\n expect(':');\n init = parsePatternWithDefault(params, kind);\n return node.finishProperty('init', key, computed, init, false, false);\n }\n\n function parseObjectPattern(params, kind) {\n var node = new Node(), properties = [];\n\n expect('{');\n\n while (!match('}')) {\n properties.push(parsePropertyPattern(params, kind));\n if (!match('}')) {\n expect(',');\n }\n }\n\n lex();\n\n return node.finishObjectPattern(properties);\n }\n\n function parsePattern(params, kind) {\n if (match('[')) {\n return parseArrayPattern(params, kind);\n } else if (match('{')) {\n return parseObjectPattern(params, kind);\n } else if (matchKeyword('let')) {\n if (kind === 'const' || kind === 'let') {\n tolerateUnexpectedToken(lookahead, Messages.UnexpectedToken);\n }\n }\n\n params.push(lookahead);\n return parseVariableIdentifier(kind);\n }\n\n function parsePatternWithDefault(params, kind) {\n var startToken = lookahead, pattern, previousAllowYield, right;\n pattern = parsePattern(params, kind);\n if (match('=')) {\n lex();\n previousAllowYield = state.allowYield;\n state.allowYield = true;\n right = isolateCoverGrammar(parseAssignmentExpression);\n state.allowYield = previousAllowYield;\n pattern = new WrappingNode(startToken).finishAssignmentPattern(pattern, right);\n }\n return pattern;\n }\n\n // ECMA-262 12.2.5 Array Initializer\n\n function parseArrayInitializer() {\n var elements = [], node = new Node(), restSpread;\n\n expect('[');\n\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else if (match('...')) {\n restSpread = new Node();\n lex();\n restSpread.finishSpreadElement(inheritCoverGrammar(parseAssignmentExpression));\n\n if (!match(']')) {\n isAssignmentTarget = isBindingElement = false;\n expect(',');\n }\n elements.push(restSpread);\n } else {\n elements.push(inheritCoverGrammar(parseAssignmentExpression));\n\n if (!match(']')) {\n expect(',');\n }\n }\n }\n\n lex();\n\n return node.finishArrayExpression(elements);\n }\n\n // ECMA-262 12.2.6 Object Initializer\n\n function parsePropertyFunction(node, paramInfo, isGenerator) {\n var previousStrict, body;\n\n isAssignmentTarget = isBindingElement = false;\n\n previousStrict = strict;\n body = isolateCoverGrammar(parseFunctionSourceElements);\n\n if (strict && paramInfo.firstRestricted) {\n tolerateUnexpectedToken(paramInfo.firstRestricted, paramInfo.message);\n }\n if (strict && paramInfo.stricted) {\n tolerateUnexpectedToken(paramInfo.stricted, paramInfo.message);\n }\n\n strict = previousStrict;\n return node.finishFunctionExpression(null, paramInfo.params, paramInfo.defaults, body, isGenerator);\n }\n\n function parsePropertyMethodFunction() {\n var params, method, node = new Node(),\n previousAllowYield = state.allowYield;\n\n state.allowYield = false;\n params = parseParams();\n state.allowYield = previousAllowYield;\n\n state.allowYield = false;\n method = parsePropertyFunction(node, params, false);\n state.allowYield = previousAllowYield;\n\n return method;\n }\n\n function parseObjectPropertyKey() {\n var token, node = new Node(), expr;\n\n token = lex();\n\n // Note: This function is called only from parseObjectProperty(), where\n // EOF and Punctuator tokens are already filtered out.\n\n switch (token.type) {\n case Token.StringLiteral:\n case Token.NumericLiteral:\n if (strict && token.octal) {\n tolerateUnexpectedToken(token, Messages.StrictOctalLiteral);\n }\n return node.finishLiteral(token);\n case Token.Identifier:\n case Token.BooleanLiteral:\n case Token.NullLiteral:\n case Token.Keyword:\n return node.finishIdentifier(token.value);\n case Token.Punctuator:\n if (token.value === '[') {\n expr = isolateCoverGrammar(parseAssignmentExpression);\n expect(']');\n return expr;\n }\n break;\n }\n throwUnexpectedToken(token);\n }\n\n function lookaheadPropertyName() {\n switch (lookahead.type) {\n case Token.Identifier:\n case Token.StringLiteral:\n case Token.BooleanLiteral:\n case Token.NullLiteral:\n case Token.NumericLiteral:\n case Token.Keyword:\n return true;\n case Token.Punctuator:\n return lookahead.value === '[';\n }\n return false;\n }\n\n // This function is to try to parse a MethodDefinition as defined in 14.3. But in the case of object literals,\n // it might be called at a position where there is in fact a short hand identifier pattern or a data property.\n // This can only be determined after we consumed up to the left parentheses.\n //\n // In order to avoid back tracking, it returns `null` if the position is not a MethodDefinition and the caller\n // is responsible to visit other options.\n function tryParseMethodDefinition(token, key, computed, node) {\n var value, options, methodNode, params,\n previousAllowYield = state.allowYield;\n\n if (token.type === Token.Identifier) {\n // check for `get` and `set`;\n\n if (token.value === 'get' && lookaheadPropertyName()) {\n computed = match('[');\n key = parseObjectPropertyKey();\n methodNode = new Node();\n expect('(');\n expect(')');\n\n state.allowYield = false;\n value = parsePropertyFunction(methodNode, {\n params: [],\n defaults: [],\n stricted: null,\n firstRestricted: null,\n message: null\n }, false);\n state.allowYield = previousAllowYield;\n\n return node.finishProperty('get', key, computed, value, false, false);\n } else if (token.value === 'set' && lookaheadPropertyName()) {\n computed = match('[');\n key = parseObjectPropertyKey();\n methodNode = new Node();\n expect('(');\n\n options = {\n params: [],\n defaultCount: 0,\n defaults: [],\n firstRestricted: null,\n paramSet: {}\n };\n if (match(')')) {\n tolerateUnexpectedToken(lookahead);\n } else {\n state.allowYield = false;\n parseParam(options);\n state.allowYield = previousAllowYield;\n if (options.defaultCount === 0) {\n options.defaults = [];\n }\n }\n expect(')');\n\n state.allowYield = false;\n value = parsePropertyFunction(methodNode, options, false);\n state.allowYield = previousAllowYield;\n\n return node.finishProperty('set', key, computed, value, false, false);\n }\n } else if (token.type === Token.Punctuator && token.value === '*' && lookaheadPropertyName()) {\n computed = match('[');\n key = parseObjectPropertyKey();\n methodNode = new Node();\n\n state.allowYield = true;\n params = parseParams();\n state.allowYield = previousAllowYield;\n\n state.allowYield = false;\n value = parsePropertyFunction(methodNode, params, true);\n state.allowYield = previousAllowYield;\n\n return node.finishProperty('init', key, computed, value, true, false);\n }\n\n if (key && match('(')) {\n value = parsePropertyMethodFunction();\n return node.finishProperty('init', key, computed, value, true, false);\n }\n\n // Not a MethodDefinition.\n return null;\n }\n\n function parseObjectProperty(hasProto) {\n var token = lookahead, node = new Node(), computed, key, maybeMethod, proto, value;\n\n computed = match('[');\n if (match('*')) {\n lex();\n } else {\n key = parseObjectPropertyKey();\n }\n maybeMethod = tryParseMethodDefinition(token, key, computed, node);\n if (maybeMethod) {\n return maybeMethod;\n }\n\n if (!key) {\n throwUnexpectedToken(lookahead);\n }\n\n // Check for duplicated __proto__\n if (!computed) {\n proto = (key.type === Syntax.Identifier && key.name === '__proto__') ||\n (key.type === Syntax.Literal && key.value === '__proto__');\n if (hasProto.value && proto) {\n tolerateError(Messages.DuplicateProtoProperty);\n }\n hasProto.value |= proto;\n }\n\n if (match(':')) {\n lex();\n value = inheritCoverGrammar(parseAssignmentExpression);\n return node.finishProperty('init', key, computed, value, false, false);\n }\n\n if (token.type === Token.Identifier) {\n if (match('=')) {\n firstCoverInitializedNameError = lookahead;\n lex();\n value = isolateCoverGrammar(parseAssignmentExpression);\n return node.finishProperty('init', key, computed,\n new WrappingNode(token).finishAssignmentPattern(key, value), false, true);\n }\n return node.finishProperty('init', key, computed, key, false, true);\n }\n\n throwUnexpectedToken(lookahead);\n }\n\n function parseObjectInitializer() {\n var properties = [], hasProto = {value: false}, node = new Node();\n\n expect('{');\n\n while (!match('}')) {\n properties.push(parseObjectProperty(hasProto));\n\n if (!match('}')) {\n expectCommaSeparator();\n }\n }\n\n expect('}');\n\n return node.finishObjectExpression(properties);\n }\n\n function reinterpretExpressionAsPattern(expr) {\n var i;\n switch (expr.type) {\n case Syntax.Identifier:\n case Syntax.MemberExpression:\n case Syntax.RestElement:\n case Syntax.AssignmentPattern:\n break;\n case Syntax.SpreadElement:\n expr.type = Syntax.RestElement;\n reinterpretExpressionAsPattern(expr.argument);\n break;\n case Syntax.ArrayExpression:\n expr.type = Syntax.ArrayPattern;\n for (i = 0; i < expr.elements.length; i++) {\n if (expr.elements[i] !== null) {\n reinterpretExpressionAsPattern(expr.elements[i]);\n }\n }\n break;\n case Syntax.ObjectExpression:\n expr.type = Syntax.ObjectPattern;\n for (i = 0; i < expr.properties.length; i++) {\n reinterpretExpressionAsPattern(expr.properties[i].value);\n }\n break;\n case Syntax.AssignmentExpression:\n expr.type = Syntax.AssignmentPattern;\n reinterpretExpressionAsPattern(expr.left);\n break;\n default:\n // Allow other node type for tolerant parsing.\n break;\n }\n }\n\n // ECMA-262 12.2.9 Template Literals\n\n function parseTemplateElement(option) {\n var node, token;\n\n if (lookahead.type !== Token.Template || (option.head && !lookahead.head)) {\n throwUnexpectedToken();\n }\n\n node = new Node();\n token = lex();\n\n return node.finishTemplateElement({ raw: token.value.raw, cooked: token.value.cooked }, token.tail);\n }\n\n function parseTemplateLiteral() {\n var quasi, quasis, expressions, node = new Node();\n\n quasi = parseTemplateElement({ head: true });\n quasis = [quasi];\n expressions = [];\n\n while (!quasi.tail) {\n expressions.push(parseExpression());\n quasi = parseTemplateElement({ head: false });\n quasis.push(quasi);\n }\n\n return node.finishTemplateLiteral(quasis, expressions);\n }\n\n // ECMA-262 12.2.10 The Grouping Operator\n\n function parseGroupExpression() {\n var expr, expressions, startToken, i, params = [];\n\n expect('(');\n\n if (match(')')) {\n lex();\n if (!match('=>')) {\n expect('=>');\n }\n return {\n type: PlaceHolders.ArrowParameterPlaceHolder,\n params: [],\n rawParams: []\n };\n }\n\n startToken = lookahead;\n if (match('...')) {\n expr = parseRestElement(params);\n expect(')');\n if (!match('=>')) {\n expect('=>');\n }\n return {\n type: PlaceHolders.ArrowParameterPlaceHolder,\n params: [expr]\n };\n }\n\n isBindingElement = true;\n expr = inheritCoverGrammar(parseAssignmentExpression);\n\n if (match(',')) {\n isAssignmentTarget = false;\n expressions = [expr];\n\n while (startIndex < length) {\n if (!match(',')) {\n break;\n }\n lex();\n\n if (match('...')) {\n if (!isBindingElement) {\n throwUnexpectedToken(lookahead);\n }\n expressions.push(parseRestElement(params));\n expect(')');\n if (!match('=>')) {\n expect('=>');\n }\n isBindingElement = false;\n for (i = 0; i < expressions.length; i++) {\n reinterpretExpressionAsPattern(expressions[i]);\n }\n return {\n type: PlaceHolders.ArrowParameterPlaceHolder,\n params: expressions\n };\n }\n\n expressions.push(inheritCoverGrammar(parseAssignmentExpression));\n }\n\n expr = new WrappingNode(startToken).finishSequenceExpression(expressions);\n }\n\n\n expect(')');\n\n if (match('=>')) {\n if (expr.type === Syntax.Identifier && expr.name === 'yield') {\n return {\n type: PlaceHolders.ArrowParameterPlaceHolder,\n params: [expr]\n };\n }\n\n if (!isBindingElement) {\n throwUnexpectedToken(lookahead);\n }\n\n if (expr.type === Syntax.SequenceExpression) {\n for (i = 0; i < expr.expressions.length; i++) {\n reinterpretExpressionAsPattern(expr.expressions[i]);\n }\n } else {\n reinterpretExpressionAsPattern(expr);\n }\n\n expr = {\n type: PlaceHolders.ArrowParameterPlaceHolder,\n params: expr.type === Syntax.SequenceExpression ? expr.expressions : [expr]\n };\n }\n isBindingElement = false;\n return expr;\n }\n\n\n // ECMA-262 12.2 Primary Expressions\n\n function parsePrimaryExpression() {\n var type, token, expr, node;\n\n if (match('(')) {\n isBindingElement = false;\n return inheritCoverGrammar(parseGroupExpression);\n }\n\n if (match('[')) {\n return inheritCoverGrammar(parseArrayInitializer);\n }\n\n if (match('{')) {\n return inheritCoverGrammar(parseObjectInitializer);\n }\n\n type = lookahead.type;\n node = new Node();\n\n if (type === Token.Identifier) {\n if (state.sourceType === 'module' && lookahead.value === 'await') {\n tolerateUnexpectedToken(lookahead);\n }\n expr = node.finishIdentifier(lex().value);\n } else if (type === Token.StringLiteral || type === Token.NumericLiteral) {\n isAssignmentTarget = isBindingElement = false;\n if (strict && lookahead.octal) {\n tolerateUnexpectedToken(lookahead, Messages.StrictOctalLiteral);\n }\n expr = node.finishLiteral(lex());\n } else if (type === Token.Keyword) {\n if (!strict && state.allowYield && matchKeyword('yield')) {\n return parseNonComputedProperty();\n }\n if (!strict && matchKeyword('let')) {\n return node.finishIdentifier(lex().value);\n }\n isAssignmentTarget = isBindingElement = false;\n if (matchKeyword('function')) {\n return parseFunctionExpression();\n }\n if (matchKeyword('this')) {\n lex();\n return node.finishThisExpression();\n }\n if (matchKeyword('class')) {\n return parseClassExpression();\n }\n throwUnexpectedToken(lex());\n } else if (type === Token.BooleanLiteral) {\n isAssignmentTarget = isBindingElement = false;\n token = lex();\n token.value = (token.value === 'true');\n expr = node.finishLiteral(token);\n } else if (type === Token.NullLiteral) {\n isAssignmentTarget = isBindingElement = false;\n token = lex();\n token.value = null;\n expr = node.finishLiteral(token);\n } else if (match('/') || match('/=')) {\n isAssignmentTarget = isBindingElement = false;\n index = startIndex;\n\n if (typeof extra.tokens !== 'undefined') {\n token = collectRegex();\n } else {\n token = scanRegExp();\n }\n lex();\n expr = node.finishLiteral(token);\n } else if (type === Token.Template) {\n expr = parseTemplateLiteral();\n } else {\n throwUnexpectedToken(lex());\n }\n\n return expr;\n }\n\n // ECMA-262 12.3 Left-Hand-Side Expressions\n\n function parseArguments() {\n var args = [], expr;\n\n expect('(');\n\n if (!match(')')) {\n while (startIndex < length) {\n if (match('...')) {\n expr = new Node();\n lex();\n expr.finishSpreadElement(isolateCoverGrammar(parseAssignmentExpression));\n } else {\n expr = isolateCoverGrammar(parseAssignmentExpression);\n }\n args.push(expr);\n if (match(')')) {\n break;\n }\n expectCommaSeparator();\n }\n }\n\n expect(')');\n\n return args;\n }\n\n function parseNonComputedProperty() {\n var token, node = new Node();\n\n token = lex();\n\n if (!isIdentifierName(token)) {\n throwUnexpectedToken(token);\n }\n\n return node.finishIdentifier(token.value);\n }\n\n function parseNonComputedMember() {\n expect('.');\n\n return parseNonComputedProperty();\n }\n\n function parseComputedMember() {\n var expr;\n\n expect('[');\n\n expr = isolateCoverGrammar(parseExpression);\n\n expect(']');\n\n return expr;\n }\n\n // ECMA-262 12.3.3 The new Operator\n\n function parseNewExpression() {\n var callee, args, node = new Node();\n\n expectKeyword('new');\n\n if (match('.')) {\n lex();\n if (lookahead.type === Token.Identifier && lookahead.value === 'target') {\n if (state.inFunctionBody) {\n lex();\n return node.finishMetaProperty('new', 'target');\n }\n }\n throwUnexpectedToken(lookahead);\n }\n\n callee = isolateCoverGrammar(parseLeftHandSideExpression);\n args = match('(') ? parseArguments() : [];\n\n isAssignmentTarget = isBindingElement = false;\n\n return node.finishNewExpression(callee, args);\n }\n\n // ECMA-262 12.3.4 Function Calls\n\n function parseLeftHandSideExpressionAllowCall() {\n var quasi, expr, args, property, startToken, previousAllowIn = state.allowIn;\n\n startToken = lookahead;\n state.allowIn = true;\n\n if (matchKeyword('super') && state.inFunctionBody) {\n expr = new Node();\n lex();\n expr = expr.finishSuper();\n if (!match('(') && !match('.') && !match('[')) {\n throwUnexpectedToken(lookahead);\n }\n } else {\n expr = inheritCoverGrammar(matchKeyword('new') ? parseNewExpression : parsePrimaryExpression);\n }\n\n for (;;) {\n if (match('.')) {\n isBindingElement = false;\n isAssignmentTarget = true;\n property = parseNonComputedMember();\n expr = new WrappingNode(startToken).finishMemberExpression('.', expr, property);\n } else if (match('(')) {\n isBindingElement = false;\n isAssignmentTarget = false;\n args = parseArguments();\n expr = new WrappingNode(startToken).finishCallExpression(expr, args);\n } else if (match('[')) {\n isBindingElement = false;\n isAssignmentTarget = true;\n property = parseComputedMember();\n expr = new WrappingNode(startToken).finishMemberExpression('[', expr, property);\n } else if (lookahead.type === Token.Template && lookahead.head) {\n quasi = parseTemplateLiteral();\n expr = new WrappingNode(startToken).finishTaggedTemplateExpression(expr, quasi);\n } else {\n break;\n }\n }\n state.allowIn = previousAllowIn;\n\n return expr;\n }\n\n // ECMA-262 12.3 Left-Hand-Side Expressions\n\n function parseLeftHandSideExpression() {\n var quasi, expr, property, startToken;\n assert(state.allowIn, 'callee of new expression always allow in keyword.');\n\n startToken = lookahead;\n\n if (matchKeyword('super') && state.inFunctionBody) {\n expr = new Node();\n lex();\n expr = expr.finishSuper();\n if (!match('[') && !match('.')) {\n throwUnexpectedToken(lookahead);\n }\n } else {\n expr = inheritCoverGrammar(matchKeyword('new') ? parseNewExpression : parsePrimaryExpression);\n }\n\n for (;;) {\n if (match('[')) {\n isBindingElement = false;\n isAssignmentTarget = true;\n property = parseComputedMember();\n expr = new WrappingNode(startToken).finishMemberExpression('[', expr, property);\n } else if (match('.')) {\n isBindingElement = false;\n isAssignmentTarget = true;\n property = parseNonComputedMember();\n expr = new WrappingNode(startToken).finishMemberExpression('.', expr, property);\n } else if (lookahead.type === Token.Template && lookahead.head) {\n quasi = parseTemplateLiteral();\n expr = new WrappingNode(startToken).finishTaggedTemplateExpression(expr, quasi);\n } else {\n break;\n }\n }\n return expr;\n }\n\n // ECMA-262 12.4 Postfix Expressions\n\n function parsePostfixExpression() {\n var expr, token, startToken = lookahead;\n\n expr = inheritCoverGrammar(parseLeftHandSideExpressionAllowCall);\n\n if (!hasLineTerminator && lookahead.type === Token.Punctuator) {\n if (match('++') || match('--')) {\n // ECMA-262 11.3.1, 11.3.2\n if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {\n tolerateError(Messages.StrictLHSPostfix);\n }\n\n if (!isAssignmentTarget) {\n tolerateError(Messages.InvalidLHSInAssignment);\n }\n\n isAssignmentTarget = isBindingElement = false;\n\n token = lex();\n expr = new WrappingNode(startToken).finishPostfixExpression(token.value, expr);\n }\n }\n\n return expr;\n }\n\n // ECMA-262 12.5 Unary Operators\n\n function parseUnaryExpression() {\n var token, expr, startToken;\n\n if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.Keyword) {\n expr = parsePostfixExpression();\n } else if (match('++') || match('--')) {\n startToken = lookahead;\n token = lex();\n expr = inheritCoverGrammar(parseUnaryExpression);\n // ECMA-262 11.4.4, 11.4.5\n if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {\n tolerateError(Messages.StrictLHSPrefix);\n }\n\n if (!isAssignmentTarget) {\n tolerateError(Messages.InvalidLHSInAssignment);\n }\n expr = new WrappingNode(startToken).finishUnaryExpression(token.value, expr);\n isAssignmentTarget = isBindingElement = false;\n } else if (match('+') || match('-') || match('~') || match('!')) {\n startToken = lookahead;\n token = lex();\n expr = inheritCoverGrammar(parseUnaryExpression);\n expr = new WrappingNode(startToken).finishUnaryExpression(token.value, expr);\n isAssignmentTarget = isBindingElement = false;\n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n startToken = lookahead;\n token = lex();\n expr = inheritCoverGrammar(parseUnaryExpression);\n expr = new WrappingNode(startToken).finishUnaryExpression(token.value, expr);\n if (strict && expr.operator === 'delete' && expr.argument.type === Syntax.Identifier) {\n tolerateError(Messages.StrictDelete);\n }\n isAssignmentTarget = isBindingElement = false;\n } else {\n expr = parsePostfixExpression();\n }\n\n return expr;\n }\n\n function binaryPrecedence(token, allowIn) {\n var prec = 0;\n\n if (token.type !== Token.Punctuator && token.type !== Token.Keyword) {\n return 0;\n }\n\n switch (token.value) {\n case '||':\n prec = 1;\n break;\n\n case '&&':\n prec = 2;\n break;\n\n case '|':\n prec = 3;\n break;\n\n case '^':\n prec = 4;\n break;\n\n case '&':\n prec = 5;\n break;\n\n case '==':\n case '!=':\n case '===':\n case '!==':\n prec = 6;\n break;\n\n case '<':\n case '>':\n case '<=':\n case '>=':\n case 'instanceof':\n prec = 7;\n break;\n\n case 'in':\n prec = allowIn ? 7 : 0;\n break;\n\n case '<<':\n case '>>':\n case '>>>':\n prec = 8;\n break;\n\n case '+':\n case '-':\n prec = 9;\n break;\n\n case '*':\n case '/':\n case '%':\n prec = 11;\n break;\n\n default:\n break;\n }\n\n return prec;\n }\n\n // ECMA-262 12.6 Multiplicative Operators\n // ECMA-262 12.7 Additive Operators\n // ECMA-262 12.8 Bitwise Shift Operators\n // ECMA-262 12.9 Relational Operators\n // ECMA-262 12.10 Equality Operators\n // ECMA-262 12.11 Binary Bitwise Operators\n // ECMA-262 12.12 Binary Logical Operators\n\n function parseBinaryExpression() {\n var marker, markers, expr, token, prec, stack, right, operator, left, i;\n\n marker = lookahead;\n left = inheritCoverGrammar(parseUnaryExpression);\n\n token = lookahead;\n prec = binaryPrecedence(token, state.allowIn);\n if (prec === 0) {\n return left;\n }\n isAssignmentTarget = isBindingElement = false;\n token.prec = prec;\n lex();\n\n markers = [marker, lookahead];\n right = isolateCoverGrammar(parseUnaryExpression);\n\n stack = [left, token, right];\n\n while ((prec = binaryPrecedence(lookahead, state.allowIn)) > 0) {\n\n // Reduce: make a binary expression from the three topmost entries.\n while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {\n right = stack.pop();\n operator = stack.pop().value;\n left = stack.pop();\n markers.pop();\n expr = new WrappingNode(markers[markers.length - 1]).finishBinaryExpression(operator, left, right);\n stack.push(expr);\n }\n\n // Shift.\n token = lex();\n token.prec = prec;\n stack.push(token);\n markers.push(lookahead);\n expr = isolateCoverGrammar(parseUnaryExpression);\n stack.push(expr);\n }\n\n // Final reduce to clean-up the stack.\n i = stack.length - 1;\n expr = stack[i];\n markers.pop();\n while (i > 1) {\n expr = new WrappingNode(markers.pop()).finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i -= 2;\n }\n\n return expr;\n }\n\n\n // ECMA-262 12.13 Conditional Operator\n\n function parseConditionalExpression() {\n var expr, previousAllowIn, consequent, alternate, startToken;\n\n startToken = lookahead;\n\n expr = inheritCoverGrammar(parseBinaryExpression);\n if (match('?')) {\n lex();\n previousAllowIn = state.allowIn;\n state.allowIn = true;\n consequent = isolateCoverGrammar(parseAssignmentExpression);\n state.allowIn = previousAllowIn;\n expect(':');\n alternate = isolateCoverGrammar(parseAssignmentExpression);\n\n expr = new WrappingNode(startToken).finishConditionalExpression(expr, consequent, alternate);\n isAssignmentTarget = isBindingElement = false;\n }\n\n return expr;\n }\n\n // ECMA-262 14.2 Arrow Function Definitions\n\n function parseConciseBody() {\n if (match('{')) {\n return parseFunctionSourceElements();\n }\n return isolateCoverGrammar(parseAssignmentExpression);\n }\n\n function checkPatternParam(options, param) {\n var i;\n switch (param.type) {\n case Syntax.Identifier:\n validateParam(options, param, param.name);\n break;\n case Syntax.RestElement:\n checkPatternParam(options, param.argument);\n break;\n case Syntax.AssignmentPattern:\n checkPatternParam(options, param.left);\n break;\n case Syntax.ArrayPattern:\n for (i = 0; i < param.elements.length; i++) {\n if (param.elements[i] !== null) {\n checkPatternParam(options, param.elements[i]);\n }\n }\n break;\n case Syntax.YieldExpression:\n break;\n default:\n assert(param.type === Syntax.ObjectPattern, 'Invalid type');\n for (i = 0; i < param.properties.length; i++) {\n checkPatternParam(options, param.properties[i].value);\n }\n break;\n }\n }\n function reinterpretAsCoverFormalsList(expr) {\n var i, len, param, params, defaults, defaultCount, options, token;\n\n defaults = [];\n defaultCount = 0;\n params = [expr];\n\n switch (expr.type) {\n case Syntax.Identifier:\n break;\n case PlaceHolders.ArrowParameterPlaceHolder:\n params = expr.params;\n break;\n default:\n return null;\n }\n\n options = {\n paramSet: {}\n };\n\n for (i = 0, len = params.length; i < len; i += 1) {\n param = params[i];\n switch (param.type) {\n case Syntax.AssignmentPattern:\n params[i] = param.left;\n if (param.right.type === Syntax.YieldExpression) {\n if (param.right.argument) {\n throwUnexpectedToken(lookahead);\n }\n param.right.type = Syntax.Identifier;\n param.right.name = 'yield';\n delete param.right.argument;\n delete param.right.delegate;\n }\n defaults.push(param.right);\n ++defaultCount;\n checkPatternParam(options, param.left);\n break;\n default:\n checkPatternParam(options, param);\n params[i] = param;\n defaults.push(null);\n break;\n }\n }\n\n if (strict || !state.allowYield) {\n for (i = 0, len = params.length; i < len; i += 1) {\n param = params[i];\n if (param.type === Syntax.YieldExpression) {\n throwUnexpectedToken(lookahead);\n }\n }\n }\n\n if (options.message === Messages.StrictParamDupe) {\n token = strict ? options.stricted : options.firstRestricted;\n throwUnexpectedToken(token, options.message);\n }\n\n if (defaultCount === 0) {\n defaults = [];\n }\n\n return {\n params: params,\n defaults: defaults,\n stricted: options.stricted,\n firstRestricted: options.firstRestricted,\n message: options.message\n };\n }\n\n function parseArrowFunctionExpression(options, node) {\n var previousStrict, previousAllowYield, body;\n\n if (hasLineTerminator) {\n tolerateUnexpectedToken(lookahead);\n }\n expect('=>');\n\n previousStrict = strict;\n previousAllowYield = state.allowYield;\n state.allowYield = true;\n\n body = parseConciseBody();\n\n if (strict && options.firstRestricted) {\n throwUnexpectedToken(options.firstRestricted, options.message);\n }\n if (strict && options.stricted) {\n tolerateUnexpectedToken(options.stricted, options.message);\n }\n\n strict = previousStrict;\n state.allowYield = previousAllowYield;\n\n return node.finishArrowFunctionExpression(options.params, options.defaults, body, body.type !== Syntax.BlockStatement);\n }\n\n // ECMA-262 14.4 Yield expression\n\n function parseYieldExpression() {\n var argument, expr, delegate, previousAllowYield;\n\n argument = null;\n expr = new Node();\n delegate = false;\n\n expectKeyword('yield');\n\n if (!hasLineTerminator) {\n previousAllowYield = state.allowYield;\n state.allowYield = false;\n delegate = match('*');\n if (delegate) {\n lex();\n argument = parseAssignmentExpression();\n } else {\n if (!match(';') && !match('}') && !match(')') && lookahead.type !== Token.EOF) {\n argument = parseAssignmentExpression();\n }\n }\n state.allowYield = previousAllowYield;\n }\n\n return expr.finishYieldExpression(argument, delegate);\n }\n\n // ECMA-262 12.14 Assignment Operators\n\n function parseAssignmentExpression() {\n var token, expr, right, list, startToken;\n\n startToken = lookahead;\n token = lookahead;\n\n if (!state.allowYield && matchKeyword('yield')) {\n return parseYieldExpression();\n }\n\n expr = parseConditionalExpression();\n\n if (expr.type === PlaceHolders.ArrowParameterPlaceHolder || match('=>')) {\n isAssignmentTarget = isBindingElement = false;\n list = reinterpretAsCoverFormalsList(expr);\n\n if (list) {\n firstCoverInitializedNameError = null;\n return parseArrowFunctionExpression(list, new WrappingNode(startToken));\n }\n\n return expr;\n }\n\n if (matchAssign()) {\n if (!isAssignmentTarget) {\n tolerateError(Messages.InvalidLHSInAssignment);\n }\n\n // ECMA-262 12.1.1\n if (strict && expr.type === Syntax.Identifier) {\n if (isRestrictedWord(expr.name)) {\n tolerateUnexpectedToken(token, Messages.StrictLHSAssignment);\n }\n if (isStrictModeReservedWord(expr.name)) {\n tolerateUnexpectedToken(token, Messages.StrictReservedWord);\n }\n }\n\n if (!match('=')) {\n isAssignmentTarget = isBindingElement = false;\n } else {\n reinterpretExpressionAsPattern(expr);\n }\n\n token = lex();\n right = isolateCoverGrammar(parseAssignmentExpression);\n expr = new WrappingNode(startToken).finishAssignmentExpression(token.value, expr, right);\n firstCoverInitializedNameError = null;\n }\n\n return expr;\n }\n\n // ECMA-262 12.15 Comma Operator\n\n function parseExpression() {\n var expr, startToken = lookahead, expressions;\n\n expr = isolateCoverGrammar(parseAssignmentExpression);\n\n if (match(',')) {\n expressions = [expr];\n\n while (startIndex < length) {\n if (!match(',')) {\n break;\n }\n lex();\n expressions.push(isolateCoverGrammar(parseAssignmentExpression));\n }\n\n expr = new WrappingNode(startToken).finishSequenceExpression(expressions);\n }\n\n return expr;\n }\n\n // ECMA-262 13.2 Block\n\n function parseStatementListItem() {\n if (lookahead.type === Token.Keyword) {\n switch (lookahead.value) {\n case 'export':\n if (state.sourceType !== 'module') {\n tolerateUnexpectedToken(lookahead, Messages.IllegalExportDeclaration);\n }\n return parseExportDeclaration();\n case 'import':\n if (state.sourceType !== 'module') {\n tolerateUnexpectedToken(lookahead, Messages.IllegalImportDeclaration);\n }\n return parseImportDeclaration();\n case 'const':\n return parseLexicalDeclaration({inFor: false});\n case 'function':\n return parseFunctionDeclaration(new Node());\n case 'class':\n return parseClassDeclaration();\n }\n }\n\n if (matchKeyword('let') && isLexicalDeclaration()) {\n return parseLexicalDeclaration({inFor: false});\n }\n\n return parseStatement();\n }\n\n function parseStatementList() {\n var list = [];\n while (startIndex < length) {\n if (match('}')) {\n break;\n }\n list.push(parseStatementListItem());\n }\n\n return list;\n }\n\n function parseBlock() {\n var block, node = new Node();\n\n expect('{');\n\n block = parseStatementList();\n\n expect('}');\n\n return node.finishBlockStatement(block);\n }\n\n // ECMA-262 13.3.2 Variable Statement\n\n function parseVariableIdentifier(kind) {\n var token, node = new Node();\n\n token = lex();\n\n if (token.type === Token.Keyword && token.value === 'yield') {\n if (strict) {\n tolerateUnexpectedToken(token, Messages.StrictReservedWord);\n } if (!state.allowYield) {\n throwUnexpectedToken(token);\n }\n } else if (token.type !== Token.Identifier) {\n if (strict && token.type === Token.Keyword && isStrictModeReservedWord(token.value)) {\n tolerateUnexpectedToken(token, Messages.StrictReservedWord);\n } else {\n if (strict || token.value !== 'let' || kind !== 'var') {\n throwUnexpectedToken(token);\n }\n }\n } else if (state.sourceType === 'module' && token.type === Token.Identifier && token.value === 'await') {\n tolerateUnexpectedToken(token);\n }\n\n return node.finishIdentifier(token.value);\n }\n\n function parseVariableDeclaration(options) {\n var init = null, id, node = new Node(), params = [];\n\n id = parsePattern(params, 'var');\n\n // ECMA-262 12.2.1\n if (strict && isRestrictedWord(id.name)) {\n tolerateError(Messages.StrictVarName);\n }\n\n if (match('=')) {\n lex();\n init = isolateCoverGrammar(parseAssignmentExpression);\n } else if (id.type !== Syntax.Identifier && !options.inFor) {\n expect('=');\n }\n\n return node.finishVariableDeclarator(id, init);\n }\n\n function parseVariableDeclarationList(options) {\n var opt, list;\n\n opt = { inFor: options.inFor };\n list = [parseVariableDeclaration(opt)];\n\n while (match(',')) {\n lex();\n list.push(parseVariableDeclaration(opt));\n }\n\n return list;\n }\n\n function parseVariableStatement(node) {\n var declarations;\n\n expectKeyword('var');\n\n declarations = parseVariableDeclarationList({ inFor: false });\n\n consumeSemicolon();\n\n return node.finishVariableDeclaration(declarations);\n }\n\n // ECMA-262 13.3.1 Let and Const Declarations\n\n function parseLexicalBinding(kind, options) {\n var init = null, id, node = new Node(), params = [];\n\n id = parsePattern(params, kind);\n\n // ECMA-262 12.2.1\n if (strict && id.type === Syntax.Identifier && isRestrictedWord(id.name)) {\n tolerateError(Messages.StrictVarName);\n }\n\n if (kind === 'const') {\n if (!matchKeyword('in') && !matchContextualKeyword('of')) {\n expect('=');\n init = isolateCoverGrammar(parseAssignmentExpression);\n }\n } else if ((!options.inFor && id.type !== Syntax.Identifier) || match('=')) {\n expect('=');\n init = isolateCoverGrammar(parseAssignmentExpression);\n }\n\n return node.finishVariableDeclarator(id, init);\n }\n\n function parseBindingList(kind, options) {\n var list = [parseLexicalBinding(kind, options)];\n\n while (match(',')) {\n lex();\n list.push(parseLexicalBinding(kind, options));\n }\n\n return list;\n }\n\n\n function tokenizerState() {\n return {\n index: index,\n lineNumber: lineNumber,\n lineStart: lineStart,\n hasLineTerminator: hasLineTerminator,\n lastIndex: lastIndex,\n lastLineNumber: lastLineNumber,\n lastLineStart: lastLineStart,\n startIndex: startIndex,\n startLineNumber: startLineNumber,\n startLineStart: startLineStart,\n lookahead: lookahead,\n tokenCount: extra.tokens ? extra.tokens.length : 0\n };\n }\n\n function resetTokenizerState(ts) {\n index = ts.index;\n lineNumber = ts.lineNumber;\n lineStart = ts.lineStart;\n hasLineTerminator = ts.hasLineTerminator;\n lastIndex = ts.lastIndex;\n lastLineNumber = ts.lastLineNumber;\n lastLineStart = ts.lastLineStart;\n startIndex = ts.startIndex;\n startLineNumber = ts.startLineNumber;\n startLineStart = ts.startLineStart;\n lookahead = ts.lookahead;\n if (extra.tokens) {\n extra.tokens.splice(ts.tokenCount, extra.tokens.length);\n }\n }\n\n function isLexicalDeclaration() {\n var lexical, ts;\n\n ts = tokenizerState();\n\n lex();\n lexical = (lookahead.type === Token.Identifier) || match('[') || match('{') ||\n matchKeyword('let') || matchKeyword('yield');\n\n resetTokenizerState(ts);\n\n return lexical;\n }\n\n function parseLexicalDeclaration(options) {\n var kind, declarations, node = new Node();\n\n kind = lex().value;\n assert(kind === 'let' || kind === 'const', 'Lexical declaration must be either let or const');\n\n declarations = parseBindingList(kind, options);\n\n consumeSemicolon();\n\n return node.finishLexicalDeclaration(declarations, kind);\n }\n\n function parseRestElement(params) {\n var param, node = new Node();\n\n lex();\n\n if (match('{')) {\n throwError(Messages.ObjectPatternAsRestParameter);\n }\n\n params.push(lookahead);\n\n param = parseVariableIdentifier();\n\n if (match('=')) {\n throwError(Messages.DefaultRestParameter);\n }\n\n if (!match(')')) {\n throwError(Messages.ParameterAfterRestParameter);\n }\n\n return node.finishRestElement(param);\n }\n\n // ECMA-262 13.4 Empty Statement\n\n function parseEmptyStatement(node) {\n expect(';');\n return node.finishEmptyStatement();\n }\n\n // ECMA-262 12.4 Expression Statement\n\n function parseExpressionStatement(node) {\n var expr = parseExpression();\n consumeSemicolon();\n return node.finishExpressionStatement(expr);\n }\n\n // ECMA-262 13.6 If statement\n\n function parseIfStatement(node) {\n var test, consequent, alternate;\n\n expectKeyword('if');\n\n expect('(');\n\n test = parseExpression();\n\n expect(')');\n\n consequent = parseStatement();\n\n if (matchKeyword('else')) {\n lex();\n alternate = parseStatement();\n } else {\n alternate = null;\n }\n\n return node.finishIfStatement(test, consequent, alternate);\n }\n\n // ECMA-262 13.7 Iteration Statements\n\n function parseDoWhileStatement(node) {\n var body, test, oldInIteration;\n\n expectKeyword('do');\n\n oldInIteration = state.inIteration;\n state.inIteration = true;\n\n body = parseStatement();\n\n state.inIteration = oldInIteration;\n\n expectKeyword('while');\n\n expect('(');\n\n test = parseExpression();\n\n expect(')');\n\n if (match(';')) {\n lex();\n }\n\n return node.finishDoWhileStatement(body, test);\n }\n\n function parseWhileStatement(node) {\n var test, body, oldInIteration;\n\n expectKeyword('while');\n\n expect('(');\n\n test = parseExpression();\n\n expect(')');\n\n oldInIteration = state.inIteration;\n state.inIteration = true;\n\n body = parseStatement();\n\n state.inIteration = oldInIteration;\n\n return node.finishWhileStatement(test, body);\n }\n\n function parseForStatement(node) {\n var init, forIn, initSeq, initStartToken, test, update, left, right, kind, declarations,\n body, oldInIteration, previousAllowIn = state.allowIn;\n\n init = test = update = null;\n forIn = true;\n\n expectKeyword('for');\n\n expect('(');\n\n if (match(';')) {\n lex();\n } else {\n if (matchKeyword('var')) {\n init = new Node();\n lex();\n\n state.allowIn = false;\n declarations = parseVariableDeclarationList({ inFor: true });\n state.allowIn = previousAllowIn;\n\n if (declarations.length === 1 && matchKeyword('in')) {\n init = init.finishVariableDeclaration(declarations);\n lex();\n left = init;\n right = parseExpression();\n init = null;\n } else if (declarations.length === 1 && declarations[0].init === null && matchContextualKeyword('of')) {\n init = init.finishVariableDeclaration(declarations);\n lex();\n left = init;\n right = parseAssignmentExpression();\n init = null;\n forIn = false;\n } else {\n init = init.finishVariableDeclaration(declarations);\n expect(';');\n }\n } else if (matchKeyword('const') || matchKeyword('let')) {\n init = new Node();\n kind = lex().value;\n\n if (!strict && lookahead.value === 'in') {\n init = init.finishIdentifier(kind);\n lex();\n left = init;\n right = parseExpression();\n init = null;\n } else {\n state.allowIn = false;\n declarations = parseBindingList(kind, {inFor: true});\n state.allowIn = previousAllowIn;\n\n if (declarations.length === 1 && declarations[0].init === null && matchKeyword('in')) {\n init = init.finishLexicalDeclaration(declarations, kind);\n lex();\n left = init;\n right = parseExpression();\n init = null;\n } else if (declarations.length === 1 && declarations[0].init === null && matchContextualKeyword('of')) {\n init = init.finishLexicalDeclaration(declarations, kind);\n lex();\n left = init;\n right = parseAssignmentExpression();\n init = null;\n forIn = false;\n } else {\n consumeSemicolon();\n init = init.finishLexicalDeclaration(declarations, kind);\n }\n }\n } else {\n initStartToken = lookahead;\n state.allowIn = false;\n init = inheritCoverGrammar(parseAssignmentExpression);\n state.allowIn = previousAllowIn;\n\n if (matchKeyword('in')) {\n if (!isAssignmentTarget) {\n tolerateError(Messages.InvalidLHSInForIn);\n }\n\n lex();\n reinterpretExpressionAsPattern(init);\n left = init;\n right = parseExpression();\n init = null;\n } else if (matchContextualKeyword('of')) {\n if (!isAssignmentTarget) {\n tolerateError(Messages.InvalidLHSInForLoop);\n }\n\n lex();\n reinterpretExpressionAsPattern(init);\n left = init;\n right = parseAssignmentExpression();\n init = null;\n forIn = false;\n } else {\n if (match(',')) {\n initSeq = [init];\n while (match(',')) {\n lex();\n initSeq.push(isolateCoverGrammar(parseAssignmentExpression));\n }\n init = new WrappingNode(initStartToken).finishSequenceExpression(initSeq);\n }\n expect(';');\n }\n }\n }\n\n if (typeof left === 'undefined') {\n\n if (!match(';')) {\n test = parseExpression();\n }\n expect(';');\n\n if (!match(')')) {\n update = parseExpression();\n }\n }\n\n expect(')');\n\n oldInIteration = state.inIteration;\n state.inIteration = true;\n\n body = isolateCoverGrammar(parseStatement);\n\n state.inIteration = oldInIteration;\n\n return (typeof left === 'undefined') ?\n node.finishForStatement(init, test, update, body) :\n forIn ? node.finishForInStatement(left, right, body) :\n node.finishForOfStatement(left, right, body);\n }\n\n // ECMA-262 13.8 The continue statement\n\n function parseContinueStatement(node) {\n var label = null, key;\n\n expectKeyword('continue');\n\n // Optimize the most common form: 'continue;'.\n if (source.charCodeAt(startIndex) === 0x3B) {\n lex();\n\n if (!state.inIteration) {\n throwError(Messages.IllegalContinue);\n }\n\n return node.finishContinueStatement(null);\n }\n\n if (hasLineTerminator) {\n if (!state.inIteration) {\n throwError(Messages.IllegalContinue);\n }\n\n return node.finishContinueStatement(null);\n }\n\n if (lookahead.type === Token.Identifier) {\n label = parseVariableIdentifier();\n\n key = '$' + label.name;\n if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) {\n throwError(Messages.UnknownLabel, label.name);\n }\n }\n\n consumeSemicolon();\n\n if (label === null && !state.inIteration) {\n throwError(Messages.IllegalContinue);\n }\n\n return node.finishContinueStatement(label);\n }\n\n // ECMA-262 13.9 The break statement\n\n function parseBreakStatement(node) {\n var label = null, key;\n\n expectKeyword('break');\n\n // Catch the very common case first: immediately a semicolon (U+003B).\n if (source.charCodeAt(lastIndex) === 0x3B) {\n lex();\n\n if (!(state.inIteration || state.inSwitch)) {\n throwError(Messages.IllegalBreak);\n }\n\n return node.finishBreakStatement(null);\n }\n\n if (hasLineTerminator) {\n if (!(state.inIteration || state.inSwitch)) {\n throwError(Messages.IllegalBreak);\n }\n } else if (lookahead.type === Token.Identifier) {\n label = parseVariableIdentifier();\n\n key = '$' + label.name;\n if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) {\n throwError(Messages.UnknownLabel, label.name);\n }\n }\n\n consumeSemicolon();\n\n if (label === null && !(state.inIteration || state.inSwitch)) {\n throwError(Messages.IllegalBreak);\n }\n\n return node.finishBreakStatement(label);\n }\n\n // ECMA-262 13.10 The return statement\n\n function parseReturnStatement(node) {\n var argument = null;\n\n expectKeyword('return');\n\n if (!state.inFunctionBody) {\n tolerateError(Messages.IllegalReturn);\n }\n\n // 'return' followed by a space and an identifier is very common.\n if (source.charCodeAt(lastIndex) === 0x20) {\n if (isIdentifierStart(source.charCodeAt(lastIndex + 1))) {\n argument = parseExpression();\n consumeSemicolon();\n return node.finishReturnStatement(argument);\n }\n }\n\n if (hasLineTerminator) {\n // HACK\n return node.finishReturnStatement(null);\n }\n\n if (!match(';')) {\n if (!match('}') && lookahead.type !== Token.EOF) {\n argument = parseExpression();\n }\n }\n\n consumeSemicolon();\n\n return node.finishReturnStatement(argument);\n }\n\n // ECMA-262 13.11 The with statement\n\n function parseWithStatement(node) {\n var object, body;\n\n if (strict) {\n tolerateError(Messages.StrictModeWith);\n }\n\n expectKeyword('with');\n\n expect('(');\n\n object = parseExpression();\n\n expect(')');\n\n body = parseStatement();\n\n return node.finishWithStatement(object, body);\n }\n\n // ECMA-262 13.12 The switch statement\n\n function parseSwitchCase() {\n var test, consequent = [], statement, node = new Node();\n\n if (matchKeyword('default')) {\n lex();\n test = null;\n } else {\n expectKeyword('case');\n test = parseExpression();\n }\n expect(':');\n\n while (startIndex < length) {\n if (match('}') || matchKeyword('default') || matchKeyword('case')) {\n break;\n }\n statement = parseStatementListItem();\n consequent.push(statement);\n }\n\n return node.finishSwitchCase(test, consequent);\n }\n\n function parseSwitchStatement(node) {\n var discriminant, cases, clause, oldInSwitch, defaultFound;\n\n expectKeyword('switch');\n\n expect('(');\n\n discriminant = parseExpression();\n\n expect(')');\n\n expect('{');\n\n cases = [];\n\n if (match('}')) {\n lex();\n return node.finishSwitchStatement(discriminant, cases);\n }\n\n oldInSwitch = state.inSwitch;\n state.inSwitch = true;\n defaultFound = false;\n\n while (startIndex < length) {\n if (match('}')) {\n break;\n }\n clause = parseSwitchCase();\n if (clause.test === null) {\n if (defaultFound) {\n throwError(Messages.MultipleDefaultsInSwitch);\n }\n defaultFound = true;\n }\n cases.push(clause);\n }\n\n state.inSwitch = oldInSwitch;\n\n expect('}');\n\n return node.finishSwitchStatement(discriminant, cases);\n }\n\n // ECMA-262 13.14 The throw statement\n\n function parseThrowStatement(node) {\n var argument;\n\n expectKeyword('throw');\n\n if (hasLineTerminator) {\n throwError(Messages.NewlineAfterThrow);\n }\n\n argument = parseExpression();\n\n consumeSemicolon();\n\n return node.finishThrowStatement(argument);\n }\n\n // ECMA-262 13.15 The try statement\n\n function parseCatchClause() {\n var param, params = [], paramMap = {}, key, i, body, node = new Node();\n\n expectKeyword('catch');\n\n expect('(');\n if (match(')')) {\n throwUnexpectedToken(lookahead);\n }\n\n param = parsePattern(params);\n for (i = 0; i < params.length; i++) {\n key = '$' + params[i].value;\n if (Object.prototype.hasOwnProperty.call(paramMap, key)) {\n tolerateError(Messages.DuplicateBinding, params[i].value);\n }\n paramMap[key] = true;\n }\n\n // ECMA-262 12.14.1\n if (strict && isRestrictedWord(param.name)) {\n tolerateError(Messages.StrictCatchVariable);\n }\n\n expect(')');\n body = parseBlock();\n return node.finishCatchClause(param, body);\n }\n\n function parseTryStatement(node) {\n var block, handler = null, finalizer = null;\n\n expectKeyword('try');\n\n block = parseBlock();\n\n if (matchKeyword('catch')) {\n handler = parseCatchClause();\n }\n\n if (matchKeyword('finally')) {\n lex();\n finalizer = parseBlock();\n }\n\n if (!handler && !finalizer) {\n throwError(Messages.NoCatchOrFinally);\n }\n\n return node.finishTryStatement(block, handler, finalizer);\n }\n\n // ECMA-262 13.16 The debugger statement\n\n function parseDebuggerStatement(node) {\n expectKeyword('debugger');\n\n consumeSemicolon();\n\n return node.finishDebuggerStatement();\n }\n\n // 13 Statements\n\n function parseStatement() {\n var type = lookahead.type,\n expr,\n labeledBody,\n key,\n node;\n\n if (type === Token.EOF) {\n throwUnexpectedToken(lookahead);\n }\n\n if (type === Token.Punctuator && lookahead.value === '{') {\n return parseBlock();\n }\n isAssignmentTarget = isBindingElement = true;\n node = new Node();\n\n if (type === Token.Punctuator) {\n switch (lookahead.value) {\n case ';':\n return parseEmptyStatement(node);\n case '(':\n return parseExpressionStatement(node);\n default:\n break;\n }\n } else if (type === Token.Keyword) {\n switch (lookahead.value) {\n case 'break':\n return parseBreakStatement(node);\n case 'continue':\n return parseContinueStatement(node);\n case 'debugger':\n return parseDebuggerStatement(node);\n case 'do':\n return parseDoWhileStatement(node);\n case 'for':\n return parseForStatement(node);\n case 'function':\n return parseFunctionDeclaration(node);\n case 'if':\n return parseIfStatement(node);\n case 'return':\n return parseReturnStatement(node);\n case 'switch':\n return parseSwitchStatement(node);\n case 'throw':\n return parseThrowStatement(node);\n case 'try':\n return parseTryStatement(node);\n case 'var':\n return parseVariableStatement(node);\n case 'while':\n return parseWhileStatement(node);\n case 'with':\n return parseWithStatement(node);\n default:\n break;\n }\n }\n\n expr = parseExpression();\n\n // ECMA-262 12.12 Labelled Statements\n if ((expr.type === Syntax.Identifier) && match(':')) {\n lex();\n\n key = '$' + expr.name;\n if (Object.prototype.hasOwnProperty.call(state.labelSet, key)) {\n throwError(Messages.Redeclaration, 'Label', expr.name);\n }\n\n state.labelSet[key] = true;\n labeledBody = parseStatement();\n delete state.labelSet[key];\n return node.finishLabeledStatement(expr, labeledBody);\n }\n\n consumeSemicolon();\n\n return node.finishExpressionStatement(expr);\n }\n\n // ECMA-262 14.1 Function Definition\n\n function parseFunctionSourceElements() {\n var statement, body = [], token, directive, firstRestricted,\n oldLabelSet, oldInIteration, oldInSwitch, oldInFunctionBody, oldParenthesisCount,\n node = new Node();\n\n expect('{');\n\n while (startIndex < length) {\n if (lookahead.type !== Token.StringLiteral) {\n break;\n }\n token = lookahead;\n\n statement = parseStatementListItem();\n body.push(statement);\n if (statement.expression.type !== Syntax.Literal) {\n // this is not directive\n break;\n }\n directive = source.slice(token.start + 1, token.end - 1);\n if (directive === 'use strict') {\n strict = true;\n if (firstRestricted) {\n tolerateUnexpectedToken(firstRestricted, Messages.StrictOctalLiteral);\n }\n } else {\n if (!firstRestricted && token.octal) {\n firstRestricted = token;\n }\n }\n }\n\n oldLabelSet = state.labelSet;\n oldInIteration = state.inIteration;\n oldInSwitch = state.inSwitch;\n oldInFunctionBody = state.inFunctionBody;\n oldParenthesisCount = state.parenthesizedCount;\n\n state.labelSet = {};\n state.inIteration = false;\n state.inSwitch = false;\n state.inFunctionBody = true;\n state.parenthesizedCount = 0;\n\n while (startIndex < length) {\n if (match('}')) {\n break;\n }\n body.push(parseStatementListItem());\n }\n\n expect('}');\n\n state.labelSet = oldLabelSet;\n state.inIteration = oldInIteration;\n state.inSwitch = oldInSwitch;\n state.inFunctionBody = oldInFunctionBody;\n state.parenthesizedCount = oldParenthesisCount;\n\n return node.finishBlockStatement(body);\n }\n\n function validateParam(options, param, name) {\n var key = '$' + name;\n if (strict) {\n if (isRestrictedWord(name)) {\n options.stricted = param;\n options.message = Messages.StrictParamName;\n }\n if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {\n options.stricted = param;\n options.message = Messages.StrictParamDupe;\n }\n } else if (!options.firstRestricted) {\n if (isRestrictedWord(name)) {\n options.firstRestricted = param;\n options.message = Messages.StrictParamName;\n } else if (isStrictModeReservedWord(name)) {\n options.firstRestricted = param;\n options.message = Messages.StrictReservedWord;\n } else if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {\n options.stricted = param;\n options.message = Messages.StrictParamDupe;\n }\n }\n options.paramSet[key] = true;\n }\n\n function parseParam(options) {\n var token, param, params = [], i, def;\n\n token = lookahead;\n if (token.value === '...') {\n param = parseRestElement(params);\n validateParam(options, param.argument, param.argument.name);\n options.params.push(param);\n options.defaults.push(null);\n return false;\n }\n\n param = parsePatternWithDefault(params);\n for (i = 0; i < params.length; i++) {\n validateParam(options, params[i], params[i].value);\n }\n\n if (param.type === Syntax.AssignmentPattern) {\n def = param.right;\n param = param.left;\n ++options.defaultCount;\n }\n\n options.params.push(param);\n options.defaults.push(def);\n\n return !match(')');\n }\n\n function parseParams(firstRestricted) {\n var options;\n\n options = {\n params: [],\n defaultCount: 0,\n defaults: [],\n firstRestricted: firstRestricted\n };\n\n expect('(');\n\n if (!match(')')) {\n options.paramSet = {};\n while (startIndex < length) {\n if (!parseParam(options)) {\n break;\n }\n expect(',');\n }\n }\n\n expect(')');\n\n if (options.defaultCount === 0) {\n options.defaults = [];\n }\n\n return {\n params: options.params,\n defaults: options.defaults,\n stricted: options.stricted,\n firstRestricted: options.firstRestricted,\n message: options.message\n };\n }\n\n function parseFunctionDeclaration(node, identifierIsOptional) {\n var id = null, params = [], defaults = [], body, token, stricted, tmp, firstRestricted, message, previousStrict,\n isGenerator, previousAllowYield;\n\n previousAllowYield = state.allowYield;\n\n expectKeyword('function');\n\n isGenerator = match('*');\n if (isGenerator) {\n lex();\n }\n\n if (!identifierIsOptional || !match('(')) {\n token = lookahead;\n id = parseVariableIdentifier();\n if (strict) {\n if (isRestrictedWord(token.value)) {\n tolerateUnexpectedToken(token, Messages.StrictFunctionName);\n }\n } else {\n if (isRestrictedWord(token.value)) {\n firstRestricted = token;\n message = Messages.StrictFunctionName;\n } else if (isStrictModeReservedWord(token.value)) {\n firstRestricted = token;\n message = Messages.StrictReservedWord;\n }\n }\n }\n\n state.allowYield = !isGenerator;\n tmp = parseParams(firstRestricted);\n params = tmp.params;\n defaults = tmp.defaults;\n stricted = tmp.stricted;\n firstRestricted = tmp.firstRestricted;\n if (tmp.message) {\n message = tmp.message;\n }\n\n\n previousStrict = strict;\n body = parseFunctionSourceElements();\n if (strict && firstRestricted) {\n throwUnexpectedToken(firstRestricted, message);\n }\n if (strict && stricted) {\n tolerateUnexpectedToken(stricted, message);\n }\n\n strict = previousStrict;\n state.allowYield = previousAllowYield;\n\n return node.finishFunctionDeclaration(id, params, defaults, body, isGenerator);\n }\n\n function parseFunctionExpression() {\n var token, id = null, stricted, firstRestricted, message, tmp,\n params = [], defaults = [], body, previousStrict, node = new Node(),\n isGenerator, previousAllowYield;\n\n previousAllowYield = state.allowYield;\n\n expectKeyword('function');\n\n isGenerator = match('*');\n if (isGenerator) {\n lex();\n }\n\n state.allowYield = !isGenerator;\n if (!match('(')) {\n token = lookahead;\n id = (!strict && !isGenerator && matchKeyword('yield')) ? parseNonComputedProperty() : parseVariableIdentifier();\n if (strict) {\n if (isRestrictedWord(token.value)) {\n tolerateUnexpectedToken(token, Messages.StrictFunctionName);\n }\n } else {\n if (isRestrictedWord(token.value)) {\n firstRestricted = token;\n message = Messages.StrictFunctionName;\n } else if (isStrictModeReservedWord(token.value)) {\n firstRestricted = token;\n message = Messages.StrictReservedWord;\n }\n }\n }\n\n tmp = parseParams(firstRestricted);\n params = tmp.params;\n defaults = tmp.defaults;\n stricted = tmp.stricted;\n firstRestricted = tmp.firstRestricted;\n if (tmp.message) {\n message = tmp.message;\n }\n\n previousStrict = strict;\n body = parseFunctionSourceElements();\n if (strict && firstRestricted) {\n throwUnexpectedToken(firstRestricted, message);\n }\n if (strict && stricted) {\n tolerateUnexpectedToken(stricted, message);\n }\n strict = previousStrict;\n state.allowYield = previousAllowYield;\n\n return node.finishFunctionExpression(id, params, defaults, body, isGenerator);\n }\n\n // ECMA-262 14.5 Class Definitions\n\n function parseClassBody() {\n var classBody, token, isStatic, hasConstructor = false, body, method, computed, key;\n\n classBody = new Node();\n\n expect('{');\n body = [];\n while (!match('}')) {\n if (match(';')) {\n lex();\n } else {\n method = new Node();\n token = lookahead;\n isStatic = false;\n computed = match('[');\n if (match('*')) {\n lex();\n } else {\n key = parseObjectPropertyKey();\n if (key.name === 'static' && (lookaheadPropertyName() || match('*'))) {\n token = lookahead;\n isStatic = true;\n computed = match('[');\n if (match('*')) {\n lex();\n } else {\n key = parseObjectPropertyKey();\n }\n }\n }\n method = tryParseMethodDefinition(token, key, computed, method);\n if (method) {\n method['static'] = isStatic; // jscs:ignore requireDotNotation\n if (method.kind === 'init') {\n method.kind = 'method';\n }\n if (!isStatic) {\n if (!method.computed && (method.key.name || method.key.value.toString()) === 'constructor') {\n if (method.kind !== 'method' || !method.method || method.value.generator) {\n throwUnexpectedToken(token, Messages.ConstructorSpecialMethod);\n }\n if (hasConstructor) {\n throwUnexpectedToken(token, Messages.DuplicateConstructor);\n } else {\n hasConstructor = true;\n }\n method.kind = 'constructor';\n }\n } else {\n if (!method.computed && (method.key.name || method.key.value.toString()) === 'prototype') {\n throwUnexpectedToken(token, Messages.StaticPrototype);\n }\n }\n method.type = Syntax.MethodDefinition;\n delete method.method;\n delete method.shorthand;\n body.push(method);\n } else {\n throwUnexpectedToken(lookahead);\n }\n }\n }\n lex();\n return classBody.finishClassBody(body);\n }\n\n function parseClassDeclaration(identifierIsOptional) {\n var id = null, superClass = null, classNode = new Node(), classBody, previousStrict = strict;\n strict = true;\n\n expectKeyword('class');\n\n if (!identifierIsOptional || lookahead.type === Token.Identifier) {\n id = parseVariableIdentifier();\n }\n\n if (matchKeyword('extends')) {\n lex();\n superClass = isolateCoverGrammar(parseLeftHandSideExpressionAllowCall);\n }\n classBody = parseClassBody();\n strict = previousStrict;\n\n return classNode.finishClassDeclaration(id, superClass, classBody);\n }\n\n function parseClassExpression() {\n var id = null, superClass = null, classNode = new Node(), classBody, previousStrict = strict;\n strict = true;\n\n expectKeyword('class');\n\n if (lookahead.type === Token.Identifier) {\n id = parseVariableIdentifier();\n }\n\n if (matchKeyword('extends')) {\n lex();\n superClass = isolateCoverGrammar(parseLeftHandSideExpressionAllowCall);\n }\n classBody = parseClassBody();\n strict = previousStrict;\n\n return classNode.finishClassExpression(id, superClass, classBody);\n }\n\n // ECMA-262 15.2 Modules\n\n function parseModuleSpecifier() {\n var node = new Node();\n\n if (lookahead.type !== Token.StringLiteral) {\n throwError(Messages.InvalidModuleSpecifier);\n }\n return node.finishLiteral(lex());\n }\n\n // ECMA-262 15.2.3 Exports\n\n function parseExportSpecifier() {\n var exported, local, node = new Node(), def;\n if (matchKeyword('default')) {\n // export {default} from 'something';\n def = new Node();\n lex();\n local = def.finishIdentifier('default');\n } else {\n local = parseVariableIdentifier();\n }\n if (matchContextualKeyword('as')) {\n lex();\n exported = parseNonComputedProperty();\n }\n return node.finishExportSpecifier(local, exported);\n }\n\n function parseExportNamedDeclaration(node) {\n var declaration = null,\n isExportFromIdentifier,\n src = null, specifiers = [];\n\n // non-default export\n if (lookahead.type === Token.Keyword) {\n // covers:\n // export var f = 1;\n switch (lookahead.value) {\n case 'let':\n case 'const':\n declaration = parseLexicalDeclaration({inFor: false});\n return node.finishExportNamedDeclaration(declaration, specifiers, null);\n case 'var':\n case 'class':\n case 'function':\n declaration = parseStatementListItem();\n return node.finishExportNamedDeclaration(declaration, specifiers, null);\n }\n }\n\n expect('{');\n while (!match('}')) {\n isExportFromIdentifier = isExportFromIdentifier || matchKeyword('default');\n specifiers.push(parseExportSpecifier());\n if (!match('}')) {\n expect(',');\n if (match('}')) {\n break;\n }\n }\n }\n expect('}');\n\n if (matchContextualKeyword('from')) {\n // covering:\n // export {default} from 'foo';\n // export {foo} from 'foo';\n lex();\n src = parseModuleSpecifier();\n consumeSemicolon();\n } else if (isExportFromIdentifier) {\n // covering:\n // export {default}; // missing fromClause\n throwError(lookahead.value ?\n Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value);\n } else {\n // cover\n // export {foo};\n consumeSemicolon();\n }\n return node.finishExportNamedDeclaration(declaration, specifiers, src);\n }\n\n function parseExportDefaultDeclaration(node) {\n var declaration = null,\n expression = null;\n\n // covers:\n // export default ...\n expectKeyword('default');\n\n if (matchKeyword('function')) {\n // covers:\n // export default function foo () {}\n // export default function () {}\n declaration = parseFunctionDeclaration(new Node(), true);\n return node.finishExportDefaultDeclaration(declaration);\n }\n if (matchKeyword('class')) {\n declaration = parseClassDeclaration(true);\n return node.finishExportDefaultDeclaration(declaration);\n }\n\n if (matchContextualKeyword('from')) {\n throwError(Messages.UnexpectedToken, lookahead.value);\n }\n\n // covers:\n // export default {};\n // export default [];\n // export default (1 + 2);\n if (match('{')) {\n expression = parseObjectInitializer();\n } else if (match('[')) {\n expression = parseArrayInitializer();\n } else {\n expression = parseAssignmentExpression();\n }\n consumeSemicolon();\n return node.finishExportDefaultDeclaration(expression);\n }\n\n function parseExportAllDeclaration(node) {\n var src;\n\n // covers:\n // export * from 'foo';\n expect('*');\n if (!matchContextualKeyword('from')) {\n throwError(lookahead.value ?\n Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value);\n }\n lex();\n src = parseModuleSpecifier();\n consumeSemicolon();\n\n return node.finishExportAllDeclaration(src);\n }\n\n function parseExportDeclaration() {\n var node = new Node();\n if (state.inFunctionBody) {\n throwError(Messages.IllegalExportDeclaration);\n }\n\n expectKeyword('export');\n\n if (matchKeyword('default')) {\n return parseExportDefaultDeclaration(node);\n }\n if (match('*')) {\n return parseExportAllDeclaration(node);\n }\n return parseExportNamedDeclaration(node);\n }\n\n // ECMA-262 15.2.2 Imports\n\n function parseImportSpecifier() {\n // import {} ...;\n var local, imported, node = new Node();\n\n imported = parseNonComputedProperty();\n if (matchContextualKeyword('as')) {\n lex();\n local = parseVariableIdentifier();\n }\n\n return node.finishImportSpecifier(local, imported);\n }\n\n function parseNamedImports() {\n var specifiers = [];\n // {foo, bar as bas}\n expect('{');\n while (!match('}')) {\n specifiers.push(parseImportSpecifier());\n if (!match('}')) {\n expect(',');\n if (match('}')) {\n break;\n }\n }\n }\n expect('}');\n return specifiers;\n }\n\n function parseImportDefaultSpecifier() {\n // import ...;\n var local, node = new Node();\n\n local = parseNonComputedProperty();\n\n return node.finishImportDefaultSpecifier(local);\n }\n\n function parseImportNamespaceSpecifier() {\n // import <* as foo> ...;\n var local, node = new Node();\n\n expect('*');\n if (!matchContextualKeyword('as')) {\n throwError(Messages.NoAsAfterImportNamespace);\n }\n lex();\n local = parseNonComputedProperty();\n\n return node.finishImportNamespaceSpecifier(local);\n }\n\n function parseImportDeclaration() {\n var specifiers = [], src, node = new Node();\n\n if (state.inFunctionBody) {\n throwError(Messages.IllegalImportDeclaration);\n }\n\n expectKeyword('import');\n\n if (lookahead.type === Token.StringLiteral) {\n // import 'foo';\n src = parseModuleSpecifier();\n } else {\n\n if (match('{')) {\n // import {bar}\n specifiers = specifiers.concat(parseNamedImports());\n } else if (match('*')) {\n // import * as foo\n specifiers.push(parseImportNamespaceSpecifier());\n } else if (isIdentifierName(lookahead) && !matchKeyword('default')) {\n // import foo\n specifiers.push(parseImportDefaultSpecifier());\n if (match(',')) {\n lex();\n if (match('*')) {\n // import foo, * as foo\n specifiers.push(parseImportNamespaceSpecifier());\n } else if (match('{')) {\n // import foo, {bar}\n specifiers = specifiers.concat(parseNamedImports());\n } else {\n throwUnexpectedToken(lookahead);\n }\n }\n } else {\n throwUnexpectedToken(lex());\n }\n\n if (!matchContextualKeyword('from')) {\n throwError(lookahead.value ?\n Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value);\n }\n lex();\n src = parseModuleSpecifier();\n }\n\n consumeSemicolon();\n return node.finishImportDeclaration(specifiers, src);\n }\n\n // ECMA-262 15.1 Scripts\n\n function parseScriptBody() {\n var statement, body = [], token, directive, firstRestricted;\n\n while (startIndex < length) {\n token = lookahead;\n if (token.type !== Token.StringLiteral) {\n break;\n }\n\n statement = parseStatementListItem();\n body.push(statement);\n if (statement.expression.type !== Syntax.Literal) {\n // this is not directive\n break;\n }\n directive = source.slice(token.start + 1, token.end - 1);\n if (directive === 'use strict') {\n strict = true;\n if (firstRestricted) {\n tolerateUnexpectedToken(firstRestricted, Messages.StrictOctalLiteral);\n }\n } else {\n if (!firstRestricted && token.octal) {\n firstRestricted = token;\n }\n }\n }\n\n while (startIndex < length) {\n statement = parseStatementListItem();\n /* istanbul ignore if */\n if (typeof statement === 'undefined') {\n break;\n }\n body.push(statement);\n }\n return body;\n }\n\n function parseProgram() {\n var body, node;\n\n peek();\n node = new Node();\n\n body = parseScriptBody();\n return node.finishProgram(body, state.sourceType);\n }\n\n function filterTokenLocation() {\n var i, entry, token, tokens = [];\n\n for (i = 0; i < extra.tokens.length; ++i) {\n entry = extra.tokens[i];\n token = {\n type: entry.type,\n value: entry.value\n };\n if (entry.regex) {\n token.regex = {\n pattern: entry.regex.pattern,\n flags: entry.regex.flags\n };\n }\n if (extra.range) {\n token.range = entry.range;\n }\n if (extra.loc) {\n token.loc = entry.loc;\n }\n tokens.push(token);\n }\n\n extra.tokens = tokens;\n }\n\n function tokenize(code, options, delegate) {\n var toString,\n tokens;\n\n toString = String;\n if (typeof code !== 'string' && !(code instanceof String)) {\n code = toString(code);\n }\n\n source = code;\n index = 0;\n lineNumber = (source.length > 0) ? 1 : 0;\n lineStart = 0;\n startIndex = index;\n startLineNumber = lineNumber;\n startLineStart = lineStart;\n length = source.length;\n lookahead = null;\n state = {\n allowIn: true,\n allowYield: true,\n labelSet: {},\n inFunctionBody: false,\n inIteration: false,\n inSwitch: false,\n lastCommentStart: -1,\n curlyStack: []\n };\n\n extra = {};\n\n // Options matching.\n options = options || {};\n\n // Of course we collect tokens here.\n options.tokens = true;\n extra.tokens = [];\n extra.tokenValues = [];\n extra.tokenize = true;\n extra.delegate = delegate;\n\n // The following two fields are necessary to compute the Regex tokens.\n extra.openParenToken = -1;\n extra.openCurlyToken = -1;\n\n extra.range = (typeof options.range === 'boolean') && options.range;\n extra.loc = (typeof options.loc === 'boolean') && options.loc;\n\n if (typeof options.comment === 'boolean' && options.comment) {\n extra.comments = [];\n }\n if (typeof options.tolerant === 'boolean' && options.tolerant) {\n extra.errors = [];\n }\n\n try {\n peek();\n if (lookahead.type === Token.EOF) {\n return extra.tokens;\n }\n\n lex();\n while (lookahead.type !== Token.EOF) {\n try {\n lex();\n } catch (lexError) {\n if (extra.errors) {\n recordError(lexError);\n // We have to break on the first error\n // to avoid infinite loops.\n break;\n } else {\n throw lexError;\n }\n }\n }\n\n tokens = extra.tokens;\n if (typeof extra.errors !== 'undefined') {\n tokens.errors = extra.errors;\n }\n } catch (e) {\n throw e;\n } finally {\n extra = {};\n }\n return tokens;\n }\n\n function parse(code, options) {\n var program, toString;\n\n toString = String;\n if (typeof code !== 'string' && !(code instanceof String)) {\n code = toString(code);\n }\n\n source = code;\n index = 0;\n lineNumber = (source.length > 0) ? 1 : 0;\n lineStart = 0;\n startIndex = index;\n startLineNumber = lineNumber;\n startLineStart = lineStart;\n length = source.length;\n lookahead = null;\n state = {\n allowIn: true,\n allowYield: true,\n labelSet: {},\n inFunctionBody: false,\n inIteration: false,\n inSwitch: false,\n lastCommentStart: -1,\n curlyStack: [],\n sourceType: 'script'\n };\n strict = false;\n\n extra = {};\n if (typeof options !== 'undefined') {\n extra.range = (typeof options.range === 'boolean') && options.range;\n extra.loc = (typeof options.loc === 'boolean') && options.loc;\n extra.attachComment = (typeof options.attachComment === 'boolean') && options.attachComment;\n\n if (extra.loc && options.source !== null && options.source !== undefined) {\n extra.source = toString(options.source);\n }\n\n if (typeof options.tokens === 'boolean' && options.tokens) {\n extra.tokens = [];\n }\n if (typeof options.comment === 'boolean' && options.comment) {\n extra.comments = [];\n }\n if (typeof options.tolerant === 'boolean' && options.tolerant) {\n extra.errors = [];\n }\n if (extra.attachComment) {\n extra.range = true;\n extra.comments = [];\n extra.bottomRightStack = [];\n extra.trailingComments = [];\n extra.leadingComments = [];\n }\n if (options.sourceType === 'module') {\n // very restrictive condition for now\n state.sourceType = options.sourceType;\n strict = true;\n }\n }\n\n try {\n program = parseProgram();\n if (typeof extra.comments !== 'undefined') {\n program.comments = extra.comments;\n }\n if (typeof extra.tokens !== 'undefined') {\n filterTokenLocation();\n program.tokens = extra.tokens;\n }\n if (typeof extra.errors !== 'undefined') {\n program.errors = extra.errors;\n }\n } catch (e) {\n throw e;\n } finally {\n extra = {};\n }\n\n return program;\n }\n\n // Sync with *.json manifests.\n exports.version = '2.7.1';\n\n exports.tokenize = tokenize;\n\n exports.parse = parse;\n\n // Deep copy.\n /* istanbul ignore next */\n exports.Syntax = (function () {\n var name, types = {};\n\n if (typeof Object.create === 'function') {\n types = Object.create(null);\n }\n\n for (name in Syntax) {\n if (Syntax.hasOwnProperty(name)) {\n types[name] = Syntax[name];\n }\n }\n\n if (typeof Object.freeze === 'function') {\n Object.freeze(types);\n }\n\n return types;\n }());\n\n}));\n/* vim: set sw=4 ts=4 et tw=80 : */\n", "// 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\nfunction EventEmitter() {\n this._events = this._events || {};\n this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n if (!isNumber(n) || n < 0 || isNaN(n))\n throw TypeError('n must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n var er, handler, len, args, i, listeners;\n\n if (!this._events)\n this._events = {};\n\n // If there is no 'error' event listener then throw.\n if (type === 'error') {\n if (!this._events.error ||\n (isObject(this._events.error) && !this._events.error.length)) {\n er = arguments[1];\n if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n }\n throw TypeError('Uncaught, unspecified \"error\" event.');\n }\n }\n\n handler = this._events[type];\n\n if (isUndefined(handler))\n return false;\n\n if (isFunction(handler)) {\n switch (arguments.length) {\n // fast cases\n case 1:\n handler.call(this);\n break;\n case 2:\n handler.call(this, arguments[1]);\n break;\n case 3:\n handler.call(this, arguments[1], arguments[2]);\n break;\n // slower\n default:\n args = Array.prototype.slice.call(arguments, 1);\n handler.apply(this, args);\n }\n } else if (isObject(handler)) {\n args = Array.prototype.slice.call(arguments, 1);\n listeners = handler.slice();\n len = listeners.length;\n for (i = 0; i < len; i++)\n listeners[i].apply(this, args);\n }\n\n return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n var m;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events)\n this._events = {};\n\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (this._events.newListener)\n this.emit('newListener', type,\n isFunction(listener.listener) ?\n listener.listener : listener);\n\n if (!this._events[type])\n // Optimize the case of one listener. Don't need the extra array object.\n this._events[type] = listener;\n else if (isObject(this._events[type]))\n // If we've already got an array, just append.\n this._events[type].push(listener);\n else\n // Adding the second element, need to change to array.\n this._events[type] = [this._events[type], listener];\n\n // Check for listener leak\n if (isObject(this._events[type]) && !this._events[type].warned) {\n if (!isUndefined(this._maxListeners)) {\n m = this._maxListeners;\n } else {\n m = EventEmitter.defaultMaxListeners;\n }\n\n if (m && m > 0 && this._events[type].length > m) {\n this._events[type].warned = true;\n console.error('(node) warning: possible EventEmitter memory ' +\n 'leak detected. %d listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit.',\n this._events[type].length);\n if (typeof console.trace === 'function') {\n // not supported in IE 10\n console.trace();\n }\n }\n }\n\n return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n var fired = false;\n\n function g() {\n this.removeListener(type, g);\n\n if (!fired) {\n fired = true;\n listener.apply(this, arguments);\n }\n }\n\n g.listener = listener;\n this.on(type, g);\n\n return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n var list, position, length, i;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events || !this._events[type])\n return this;\n\n list = this._events[type];\n length = list.length;\n position = -1;\n\n if (list === listener ||\n (isFunction(list.listener) && list.listener === listener)) {\n delete this._events[type];\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n\n } else if (isObject(list)) {\n for (i = length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list.length = 0;\n delete this._events[type];\n } else {\n list.splice(position, 1);\n }\n\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n }\n\n return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n var key, listeners;\n\n if (!this._events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!this._events.removeListener) {\n if (arguments.length === 0)\n this._events = {};\n else if (this._events[type])\n delete this._events[type];\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n for (key in this._events) {\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = {};\n return this;\n }\n\n listeners = this._events[type];\n\n if (isFunction(listeners)) {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n while (listeners.length)\n this.removeListener(type, listeners[listeners.length - 1]);\n }\n delete this._events[type];\n\n return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n var ret;\n if (!this._events || !this._events[type])\n ret = [];\n else if (isFunction(this._events[type]))\n ret = [this._events[type]];\n else\n ret = this._events[type].slice();\n return ret;\n};\n\nEventEmitter.prototype.listenerCount = function(type) {\n if (this._events) {\n var evlistener = this._events[type];\n\n if (isFunction(evlistener))\n return 1;\n else if (evlistener)\n return evlistener.length;\n }\n return 0;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n return emitter.listenerCount(type);\n};\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n", "var http = require('http');\n\nvar https = module.exports;\n\nfor (var key in http) {\n if (http.hasOwnProperty(key)) https[key] = http[key];\n};\n\nhttps.request = function (params, cb) {\n if (!params) params = {};\n params.scheme = 'https';\n params.protocol = 'https:';\n return http.request.call(this, params, cb);\n}\n", "exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n", diff --git a/lib/bundle.js b/lib/bundle.js index f32e13d4..e4d7f680 100644 --- a/lib/bundle.js +++ b/lib/bundle.js @@ -22,171 +22,170 @@ module.exports = bundle; * @param {$RefParserOptions} options */ function bundle(parser, options) { - util.debug('Bundling $ref pointers in %s', parser._basePath); + util.debug('Bundling $ref pointers in %s', parser.$refs._basePath); - optimize(parser.$refs); - remap(parser.$refs, options); - dereference(parser._basePath, parser.$refs, options); -} + // Build an inventory of all $ref pointers in the JSON Schema + var inventory = []; + crawl(parser.schema, parser.$refs._basePath + '#', '#', inventory, parser.$refs, options); -/** - * Optimizes the {@link $Ref#referencedAt} list for each {@link $Ref} to contain as few entries - * as possible (ideally, one). - * - * @example: - * { - * first: { $ref: somefile.json#/some/part }, - * second: { $ref: somefile.json#/another/part }, - * third: { $ref: somefile.json }, - * fourth: { $ref: somefile.json#/some/part/sub/part } - * } - * - * In this example, there are four references to the same file, but since the third reference points - * to the ENTIRE file, that's the only one we care about. The other three can just be remapped to point - * inside the third one. - * - * On the other hand, if the third reference DIDN'T exist, then the first and second would both be - * significant, since they point to different parts of the file. The fourth reference is not significant, - * since it can still be remapped to point inside the first one. - * - * @param {$Refs} $refs - */ -function optimize($refs) { - Object.keys($refs._$refs).forEach(function(key) { - var $ref = $refs._$refs[key]; - - // Find the first reference to this $ref - var first = $ref.referencedAt.filter(function(at) { return at.firstReference; })[0]; - - // Do any of the references point to the entire file? - var entireFile = $ref.referencedAt.filter(function(at) { return at.hash === '#'; }); - if (entireFile.length === 1) { - // We found a single reference to the entire file. Done! - $ref.referencedAt = entireFile; - } - else if (entireFile.length > 1) { - // We found more than one reference to the entire file. Pick the first one. - if (entireFile.indexOf(first) >= 0) { - $ref.referencedAt = [first]; - } - else { - $ref.referencedAt = entireFile.slice(0, 1); - } - } - else { - // There are noo references to the entire file, so optimize the list of reference points - // by eliminating any duplicate/redundant ones (e.g. "fourth" in the example above) -console.log('========================= %s BEFORE =======================', $ref.path, JSON.stringify($ref.referencedAt, null, 2)); - [first].concat($ref.referencedAt).forEach(function(at) { - dedupe(at, $ref.referencedAt); - }); -console.log('========================= %s AFTER =======================', $ref.path, JSON.stringify($ref.referencedAt, null, 2)); - } - }); -} - -/** - * Removes redundant entries from the {@link $Ref#referencedAt} list. - * - * @param {object} original - The {@link $Ref#referencedAt} entry to keep - * @param {object[]} dupes - The {@link $Ref#referencedAt} list to dedupe - */ -function dedupe(original, dupes) { - for (var i = dupes.length - 1; i >= 0; i--) { - var dupe = dupes[i]; - if (dupe !== original && dupe.hash.indexOf(original.hash) === 0) { - dupes.splice(i, 1); - } - } + // Remap all $ref pointers + remap(inventory); } /** - * Re-maps all $ref pointers in the schema, so that they are relative to the root of the schema. + * Recursively crawls the given value, and inventories all JSON references. * + * @param {*} obj - The value to crawl. If it's not an object or array, it will be ignored. + * @param {string} path - The full path of `obj`, possibly with a JSON Pointer in the hash + * @param {string} pathFromRoot - The path of `obj` from the schema root + * @param {object[]} inventory - An array of already-inventoried $ref pointers * @param {$Refs} $refs * @param {$RefParserOptions} options */ -function remap($refs, options) { - var remapped = []; - - // Crawl the schema and determine the re-mapped values for all $ref pointers. - // NOTE: We don't actually APPLY the re-mappings yet, since that can affect other re-mappings - Object.keys($refs._$refs).forEach(function(key) { - var $ref = $refs._$refs[key]; - crawl($ref.value, $ref.path + '#', $refs, remapped, options); - }); +function crawl(obj, path, pathFromRoot, inventory, $refs, options) { + if (obj && typeof obj === 'object') { + var keys = Object.keys(obj); - // Now APPLY all of the re-mappings - for (var i = 0; i < remapped.length; i++) { - var mapping = remapped[i]; - mapping.old$Ref.$ref = mapping.new$Ref.$ref; - } -} + // Most people will expect references to be bundled into the the "definitions" property, + // so we always crawl that property first, if it exists. + var defs = keys.indexOf('definitions'); + if (defs > 0) { + keys.splice(0, 0, keys.splice(defs, 1)[0]); + } -/** - * Recursively crawls the given value, and re-maps any JSON references. - * - * @param {*} obj - The value to crawl. If it's not an object or array, it will be ignored. - * @param {string} path - The path to use for resolving relative JSON references - * @param {$Refs} $refs - The resolved JSON references - * @param {object[]} remapped - An array of the re-mapped JSON references - * @param {$RefParserOptions} options - */ -function crawl(obj, path, $refs, remapped, options) { - if (obj && typeof obj === 'object') { - Object.keys(obj).forEach(function(key) { + keys.forEach(function(key) { var keyPath = Pointer.join(path, key); + var keyPathFromRoot = Pointer.join(pathFromRoot, key); var value = obj[key]; if ($Ref.is$Ref(value)) { - // We found a $ref, so resolve it - util.debug('Re-mapping $ref pointer "%s" at %s', value.$ref, keyPath); - var $refPath = url.resolve(path, value.$ref); - var pointer = $refs._resolve($refPath, options); - - // Find the path from the root of the JSON schema - var hash = util.path.getHash(value.$ref); - var referencedAt = pointer.$ref.referencedAt.filter(function(at) { - return hash.indexOf(at.hash) === 0; - })[0]; - -console.log( - 'referencedAt.pathFromRoot =', referencedAt.pathFromRoot, - '\nreferencedAt.hash =', referencedAt.hash, - '\nhash =', hash, - '\npointer.path.hash =', util.path.getHash(pointer.path) -); - - // Re-map the value - var new$RefPath = referencedAt.pathFromRoot + util.path.getHash(pointer.path).substr(1); - util.debug(' new value: %s', new$RefPath); - remapped.push({ - old$Ref: value, - new$Ref: {$ref: new$RefPath} // Note: DON'T name this property `new` (https://github.com/BigstickCarpet/json-schema-ref-parser/issues/3) - }); + // Skip this $ref if we've already inventoried it + if (!inventory.some(function(i) { return i.parent === obj && i.key === key; })) { + inventory$Ref(obj, key, path, keyPathFromRoot, inventory, $refs, options); + } } else { - crawl(value, keyPath, $refs, remapped, options); + crawl(value, keyPath, keyPathFromRoot, inventory, $refs, options); } }); } } /** - * Dereferences each external $ref pointer exactly ONCE. + * Inventories the given JSON Reference (i.e. records detailed information about it so we can + * optimize all $refs in the schema), and then crawls the resolved value. * - * @param {string} basePath + * @param {object} $refParent - The object that contains a JSON Reference as one of its keys + * @param {string} $refKey - The key in `$refParent` that is a JSON Reference + * @param {string} path - The full path of the JSON Reference at `$refKey`, possibly with a JSON Pointer in the hash + * @param {string} pathFromRoot - The path of the JSON Reference at `$refKey`, from the schema root + * @param {object[]} inventory - An array of already-inventoried $ref pointers * @param {$Refs} $refs * @param {$RefParserOptions} options */ -function dereference(basePath, $refs, options) { - basePath = util.path.stripHash(basePath); +function inventory$Ref($refParent, $refKey, path, pathFromRoot, inventory, $refs, options) { + var $ref = $refParent[$refKey]; + var $refPath = url.resolve(path, $ref.$ref); + var pointer = $refs._resolve($refPath, options); + var depth = Pointer.parse(pathFromRoot).length; + var file = util.path.stripHash(pointer.path); + var hash = util.path.getHash(pointer.path); + var external = file !== $refs._basePath; + var extended = Object.keys($ref).length > 1; + + inventory.push({ + $ref: $ref, // The JSON Reference (e.g. {$ref: string}) + parent: $refParent, // The object that contains this $ref pointer + key: $refKey, // The key in `parent` that is the $ref pointer + pathFromRoot: pathFromRoot, // The path to the $ref pointer, from the JSON Schema root + depth: depth, // How far from the JSON Schema root is this $ref pointer? + file: file, // The file that the $ref pointer resolves to + hash: hash, // The hash within `file` that the $ref pointer resolves to + value: pointer.value, // The resolved value of the $ref pointer + circular: pointer.circular, // Is this $ref pointer DIRECTLY circular? (i.e. it references itself) + extended: extended, // Does this $ref extend its resolved value? (i.e. it has extra properties, in addition to "$ref") + external: external // Does this $ref pointer point to a file other than the main JSON Schema file? + }); - Object.keys($refs._$refs).forEach(function(key) { - var $ref = $refs._$refs[key]; + // Recursively crawl the resolved value + crawl(pointer.value, pointer.path, pathFromRoot, inventory, $refs, options); +} - if ($ref.referencedAt.length > 0) { - $refs.set(basePath + $ref.referencedAt[0].pathFromRoot, $ref.value, options); +/** + * Re-maps every $ref pointer, so that they're all relative to the root of the JSON Schema. + * Each referenced value is dereferenced EXACTLY ONCE. All subsequent references to the same + * value are re-mapped to point to the first reference. + * + * @example: + * { + * first: { $ref: somefile.json#/some/part }, + * second: { $ref: somefile.json#/another/part }, + * third: { $ref: somefile.json }, + * fourth: { $ref: somefile.json#/some/part/sub/part } + * } + * + * In this example, there are four references to the same file, but since the third reference points + * to the ENTIRE file, that's the only one we need to dereference. The other three can just be + * remapped to point inside the third one. + * + * On the other hand, if the third reference DIDN'T exist, then the first and second would both need + * to be dereferenced, since they point to different parts of the file. The fourth reference does NOT + * need to be dereferenced, because it can be remapped to point inside the first one. + * + * @param {object[]} inventory + */ +function remap(inventory) { + // Group & sort all the $ref pointers, so they're in the order that we need to dereference/remap them + inventory.sort(function(a, b) { + if (a.file !== b.file) { + return a.file < b.file ? -1 : +1; // Group all the $refs that point to the same file + } + else if (a.hash !== b.hash) { + return a.hash < b.hash ? -1 : +1; // Group all the $refs that point to the same part of the file + } + else if (a.circular !== b.circular) { + return a.circular ? -1 : +1; // If the $ref points to itself, then sort it higher than other $refs that point to this $ref + } + else if (a.extended !== b.extended) { + return a.extended ? +1 : -1; // If the $ref extends the resolved value, then sort it lower than other $refs that don't extend the value + } + else if (a.depth !== b.depth) { + return a.depth - b.depth; // Sort $refs by how close they are to the JSON Schema root + } + else { + // If all else is equal, use the $ref that's in the "definitions" property + return b.pathFromRoot.lastIndexOf('/definitions') - a.pathFromRoot.lastIndexOf('/definitions'); } }); + + var file, hash, pathFromRoot; + inventory.forEach(function(i) { + util.debug('Re-mapping $ref pointer "%s" at %s', i.$ref.$ref, i.pathFromRoot); + + if (!i.external) { + // This $ref already resolves to the main JSON Schema file + i.$ref.$ref = i.hash; + } + else if (i.file !== file || i.hash.indexOf(hash) !== 0) { + // We've moved to a new file or new hash + file = i.file; + hash = i.hash; + pathFromRoot = i.pathFromRoot; + + // This is the first $ref to point to this value, so dereference the value. + // Any other $refs that point to the same value will point to this $ref instead + i.$ref = i.parent[i.key] = util.dereference(i.$ref, i.value); + + if (i.circular) { + // This $ref points to itself + i.$ref.$ref = i.pathFromRoot; + } + } + else { + // This $ref points to the same value as the prevous $ref + i.$ref.$ref = Pointer.join(pathFromRoot, Pointer.parse(i.hash)); + } + + util.debug(' new value: %s', (i.$ref && i.$ref.$ref) ? i.$ref.$ref : '[object Object]'); + }); } diff --git a/tests/index.html b/tests/index.html index 56247d91..ce5baeea 100644 --- a/tests/index.html +++ b/tests/index.html @@ -40,6 +40,11 @@ + + + + + diff --git a/tests/specs/external-partial/definitions/definitions.json b/tests/specs/external-partial/definitions/definitions.json new file mode 100644 index 00000000..18a90e7a --- /dev/null +++ b/tests/specs/external-partial/definitions/definitions.json @@ -0,0 +1,19 @@ +{ + "required string": { + "$ref": "required-string.yaml" + }, + "string": { + "$ref": "#/required%20string/type" + }, + "name": { + "$ref": "../definitions/name.yaml" + }, + "age": { + "type": "integer", + "minimum": 0 + }, + "gender": { + "type": "string", + "enum": ["male", "female"] + } +} diff --git a/tests/specs/external-partial/definitions/name.yaml b/tests/specs/external-partial/definitions/name.yaml new file mode 100644 index 00000000..343e6fc5 --- /dev/null +++ b/tests/specs/external-partial/definitions/name.yaml @@ -0,0 +1,22 @@ +title: name +type: object +required: + - first + - last +properties: + first: + $ref: ../definitions/definitions.json#/required string + last: + $ref: ./required-string.yaml + middle: + type: + $ref: "definitions.json#/name/properties/first/type" + minLength: + $ref: "definitions.json#/name/properties/first/minLength" + prefix: + $ref: "../definitions/definitions.json#/name/properties/last" + minLength: 3 + suffix: + type: string + $ref: "definitions.json#/name/properties/prefix" + maxLength: 3 diff --git a/tests/specs/external-partial/definitions/required-string.yaml b/tests/specs/external-partial/definitions/required-string.yaml new file mode 100644 index 00000000..7e538a3c --- /dev/null +++ b/tests/specs/external-partial/definitions/required-string.yaml @@ -0,0 +1,3 @@ +title: required string +type: string +minLength: 1 diff --git a/tests/specs/external-partial/external-partial.bundled.js b/tests/specs/external-partial/external-partial.bundled.js new file mode 100644 index 00000000..e16aaf95 --- /dev/null +++ b/tests/specs/external-partial/external-partial.bundled.js @@ -0,0 +1,56 @@ +helper.bundled.externalPartial = +{ + "title": "Person", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "title": "name", + "type": "object", + "required": [ + "first", + "last" + ], + "properties": { + "first": { + "title": "required string", + "type": "string", + "minLength": 1 + }, + "last": { + "$ref": "#/properties/name/properties/first" + }, + "middle": { + "type": { + "$ref": "#/properties/name/properties/first/type" + }, + "minLength": { + "$ref": "#/properties/name/properties/first/minLength" + } + }, + "prefix": { + "$ref": "#/properties/name/properties/first", + "minLength": 3 + }, + "suffix": { + "$ref": "#/properties/name/properties/prefix", + "type": "string", + "maxLength": 3 + } + } + }, + "age": { + "type": "integer", + "minimum": 0 + }, + "gender": { + "type": "string", + "enum": [ + "male", + "female" + ] + } + } +}; diff --git a/tests/specs/external-partial/external-partial.dereferenced.js b/tests/specs/external-partial/external-partial.dereferenced.js new file mode 100644 index 00000000..b37d2eb7 --- /dev/null +++ b/tests/specs/external-partial/external-partial.dereferenced.js @@ -0,0 +1,56 @@ +helper.dereferenced.externalPartial = +{ + "title": "Person", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "title": "name", + "type": "object", + "required": [ + "first", + "last" + ], + "properties": { + "first": { + "title": "required string", + "type": "string", + "minLength": 1 + }, + "last": { + "title": "required string", + "type": "string", + "minLength": 1 + }, + "middle": { + "type": "string", + "minLength": 1 + }, + "prefix": { + "title": "required string", + "type": "string", + "minLength": 3 + }, + "suffix": { + "title": "required string", + "type": "string", + "minLength": 3, + "maxLength": 3 + } + } + }, + "age": { + "type": "integer", + "minimum": 0 + }, + "gender": { + "type": "string", + "enum": [ + "male", + "female" + ] + } + } +}; diff --git a/tests/specs/external-partial/external-partial.parsed.js b/tests/specs/external-partial/external-partial.parsed.js new file mode 100644 index 00000000..3d1a5858 --- /dev/null +++ b/tests/specs/external-partial/external-partial.parsed.js @@ -0,0 +1,81 @@ +helper.parsed.externalPartial = +{ + schema: { + "required": [ + "name" + ], + "type": "object", + "properties": { + "gender": { + "$ref": "definitions/definitions.json#/gender" + }, + "age": { + "$ref": "definitions/definitions.json#/age" + }, + "name": { + "$ref": "definitions/definitions.json#/name" + } + }, + "title": "Person" + }, + + definitions: { + "required string": { + "$ref": "required-string.yaml" + }, + "string": { + "$ref": "#/required%20string/type" + }, + "name": { + "$ref": "../definitions/name.yaml" + }, + "age": { + "type": "integer", + "minimum": 0 + }, + "gender": { + "type": "string", + "enum": ["male", "female"] + } + }, + + name: { + "required": [ + "first", + "last" + ], + "type": "object", + "properties": { + "middle": { + "minLength": { + "$ref": "definitions.json#/name/properties/first/minLength" + }, + "type": { + "$ref": "definitions.json#/name/properties/first/type" + } + }, + "prefix": { + "minLength": 3, + "$ref": "../definitions/definitions.json#/name/properties/last" + }, + "last": { + "$ref": "./required-string.yaml" + }, + "suffix": { + "$ref": "definitions.json#/name/properties/prefix", + "type": "string", + "maxLength": 3 + }, + "first": { + "$ref": "../definitions/definitions.json#/required string" + } + }, + "title": "name" + }, + + requiredString: { + "minLength": 1, + "type": "string", + "title": "required string" + } +}; diff --git a/tests/specs/external-partial/external-partial.spec.js b/tests/specs/external-partial/external-partial.spec.js new file mode 100644 index 00000000..fa122f7f --- /dev/null +++ b/tests/specs/external-partial/external-partial.spec.js @@ -0,0 +1,49 @@ +'use strict'; + +describe('Schema with $refs to parts of external files', function() { + it('should parse successfully', function() { + var parser = new $RefParser(); + return parser + .parse(path.rel('specs/external-partial/external-partial.yaml')) + .then(function(schema) { + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(helper.parsed.externalPartial.schema); + expect(parser.$refs.paths()).to.deep.equal([path.abs('specs/external-partial/external-partial.yaml')]); + }); + }); + + it('should resolve successfully', helper.testResolve( + path.rel('specs/external-partial/external-partial.yaml'), + path.abs('specs/external-partial/external-partial.yaml'), helper.parsed.externalPartial.schema, + path.abs('specs/external-partial/definitions/definitions.json'), helper.parsed.externalPartial.definitions, + path.abs('specs/external-partial/definitions/name.yaml'), helper.parsed.externalPartial.name, + path.abs('specs/external-partial/definitions/required-string.yaml'), helper.parsed.externalPartial.requiredString + )); + + it('should dereference successfully', function() { + var parser = new $RefParser(); + return parser + .dereference(path.rel('specs/external-partial/external-partial.yaml')) + .then(function(schema) { + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(helper.dereferenced.externalPartial); + + // Reference equality + expect(schema.properties.name.properties.first) + .to.equal(schema.properties.name.properties.last); + + // The "circular" flag should NOT be set + expect(parser.$refs.circular).to.equal(false); + }); + }); + + it('should bundle successfully', function() { + var parser = new $RefParser(); + return parser + .bundle(path.rel('specs/external-partial/external-partial.yaml')) + .then(function(schema) { + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(helper.bundled.externalPartial); + }); + }); +}); diff --git a/tests/specs/external-partial/external-partial.yaml b/tests/specs/external-partial/external-partial.yaml new file mode 100644 index 00000000..22a0ec00 --- /dev/null +++ b/tests/specs/external-partial/external-partial.yaml @@ -0,0 +1,11 @@ +title: Person +type: object +required: + - name +properties: + name: + $ref: "definitions/definitions.json#/name" + age: + $ref: "definitions/definitions.json#/age" + gender: + $ref: "definitions/definitions.json#/gender"