diff --git a/node_modules/terser/CHANGELOG.md b/node_modules/terser/CHANGELOG.md
new file mode 100644
index 0000000..b89cddf
--- /dev/null
+++ b/node_modules/terser/CHANGELOG.md
@@ -0,0 +1,296 @@
+# Changelog
+
+## v4.8.0
+
+ - Support for numeric separators (`million = 1_000_000`) was added.
+ - Assigning properties to a class is now assumed to be pure.
+ - Fixed bug where `yield` wasn't considered a valid property key in generators.
+
+## v4.7.0
+
+ - A bug was fixed where an arrow function would have the wrong size
+ - `arguments` object is now considered safe to retrieve properties from (useful for `length`, or `0`) even when `pure_getters` is not set.
+ - Fixed erroneous `const` declarations without value (which is invalid) in some corner cases when using `collapse_vars`.
+
+## v4.6.13
+
+ - Fixed issue where ES5 object properties were being turned into ES6 object properties due to more lax unicode rules.
+ - Fixed parsing of BigInt with lowercase `e` in them.
+
+## v4.6.12
+
+ - Fixed subtree comparison code, making it see that `[1,[2, 3]]` is different from `[1, 2, [3]]`
+ - Printing of unicode identifiers has been improved
+
+## v4.6.11
+
+ - Read unused classes' properties and method keys, to figure out if they use other variables.
+ - Prevent inlining into block scopes when there are name collisions
+ - Functions are no longer inlined into parameter defaults, because they live in their own special scope.
+ - When inlining identity functions, take into account the fact they may be used to drop `this` in function calls.
+ - Nullish coalescing operator (`x ?? y`), plus basic optimization for it.
+ - Template literals in binary expressions such as `+` have been further optimized
+
+## v4.6.10
+
+ - Do not use reduce_vars when classes are present
+
+## v4.6.9
+
+ - Check if block scopes actually exist in blocks
+
+## v4.6.8
+
+ - Take into account "executed bits" of classes like static properties or computed keys, when checking if a class evaluation might throw or have side effects.
+
+## v4.6.7
+
+ - Some new performance gains through a `AST_Node.size()` method which measures a node's source code length without printing it to a string first.
+ - An issue with setting `--comments` to `false` in the CLI has been fixed.
+ - Fixed some issues with inlining
+ - `unsafe_symbols` compress option was added, which turns `Symbol("name")` into just `Symbol()`
+ - Brought back compress performance improvement through the `AST_Node.equivalent_to(other)` method (which was reverted in v4.6.6).
+
+## v4.6.6
+
+(hotfix release)
+
+ - Reverted code to 4.6.4 to allow for more time to investigate an issue.
+
+## v4.6.5 (REVERTED)
+
+ - Improved compress performance through using a new method to see if two nodes are equivalent, instead of printing them to a string.
+
+## v4.6.4
+
+ - The `"some"` value in the `comments` output option now preserves `@lic` and other important comments when using `//`
+ - `</script>` is now better escaped in regex, and in comments, when using the `inline_script` output option
+ - Fixed an issue when transforming `new RegExp` into `/.../` when slashes are included in the source
+ - `AST_Node.prototype.constructor` now exists, allowing for easier debugging of crashes
+ - Multiple if statements with the same consequents are now collapsed
+ - Typescript typings improvements
+ - Optimizations while looking for surrogate pairs in strings
+
+## v4.6.3
+
+ - Annotations such as `/*#__NOINLINE__*/` and `/*#__PURE__*/` may now be preserved using the `preserve_annotations` output option
+ - A TypeScript definition update for the `keep_quoted` output option.
+
+## v4.6.2
+
+ - A bug where functions were inlined into other functions with scope conflicts has been fixed.
+ - `/*#__NOINLINE__*/` annotation fixed for more use cases where inlining happens.
+
+## v4.6.1
+
+ - Fixed an issue where a class is duplicated by reduce_vars when there's a recursive reference to the class.
+
+## v4.6.0
+
+ - Fixed issues with recursive class references.
+ - BigInt evaluation has been prevented, stopping Terser from evaluating BigInts like it would do regular numbers.
+ - Class property support has been added
+
+## v4.5.1
+
+(hotfix release)
+
+ - Fixed issue where `() => ({})[something]` was not parenthesised correctly.
+
+## v4.5.0
+
+ - Inlining has been improved
+ - An issue where keep_fnames combined with functions declared through variables was causing name shadowing has been fixed
+ - You can now set the ES version through their year
+ - The output option `keep_numbers` has been added, which prevents Terser from turning `1000` into `1e3` and such
+ - Internal small optimisations and refactors
+
+## v4.4.3
+
+ - Number and BigInt parsing has been fixed
+ - `/*#__INLINE__*/` annotation fixed for arrow functions with non-block bodies.
+ - Functional tests have been added, using [this repository](https://github.com/terser/terser-functional-tests).
+ - A memory leak, where the entire AST lives on after compression, has been plugged.
+
+## v4.4.2
+
+ - Fixed a problem with inlining identity functions
+
+## v4.4.1
+
+*note:* This introduced a feature, therefore it should have been a minor release.
+
+ - Fixed a crash when `unsafe` was enabled.
+ - An issue has been fixed where `let` statements might be collapsed out of their scope.
+ - Some error messages have been improved by adding quotes around variable names.
+
+## v4.4.0
+
+ - Added `/*#__INLINE__*/` and `/*#__NOINLINE__*/` annotations for calls. If a call has one of these, it either forces or forbids inlining.
+
+## v4.3.11
+
+ - Fixed a problem where `window` was considered safe to access, even though there are situations where it isn't (Node.js, workers...)
+ - Fixed an error where `++` and `--` were considered side-effect free
+ - `Number(x)` now needs both `unsafe` and and `unsafe_math` to be compressed into `+x` because `x` might be a `BigInt`
+ - `keep_fnames` now correctly supports regexes when the function is in a variable declaration
+
+## v4.3.10
+
+ - Fixed syntax error when repeated semicolons were encountered in classes
+ - Fixed invalid output caused by the creation of empty sequences internally
+ - Scopes are now updated when scopes are inlined into them
+
+## v4.3.9
+ - Fixed issue with mangle's `keep_fnames` option, introduced when adding code to keep variable names of anonymous functions
+
+## v4.3.8
+
+ - Typescript typings fix
+
+## v4.3.7
+
+ - Parsing of regex options in the CLI (which broke in v4.3.5) was fixed.
+ - typescript definition updates
+
+## v4.3.6
+
+(crash hotfix)
+
+## v4.3.5
+
+ - Fixed an issue with DOS line endings strings separated by `\` and a new line.
+ - Improved fix for the output size regression related to unused references within the extends section of a class.
+ - Variable names of anonymous functions (eg: `const x = () => { ... }` or `var func = function () {...}`) are now preserved when keep_fnames is true.
+ - Fixed performance degradation introduced for large payloads in v4.2.0
+
+## v4.3.4
+
+ - Fixed a regression where the output size was increased when unused classes were referred to in the extends clause of a class.
+ - Small typescript typings fixes.
+ - Comments with `@preserve`, `@license`, `@cc_on` as well as comments starting with `/*!` and `/**!` are now preserved by default.
+
+## v4.3.3
+
+ - Fixed a problem where parsing template strings would mix up octal notation and a slash followed by a zero representing a null character.
+ - Started accepting the name `async` in destructuring arguments with default value.
+ - Now Terser takes into account side effects inside class `extends` clauses.
+ - Added parens whenever there's a comment between a return statement and the returned value, to prevent issues with ASI.
+ - Stopped using raw RegExp objects, since the spec is going to continue to evolve. This ensures Terser is able to process new, unknown RegExp flags and features. This is a breaking change in the AST node AST_RegExp.
+
+## v4.3.2
+
+ - Typescript typing fix
+ - Ensure that functions can't be inlined, by reduce_vars, into places where they're accessing variables with the same name, but from somewhere else.
+
+## v4.3.1
+
+ - Fixed an issue from 4.3.0 where any block scope within a for loop erroneously had its parent set to the function scopee
+ - Fixed an issue where compressing IIFEs with argument expansions would result in some parameters becoming undefined
+ - addEventListener options argument's properties are now part of the DOM properties list.
+
+## v4.3.0
+
+ - Do not drop computed object keys with side effects
+ - Functions passed to other functions in calls are now wrapped in parentheses by default, which speeds up loading most modules
+ - Objects with computed properties are now less likely to be hoisted
+ - Speed and memory efficiency optimizations
+ - Fixed scoping issues with `try` and `switch`
+
+## v4.2.1
+
+ - Minor refactors
+ - Fixed a bug similar to #369 in collapse_vars
+ - Functions can no longer be inlined into a place where they're going to be compared with themselves.
+ - reduce_funcs option is now legacy, as using reduce_vars without reduce_funcs caused some weird corner cases. As a result, it is now implied in reduce_vars and can't be turned off without turning off reduce_vars.
+ - Bug which would cause a random stack overflow has now been fixed.
+
+## v4.2.0
+
+ - When the source map URL is `inline`, don't write it to a file.
+ - Fixed output parens when a lambda literal is the tag on a tagged template string.
+ - The `mangle.properties.undeclared` option was added. This enables the property mangler to mangle properties of variables which can be found in the name cache, but whose properties are not known to this Terser run.
+ - The v8 bug where the toString and source representations of regexes like `RegExp("\\\n")` includes an actual newline is now fixed.
+ - Now we're guaranteed to not have duplicate comments in the output
+ - Domprops updates
+
+## v4.1.4
+
+ - Fixed a crash when inlining a function into somewhere else when it has interdependent, non-removable variables.
+
+## v4.1.3
+
+ - Several issues with the `reduce_vars` option were fixed.
+ - Starting this version, we only have a dist/bundle.min.js
+
+## v4.1.2
+
+ - The hotfix was hotfixed
+
+## v4.1.1
+
+ - Fixed a bug where toplevel scopes were being mixed up with lambda scopes
+
+## v4.1.0
+
+ - Internal functions were replaced by `Object.assign`, `Array.prototype.some`, `Array.prototype.find` and `Array.prototype.every`.
+ - A serious issue where some ESM-native code was broken was fixed.
+ - Performance improvements were made.
+ - Support for BigInt was added.
+ - Inline efficiency was improved. Functions are now being inlined more proactively instead of being inlined only after another Compressor pass.
+
+## v4.0.2
+
+(Hotfix release. Reverts unmapped segments PR [#342](https://github.com/terser/terser/pull/342), which will be put back on Terser when the upstream issue is resolved)
+
+## v4.0.1
+
+ - Collisions between the arguments of inlined functions and names in the outer scope are now being avoided while inlining
+ - Unmapped segments are now preserved when compressing a file which has source maps
+ - Default values of functions are now correctly converted from Mozilla AST to Terser AST
+ - JSON ⊂ ECMAScript spec (if you don't know what this is you don't need to)
+ - Export AST_* classes to library users
+ - Fixed issue with `collapse_vars` when functions are created with the same name as a variable which already exists
+ - Added `MutationObserverInit` (Object with options for initialising a mutation observer) properties to the DOM property list
+ - Custom `Error` subclasses are now internally used instead of old-school Error inheritance hacks.
+ - Documentation fixes
+ - Performance optimizations
+
+## v4.0.0
+
+ - **breaking change**: The `variables` property of all scopes has become a standard JavaScript `Map` as opposed to the old bespoke `Dictionary` object.
+ - Typescript definitions were fixed
+ - `terser --help` was fixed
+ - The public interface was cleaned up
+ - Fixed optimisation of `Array` and `new Array`
+ - Added the `keep_quoted=strict` mode to mangle_props, which behaves more like Google Closure Compiler by mangling all unquoted property names, instead of reserving quoted property names automatically.
+ - Fixed parent functions' parameters being shadowed in some cases
+ - Allowed Terser to run in a situation where there are custom functions attached to Object.prototype
+ - And more bug fixes, optimisations and internal changes
+
+## v3.17.0
+
+ - More DOM properties added to --mangle-properties's DOM property list
+ - Closed issue where if 2 functions had the same argument name, Terser would not inline them together properly
+ - Fixed issue with `hasOwnProperty.call`
+ - You can now list files to minify in a Terser config file
+ - Started replacing `new Array(<number>)` with an array literal
+ - Started using ES6 capabilities like `Set` and the `includes` method for strings and arrays
+
+## v3.16.1
+
+ - Fixed issue where Terser being imported with `import` would cause it not to work due to the `__esModule` property. (PR #254 was submitted, which was nice, but since it wasn't a pure commonJS approach I decided to go with my own solution)
+
+## v3.16.0
+
+ - No longer leaves names like Array or Object or window as a SimpleStatement (statement which is just a single expression).
+ - Add support for sections sourcemaps (IndexedSourceMapConsumer)
+ - Drops node.js v4 and starts using commonJS
+ - Is now built with rollup
+
+## v3.15.0
+
+ - Inlined spread syntax (`[...[1, 2, 3], 4, 5] => [1, 2, 3, 4, 5]`) in arrays and objects.
+ - Fixed typo in compressor warning
+ - Fixed inline source map input bug
+ - Fixed parsing of template literals with unnecessary escapes (Like `\\a`)
diff --git a/node_modules/terser/LICENSE b/node_modules/terser/LICENSE
new file mode 100644
index 0000000..4fdaa85
--- /dev/null
+++ b/node_modules/terser/LICENSE
@@ -0,0 +1,29 @@
+UglifyJS is released under the BSD license:
+
+Copyright 2012-2018 (c) Mihai Bazon <mihai.bazon@gmail.com>
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+    * Redistributions of source code must retain the above
+      copyright notice, this list of conditions and the following
+      disclaimer.
+
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials
+      provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
diff --git a/node_modules/terser/PATRONS.md b/node_modules/terser/PATRONS.md
new file mode 100644
index 0000000..b2c8949
--- /dev/null
+++ b/node_modules/terser/PATRONS.md
@@ -0,0 +1,15 @@
+# Our patrons
+
+These are the first-tier patrons from [Patreon](https://www.patreon.com/fabiosantoscode). My appreciation goes to everyone on this list for supporting the project!
+
+ * 38elements
+ * Alan Orozco
+ * Aria Buckles
+ * CKEditor
+ * Mariusz Nowak
+ * Nakshatra Mukhopadhyay
+ * Philippe Léger
+ * Piotrek Koszuliński
+ * Serhiy Shyyko
+ * Viktor Hubert
+ * 龙腾道
diff --git a/node_modules/terser/README.md b/node_modules/terser/README.md
new file mode 100644
index 0000000..a69dfa4
--- /dev/null
+++ b/node_modules/terser/README.md
@@ -0,0 +1,1390 @@
+<h1><img src="https://terser.org/img/terser-banner-logo.png" alt="Terser" width="400"></h1>
+
+  [![NPM Version][npm-image]][npm-url]
+  [![NPM Downloads][downloads-image]][downloads-url]
+  [![Travis Build][travis-image]][travis-url]
+  [![Opencollective financial contributors][opencollective-contributors]][opencollective-url]
+
+A JavaScript parser and mangler/compressor toolkit for ES6+.
+
+*note*: You can support this project on patreon: <a target="_blank" rel="nofollow" href="https://www.patreon.com/fabiosantoscode"><img src="https://c5.patreon.com/external/logo/become_a_patron_button@2x.png" alt="patron" width="100px" height="auto"></a>. Check out [PATRONS.md](https://github.com/terser/terser/blob/master/PATRONS.md) for our first-tier patrons.
+
+Terser recommends you use RollupJS to bundle your modules, as that produces smaller code overall.
+
+*Beautification* has been undocumented and is *being removed* from terser, we recommend you use [prettier](https://npmjs.com/package/prettier).
+
+Find the changelog in [CHANGELOG.md](https://github.com/terser/terser/blob/master/CHANGELOG.md)
+
+
+
+[npm-image]: https://img.shields.io/npm/v/terser.svg
+[npm-url]: https://npmjs.org/package/terser
+[downloads-image]: https://img.shields.io/npm/dm/terser.svg
+[downloads-url]: https://npmjs.org/package/terser
+[travis-image]: https://img.shields.io/travis/terser/terser/master.svg
+[travis-url]: https://travis-ci.org/terser/terser
+[opencollective-contributors]: https://opencollective.com/terser/tiers/badge.svg
+[opencollective-url]: https://opencollective.com/terser
+
+Why choose terser?
+------------------
+
+`uglify-es` is [no longer maintained](https://github.com/mishoo/UglifyJS2/issues/3156#issuecomment-392943058) and `uglify-js` does not support ES6+.
+
+**`terser`** is a fork of `uglify-es` that mostly retains API and CLI compatibility
+with `uglify-es` and `uglify-js@3`.
+
+Install
+-------
+
+First make sure you have installed the latest version of [node.js](http://nodejs.org/)
+(You may need to restart your computer after this step).
+
+From NPM for use as a command line app:
+
+    npm install terser -g
+
+From NPM for programmatic use:
+
+    npm install terser
+
+# Command line usage
+
+    terser [input files] [options]
+
+Terser can take multiple input files.  It's recommended that you pass the
+input files first, then pass the options.  Terser will parse input files
+in sequence and apply any compression options.  The files are parsed in the
+same global scope, that is, a reference from a file to some
+variable/function declared in another file will be matched properly.
+
+If no input file is specified, Terser will read from STDIN.
+
+If you wish to pass your options before the input files, separate the two with
+a double dash to prevent input files being used as option arguments:
+
+    terser --compress --mangle -- input.js
+
+### Command line options
+
+```
+    -h, --help                  Print usage information.
+                                `--help options` for details on available options.
+    -V, --version               Print version number.
+    -p, --parse <options>       Specify parser options:
+                                `acorn`  Use Acorn for parsing.
+                                `bare_returns`  Allow return outside of functions.
+                                                Useful when minifying CommonJS
+                                                modules and Userscripts that may
+                                                be anonymous function wrapped (IIFE)
+                                                by the .user.js engine `caller`.
+                                `expression`  Parse a single expression, rather than
+                                              a program (for parsing JSON).
+                                `spidermonkey`  Assume input files are SpiderMonkey
+                                                AST format (as JSON).
+    -c, --compress [options]    Enable compressor/specify compressor options:
+                                `pure_funcs`  List of functions that can be safely
+                                              removed when their return values are
+                                              not used.
+    -m, --mangle [options]      Mangle names/specify mangler options:
+                                `reserved`  List of names that should not be mangled.
+    --mangle-props [options]    Mangle properties/specify mangler options:
+                                `builtins`  Mangle property names that overlaps
+                                            with standard JavaScript globals and DOM
+                                            API props.
+                                `debug`  Add debug prefix and suffix.
+                                `keep_quoted`  Only mangle unquoted properties, quoted
+                                               properties are automatically reserved.
+                                               `strict` disables quoted properties
+                                               being automatically reserved.
+                                `regex`  Only mangle matched property names.
+                                `reserved`  List of names that should not be mangled.
+    -b, --beautify [options]     Specify output options:
+                                `preamble`  Preamble to prepend to the output. You
+                                            can use this to insert a comment, for
+                                            example for licensing information.
+                                            This will not be parsed, but the source
+                                            map will adjust for its presence.
+                                `quote_style`  Quote style:
+                                               0 - auto
+                                               1 - single
+                                               2 - double
+                                               3 - original
+                                `wrap_iife`  Wrap IIFEs in parenthesis. Note: you may
+                                             want to disable `negate_iife` under
+                                             compressor options.
+                                `wrap_func_args`  Wrap function arguments in parenthesis.
+    -o, --output <file>         Output file path (default STDOUT). Specify `ast` or
+                                `spidermonkey` to write Terser or SpiderMonkey AST
+                                as JSON to STDOUT respectively.
+    --comments [filter]         Preserve copyright comments in the output. By
+                                default this works like Google Closure, keeping
+                                JSDoc-style comments that contain "@license" or
+                                "@preserve". You can optionally pass one of the
+                                following arguments to this flag:
+                                - "all" to keep all comments
+                                - `false` to omit comments in the output
+                                - a valid JS RegExp like `/foo/` or `/^!/` to
+                                keep only matching comments.
+                                Note that currently not *all* comments can be
+                                kept when compression is on, because of dead
+                                code removal or cascading statements into
+                                sequences.
+    --config-file <file>        Read `minify()` options from JSON file.
+    -d, --define <expr>[=value] Global definitions.
+    --ecma <version>            Specify ECMAScript release: 5, 2015, 2016, etc.
+    -e, --enclose [arg[:value]] Embed output in a big function with configurable
+                                arguments and values.
+    --ie8                       Support non-standard Internet Explorer 8.
+                                Equivalent to setting `ie8: true` in `minify()`
+                                for `compress`, `mangle` and `output` options.
+                                By default Terser will not try to be IE-proof.
+    --keep-classnames           Do not mangle/drop class names.
+    --keep-fnames               Do not mangle/drop function names.  Useful for
+                                code relying on Function.prototype.name.
+    --module                    Input is an ES6 module. If `compress` or `mangle` is
+                                enabled then the `toplevel` option will be enabled.
+    --name-cache <file>         File to hold mangled name mappings.
+    --safari10                  Support non-standard Safari 10/11.
+                                Equivalent to setting `safari10: true` in `minify()`
+                                for `mangle` and `output` options.
+                                By default `terser` will not work around
+                                Safari 10/11 bugs.
+    --source-map [options]      Enable source map/specify source map options:
+                                `base`  Path to compute relative paths from input files.
+                                `content`  Input source map, useful if you're compressing
+                                           JS that was generated from some other original
+                                           code. Specify "inline" if the source map is
+                                           included within the sources.
+                                `filename`  Name and/or location of the output source.
+                                `includeSources`  Pass this flag if you want to include
+                                                  the content of source files in the
+                                                  source map as sourcesContent property.
+                                `root`  Path to the original source to be included in
+                                        the source map.
+                                `url`  If specified, path to the source map to append in
+                                       `//# sourceMappingURL`.
+    --timings                   Display operations run time on STDERR.
+    --toplevel                  Compress and/or mangle variables in top level scope.
+    --verbose                   Print diagnostic messages.
+    --warn                      Print warning messages.
+    --wrap <name>               Embed everything in a big function, making the
+                                “exports” and “global” variables available. You
+                                need to pass an argument to this option to
+                                specify the name that your module will take
+                                when included in, say, a browser.
+```
+
+Specify `--output` (`-o`) to declare the output file.  Otherwise the output
+goes to STDOUT.
+
+## CLI source map options
+
+Terser can generate a source map file, which is highly useful for
+debugging your compressed JavaScript.  To get a source map, pass
+`--source-map --output output.js` (source map will be written out to
+`output.js.map`).
+
+Additional options:
+
+- `--source-map "filename='<NAME>'"` to specify the name of the source map.
+
+- `--source-map "root='<URL>'"` to pass the URL where the original files can be found.
+
+- `--source-map "url='<URL>'"` to specify the URL where the source map can be found.
+  Otherwise Terser assumes HTTP `X-SourceMap` is being used and will omit the
+  `//# sourceMappingURL=` directive.
+
+For example:
+
+    terser js/file1.js js/file2.js \
+             -o foo.min.js -c -m \
+             --source-map "root='http://foo.com/src',url='foo.min.js.map'"
+
+The above will compress and mangle `file1.js` and `file2.js`, will drop the
+output in `foo.min.js` and the source map in `foo.min.js.map`.  The source
+mapping will refer to `http://foo.com/src/js/file1.js` and
+`http://foo.com/src/js/file2.js` (in fact it will list `http://foo.com/src`
+as the source map root, and the original files as `js/file1.js` and
+`js/file2.js`).
+
+### Composed source map
+
+When you're compressing JS code that was output by a compiler such as
+CoffeeScript, mapping to the JS code won't be too helpful.  Instead, you'd
+like to map back to the original code (i.e. CoffeeScript).  Terser has an
+option to take an input source map.  Assuming you have a mapping from
+CoffeeScript → compiled JS, Terser can generate a map from CoffeeScript →
+compressed JS by mapping every token in the compiled JS to its original
+location.
+
+To use this feature pass `--source-map "content='/path/to/input/source.map'"`
+or `--source-map "content=inline"` if the source map is included inline with
+the sources.
+
+## CLI compress options
+
+You need to pass `--compress` (`-c`) to enable the compressor.  Optionally
+you can pass a comma-separated list of [compress options](#compress-options).
+
+Options are in the form `foo=bar`, or just `foo` (the latter implies
+a boolean option that you want to set `true`; it's effectively a
+shortcut for `foo=true`).
+
+Example:
+
+    terser file.js -c toplevel,sequences=false
+
+## CLI mangle options
+
+To enable the mangler you need to pass `--mangle` (`-m`).  The following
+(comma-separated) options are supported:
+
+- `toplevel` (default `false`) -- mangle names declared in the top level scope.
+
+- `eval` (default `false`) -- mangle names visible in scopes where `eval` or `with` are used.
+
+When mangling is enabled but you want to prevent certain names from being
+mangled, you can declare those names with `--mangle reserved` — pass a
+comma-separated list of names.  For example:
+
+    terser ... -m reserved=['$','require','exports']
+
+to prevent the `require`, `exports` and `$` names from being changed.
+
+### CLI mangling property names (`--mangle-props`)
+
+**Note:** THIS **WILL** BREAK YOUR CODE. A good rule of thumb is not to use this unless you know exactly what you're doing and how this works and read this section until the end.
+
+Mangling property names is a separate step, different from variable name mangling.  Pass
+`--mangle-props` to enable it. The least dangerous
+way to use this is to use the `regex` option like so:
+
+```
+terser example.js -c -m --mangle-props regex=/_$/
+```
+
+This will mangle all properties that end with an
+underscore. So you can use it to mangle internal methods.
+
+By default, it will mangle all properties in the
+input code with the exception of built in DOM properties and properties
+in core JavaScript classes, which is what will break your code if you don't:
+
+1. Control all the code you're mangling
+2. Avoid using a module bundler, as they usually will call Terser on each file individually, making it impossible to pass mangled objects between modules.
+3. Avoid calling functions like `defineProperty` or `hasOwnProperty`, because they refer to object properties using strings and will break your code if you don't know what you are doing.
+
+An example:
+
+```javascript
+// example.js
+var x = {
+    baz_: 0,
+    foo_: 1,
+    calc: function() {
+        return this.foo_ + this.baz_;
+    }
+};
+x.bar_ = 2;
+x["baz_"] = 3;
+console.log(x.calc());
+```
+Mangle all properties (except for JavaScript `builtins`) (**very** unsafe):
+```bash
+$ terser example.js -c passes=2 -m --mangle-props
+```
+```javascript
+var x={o:3,t:1,i:function(){return this.t+this.o},s:2};console.log(x.i());
+```
+Mangle all properties except for `reserved` properties (still very unsafe):
+```bash
+$ terser example.js -c passes=2 -m --mangle-props reserved=[foo_,bar_]
+```
+```javascript
+var x={o:3,foo_:1,t:function(){return this.foo_+this.o},bar_:2};console.log(x.t());
+```
+Mangle all properties matching a `regex` (not as unsafe but still unsafe):
+```bash
+$ terser example.js -c passes=2 -m --mangle-props regex=/_$/
+```
+```javascript
+var x={o:3,t:1,calc:function(){return this.t+this.o},i:2};console.log(x.calc());
+```
+
+Combining mangle properties options:
+```bash
+$ terser example.js -c passes=2 -m --mangle-props regex=/_$/,reserved=[bar_]
+```
+```javascript
+var x={o:3,t:1,calc:function(){return this.t+this.o},bar_:2};console.log(x.calc());
+```
+
+In order for this to be of any use, we avoid mangling standard JS names and DOM
+API properties by default (`--mangle-props builtins` to override).
+
+A regular expression can be used to define which property names should be
+mangled.  For example, `--mangle-props regex=/^_/` will only mangle property
+names that start with an underscore.
+
+When you compress multiple files using this option, in order for them to
+work together in the end we need to ensure somehow that one property gets
+mangled to the same name in all of them.  For this, pass `--name-cache filename.json`
+and Terser will maintain these mappings in a file which can then be reused.
+It should be initially empty.  Example:
+
+```bash
+$ rm -f /tmp/cache.json  # start fresh
+$ terser file1.js file2.js --mangle-props --name-cache /tmp/cache.json -o part1.js
+$ terser file3.js file4.js --mangle-props --name-cache /tmp/cache.json -o part2.js
+```
+
+Now, `part1.js` and `part2.js` will be consistent with each other in terms
+of mangled property names.
+
+Using the name cache is not necessary if you compress all your files in a
+single call to Terser.
+
+### Mangling unquoted names (`--mangle-props keep_quoted`)
+
+Using quoted property name (`o["foo"]`) reserves the property name (`foo`)
+so that it is not mangled throughout the entire script even when used in an
+unquoted style (`o.foo`). Example:
+
+```javascript
+// stuff.js
+var o = {
+    "foo": 1,
+    bar: 3
+};
+o.foo += o.bar;
+console.log(o.foo);
+```
+```bash
+$ terser stuff.js --mangle-props keep_quoted -c -m
+```
+```javascript
+var o={foo:1,o:3};o.foo+=o.o,console.log(o.foo);
+```
+
+### Debugging property name mangling
+
+You can also pass `--mangle-props debug` in order to mangle property names
+without completely obscuring them. For example the property `o.foo`
+would mangle to `o._$foo$_` with this option. This allows property mangling
+of a large codebase while still being able to debug the code and identify
+where mangling is breaking things.
+
+```bash
+$ terser stuff.js --mangle-props debug -c -m
+```
+```javascript
+var o={_$foo$_:1,_$bar$_:3};o._$foo$_+=o._$bar$_,console.log(o._$foo$_);
+```
+
+You can also pass a custom suffix using `--mangle-props debug=XYZ`. This would then
+mangle `o.foo` to `o._$foo$XYZ_`. You can change this each time you compile a
+script to identify how a property got mangled. One technique is to pass a
+random number on every compile to simulate mangling changing with different
+inputs (e.g. as you update the input script with new properties), and to help
+identify mistakes like writing mangled keys to storage.
+
+
+# API Reference
+
+Assuming installation via NPM, you can load Terser in your application
+like this:
+```javascript
+var Terser = require("terser");
+```
+Browser loading is also supported:
+```html
+<script src="node_modules/source-map/dist/source-map.min.js"></script>
+<script src="dist/bundle.min.js"></script>
+```
+
+There is a single high level function, **`minify(code, options)`**,
+which will perform all minification [phases](#minify-options) in a configurable
+manner. By default `minify()` will enable the options [`compress`](#compress-options)
+and [`mangle`](#mangle-options). Example:
+```javascript
+var code = "function add(first, second) { return first + second; }";
+var result = Terser.minify(code);
+console.log(result.error); // runtime error, or `undefined` if no error
+console.log(result.code);  // minified output: function add(n,d){return n+d}
+```
+
+You can `minify` more than one JavaScript file at a time by using an object
+for the first argument where the keys are file names and the values are source
+code:
+```javascript
+var code = {
+    "file1.js": "function add(first, second) { return first + second; }",
+    "file2.js": "console.log(add(1 + 2, 3 + 4));"
+};
+var result = Terser.minify(code);
+console.log(result.code);
+// function add(d,n){return d+n}console.log(add(3,7));
+```
+
+The `toplevel` option:
+```javascript
+var code = {
+    "file1.js": "function add(first, second) { return first + second; }",
+    "file2.js": "console.log(add(1 + 2, 3 + 4));"
+};
+var options = { toplevel: true };
+var result = Terser.minify(code, options);
+console.log(result.code);
+// console.log(3+7);
+```
+
+The `nameCache` option:
+```javascript
+var options = {
+    mangle: {
+        toplevel: true,
+    },
+    nameCache: {}
+};
+var result1 = Terser.minify({
+    "file1.js": "function add(first, second) { return first + second; }"
+}, options);
+var result2 = Terser.minify({
+    "file2.js": "console.log(add(1 + 2, 3 + 4));"
+}, options);
+console.log(result1.code);
+// function n(n,r){return n+r}
+console.log(result2.code);
+// console.log(n(3,7));
+```
+
+You may persist the name cache to the file system in the following way:
+```javascript
+var cacheFileName = "/tmp/cache.json";
+var options = {
+    mangle: {
+        properties: true,
+    },
+    nameCache: JSON.parse(fs.readFileSync(cacheFileName, "utf8"))
+};
+fs.writeFileSync("part1.js", Terser.minify({
+    "file1.js": fs.readFileSync("file1.js", "utf8"),
+    "file2.js": fs.readFileSync("file2.js", "utf8")
+}, options).code, "utf8");
+fs.writeFileSync("part2.js", Terser.minify({
+    "file3.js": fs.readFileSync("file3.js", "utf8"),
+    "file4.js": fs.readFileSync("file4.js", "utf8")
+}, options).code, "utf8");
+fs.writeFileSync(cacheFileName, JSON.stringify(options.nameCache), "utf8");
+```
+
+An example of a combination of `minify()` options:
+```javascript
+var code = {
+    "file1.js": "function add(first, second) { return first + second; }",
+    "file2.js": "console.log(add(1 + 2, 3 + 4));"
+};
+var options = {
+    toplevel: true,
+    compress: {
+        global_defs: {
+            "@console.log": "alert"
+        },
+        passes: 2
+    },
+    output: {
+        beautify: false,
+        preamble: "/* minified */"
+    }
+};
+var result = Terser.minify(code, options);
+console.log(result.code);
+// /* minified */
+// alert(10);"
+```
+
+To produce warnings:
+```javascript
+var code = "function f(){ var u; return 2 + 3; }";
+var options = { warnings: true };
+var result = Terser.minify(code, options);
+console.log(result.error);    // runtime error, `undefined` in this case
+console.log(result.warnings); // [ 'Dropping unused variable u [0:1,18]' ]
+console.log(result.code);     // function f(){return 5}
+```
+
+An error example:
+```javascript
+var result = Terser.minify({"foo.js" : "if (0) else console.log(1);"});
+console.log(JSON.stringify(result.error));
+// {"message":"Unexpected token: keyword (else)","filename":"foo.js","line":1,"col":7,"pos":7}
+```
+Note: unlike `uglify-js@2.x`, the Terser API does not throw errors.
+To achieve a similar effect one could do the following:
+```javascript
+var result = Terser.minify(code, options);
+if (result.error) throw result.error;
+```
+
+## Minify options
+
+- `ecma` (default `undefined`) - pass `5`, `2015`, `2016`, etc to override `parse`,
+  `compress` and `output`'s `ecma` options.
+
+- `warnings` (default `false`) — pass `true` to return compressor warnings
+  in `result.warnings`. Use the value `"verbose"` for more detailed warnings.
+
+- `parse` (default `{}`) — pass an object if you wish to specify some
+  additional [parse options](#parse-options).
+
+- `compress` (default `{}`) — pass `false` to skip compressing entirely.
+  Pass an object to specify custom [compress options](#compress-options).
+
+- `mangle` (default `true`) — pass `false` to skip mangling names, or pass
+  an object to specify [mangle options](#mangle-options) (see below).
+
+  - `mangle.properties` (default `false`) — a subcategory of the mangle option.
+    Pass an object to specify custom [mangle property options](#mangle-properties-options).
+
+- `module` (default `false`) — Use when minifying an ES6 module. "use strict"
+  is implied and names can be mangled on the top scope. If `compress` or
+  `mangle` is enabled then the `toplevel` option will be enabled.
+
+- `output` (default `null`) — pass an object if you wish to specify
+  additional [output options](#output-options).  The defaults are optimized
+  for best compression.
+
+- `sourceMap` (default `false`) - pass an object if you wish to specify
+  [source map options](#source-map-options).
+
+- `toplevel` (default `false`) - set to `true` if you wish to enable top level
+  variable and function name mangling and to drop unused variables and functions.
+
+- `nameCache` (default `null`) - pass an empty object `{}` or a previously
+  used `nameCache` object if you wish to cache mangled variable and
+  property names across multiple invocations of `minify()`. Note: this is
+  a read/write property. `minify()` will read the name cache state of this
+  object and update it during minification so that it may be
+  reused or externally persisted by the user.
+
+- `ie8` (default `false`) - set to `true` to support IE8.
+
+- `keep_classnames` (default: `undefined`) - pass `true` to prevent discarding or mangling
+  of class names. Pass a regular expression to only keep class names matching that regex.
+
+- `keep_fnames` (default: `false`) - pass `true` to prevent discarding or mangling
+  of function names. Pass a regular expression to only keep class names matching that regex.
+  Useful for code relying on `Function.prototype.name`. If the top level minify option
+  `keep_classnames` is `undefined` it will be overridden with the value of the top level
+  minify option `keep_fnames`.
+
+- `safari10` (default: `false`) - pass `true` to work around Safari 10/11 bugs in
+  loop scoping and `await`. See `safari10` options in [`mangle`](#mangle-options)
+  and [`output`](#output-options) for details.
+
+## Minify options structure
+
+```javascript
+{
+    parse: {
+        // parse options
+    },
+    compress: {
+        // compress options
+    },
+    mangle: {
+        // mangle options
+
+        properties: {
+            // mangle property options
+        }
+    },
+    output: {
+        // output options
+    },
+    sourceMap: {
+        // source map options
+    },
+    ecma: 5, // specify one of: 5, 2015, 2016, etc.
+    keep_classnames: false,
+    keep_fnames: false,
+    ie8: false,
+    module: false,
+    nameCache: null, // or specify a name cache object
+    safari10: false,
+    toplevel: false,
+    warnings: false,
+}
+```
+
+### Source map options
+
+To generate a source map:
+```javascript
+var result = Terser.minify({"file1.js": "var a = function() {};"}, {
+    sourceMap: {
+        filename: "out.js",
+        url: "out.js.map"
+    }
+});
+console.log(result.code); // minified output
+console.log(result.map);  // source map
+```
+
+Note that the source map is not saved in a file, it's just returned in
+`result.map`.  The value passed for `sourceMap.url` is only used to set
+`//# sourceMappingURL=out.js.map` in `result.code`. The value of
+`filename` is only used to set `file` attribute (see [the spec][sm-spec])
+in source map file.
+
+You can set option `sourceMap.url` to be `"inline"` and source map will
+be appended to code.
+
+You can also specify sourceRoot property to be included in source map:
+```javascript
+var result = Terser.minify({"file1.js": "var a = function() {};"}, {
+    sourceMap: {
+        root: "http://example.com/src",
+        url: "out.js.map"
+    }
+});
+```
+
+If you're compressing compiled JavaScript and have a source map for it, you
+can use `sourceMap.content`:
+```javascript
+var result = Terser.minify({"compiled.js": "compiled code"}, {
+    sourceMap: {
+        content: "content from compiled.js.map",
+        url: "minified.js.map"
+    }
+});
+// same as before, it returns `code` and `map`
+```
+
+If you're using the `X-SourceMap` header instead, you can just omit `sourceMap.url`.
+
+If you happen to need the source map as a raw object, set `sourceMap.asObject` to `true`.
+
+## Parse options
+
+- `bare_returns` (default `false`) -- support top level `return` statements
+
+- `ecma` (default: `2017`) -- specify one of `5`, `2015`, `2016` or `2017`. Note: this setting
+  is not presently enforced except for ES8 optional trailing commas in function
+  parameter lists and calls with `ecma` `2017`.
+
+- `html5_comments` (default `true`)
+
+- `shebang` (default `true`) -- support `#!command` as the first line
+
+## Compress options
+
+- `defaults` (default: `true`) -- Pass `false` to disable most default
+  enabled `compress` transforms. Useful when you only want to enable a few
+  `compress` options while disabling the rest.
+
+- `arrows` (default: `true`) -- Class and object literal methods are converted
+  will also be converted to arrow expressions if the resultant code is shorter:
+  `m(){return x}` becomes `m:()=>x`. To do this to regular ES5 functions which
+  don't use `this` or `arguments`, see `unsafe_arrows`.
+
+- `arguments` (default: `false`) -- replace `arguments[index]` with function
+  parameter name whenever possible.
+
+- `booleans` (default: `true`) -- various optimizations for boolean context,
+  for example `!!a ? b : c → a ? b : c`
+
+- `booleans_as_integers` (default: `false`) -- Turn booleans into 0 and 1, also
+  makes comparisons with booleans use `==` and `!=` instead of `===` and `!==`.
+
+- `collapse_vars` (default: `true`) -- Collapse single-use non-constant variables,
+  side effects permitting.
+
+- `comparisons` (default: `true`) -- apply certain optimizations to binary nodes,
+  e.g. `!(a <= b) → a > b` (only when `unsafe_comps`), attempts to negate binary
+  nodes, e.g. `a = !b && !c && !d && !e → a=!(b||c||d||e)` etc.
+
+- `computed_props` (default: `true`) -- Transforms constant computed properties
+  into regular ones: `{["computed"]: 1}` is converted to `{computed: 1}`.
+
+- `conditionals` (default: `true`) -- apply optimizations for `if`-s and conditional
+  expressions
+
+- `dead_code` (default: `true`) -- remove unreachable code
+
+- `directives` (default: `true`) -- remove redundant or non-standard directives
+
+- `drop_console` (default: `false`) -- Pass `true` to discard calls to
+  `console.*` functions. If you wish to drop a specific function call
+  such as `console.info` and/or retain side effects from function arguments
+  after dropping the function call then use `pure_funcs` instead.
+
+- `drop_debugger` (default: `true`) -- remove `debugger;` statements
+
+- `ecma` (default: `5`) -- Pass `2015` or greater to enable `compress` options that
+  will transform ES5 code into smaller ES6+ equivalent forms.
+
+- `evaluate` (default: `true`) -- attempt to evaluate constant expressions
+
+- `expression` (default: `false`) -- Pass `true` to preserve completion values
+  from terminal statements without `return`, e.g. in bookmarklets.
+
+- `global_defs` (default: `{}`) -- see [conditional compilation](#conditional-compilation)
+
+- `hoist_funs` (default: `false`) -- hoist function declarations
+
+- `hoist_props` (default: `true`) -- hoist properties from constant object and
+  array literals into regular variables subject to a set of constraints. For example:
+  `var o={p:1, q:2}; f(o.p, o.q);` is converted to `f(1, 2);`. Note: `hoist_props`
+  works best with `mangle` enabled, the `compress` option `passes` set to `2` or higher,
+  and the `compress` option `toplevel` enabled.
+
+- `hoist_vars` (default: `false`) -- hoist `var` declarations (this is `false`
+  by default because it seems to increase the size of the output in general)
+
+- `if_return` (default: `true`) -- optimizations for if/return and if/continue
+
+- `inline` (default: `true`) -- inline calls to function with simple/`return` statement:
+  - `false` -- same as `0`
+  - `0` -- disabled inlining
+  - `1` -- inline simple functions
+  - `2` -- inline functions with arguments
+  - `3` -- inline functions with arguments and variables
+  - `true` -- same as `3`
+
+- `join_vars` (default: `true`) -- join consecutive `var` statements
+
+- `keep_classnames` (default: `false`) -- Pass `true` to prevent the compressor from
+  discarding class names. Pass a regular expression to only keep class names matching
+  that regex. See also: the `keep_classnames` [mangle option](#mangle).
+
+- `keep_fargs` (default: `true`) -- Prevents the compressor from discarding unused
+  function arguments.  You need this for code which relies on `Function.length`.
+
+- `keep_fnames` (default: `false`) -- Pass `true` to prevent the
+  compressor from discarding function names. Pass a regular expression to only keep
+  function names matching that regex. Useful for code relying on `Function.prototype.name`.
+  See also: the `keep_fnames` [mangle option](#mangle).
+
+- `keep_infinity` (default: `false`) -- Pass `true` to prevent `Infinity` from
+  being compressed into `1/0`, which may cause performance issues on Chrome.
+
+- `loops` (default: `true`) -- optimizations for `do`, `while` and `for` loops
+  when we can statically determine the condition.
+
+- `module` (default `false`) -- Pass `true` when compressing an ES6 module. Strict
+  mode is implied and the `toplevel` option as well.
+
+- `negate_iife` (default: `true`) -- negate "Immediately-Called Function Expressions"
+  where the return value is discarded, to avoid the parens that the
+  code generator would insert.
+
+- `passes` (default: `1`) -- The maximum number of times to run compress.
+  In some cases more than one pass leads to further compressed code.  Keep in
+  mind more passes will take more time.
+
+- `properties` (default: `true`) -- rewrite property access using the dot notation, for
+  example `foo["bar"] → foo.bar`
+
+- `pure_funcs` (default: `null`) -- You can pass an array of names and
+  Terser will assume that those functions do not produce side
+  effects.  DANGER: will not check if the name is redefined in scope.
+  An example case here, for instance `var q = Math.floor(a/b)`.  If
+  variable `q` is not used elsewhere, Terser will drop it, but will
+  still keep the `Math.floor(a/b)`, not knowing what it does.  You can
+  pass `pure_funcs: [ 'Math.floor' ]` to let it know that this
+  function won't produce any side effect, in which case the whole
+  statement would get discarded.  The current implementation adds some
+  overhead (compression will be slower).
+
+- `pure_getters` (default: `"strict"`) -- If you pass `true` for
+  this, Terser will assume that object property access
+  (e.g. `foo.bar` or `foo["bar"]`) doesn't have any side effects.
+  Specify `"strict"` to treat `foo.bar` as side-effect-free only when
+  `foo` is certain to not throw, i.e. not `null` or `undefined`.
+
+- `reduce_funcs` (legacy option, safely ignored for backwards compatibility).
+
+- `reduce_vars` (default: `true`) -- Improve optimization on variables assigned with and
+  used as constant values.
+
+- `sequences` (default: `true`) -- join consecutive simple statements using the
+  comma operator.  May be set to a positive integer to specify the maximum number
+  of consecutive comma sequences that will be generated. If this option is set to
+  `true` then the default `sequences` limit is `200`. Set option to `false` or `0`
+  to disable. The smallest `sequences` length is `2`. A `sequences` value of `1`
+  is grandfathered to be equivalent to `true` and as such means `200`. On rare
+  occasions the default sequences limit leads to very slow compress times in which
+  case a value of `20` or less is recommended.
+
+- `side_effects` (default: `true`) -- Pass `false` to disable potentially dropping
+  function calls marked as "pure".  A function call is marked as "pure" if a comment
+  annotation `/*@__PURE__*/` or `/*#__PURE__*/` immediately precedes the call. For
+  example: `/*@__PURE__*/foo();`
+
+- `switches` (default: `true`) -- de-duplicate and remove unreachable `switch` branches
+
+- `toplevel` (default: `false`) -- drop unreferenced functions (`"funcs"`) and/or
+  variables (`"vars"`) in the top level scope (`false` by default, `true` to drop
+  both unreferenced functions and variables)
+
+- `top_retain` (default: `null`) -- prevent specific toplevel functions and
+  variables from `unused` removal (can be array, comma-separated, RegExp or
+  function. Implies `toplevel`)
+
+- `typeofs` (default: `true`) -- Transforms `typeof foo == "undefined"` into
+  `foo === void 0`.  Note: recommend to set this value to `false` for IE10 and
+  earlier versions due to known issues.
+
+- `unsafe` (default: `false`) -- apply "unsafe" transformations
+  ([details](#the-unsafe-compress-option)).
+
+- `unsafe_arrows` (default: `false`) -- Convert ES5 style anonymous function
+  expressions to arrow functions if the function body does not reference `this`.
+  Note: it is not always safe to perform this conversion if code relies on the
+  the function having a `prototype`, which arrow functions lack.
+  This transform requires that the `ecma` compress option is set to `2015` or greater.
+
+- `unsafe_comps` (default: `false`) -- Reverse `<` and `<=` to `>` and `>=` to
+  allow improved compression. This might be unsafe when an at least one of two
+  operands is an object with computed values due the use of methods like `get`,
+  or `valueOf`. This could cause change in execution order after operands in the
+  comparison are switching. Compression only works if both `comparisons` and
+  `unsafe_comps` are both set to true.
+
+- `unsafe_Function` (default: `false`) -- compress and mangle `Function(args, code)`
+  when both `args` and `code` are string literals.
+
+- `unsafe_math` (default: `false`) -- optimize numerical expressions like
+  `2 * x * 3` into `6 * x`, which may give imprecise floating point results.
+
+- `unsafe_symbols` (default: `false`) -- removes keys from native Symbol 
+  declarations, e.g `Symbol("kDog")` becomes `Symbol()`.
+
+- `unsafe_methods` (default: false) -- Converts `{ m: function(){} }` to
+  `{ m(){} }`. `ecma` must be set to `6` or greater to enable this transform.
+  If `unsafe_methods` is a RegExp then key/value pairs with keys matching the
+  RegExp will be converted to concise methods.
+  Note: if enabled there is a risk of getting a "`<method name>` is not a
+  constructor" TypeError should any code try to `new` the former function.
+
+- `unsafe_proto` (default: `false`) -- optimize expressions like
+  `Array.prototype.slice.call(a)` into `[].slice.call(a)`
+
+- `unsafe_regexp` (default: `false`) -- enable substitutions of variables with
+  `RegExp` values the same way as if they are constants.
+
+- `unsafe_undefined` (default: `false`) -- substitute `void 0` if there is a
+  variable named `undefined` in scope (variable name will be mangled, typically
+  reduced to a single character)
+
+- `unused` (default: `true`) -- drop unreferenced functions and variables (simple
+  direct variable assignments do not count as references unless set to `"keep_assign"`)
+
+- `warnings` (default: `false`) -- display warnings when dropping unreachable
+  code or unused declarations etc.
+
+## Mangle options
+
+- `eval` (default `false`) -- Pass `true` to mangle names visible in scopes
+  where `eval` or `with` are used.
+
+- `keep_classnames` (default `false`) -- Pass `true` to not mangle class names.
+  Pass a regular expression to only keep class names matching that regex.
+  See also: the `keep_classnames` [compress option](#compress-options).
+
+- `keep_fnames` (default `false`) -- Pass `true` to not mangle function names.
+  Pass a regular expression to only keep class names matching that regex.
+  Useful for code relying on `Function.prototype.name`. See also: the `keep_fnames`
+  [compress option](#compress-options).
+
+- `module` (default `false`) -- Pass `true` an ES6 modules, where the toplevel
+  scope is not the global scope. Implies `toplevel`.
+
+- `reserved` (default `[]`) -- Pass an array of identifiers that should be
+  excluded from mangling. Example: `["foo", "bar"]`.
+
+- `toplevel` (default `false`) -- Pass `true` to mangle names declared in the
+  top level scope.
+
+- `safari10` (default `false`) -- Pass `true` to work around the Safari 10 loop
+  iterator [bug](https://bugs.webkit.org/show_bug.cgi?id=171041)
+  "Cannot declare a let variable twice".
+  See also: the `safari10` [output option](#output-options).
+
+Examples:
+
+```javascript
+// test.js
+var globalVar;
+function funcName(firstLongName, anotherLongName) {
+    var myVariable = firstLongName +  anotherLongName;
+}
+```
+```javascript
+var code = fs.readFileSync("test.js", "utf8");
+
+Terser.minify(code).code;
+// 'function funcName(a,n){}var globalVar;'
+
+Terser.minify(code, { mangle: { reserved: ['firstLongName'] } }).code;
+// 'function funcName(firstLongName,a){}var globalVar;'
+
+Terser.minify(code, { mangle: { toplevel: true } }).code;
+// 'function n(n,a){}var a;'
+```
+
+### Mangle properties options
+
+- `builtins` (default: `false`) — Use `true` to allow the mangling of builtin
+  DOM properties. Not recommended to override this setting.
+
+- `debug` (default: `false`) — Mangle names with the original name still present.
+  Pass an empty string `""` to enable, or a non-empty string to set the debug suffix.
+
+- `keep_quoted` (default: `false`) — Only mangle unquoted property names.
+  - `true` -- Quoted property names are automatically reserved and any unquoted
+    property names will not be mangled.
+  - `"strict"` -- Advanced, all unquoted property names are mangled unless
+    explicitly reserved.
+
+- `regex` (default: `null`) — Pass a [RegExp literal or pattern string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp) to only mangle property matching the regular expression.
+
+- `reserved` (default: `[]`) — Do not mangle property names listed in the
+  `reserved` array.
+
+- `undeclared` (default: `false`) - Mangle those names when they are accessed
+  as properties of known top level variables but their declarations are never
+  found in input code. May be useful when only minifying parts of a project.
+  See [#397](https://github.com/terser/terser/issues/397) for more details.
+
+## Output options
+
+The code generator tries to output shortest code possible by default.  In
+case you want beautified output, pass `--beautify` (`-b`).  Optionally you
+can pass additional arguments that control the code output:
+
+- `ascii_only` (default `false`) -- escape Unicode characters in strings and
+  regexps (affects directives with non-ascii characters becoming invalid)
+
+- `beautify` (default `true`) -- whether to actually beautify the output.
+  Passing `-b` will set this to true, but you might need to pass `-b` even
+  when you want to generate minified code, in order to specify additional
+  arguments, so you can use `-b beautify=false` to override it.
+
+- `braces` (default `false`) -- always insert braces in `if`, `for`,
+  `do`, `while` or `with` statements, even if their body is a single
+  statement.
+
+- `comments` (default `"some"`) -- by default it keeps JSDoc-style comments
+  that contain "@license" or "@preserve", pass `true` or `"all"` to preserve all
+  comments, `false` to omit comments in the output, a regular expression string
+  (e.g. `/^!/`) or a function.
+
+- `ecma` (default `5`) -- set output printing mode. Set `ecma` to `2015` or
+  greater to emit shorthand object properties - i.e.: `{a}` instead of `{a: a}`.
+  The `ecma` option will only change the output in direct control of the
+  beautifier. Non-compatible features in the abstract syntax tree will still
+  be output as is. For example: an `ecma` setting of `5` will **not** convert
+  ES6+ code to ES5.
+
+- `indent_level` (default `4`)
+
+- `indent_start` (default `0`) -- prefix all lines by that many spaces
+
+- `inline_script` (default `true`) -- escape HTML comments and the slash in
+  occurrences of `</script>` in strings
+
+- `keep_numbers` (default `false`) -- keep number literals as it was in original code
+ (disables optimizations like converting `1000000` into `1e6`)
+
+- `keep_quoted_props` (default `false`) -- when turned on, prevents stripping
+  quotes from property names in object literals.
+
+- `max_line_len` (default `false`) -- maximum line length (for minified code)
+
+- `preamble` (default `null`) -- when passed it must be a string and
+  it will be prepended to the output literally.  The source map will
+  adjust for this text.  Can be used to insert a comment containing
+  licensing information, for example.
+
+- `quote_keys` (default `false`) -- pass `true` to quote all keys in literal
+  objects
+
+- `quote_style` (default `0`) -- preferred quote style for strings (affects
+  quoted property names and directives as well):
+  - `0` -- prefers double quotes, switches to single quotes when there are
+    more double quotes in the string itself. `0` is best for gzip size.
+  - `1` -- always use single quotes
+  - `2` -- always use double quotes
+  - `3` -- always use the original quotes
+
+- `preserve_annotations` -- (default `false`) -- Preserve [Terser annotations](#annotations) in the output.
+
+- `safari10` (default `false`) -- set this option to `true` to work around
+  the [Safari 10/11 await bug](https://bugs.webkit.org/show_bug.cgi?id=176685).
+  See also: the `safari10` [mangle option](#mangle-options).
+
+- `semicolons` (default `true`) -- separate statements with semicolons.  If
+  you pass `false` then whenever possible we will use a newline instead of a
+  semicolon, leading to more readable output of minified code (size before
+  gzip could be smaller; size after gzip insignificantly larger).
+
+- `shebang` (default `true`) -- preserve shebang `#!` in preamble (bash scripts)
+
+- `webkit` (default `false`) -- enable workarounds for WebKit bugs.
+  PhantomJS users should set this option to `true`.
+
+- `wrap_iife` (default `false`) -- pass `true` to wrap immediately invoked
+  function expressions. See
+  [#640](https://github.com/mishoo/UglifyJS2/issues/640) for more details.
+
+- `wrap_func_args` (default `true`) -- pass `false` if you do not want to wrap
+  function expressions that are passed as arguments, in parenthesis. See
+  [OptimizeJS](https://github.com/nolanlawson/optimize-js) for more details.
+
+# Miscellaneous
+
+### Keeping copyright notices or other comments
+
+You can pass `--comments` to retain certain comments in the output.  By
+default it will keep JSDoc-style comments that contain "@preserve",
+"@license" or "@cc_on" (conditional compilation for IE).  You can pass
+`--comments all` to keep all the comments, or a valid JavaScript regexp to
+keep only comments that match this regexp.  For example `--comments /^!/`
+will keep comments like `/*! Copyright Notice */`.
+
+Note, however, that there might be situations where comments are lost.  For
+example:
+```javascript
+function f() {
+    /** @preserve Foo Bar */
+    function g() {
+        // this function is never called
+    }
+    return something();
+}
+```
+
+Even though it has "@preserve", the comment will be lost because the inner
+function `g` (which is the AST node to which the comment is attached to) is
+discarded by the compressor as not referenced.
+
+The safest comments where to place copyright information (or other info that
+needs to be kept in the output) are comments attached to toplevel nodes.
+
+### The `unsafe` `compress` option
+
+It enables some transformations that *might* break code logic in certain
+contrived cases, but should be fine for most code.  It assumes that standard
+built-in ECMAScript functions and classes have not been altered or replaced.
+You might want to try it on your own code; it should reduce the minified size.
+Some examples of the optimizations made when this option is enabled:
+
+- `new Array(1, 2, 3)` or `Array(1, 2, 3)` → `[ 1, 2, 3 ]`
+- `new Object()` → `{}`
+- `String(exp)` or `exp.toString()` → `"" + exp`
+- `new Object/RegExp/Function/Error/Array (...)` → we discard the `new`
+- `"foo bar".substr(4)` → `"bar"`
+
+### Conditional compilation
+
+You can use the `--define` (`-d`) switch in order to declare global
+variables that Terser will assume to be constants (unless defined in
+scope).  For example if you pass `--define DEBUG=false` then, coupled with
+dead code removal Terser will discard the following from the output:
+```javascript
+if (DEBUG) {
+    console.log("debug stuff");
+}
+```
+
+You can specify nested constants in the form of `--define env.DEBUG=false`.
+
+Terser will warn about the condition being always false and about dropping
+unreachable code; for now there is no option to turn off only this specific
+warning, you can pass `warnings=false` to turn off *all* warnings.
+
+Another way of doing that is to declare your globals as constants in a
+separate file and include it into the build.  For example you can have a
+`build/defines.js` file with the following:
+```javascript
+var DEBUG = false;
+var PRODUCTION = true;
+// etc.
+```
+
+and build your code like this:
+
+    terser build/defines.js js/foo.js js/bar.js... -c
+
+Terser will notice the constants and, since they cannot be altered, it
+will evaluate references to them to the value itself and drop unreachable
+code as usual.  The build will contain the `const` declarations if you use
+them. If you are targeting < ES6 environments which does not support `const`,
+using `var` with `reduce_vars` (enabled by default) should suffice.
+
+### Conditional compilation API
+
+You can also use conditional compilation via the programmatic API. With the difference that the
+property name is `global_defs` and is a compressor property:
+
+```javascript
+var result = Terser.minify(fs.readFileSync("input.js", "utf8"), {
+    compress: {
+        dead_code: true,
+        global_defs: {
+            DEBUG: false
+        }
+    }
+});
+```
+
+To replace an identifier with an arbitrary non-constant expression it is
+necessary to prefix the `global_defs` key with `"@"` to instruct Terser
+to parse the value as an expression:
+```javascript
+Terser.minify("alert('hello');", {
+    compress: {
+        global_defs: {
+            "@alert": "console.log"
+        }
+    }
+}).code;
+// returns: 'console.log("hello");'
+```
+
+Otherwise it would be replaced as string literal:
+```javascript
+Terser.minify("alert('hello');", {
+    compress: {
+        global_defs: {
+            "alert": "console.log"
+        }
+    }
+}).code;
+// returns: '"console.log"("hello");'
+```
+
+### Using native Terser AST with `minify()`
+```javascript
+// example: parse only, produce native Terser AST
+
+var result = Terser.minify(code, {
+    parse: {},
+    compress: false,
+    mangle: false,
+    output: {
+        ast: true,
+        code: false  // optional - faster if false
+    }
+});
+
+// result.ast contains native Terser AST
+```
+```javascript
+// example: accept native Terser AST input and then compress and mangle
+//          to produce both code and native AST.
+
+var result = Terser.minify(ast, {
+    compress: {},
+    mangle: {},
+    output: {
+        ast: true,
+        code: true  // optional - faster if false
+    }
+});
+
+// result.ast contains native Terser AST
+// result.code contains the minified code in string form.
+```
+
+
+### Annotations
+
+Annotations in Terser are a way to tell it to treat a certain function call differently. The following annotations are available:
+
+ * `/*@__INLINE__*/` - forces a function to be inlined somewhere.
+ * `/*@__NOINLINE__*/` - Makes sure the called function is not inlined into the call site.
+ * `/*@__PURE__*/` - Marks a function call as pure. That means, it can safely be dropped.
+
+You can use either a `@` sign at the start, or a `#`.
+
+Here are some examples on how to use them:
+
+```javascript
+/*@__INLINE__*/
+function_always_inlined_here()
+
+/*#__NOINLINE__*/
+function_cant_be_inlined_into_here()
+
+const x = /*#__PURE__*/i_am_dropped_if_x_is_not_used()
+```
+
+
+### Working with Terser AST
+
+Traversal and transformation of the native AST can be performed through
+[`TreeWalker`](https://github.com/fabiosantoscode/terser/blob/master/lib/ast.js) and
+[`TreeTransformer`](https://github.com/fabiosantoscode/terser/blob/master/lib/transform.js)
+respectively.
+
+Largely compatible native AST examples can be found in the original UglifyJS
+documentation. See: [tree walker](http://lisperator.net/uglifyjs/walk) and
+[tree transform](http://lisperator.net/uglifyjs/transform).
+
+### ESTree / SpiderMonkey AST
+
+Terser has its own abstract syntax tree format; for
+[practical reasons](http://lisperator.net/blog/uglifyjs-why-not-switching-to-spidermonkey-ast/)
+we can't easily change to using the SpiderMonkey AST internally.  However,
+Terser now has a converter which can import a SpiderMonkey AST.
+
+For example [Acorn][acorn] is a super-fast parser that produces a
+SpiderMonkey AST.  It has a small CLI utility that parses one file and dumps
+the AST in JSON on the standard output.  To use Terser to mangle and
+compress that:
+
+    acorn file.js | terser -p spidermonkey -m -c
+
+The `-p spidermonkey` option tells Terser that all input files are not
+JavaScript, but JS code described in SpiderMonkey AST in JSON.  Therefore we
+don't use our own parser in this case, but just transform that AST into our
+internal AST.
+
+### Use Acorn for parsing
+
+More for fun, I added the `-p acorn` option which will use Acorn to do all
+the parsing.  If you pass this option, Terser will `require("acorn")`.
+
+Acorn is really fast (e.g. 250ms instead of 380ms on some 650K code), but
+converting the SpiderMonkey tree that Acorn produces takes another 150ms so
+in total it's a bit more than just using Terser's own parser.
+
+[acorn]: https://github.com/ternjs/acorn
+[sm-spec]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k
+
+### Terser Fast Minify Mode
+
+It's not well known, but whitespace removal and symbol mangling accounts
+for 95% of the size reduction in minified code for most JavaScript - not
+elaborate code transforms. One can simply disable `compress` to speed up
+Terser builds by 3 to 4 times.
+
+| d3.js | size | gzip size | time (s) |
+|   --- | ---: |      ---: |     ---: |
+| original                                    | 451,131 | 108,733 |     - |
+| terser@3.7.5 mangle=false, compress=false   | 316,600 |  85,245 |  0.82 |
+| terser@3.7.5 mangle=true, compress=false    | 220,216 |  72,730 |  1.45 |
+| terser@3.7.5 mangle=true, compress=true     | 212,046 |  70,954 |  5.87 |
+| babili@0.1.4                                | 210,713 |  72,140 | 12.64 |
+| babel-minify@0.4.3                          | 210,321 |  72,242 | 48.67 |
+| babel-minify@0.5.0-alpha.01eac1c3           | 210,421 |  72,238 | 14.17 |
+
+To enable fast minify mode from the CLI use:
+```
+terser file.js -m
+```
+To enable fast minify mode with the API use:
+```js
+Terser.minify(code, { compress: false, mangle: true });
+```
+
+#### Source maps and debugging
+
+Various `compress` transforms that simplify, rearrange, inline and remove code
+are known to have an adverse effect on debugging with source maps. This is
+expected as code is optimized and mappings are often simply not possible as
+some code no longer exists. For highest fidelity in source map debugging
+disable the `compress` option and just use `mangle`.
+
+### Compiler assumptions
+
+To allow for better optimizations, the compiler makes various assumptions:
+
+- `.toString()` and `.valueOf()` don't have side effects, and for built-in
+  objects they have not been overridden.
+- `undefined`, `NaN` and `Infinity` have not been externally redefined.
+- `arguments.callee`, `arguments.caller` and `Function.prototype.caller` are not used.
+- The code doesn't expect the contents of `Function.prototype.toString()` or
+  `Error.prototype.stack` to be anything in particular.
+- Getting and setting properties on a plain object does not cause other side effects
+  (using `.watch()` or `Proxy`).
+- Object properties can be added, removed and modified (not prevented with
+  `Object.defineProperty()`, `Object.defineProperties()`, `Object.freeze()`,
+  `Object.preventExtensions()` or `Object.seal()`).
+- `document.all` is not `== null`
+- Assigning properties to a class doesn't have side effects and does not throw.
+
+### Build Tools and Adaptors using Terser
+
+https://www.npmjs.com/browse/depended/terser
+
+### Replacing `uglify-es` with `terser` in a project using `yarn`
+
+A number of JS bundlers and uglify wrappers are still using buggy versions
+of `uglify-es` and have not yet upgraded to `terser`. If you are using `yarn`
+you can add the following alias to your project's `package.json` file:
+
+```js
+  "resolutions": {
+    "uglify-es": "npm:terser"
+  }
+```
+
+to use `terser` instead of `uglify-es` in all deeply nested dependencies
+without changing any code.
+
+Note: for this change to take effect you must run the following commands
+to remove the existing `yarn` lock file and reinstall all packages:
+
+```
+$ rm -rf node_modules yarn.lock
+$ yarn
+```
+
+# Reporting issues
+
+In the terser CLI we use [source-map-support](https://npmjs.com/source-map-support) to produce good error stacks. In your own app, you're expected to enable source-map-support (read their docs) to have nice stack traces that will make good issues.
+
+# README.md Patrons:
+
+*note*: You can support this project on patreon: <a target="_blank" rel="nofollow" href="https://www.patreon.com/fabiosantoscode"><img src="https://c5.patreon.com/external/logo/become_a_patron_button@2x.png" alt="patron" width="100px" height="auto"></a>. Check out [PATRONS.md](https://github.com/terser/terser/blob/master/PATRONS.md) for our first-tier patrons.
+
+These are the second-tier patrons. Great thanks for your support!
+
+ * CKEditor ![](https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/15452278/f8548dcf48d740619071e8d614459280/1?token-time=2145916800&token-hash=SIQ54PhIPHv3M7CVz9LxS8_8v4sOw4H304HaXsXj8MM%3D)
+ * 38elements ![](https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12501844/88e7fc5dd62d45c6a5626533bbd48cfb/1?token-time=2145916800&token-hash=c3AsQ5T0IQWic0zKxFHu-bGGQJkXQFvafvJ4bPerFR4%3D)
+
+## Contributors
+
+### Code Contributors
+
+This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)].
+<a href="https://github.com/terser/terser/graphs/contributors"><img src="https://opencollective.com/terser/contributors.svg?width=890&button=false" /></a>
+
+### Financial Contributors
+
+Become a financial contributor and help us sustain our community. [[Contribute](https://opencollective.com/terser/contribute)]
+
+#### Individuals
+
+<a href="https://opencollective.com/terser"><img src="https://opencollective.com/terser/individuals.svg?width=890"></a>
+
+#### Organizations
+
+Support this project with your organization. Your logo will show up here with a link to your website. [[Contribute](https://opencollective.com/terser/contribute)]
+
+<a href="https://opencollective.com/terser/organization/0/website"><img src="https://opencollective.com/terser/organization/0/avatar.svg"></a>
+<a href="https://opencollective.com/terser/organization/1/website"><img src="https://opencollective.com/terser/organization/1/avatar.svg"></a>
+<a href="https://opencollective.com/terser/organization/2/website"><img src="https://opencollective.com/terser/organization/2/avatar.svg"></a>
+<a href="https://opencollective.com/terser/organization/3/website"><img src="https://opencollective.com/terser/organization/3/avatar.svg"></a>
+<a href="https://opencollective.com/terser/organization/4/website"><img src="https://opencollective.com/terser/organization/4/avatar.svg"></a>
+<a href="https://opencollective.com/terser/organization/5/website"><img src="https://opencollective.com/terser/organization/5/avatar.svg"></a>
+<a href="https://opencollective.com/terser/organization/6/website"><img src="https://opencollective.com/terser/organization/6/avatar.svg"></a>
+<a href="https://opencollective.com/terser/organization/7/website"><img src="https://opencollective.com/terser/organization/7/avatar.svg"></a>
+<a href="https://opencollective.com/terser/organization/8/website"><img src="https://opencollective.com/terser/organization/8/avatar.svg"></a>
+<a href="https://opencollective.com/terser/organization/9/website"><img src="https://opencollective.com/terser/organization/9/avatar.svg"></a>
diff --git a/node_modules/terser/bin/terser b/node_modules/terser/bin/terser
new file mode 100644
index 0000000..e910537
--- /dev/null
+++ b/node_modules/terser/bin/terser
@@ -0,0 +1,477 @@
+#!/usr/bin/env node
+// -*- js -*-
+/* eslint-env node */
+
+"use strict";
+
+require("../tools/exit.js");
+
+var fs = require("fs");
+var info = require("../package.json");
+var path = require("path");
+var program = require("commander");
+
+var Terser = require("..");
+try {
+    require("source-map-support").install();
+} catch (err) {}
+
+const skip_keys = new Set([ "cname", "parent_scope", "scope", "uses_eval", "uses_with", "_var_name_cache" ]);
+var files = {};
+var options = {
+    compress: false,
+    mangle: false
+};
+program.version(info.name + " " + info.version);
+program.parseArgv = program.parse;
+program.parse = undefined;
+if (process.argv.includes("ast")) program.helpInformation = describe_ast;
+else if (process.argv.includes("options")) program.helpInformation = function() {
+    var text = [];
+    var options = Terser.default_options();
+    for (var option in options) {
+        text.push("--" + (option === "output" ? "beautify" : option === "sourceMap" ? "source-map" : option) + " options:");
+        text.push(format_object(options[option]));
+        text.push("");
+    }
+    return text.join("\n");
+};
+program.option("-p, --parse <options>", "Specify parser options.", parse_js());
+program.option("-c, --compress [options]", "Enable compressor/specify compressor options.", parse_js());
+program.option("-m, --mangle [options]", "Mangle names/specify mangler options.", parse_js());
+program.option("--mangle-props [options]", "Mangle properties/specify mangler options.", parse_js());
+program.option("-b, --beautify [options]", "Beautify output/specify output options.", parse_js());
+program.option("-o, --output <file>", "Output file (default STDOUT).");
+program.option("--comments [filter]", "Preserve copyright comments in the output.");
+program.option("--config-file <file>", "Read minify() options from JSON file.");
+program.option("-d, --define <expr>[=value]", "Global definitions.", parse_js("define"));
+program.option("--ecma <version>", "Specify ECMAScript release: 5, 2015, 2016 or 2017...");
+program.option("-e, --enclose [arg[,...][:value[,...]]]", "Embed output in a big function with configurable arguments and values.");
+program.option("--ie8", "Support non-standard Internet Explorer 8.");
+program.option("--keep-classnames", "Do not mangle/drop class names.");
+program.option("--keep-fnames", "Do not mangle/drop function names. Useful for code relying on Function.prototype.name.");
+program.option("--module", "Input is an ES6 module");
+program.option("--name-cache <file>", "File to hold mangled name mappings.");
+program.option("--rename", "Force symbol expansion.");
+program.option("--no-rename", "Disable symbol expansion.");
+program.option("--safari10", "Support non-standard Safari 10.");
+program.option("--source-map [options]", "Enable source map/specify source map options.", parse_js());
+program.option("--timings", "Display operations run time on STDERR.");
+program.option("--toplevel", "Compress and/or mangle variables in toplevel scope.");
+program.option("--verbose", "Print diagnostic messages.");
+program.option("--warn", "Print warning messages.");
+program.option("--wrap <name>", "Embed everything as a function with “exports” corresponding to “name” globally.");
+program.arguments("[files...]").parseArgv(process.argv);
+if (program.configFile) {
+    options = JSON.parse(read_file(program.configFile));
+}
+if (!program.output && program.sourceMap && program.sourceMap.url != "inline") {
+    fatal("ERROR: cannot write source map to STDOUT");
+}
+[
+    "compress",
+    "enclose",
+    "ie8",
+    "mangle",
+    "module",
+    "safari10",
+    "sourceMap",
+    "toplevel",
+    "wrap"
+].forEach(function(name) {
+    if (name in program) {
+        options[name] = program[name];
+    }
+});
+if ("ecma" in program) {
+    if (program.ecma != (program.ecma | 0)) fatal("ERROR: ecma must be an integer");
+    const ecma = program.ecma | 0;
+    if (ecma > 5 && ecma < 2015)
+        options.ecma = ecma + 2009;
+    else
+        options.ecma = ecma;
+}
+if (program.beautify) {
+    options.output = typeof program.beautify == "object" ? program.beautify : {};
+    if (!("beautify" in options.output)) {
+        options.output.beautify = true;
+    }
+}
+if (program.comments) {
+    if (typeof options.output != "object") options.output = {};
+    options.output.comments = typeof program.comments == "string" ? (program.comments == "false" ? false : program.comments) : "some";
+}
+if (program.define) {
+    if (typeof options.compress != "object") options.compress = {};
+    if (typeof options.compress.global_defs != "object") options.compress.global_defs = {};
+    for (var expr in program.define) {
+        options.compress.global_defs[expr] = program.define[expr];
+    }
+}
+if (program.keepClassnames) {
+    options.keep_classnames = true;
+}
+if (program.keepFnames) {
+    options.keep_fnames = true;
+}
+if (program.mangleProps) {
+    if (program.mangleProps.domprops) {
+        delete program.mangleProps.domprops;
+    } else {
+        if (typeof program.mangleProps != "object") program.mangleProps = {};
+        if (!Array.isArray(program.mangleProps.reserved)) program.mangleProps.reserved = [];
+    }
+    if (typeof options.mangle != "object") options.mangle = {};
+    options.mangle.properties = program.mangleProps;
+}
+if (program.nameCache) {
+    options.nameCache = JSON.parse(read_file(program.nameCache, "{}"));
+}
+if (program.output == "ast") {
+    options.output = {
+        ast: true,
+        code: false
+    };
+}
+if (program.parse) {
+    if (!program.parse.acorn && !program.parse.spidermonkey) {
+        options.parse = program.parse;
+    } else if (program.sourceMap && program.sourceMap.content == "inline") {
+        fatal("ERROR: inline source map only works with built-in parser");
+    }
+}
+if (~program.rawArgs.indexOf("--rename")) {
+    options.rename = true;
+} else if (!program.rename) {
+    options.rename = false;
+}
+var convert_path = function(name) {
+    return name;
+};
+if (typeof program.sourceMap == "object" && "base" in program.sourceMap) {
+    convert_path = function() {
+        var base = program.sourceMap.base;
+        delete options.sourceMap.base;
+        return function(name) {
+            return path.relative(base, name);
+        };
+    }();
+}
+if (program.verbose) {
+    options.warnings = "verbose";
+} else if (program.warn) {
+    options.warnings = true;
+}
+
+let filesList;
+if (options.files && options.files.length) {
+    filesList = options.files;
+
+    delete options.files;
+} else if (program.args.length) {
+    filesList = program.args;
+}
+
+if (filesList) {
+    simple_glob(filesList).forEach(function(name) {
+        files[convert_path(name)] = read_file(name);
+    });
+    run();
+} else {
+    var chunks = [];
+    process.stdin.setEncoding("utf8");
+    process.stdin.on("data", function(chunk) {
+        chunks.push(chunk);
+    }).on("end", function() {
+        files = [ chunks.join("") ];
+        run();
+    });
+    process.stdin.resume();
+}
+
+function convert_ast(fn) {
+    return Terser.AST_Node.from_mozilla_ast(Object.keys(files).reduce(fn, null));
+}
+
+function run() {
+    Terser.AST_Node.warn_function = function(msg) {
+        print_error("WARN: " + msg);
+    };
+    var content = program.sourceMap && program.sourceMap.content;
+    if (content && content !== "inline") {
+        options.sourceMap.content = read_file(content, content);
+    }
+    if (program.timings) options.timings = true;
+    try {
+        if (program.parse) {
+            if (program.parse.acorn) {
+                files = convert_ast(function(toplevel, name) {
+                    return require("acorn").parse(files[name], {
+                        ecmaVersion: 2018,
+                        locations: true,
+                        program: toplevel,
+                        sourceFile: name,
+                        sourceType: options.module || program.parse.module ? "module" : "script"
+                    });
+                });
+            } else if (program.parse.spidermonkey) {
+                files = convert_ast(function(toplevel, name) {
+                    var obj = JSON.parse(files[name]);
+                    if (!toplevel) return obj;
+                    toplevel.body = toplevel.body.concat(obj.body);
+                    return toplevel;
+                });
+            }
+        }
+    } catch (ex) {
+        fatal(ex);
+    }
+    var result = Terser.minify(files, options);
+    if (result.error) {
+        var ex = result.error;
+        if (ex.name == "SyntaxError") {
+            print_error("Parse error at " + ex.filename + ":" + ex.line + "," + ex.col);
+            var col = ex.col;
+            var lines = files[ex.filename].split(/\r?\n/);
+            var line = lines[ex.line - 1];
+            if (!line && !col) {
+                line = lines[ex.line - 2];
+                col = line.length;
+            }
+            if (line) {
+                var limit = 70;
+                if (col > limit) {
+                    line = line.slice(col - limit);
+                    col = limit;
+                }
+                print_error(line.slice(0, 80));
+                print_error(line.slice(0, col).replace(/\S/g, " ") + "^");
+            }
+        }
+        if (ex.defs) {
+            print_error("Supported options:");
+            print_error(format_object(ex.defs));
+        }
+        fatal(ex);
+    } else if (program.output == "ast") {
+        if (!options.compress && !options.mangle) {
+            result.ast.figure_out_scope({});
+        }
+        print(JSON.stringify(result.ast, function(key, value) {
+            if (value) switch (key) {
+              case "thedef":
+                return symdef(value);
+              case "enclosed":
+                return value.length ? value.map(symdef) : undefined;
+              case "variables":
+              case "functions":
+              case "globals":
+                return value.size ? collect_from_map(value, symdef) : undefined;
+            }
+            if (skip_keys.has(key)) return;
+            if (value instanceof Terser.AST_Token) return;
+            if (value instanceof Map) return;
+            if (value instanceof Terser.AST_Node) {
+                var result = {
+                    _class: "AST_" + value.TYPE
+                };
+                if (value.block_scope) {
+                    result.variables = value.block_scope.variables;
+                    result.functions = value.block_scope.functions;
+                    result.enclosed = value.block_scope.enclosed;
+                }
+                value.CTOR.PROPS.forEach(function(prop) {
+                    if (prop === "block_scope") return;
+                    result[prop] = value[prop];
+                });
+                return result;
+            }
+            return value;
+        }, 2));
+    } else if (program.output == "spidermonkey") {
+        print(JSON.stringify(Terser.minify(result.code, {
+            compress: false,
+            mangle: false,
+            output: {
+                ast: true,
+                code: false
+            }
+        }).ast.to_mozilla_ast(), null, 2));
+    } else if (program.output) {
+        fs.writeFileSync(program.output, result.code);
+        if (options.sourceMap.url !== "inline" && result.map) {
+            fs.writeFileSync(program.output + ".map", result.map);
+        }
+    } else {
+        print(result.code);
+    }
+    if (program.nameCache) {
+        fs.writeFileSync(program.nameCache, JSON.stringify(options.nameCache));
+    }
+    if (result.timings) for (var phase in result.timings) {
+        print_error("- " + phase + ": " + result.timings[phase].toFixed(3) + "s");
+    }
+}
+
+function fatal(message) {
+    if (message instanceof Error) message = message.stack.replace(/^\S*?Error:/, "ERROR:");
+    print_error(message);
+    process.exit(1);
+}
+
+// A file glob function that only supports "*" and "?" wildcards in the basename.
+// Example: "foo/bar/*baz??.*.js"
+// Argument `glob` may be a string or an array of strings.
+// Returns an array of strings. Garbage in, garbage out.
+function simple_glob(glob) {
+    if (Array.isArray(glob)) {
+        return [].concat.apply([], glob.map(simple_glob));
+    }
+    if (glob && glob.match(/[*?]/)) {
+        var dir = path.dirname(glob);
+        try {
+            var entries = fs.readdirSync(dir);
+        } catch (ex) {}
+        if (entries) {
+            var pattern = "^" + path.basename(glob)
+                .replace(/[.+^$[\]\\(){}]/g, "\\$&")
+                .replace(/\*/g, "[^/\\\\]*")
+                .replace(/\?/g, "[^/\\\\]") + "$";
+            var mod = process.platform === "win32" ? "i" : "";
+            var rx = new RegExp(pattern, mod);
+            var results = entries.filter(function(name) {
+                return rx.test(name);
+            }).map(function(name) {
+                return path.join(dir, name);
+            });
+            if (results.length) return results;
+        }
+    }
+    return [ glob ];
+}
+
+function read_file(path, default_value) {
+    try {
+        return fs.readFileSync(path, "utf8");
+    } catch (ex) {
+        if ((ex.code == "ENOENT" || ex.code == "ENAMETOOLONG") && default_value != null) return default_value;
+        fatal(ex);
+    }
+}
+
+function parse_js(flag) {
+    return function(value, options) {
+        options = options || {};
+        try {
+            Terser.parse(value, {
+                expression: true
+            }).walk(new Terser.TreeWalker(function(node) {
+                if (node instanceof Terser.AST_Assign) {
+                    var name = node.left.print_to_string();
+                    var value = node.right;
+                    if (flag) {
+                        options[name] = value;
+                    } else if (value instanceof Terser.AST_Array) {
+                        options[name] = value.elements.map(to_string);
+                    } else if (value instanceof Terser.AST_RegExp) {
+                        value = value.value;
+                        options[name] = new RegExp(value.source, value.flags);
+                    } else {
+                        options[name] = to_string(value);
+                    }
+                    return true;
+                }
+                if (node instanceof Terser.AST_Symbol || node instanceof Terser.AST_PropAccess) {
+                    var name = node.print_to_string();
+                    options[name] = true;
+                    return true;
+                }
+                if (!(node instanceof Terser.AST_Sequence)) throw node;
+
+                function to_string(value) {
+                    return value instanceof Terser.AST_Constant ? value.getValue() : value.print_to_string({
+                        quote_keys: true
+                    });
+                }
+            }));
+        } catch(ex) {
+            if (flag) {
+                fatal("Error parsing arguments for '" + flag + "': " + value);
+            } else {
+                options[value] = null;
+            }
+        }
+        return options;
+    };
+}
+
+function symdef(def) {
+    var ret = (1e6 + def.id) + " " + def.name;
+    if (def.mangled_name) ret += " " + def.mangled_name;
+    return ret;
+}
+
+function collect_from_map(map, callback) {
+    var result = [];
+    map.forEach(function (def) {
+        result.push(callback(def));
+    });
+    return result;
+}
+
+function format_object(obj) {
+    var lines = [];
+    var padding = "";
+    Object.keys(obj).map(function(name) {
+        if (padding.length < name.length) padding = Array(name.length + 1).join(" ");
+        return [ name, JSON.stringify(obj[name]) ];
+    }).forEach(function(tokens) {
+        lines.push("  " + tokens[0] + padding.slice(tokens[0].length - 2) + tokens[1]);
+    });
+    return lines.join("\n");
+}
+
+function print_error(msg) {
+    process.stderr.write(msg);
+    process.stderr.write("\n");
+}
+
+function print(txt) {
+    process.stdout.write(txt);
+    process.stdout.write("\n");
+}
+
+function describe_ast() {
+    var out = Terser.OutputStream({ beautify: true });
+    function doitem(ctor) {
+        out.print("AST_" + ctor.TYPE);
+        var props = ctor.SELF_PROPS.filter(function(prop) {
+            return !/^\$/.test(prop);
+        });
+        if (props.length > 0) {
+            out.space();
+            out.with_parens(function() {
+                props.forEach(function(prop, i) {
+                    if (i) out.space();
+                    out.print(prop);
+                });
+            });
+        }
+        if (ctor.documentation) {
+            out.space();
+            out.print_string(ctor.documentation);
+        }
+        if (ctor.SUBCLASSES.length > 0) {
+            out.space();
+            out.with_block(function() {
+                ctor.SUBCLASSES.forEach(function(ctor, i) {
+                    out.indent();
+                    doitem(ctor);
+                    out.newline();
+                });
+            });
+        }
+    }
+    doitem(Terser.AST_Node);
+    return out + "\n";
+}
diff --git a/node_modules/terser/bin/uglifyjs b/node_modules/terser/bin/uglifyjs
new file mode 100644
index 0000000..f193025
--- /dev/null
+++ b/node_modules/terser/bin/uglifyjs
@@ -0,0 +1,10 @@
+#!/usr/bin/env node
+// -*- js -*-
+/* eslint-env node */
+
+"use strict";
+
+process.stderr.write( "DEPRECATION WARNING: uglifyjs binary will soon be discontinued!\n");
+process.stderr.write("Please use \"terser\" instead.\n\n");
+
+require("./terser");
diff --git a/node_modules/terser/dist/.gitkeep b/node_modules/terser/dist/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/node_modules/terser/dist/.gitkeep
diff --git a/node_modules/terser/dist/bundle.min.js b/node_modules/terser/dist/bundle.min.js
new file mode 100644
index 0000000..432616e
--- /dev/null
+++ b/node_modules/terser/dist/bundle.min.js
@@ -0,0 +1,2 @@
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("source-map")):"function"==typeof define&&define.amd?define(["exports","source-map"],t):t((e=e||self).Terser={},e.sourceMap)}(this,(function(e,t){"use strict";function n(e){return e.split("")}function i(e,t){return t.includes(e)}t=t&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t;class r extends Error{constructor(e,t){super(),this.name="DefaultsError",this.message=e,this.defs=t}}function o(e,t,n){!0===e&&(e={});const i=e||{};if(n)for(const e in i)if(D(i,e)&&!D(t,e))throw new r("`"+e+"` is not a supported option",t);for(const n in t)if(D(t,n))if(e&&D(e,n))if("ecma"===n){let t=0|e[n];t>5&&t<2015&&(t+=2009),i[n]=t}else i[n]=e&&D(e,n)?e[n]:t[n];else i[n]=t[n];return i}function a(){}function s(){return!1}function u(){return!0}function c(){return this}function l(){return null}var f=function(){function e(e,o,a){var s,u=[],c=[];function l(){var l=o(e[s],s),f=l instanceof r;return f&&(l=l.v),l instanceof n?(l=l.v)instanceof i?c.push.apply(c,a?l.v.slice().reverse():l.v):c.push(l):l!==t&&(l instanceof i?u.push.apply(u,a?l.v.slice().reverse():l.v):u.push(l)),f}if(Array.isArray(e))if(a){for(s=e.length;--s>=0&&!l(););u.reverse(),c.reverse()}else for(s=0;s<e.length&&!l();++s);else for(s in e)if(D(e,s)&&l())break;return c.concat(u)}e.at_top=function(e){return new n(e)},e.splice=function(e){return new i(e)},e.last=function(e){return new r(e)};var t=e.skip={};function n(e){this.v=e}function i(e){this.v=e}function r(e){this.v=e}return e}();function p(e,t,n){return n||(n={}),t&&(n.start||(n.start=t.start),n.end||(n.end=t.end)),new e(n)}function _(e,t){e.includes(t)||e.push(t)}function d(e,t){return e.replace(/{(.+?)}/g,(function(e,n){return t&&t[n]}))}function m(e,t){for(var n=e.length;--n>=0;)e[n]===t&&e.splice(n,1)}function h(e,t){if(e.length<2)return e.slice();return function e(n){if(n.length<=1)return n;var i=Math.floor(n.length/2),r=n.slice(0,i),o=n.slice(i);return function(e,n){for(var i=[],r=0,o=0,a=0;r<e.length&&o<n.length;)t(e[r],n[o])<=0?i[a++]=e[r++]:i[a++]=n[o++];return r<e.length&&i.push.apply(i,e.slice(r)),o<n.length&&i.push.apply(i,n.slice(o)),i}(r=e(r),o=e(o))}(e)}function E(e){return Array.isArray(e)||(e=e.split(" ")),new Set(e)}function g(e,t,n){e.has(t)?e.get(t).push(n):e.set(t,[n])}function D(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function S(e,t){return!0===e||e instanceof RegExp&&e.test(t)}var v={"\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"};function A(e){return e.replace(/[\n\r\u2028\u2029]/g,(function(t,n){return("\\"==e[n-1]&&("\\"!=e[n-2]||/(?:^|[^\\])(?:\\{2})*$/.test(e.slice(0,n-1)))?"":"\\")+v[t]}))}function T(e,t){return e._annotations&t}function y(e,t){e._annotations|=t}var b="break case catch class const continue debugger default delete do else export extends finally for function if in instanceof let new return switch throw try typeof var void while with",C="false null true",O="enum implements import interface package private protected public static super this "+C+" "+b,F="return new delete throw else case yield await";b=E(b),O=E(O),F=E(F),C=E(C);var M=E(n("+-*&%=<>!?|~^")),R=/[0-9a-f]/i,w=/^0x[0-9a-f]+$/i,x=/^0[0-7]+$/,N=/^0o[0-7]+$/i,k=/^0b[01]+$/i,I=/^\d*\.?\d*(?:e[+-]?\d*(?:\d\.?|\.?\d)\d*)?$/i,L=/^(0[xob])?[0-9a-f]+n$/i,P=E(["in","instanceof","typeof","new","void","delete","++","--","+","-","!","~","&","|","^","*","**","/","%",">>","<<",">>>","<",">","<=",">=","==","===","!=","!==","?","=","+=","-=","/=","*=","**=","%=",">>=","<<=",">>>=","|=","^=","&=","&&","??","||"]),V=E(n("  \n\r\t\f\v​           \u2028\u2029  　\ufeff")),B=E(n("\n\r\u2028\u2029")),K=E(n(";]),:")),U=E(n("[{(,;:")),G=E(n("[]{}(),;:")),H={ID_Start:/[$A-Z_a-z\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-\u08B4\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\u0AF9\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-\u0C5A\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\u0D5F-\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-\u13F5\u13F8-\u13FD\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\u19B0-\u19C9\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-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\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-\uAB65\uAB70-\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\uDCE0-\uDCF2\uDCF4\uDCF5\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\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\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\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/,ID_Continue:/(?:[$0-9A-Z_a-z\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-\u08B4\u08E3-\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\u0AF9\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-\u0C5A\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\u0D5F-\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-\u13F5\u13F8-\u13FD\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-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\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-\uAB65\uAB70-\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-\uFE2F\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\uDCE0-\uDCF2\uDCF4\uDCF5\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\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\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]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\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\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF])+/};function X(e,t){if(z(e.charCodeAt(t))){if(W(e.charCodeAt(t+1)))return e.charAt(t)+e.charAt(t+1)}else if(W(e.charCodeAt(t))&&z(e.charCodeAt(t-1)))return e.charAt(t-1)+e.charAt(t);return e.charAt(t)}function z(e){return e>=55296&&e<=56319}function W(e){return e>=56320&&e<=57343}function Y(e){return e>=48&&e<=57}function q(e){return H.ID_Start.test(e)}function $(e){return H.ID_Continue.test(e)}function j(e){return/^[a-z_$][a-z0-9_$]*$/i.test(e)}function Z(e,t){if(/^[a-z_$][a-z0-9_$]*$/i.test(e))return!0;if(!t&&/[\ud800-\udfff]/.test(e))return!1;var n=H.ID_Start.exec(e);return!(!n||0!==n.index)&&(!(e=e.slice(n[0].length))||!!(n=H.ID_Continue.exec(e))&&n[0].length===e.length)}function J(e,t=!0){if(!t&&e.includes("e"))return NaN;if(w.test(e))return parseInt(e.substr(2),16);if(x.test(e))return parseInt(e.substr(1),8);if(N.test(e))return parseInt(e.substr(2),8);if(k.test(e))return parseInt(e.substr(2),2);if(I.test(e))return parseFloat(e);var n=parseFloat(e);return n==e?n:void 0}class Q extends Error{constructor(e,t,n,i,r){super(),this.name="SyntaxError",this.message=e,this.filename=t,this.line=n,this.col=i,this.pos=r}}function ee(e,t,n,i,r){throw new Q(e,t,n,i,r)}function te(e,t,n){return e.type==t&&(null==n||e.value==n)}var ne={};function ie(e,t,n,i){var r={text:e,filename:t,pos:0,tokpos:0,line:1,tokline:0,col:0,tokcol:0,newline_before:!1,regex_allowed:!1,brace_counter:0,template_braces:[],comments_before:[],directives:{},directive_stack:[]};function o(){return X(r.text,r.pos)}function a(e,t){var n=X(r.text,r.pos++);if(e&&!n)throw ne;return B.has(n)?(r.newline_before=r.newline_before||!t,++r.line,r.col=0,"\r"==n&&"\n"==o()&&(++r.pos,n="\n")):(n.length>1&&(++r.pos,++r.col),++r.col),n}function s(e){for(;e--;)a()}function u(e){return r.text.substr(r.pos,e.length)==e}function c(e,t){var n=r.text.indexOf(e,r.pos);if(t&&-1==n)throw ne;return n}function l(){r.tokline=r.line,r.tokcol=r.col,r.tokpos=r.pos}var f=!1,p=null;function _(n,i,o){r.regex_allowed="operator"==n&&!oe.has(i)||"keyword"==n&&F.has(i)||"punc"==n&&U.has(i)||"arrow"==n,"punc"==n&&"."==i?f=!0:o||(f=!1);var a={type:n,value:i,line:r.tokline,col:r.tokcol,pos:r.tokpos,endline:r.line,endcol:r.col,endpos:r.pos,nlb:r.newline_before,file:t};return/^(?:num|string|regexp)$/i.test(n)&&(a.raw=e.substring(a.pos,a.endpos)),o||(a.comments_before=r.comments_before,a.comments_after=r.comments_before=[]),r.newline_before=!1,a=new fe(a),o||(p=a),a}function d(){for(;V.has(o());)a()}function m(e){ee(e,t,r.tokline,r.tokcol,r.tokpos)}function h(e){var t=!1,n=!1,i=!1,r="."==e,s=!1,u=!1,c=function(e){for(var t,n="",i=0;(t=o())&&e(t,i++);)n+=a();return n}((function(o,a){if(s)return!1;switch(o.charCodeAt(0)){case 95:return u=!0;case 98:case 66:return i=!0;case 111:case 79:case 120:case 88:return!i&&(i=!0);case 101:case 69:return!!i||!t&&(t=n=!0);case 45:return n||0==a&&!e;case 43:return n;case n=!1,46:return!(r||i||t)&&(r=!0)}return"n"===o?(s=!0,!0):R.test(o)}));if(e&&(c=e+c),x.test(c)&&H.has_directive("use strict")&&m("Legacy octal literals are not allowed in strict mode"),u&&(c.endsWith("_")?m("Numeric separators are not allowed at the end of numeric literals"):c.includes("__")&&m("Only one underscore is allowed as numeric separator"),c=c.replace(/_/g,"")),c.endsWith("n")){const e=c.slice(0,-1),t=J(e,w.test(e));if(!r&&L.test(c)&&!isNaN(t))return _("big_int",e);m("Invalid or unexpected token")}var l=J(c);if(!isNaN(l))return _("num",l);m("Invalid syntax: "+c)}function E(e){return e>="0"&&e<="7"}function g(e,t,n){var i,s=a(!0,e);switch(s.charCodeAt(0)){case 110:return"\n";case 114:return"\r";case 116:return"\t";case 98:return"\b";case 118:return"\v";case 102:return"\f";case 120:return String.fromCharCode(D(2,t));case 117:if("{"==o()){for(a(!0),"}"===o()&&m("Expecting hex-character between {}");"0"==o();)a(!0);var u,l=c("}",!0)-r.pos;return(l>6||(u=D(l,t))>1114111)&&m("Unicode reference out of bounds"),a(!0),(i=u)>65535?(i-=65536,String.fromCharCode(55296+(i>>10))+String.fromCharCode(i%1024+56320)):String.fromCharCode(i)}return String.fromCharCode(D(4,t));case 10:return"";case 13:if("\n"==o())return a(!0,e),""}if(E(s)){if(n&&t){"0"===s&&!E(o())||m("Octal escape sequences are not allowed in template strings")}return function(e,t){var n=o();n>="0"&&n<="7"&&(e+=a(!0))[0]<="3"&&(n=o())>="0"&&n<="7"&&(e+=a(!0));if("0"===e)return"\0";e.length>0&&H.has_directive("use strict")&&t&&m("Legacy octal escape sequences are not allowed in strict mode");return String.fromCharCode(parseInt(e,8))}(s,t)}return s}function D(e,t){for(var n=0;e>0;--e){if(!t&&isNaN(parseInt(o(),16)))return parseInt(n,16)||"";var i=a(!0);isNaN(parseInt(i,16))&&m("Invalid hex-character pattern in string"),n+=i}return parseInt(n,16)}var S=K("Unterminated string constant",(function(){for(var e=a(),t="";;){var n=a(!0,!0);if("\\"==n)n=g(!0,!0);else if("\r"==n||"\n"==n)m("Unterminated string constant");else if(n==e)break;t+=n}var i=_("string",t);return i.quote=e,i})),v=K("Unterminated template",(function(e){e&&r.template_braces.push(r.brace_counter);var t,n,i="",s="";for(a(!0,!0);"`"!=(t=a(!0,!0));){if("\r"==t)"\n"==o()&&++r.pos,t="\n";else if("$"==t&&"{"==o())return a(!0,!0),r.brace_counter++,(n=_(e?"template_head":"template_substitution",i)).raw=s,n;if(s+=t,"\\"==t){var u=r.pos;t=g(!0,!(p&&("name"===p.type||"punc"===p.type&&(")"===p.value||"]"===p.value))),!0),s+=r.text.substr(u,r.pos-u)}i+=t}return r.template_braces.pop(),(n=_(e?"template_head":"template_substitution",i)).raw=s,n.end=!0,n}));function A(e){var t,n=r.regex_allowed,i=function(){for(var e=r.text,t=r.pos,n=r.text.length;t<n;++t){var i=e[t];if(B.has(i))return t}return-1}();return-1==i?(t=r.text.substr(r.pos),r.pos=r.text.length):(t=r.text.substring(r.pos,i),r.pos=i),r.col=r.tokcol+(r.pos-r.tokpos),r.comments_before.push(_(e,t,!0)),r.regex_allowed=n,H}var T=K("Unterminated multiline comment",(function(){var e=r.regex_allowed,t=c("*/",!0),n=r.text.substring(r.pos,t).replace(/\r\n|\r|\u2028|\u2029/g,"\n");return s(function(e){for(var t=0,n=0;n<e.length;n++)z(e.charCodeAt(n))&&W(e.charCodeAt(n+1))&&(t++,n++);return e.length-t}(n)+2),r.comments_before.push(_("comment2",n,!0)),r.newline_before=r.newline_before||n.includes("\n"),r.regex_allowed=e,H})),y=K("Unterminated identifier name",(function(){var e,t,n=!1,i=function(){return n=!0,a(),"u"!==o()&&m("Expecting UnicodeEscapeSequence -- uXXXX or u{XXXX}"),g(!1,!0)};if("\\"===(e=o()))q(e=i())||m("First identifier char is an invalid identifier char");else{if(!q(e))return"";a()}for(;null!=(t=o());){if("\\"===(t=o()))$(t=i())||m("Invalid escaped identifier char");else{if(!$(t))break;a()}e+=t}return O.has(e)&&n&&m("Escaped characters are not allowed in keywords"),e})),N=K("Unterminated regular expression",(function(e){for(var t,n=!1,i=!1;t=a(!0);)if(B.has(t))m("Unexpected line terminator");else if(n)e+="\\"+t,n=!1;else if("["==t)i=!0,e+=t;else if("]"==t&&i)i=!1,e+=t;else{if("/"==t&&!i)break;"\\"==t?n=!0:e+=t}return _("regexp",{source:e,flags:y()})}));function k(e){return _("operator",function e(t){if(!o())return t;var n=t+o();return P.has(n)?(a(),e(n)):t}(e||a()))}function I(){switch(a(),o()){case"/":return a(),A("comment1");case"*":return a(),T()}return r.regex_allowed?N(""):k("/")}function K(e,t){return function(n){try{return t(n)}catch(t){if(t!==ne)throw t;m(e)}}}function H(e){if(null!=e)return N(e);for(i&&0==r.pos&&u("#!")&&(l(),s(2),A("comment5"));;){if(d(),l(),n){if(u("\x3c!--")){s(4),A("comment3");continue}if(u("--\x3e")&&r.newline_before){s(3),A("comment4");continue}}var t=o();if(!t)return _("eof");var c=t.charCodeAt(0);switch(c){case 34:case 39:return S();case 46:return a(),Y(o().charCodeAt(0))?h("."):"."===o()?(a(),a(),_("expand","...")):_("punc",".");case 47:var p=I();if(p===H)continue;return p;case 61:return a(),">"===o()?(a(),_("arrow","=>")):k("=");case 96:return v(!0);case 123:r.brace_counter++;break;case 125:if(r.brace_counter--,r.template_braces.length>0&&r.template_braces[r.template_braces.length-1]===r.brace_counter)return v(!1)}if(Y(c))return h();if(G.has(t))return _("punc",a());if(M.has(t))return k();if(92==c||q(t))return E=void 0,E=y(),f?_("name",E):C.has(E)?_("atom",E):b.has(E)?P.has(E)?_("operator",E):_("keyword",E):_("name",E);break}var E;m("Unexpected character '"+t+"'")}return H.next=a,H.peek=o,H.context=function(e){return e&&(r=e),r},H.add_directive=function(e){r.directive_stack[r.directive_stack.length-1].push(e),void 0===r.directives[e]?r.directives[e]=1:r.directives[e]++},H.push_directives_stack=function(){r.directive_stack.push([])},H.pop_directives_stack=function(){for(var e=r.directive_stack[r.directive_stack.length-1],t=0;t<e.length;t++)r.directives[e[t]]--;r.directive_stack.pop()},H.has_directive=function(e){return r.directives[e]>0},H}var re=E(["typeof","void","delete","--","++","!","~","-","+"]),oe=E(["--","++"]),ae=E(["=","+=","-=","/=","*=","**=","%=",">>=","<<=",">>>=","|=","^=","&="]),se=function(e,t){for(var n=0;n<e.length;++n)for(var i=e[n],r=0;r<i.length;++r)t[i[r]]=n+1;return t}([["||"],["??"],["&&"],["|"],["^"],["&"],["==","===","!=","!=="],["<",">","<=",">=","in","instanceof"],[">>","<<",">>>"],["+","-"],["*","/","%"],["**"]],{}),ue=E(["atom","num","big_int","string","regexp","name"]);function ce(e,t){const n=new Map;t=o(t,{bare_returns:!1,ecma:2017,expression:!1,filename:null,html5_comments:!0,module:!1,shebang:!0,strict:!1,toplevel:null},!0);var i={input:"string"==typeof e?ie(e,t.filename,t.html5_comments,t.shebang):e,token:null,prev:null,peeked:null,in_function:0,in_async:-1,in_generator:-1,in_directives:!0,in_loop:0,labels:[]};function r(e,t){return te(i.token,e,t)}function a(){return i.peeked||(i.peeked=i.input())}function s(){return i.prev=i.token,i.peeked||a(),i.token=i.peeked,i.peeked=null,i.in_directives=i.in_directives&&("string"==i.token.type||r("punc",";")),i.token}function u(){return i.prev}function c(e,t,n,r){var o=i.input.context();ee(e,o.filename,null!=t?t:o.tokline,null!=n?n:o.tokcol,null!=r?r:o.tokpos)}function l(e,t){c(t,e.line,e.col)}function f(e){null==e&&(e=i.token),l(e,"Unexpected token: "+e.type+" ("+e.value+")")}function p(e,t){if(r(e,t))return s();l(i.token,"Unexpected token "+i.token.type+" «"+i.token.value+"», expected "+e+" «"+t+"»")}function _(e){return p("punc",e)}function d(e){return e.nlb||!e.comments_before.every(e=>!e.nlb)}function m(){return!t.strict&&(r("eof")||r("punc","}")||d(i.token))}function h(){return i.in_generator===i.in_function}function E(){return i.in_async===i.in_function}function g(e){r("punc",";")?s():e||m()||f()}function D(){_("(");var e=qe(!0);return _(")"),e}function S(e){return function(...t){const n=i.token,r=e(...t);return r.start=n,r.end=u(),r}}function v(){(r("operator","/")||r("operator","/="))&&(i.peeked=null,i.token=i.input(i.token.value.substr(1)))}i.token=s();var A=S((function(e,n,o){switch(v(),i.token.type){case"string":if(i.in_directives){var h=a();!i.token.raw.includes("\\")&&(te(h,"punc",";")||te(h,"punc","}")||d(h)||te(h,"eof"))?i.input.add_directive(i.token.value):i.in_directives=!1}var S=i.in_directives,y=T();return S&&y.body instanceof fn?new me(y.body):y;case"template_head":case"num":case"big_int":case"regexp":case"operator":case"atom":return T();case"name":if("async"==i.token.value&&te(a(),"keyword","function"))return s(),s(),n&&c("functions are not allowed as the body of a loop"),F(Be,!1,!0,e);if("import"==i.token.value&&!te(a(),"punc","(")){s();var C=function(){var e,t,n=u();r("name")&&(e=le(en));r("punc",",")&&s();((t=J(!0))||e)&&p("name","from");var o=i.token;"string"!==o.type&&f();return s(),new _t({start:n,imported_name:e,imported_names:t,module_name:new fn({start:o,value:o.value,quote:o.quote,end:o}),end:i.token})}();return g(),C}return te(a(),"punc",":")?function(){var e=le(nn);"await"===e.name&&E()&&l(i.prev,"await cannot be used as label inside async function");i.labels.some(t=>t.name===e.name)&&c("Label "+e.name+" defined twice");_(":"),i.labels.push(e);var t=A();i.labels.pop(),t instanceof ye||e.references.forEach((function(t){t instanceof je&&(t=t.label.start,c("Continue label `"+e.name+"` refers to non-IterationStatement.",t.line,t.col,t.pos))}));return new Te({body:t,label:e})}():T();case"punc":switch(i.token.value){case"{":return new Se({start:i.token,body:N(),end:u()});case"[":case"(":return T();case";":return i.in_directives=!1,s(),new ve;default:f()}case"keyword":switch(i.token.value){case"break":return s(),b($e);case"continue":return s(),b(je);case"debugger":return s(),g(),new de;case"do":s();var O=tt(A);p("keyword","while");var M=D();return g(!0),new Ce({body:O,condition:M});case"while":return s(),new Oe({condition:D(),body:tt((function(){return A(!1,!0)}))});case"for":return s(),function(){var e="`for await` invalid in this context",t=i.token;"name"==t.type&&"await"==t.value?(E()||l(t,e),s()):t=!1;_("(");var n=null;if(r("punc",";"))t&&l(t,e);else{n=r("keyword","var")?(s(),L(!0)):r("keyword","let")?(s(),P(!0)):r("keyword","const")?(s(),V(!0)):qe(!0,!0);var o=r("operator","in"),a=r("name","of");if(t&&!a&&l(t,e),o||a)return n instanceof st?n.definitions.length>1&&l(n.start,"Only one variable declaration allowed in for..in loop"):xe(n)||(n=Xe(n))instanceof Ke||l(n.start,"Invalid left-hand side in for..in loop"),s(),o?function(e){var t=qe(!0);return _(")"),new Me({init:e,object:t,body:tt((function(){return A(!1,!0)}))})}(n):function(e,t){var n=e instanceof st?e.definitions[0].name:null,i=qe(!0);return _(")"),new Re({await:t,init:e,name:n,object:i,body:tt((function(){return A(!1,!0)}))})}(n,!!t)}return function(e){_(";");var t=r("punc",";")?null:qe(!0);_(";");var n=r("punc",")")?null:qe(!0);return _(")"),new Fe({init:e,condition:t,step:n,body:tt((function(){return A(!1,!0)}))})}(n)}();case"class":return s(),n&&c("classes are not allowed as the body of a loop"),o&&c("classes are not allowed as the body of an if"),q(Pt);case"function":return s(),n&&c("functions are not allowed as the body of a loop"),F(Be,!1,!1,e);case"if":return s(),function(){var e=D(),t=A(!1,!1,!0),n=null;r("keyword","else")&&(s(),n=A(!1,!1,!0));return new Qe({condition:e,body:t,alternative:n})}();case"return":0!=i.in_function||t.bare_returns||c("'return' outside of function"),s();var w=null;return r("punc",";")?s():m()||(w=qe(!0),g()),new We({value:w});case"switch":return s(),new et({expression:D(),body:tt(k)});case"throw":s(),d(i.token)&&c("Illegal newline after 'throw'");w=qe(!0);return g(),new Ye({value:w});case"try":return s(),function(){var e=N(),t=null,n=null;if(r("keyword","catch")){var o=i.token;if(s(),r("punc","{"))var a=null;else{_("(");a=R(void 0,Qt);_(")")}t=new ot({start:o,argname:a,body:N(),end:u()})}if(r("keyword","finally")){o=i.token;s(),n=new at({start:o,body:N(),end:u()})}t||n||c("Missing catch/finally blocks");return new rt({body:e,bcatch:t,bfinally:n})}();case"var":s();C=L();return g(),C;case"let":s();C=P();return g(),C;case"const":s();C=V();return g(),C;case"with":return i.input.has_directive("use strict")&&c("Strict mode may not include a with statement"),s(),new we({expression:D(),body:A()});case"export":if(!te(a(),"punc","(")){s();C=function(){var e,t,n,o,c,l=i.token;if(r("keyword","default"))e=!0,s();else if(t=J(!1)){if(r("name","from")){s();var p=i.token;return"string"!==p.type&&f(),s(),new dt({start:l,is_default:e,exported_names:t,module_name:new fn({start:p,value:p.value,quote:p.quote,end:p}),end:u()})}return new dt({start:l,is_default:e,exported_names:t,end:u()})}r("punc","{")||e&&(r("keyword","class")||r("keyword","function"))&&te(a(),"punc")?(o=qe(!1),g()):(n=A(e))instanceof st&&e?f(n.start):n instanceof st||n instanceof Ie||n instanceof Pt?c=n:n instanceof he?o=n.body:f(n.start);return new dt({start:l,is_default:e,exported_value:o,exported_definition:c,end:u()})}();return r("punc",";")&&g(),C}}}f()}));function T(e){return new he({body:(e=qe(!0),g(),e)})}function b(e){var t,n=null;m()||(n=le(sn,!0)),null!=n?((t=i.labels.find(e=>e.name===n.name))||c("Undefined label "+n.name),n.thedef=t):0==i.in_loop&&c(e.TYPE+" not inside a loop or switch"),g();var r=new e({label:n});return t&&t.references.push(r),r}var C=function(e,t,n){d(i.token)&&c("Unexpected newline before arrow (=>)"),p("arrow","=>");var o=x(r("punc","{"),!1,n),a=o instanceof Array&&o.length?o[o.length-1].end:o instanceof Array?e:o.end;return new Ve({start:e,end:a,async:n,argnames:t,body:o})},F=function(e,t,n,i){var o=e===Be,a=r("operator","*");a&&s();var c=r("name")?le(o?Yt:jt):null;o&&!c&&(i?e=Pe:f()),!c||e===Le||c instanceof Ut||f(u());var l=[],p=x(!0,a||t,n,c,l);return new e({start:l.start,end:p.end,is_generator:a,async:n,name:c,argnames:l,body:p})};function M(e,t){var n=new Set,i=!1,r=!1,o=!1,a=!!t,s={add_parameter:function(t){if(n.has(t.value))!1===i&&(i=t),s.check_strict();else if(n.add(t.value),e)switch(t.value){case"arguments":case"eval":case"yield":a&&l(t,"Unexpected "+t.value+" identifier as parameter inside strict mode");break;default:O.has(t.value)&&f()}},mark_default_assignment:function(e){!1===r&&(r=e)},mark_spread:function(e){!1===o&&(o=e)},mark_strict_mode:function(){a=!0},is_strict:function(){return!1!==r||!1!==o||a},check_strict:function(){s.is_strict()&&!1!==i&&l(i,"Parameter "+i.value+" was used already")}};return s}function R(e,t){var n,o=!1;return void 0===e&&(e=M(!0,i.input.has_directive("use strict"))),r("expand","...")&&(o=i.token,e.mark_spread(i.token),s()),n=w(e,t),r("operator","=")&&!1===o&&(e.mark_default_assignment(i.token),s(),n=new Ot({start:n.start,left:n,operator:"=",right:qe(!1),end:i.token})),!1!==o&&(r("punc",")")||f(),n=new ke({start:o,expression:n,end:o})),e.check_strict(),n}function w(e,t){var n,o=[],l=!0,p=!1,d=i.token;if(void 0===e&&(e=M(!1,i.input.has_directive("use strict"))),t=void 0===t?Wt:t,r("punc","[")){for(s();!r("punc","]");){if(l?l=!1:_(","),r("expand","...")&&(p=!0,n=i.token,e.mark_spread(i.token),s()),r("punc"))switch(i.token.value){case",":o.push(new Dn({start:i.token,end:i.token}));continue;case"]":break;case"[":case"{":o.push(w(e,t));break;default:f()}else r("name")?(e.add_parameter(i.token),o.push(le(t))):c("Invalid function parameter");r("operator","=")&&!1===p&&(e.mark_default_assignment(i.token),s(),o[o.length-1]=new Ot({start:o[o.length-1].start,left:o[o.length-1],operator:"=",right:qe(!1),end:i.token})),p&&(r("punc","]")||c("Rest element must be last element"),o[o.length-1]=new ke({start:n,expression:o[o.length-1],end:n}))}return _("]"),e.check_strict(),new Ke({start:d,names:o,is_array:!0,end:u()})}if(r("punc","{")){for(s();!r("punc","}");){if(l?l=!1:_(","),r("expand","...")&&(p=!0,n=i.token,e.mark_spread(i.token),s()),r("name")&&(te(a(),"punc")||te(a(),"operator"))&&[",","}","="].includes(a().value)){e.add_parameter(i.token);var m=u(),h=le(t);p?o.push(new ke({start:n,expression:h,end:h.end})):o.push(new wt({start:m,key:h.name,value:h,end:h.end}))}else{if(r("punc","}"))continue;var E=i.token,g=Q();null===g?f(u()):"name"!==u().type||r("punc",":")?(_(":"),o.push(new wt({start:E,quote:E.quote,key:g,value:w(e,t),end:u()}))):o.push(new wt({start:u(),key:g,value:new t({start:u(),name:g,end:u()}),end:u()}))}p?r("punc","}")||c("Rest element must be last element"):r("operator","=")&&(e.mark_default_assignment(i.token),s(),o[o.length-1].value=new Ot({start:o[o.length-1].value.start,left:o[o.length-1].value,operator:"=",right:qe(!1),end:i.token}))}return _("}"),e.check_strict(),new Ke({start:d,names:o,is_array:!1,end:u()})}if(r("name"))return e.add_parameter(i.token),le(t);c("Invalid function parameter")}function x(e,n,o,a,u){var c=i.in_loop,l=i.labels,p=i.in_generator,d=i.in_async;if(++i.in_function,n&&(i.in_generator=i.in_function),o&&(i.in_async=i.in_function),u&&function(e){var n=M(!0,i.input.has_directive("use strict"));for(_("(");!r("punc",")");){var o=R(n);if(e.push(o),r("punc",")")||(_(","),r("punc",")")&&t.ecma<2017&&f()),o instanceof ke)break}s()}(u),e&&(i.in_directives=!0),i.in_loop=0,i.labels=[],e){i.input.push_directives_stack();var m=N();a&&ce(a),u&&u.forEach(ce),i.input.pop_directives_stack()}else m=[new We({start:i.token,value:qe(!1),end:i.token})];return--i.in_function,i.in_loop=c,i.labels=l,i.in_generator=p,i.in_async=d,m}function N(){_("{");for(var e=[];!r("punc","}");)r("eof")&&f(),e.push(A());return s(),e}function k(){_("{");for(var e,t=[],n=null,o=null;!r("punc","}");)r("eof")&&f(),r("keyword","case")?(o&&(o.end=u()),n=[],o=new it({start:(e=i.token,s(),e),expression:qe(!0),body:n}),t.push(o),_(":")):r("keyword","default")?(o&&(o.end=u()),n=[],o=new nt({start:(e=i.token,s(),_(":"),e),body:n}),t.push(o)):(n||f(),n.push(A()));return o&&(o.end=u()),s(),t}function I(e,t){for(var n,o=[];;){var a="var"===t?Gt:"const"===t?Xt:"let"===t?zt:null;if(r("punc","{")||r("punc","[")?n=new ft({start:i.token,name:w(void 0,a),value:r("operator","=")?(p("operator","="),qe(!1,e)):null,end:u()}):"import"==(n=new ft({start:i.token,name:le(a),value:r("operator","=")?(s(),qe(!1,e)):e||"const"!==t?null:c("Missing initializer in const declaration"),end:u()})).name.name&&c("Unexpected token: import"),o.push(n),!r("punc",","))break;s()}return o}var L=function(e){return new ut({start:u(),definitions:I(e,"var"),end:u()})},P=function(e){return new ct({start:u(),definitions:I(e,"let"),end:u()})},V=function(e){return new lt({start:u(),definitions:I(e,"const"),end:u()})};function B(){var e,t=i.token;switch(t.type){case"name":e=ne(rn);break;case"num":e=new pn({start:t,end:t,value:t.value});break;case"big_int":e=new _n({start:t,end:t,value:t.value});break;case"string":e=new fn({start:t,end:t,value:t.value,quote:t.quote});break;case"regexp":e=new dn({start:t,end:t,value:t.value});break;case"atom":switch(t.value){case"false":e=new An({start:t,end:t});break;case"true":e=new Tn({start:t,end:t});break;case"null":e=new hn({start:t,end:t})}}return s(),e}function U(e,t,n,i){var r=function(e,t){return t?new Ot({start:e.start,left:e,operator:"=",right:t,end:t.end}):e};return e instanceof Mt?r(new Ke({start:e.start,end:e.end,is_array:!1,names:e.properties.map(U)}),i):e instanceof wt?(e.value=U(e.value,0,[e.key]),r(e,i)):e instanceof Dn?e:e instanceof Ke?(e.names=e.names.map(U),r(e,i)):e instanceof rn?r(new Wt({name:e.name,start:e.start,end:e.end}),i):e instanceof ke?(e.expression=U(e.expression),r(e,i)):e instanceof Ft?r(new Ke({start:e.start,end:e.end,is_array:!0,names:e.elements.map(U)}),i):e instanceof Ct?r(U(e.left,void 0,void 0,e.right),i):e instanceof Ot?(e.left=U(e.left,0,[e.left]),e):void c("Invalid function parameter",e.start.line,e.start.col)}var G=function(e,o){if(r("operator","new"))return function(e){var n=i.token;if(p("operator","new"),r("punc","."))return s(),p("name","target"),_e(new Kt({start:n,end:u()}),e);var o,a=G(!1);r("punc","(")?(s(),o=X(")",t.ecma>=2017)):o=[];var c=new ht({start:n,expression:a,args:o,end:u()});return fe(c),_e(c,e)}(e);var c,l=i.token,d=r("name","async")&&"["!=(c=a()).value&&"arrow"!=c.type&&B();if(r("punc")){switch(i.token.value){case"(":if(d&&!e)break;var m=function(e,n){var o,a,c,l=[];for(_("(");!r("punc",")");)o&&f(o),r("expand","...")?(o=i.token,n&&(a=i.token),s(),l.push(new ke({start:u(),expression:qe(),end:i.token}))):l.push(qe()),r("punc",")")||(_(","),r("punc",")")&&(t.ecma<2017&&f(),c=u(),n&&(a=c)));return _(")"),e&&r("arrow","=>")?o&&c&&f(c):a&&f(a),l}(o,!d);if(o&&r("arrow","=>"))return C(l,m.map(U),!!d);var h=d?new mt({expression:d,args:m}):1==m.length?m[0]:new Et({expressions:m});if(h.start){const e=l.comments_before.length;if(n.set(l,e),h.start.comments_before.unshift(...l.comments_before),l.comments_before=h.start.comments_before,0==e&&l.comments_before.length>0){var E=l.comments_before[0];E.nlb||(E.nlb=l.nlb,l.nlb=!1)}l.comments_after=h.start.comments_after}h.start=l;var g=u();return h.end&&(g.comments_before=h.end.comments_before,h.end.comments_after.push(...g.comments_after),g.comments_after=h.end.comments_after),h.end=g,h instanceof mt&&fe(h),_e(h,e);case"[":return _e(z(),e);case"{":return _e(Y(),e)}d||f()}if(o&&r("name")&&te(a(),"arrow")){var D=new Wt({name:i.token.value,start:l,end:l});return s(),C(l,[D],!!d)}if(r("keyword","function")){s();var S=F(Pe,!1,!!d);return S.start=l,S.end=u(),_e(S,e)}if(d)return _e(d,e);if(r("keyword","class")){s();var v=q(Vt);return v.start=l,v.end=u(),_e(v,e)}return r("template_head")?_e(H(),e):ue.has(i.token.type)?_e(B(),e):void f()};function H(){var e=[],t=i.token;for(e.push(new He({start:i.token,raw:i.token.raw,value:i.token.value,end:i.token}));!i.token.end;)s(),v(),e.push(qe(!0)),te("template_substitution")||f(),e.push(new He({start:i.token,raw:i.token.raw,value:i.token.value,end:i.token}));return s(),new Ge({start:t,segments:e,end:i.token})}function X(e,t,n){for(var o=!0,a=[];!r("punc",e)&&(o?o=!1:_(","),!t||!r("punc",e));)r("punc",",")&&n?a.push(new Dn({start:i.token,end:i.token})):r("expand","...")?(s(),a.push(new ke({start:u(),expression:qe(),end:i.token}))):a.push(qe(!1));return s(),a}var z=S((function(){return _("["),new Ft({elements:X("]",!t.strict,!0)})})),W=S((e,t)=>F(Le,e,t)),Y=S((function(){var e=i.token,n=!0,o=[];for(_("{");!r("punc","}")&&(n?n=!1:_(","),t.strict||!r("punc","}"));)if("expand"!=(e=i.token).type){var a,c=Q();if(r("punc",":"))null===c?f(u()):(s(),a=qe(!1));else{var l=$(c,e);if(l){o.push(l);continue}a=new rn({start:u(),name:c,end:u()})}r("operator","=")&&(s(),a=new Ct({start:e,left:a,operator:"=",right:qe(!1),end:u()})),o.push(new wt({start:e,quote:e.quote,key:c instanceof pe?c:""+c,value:a,end:u()}))}else s(),o.push(new ke({start:e,expression:qe(!1),end:u()}));return s(),new Mt({properties:o})}));function q(e){var t,n,o,a,c=[];for(i.input.push_directives_stack(),i.input.add_directive("use strict"),"name"==i.token.type&&"extends"!=i.token.value&&(o=le(e===Pt?Zt:Jt)),e!==Pt||o||f(),"extends"==i.token.value&&(s(),a=qe(!0)),_("{");r("punc",";");)s();for(;!r("punc","}");)for(t=i.token,(n=$(Q(),t,!0))||f(),c.push(n);r("punc",";");)s();return i.input.pop_directives_stack(),s(),new e({start:t,name:o,extends:a,properties:c,end:u()})}function $(e,t,n){var o=function(e,t){return"string"==typeof e||"number"==typeof e?new qt({start:t,name:""+e,end:u()}):(null===e&&f(),e)};var a=!1,c=!1,l=!1,p=t;if(n&&"static"===e&&!r("punc","(")&&(c=!0,p=i.token,e=Q()),"async"!==e||r("punc","(")||r("punc",",")||r("punc","}")||r("operator","=")||(a=!0,p=i.token,e=Q()),null===e&&(l=!0,p=i.token,null===(e=Q())&&f()),r("punc","("))return e=o(e,t),new kt({start:t,static:c,is_generator:l,async:a,key:e,quote:e instanceof qt?p.quote:void 0,value:W(l,a),end:u()});const _=i.token;if("get"==e){if(!r("punc")||r("punc","["))return e=o(Q(),t),new Nt({start:t,static:c,key:e,quote:e instanceof qt?_.quote:void 0,value:W(),end:u()})}else if("set"==e&&(!r("punc")||r("punc","[")))return e=o(Q(),t),new xt({start:t,static:c,key:e,quote:e instanceof qt?_.quote:void 0,value:W(),end:u()});if(n){const n=(e=>"string"==typeof e||"number"==typeof e?new $t({start:p,end:p,name:""+e}):(null===e&&f(),e))(e),i=n instanceof $t?p.quote:void 0;if(r("operator","="))return s(),new Lt({start:t,static:c,quote:i,key:n,value:qe(!1),end:u()});if(r("name")||r("punc",";")||r("punc","}"))return new Lt({start:t,static:c,quote:i,key:n,end:u()})}}function j(e){function t(e){return new e({name:Q(),start:u(),end:u()})}var n,o,a=e?tn:an,c=e?en:on,l=i.token;return e?n=t(a):o=t(c),r("name","as")?(s(),e?o=t(c):n=t(a)):e?o=new c(n):n=new a(o),new pt({start:l,foreign_name:n,name:o,end:u()})}function Z(e,t){var n,r=e?tn:an,o=e?en:on,a=i.token,s=u();return t=t||new o({name:"*",start:a,end:s}),n=new r({name:"*",start:a,end:s}),new pt({start:a,foreign_name:n,name:t,end:s})}function J(e){var t;if(r("punc","{")){for(s(),t=[];!r("punc","}");)t.push(j(e)),r("punc",",")&&s();s()}else if(r("operator","*")){var n;s(),e&&r("name","as")&&(s(),n=le(e?en:an)),t=[Z(e,n)]}return t}function Q(){var e=i.token;switch(e.type){case"punc":if("["===e.value){s();var t=qe(!1);return _("]"),t}f(e);case"operator":if("*"===e.value)return s(),null;["delete","in","instanceof","new","typeof","void"].includes(e.value)||f(e);case"name":case"string":case"num":case"big_int":case"keyword":case"atom":return s(),e.value;default:f(e)}}function ne(e){var t=i.token.value;return new("this"==t?un:"super"==t?cn:e)({name:String(t),start:i.token,end:i.token})}function ce(e){var t=e.name;h()&&"yield"==t&&l(e.start,"Yield cannot be used as identifier inside generators"),i.input.has_directive("use strict")&&("yield"==t&&l(e.start,"Unexpected yield identifier inside strict mode"),e instanceof Ut&&("arguments"==t||"eval"==t)&&l(e.start,"Unexpected "+t+" in strict mode"))}function le(e,t){if(!r("name"))return t||c("Name expected"),null;var n=ne(e);return ce(n),s(),n}function fe(e){var t=e.start,i=t.comments_before;const r=n.get(t);for(var o=null!=r?r:i.length;--o>=0;){var a=i[o];if(/[@#]__/.test(a.value)){if(/[@#]__PURE__/.test(a.value)){y(e,Mn);break}if(/[@#]__INLINE__/.test(a.value)){y(e,Rn);break}if(/[@#]__NOINLINE__/.test(a.value)){y(e,wn);break}}}}var _e=function(e,t){var n,o=e.start;if(r("punc","."))return s(),_e(new Dt({start:o,expression:e,property:(n=i.token,"name"!=n.type&&f(),s(),n.value),end:u()}),t);if(r("punc","[")){s();var a=qe(!0);return _("]"),_e(new St({start:o,expression:e,property:a,end:u()}),t)}if(t&&r("punc","(")){s();var c=new mt({start:o,expression:e,args:Ee(),end:u()});return fe(c),_e(c,!0)}return r("template_head")?_e(new Ue({start:o,prefix:e,template_string:H(),end:u()}),t):e};function Ee(){for(var e=[];!r("punc",")");)r("expand","...")?(s(),e.push(new ke({start:u(),expression:qe(!1),end:u()}))):e.push(qe(!1)),r("punc",")")||(_(","),r("punc",")")&&t.ecma<2017&&f());return s(),e}var ge=function(e,t){var n=i.token;if("name"==n.type&&"await"==n.value){if(E())return s(),E()||c("Unexpected await expression outside async function",i.prev.line,i.prev.col,i.prev.pos),new Ze({start:u(),end:i.token,expression:ge(!0)});i.input.has_directive("use strict")&&l(i.token,"Unexpected await identifier inside strict mode")}if(r("operator")&&re.has(n.value)){s(),v();var o=De(At,n,ge(e));return o.start=n,o.end=u(),o}for(var a=G(e,t);r("operator")&&oe.has(i.token.value)&&!d(i.token);)a instanceof Ve&&f(),(a=De(Tt,i.token,a)).start=n,a.end=i.token,s();return a};function De(e,t,n){var r=t.value;switch(r){case"++":case"--":xe(n)||c("Invalid use of "+r+" operator",t.line,t.col,t.pos);break;case"delete":n instanceof rn&&i.input.has_directive("use strict")&&c("Calling delete on expression not allowed in strict mode",n.start.line,n.start.col,n.start.pos)}return new e({operator:r,expression:n})}var Ae=function(e,t,n){var o=r("operator")?i.token.value:null;"in"==o&&n&&(o=null),"**"==o&&e instanceof At&&!te(e.start,"punc","(")&&"--"!==e.operator&&"++"!==e.operator&&f(e.start);var a=null!=o?se[o]:null;if(null!=a&&(a>t||"**"===o&&t===a)){s();var u=Ae(ge(!0),a,n);return Ae(new yt({start:e.start,left:e,operator:o,right:u,end:u.end}),t,n)}return e};var be=function(e){var t=i.token,n=function(e){return Ae(ge(!0,!0),0,e)}(e);if(r("operator","?")){s();var o=qe(!1);return _(":"),new bt({start:t,condition:n,consequent:o,alternative:qe(!1,e),end:u()})}return n};function xe(e){return e instanceof gt||e instanceof rn}function Xe(e){if(e instanceof Mt)e=new Ke({start:e.start,names:e.properties.map(Xe),is_array:!1,end:e.end});else if(e instanceof Ft){for(var t=[],n=0;n<e.elements.length;n++)e.elements[n]instanceof ke&&(n+1!==e.elements.length&&l(e.elements[n].start,"Spread must the be last element in destructuring array"),e.elements[n].expression=Xe(e.elements[n].expression)),t.push(Xe(e.elements[n]));e=new Ke({start:e.start,names:t,is_array:!0,end:e.end})}else e instanceof Rt?e.value=Xe(e.value):e instanceof Ct&&(e=new Ot({start:e.start,left:e.left,operator:"=",right:e.right,end:e.end}));return e}var ze=function(e){v();var t=i.token;if("name"==t.type&&"yield"==t.value){if(h())return s(),function(){h()||c("Unexpected yield expression outside generator function",i.prev.line,i.prev.col,i.prev.pos);var e=i.token,t=!1,n=!0;return m()||r("punc")&&K.has(i.token.value)?n=!1:r("operator","*")&&(t=!0,s()),new Je({start:e,is_star:t,expression:n?qe():null,end:u()})}();i.input.has_directive("use strict")&&l(i.token,"Unexpected yield identifier inside strict mode")}var n=be(e),o=i.token.value;if(r("operator")&&ae.has(o)){if(xe(n)||(n=Xe(n))instanceof Ke)return s(),new Ct({start:t,left:n,operator:o,right:ze(e),end:u()});c("Invalid assignment")}return n},qe=function(e,t){for(var n=i.token,o=[];o.push(ze(t)),e&&r("punc",",");)s(),e=!0;return 1==o.length?o[0]:new Et({start:n,expressions:o,end:a()})};function tt(e){++i.in_loop;var t=e();return--i.in_loop,t}return t.expression?qe(!0):function(){var e=i.token,n=[];for(i.input.push_directives_stack(),t.module&&i.input.add_directive("use strict");!r("eof");)n.push(A());i.input.pop_directives_stack();var o=u(),a=t.toplevel;return a?(a.body=a.body.concat(n),a.end=o):a=new Ne({start:e,body:n,end:o}),a}()}function le(e,t,n,i=pe){var r=t=t?t.split(/\s+/):[];i&&i.PROPS&&(t=t.concat(i.PROPS));for(var o="return function AST_"+e+"(props){ if (props) { ",a=t.length;--a>=0;)o+="this."+t[a]+" = props."+t[a]+";";const s=i&&Object.create(i.prototype);(s&&s.initialize||n&&n.initialize)&&(o+="this.initialize();"),o+="}",o+="this.flags = 0;",o+="}";var u=new Function(o)();if(s&&(u.prototype=s,u.BASE=i),i&&i.SUBCLASSES.push(u),u.prototype.CTOR=u,u.prototype.constructor=u,u.PROPS=t||null,u.SELF_PROPS=r,u.SUBCLASSES=[],e&&(u.prototype.TYPE=u.TYPE=e),n)for(a in n)D(n,a)&&("$"===a[0]?u[a.substr(1)]=n[a]:u.prototype[a]=n[a]);return u.DEFMETHOD=function(e,t){this.prototype[e]=t},u}var fe=le("Token","type value line col pos endline endcol endpos nlb comments_before comments_after file raw quote end",{},null),pe=le("Node","start end",{_clone:function(e){if(e){var t=this.clone();return t.transform(new Fn((function(e){if(e!==t)return e.clone(!0)})))}return new this.CTOR(this)},clone:function(e){return this._clone(e)},$documentation:"Base class of all AST nodes",$propdoc:{start:"[AST_Token] The first token of this node",end:"[AST_Token] The last token of this node"},_walk:function(e){return e._visit(this)},walk:function(e){return this._walk(e)},_children_backwards:()=>{}},null);pe.warn_function=null,pe.warn=function(e,t){pe.warn_function&&pe.warn_function(d(e,t))};var _e=le("Statement",null,{$documentation:"Base class of all statements"}),de=le("Debugger",null,{$documentation:"Represents a debugger statement"},_e),me=le("Directive","value quote",{$documentation:'Represents a directive, like "use strict";',$propdoc:{value:"[string] The value of this directive as a plain string (it's not an AST_String!)",quote:"[string] the original quote character"}},_e),he=le("SimpleStatement","body",{$documentation:"A statement consisting of an expression, i.e. a = 1 + 2",$propdoc:{body:"[AST_Node] an expression node (should not be instanceof AST_Statement)"},_walk:function(e){return e._visit(this,(function(){this.body._walk(e)}))},_children_backwards(e){e(this.body)}},_e);function Ee(e,t){const n=e.body;for(var i=0,r=n.length;i<r;i++)n[i]._walk(t)}function ge(e){var t=this._clone(e);return this.block_scope&&(t.block_scope=this.block_scope.clone()),t}var De=le("Block","body block_scope",{$documentation:"A body of statements (usually braced)",$propdoc:{body:"[AST_Statement*] an array of statements",block_scope:"[AST_Scope] the block scope"},_walk:function(e){return e._visit(this,(function(){Ee(this,e)}))},_children_backwards(e){let t=this.body.length;for(;t--;)e(this.body[t])},clone:ge},_e),Se=le("BlockStatement",null,{$documentation:"A block statement"},De),ve=le("EmptyStatement",null,{$documentation:"The empty statement (empty block or simply a semicolon)"},_e),Ae=le("StatementWithBody","body",{$documentation:"Base class for all statements that contain one nested body: `For`, `ForIn`, `Do`, `While`, `With`",$propdoc:{body:"[AST_Statement] the body; this should always be present, even if it's an AST_EmptyStatement"}},_e),Te=le("LabeledStatement","label",{$documentation:"Statement with a label",$propdoc:{label:"[AST_Label] a label definition"},_walk:function(e){return e._visit(this,(function(){this.label._walk(e),this.body._walk(e)}))},_children_backwards(e){e(this.body),e(this.label)},clone:function(e){var t=this._clone(e);if(e){var n=t.label,i=this.label;t.walk(new On((function(e){e instanceof qe&&e.label&&e.label.thedef===i&&(e.label.thedef=n,n.references.push(e))})))}return t}},Ae),ye=le("IterationStatement","block_scope",{$documentation:"Internal class.  All loops inherit from it.",$propdoc:{block_scope:"[AST_Scope] the block scope for this iteration statement."},clone:ge},Ae),be=le("DWLoop","condition",{$documentation:"Base class for do/while statements",$propdoc:{condition:"[AST_Node] the loop condition.  Should not be instanceof AST_Statement"}},ye),Ce=le("Do",null,{$documentation:"A `do` statement",_walk:function(e){return e._visit(this,(function(){this.body._walk(e),this.condition._walk(e)}))},_children_backwards(e){e(this.condition),e(this.body)}},be),Oe=le("While",null,{$documentation:"A `while` statement",_walk:function(e){return e._visit(this,(function(){this.condition._walk(e),this.body._walk(e)}))},_children_backwards(e){e(this.body),e(this.condition)}},be),Fe=le("For","init condition step",{$documentation:"A `for` statement",$propdoc:{init:"[AST_Node?] the `for` initialization code, or null if empty",condition:"[AST_Node?] the `for` termination clause, or null if empty",step:"[AST_Node?] the `for` update clause, or null if empty"},_walk:function(e){return e._visit(this,(function(){this.init&&this.init._walk(e),this.condition&&this.condition._walk(e),this.step&&this.step._walk(e),this.body._walk(e)}))},_children_backwards(e){e(this.body),this.step&&e(this.step),this.condition&&e(this.condition),this.init&&e(this.init)}},ye),Me=le("ForIn","init object",{$documentation:"A `for ... in` statement",$propdoc:{init:"[AST_Node] the `for/in` initialization code",object:"[AST_Node] the object that we're looping through"},_walk:function(e){return e._visit(this,(function(){this.init._walk(e),this.object._walk(e),this.body._walk(e)}))},_children_backwards(e){e(this.body),this.object&&e(this.object),this.init&&e(this.init)}},ye),Re=le("ForOf","await",{$documentation:"A `for ... of` statement"},Me),we=le("With","expression",{$documentation:"A `with` statement",$propdoc:{expression:"[AST_Node] the `with` expression"},_walk:function(e){return e._visit(this,(function(){this.expression._walk(e),this.body._walk(e)}))},_children_backwards(e){e(this.body),e(this.expression)}},Ae),xe=le("Scope","variables functions uses_with uses_eval parent_scope enclosed cname _var_name_cache",{$documentation:"Base class for all statements introducing a lexical scope",$propdoc:{variables:"[Map/S] a map of name -> SymbolDef for all variables/functions defined in this scope",functions:"[Map/S] like `variables`, but only lists function declarations",uses_with:"[boolean/S] tells whether this scope uses the `with` statement",uses_eval:"[boolean/S] tells whether this scope contains a direct call to the global `eval`",parent_scope:"[AST_Scope?/S] link to the parent scope",enclosed:"[SymbolDef*/S] a list of all symbol definitions that are accessed from this scope or any subscopes",cname:"[integer/S] current index for mangling variables (used internally by the mangler)"},get_defun_scope:function(){for(var e=this;e.is_block_scope();)e=e.parent_scope;return e},clone:function(e){var t=this._clone(e);return this.variables&&(t.variables=new Map(this.variables)),this.functions&&(t.functions=new Map(this.functions)),this.enclosed&&(t.enclosed=this.enclosed.slice()),this._block_scope&&(t._block_scope=this._block_scope),t},pinned:function(){return this.uses_eval||this.uses_with}},De),Ne=le("Toplevel","globals",{$documentation:"The toplevel scope",$propdoc:{globals:"[Map/S] a map of name -> SymbolDef for all undeclared names"},wrap_commonjs:function(e){var t=this.body,n="(function(exports){'$ORIG';})(typeof "+e+"=='undefined'?("+e+"={}):"+e+");";return n=(n=ce(n)).transform(new Fn((function(e){if(e instanceof me&&"$ORIG"==e.value)return f.splice(t)})))},wrap_enclose:function(e){"string"!=typeof e&&(e="");var t=e.indexOf(":");t<0&&(t=e.length);var n=this.body;return ce(["(function(",e.slice(0,t),'){"$ORIG"})(',e.slice(t+1),")"].join("")).transform(new Fn((function(e){if(e instanceof me&&"$ORIG"==e.value)return f.splice(n)})))}},xe),ke=le("Expansion","expression",{$documentation:"An expandible argument, such as ...rest, a splat, such as [1,2,...all], or an expansion in a variable declaration, such as var [first, ...rest] = list",$propdoc:{expression:"[AST_Node] the thing to be expanded"},_walk:function(e){return e._visit(this,(function(){this.expression.walk(e)}))},_children_backwards(e){e(this.expression)}}),Ie=le("Lambda","name argnames uses_arguments is_generator async",{$documentation:"Base class for functions",$propdoc:{name:"[AST_SymbolDeclaration?] the name of this function",argnames:"[AST_SymbolFunarg|AST_Destructuring|AST_Expansion|AST_DefaultAssign*] array of function arguments, destructurings, or expanding arguments",uses_arguments:"[boolean/S] tells whether this function accesses the arguments array",is_generator:"[boolean] is this a generator method",async:"[boolean] is this method async"},args_as_names:function(){for(var e=[],t=0;t<this.argnames.length;t++)this.argnames[t]instanceof Ke?e.push(...this.argnames[t].all_symbols()):e.push(this.argnames[t]);return e},_walk:function(e){return e._visit(this,(function(){this.name&&this.name._walk(e);for(var t=this.argnames,n=0,i=t.length;n<i;n++)t[n]._walk(e);Ee(this,e)}))},_children_backwards(e){let t=this.body.length;for(;t--;)e(this.body[t]);for(t=this.argnames.length;t--;)e(this.argnames[t]);this.name&&e(this.name)}},xe),Le=le("Accessor",null,{$documentation:"A setter/getter function.  The `name` property is always null."},Ie),Pe=le("Function",null,{$documentation:"A function expression"},Ie),Ve=le("Arrow",null,{$documentation:"An ES6 Arrow function ((a) => b)"},Ie),Be=le("Defun",null,{$documentation:"A function definition"},Ie),Ke=le("Destructuring","names is_array",{$documentation:"A destructuring of several names. Used in destructuring assignment and with destructuring function argument names",$propdoc:{names:"[AST_Node*] Array of properties or elements",is_array:"[Boolean] Whether the destructuring represents an object or array"},_walk:function(e){return e._visit(this,(function(){this.names.forEach((function(t){t._walk(e)}))}))},_children_backwards(e){let t=this.names.length;for(;t--;)e(this.names[t])},all_symbols:function(){var e=[];return this.walk(new On((function(t){t instanceof Bt&&e.push(t)}))),e}}),Ue=le("PrefixedTemplateString","template_string prefix",{$documentation:"A templatestring with a prefix, such as String.raw`foobarbaz`",$propdoc:{template_string:"[AST_TemplateString] The template string",prefix:"[AST_SymbolRef|AST_PropAccess] The prefix, which can be a symbol such as `foo` or a dotted expression such as `String.raw`."},_walk:function(e){return e._visit(this,(function(){this.prefix._walk(e),this.template_string._walk(e)}))},_children_backwards(e){e(this.template_string),e(this.prefix)}}),Ge=le("TemplateString","segments",{$documentation:"A template string literal",$propdoc:{segments:"[AST_Node*] One or more segments, starting with AST_TemplateSegment. AST_Node may follow AST_TemplateSegment, but each AST_Node must be followed by AST_TemplateSegment."},_walk:function(e){return e._visit(this,(function(){this.segments.forEach((function(t){t._walk(e)}))}))},_children_backwards(e){let t=this.segments.length;for(;t--;)e(this.segments[t])}}),He=le("TemplateSegment","value raw",{$documentation:"A segment of a template string literal",$propdoc:{value:"Content of the segment",raw:"Raw content of the segment"}}),Xe=le("Jump",null,{$documentation:"Base class for “jumps” (for now that's `return`, `throw`, `break` and `continue`)"},_e),ze=le("Exit","value",{$documentation:"Base class for “exits” (`return` and `throw`)",$propdoc:{value:"[AST_Node?] the value returned or thrown by this statement; could be null for AST_Return"},_walk:function(e){return e._visit(this,this.value&&function(){this.value._walk(e)})},_children_backwards(e){this.value&&e(this.value)}},Xe),We=le("Return",null,{$documentation:"A `return` statement"},ze),Ye=le("Throw",null,{$documentation:"A `throw` statement"},ze),qe=le("LoopControl","label",{$documentation:"Base class for loop control statements (`break` and `continue`)",$propdoc:{label:"[AST_LabelRef?] the label, or null if none"},_walk:function(e){return e._visit(this,this.label&&function(){this.label._walk(e)})},_children_backwards(e){this.label&&e(this.label)}},Xe),$e=le("Break",null,{$documentation:"A `break` statement"},qe),je=le("Continue",null,{$documentation:"A `continue` statement"},qe),Ze=le("Await","expression",{$documentation:"An `await` statement",$propdoc:{expression:"[AST_Node] the mandatory expression being awaited"},_walk:function(e){return e._visit(this,(function(){this.expression._walk(e)}))},_children_backwards(e){e(this.expression)}}),Je=le("Yield","expression is_star",{$documentation:"A `yield` statement",$propdoc:{expression:"[AST_Node?] the value returned or thrown by this statement; could be null (representing undefined) but only when is_star is set to false",is_star:"[Boolean] Whether this is a yield or yield* statement"},_walk:function(e){return e._visit(this,this.expression&&function(){this.expression._walk(e)})},_children_backwards(e){this.expression&&e(this.expression)}}),Qe=le("If","condition alternative",{$documentation:"A `if` statement",$propdoc:{condition:"[AST_Node] the `if` condition",alternative:"[AST_Statement?] the `else` part, or null if not present"},_walk:function(e){return e._visit(this,(function(){this.condition._walk(e),this.body._walk(e),this.alternative&&this.alternative._walk(e)}))},_children_backwards(e){this.alternative&&e(this.alternative),e(this.body),e(this.condition)}},Ae),et=le("Switch","expression",{$documentation:"A `switch` statement",$propdoc:{expression:"[AST_Node] the `switch` “discriminant”"},_walk:function(e){return e._visit(this,(function(){this.expression._walk(e),Ee(this,e)}))},_children_backwards(e){let t=this.body.length;for(;t--;)e(this.body[t]);e(this.expression)}},De),tt=le("SwitchBranch",null,{$documentation:"Base class for `switch` branches"},De),nt=le("Default",null,{$documentation:"A `default` switch branch"},tt),it=le("Case","expression",{$documentation:"A `case` switch branch",$propdoc:{expression:"[AST_Node] the `case` expression"},_walk:function(e){return e._visit(this,(function(){this.expression._walk(e),Ee(this,e)}))},_children_backwards(e){let t=this.body.length;for(;t--;)e(this.body[t]);e(this.expression)}},tt),rt=le("Try","bcatch bfinally",{$documentation:"A `try` statement",$propdoc:{bcatch:"[AST_Catch?] the catch block, or null if not present",bfinally:"[AST_Finally?] the finally block, or null if not present"},_walk:function(e){return e._visit(this,(function(){Ee(this,e),this.bcatch&&this.bcatch._walk(e),this.bfinally&&this.bfinally._walk(e)}))},_children_backwards(e){this.bfinally&&e(this.bfinally),this.bcatch&&e(this.bcatch);let t=this.body.length;for(;t--;)e(this.body[t])}},De),ot=le("Catch","argname",{$documentation:"A `catch` node; only makes sense as part of a `try` statement",$propdoc:{argname:"[AST_SymbolCatch|AST_Destructuring|AST_Expansion|AST_DefaultAssign] symbol for the exception"},_walk:function(e){return e._visit(this,(function(){this.argname&&this.argname._walk(e),Ee(this,e)}))},_children_backwards(e){let t=this.body.length;for(;t--;)e(this.body[t]);this.argname&&e(this.argname)}},De),at=le("Finally",null,{$documentation:"A `finally` node; only makes sense as part of a `try` statement"},De),st=le("Definitions","definitions",{$documentation:"Base class for `var` or `const` nodes (variable declarations/initializations)",$propdoc:{definitions:"[AST_VarDef*] array of variable definitions"},_walk:function(e){return e._visit(this,(function(){for(var t=this.definitions,n=0,i=t.length;n<i;n++)t[n]._walk(e)}))},_children_backwards(e){let t=this.definitions.length;for(;t--;)e(this.definitions[t])}},_e),ut=le("Var",null,{$documentation:"A `var` statement"},st),ct=le("Let",null,{$documentation:"A `let` statement"},st),lt=le("Const",null,{$documentation:"A `const` statement"},st),ft=le("VarDef","name value",{$documentation:"A variable declaration; only appears in a AST_Definitions node",$propdoc:{name:"[AST_Destructuring|AST_SymbolConst|AST_SymbolLet|AST_SymbolVar] name of the variable",value:"[AST_Node?] initializer, or null of there's no initializer"},_walk:function(e){return e._visit(this,(function(){this.name._walk(e),this.value&&this.value._walk(e)}))},_children_backwards(e){this.value&&e(this.value),e(this.name)}}),pt=le("NameMapping","foreign_name name",{$documentation:"The part of the export/import statement that declare names from a module.",$propdoc:{foreign_name:"[AST_SymbolExportForeign|AST_SymbolImportForeign] The name being exported/imported (as specified in the module)",name:"[AST_SymbolExport|AST_SymbolImport] The name as it is visible to this module."},_walk:function(e){return e._visit(this,(function(){this.foreign_name._walk(e),this.name._walk(e)}))},_children_backwards(e){e(this.name),e(this.foreign_name)}}),_t=le("Import","imported_name imported_names module_name",{$documentation:"An `import` statement",$propdoc:{imported_name:"[AST_SymbolImport] The name of the variable holding the module's default export.",imported_names:"[AST_NameMapping*] The names of non-default imported variables",module_name:"[AST_String] String literal describing where this module came from"},_walk:function(e){return e._visit(this,(function(){this.imported_name&&this.imported_name._walk(e),this.imported_names&&this.imported_names.forEach((function(t){t._walk(e)})),this.module_name._walk(e)}))},_children_backwards(e){if(e(this.module_name),this.imported_names){let t=this.imported_names.length;for(;t--;)e(this.imported_names[t])}this.imported_name&&e(this.imported_name)}}),dt=le("Export","exported_definition exported_value is_default exported_names module_name",{$documentation:"An `export` statement",$propdoc:{exported_definition:"[AST_Defun|AST_Definitions|AST_DefClass?] An exported definition",exported_value:"[AST_Node?] An exported value",exported_names:"[AST_NameMapping*?] List of exported names",module_name:"[AST_String?] Name of the file to load exports from",is_default:"[Boolean] Whether this is the default exported value of this module"},_walk:function(e){return e._visit(this,(function(){this.exported_definition&&this.exported_definition._walk(e),this.exported_value&&this.exported_value._walk(e),this.exported_names&&this.exported_names.forEach((function(t){t._walk(e)})),this.module_name&&this.module_name._walk(e)}))},_children_backwards(e){if(this.module_name&&e(this.module_name),this.exported_names){let t=this.exported_names.length;for(;t--;)e(this.exported_names[t])}this.exported_value&&e(this.exported_value),this.exported_definition&&e(this.exported_definition)}},_e),mt=le("Call","expression args _annotations",{$documentation:"A function call expression",$propdoc:{expression:"[AST_Node] expression to invoke as function",args:"[AST_Node*] array of arguments",_annotations:"[number] bitfield containing information about the call"},initialize(){null==this._annotations&&(this._annotations=0)},_walk(e){return e._visit(this,(function(){for(var t=this.args,n=0,i=t.length;n<i;n++)t[n]._walk(e);this.expression._walk(e)}))},_children_backwards(e){let t=this.args.length;for(;t--;)e(this.args[t]);e(this.expression)}}),ht=le("New",null,{$documentation:"An object instantiation.  Derives from a function call since it has exactly the same properties"},mt),Et=le("Sequence","expressions",{$documentation:"A sequence expression (comma-separated expressions)",$propdoc:{expressions:"[AST_Node*] array of expressions (at least two)"},_walk:function(e){return e._visit(this,(function(){this.expressions.forEach((function(t){t._walk(e)}))}))},_children_backwards(e){let t=this.expressions.length;for(;t--;)e(this.expressions[t])}}),gt=le("PropAccess","expression property",{$documentation:'Base class for property access expressions, i.e. `a.foo` or `a["foo"]`',$propdoc:{expression:"[AST_Node] the “container” expression",property:"[AST_Node|string] the property to access.  For AST_Dot this is always a plain string, while for AST_Sub it's an arbitrary AST_Node"}}),Dt=le("Dot","quote",{$documentation:"A dotted property access expression",$propdoc:{quote:"[string] the original quote character when transformed from AST_Sub"},_walk:function(e){return e._visit(this,(function(){this.expression._walk(e)}))},_children_backwards(e){e(this.expression)}},gt),St=le("Sub",null,{$documentation:'Index-style property access, i.e. `a["foo"]`',_walk:function(e){return e._visit(this,(function(){this.expression._walk(e),this.property._walk(e)}))},_children_backwards(e){e(this.property),e(this.expression)}},gt),vt=le("Unary","operator expression",{$documentation:"Base class for unary expressions",$propdoc:{operator:"[string] the operator",expression:"[AST_Node] expression that this unary operator applies to"},_walk:function(e){return e._visit(this,(function(){this.expression._walk(e)}))},_children_backwards(e){e(this.expression)}}),At=le("UnaryPrefix",null,{$documentation:"Unary prefix expression, i.e. `typeof i` or `++i`"},vt),Tt=le("UnaryPostfix",null,{$documentation:"Unary postfix expression, i.e. `i++`"},vt),yt=le("Binary","operator left right",{$documentation:"Binary expression, i.e. `a + b`",$propdoc:{left:"[AST_Node] left-hand side expression",operator:"[string] the operator",right:"[AST_Node] right-hand side expression"},_walk:function(e){return e._visit(this,(function(){this.left._walk(e),this.right._walk(e)}))},_children_backwards(e){e(this.right),e(this.left)}}),bt=le("Conditional","condition consequent alternative",{$documentation:"Conditional expression using the ternary operator, i.e. `a ? b : c`",$propdoc:{condition:"[AST_Node]",consequent:"[AST_Node]",alternative:"[AST_Node]"},_walk:function(e){return e._visit(this,(function(){this.condition._walk(e),this.consequent._walk(e),this.alternative._walk(e)}))},_children_backwards(e){e(this.alternative),e(this.consequent),e(this.condition)}}),Ct=le("Assign",null,{$documentation:"An assignment expression — `a = b + 5`"},yt),Ot=le("DefaultAssign",null,{$documentation:"A default assignment expression like in `(a = 3) => a`"},yt),Ft=le("Array","elements",{$documentation:"An array literal",$propdoc:{elements:"[AST_Node*] array of elements"},_walk:function(e){return e._visit(this,(function(){for(var t=this.elements,n=0,i=t.length;n<i;n++)t[n]._walk(e)}))},_children_backwards(e){let t=this.elements.length;for(;t--;)e(this.elements[t])}}),Mt=le("Object","properties",{$documentation:"An object literal",$propdoc:{properties:"[AST_ObjectProperty*] array of properties"},_walk:function(e){return e._visit(this,(function(){for(var t=this.properties,n=0,i=t.length;n<i;n++)t[n]._walk(e)}))},_children_backwards(e){let t=this.properties.length;for(;t--;)e(this.properties[t])}}),Rt=le("ObjectProperty","key value",{$documentation:"Base class for literal object properties",$propdoc:{key:"[string|AST_Node] property name. For ObjectKeyVal this is a string. For getters, setters and computed property this is an AST_Node.",value:"[AST_Node] property value.  For getters and setters this is an AST_Accessor."},_walk:function(e){return e._visit(this,(function(){this.key instanceof pe&&this.key._walk(e),this.value._walk(e)}))},_children_backwards(e){e(this.value),this.key instanceof pe&&e(this.key)}}),wt=le("ObjectKeyVal","quote",{$documentation:"A key: value object property",$propdoc:{quote:"[string] the original quote character"},computed_key(){return this.key instanceof pe}},Rt),xt=le("ObjectSetter","quote static",{$propdoc:{quote:"[string|undefined] the original quote character, if any",static:"[boolean] whether this is a static setter (classes only)"},$documentation:"An object setter property",computed_key(){return!(this.key instanceof qt)}},Rt),Nt=le("ObjectGetter","quote static",{$propdoc:{quote:"[string|undefined] the original quote character, if any",static:"[boolean] whether this is a static getter (classes only)"},$documentation:"An object getter property",computed_key(){return!(this.key instanceof qt)}},Rt),kt=le("ConciseMethod","quote static is_generator async",{$propdoc:{quote:"[string|undefined] the original quote character, if any",static:"[boolean] is this method static (classes only)",is_generator:"[boolean] is this a generator method",async:"[boolean] is this method async"},$documentation:"An ES6 concise method inside an object or class",computed_key(){return!(this.key instanceof qt)}},Rt),It=le("Class","name extends properties",{$propdoc:{name:"[AST_SymbolClass|AST_SymbolDefClass?] optional class name.",extends:"[AST_Node]? optional parent class",properties:"[AST_ObjectProperty*] array of properties"},$documentation:"An ES6 class",_walk:function(e){return e._visit(this,(function(){this.name&&this.name._walk(e),this.extends&&this.extends._walk(e),this.properties.forEach(t=>t._walk(e))}))},_children_backwards(e){let t=this.properties.length;for(;t--;)e(this.properties[t]);this.extends&&e(this.extends),this.name&&e(this.name)}},xe),Lt=le("ClassProperty","static quote",{$documentation:"A class property",$propdoc:{static:"[boolean] whether this is a static key",quote:"[string] which quote is being used"},_walk:function(e){return e._visit(this,(function(){this.key instanceof pe&&this.key._walk(e),this.value instanceof pe&&this.value._walk(e)}))},_children_backwards(e){this.value instanceof pe&&e(this.value),this.key instanceof pe&&e(this.key)},computed_key(){return!(this.key instanceof $t)}},Rt),Pt=le("DefClass",null,{$documentation:"A class definition"},It),Vt=le("ClassExpression",null,{$documentation:"A class expression."},It),Bt=le("Symbol","scope name thedef",{$propdoc:{name:"[string] name of this symbol",scope:"[AST_Scope/S] the current scope (not necessarily the definition scope)",thedef:"[SymbolDef/S] the definition of this symbol"},$documentation:"Base class for all symbols"}),Kt=le("NewTarget",null,{$documentation:"A reference to new.target"}),Ut=le("SymbolDeclaration","init",{$documentation:"A declaration symbol (symbol in var/const, function name or argument, symbol in catch)"},Bt),Gt=le("SymbolVar",null,{$documentation:"Symbol defining a variable"},Ut),Ht=le("SymbolBlockDeclaration",null,{$documentation:"Base class for block-scoped declaration symbols"},Ut),Xt=le("SymbolConst",null,{$documentation:"A constant declaration"},Ht),zt=le("SymbolLet",null,{$documentation:"A block-scoped `let` declaration"},Ht),Wt=le("SymbolFunarg",null,{$documentation:"Symbol naming a function argument"},Gt),Yt=le("SymbolDefun",null,{$documentation:"Symbol defining a function"},Ut),qt=le("SymbolMethod",null,{$documentation:"Symbol in an object defining a method"},Bt),$t=le("SymbolClassProperty",null,{$documentation:"Symbol for a class property"},Bt),jt=le("SymbolLambda",null,{$documentation:"Symbol naming a function expression"},Ut),Zt=le("SymbolDefClass",null,{$documentation:"Symbol naming a class's name in a class declaration. Lexically scoped to its containing scope, and accessible within the class."},Ht),Jt=le("SymbolClass",null,{$documentation:"Symbol naming a class's name. Lexically scoped to the class."},Ut),Qt=le("SymbolCatch",null,{$documentation:"Symbol naming the exception in catch"},Ht),en=le("SymbolImport",null,{$documentation:"Symbol referring to an imported name"},Ht),tn=le("SymbolImportForeign",null,{$documentation:"A symbol imported from a module, but it is defined in the other module, and its real name is irrelevant for this module's purposes"},Bt),nn=le("Label","references",{$documentation:"Symbol naming a label (declaration)",$propdoc:{references:"[AST_LoopControl*] a list of nodes referring to this label"},initialize:function(){this.references=[],this.thedef=this}},Bt),rn=le("SymbolRef",null,{$documentation:"Reference to some symbol (not definition/declaration)"},Bt),on=le("SymbolExport",null,{$documentation:"Symbol referring to a name to export"},rn),an=le("SymbolExportForeign",null,{$documentation:"A symbol exported from this module, but it is used in the other module, and its real name is irrelevant for this module's purposes"},Bt),sn=le("LabelRef",null,{$documentation:"Reference to a label symbol"},Bt),un=le("This",null,{$documentation:"The `this` symbol"},Bt),cn=le("Super",null,{$documentation:"The `super` symbol"},un),ln=le("Constant",null,{$documentation:"Base class for all constants",getValue:function(){return this.value}}),fn=le("String","value quote",{$documentation:"A string literal",$propdoc:{value:"[string] the contents of this string",quote:"[string] the original quote character"}},ln),pn=le("Number","value literal",{$documentation:"A number literal",$propdoc:{value:"[number] the numeric value",literal:"[string] numeric value as string (optional)"}},ln),_n=le("BigInt","value",{$documentation:"A big int literal",$propdoc:{value:"[string] big int value"}},ln),dn=le("RegExp","value",{$documentation:"A regexp literal",$propdoc:{value:"[RegExp] the actual regexp"}},ln),mn=le("Atom",null,{$documentation:"Base class for atoms"},ln),hn=le("Null",null,{$documentation:"The `null` atom",value:null},mn),En=le("NaN",null,{$documentation:"The impossible value",value:NaN},mn),gn=le("Undefined",null,{$documentation:"The `undefined` value",value:void 0},mn),Dn=le("Hole",null,{$documentation:"A hole in an array",value:void 0},mn),Sn=le("Infinity",null,{$documentation:"The `Infinity` value",value:1/0},mn),vn=le("Boolean",null,{$documentation:"Base class for booleans"},mn),An=le("False",null,{$documentation:"The `false` atom",value:!1},vn),Tn=le("True",null,{$documentation:"The `true` atom",value:!0},vn);function yn(e,t,n=[e]){const i=n.push.bind(n);for(;n.length;){const e=n.pop(),r=t(e,n);if(r){if(r===Cn)return!0}else e._children_backwards(i)}return!1}function bn(e,t,n){const i=[e],r=i.push.bind(i),o=n?n.slice():[],a=[];let s;const u={parent:(e=0)=>-1===e?s:n&&e>=o.length?(e-=o.length,n[n.length-(e+1)]):o[o.length-(1+e)]};for(;i.length;){for(s=i.pop();a.length&&i.length==a[a.length-1];)o.pop(),a.pop();const e=t(s,u);if(e){if(e===Cn)return!0;continue}const n=i.length;s._children_backwards(r),i.length>n&&(o.push(s),a.push(n-1))}return!1}const Cn=Symbol("abort walk");class On{constructor(e){this.visit=e,this.stack=[],this.directives=Object.create(null)}_visit(e,t){this.push(e);var n=this.visit(e,t?function(){t.call(e)}:a);return!n&&t&&t.call(e),this.pop(),n}parent(e){return this.stack[this.stack.length-2-(e||0)]}push(e){e instanceof Ie?this.directives=Object.create(this.directives):e instanceof me&&!this.directives[e.value]?this.directives[e.value]=e:e instanceof It&&(this.directives=Object.create(this.directives),this.directives["use strict"]||(this.directives["use strict"]=e)),this.stack.push(e)}pop(){var e=this.stack.pop();(e instanceof Ie||e instanceof It)&&(this.directives=Object.getPrototypeOf(this.directives))}self(){return this.stack[this.stack.length-1]}find_parent(e){for(var t=this.stack,n=t.length;--n>=0;){var i=t[n];if(i instanceof e)return i}}has_directive(e){var t=this.directives[e];if(t)return t;var n=this.stack[this.stack.length-1];if(n instanceof xe&&n.body)for(var i=0;i<n.body.length;++i){var r=n.body[i];if(!(r instanceof me))break;if(r.value==e)return r}}loopcontrol_target(e){var t=this.stack;if(e.label)for(var n=t.length;--n>=0;){if((i=t[n])instanceof Te&&i.label.name==e.label.name)return i.body}else for(n=t.length;--n>=0;){var i;if((i=t[n])instanceof ye||e instanceof $e&&i instanceof et)return i}}}class Fn extends On{constructor(e,t){super(),this.before=e,this.after=t}}const Mn=1,Rn=2,wn=4;var xn=Object.freeze({__proto__:null,AST_Accessor:Le,AST_Array:Ft,AST_Arrow:Ve,AST_Assign:Ct,AST_Atom:mn,AST_Await:Ze,AST_BigInt:_n,AST_Binary:yt,AST_Block:De,AST_BlockStatement:Se,AST_Boolean:vn,AST_Break:$e,AST_Call:mt,AST_Case:it,AST_Catch:ot,AST_Class:It,AST_ClassExpression:Vt,AST_ClassProperty:Lt,AST_ConciseMethod:kt,AST_Conditional:bt,AST_Const:lt,AST_Constant:ln,AST_Continue:je,AST_Debugger:de,AST_Default:nt,AST_DefaultAssign:Ot,AST_DefClass:Pt,AST_Definitions:st,AST_Defun:Be,AST_Destructuring:Ke,AST_Directive:me,AST_Do:Ce,AST_Dot:Dt,AST_DWLoop:be,AST_EmptyStatement:ve,AST_Exit:ze,AST_Expansion:ke,AST_Export:dt,AST_False:An,AST_Finally:at,AST_For:Fe,AST_ForIn:Me,AST_ForOf:Re,AST_Function:Pe,AST_Hole:Dn,AST_If:Qe,AST_Import:_t,AST_Infinity:Sn,AST_IterationStatement:ye,AST_Jump:Xe,AST_Label:nn,AST_LabeledStatement:Te,AST_LabelRef:sn,AST_Lambda:Ie,AST_Let:ct,AST_LoopControl:qe,AST_NameMapping:pt,AST_NaN:En,AST_New:ht,AST_NewTarget:Kt,AST_Node:pe,AST_Null:hn,AST_Number:pn,AST_Object:Mt,AST_ObjectGetter:Nt,AST_ObjectKeyVal:wt,AST_ObjectProperty:Rt,AST_ObjectSetter:xt,AST_PrefixedTemplateString:Ue,AST_PropAccess:gt,AST_RegExp:dn,AST_Return:We,AST_Scope:xe,AST_Sequence:Et,AST_SimpleStatement:he,AST_Statement:_e,AST_StatementWithBody:Ae,AST_String:fn,AST_Sub:St,AST_Super:cn,AST_Switch:et,AST_SwitchBranch:tt,AST_Symbol:Bt,AST_SymbolBlockDeclaration:Ht,AST_SymbolCatch:Qt,AST_SymbolClass:Jt,AST_SymbolClassProperty:$t,AST_SymbolConst:Xt,AST_SymbolDeclaration:Ut,AST_SymbolDefClass:Zt,AST_SymbolDefun:Yt,AST_SymbolExport:on,AST_SymbolExportForeign:an,AST_SymbolFunarg:Wt,AST_SymbolImport:en,AST_SymbolImportForeign:tn,AST_SymbolLambda:jt,AST_SymbolLet:zt,AST_SymbolMethod:qt,AST_SymbolRef:rn,AST_SymbolVar:Gt,AST_TemplateSegment:He,AST_TemplateString:Ge,AST_This:un,AST_Throw:Ye,AST_Token:fe,AST_Toplevel:Ne,AST_True:Tn,AST_Try:rt,AST_Unary:vt,AST_UnaryPostfix:Tt,AST_UnaryPrefix:At,AST_Undefined:gn,AST_Var:ut,AST_VarDef:ft,AST_While:Oe,AST_With:we,AST_Yield:Je,TreeTransformer:Fn,TreeWalker:On,walk:yn,walk_abort:Cn,walk_body:Ee,walk_parent:bn,_INLINE:Rn,_NOINLINE:wn,_PURE:Mn});function Nn(e,t){e.DEFMETHOD("transform",(function(e,n){let i=void 0;if(e.push(this),e.before&&(i=e.before(this,t,n)),void 0===i&&(i=this,t(i,e),e.after)){const t=e.after(i,n);void 0!==t&&(i=t)}return e.pop(),i}))}function kn(e,t){return f(e,(function(e){return e.transform(t,!0)}))}function In(e){let t=e.parent(-1);for(let n,i=0;n=e.parent(i);i++){if(n instanceof _e&&n.body===t)return!0;if(!(n instanceof Et&&n.expressions[0]===t||"Call"===n.TYPE&&n.expression===t||n instanceof Ue&&n.prefix===t||n instanceof Dt&&n.expression===t||n instanceof St&&n.expression===t||n instanceof bt&&n.condition===t||n instanceof yt&&n.left===t||n instanceof Tt&&n.expression===t))return!1;t=n}}Nn(pe,a),Nn(Te,(function(e,t){e.label=e.label.transform(t),e.body=e.body.transform(t)})),Nn(he,(function(e,t){e.body=e.body.transform(t)})),Nn(De,(function(e,t){e.body=kn(e.body,t)})),Nn(Ce,(function(e,t){e.body=e.body.transform(t),e.condition=e.condition.transform(t)})),Nn(Oe,(function(e,t){e.condition=e.condition.transform(t),e.body=e.body.transform(t)})),Nn(Fe,(function(e,t){e.init&&(e.init=e.init.transform(t)),e.condition&&(e.condition=e.condition.transform(t)),e.step&&(e.step=e.step.transform(t)),e.body=e.body.transform(t)})),Nn(Me,(function(e,t){e.init=e.init.transform(t),e.object=e.object.transform(t),e.body=e.body.transform(t)})),Nn(we,(function(e,t){e.expression=e.expression.transform(t),e.body=e.body.transform(t)})),Nn(ze,(function(e,t){e.value&&(e.value=e.value.transform(t))})),Nn(qe,(function(e,t){e.label&&(e.label=e.label.transform(t))})),Nn(Qe,(function(e,t){e.condition=e.condition.transform(t),e.body=e.body.transform(t),e.alternative&&(e.alternative=e.alternative.transform(t))})),Nn(et,(function(e,t){e.expression=e.expression.transform(t),e.body=kn(e.body,t)})),Nn(it,(function(e,t){e.expression=e.expression.transform(t),e.body=kn(e.body,t)})),Nn(rt,(function(e,t){e.body=kn(e.body,t),e.bcatch&&(e.bcatch=e.bcatch.transform(t)),e.bfinally&&(e.bfinally=e.bfinally.transform(t))})),Nn(ot,(function(e,t){e.argname&&(e.argname=e.argname.transform(t)),e.body=kn(e.body,t)})),Nn(st,(function(e,t){e.definitions=kn(e.definitions,t)})),Nn(ft,(function(e,t){e.name=e.name.transform(t),e.value&&(e.value=e.value.transform(t))})),Nn(Ke,(function(e,t){e.names=kn(e.names,t)})),Nn(Ie,(function(e,t){e.name&&(e.name=e.name.transform(t)),e.argnames=kn(e.argnames,t),e.body instanceof pe?e.body=e.body.transform(t):e.body=kn(e.body,t)})),Nn(mt,(function(e,t){e.expression=e.expression.transform(t),e.args=kn(e.args,t)})),Nn(Et,(function(e,t){const n=kn(e.expressions,t);e.expressions=n.length?n:[new pn({value:0})]})),Nn(Dt,(function(e,t){e.expression=e.expression.transform(t)})),Nn(St,(function(e,t){e.expression=e.expression.transform(t),e.property=e.property.transform(t)})),Nn(Je,(function(e,t){e.expression&&(e.expression=e.expression.transform(t))})),Nn(Ze,(function(e,t){e.expression=e.expression.transform(t)})),Nn(vt,(function(e,t){e.expression=e.expression.transform(t)})),Nn(yt,(function(e,t){e.left=e.left.transform(t),e.right=e.right.transform(t)})),Nn(bt,(function(e,t){e.condition=e.condition.transform(t),e.consequent=e.consequent.transform(t),e.alternative=e.alternative.transform(t)})),Nn(Ft,(function(e,t){e.elements=kn(e.elements,t)})),Nn(Mt,(function(e,t){e.properties=kn(e.properties,t)})),Nn(Rt,(function(e,t){e.key instanceof pe&&(e.key=e.key.transform(t)),e.value&&(e.value=e.value.transform(t))})),Nn(It,(function(e,t){e.name&&(e.name=e.name.transform(t)),e.extends&&(e.extends=e.extends.transform(t)),e.properties=kn(e.properties,t)})),Nn(ke,(function(e,t){e.expression=e.expression.transform(t)})),Nn(pt,(function(e,t){e.foreign_name=e.foreign_name.transform(t),e.name=e.name.transform(t)})),Nn(_t,(function(e,t){e.imported_name&&(e.imported_name=e.imported_name.transform(t)),e.imported_names&&kn(e.imported_names,t),e.module_name=e.module_name.transform(t)})),Nn(dt,(function(e,t){e.exported_definition&&(e.exported_definition=e.exported_definition.transform(t)),e.exported_value&&(e.exported_value=e.exported_value.transform(t)),e.exported_names&&kn(e.exported_names,t),e.module_name&&(e.module_name=e.module_name.transform(t))})),Nn(Ge,(function(e,t){e.segments=kn(e.segments,t)})),Nn(Ue,(function(e,t){e.prefix=e.prefix.transform(t),e.template_string=e.template_string.transform(t)}));const Ln=/^$|[;{][\s\n]*$/,Pn=/[@#]__(PURE|INLINE|NOINLINE)__/g;function Vn(e){return("comment2"===e.type||"comment1"===e.type)&&/@preserve|@lic|@cc_on|^\**!/i.test(e.value)}function Bn(e){var t=!e;void 0===(e=o(e,{ascii_only:!1,beautify:!1,braces:!1,comments:"some",ecma:5,ie8:!1,indent_level:4,indent_start:0,inline_script:!0,keep_numbers:!1,keep_quoted_props:!1,max_line_len:!1,preamble:null,preserve_annotations:!1,quote_keys:!1,quote_style:0,safari10:!1,semicolons:!0,shebang:!0,shorthand:void 0,source_map:null,webkit:!1,width:80,wrap_iife:!1,wrap_func_args:!0},!0)).shorthand&&(e.shorthand=e.ecma>5);var n=s;if(e.comments){let t=e.comments;if("string"==typeof e.comments&&/^\/.*\/[a-zA-Z]*$/.test(e.comments)){var i=e.comments.lastIndexOf("/");t=new RegExp(e.comments.substr(1,i-1),e.comments.substr(i+1))}n=t instanceof RegExp?function(e){return"comment5"!=e.type&&t.test(e.value)}:"function"==typeof t?function(e){return"comment5"!=e.type&&t(this,e)}:"some"===t?Vn:u}var r=0,c=0,l=1,f=0,p="";let _=new Set;var d=e.ascii_only?function(t,n){return e.ecma>=2015&&(t=t.replace(/[\ud800-\udbff][\udc00-\udfff]/g,(function(e){return"\\u{"+function(e,t){return z(e.charCodeAt(t))?65536+(e.charCodeAt(t)-55296<<10)+e.charCodeAt(t+1)-56320:e.charCodeAt(t)}(e,0).toString(16)+"}"}))),t.replace(/[\u0000-\u001f\u007f-\uffff]/g,(function(e){var t=e.charCodeAt(0).toString(16);if(t.length<=2&&!n){for(;t.length<2;)t="0"+t;return"\\x"+t}for(;t.length<4;)t="0"+t;return"\\u"+t}))}:function(e){return e.replace(/[\ud800-\udbff][\udc00-\udfff]|([\ud800-\udbff]|[\udc00-\udfff])/g,(function(e,t){return t?"\\u"+t.charCodeAt(0).toString(16):e}))};function m(t,n){var i=function(t,n){var i=0,r=0;function o(){return"'"+t.replace(/\x27/g,"\\'")+"'"}function a(){return'"'+t.replace(/\x22/g,'\\"')+'"'}if(t=t.replace(/[\\\b\f\n\r\v\t\x22\x27\u2028\u2029\0\ufeff]/g,(function(n,o){switch(n){case'"':return++i,'"';case"'":return++r,"'";case"\\":return"\\\\";case"\n":return"\\n";case"\r":return"\\r";case"\t":return"\\t";case"\b":return"\\b";case"\f":return"\\f";case"\v":return e.ie8?"\\x0B":"\\v";case"\u2028":return"\\u2028";case"\u2029":return"\\u2029";case"\ufeff":return"\\ufeff";case"\0":return/[0-9]/.test(X(t,o+1))?"\\x00":"\\0"}return n})),t=d(t),"`"===n)return"`"+t.replace(/`/g,"\\`")+"`";switch(e.quote_style){case 1:return o();case 2:return a();case 3:return"'"==n?o():a();default:return i>r?o():a()}}(t,n);return e.inline_script&&(i=(i=(i=i.replace(/<\x2f(script)([>\/\t\n\f\r ])/gi,"<\\/$1$2")).replace(/\x3c!--/g,"\\x3c!--")).replace(/--\x3e/g,"--\\x3e")),i}var h,g,D=!1,S=!1,v=!1,A=0,T=!1,y=!1,b=-1,C="",O=e.source_map&&[],F=O?function(){O.forEach((function(t){try{e.source_map.add(t.token.file,t.line,t.col,t.token.line,t.token.col,t.name||"name"!=t.token.type?t.name:t.token.value)}catch(e){null!=t.token.file&&pe.warn("Couldn't figure out mapping for {file}:{line},{col} → {cline},{ccol} [{name}]",{file:t.token.file,line:t.token.line,col:t.token.col,cline:t.line,ccol:t.col,name:t.name||""})}})),O=[]}:a,M=e.max_line_len?function(){if(c>e.max_line_len){if(A){var t=p.slice(0,A),n=p.slice(A);if(O){var i=n.length-c;O.forEach((function(e){e.line++,e.col+=i}))}p=t+"\n"+n,l++,f++,c=n.length}c>e.max_line_len&&pe.warn("Output exceeds {max_line_len} characters",e)}A&&(A=0,F())}:a,R=E("( [ + * / - , . `");function w(t){var n=X(t=String(t),0);T&&n&&(T=!1,"\n"!==n&&(w("\n"),N())),y&&n&&(y=!1,/[\s;})]/.test(n)||x()),b=-1;var i=C.charAt(C.length-1);v&&(v=!1,(":"!==i||"}"!==n)&&(n&&";}".includes(n)||";"===i)||(e.semicolons||R.has(n)?(p+=";",c++,f++):(M(),c>0&&(p+="\n",f++,l++,c=0),/^\s+$/.test(t)&&(v=!0)),e.beautify||(S=!1))),S&&(($(i)&&($(n)||"\\"==n)||"/"==n&&n==i||("+"==n||"-"==n)&&n==C)&&(p+=" ",c++,f++),S=!1),h&&(O.push({token:h,name:g,line:l,col:c}),h=!1,A||F()),p+=t,D="("==t[t.length-1],f+=t.length;var r=t.split(/\r?\n/),o=r.length-1;l+=o,c+=r[0].length,o>0&&(M(),c=r[o].length),C=t}var x=e.beautify?function(){w(" ")}:function(){S=!0},N=e.beautify?function(t){var n;e.beautify&&w((n=t?.5:0," ".repeat(e.indent_start+r-n*e.indent_level)))}:a,k=e.beautify?function(e,t){!0===e&&(e=V());var n=r;r=e;var i=t();return r=n,i}:function(e,t){return t()},I=e.beautify?function(){if(b<0)return w("\n");"\n"!=p[b]&&(p=p.slice(0,b)+"\n"+p.slice(b),f++,l++),b++}:e.max_line_len?function(){M(),A=p.length}:a,L=e.beautify?function(){w(";")}:function(){v=!0};function P(){v=!1,w(";")}function V(){return r+e.indent_level}function B(){return A&&M(),p}function K(){let e=p.length-1;for(;e>=0;){const t=p.charCodeAt(e);if(10===t)return!0;if(32!==t)return!1;e--}return!0}function U(t){return e.preserve_annotations||(t=t.replace(Pn," ")),/^\s*$/.test(t)?"":t.replace(/(<\s*\/\s*)(script)/i,"<\\/$2")}var G=[];return{get:B,toString:B,indent:N,in_directive:!1,use_asm:null,active_scope:null,indentation:function(){return r},current_width:function(){return c-r},should_break:function(){return e.width&&this.current_width()>=e.width},has_parens:function(){return D},newline:I,print:w,star:function(){w("*")},space:x,comma:function(){w(","),x()},colon:function(){w(":"),x()},last:function(){return C},semicolon:L,force_semicolon:P,to_utf8:d,print_name:function(e){w(function(e){return e=e.toString(),e=d(e,!0)}(e))},print_string:function(e,t,n){var i=m(e,t);!0!==n||i.includes("\\")||(Ln.test(p)||P(),P()),w(i)},print_template_string_chars:function(e){var t=m(e,"`").replace(/\${/g,"\\${");return w(t.substr(1,t.length-2))},encode_string:m,next_indent:V,with_indent:k,with_block:function(e){var t;return w("{"),I(),k(V(),(function(){t=e()})),N(),w("}"),t},with_parens:function(e){w("(");var t=e();return w(")"),t},with_square:function(e){w("[");var t=e();return w("]"),t},add_mapping:O?function(e,t){h=e,g=t}:a,option:function(t){return e[t]},printed_comments:_,prepend_comments:t?a:function(t){var i=t.start;if(!i)return;var r=this.printed_comments;const o=t instanceof ze&&t.value;if(i.comments_before&&r.has(i.comments_before)){if(!o)return;i.comments_before=[]}var a=i.comments_before;if(a||(a=i.comments_before=[]),r.add(a),o){var s=new On((function(e){var t=s.parent();if(!(t instanceof ze||t instanceof yt&&t.left===e||"Call"==t.TYPE&&t.expression===e||t instanceof bt&&t.condition===e||t instanceof Dt&&t.expression===e||t instanceof Et&&t.expressions[0]===e||t instanceof St&&t.expression===e||t instanceof Tt))return!0;if(e.start){var n=e.start.comments_before;n&&!r.has(n)&&(r.add(n),a=a.concat(n))}}));s.push(t),t.value.walk(s)}if(0==f){a.length>0&&e.shebang&&"comment5"===a[0].type&&!r.has(a[0])&&(w("#!"+a.shift().value+"\n"),N());var u=e.preamble;u&&w(u.replace(/\r\n?|[\n\u2028\u2029]|\s*$/g,"\n"))}if(0!=(a=a.filter(n,t).filter(e=>!r.has(e))).length){var c=K();a.forEach((function(e,t){if(r.add(e),c||(e.nlb?(w("\n"),N(),c=!0):t>0&&x()),/comment[134]/.test(e.type))(n=U(e.value))&&(w("//"+n+"\n"),N()),c=!0;else if("comment2"==e.type){var n;(n=U(e.value))&&w("/*"+n+"*/"),c=!1}})),c||(i.nlb?(w("\n"),N()):x())}},append_comments:t||n===s?a:function(e,t){var i=e.end;if(i){var r=this.printed_comments,o=i[t?"comments_before":"comments_after"];if(o&&!r.has(o)&&(e instanceof _e||o.every(e=>!/comment[134]/.test(e.type)))){r.add(o);var a=p.length;o.filter(n,e).forEach((function(e,n){if(!r.has(e))if(r.add(e),y=!1,T?(w("\n"),N(),T=!1):e.nlb&&(n>0||!K())?(w("\n"),N()):(n>0||!t)&&x(),/comment[134]/.test(e.type)){const t=U(e.value);t&&w("//"+t),T=!0}else if("comment2"==e.type){const t=U(e.value);t&&w("/*"+t+"*/"),y=!0}})),p.length>a&&(b=a)}}},line:function(){return l},col:function(){return c},pos:function(){return f},push_node:function(e){G.push(e)},pop_node:function(){return G.pop()},parent:function(e){return G[G.length-2-(e||0)]}}}!function(){function e(e,t){e.DEFMETHOD("_codegen",t)}function t(e,n){Array.isArray(e)?e.forEach((function(e){t(e,n)})):e.DEFMETHOD("needs_parens",n)}function n(e,t,n,i){var r=e.length-1;n.in_directive=i,e.forEach((function(e,i){!0!==n.in_directive||e instanceof me||e instanceof ve||e instanceof he&&e.body instanceof fn||(n.in_directive=!1),e instanceof ve||(n.indent(),e.print(n),i==r&&t||(n.newline(),t&&n.newline())),!0===n.in_directive&&e instanceof he&&e.body instanceof fn&&(n.in_directive=!1)})),n.in_directive=!1}function i(e,t){t.print("{"),t.with_indent(t.next_indent(),(function(){t.append_comments(e,!0)})),t.print("}")}function r(e,t,r){e.body.length>0?t.with_block((function(){n(e.body,!1,t,r)})):i(e,t)}function o(e,t,n){var i=!1;n&&(i=yn(e,e=>e instanceof xe||(e instanceof yt&&"in"==e.operator?Cn:void 0))),e.print(t,i)}function u(e,t,n){return n.option("quote_keys")?n.print_string(e):""+ +e==e&&e>=0?n.option("keep_numbers")?n.print(e):n.print(p(e)):(O.has(e)?n.option("ie8"):n.option("ecma")<2015?!j(e):!Z(e,!0))||t&&n.option("keep_quoted_props")?n.print_string(e,t):n.print_name(e)}pe.DEFMETHOD("print",(function(e,t){var n=this,i=n._codegen;function r(){e.prepend_comments(n),n.add_source_map(e),i(n,e),e.append_comments(n)}n instanceof xe?e.active_scope=n:!e.use_asm&&n instanceof me&&"use asm"==n.value&&(e.use_asm=e.active_scope),e.push_node(n),t||n.needs_parens(e)?e.with_parens(r):r(),e.pop_node(),n===e.use_asm&&(e.use_asm=null)})),pe.DEFMETHOD("_print",pe.prototype.print),pe.DEFMETHOD("print_to_string",(function(e){var t=Bn(e);return this.print(t),t.get()})),t(pe,s),t(Pe,(function(e){if(!e.has_parens()&&In(e))return!0;var t;if(e.option("webkit")&&((t=e.parent())instanceof gt&&t.expression===this))return!0;if(e.option("wrap_iife")&&((t=e.parent())instanceof mt&&t.expression===this))return!0;if(e.option("wrap_func_args")&&((t=e.parent())instanceof mt&&t.args.includes(this)))return!0;return!1})),t(Ve,(function(e){var t=e.parent();return t instanceof gt&&t.expression===this})),t(Mt,(function(e){return!e.has_parens()&&In(e)})),t(Vt,In),t(vt,(function(e){var t=e.parent();return t instanceof gt&&t.expression===this||t instanceof mt&&t.expression===this||t instanceof yt&&"**"===t.operator&&this instanceof At&&t.left===this&&"++"!==this.operator&&"--"!==this.operator})),t(Ze,(function(e){var t=e.parent();return t instanceof gt&&t.expression===this||t instanceof mt&&t.expression===this||e.option("safari10")&&t instanceof At})),t(Et,(function(e){var t=e.parent();return t instanceof mt||t instanceof vt||t instanceof yt||t instanceof ft||t instanceof gt||t instanceof Ft||t instanceof Rt||t instanceof bt||t instanceof Ve||t instanceof Ot||t instanceof ke||t instanceof Re&&this===t.object||t instanceof Je||t instanceof dt})),t(yt,(function(e){var t=e.parent();if(t instanceof mt&&t.expression===this)return!0;if(t instanceof vt)return!0;if(t instanceof gt&&t.expression===this)return!0;if(t instanceof yt){const e=t.operator,n=this.operator;if("??"===n&&("||"===e||"&&"===e))return!0;const i=se[e],r=se[n];if(i>r||i==r&&(this===t.right||"**"==e))return!0}})),t(Je,(function(e){var t=e.parent();return t instanceof yt&&"="!==t.operator||(t instanceof mt&&t.expression===this||(t instanceof bt&&t.condition===this||(t instanceof vt||(t instanceof gt&&t.expression===this||void 0))))})),t(gt,(function(e){var t=e.parent();if(t instanceof ht&&t.expression===this)return yn(this,e=>e instanceof xe||(e instanceof mt?Cn:void 0))})),t(mt,(function(e){var t,n=e.parent();return!!(n instanceof ht&&n.expression===this||n instanceof dt&&n.is_default&&this.expression instanceof Pe)||this.expression instanceof Pe&&n instanceof gt&&n.expression===this&&(t=e.parent(1))instanceof Ct&&t.left===n})),t(ht,(function(e){var t=e.parent();if(0===this.args.length&&(t instanceof gt||t instanceof mt&&t.expression===this))return!0})),t(pn,(function(e){var t=e.parent();if(t instanceof gt&&t.expression===this){var n=this.getValue();if(n<0||/^0/.test(p(n)))return!0}})),t(_n,(function(e){var t=e.parent();if(t instanceof gt&&t.expression===this&&this.getValue().startsWith("-"))return!0})),t([Ct,bt],(function(e){var t=e.parent();return t instanceof vt||(t instanceof yt&&!(t instanceof Ct)||(t instanceof mt&&t.expression===this||(t instanceof bt&&t.condition===this||(t instanceof gt&&t.expression===this||(this instanceof Ct&&this.left instanceof Ke&&!1===this.left.is_array||void 0)))))})),e(me,(function(e,t){t.print_string(e.value,e.quote),t.semicolon()})),e(ke,(function(e,t){t.print("..."),e.expression.print(t)})),e(Ke,(function(e,t){t.print(e.is_array?"[":"{");var n=e.names.length;e.names.forEach((function(e,i){i>0&&t.comma(),e.print(t),i==n-1&&e instanceof Dn&&t.comma()})),t.print(e.is_array?"]":"}")})),e(de,(function(e,t){t.print("debugger"),t.semicolon()})),Ae.DEFMETHOD("_do_print_body",(function(e){f(this.body,e)})),e(_e,(function(e,t){e.body.print(t),t.semicolon()})),e(Ne,(function(e,t){n(e.body,!0,t,!0),t.print("")})),e(Te,(function(e,t){e.label.print(t),t.colon(),e.body.print(t)})),e(he,(function(e,t){e.body.print(t),t.semicolon()})),e(Se,(function(e,t){r(e,t)})),e(ve,(function(e,t){t.semicolon()})),e(Ce,(function(e,t){t.print("do"),t.space(),_(e.body,t),t.space(),t.print("while"),t.space(),t.with_parens((function(){e.condition.print(t)})),t.semicolon()})),e(Oe,(function(e,t){t.print("while"),t.space(),t.with_parens((function(){e.condition.print(t)})),t.space(),e._do_print_body(t)})),e(Fe,(function(e,t){t.print("for"),t.space(),t.with_parens((function(){e.init?(e.init instanceof st?e.init.print(t):o(e.init,t,!0),t.print(";"),t.space()):t.print(";"),e.condition?(e.condition.print(t),t.print(";"),t.space()):t.print(";"),e.step&&e.step.print(t)})),t.space(),e._do_print_body(t)})),e(Me,(function(e,t){t.print("for"),e.await&&(t.space(),t.print("await")),t.space(),t.with_parens((function(){e.init.print(t),t.space(),t.print(e instanceof Re?"of":"in"),t.space(),e.object.print(t)})),t.space(),e._do_print_body(t)})),e(we,(function(e,t){t.print("with"),t.space(),t.with_parens((function(){e.expression.print(t)})),t.space(),e._do_print_body(t)})),Ie.DEFMETHOD("_do_print",(function(e,t){var n=this;t||(n.async&&(e.print("async"),e.space()),e.print("function"),n.is_generator&&e.star(),n.name&&e.space()),n.name instanceof Bt?n.name.print(e):t&&n.name instanceof pe&&e.with_square((function(){n.name.print(e)})),e.with_parens((function(){n.argnames.forEach((function(t,n){n&&e.comma(),t.print(e)}))})),e.space(),r(n,e,!0)})),e(Ie,(function(e,t){e._do_print(t)})),e(Ue,(function(e,t){var n=e.prefix,i=n instanceof Ie||n instanceof yt||n instanceof bt||n instanceof Et||n instanceof vt||n instanceof Dt&&n.expression instanceof Mt;i&&t.print("("),e.prefix.print(t),i&&t.print(")"),e.template_string.print(t)})),e(Ge,(function(e,t){var n=t.parent()instanceof Ue;t.print("`");for(var i=0;i<e.segments.length;i++)e.segments[i]instanceof He?n?t.print(e.segments[i].raw):t.print_template_string_chars(e.segments[i].value):(t.print("${"),e.segments[i].print(t),t.print("}"));t.print("`")})),Ve.DEFMETHOD("_do_print",(function(e){var t=this,n=e.parent(),i=n instanceof yt&&!(n instanceof Ct)||n instanceof vt||n instanceof mt&&t===n.expression;i&&e.print("("),t.async&&(e.print("async"),e.space()),1===t.argnames.length&&t.argnames[0]instanceof Bt?t.argnames[0].print(e):e.with_parens((function(){t.argnames.forEach((function(t,n){n&&e.comma(),t.print(e)}))})),e.space(),e.print("=>"),e.space();const o=t.body[0];if(1===t.body.length&&o instanceof We){const t=o.value;t?!function e(t){return t instanceof Mt||(t instanceof Et?e(t.expressions[0]):"Call"===t.TYPE?e(t.expression):t instanceof Ue?e(t.prefix):t instanceof Dt||t instanceof St?e(t.expression):t instanceof bt?e(t.condition):t instanceof yt?e(t.left):t instanceof Tt&&e(t.expression))}(t)?t.print(e):(e.print("("),t.print(e),e.print(")")):e.print("{}")}else r(t,e);i&&e.print(")")})),ze.DEFMETHOD("_do_print",(function(e,t){if(e.print(t),this.value){e.space();const t=this.value.start.comments_before;t&&t.length&&!e.printed_comments.has(t)?(e.print("("),this.value.print(e),e.print(")")):this.value.print(e)}e.semicolon()})),e(We,(function(e,t){e._do_print(t,"return")})),e(Ye,(function(e,t){e._do_print(t,"throw")})),e(Je,(function(e,t){var n=e.is_star?"*":"";t.print("yield"+n),e.expression&&(t.space(),e.expression.print(t))})),e(Ze,(function(e,t){t.print("await"),t.space();var n=e.expression,i=!(n instanceof mt||n instanceof rn||n instanceof gt||n instanceof vt||n instanceof ln);i&&t.print("("),e.expression.print(t),i&&t.print(")")})),qe.DEFMETHOD("_do_print",(function(e,t){e.print(t),this.label&&(e.space(),this.label.print(e)),e.semicolon()})),e($e,(function(e,t){e._do_print(t,"break")})),e(je,(function(e,t){e._do_print(t,"continue")})),e(Qe,(function(e,t){t.print("if"),t.space(),t.with_parens((function(){e.condition.print(t)})),t.space(),e.alternative?(!function(e,t){var n=e.body;if(t.option("braces")||t.option("ie8")&&n instanceof Ce)return _(n,t);if(!n)return t.force_semicolon();for(;;)if(n instanceof Qe){if(!n.alternative)return void _(e.body,t);n=n.alternative}else{if(!(n instanceof Ae))break;n=n.body}f(e.body,t)}(e,t),t.space(),t.print("else"),t.space(),e.alternative instanceof Qe?e.alternative.print(t):f(e.alternative,t)):e._do_print_body(t)})),e(et,(function(e,t){t.print("switch"),t.space(),t.with_parens((function(){e.expression.print(t)})),t.space();var n=e.body.length-1;n<0?i(e,t):t.with_block((function(){e.body.forEach((function(e,i){t.indent(!0),e.print(t),i<n&&e.body.length>0&&t.newline()}))}))})),tt.DEFMETHOD("_do_print_body",(function(e){e.newline(),this.body.forEach((function(t){e.indent(),t.print(e),e.newline()}))})),e(nt,(function(e,t){t.print("default:"),e._do_print_body(t)})),e(it,(function(e,t){t.print("case"),t.space(),e.expression.print(t),t.print(":"),e._do_print_body(t)})),e(rt,(function(e,t){t.print("try"),t.space(),r(e,t),e.bcatch&&(t.space(),e.bcatch.print(t)),e.bfinally&&(t.space(),e.bfinally.print(t))})),e(ot,(function(e,t){t.print("catch"),e.argname&&(t.space(),t.with_parens((function(){e.argname.print(t)}))),t.space(),r(e,t)})),e(at,(function(e,t){t.print("finally"),t.space(),r(e,t)})),st.DEFMETHOD("_do_print",(function(e,t){e.print(t),e.space(),this.definitions.forEach((function(t,n){n&&e.comma(),t.print(e)}));var n=e.parent();(!(n instanceof Fe||n instanceof Me)||n&&n.init!==this)&&e.semicolon()})),e(ct,(function(e,t){e._do_print(t,"let")})),e(ut,(function(e,t){e._do_print(t,"var")})),e(lt,(function(e,t){e._do_print(t,"const")})),e(_t,(function(e,t){t.print("import"),t.space(),e.imported_name&&e.imported_name.print(t),e.imported_name&&e.imported_names&&(t.print(","),t.space()),e.imported_names&&(1===e.imported_names.length&&"*"===e.imported_names[0].foreign_name.name?e.imported_names[0].print(t):(t.print("{"),e.imported_names.forEach((function(n,i){t.space(),n.print(t),i<e.imported_names.length-1&&t.print(",")})),t.space(),t.print("}"))),(e.imported_name||e.imported_names)&&(t.space(),t.print("from"),t.space()),e.module_name.print(t),t.semicolon()})),e(pt,(function(e,t){var n=t.parent()instanceof _t,i=e.name.definition();(i&&i.mangled_name||e.name.name)!==e.foreign_name.name?(n?t.print(e.foreign_name.name):e.name.print(t),t.space(),t.print("as"),t.space(),n?e.name.print(t):t.print(e.foreign_name.name)):e.name.print(t)})),e(dt,(function(e,t){if(t.print("export"),t.space(),e.is_default&&(t.print("default"),t.space()),e.exported_names)1===e.exported_names.length&&"*"===e.exported_names[0].name.name?e.exported_names[0].print(t):(t.print("{"),e.exported_names.forEach((function(n,i){t.space(),n.print(t),i<e.exported_names.length-1&&t.print(",")})),t.space(),t.print("}"));else if(e.exported_value)e.exported_value.print(t);else if(e.exported_definition&&(e.exported_definition.print(t),e.exported_definition instanceof st))return;e.module_name&&(t.space(),t.print("from"),t.space(),e.module_name.print(t)),(e.exported_value&&!(e.exported_value instanceof Be||e.exported_value instanceof Pe||e.exported_value instanceof It)||e.module_name||e.exported_names)&&t.semicolon()})),e(ft,(function(e,t){if(e.name.print(t),e.value){t.space(),t.print("="),t.space();var n=t.parent(1),i=n instanceof Fe||n instanceof Me;o(e.value,t,i)}})),e(mt,(function(e,t){e.expression.print(t),e instanceof ht&&0===e.args.length||((e.expression instanceof mt||e.expression instanceof Ie)&&t.add_mapping(e.start),t.with_parens((function(){e.args.forEach((function(e,n){n&&t.comma(),e.print(t)}))})))})),e(ht,(function(e,t){t.print("new"),t.space(),mt.prototype._codegen(e,t)})),Et.DEFMETHOD("_do_print",(function(e){this.expressions.forEach((function(t,n){n>0&&(e.comma(),e.should_break()&&(e.newline(),e.indent())),t.print(e)}))})),e(Et,(function(e,t){e._do_print(t)})),e(Dt,(function(e,t){var n=e.expression;n.print(t);var i=e.property;(O.has(i)?t.option("ie8"):!Z(i,t.option("ecma")>=2015))?(t.print("["),t.add_mapping(e.end),t.print_string(i),t.print("]")):(n instanceof pn&&n.getValue()>=0&&(/[xa-f.)]/i.test(t.last())||t.print(".")),t.print("."),t.add_mapping(e.end),t.print_name(i))})),e(St,(function(e,t){e.expression.print(t),t.print("["),e.property.print(t),t.print("]")})),e(At,(function(e,t){var n=e.operator;t.print(n),(/^[a-z]/i.test(n)||/[+-]$/.test(n)&&e.expression instanceof At&&/^[+-]/.test(e.expression.operator))&&t.space(),e.expression.print(t)})),e(Tt,(function(e,t){e.expression.print(t),t.print(e.operator)})),e(yt,(function(e,t){var n=e.operator;e.left.print(t),">"==n[0]&&e.left instanceof Tt&&"--"==e.left.operator?t.print(" "):t.space(),t.print(n),("<"==n||"<<"==n)&&e.right instanceof At&&"!"==e.right.operator&&e.right.expression instanceof At&&"--"==e.right.expression.operator?t.print(" "):t.space(),e.right.print(t)})),e(bt,(function(e,t){e.condition.print(t),t.space(),t.print("?"),t.space(),e.consequent.print(t),t.space(),t.colon(),e.alternative.print(t)})),e(Ft,(function(e,t){t.with_square((function(){var n=e.elements,i=n.length;i>0&&t.space(),n.forEach((function(e,n){n&&t.comma(),e.print(t),n===i-1&&e instanceof Dn&&t.comma()})),i>0&&t.space()}))})),e(Mt,(function(e,t){e.properties.length>0?t.with_block((function(){e.properties.forEach((function(e,n){n&&(t.print(","),t.newline()),t.indent(),e.print(t)})),t.newline()})):i(e,t)})),e(It,(function(e,t){if(t.print("class"),t.space(),e.name&&(e.name.print(t),t.space()),e.extends){var n=!(e.extends instanceof rn||e.extends instanceof gt||e.extends instanceof Vt||e.extends instanceof Pe);t.print("extends"),n?t.print("("):t.space(),e.extends.print(t),n?t.print(")"):t.space()}e.properties.length>0?t.with_block((function(){e.properties.forEach((function(e,n){n&&t.newline(),t.indent(),e.print(t)})),t.newline()})):t.print("{}")})),e(Kt,(function(e,t){t.print("new.target")})),e(wt,(function(e,t){function n(e){var t=e.definition();return t?t.mangled_name||t.name:e.name}var i=t.option("shorthand");i&&e.value instanceof Bt&&Z(e.key,t.option("ecma")>=2015)&&n(e.value)===e.key&&!O.has(e.key)?u(e.key,e.quote,t):i&&e.value instanceof Ot&&e.value.left instanceof Bt&&Z(e.key,t.option("ecma")>=2015)&&n(e.value.left)===e.key?(u(e.key,e.quote,t),t.space(),t.print("="),t.space(),e.value.right.print(t)):(e.key instanceof pe?t.with_square((function(){e.key.print(t)})):u(e.key,e.quote,t),t.colon(),e.value.print(t))})),e(Lt,(e,t)=>{e.static&&(t.print("static"),t.space()),e.key instanceof $t?u(e.key.name,e.quote,t):(t.print("["),e.key.print(t),t.print("]")),e.value&&(t.print("="),e.value.print(t)),t.semicolon()}),Rt.DEFMETHOD("_print_getter_setter",(function(e,t){var n=this;n.static&&(t.print("static"),t.space()),e&&(t.print(e),t.space()),n.key instanceof qt?u(n.key.name,n.quote,t):t.with_square((function(){n.key.print(t)})),n.value._do_print(t,!0)})),e(xt,(function(e,t){e._print_getter_setter("set",t)})),e(Nt,(function(e,t){e._print_getter_setter("get",t)})),e(kt,(function(e,t){var n;e.is_generator&&e.async?n="async*":e.is_generator?n="*":e.async&&(n="async"),e._print_getter_setter(n,t)})),Bt.DEFMETHOD("_do_print",(function(e){var t=this.definition();e.print_name(t?t.mangled_name||t.name:this.name)})),e(Bt,(function(e,t){e._do_print(t)})),e(Dn,a),e(un,(function(e,t){t.print("this")})),e(cn,(function(e,t){t.print("super")})),e(ln,(function(e,t){t.print(e.getValue())})),e(fn,(function(e,t){t.print_string(e.getValue(),e.quote,t.in_directive)})),e(pn,(function(e,t){(t.option("keep_numbers")||t.use_asm)&&e.start&&null!=e.start.raw?t.print(e.start.raw):t.print(p(e.getValue()))})),e(_n,(function(e,t){t.print(e.getValue()+"n")}));const c=/(<\s*\/\s*script)/i,l=(e,t)=>t.replace("/","\\/");function f(e,t){t.option("braces")?_(e,t):!e||e instanceof ve?t.force_semicolon():e.print(t)}function p(e){var t,n,i,r=e.toString(10).replace(/^0\./,".").replace("e+","e"),o=[r];return Math.floor(e)===e&&(e<0?o.push("-0x"+(-e).toString(16).toLowerCase()):o.push("0x"+e.toString(16).toLowerCase())),(t=/^\.0+/.exec(r))?(n=t[0].length,i=r.slice(n),o.push(i+"e-"+(i.length+n-1))):(t=/0+$/.exec(r))?(n=t[0].length,o.push(r.slice(0,-n)+"e"+n)):(t=/^(\d)\.(\d+)e(-?\d+)$/.exec(r))&&o.push(t[1]+t[2]+"e"+(t[3]-t[2].length)),function(e){for(var t=e[0],n=t.length,i=1;i<e.length;++i)e[i].length<n&&(n=(t=e[i]).length);return t}(o)}function _(e,t){!e||e instanceof ve?t.print("{}"):e instanceof Se?e.print(t):t.with_block((function(){t.indent(),e.print(t),t.newline()}))}function d(e,t){e.forEach((function(e){e.DEFMETHOD("add_source_map",t)}))}e(dn,(function(e,t){let{source:n,flags:i}=e.getValue();n=A(n),i=i?function(e){const t=new Set(e.split(""));let n="";for(const e of"gimuy")t.has(e)&&(n+=e,t.delete(e));return t.size&&t.forEach(e=>{n+=e}),n}(i):"",n=n.replace(c,l),t.print(t.to_utf8(`/${n}/${i}`));const r=t.parent();r instanceof yt&&/^\w/.test(r.operator)&&r.left===e&&t.print(" ")})),d([pe,Te,Ne],a),d([Ft,Se,ot,It,ln,de,st,me,at,Xe,Ie,ht,Mt,Ae,Bt,et,tt,Ge,He,rt],(function(e){e.add_mapping(this.start)})),d([Nt,xt],(function(e){e.add_mapping(this.start,this.key.name)})),d([Rt],(function(e){e.add_mapping(this.start,this.key)}))}();const Kn=(e,t)=>null===e&&null===t||e.TYPE===t.TYPE&&e.shallow_cmp(t),Un=e=>{const t=Object.keys(e).map(t=>{if("eq"===e[t])return`this.${t} === other.${t}`;if("exist"===e[t])return`(this.${t} == null ? other.${t} == null : this.${t} === other.${t})`;throw new Error(`mkshallow: Unexpected instruction: ${e[t]}`)}).join(" && ");return new Function("other","return "+t)},Gn=()=>!0;pe.prototype.shallow_cmp=function(){throw new Error("did not find a shallow_cmp function for "+this.constructor.name)},de.prototype.shallow_cmp=Gn,me.prototype.shallow_cmp=Un({value:"eq"}),he.prototype.shallow_cmp=Gn,De.prototype.shallow_cmp=Gn,ve.prototype.shallow_cmp=Gn,Te.prototype.shallow_cmp=Un({"label.name":"eq"}),Ce.prototype.shallow_cmp=Gn,Oe.prototype.shallow_cmp=Gn,Fe.prototype.shallow_cmp=Un({init:"exist",condition:"exist",step:"exist"}),Me.prototype.shallow_cmp=Gn,Re.prototype.shallow_cmp=Gn,we.prototype.shallow_cmp=Gn,Ne.prototype.shallow_cmp=Gn,ke.prototype.shallow_cmp=Gn,Ie.prototype.shallow_cmp=Un({is_generator:"eq",async:"eq"}),Ke.prototype.shallow_cmp=Un({is_array:"eq"}),Ue.prototype.shallow_cmp=Gn,Ge.prototype.shallow_cmp=Gn,He.prototype.shallow_cmp=Un({value:"eq"}),Xe.prototype.shallow_cmp=Gn,qe.prototype.shallow_cmp=Gn,Ze.prototype.shallow_cmp=Gn,Je.prototype.shallow_cmp=Un({is_star:"eq"}),Qe.prototype.shallow_cmp=Un({alternative:"exist"}),et.prototype.shallow_cmp=Gn,tt.prototype.shallow_cmp=Gn,rt.prototype.shallow_cmp=Un({bcatch:"exist",bfinally:"exist"}),ot.prototype.shallow_cmp=Un({argname:"exist"}),at.prototype.shallow_cmp=Gn,st.prototype.shallow_cmp=Gn,ft.prototype.shallow_cmp=Un({value:"exist"}),pt.prototype.shallow_cmp=Gn,_t.prototype.shallow_cmp=Un({imported_name:"exist",imported_names:"exist"}),dt.prototype.shallow_cmp=Un({exported_definition:"exist",exported_value:"exist",exported_names:"exist",module_name:"eq",is_default:"eq"}),mt.prototype.shallow_cmp=Gn,Et.prototype.shallow_cmp=Gn,gt.prototype.shallow_cmp=Gn,Dt.prototype.shallow_cmp=Un({property:"eq"}),vt.prototype.shallow_cmp=Un({operator:"eq"}),yt.prototype.shallow_cmp=Un({operator:"eq"}),bt.prototype.shallow_cmp=Gn,Ft.prototype.shallow_cmp=Gn,Mt.prototype.shallow_cmp=Gn,Rt.prototype.shallow_cmp=Gn,wt.prototype.shallow_cmp=Un({key:"eq"}),xt.prototype.shallow_cmp=Un({static:"eq"}),Nt.prototype.shallow_cmp=Un({static:"eq"}),kt.prototype.shallow_cmp=Un({static:"eq",is_generator:"eq",async:"eq"}),It.prototype.shallow_cmp=Un({name:"exist",extends:"exist"}),Lt.prototype.shallow_cmp=Un({static:"eq"}),Bt.prototype.shallow_cmp=Un({name:"eq"}),Kt.prototype.shallow_cmp=Gn,un.prototype.shallow_cmp=Gn,cn.prototype.shallow_cmp=Gn,fn.prototype.shallow_cmp=Un({value:"eq"}),pn.prototype.shallow_cmp=Un({value:"eq"}),_n.prototype.shallow_cmp=Un({value:"eq"}),dn.prototype.shallow_cmp=function(e){return this.value.flags===e.value.flags&&this.value.source===e.value.source},mn.prototype.shallow_cmp=Gn;let Hn=null,Xn=null;class zn{constructor(e,t,n){this.name=t.name,this.orig=[t],this.init=n,this.eliminated=0,this.assignments=0,this.scope=e,this.replaced=0,this.global=!1,this.export=0,this.mangled_name=null,this.undeclared=!1,this.id=zn.next_id++,this.chained=!1,this.direct_access=!1,this.escaped=0,this.recursive_refs=0,this.references=[],this.should_replace=void 0,this.single_use=!1,this.fixed=!1,Object.seal(this)}fixed_value(){return!this.fixed||this.fixed instanceof pe?this.fixed:this.fixed()}unmangleable(e){return e||(e={}),!!(Hn&&Hn.has(this.id)&&S(e.keep_fnames,this.orig[0].name))||(this.global&&!e.toplevel||1&this.export||this.undeclared||!e.eval&&this.scope.pinned()||(this.orig[0]instanceof jt||this.orig[0]instanceof Yt)&&S(e.keep_fnames,this.orig[0].name)||this.orig[0]instanceof qt||(this.orig[0]instanceof Jt||this.orig[0]instanceof Zt)&&S(e.keep_classnames,this.orig[0].name))}mangle(e){const t=e.cache&&e.cache.props;if(this.global&&t&&t.has(this.name))this.mangled_name=t.get(this.name);else if(!this.mangled_name&&!this.unmangleable(e)){var n=this.scope,i=this.orig[0];e.ie8&&i instanceof jt&&(n=n.parent_scope);const r=Wn(this);this.mangled_name=r?r.mangled_name||r.name:n.next_mangled(e,this),this.global&&t&&t.set(this.name,this.mangled_name)}}}function Wn(e){if(e.orig[0]instanceof Qt&&e.scope.is_block_scope())return e.scope.get_defun_scope().variables.get(e.name)}function Yn(e,t){var n=e.enclosed;e:for(;;){var i=qn(++e.cname);if(!O.has(i)&&!(t.reserved.has(i)||Xn&&Xn.has(i))){for(let e=n.length;--e>=0;){const r=n[e];if(i==(r.mangled_name||r.unmangleable(t)&&r.name))continue e}return i}}}zn.next_id=1,xe.DEFMETHOD("figure_out_scope",(function(e,{parent_scope:t=null,toplevel:n=this}={}){if(e=o(e,{cache:null,ie8:!1,safari10:!1}),!(n instanceof Ne))throw new Error("Invalid toplevel scope");var i=this.parent_scope=t,r=new Map,a=null,s=null,u=[],c=new On((t,n)=>{if(t.is_block_scope()){const r=i;t.block_scope=i=new xe(t),i._block_scope=!0;const o=t instanceof ot?r.parent_scope:r;if(i.init_scope_vars(o),i.uses_with=r.uses_with,i.uses_eval=r.uses_eval,e.safari10&&(t instanceof Fe||t instanceof Me)&&u.push(i),t instanceof et){const e=i;i=r,t.expression.walk(c),i=e;for(let e=0;e<t.body.length;e++)t.body[e].walk(c)}else n();return i=r,!0}if(t instanceof Ke){const e=s;return s=t,n(),s=e,!0}if(t instanceof xe){t.init_scope_vars(i);var o=i,f=a,p=r;return a=i=t,r=new Map,n(),i=o,a=f,r=p,!0}if(t instanceof Te){var _=t.label;if(r.has(_.name))throw new Error(d("Label {name} defined twice",_));return r.set(_.name,_),n(),r.delete(_.name),!0}if(t instanceof we)for(var m=i;m;m=m.parent_scope)m.uses_with=!0;else{if(t instanceof Bt&&(t.scope=i),t instanceof nn&&(t.thedef=t,t.references=[]),t instanceof jt)a.def_function(t,"arguments"==t.name?void 0:a);else if(t instanceof Yt)l((t.scope=a.parent_scope.get_defun_scope()).def_function(t,a),1);else if(t instanceof Jt)l(a.def_variable(t,a),1);else if(t instanceof en)i.def_variable(t);else if(t instanceof Zt)l((t.scope=a.parent_scope).def_function(t,a),1);else if(t instanceof Gt||t instanceof zt||t instanceof Xt||t instanceof Qt){if((h=t instanceof Ht?i.def_variable(t,null):a.def_variable(t,"SymbolVar"==t.TYPE?null:void 0)).orig.every(e=>e===t||(t instanceof Ht?e instanceof jt:!(e instanceof zt||e instanceof Xt)))||ee(`"${t.name}" is redeclared`,t.start.file,t.start.line,t.start.col,t.start.pos),t instanceof Wt||l(h,2),a!==i){t.mark_enclosed();var h=i.find_variable(t);t.thedef!==h&&(t.thedef=h,t.reference())}}else if(t instanceof sn){var E=r.get(t.name);if(!E)throw new Error(d("Undefined label {name} [{line},{col}]",{name:t.name,line:t.start.line,col:t.start.col}));t.thedef=E}i instanceof Ne||!(t instanceof dt||t instanceof _t)||ee(`"${t.TYPE}" statement may only appear at the top level`,t.start.file,t.start.line,t.start.col,t.start.pos)}});function l(e,t){if(s){var n=0;do{t++}while(c.parent(n++)!==s)}var i=c.parent(t);if(e.export=i instanceof dt?1:0){var r=i.exported_definition;(r instanceof Be||r instanceof Pt)&&i.is_default&&(e.export=2)}}this.walk(c),this instanceof Ne&&(this.globals=new Map);c=new On(e=>{if(e instanceof qe&&e.label)return e.label.thedef.references.push(e),!0;if(e instanceof rn){var t,i=e.name;if("eval"==i&&c.parent()instanceof mt)for(var r=e.scope;r&&!r.uses_eval;r=r.parent_scope)r.uses_eval=!0;return c.parent()instanceof pt&&c.parent(1).module_name||!(t=e.scope.find_variable(i))?(t=n.def_global(e),e instanceof on&&(t.export=1)):t.scope instanceof Ie&&"arguments"==i&&(t.scope.uses_arguments=!0),e.thedef=t,e.reference(),!e.scope.is_block_scope()||t.orig[0]instanceof Ht||(e.scope=e.scope.get_defun_scope()),!0}var o;if(e instanceof Qt&&(o=Wn(e.definition())))for(r=e.scope;r&&(_(r.enclosed,o),r!==o.scope);)r=r.parent_scope});if(this.walk(c),(e.ie8||e.safari10)&&yn(this,e=>{if(e instanceof Qt){var t=e.name,i=e.thedef.references,r=e.scope.get_defun_scope(),o=r.find_variable(t)||n.globals.get(t)||r.def_variable(e);return i.forEach((function(e){e.thedef=o,e.reference()})),e.thedef=o,e.reference(),!0}}),e.safari10)for(const e of u)e.parent_scope.variables.forEach((function(t){_(e.enclosed,t)}))})),Ne.DEFMETHOD("def_global",(function(e){var t=this.globals,n=e.name;if(t.has(n))return t.get(n);var i=new zn(this,e);return i.undeclared=!0,i.global=!0,t.set(n,i),i})),xe.DEFMETHOD("init_scope_vars",(function(e){this.variables=new Map,this.functions=new Map,this.uses_with=!1,this.uses_eval=!1,this.parent_scope=e,this.enclosed=[],this.cname=-1,this._var_name_cache=null})),xe.DEFMETHOD("var_names",(function e(){var t=this._var_name_cache;return t||(this._var_name_cache=t=new Set(this.parent_scope?e.call(this.parent_scope):null),this._added_var_names&&this._added_var_names.forEach(e=>{t.add(e)}),this.enclosed.forEach((function(e){t.add(e.name)})),this.variables.forEach((function(e,n){t.add(n)}))),t})),xe.DEFMETHOD("add_var_name",(function(e){this._added_var_names||(this._added_var_names=new Set),this._added_var_names.add(e),this._var_name_cache||this.var_names(),this._var_name_cache.add(e)})),xe.DEFMETHOD("add_child_scope",(function(e){if(e.parent_scope===this)return;e.parent_scope=this,e._var_name_cache=null,e._added_var_names&&e._added_var_names.forEach(t=>e.add_var_name(t));const t=new Set(e.enclosed),n=(()=>{const e=[];let t=this;do{e.push(t)}while(t=t.parent_scope);return e.reverse(),e})(),i=[];for(const e of n){i.forEach(t=>_(e.enclosed,t));for(const n of e.variables.values())t.has(n)&&(_(i,n),_(e.enclosed,n))}})),pe.DEFMETHOD("is_block_scope",s),It.DEFMETHOD("is_block_scope",s),Ie.DEFMETHOD("is_block_scope",s),Ne.DEFMETHOD("is_block_scope",s),tt.DEFMETHOD("is_block_scope",s),De.DEFMETHOD("is_block_scope",u),xe.DEFMETHOD("is_block_scope",(function(){return this._block_scope||!1})),ye.DEFMETHOD("is_block_scope",u),Ie.DEFMETHOD("init_scope_vars",(function(){xe.prototype.init_scope_vars.apply(this,arguments),this.uses_arguments=!1,this.def_variable(new Wt({name:"arguments",start:this.start,end:this.end}))})),Ve.DEFMETHOD("init_scope_vars",(function(){xe.prototype.init_scope_vars.apply(this,arguments),this.uses_arguments=!1})),Bt.DEFMETHOD("mark_enclosed",(function(){for(var e=this.definition(),t=this.scope;t&&(_(t.enclosed,e),t!==e.scope);)t=t.parent_scope})),Bt.DEFMETHOD("reference",(function(){this.definition().references.push(this),this.mark_enclosed()})),xe.DEFMETHOD("find_variable",(function(e){return e instanceof Bt&&(e=e.name),this.variables.get(e)||this.parent_scope&&this.parent_scope.find_variable(e)})),xe.DEFMETHOD("def_function",(function(e,t){var n=this.def_variable(e,t);return(!n.init||n.init instanceof Be)&&(n.init=t),this.functions.set(e.name,n),n})),xe.DEFMETHOD("def_variable",(function(e,t){var n=this.variables.get(e.name);return n?(n.orig.push(e),n.init&&(n.scope!==e.scope||n.init instanceof Pe)&&(n.init=t)):(n=new zn(this,e,t),this.variables.set(e.name,n),n.global=!this.parent_scope),e.thedef=n})),xe.DEFMETHOD("next_mangled",(function(e){return Yn(this,e)})),Ne.DEFMETHOD("next_mangled",(function(e){let t;const n=this.mangled_names;do{t=Yn(this,e)}while(n.has(t));return t})),Pe.DEFMETHOD("next_mangled",(function(e,t){for(var n=t.orig[0]instanceof Wt&&this.name&&this.name.definition(),i=n?n.mangled_name||n.name:null;;){var r=Yn(this,e);if(!i||i!=r)return r}})),Bt.DEFMETHOD("unmangleable",(function(e){var t=this.definition();return!t||t.unmangleable(e)})),nn.DEFMETHOD("unmangleable",s),Bt.DEFMETHOD("unreferenced",(function(){return!this.definition().references.length&&!this.scope.pinned()})),Bt.DEFMETHOD("definition",(function(){return this.thedef})),Bt.DEFMETHOD("global",(function(){return this.thedef.global})),Ne.DEFMETHOD("_default_mangler_options",(function(e){return(e=o(e,{eval:!1,ie8:!1,keep_classnames:!1,keep_fnames:!1,module:!1,reserved:[],toplevel:!1})).module&&(e.toplevel=!0),Array.isArray(e.reserved)||e.reserved instanceof Set||(e.reserved=[]),e.reserved=new Set(e.reserved),e.reserved.add("arguments"),e})),Ne.DEFMETHOD("mangle_names",(function(e){e=this._default_mangler_options(e);var t=-1,n=[];e.keep_fnames&&(Hn=new Set);const i=this.mangled_names=new Set;e.cache&&(this.globals.forEach(o),e.cache.props&&e.cache.props.forEach((function(e){i.add(e)})));var r=new On((function(i,r){if(i instanceof Te){var a=t;return r(),t=a,!0}if(i instanceof xe)i.variables.forEach(o);else if(i.is_block_scope())i.block_scope.variables.forEach(o);else if(Hn&&i instanceof ft&&i.value instanceof Ie&&!i.value.name&&S(e.keep_fnames,i.name.name))Hn.add(i.name.definition().id);else{if(i instanceof nn){let e;do{e=qn(++t)}while(O.has(e));return i.mangled_name=e,!0}!e.ie8&&!e.safari10&&i instanceof Qt&&n.push(i.definition())}}));function o(t){!(e.reserved.has(t.name)||1&t.export)&&n.push(t)}this.walk(r),(e.keep_fnames||e.keep_classnames)&&(Xn=new Set,n.forEach(t=>{t.name.length<6&&t.unmangleable(e)&&Xn.add(t.name)})),n.forEach(t=>{t.mangle(e)}),Hn=null,Xn=null})),Ne.DEFMETHOD("find_colliding_names",(function(e){const t=e.cache&&e.cache.props,n=new Set;return e.reserved.forEach(i),this.globals.forEach(r),this.walk(new On((function(e){e instanceof xe&&e.variables.forEach(r),e instanceof Qt&&r(e.definition())}))),n;function i(e){n.add(e)}function r(n){var r=n.name;if(n.global&&t&&t.has(r))r=t.get(r);else if(!n.unmangleable(e))return;i(r)}})),Ne.DEFMETHOD("expand_names",(function(e){qn.reset(),qn.sort(),e=this._default_mangler_options(e);var t=this.find_colliding_names(e),n=0;function i(i){if(i.global&&e.cache)return;if(i.unmangleable(e))return;if(e.reserved.has(i.name))return;const r=Wn(i),o=i.name=r?r.name:function(){var e;do{e=qn(n++)}while(t.has(e)||O.has(e));return e}();i.orig.forEach((function(e){e.name=o})),i.references.forEach((function(e){e.name=o}))}this.globals.forEach(i),this.walk(new On((function(e){e instanceof xe&&e.variables.forEach(i),e instanceof Qt&&i(e.definition())})))})),pe.DEFMETHOD("tail_node",c),Et.DEFMETHOD("tail_node",(function(){return this.expressions[this.expressions.length-1]})),Ne.DEFMETHOD("compute_char_frequency",(function(e){e=this._default_mangler_options(e);try{pe.prototype.print=function(t,n){this._print(t,n),this instanceof Bt&&!this.unmangleable(e)?qn.consider(this.name,-1):e.properties&&(this instanceof Dt?qn.consider(this.property,-1):this instanceof St&&function e(t){t instanceof fn?qn.consider(t.value,-1):t instanceof bt?(e(t.consequent),e(t.alternative)):t instanceof Et&&e(t.tail_node())}(this.property))},qn.consider(this.print_to_string(),1)}finally{pe.prototype.print=pe.prototype._print}qn.sort()}));const qn=(()=>{const e="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_".split(""),t="0123456789".split("");let n,i;function r(){i=new Map,e.forEach((function(e){i.set(e,0)})),t.forEach((function(e){i.set(e,0)}))}function o(e,t){return i.get(t)-i.get(e)}function a(e){var t="",i=54;e++;do{e--,t+=n[e%i],e=Math.floor(e/i),i=64}while(e>0);return t}return a.consider=function(e,t){for(var n=e.length;--n>=0;)i.set(e[n],i.get(e[n])+t)},a.sort=function(){n=h(e,o).concat(h(t,o))},a.reset=r,r(),a})();function $n(){const e={};return Object.keys(jn({0:0})).forEach(t=>{const n=jn({[t]:{0:0}});n&&(e[t]=n)}),e}function jn(e){var t=gr("",e);return t.error&&t.error.defs}let Zn=void 0;pe.prototype.size=function(e,t){Zn=$n.mangle;let n=0;return bn(this,(e,t)=>{n+=e._size(t)},t||e&&e.stack),Zn=void 0,n},pe.prototype._size=()=>0,de.prototype._size=()=>8,me.prototype._size=function(){return 2+this.value.length};const Jn=e=>e.length&&e.length-1;De.prototype._size=function(){return 2+Jn(this.body)},Ne.prototype._size=function(){return Jn(this.body)},ve.prototype._size=()=>1,Te.prototype._size=()=>2,Ce.prototype._size=()=>9,Oe.prototype._size=()=>7,Fe.prototype._size=()=>8,Me.prototype._size=()=>8,we.prototype._size=()=>6,ke.prototype._size=()=>3;const Qn=e=>(e.is_generator?1:0)+(e.async?6:0);Le.prototype._size=function(){return Qn(this)+4+Jn(this.argnames)+Jn(this.body)},Pe.prototype._size=function(e){return 2*!!In(e)+Qn(this)+12+Jn(this.argnames)+Jn(this.body)},Be.prototype._size=function(){return Qn(this)+13+Jn(this.argnames)+Jn(this.body)},Ve.prototype._size=function(){let e=2+Jn(this.argnames);return 1===this.argnames.length&&this.argnames[0]instanceof Bt||(e+=2),Qn(this)+e+(Array.isArray(this.body)?Jn(this.body):this.body._size())},Ke.prototype._size=()=>2,Ge.prototype._size=function(){return 2+3*Math.floor(this.segments.length/2)},He.prototype._size=function(){return this.value.length},We.prototype._size=function(){return this.value?7:6},Ye.prototype._size=()=>6,$e.prototype._size=function(){return this.label?6:5},je.prototype._size=function(){return this.label?9:8},Qe.prototype._size=()=>4,et.prototype._size=function(){return 8+Jn(this.body)},it.prototype._size=function(){return 5+Jn(this.body)},nt.prototype._size=function(){return 8+Jn(this.body)},rt.prototype._size=function(){return 3+Jn(this.body)},ot.prototype._size=function(){let e=7+Jn(this.body);return this.argname&&(e+=2),e},at.prototype._size=function(){return 7+Jn(this.body)};const ei=(e,t)=>e+Jn(t.definitions);ut.prototype._size=function(){return ei(4,this)},ct.prototype._size=function(){return ei(4,this)},lt.prototype._size=function(){return ei(6,this)},ft.prototype._size=function(){return this.value?1:0},pt.prototype._size=function(){return this.name?4:0},_t.prototype._size=function(){let e=6;return this.imported_name&&(e+=1),(this.imported_name||this.imported_names)&&(e+=5),this.imported_names&&(e+=2+Jn(this.imported_names)),e},dt.prototype._size=function(){let e=7+(this.is_default?8:0);return this.exported_value&&(e+=this.exported_value._size()),this.exported_names&&(e+=2+Jn(this.exported_names)),this.module_name&&(e+=5),e},mt.prototype._size=function(){return 2+Jn(this.args)},ht.prototype._size=function(){return 6+Jn(this.args)},Et.prototype._size=function(){return Jn(this.expressions)},Dt.prototype._size=function(){return this.property.length+1},St.prototype._size=()=>2,vt.prototype._size=function(){return"typeof"===this.operator?7:"void"===this.operator?5:this.operator.length},yt.prototype._size=function(e){if("in"===this.operator)return 4;let t=this.operator.length;return("+"===this.operator||"-"===this.operator)&&this.right instanceof vt&&this.right.operator===this.operator&&(t+=1),this.needs_parens(e)&&(t+=2),t},bt.prototype._size=()=>3,Ft.prototype._size=function(){return 2+Jn(this.elements)},Mt.prototype._size=function(e){let t=2;return In(e)&&(t+=2),t+Jn(this.properties)};const ti=e=>"string"==typeof e?e.length:0;wt.prototype._size=function(){return ti(this.key)+1};const ni=e=>e?7:0;Nt.prototype._size=function(){return 5+ni(this.static)+ti(this.key)},xt.prototype._size=function(){return 5+ni(this.static)+ti(this.key)},kt.prototype._size=function(){return ni(this.static)+ti(this.key)+Qn(this)},It.prototype._size=function(){return(this.name?8:7)+(this.extends?8:0)},Lt.prototype._size=function(){return ni(this.static)+("string"==typeof this.key?this.key.length+2:0)+(this.value?1:0)},Bt.prototype._size=function(){return!Zn||this.definition().unmangleable(Zn)?this.name.length:2},$t.prototype._size=function(){return this.name.length},rn.prototype._size=function(){const{name:e,thedef:t}=this;return t&&t.global?e.length:"arguments"===e?9:2},Kt.prototype._size=()=>10,tn.prototype._size=function(){return this.name.length},an.prototype._size=function(){return this.name.length},un.prototype._size=()=>4,cn.prototype._size=()=>5,fn.prototype._size=function(){return this.value.length+2},pn.prototype._size=function(){const{value:e}=this;return 0===e?1:e>0&&Math.floor(e)===e?Math.floor(Math.log10(e)+1):e.toString().length},_n.prototype._size=function(){return this.value.length},dn.prototype._size=function(){return this.value.toString().length},hn.prototype._size=()=>4,En.prototype._size=()=>3,gn.prototype._size=()=>6,Dn.prototype._size=()=>0,Sn.prototype._size=()=>8,Tn.prototype._size=()=>4,An.prototype._size=()=>5,Ze.prototype._size=()=>6,Je.prototype._size=()=>6;const ii=(e,t)=>e.flags&t,ri=(e,t)=>{e.flags|=t},oi=(e,t)=>{e.flags&=~t};class ai extends On{constructor(e,t){super(),void 0===e.defaults||e.defaults||(t=!0),this.options=o(e,{arguments:!1,arrows:!t,booleans:!t,booleans_as_integers:!1,collapse_vars:!t,comparisons:!t,computed_props:!t,conditionals:!t,dead_code:!t,defaults:!0,directives:!t,drop_console:!1,drop_debugger:!t,ecma:5,evaluate:!t,expression:!1,global_defs:!1,hoist_funs:!1,hoist_props:!t,hoist_vars:!1,ie8:!1,if_return:!t,inline:!t,join_vars:!t,keep_classnames:!1,keep_fargs:!0,keep_fnames:!1,keep_infinity:!1,loops:!t,module:!1,negate_iife:!t,passes:1,properties:!t,pure_getters:!t&&"strict",pure_funcs:null,reduce_funcs:null,reduce_vars:!t,sequences:!t,side_effects:!t,switches:!t,top_retain:null,toplevel:!(!e||!e.top_retain),typeofs:!t,unsafe:!1,unsafe_arrows:!1,unsafe_comps:!1,unsafe_Function:!1,unsafe_math:!1,unsafe_symbols:!1,unsafe_methods:!1,unsafe_proto:!1,unsafe_regexp:!1,unsafe_undefined:!1,unused:!t,warnings:!1},!0);var n=this.options.global_defs;if("object"==typeof n)for(var i in n)"@"===i[0]&&D(n,i)&&(n[i.slice(1)]=ce(n[i],{expression:!0}));!0===this.options.inline&&(this.options.inline=3);var r=this.options.pure_funcs;this.pure_funcs="function"==typeof r?r:r?function(e){return!r.includes(e.expression.print_to_string())}:u;var a=this.options.top_retain;a instanceof RegExp?this.top_retain=function(e){return a.test(e.name)}:"function"==typeof a?this.top_retain=a:a&&("string"==typeof a&&(a=a.split(/,/)),this.top_retain=function(e){return a.includes(e.name)}),this.options.module&&(this.directives["use strict"]=!0,this.options.toplevel=!0);var s=this.options.toplevel;this.toplevel="string"==typeof s?{funcs:/funcs/.test(s),vars:/vars/.test(s)}:{funcs:s,vars:s};var c=this.options.sequences;this.sequences_limit=1==c?800:0|c,this.warnings_produced={},this.evaluated_regexps=new Map}option(e){return this.options[e]}exposed(e){if(e.export)return!0;if(e.global)for(var t=0,n=e.orig.length;t<n;t++)if(!this.toplevel[e.orig[t]instanceof Yt?"funcs":"vars"])return!0;return!1}in_boolean_context(){if(!this.option("booleans"))return!1;for(var e,t=this.self(),n=0;e=this.parent(n);n++){if(e instanceof he||e instanceof bt&&e.condition===t||e instanceof be&&e.condition===t||e instanceof Fe&&e.condition===t||e instanceof Qe&&e.condition===t||e instanceof At&&"!"==e.operator&&e.expression===t)return!0;if(!(e instanceof yt&&("&&"==e.operator||"||"==e.operator||"??"==e.operator)||e instanceof bt||e.tail_node()===t))return!1;t=e}}compress(e){e=e.resolve_defines(this),this.option("expression")&&e.process_expression(!0);for(var t=+this.options.passes||1,n=1/0,i=!1,r={ie8:this.option("ie8")},o=0;o<t;o++)if(e.figure_out_scope(r),0===o&&this.option("drop_console")&&(e=e.drop_console()),(o>0||this.option("reduce_vars"))&&e.reset_opt_flags(this),e=e.transform(this),t>1){let t=0;if(yn(e,()=>{t++}),this.info("pass "+o+": last_count: "+n+", count: "+t),t<n)n=t,i=!1;else{if(i)break;i=!0}}return this.option("expression")&&e.process_expression(!1),e}info(...e){"verbose"==this.options.warnings&&pe.warn(...e)}warn(e,t){if(this.options.warnings){var n=d(e,t);n in this.warnings_produced||(this.warnings_produced[n]=!0,pe.warn.apply(pe,arguments))}}clear_warnings(){this.warnings_produced={}}before(e,t){if(ii(e,256))return e;var n=!1;e instanceof xe&&(e=(e=e.hoist_properties(this)).hoist_declarations(this),n=!0),t(e,this),t(e,this);var i=e.optimize(this);return n&&i instanceof xe&&(i.drop_unused(this),t(i,this)),i===e&&ri(i,256),i}}function si(e,t){e.DEFMETHOD("optimize",(function(e){if(ii(this,512))return this;if(e.has_directive("use asm"))return this;var n=t(this,e);return ri(n,512),n}))}function ui(e,t){if(!((t=wi(t))instanceof pe)){var n;if(e instanceof Ft){var i=e.elements;if("length"==t)return hi(i.length,e);"number"==typeof t&&t in i&&(n=i[t])}else if(e instanceof Mt){t=""+t;for(var r=e.properties,o=r.length;--o>=0;){if(!(r[o]instanceof wt))return;n||r[o].key!==t||(n=r[o].value)}}return n instanceof rn&&n.fixed_value()||n}}function ci(e,t,n,i,r,o){var a=t.parent(r),s=Ii(n,a);if(s)return s;if(!o&&a instanceof mt&&a.expression===n&&!(i instanceof Ve)&&!(i instanceof It)&&!a.is_expr_pure(e)&&(!(i instanceof Pe)||!(a instanceof ht)&&i.contains_this()))return!0;if(a instanceof Ft)return ci(e,t,a,a,r+1);if(a instanceof wt&&n===a.value){var u=t.parent(r+1);return ci(e,t,u,u,r+2)}if(a instanceof gt&&a.expression===n){var c=ui(i,a.property);return!o&&ci(e,t,a,c,r+1)}}function li(e){return e instanceof Ve||e instanceof Pe}function fi(e){if(e instanceof un)return!0;if(e instanceof rn)return e.definition().orig[0]instanceof jt;if(e instanceof gt){if((e=e.expression)instanceof rn){if(e.is_immutable())return!1;e=e.fixed_value()}return!e||!(e instanceof dn)&&(e instanceof ln||fi(e))}return!1}function pi(e,t){if(!(e instanceof rn))return!1;for(var n=e.definition().orig,i=n.length;--i>=0;)if(n[i]instanceof t)return!0}function _i(e){for(let t=0;;t++){const n=e.parent(t);if(n instanceof Ne)return n;if(n instanceof Ie)return n;if(n.block_scope)return n.block_scope}}function di(e,t){for(var n,i=0;(n=e.parent(i++))&&!(n instanceof xe);)if(n instanceof ot&&n.argname){n=n.argname.definition().scope;break}return n.find_variable(t)}function mi(e,t){if(1==t.length)return t[0];if(0==t.length)throw new Error("trying to create a sequence with length zero!");return p(Et,e,{expressions:t.reduce(gi,[])})}function hi(e,t){switch(typeof e){case"string":return p(fn,t,{value:e});case"number":return isNaN(e)?p(En,t):isFinite(e)?1/e<0?p(At,t,{operator:"-",expression:p(pn,t,{value:-e})}):p(pn,t,{value:e}):e<0?p(At,t,{operator:"-",expression:p(Sn,t)}):p(Sn,t);case"boolean":return p(e?Tn:An,t);case"undefined":return p(gn,t);default:if(null===e)return p(hn,t,{value:null});if(e instanceof RegExp)return p(dn,t,{value:{source:A(e.source),flags:e.flags}});throw new Error(d("Can't handle constant of type: {type}",{type:typeof e}))}}function Ei(e,t,n){return e instanceof At&&"delete"==e.operator||e instanceof mt&&e.expression===t&&(n instanceof gt||n instanceof rn&&"eval"==n.name)?mi(t,[p(pn,t,{value:0}),n]):n}function gi(e,t){return t instanceof Et?e.push(...t.expressions):e.push(t),e}function Di(e){if(null===e)return[];if(e instanceof Se)return e.body;if(e instanceof ve)return[];if(e instanceof _e)return[e];throw new Error("Can't convert thing to statement array")}function Si(e){return null===e||(e instanceof ve||e instanceof Se&&0==e.body.length)}function vi(e){return!(e instanceof Pt||e instanceof Be||e instanceof ct||e instanceof lt||e instanceof dt||e instanceof _t)}function Ai(e){return e instanceof ye&&e.body instanceof Se?e.body:e}function Ti(e){return"Call"==e.TYPE&&(e.expression instanceof Pe||Ti(e.expression))}function yi(e){return e instanceof rn&&e.definition().undeclared}si(pe,(function(e){return e})),Ne.DEFMETHOD("drop_console",(function(){return this.transform(new Fn((function(e){if("Call"==e.TYPE){var t=e.expression;if(t instanceof gt){for(var n=t.expression;n.expression;)n=n.expression;if(yi(n)&&"console"==n.name)return p(gn,e)}}})))})),pe.DEFMETHOD("equivalent_to",(function(e){return((e,t)=>{if(!Kn(e,t))return!1;const n=[e],i=[t],r=n.push.bind(n),o=i.push.bind(i);for(;n.length&&i.length;){const e=n.pop(),t=i.pop();if(!Kn(e,t))return!1;if(e._children_backwards(r),t._children_backwards(o),n.length!==i.length)return!1}return 0==n.length&&0==i.length})(this,e)})),xe.DEFMETHOD("process_expression",(function(e,t){var n=this,i=new Fn((function(r){if(e&&r instanceof he)return p(We,r,{value:r.body});if(!e&&r instanceof We){if(t){var o=r.value&&r.value.drop_side_effect_free(t,!0);return o?p(he,r,{body:o}):p(ve,r)}return p(he,r,{body:r.value||p(At,r,{operator:"void",expression:p(pn,r,{value:0})})})}if(r instanceof It||r instanceof Ie&&r!==n)return r;if(r instanceof De){var a=r.body.length-1;a>=0&&(r.body[a]=r.body[a].transform(i))}else r instanceof Qe?(r.body=r.body.transform(i),r.alternative&&(r.alternative=r.alternative.transform(i))):r instanceof we&&(r.body=r.body.transform(i));return r}));n.transform(i)})),function(e){function t(e,t){t.assignments=0,t.chained=!1,t.direct_access=!1,t.escaped=0,t.recursive_refs=0,t.references=[],t.should_replace=void 0,t.single_use=void 0,t.scope.pinned()?t.fixed=!1:t.orig[0]instanceof Xt||!e.exposed(t)?t.fixed=t.init:t.fixed=!1}function n(e,n,i){i.variables.forEach((function(i){t(n,i),null===i.fixed?(e.defs_to_safe_ids.set(i.id,e.safe_ids),s(e,i,!0)):i.fixed&&(e.loop_ids.set(i.id,e.in_loop),s(e,i,!0))}))}function i(e,n){n.block_scope&&n.block_scope.variables.forEach(n=>{t(e,n)})}function r(e){e.safe_ids=Object.create(e.safe_ids)}function o(e){e.safe_ids=Object.getPrototypeOf(e.safe_ids)}function s(e,t,n){e.safe_ids[t.id]=n}function u(e,t){if("m"==t.single_use)return!1;if(e.safe_ids[t.id]){if(null==t.fixed){var n=t.orig[0];if(n instanceof Wt||"arguments"==n.name)return!1;t.fixed=p(gn,n)}return!0}return t.fixed instanceof Be}function c(e,t,n,i){if(void 0===t.fixed)return!0;let r;return null===t.fixed&&(r=e.defs_to_safe_ids.get(t.id))?(r[t.id]=!1,e.defs_to_safe_ids.delete(t.id),!0):!!D(e.safe_ids,t.id)&&(!!u(e,t)&&(!1!==t.fixed&&(!(null!=t.fixed&&(!i||t.references.length>t.assignments))&&(t.fixed instanceof Be?i instanceof pe&&t.fixed.parent_scope===n:t.orig.every(e=>!(e instanceof Xt||e instanceof Yt||e instanceof jt))))))}function l(e,t,n,i,r,o,a){var s=e.parent(o);if(r){if(r.is_constant())return;if(r instanceof Vt)return}if(s instanceof Ct&&"="==s.operator&&i===s.right||s instanceof mt&&(i!==s.expression||s instanceof ht)||s instanceof ze&&i===s.value&&i.scope!==t.scope||s instanceof ft&&i===s.value||s instanceof Je&&i===s.value&&i.scope!==t.scope)return!(a>1)||r&&r.is_constant_expression(n)||(a=1),void((!t.escaped||t.escaped>a)&&(t.escaped=a));if(s instanceof Ft||s instanceof Ze||s instanceof yt&&Ni.has(s.operator)||s instanceof bt&&i!==s.condition||s instanceof ke||s instanceof Et&&i===s.tail_node())l(e,t,n,s,s,o+1,a);else if(s instanceof wt&&i===s.value){var u=e.parent(o+1);l(e,t,n,u,u,o+2,a)}else if(s instanceof gt&&i===s.expression&&(l(e,t,n,s,r=ui(r,s.property),o+1,a+1),r))return;o>0||s instanceof Et&&i!==s.tail_node()||s instanceof he||(t.direct_access=!0)}e(pe,a);const f=e=>yn(e,e=>{if(e instanceof Bt){var t=e.definition();t&&(e instanceof rn&&t.references.push(e),t.fixed=!1)}});e(Le,(function(e,t,i){return r(e),n(e,i,this),t(),o(e),!0})),e(Ct,(function(e,t,n){var i=this;if(i.left instanceof Ke)f(i.left);else{var r=i.left;if(r instanceof rn){var o=r.definition(),a=c(e,o,r.scope,i.right);if(o.assignments++,a){var u=o.fixed;if(u||"="==i.operator){var _="="==i.operator,d=_?i.right:i;if(!ci(n,e,i,d,0))return o.references.push(r),_||(o.chained=!0),o.fixed=_?function(){return i.right}:function(){return p(yt,i,{operator:i.operator.slice(0,-1),left:u instanceof pe?u:u(),right:i.right})},s(e,o,!1),i.right.walk(e),s(e,o,!0),l(e,o,r.scope,i,d,0,1),!0}}}}})),e(yt,(function(e){if(Ni.has(this.operator))return this.left.walk(e),r(e),this.right.walk(e),o(e),!0})),e(De,(function(e,t,n){i(n,this)})),e(it,(function(e){return r(e),this.expression.walk(e),o(e),r(e),Ee(this,e),o(e),!0})),e(It,(function(e,t){return oi(this,16),r(e),t(),o(e),!0})),e(bt,(function(e){return this.condition.walk(e),r(e),this.consequent.walk(e),o(e),r(e),this.alternative.walk(e),o(e),!0})),e(nt,(function(e,t){return r(e),t(),o(e),!0})),e(Ie,(function(e,t,i){return oi(this,16),r(e),n(e,i,this),this.uses_arguments?(t(),void o(e)):(!this.name&&(a=e.parent())instanceof mt&&a.expression===this&&!a.args.some(e=>e instanceof ke)&&this.argnames.every(e=>e instanceof Bt)&&this.argnames.forEach((t,n)=>{if(t.definition){var i=t.definition();i.orig.length>1||(void 0!==i.fixed||this.uses_arguments&&!e.has_directive("use strict")?i.fixed=!1:(i.fixed=function(){return a.args[n]||p(gn,a)},e.loop_ids.set(i.id,e.in_loop),s(e,i,!0)))}}),t(),o(e),!0);var a})),e(Ce,(function(e,t,n){i(n,this);const a=e.in_loop;return e.in_loop=this,r(e),this.body.walk(e),$i(this)&&(o(e),r(e)),this.condition.walk(e),o(e),e.in_loop=a,!0})),e(Fe,(function(e,t,n){i(n,this),this.init&&this.init.walk(e);const a=e.in_loop;return e.in_loop=this,r(e),this.condition&&this.condition.walk(e),this.body.walk(e),this.step&&($i(this)&&(o(e),r(e)),this.step.walk(e)),o(e),e.in_loop=a,!0})),e(Me,(function(e,t,n){i(n,this),f(this.init),this.object.walk(e);const a=e.in_loop;return e.in_loop=this,r(e),this.body.walk(e),o(e),e.in_loop=a,!0})),e(Qe,(function(e){return this.condition.walk(e),r(e),this.body.walk(e),o(e),this.alternative&&(r(e),this.alternative.walk(e),o(e)),!0})),e(Te,(function(e){return r(e),this.body.walk(e),o(e),!0})),e(Qt,(function(){this.definition().fixed=!1})),e(rn,(function(e,t,n){var i,r,o=this.definition();o.references.push(this),1==o.references.length&&!o.fixed&&o.orig[0]instanceof Yt&&e.loop_ids.set(o.id,e.in_loop),void 0!==o.fixed&&u(e,o)?o.fixed&&((i=this.fixed_value())instanceof Ie&&Ji(e,o)?o.recursive_refs++:i&&!n.exposed(o)&&function(e,t,n){return t.option("unused")&&!n.scope.pinned()&&n.references.length-n.recursive_refs==1&&e.loop_ids.get(n.id)===e.in_loop}(e,n,o)?o.single_use=i instanceof Ie&&!i.pinned()||i instanceof It||o.scope===this.scope&&i.is_constant_expression():o.single_use=!1,ci(n,e,this,i,0,!!(r=i)&&(r.is_constant()||r instanceof Ie||r instanceof un))&&(o.single_use?o.single_use="m":o.fixed=!1)):o.fixed=!1,l(e,o,this.scope,this,i,0,1)})),e(Ne,(function(e,i,r){this.globals.forEach((function(e){t(r,e)})),n(e,r,this)})),e(rt,(function(e,t,n){return i(n,this),r(e),Ee(this,e),o(e),this.bcatch&&(r(e),this.bcatch.walk(e),o(e)),this.bfinally&&this.bfinally.walk(e),!0})),e(vt,(function(e){var t=this;if("++"===t.operator||"--"===t.operator){var n=t.expression;if(n instanceof rn){var i=n.definition(),r=c(e,i,n.scope,!0);if(i.assignments++,r){var o=i.fixed;if(o)return i.references.push(n),i.chained=!0,i.fixed=function(){return p(yt,t,{operator:t.operator.slice(0,-1),left:p(At,t,{operator:"+",expression:o instanceof pe?o:o()}),right:p(pn,t,{value:1})})},s(e,i,!0),!0}}}})),e(ft,(function(e,t){var n=this;if(n.name instanceof Ke)f(n.name);else{var i=n.name.definition();if(n.value){if(c(e,i,n.name.scope,n.value))return i.fixed=function(){return n.value},e.loop_ids.set(i.id,e.in_loop),s(e,i,!1),t(),s(e,i,!0),!0;i.fixed=!1}}})),e(Oe,(function(e,t,n){i(n,this);const a=e.in_loop;return e.in_loop=this,r(e),t(),o(e),e.in_loop=a,!0}))}((function(e,t){e.DEFMETHOD("reduce_vars",t)})),Ne.DEFMETHOD("reset_opt_flags",(function(e){const t=this,n=e.option("reduce_vars"),i=new On((function(r,o){if(oi(r,1792),n)return e.top_retain&&r instanceof Be&&i.parent()===t&&ri(r,1024),r.reduce_vars(i,o,e)}));i.safe_ids=Object.create(null),i.in_loop=null,i.loop_ids=new Map,i.defs_to_safe_ids=new Map,t.walk(i)})),Bt.DEFMETHOD("fixed_value",(function(){var e=this.thedef.fixed;return!e||e instanceof pe?e:e()})),rn.DEFMETHOD("is_immutable",(function(){var e=this.definition().orig;return 1==e.length&&e[0]instanceof jt}));var bi=E("Array Boolean clearInterval clearTimeout console Date decodeURI decodeURIComponent encodeURI encodeURIComponent Error escape eval EvalError Function isFinite isNaN JSON Math Number parseFloat parseInt RangeError ReferenceError RegExp Object setInterval setTimeout String SyntaxError TypeError unescape URIError");rn.DEFMETHOD("is_declared",(function(e){return!this.definition().undeclared||e.option("unsafe")&&bi.has(this.name)}));var Ci,Oi=E("Infinity NaN undefined");function Fi(e){return e instanceof Sn||e instanceof En||e instanceof gn}function Mi(e,t){var n,r,o=t.find_parent(xe).get_defun_scope();!function(){var e=t.self(),i=0;do{if(e instanceof ot||e instanceof at)i++;else if(e instanceof ye)n=!0;else{if(e instanceof xe){o=e;break}e instanceof rt&&(r=!0)}}while(e=t.parent(i++))}();var a,s=10;do{a=!1,c(e),t.option("dead_code")&&_(e,t),t.option("if_return")&&l(e,t),t.sequences_limit>0&&(h(e,t),g(e,t)),t.option("join_vars")&&S(e),t.option("collapse_vars")&&u(e,t)}while(a&&s-- >0);function u(e,t){if(o.pinned())return e;for(var s,u=[],c=e.length,l=new Fn((function(e){if(M)return e;if(!F)return e!==d[m]?e:++m<d.length?I(e):(F=!0,(g=function e(t,n,i){var r=l.parent(n);if(r instanceof Ct)return i&&!(r.left instanceof gt||v.has(r.left.name))?e(r,n+1,i):t;if(r instanceof yt)return!i||Ni.has(r.operator)&&r.left!==t?t:e(r,n+1,i);if(r instanceof mt)return t;if(r instanceof it)return t;if(r instanceof bt)return i&&r.condition===t?e(r,n+1,i):t;if(r instanceof st)return e(r,n+1,!0);if(r instanceof ze)return i?e(r,n+1,i):t;if(r instanceof Qe)return i&&r.condition===t?e(r,n+1,i):t;if(r instanceof ye)return t;if(r instanceof Et)return e(r,n+1,r.tail_node()!==t);if(r instanceof he)return e(r,n+1,!0);return r instanceof et||r instanceof ft?t:null}(e,0))===e&&(M=!0),e);var n,i=l.parent();if(e instanceof Ct&&"="!=e.operator&&S.equivalent_to(e.left)||e instanceof Ze||e instanceof mt&&S instanceof gt&&S.equivalent_to(e.expression)||e instanceof de||e instanceof Ke||e instanceof ke&&e.expression instanceof Bt&&e.expression.definition().references.length>1||e instanceof ye&&!(e instanceof Fe)||e instanceof qe||e instanceof rt||e instanceof we||e instanceof Je||e instanceof dt||e instanceof It||i instanceof Fe&&e!==i.init||!b&&e instanceof rn&&!e.is_declared(t)&&!Xi.has(e)||e instanceof rn&&i instanceof mt&&T(i,wn))return M=!0,e;if(D||A&&b||!(i instanceof yt&&Ni.has(i.operator)&&i.left!==e||i instanceof bt&&i.condition!==e||i instanceof Qe&&i.condition!==e)||(D=i),w&&!(e instanceof Ut)&&S.equivalent_to(e)){if(D)return M=!0,e;if(Ii(e,i))return E&&R++,e;if(R++,E&&h instanceof ft)return e;if(a=M=!0,t.info("Collapsing {name} [{file}:{line},{col}]",{name:e.print_to_string(),file:e.start.file,line:e.start.line,col:e.start.col}),h instanceof Tt)return p(At,h,h);if(h instanceof ft){var s=h.name.definition(),u=h.value;return s.references.length-s.replaced!=1||t.exposed(s)?p(Ct,h,{operator:"=",left:p(rn,h.name,h.name),right:u}):(s.replaced++,O&&Fi(u)?u.transform(t):Ei(i,e,u))}return oi(h,32),h}return(e instanceof mt||e instanceof ze&&(y||S instanceof gt||W(S))||e instanceof gt&&(y||e.expression.may_throw_on_access(t))||e instanceof rn&&(v.get(e.name)||y&&W(e))||e instanceof ft&&e.value&&(v.has(e.name.name)||y&&W(e.name))||(n=Ii(e.left,e))&&(n instanceof gt||v.has(n.name))||C&&(r?e.has_side_effects(t):function e(t,n){if(t instanceof Ct)return e(t.left,!0);if(t instanceof vt)return e(t.expression,!0);if(t instanceof ft)return t.value&&e(t.value);if(n){if(t instanceof Dt)return e(t.expression,!0);if(t instanceof St)return e(t.expression,!0);if(t instanceof rn)return t.definition().scope!==o}return!1}(e)))&&(g=e,e instanceof xe&&(M=!0)),I(e)}),(function(e){M||(g===e&&(M=!0),D===e&&(D=null))})),_=new Fn((function(e){if(M)return e;if(!F){if(e!==d[m])return e;if(++m<d.length)return;return F=!0,e}return e instanceof rn&&e.name==k.name?(--R||(M=!0),Ii(e,_.parent())?e:(k.replaced++,E.replaced--,h.value)):e instanceof nt||e instanceof xe?e:void 0}));--c>=0;){0==c&&t.option("unused")&&P();var d=[];for(V(e[c]);u.length>0;){d=u.pop();var m=0,h=d[d.length-1],E=null,g=null,D=null,S=B(h);if(S&&!fi(S)&&!S.has_side_effects(t)){var v=U(h),A=H(S);S instanceof rn&&v.set(S.name,!1);var y=X(h),b=z(),C=h.may_throw(t),O=h.name instanceof Wt,F=O,M=!1,R=0,w=!s||!F;if(!w){for(var x=t.self().argnames.lastIndexOf(h.name)+1;!M&&x<s.length;x++)s[x].transform(l);w=!0}for(var N=c;!M&&N<e.length;N++)e[N].transform(l);if(E){var k=h.name.definition();if(M&&k.references.length-k.replaced>R)R=!1;else{M=!1,m=0,F=O;for(N=c;!M&&N<e.length;N++)e[N].transform(_);E.single_use=!1}}R&&!G(h)&&e.splice(c,1)}}}function I(e){if(e instanceof xe)return e;if(e instanceof et){e.expression=e.expression.transform(l);for(var t=0,n=e.body.length;!M&&t<n;t++){var i=e.body[t];if(i instanceof it){if(!F){if(i!==d[m])continue;m++}if(i.expression=i.expression.transform(l),!b)break}}return M=!0,e}}function L(e,t,n){var i=!1,r=!(e instanceof Ve);return t.walk(new On((function(t,a){if(i)return!0;if(t instanceof rn&&(e.variables.has(t.name)||function(e,t){if(e.global)return!1;let n=e.scope;for(;n&&n!==t;){if(n.variables.has(e.name))return!0;n=n.parent_scope}return!1}(t.definition(),e))){var s=t.definition().scope;if(s!==o)for(;s=s.parent_scope;)if(s===o)return!0;return i=!0}if((n||r)&&t instanceof un)return i=!0;if(t instanceof xe&&!(t instanceof Ve)){var u=r;return r=!1,a(),r=u,!0}}))),i}function P(){var e,n=t.self();if(li(n)&&!n.name&&!n.uses_arguments&&!n.pinned()&&(e=t.parent())instanceof mt&&e.expression===n&&e.args.every(e=>!(e instanceof ke))){var r=t.has_directive("use strict");r&&!i(r,n.body)&&(r=!1);var o=n.argnames.length;s=e.args.slice(o);for(var a=new Set,c=o;--c>=0;){var l=n.argnames[c],f=e.args[c];const i=l.definition&&l.definition();if(!(i&&i.orig.length>1)&&(s.unshift(p(ft,l,{name:l,value:f})),!a.has(l.name)))if(a.add(l.name),l instanceof ke){var _=e.args.slice(c);_.every(e=>!L(n,e,r))&&u.unshift([p(ft,l,{name:l.expression,value:p(Ft,e,{elements:_})})])}else f?(f instanceof Ie&&f.pinned()||L(n,f,r))&&(f=null):f=p(gn,l).transform(t),f&&u.unshift([p(ft,l,{name:l,value:f})])}}}function V(e){if(d.push(e),e instanceof Ct)e.left.has_side_effects(t)||u.push(d.slice()),V(e.right);else if(e instanceof yt)V(e.left),V(e.right);else if(e instanceof mt&&!T(e,wn))V(e.expression),e.args.forEach(V);else if(e instanceof it)V(e.expression);else if(e instanceof bt)V(e.condition),V(e.consequent),V(e.alternative);else if(e instanceof st){var n=e.definitions.length,i=n-200;for(i<0&&(i=0);i<n;i++)V(e.definitions[i])}else e instanceof be?(V(e.condition),e.body instanceof De||V(e.body)):e instanceof ze?e.value&&V(e.value):e instanceof Fe?(e.init&&V(e.init),e.condition&&V(e.condition),e.step&&V(e.step),e.body instanceof De||V(e.body)):e instanceof Me?(V(e.object),e.body instanceof De||V(e.body)):e instanceof Qe?(V(e.condition),e.body instanceof De||V(e.body),!e.alternative||e.alternative instanceof De||V(e.alternative)):e instanceof Et?e.expressions.forEach(V):e instanceof he?V(e.body):e instanceof et?(V(e.expression),e.body.forEach(V)):e instanceof vt?"++"!=e.operator&&"--"!=e.operator||u.push(d.slice()):e instanceof ft&&e.value&&(u.push(d.slice()),V(e.value));d.pop()}function B(e){if(!(e instanceof ft&&e.name instanceof Ut)){const t=e[e instanceof Ct?"left":"expression"];return!pi(t,Xt)&&!pi(t,zt)&&t}var n=e.name.definition();if(i(e.name,n.orig)){var r=n.references.length-n.replaced;if(r)return n.orig.length-n.eliminated>1&&!(e.name instanceof Wt)||(r>1?function(e){var t=e.value;if(t instanceof rn&&"arguments"!=t.name){var n=t.definition();if(!n.undeclared)return E=n}}(e):!t.exposed(n))?p(rn,e.name,e.name):void 0}}function K(e){return e[e instanceof Ct?"right":"value"]}function U(e){var n=new Map;if(e instanceof vt)return n;var i=new On((function(e){for(var r=e;r instanceof gt;)r=r.expression;(r instanceof rn||r instanceof un)&&n.set(r.name,n.get(r.name)||ci(t,i,e,e,0))}));return K(e).walk(i),n}function G(n){if(n.name instanceof Wt){var i=t.parent(),r=t.self().argnames,o=r.indexOf(n.name);if(o<0)i.args.length=Math.min(i.args.length,r.length-1);else{var a=i.args;a[o]&&(a[o]=p(pn,a[o],{value:0}))}return!0}var s=!1;return e[c].transform(new Fn((function(e,t,i){return s?e:e===n||e.body===n?(s=!0,e instanceof ft?(e.value=e.name instanceof Xt?p(gn,e.value):null,e):i?f.skip:null):void 0}),(function(e){if(e instanceof Et)switch(e.expressions.length){case 0:return null;case 1:return e.expressions[0]}})))}function H(e){for(;e instanceof gt;)e=e.expression;return e instanceof rn&&e.definition().scope===o&&!(n&&(v.has(e.name)||h instanceof vt||h instanceof Ct&&"="!=h.operator))}function X(e){return e instanceof vt?ki.has(e.operator):K(e).has_side_effects(t)}function z(){if(y)return!1;if(E)return!0;if(S instanceof rn){var e=S.definition();if(e.references.length-e.replaced==(h instanceof ft?1:2))return!0}return!1}function W(e){if(!e.definition)return!0;var t=e.definition();return!(1==t.orig.length&&t.orig[0]instanceof Yt)&&(t.scope.get_defun_scope()!==o||!t.references.every(e=>{var t=e.scope.get_defun_scope();return"Scope"==t.TYPE&&(t=t.parent_scope),t===o}))}}function c(e){for(var t=[],n=0;n<e.length;){var i=e[n];i instanceof Se&&i.body.every(vi)?(a=!0,c(i.body),e.splice(n,1,...i.body),n+=i.body.length):i instanceof ve?(a=!0,e.splice(n,1)):i instanceof me?t.indexOf(i.value)<0?(n++,t.push(i.value)):(a=!0,e.splice(n,1)):n++}}function l(e,t){for(var n=t.self(),i=function(e){for(var t=0,n=e.length;--n>=0;){var i=e[n];if(i instanceof Qe&&i.body instanceof We&&++t>1)return!0}return!1}(e),r=n instanceof Ie,o=e.length;--o>=0;){var s=e[o],u=S(o),c=e[u];if(r&&!c&&s instanceof We){if(!s.value){a=!0,e.splice(o,1);continue}if(s.value instanceof At&&"void"==s.value.operator){a=!0,e[o]=p(he,s,{body:s.value.expression});continue}}if(s instanceof Qe){var l;if(E(l=zi(s.body))){l.label&&m(l.label.thedef.references,l),a=!0,(s=s.clone()).condition=s.condition.negate(t);var f=D(s.body,l);s.body=p(Se,s,{body:Di(s.alternative).concat(g())}),s.alternative=p(Se,s,{body:f}),e[o]=s.transform(t);continue}if(E(l=zi(s.alternative))){l.label&&m(l.label.thedef.references,l),a=!0,(s=s.clone()).body=p(Se,s.body,{body:Di(s.body).concat(g())});f=D(s.alternative,l);s.alternative=p(Se,s.alternative,{body:f}),e[o]=s.transform(t);continue}}if(s instanceof Qe&&s.body instanceof We){var _=s.body.value;if(!_&&!s.alternative&&(r&&!c||c instanceof We&&!c.value)){a=!0,e[o]=p(he,s.condition,{body:s.condition});continue}if(_&&!s.alternative&&c instanceof We&&c.value){a=!0,(s=s.clone()).alternative=c,e[o]=s.transform(t),e.splice(u,1);continue}if(_&&!s.alternative&&(!c&&r&&i||c instanceof We)){a=!0,(s=s.clone()).alternative=c||p(We,s,{value:null}),e[o]=s.transform(t),c&&e.splice(u,1);continue}var h=e[v(o)];if(t.option("sequences")&&r&&!s.alternative&&h instanceof Qe&&h.body instanceof We&&S(u)==e.length&&c instanceof he){a=!0,(s=s.clone()).alternative=p(Se,c,{body:[c,p(We,c,{value:null})]}),e[o]=s.transform(t),e.splice(u,1);continue}}}function E(i){if(!i)return!1;for(var a=o+1,s=e.length;a<s;a++){var u=e[a];if(u instanceof lt||u instanceof ct)return!1}var c=i instanceof qe?t.loopcontrol_target(i):null;return i instanceof We&&r&&function(e){return!e||e instanceof At&&"void"==e.operator}(i.value)||i instanceof je&&n===Ai(c)||i instanceof $e&&c instanceof Se&&n===c}function g(){var t=e.slice(o+1);return e.length=o+1,t.filter((function(t){return!(t instanceof Be)||(e.push(t),!1)}))}function D(e,t){var n=Di(e).slice(0,-1);return t.value&&n.push(p(he,t.value,{body:t.value.expression})),n}function S(t){for(var n=t+1,i=e.length;n<i;n++){var r=e[n];if(!(r instanceof ut&&d(r)))break}return n}function v(t){for(var n=t;--n>=0;){var i=e[n];if(!(i instanceof ut&&d(i)))break}return n}}function _(e,t){for(var n,i=t.self(),r=0,o=0,s=e.length;r<s;r++){var u=e[r];if(u instanceof qe){var c=t.loopcontrol_target(u);u instanceof $e&&!(c instanceof ye)&&Ai(c)===i||u instanceof je&&Ai(c)===i?u.label&&m(u.label.thedef.references,u):e[o++]=u}else e[o++]=u;if(zi(u)){n=e.slice(r+1);break}}e.length=o,a=o!=s,n&&n.forEach((function(n){Ri(t,n,e)}))}function d(e){return e.definitions.every(e=>!e.value)}function h(e,t){if(!(e.length<2)){for(var n=[],i=0,r=0,o=e.length;r<o;r++){var s=e[r];if(s instanceof he){n.length>=t.sequences_limit&&c();var u=s.body;n.length>0&&(u=u.drop_side_effect_free(t)),u&&gi(n,u)}else s instanceof st&&d(s)||s instanceof Be||c(),e[i++]=s}c(),e.length=i,i!=o&&(a=!0)}function c(){if(n.length){var t=mi(n[0],n);e[i++]=p(he,t,{body:t}),n=[]}}}function E(e,t){if(!(e instanceof Se))return e;for(var n=null,i=0,r=e.body.length;i<r;i++){var o=e.body[i];if(o instanceof ut&&d(o))t.push(o);else{if(n)return!1;n=o}}return n}function g(e,t){function n(e){r--,a=!0;var n=i.body;return mi(n,[n,e]).transform(t)}for(var i,r=0,o=0;o<e.length;o++){var s=e[o];if(i)if(s instanceof ze)s.value=n(s.value||p(gn,s).transform(t));else if(s instanceof Fe){if(!(s.init instanceof st)){yn(i.body,e=>e instanceof xe||(e instanceof yt&&"in"===e.operator?Cn:void 0))||(s.init?s.init=n(s.init):(s.init=i.body,r--,a=!0))}}else s instanceof Me?s.init instanceof lt||s.init instanceof ct||(s.object=n(s.object)):s instanceof Qe?s.condition=n(s.condition):(s instanceof et||s instanceof we)&&(s.expression=n(s.expression));if(t.option("conditionals")&&s instanceof Qe){var u=[],c=E(s.body,u),l=E(s.alternative,u);if(!1!==c&&!1!==l&&u.length>0){var f=u.length;u.push(p(Qe,s,{condition:s.condition,body:c||p(ve,s.body),alternative:l})),u.unshift(r,1),[].splice.apply(e,u),o+=f,r+=f+1,i=null,a=!0;continue}}e[r++]=s,i=s instanceof he?s:null}e.length=r}function D(e,n){if(e instanceof st){var i,r=e.definitions[e.definitions.length-1];if(r.value instanceof Mt)if(n instanceof Ct?i=[n]:n instanceof Et&&(i=n.expressions.slice()),i){var a=!1;do{var s=i[0];if(!(s instanceof Ct))break;if("="!=s.operator)break;if(!(s.left instanceof gt))break;var u=s.left.expression;if(!(u instanceof rn))break;if(r.name.name!=u.name)break;if(!s.right.is_constant_expression(o))break;var c=s.left.property;if(c instanceof pe&&(c=c.evaluate(t)),c instanceof pe)break;c=""+c;var l=t.option("ecma")<2015&&t.has_directive("use strict")?function(e){return e.key!=c&&e.key&&e.key.name!=c}:function(e){return e.key&&e.key.name!=c};if(!r.value.properties.every(l))break;var f=r.value.properties.filter((function(e){return e.key===c}))[0];f?f.value=new Et({start:f.start,expressions:[f.value.clone(),s.right.clone()],end:f.end}):r.value.properties.push(p(wt,s,{key:c,value:s.right})),i.shift(),a=!0}while(i.length);return a&&i}}}function S(e){for(var t,n=0,i=-1,r=e.length;n<r;n++){var o=e[n],s=e[i];if(o instanceof st)s&&s.TYPE==o.TYPE?(s.definitions=s.definitions.concat(o.definitions),a=!0):t&&t.TYPE==o.TYPE&&d(o)?(t.definitions=t.definitions.concat(o.definitions),a=!0):(e[++i]=o,t=o);else if(o instanceof ze)o.value=c(o.value);else if(o instanceof Fe){(u=D(s,o.init))?(a=!0,o.init=u.length?mi(o.init,u):null,e[++i]=o):s instanceof ut&&(!o.init||o.init.TYPE==s.TYPE)?(o.init&&(s.definitions=s.definitions.concat(o.init.definitions)),o.init=s,e[i]=o,a=!0):t&&o.init&&t.TYPE==o.init.TYPE&&d(o.init)?(t.definitions=t.definitions.concat(o.init.definitions),o.init=null,e[++i]=o,a=!0):e[++i]=o}else if(o instanceof Me)o.object=c(o.object);else if(o instanceof Qe)o.condition=c(o.condition);else if(o instanceof he){var u;if(u=D(s,o.body)){if(a=!0,!u.length)continue;o.body=mi(o.body,u)}e[++i]=o}else o instanceof et||o instanceof we?o.expression=c(o.expression):e[++i]=o}function c(t){e[++i]=o;var n=D(s,t);return n?(a=!0,n.length?mi(t,n):t instanceof Et?t.tail_node().left:t.left):t}e.length=i+1}}function Ri(e,t,n){t instanceof Be||e.warn("Dropping unreachable code [{file}:{line},{col}]",t.start),yn(t,i=>i instanceof ut?(e.warn("Declarations in unreachable code! [{file}:{line},{col}]",i.start),i.remove_initializers(),n.push(i),!0):i instanceof Be&&(i===t||!e.has_directive("use strict"))?(n.push(i===t?i:p(ut,i,{definitions:[p(ft,i,{name:p(Gt,i.name,i.name),value:null})]})),!0):i instanceof xe||void 0)}function wi(e){return e instanceof ln?e.getValue():e instanceof At&&"void"==e.operator&&e.expression instanceof ln?void 0:e}function xi(e,t){return ii(e,8)||e instanceof gn||e instanceof At&&"void"==e.operator&&!e.expression.has_side_effects(t)}!function(e){function t(e){return/strict/.test(e.option("pure_getters"))}pe.DEFMETHOD("may_throw_on_access",(function(e){return!e.option("pure_getters")||this._dot_throw(e)})),e(pe,t),e(hn,u),e(gn,u),e(ln,s),e(Ft,s),e(Mt,(function(e){if(!t(e))return!1;for(var n=this.properties.length;--n>=0;)if(this.properties[n]._dot_throw(e))return!0;return!1})),e(It,s),e(Rt,s),e(Nt,u),e(ke,(function(e){return this.expression._dot_throw(e)})),e(Pe,s),e(Ve,s),e(Tt,s),e(At,(function(){return"void"==this.operator})),e(yt,(function(e){return("&&"==this.operator||"||"==this.operator||"??"==this.operator)&&(this.left._dot_throw(e)||this.right._dot_throw(e))})),e(Ct,(function(e){return"="==this.operator&&this.right._dot_throw(e)})),e(bt,(function(e){return this.consequent._dot_throw(e)||this.alternative._dot_throw(e)})),e(Dt,(function(e){return!!t(e)&&!(this.expression instanceof Pe&&"prototype"==this.property)})),e(Et,(function(e){return this.tail_node()._dot_throw(e)})),e(rn,(function(e){if("arguments"===this.name)return!1;if(ii(this,8))return!0;if(!t(e))return!1;if(yi(this)&&this.is_declared(e))return!1;if(this.is_immutable())return!1;var n=this.fixed_value();return!n||n._dot_throw(e)}))}((function(e,t){e.DEFMETHOD("_dot_throw",t)})),function(e){const t=E("! delete"),n=E("in instanceof == != === !== < <= >= >");e(pe,s),e(At,(function(){return t.has(this.operator)})),e(yt,(function(){return n.has(this.operator)||Ni.has(this.operator)&&this.left.is_boolean()&&this.right.is_boolean()})),e(bt,(function(){return this.consequent.is_boolean()&&this.alternative.is_boolean()})),e(Ct,(function(){return"="==this.operator&&this.right.is_boolean()})),e(Et,(function(){return this.tail_node().is_boolean()})),e(Tn,u),e(An,u)}((function(e,t){e.DEFMETHOD("is_boolean",t)})),function(e){e(pe,s),e(pn,u);var t=E("+ - ~ ++ --");e(vt,(function(){return t.has(this.operator)}));var n=E("- * / % & | ^ << >> >>>");e(yt,(function(e){return n.has(this.operator)||"+"==this.operator&&this.left.is_number(e)&&this.right.is_number(e)})),e(Ct,(function(e){return n.has(this.operator.slice(0,-1))||"="==this.operator&&this.right.is_number(e)})),e(Et,(function(e){return this.tail_node().is_number(e)})),e(bt,(function(e){return this.consequent.is_number(e)&&this.alternative.is_number(e)}))}((function(e,t){e.DEFMETHOD("is_number",t)})),(Ci=function(e,t){e.DEFMETHOD("is_string",t)})(pe,s),Ci(fn,u),Ci(Ge,u),Ci(At,(function(){return"typeof"==this.operator})),Ci(yt,(function(e){return"+"==this.operator&&(this.left.is_string(e)||this.right.is_string(e))})),Ci(Ct,(function(e){return("="==this.operator||"+="==this.operator)&&this.right.is_string(e)})),Ci(Et,(function(e){return this.tail_node().is_string(e)})),Ci(bt,(function(e){return this.consequent.is_string(e)&&this.alternative.is_string(e)}));var Ni=E("&& || ??"),ki=E("delete ++ --");function Ii(e,t){return t instanceof vt&&ki.has(t.operator)?t.expression:t instanceof Ct&&t.left===e?e:void 0}function Li(e,t){return e.size()>t.size()?t:e}function Pi(e,t){return Li(p(he,e,{body:e}),p(he,t,{body:t})).body}function Vi(e,t,n){return(In(e)?Pi:Li)(t,n)}function Bi(e){const t=new Map;for(var n of Object.keys(e))t.set(n,E(e[n]));return t}!function(e){function t(e,t){e.warn("global_defs "+t.print_to_string()+" redefined [{file}:{line},{col}]",t.start)}Ne.DEFMETHOD("resolve_defines",(function(e){return e.option("global_defs")?(this.figure_out_scope({ie8:e.option("ie8")}),this.transform(new Fn((function(n){var i=n._find_defs(e,"");if(i){for(var r,o=0,a=n;(r=this.parent(o++))&&r instanceof gt&&r.expression===a;)a=r;if(!Ii(a,r))return i;t(e,n)}})))):this})),e(pe,a),e(Dt,(function(e,t){return this.expression._find_defs(e,"."+this.property+t)})),e(Ut,(function(e){this.global()&&D(e.option("global_defs"),this.name)&&t(e,this)})),e(rn,(function(e,t){if(this.global()){var n=e.option("global_defs"),i=this.name+t;return D(n,i)?function e(t,n){if(t instanceof pe)return p(t.CTOR,n,t);if(Array.isArray(t))return p(Ft,n,{elements:t.map((function(t){return e(t,n)}))});if(t&&"object"==typeof t){var i=[];for(var r in t)D(t,r)&&i.push(p(wt,n,{key:r,value:e(t[r],n)}));return p(Mt,n,{properties:i})}return hi(t,n)}(n[i],this):void 0}}))}((function(e,t){e.DEFMETHOD("_find_defs",t)}));var Ki=["constructor","toString","valueOf"],Ui=Bi({Array:["indexOf","join","lastIndexOf","slice"].concat(Ki),Boolean:Ki,Function:Ki,Number:["toExponential","toFixed","toPrecision"].concat(Ki),Object:Ki,RegExp:["test"].concat(Ki),String:["charAt","charCodeAt","concat","indexOf","italics","lastIndexOf","match","replace","search","slice","split","substr","substring","toLowerCase","toUpperCase","trim"].concat(Ki)}),Gi=Bi({Array:["isArray"],Math:["abs","acos","asin","atan","ceil","cos","exp","floor","log","round","sin","sqrt","tan","atan2","pow","max","min"],Number:["isFinite","isNaN"],Object:["create","getOwnPropertyDescriptor","getOwnPropertyNames","getPrototypeOf","isExtensible","isFrozen","isSealed","keys"],String:["fromCharCode"]});!function(e){pe.DEFMETHOD("evaluate",(function(e){if(!e.option("evaluate"))return this;var t=this._eval(e,1);return!t||t instanceof RegExp?t:"function"==typeof t||"object"==typeof t?this:t}));var t=E("! ~ - + void");pe.DEFMETHOD("is_constant",(function(){return this instanceof ln?!(this instanceof dn):this instanceof At&&this.expression instanceof ln&&t.has(this.operator)})),e(_e,(function(){throw new Error(d("Cannot evaluate a statement [{file}:{line},{col}]",this.start))})),e(Ie,c),e(It,c),e(pe,c),e(ln,(function(){return this.getValue()})),e(_n,c),e(dn,(function(e){let t=e.evaluated_regexps.get(this);if(void 0===t){try{t=(0,eval)(this.print_to_string())}catch(e){t=null}e.evaluated_regexps.set(this,t)}return t||this})),e(Ge,(function(){return 1!==this.segments.length?this:this.segments[0].value})),e(Pe,(function(e){if(e.option("unsafe")){var t=function(){};return t.node=this,t.toString=function(){return this.node.print_to_string()},t}return this})),e(Ft,(function(e,t){if(e.option("unsafe")){for(var n=[],i=0,r=this.elements.length;i<r;i++){var o=this.elements[i],a=o._eval(e,t);if(o===a)return this;n.push(a)}return n}return this})),e(Mt,(function(e,t){if(e.option("unsafe")){for(var n={},i=0,r=this.properties.length;i<r;i++){var o=this.properties[i];if(o instanceof ke)return this;var a=o.key;if(a instanceof Bt)a=a.name;else if(a instanceof pe&&(a=a._eval(e,t))===o.key)return this;if("function"==typeof Object.prototype[a])return this;if(!(o.value instanceof Pe)&&(n[a]=o.value._eval(e,t),n[a]===o.value))return this}return n}return this}));var n=E("! typeof void");e(At,(function(e,t){var i=this.expression;if(e.option("typeofs")&&"typeof"==this.operator&&(i instanceof Ie||i instanceof rn&&i.fixed_value()instanceof Ie))return"function";if(n.has(this.operator)||t++,(i=i._eval(e,t))===this.expression)return this;switch(this.operator){case"!":return!i;case"typeof":return i instanceof RegExp?this:typeof i;case"void":return;case"~":return~i;case"-":return-i;case"+":return+i}return this}));var i=E("&& || ?? === !==");e(yt,(function(e,t){i.has(this.operator)||t++;var n=this.left._eval(e,t);if(n===this.left)return this;var r,o=this.right._eval(e,t);if(o===this.right)return this;switch(this.operator){case"&&":r=n&&o;break;case"||":r=n||o;break;case"??":r=null!=n?n:o;break;case"|":r=n|o;break;case"&":r=n&o;break;case"^":r=n^o;break;case"+":r=n+o;break;case"*":r=n*o;break;case"**":r=Math.pow(n,o);break;case"/":r=n/o;break;case"%":r=n%o;break;case"-":r=n-o;break;case"<<":r=n<<o;break;case">>":r=n>>o;break;case">>>":r=n>>>o;break;case"==":r=n==o;break;case"===":r=n===o;break;case"!=":r=n!=o;break;case"!==":r=n!==o;break;case"<":r=n<o;break;case"<=":r=n<=o;break;case">":r=n>o;break;case">=":r=n>=o;break;default:return this}return isNaN(r)&&e.find_parent(we)?this:r})),e(bt,(function(e,t){var n=this.condition._eval(e,t);if(n===this.condition)return this;var i=n?this.consequent:this.alternative,r=i._eval(e,t);return r===i?this:r})),e(rn,(function(e,t){var n,i=this.fixed_value();if(!i)return this;if(D(i,"_eval"))n=i._eval();else{if(this._eval=c,n=i._eval(e,t),delete this._eval,n===i)return this;i._eval=function(){return n}}if(n&&"object"==typeof n){var r=this.definition().escaped;if(r&&t>r)return this}return n}));var r={Array:Array,Math:Math,Number:Number,Object:Object,String:String},o=Bi({Math:["E","LN10","LN2","LOG2E","LOG10E","PI","SQRT1_2","SQRT2"],Number:["MAX_VALUE","MIN_VALUE","NaN","NEGATIVE_INFINITY","POSITIVE_INFINITY"]});e(gt,(function(e,t){if(e.option("unsafe")){var n=this.property;if(n instanceof pe&&(n=n._eval(e,t))===this.property)return this;var i,a=this.expression;if(yi(a)){var s,u="hasOwnProperty"===a.name&&"call"===n&&(s=e.parent()&&e.parent().args)&&s&&s[0]&&s[0].evaluate(e);if(null==(u=u instanceof Dt?u.expression:u)||u.thedef&&u.thedef.undeclared)return this.clone();var c=o.get(a.name);if(!c||!c.has(n))return this;i=r[a.name]}else{if(!(i=a._eval(e,t+1))||i===a||!D(i,n))return this;if("function"==typeof i)switch(n){case"name":return i.node.name?i.node.name.name:"";case"length":return i.node.argnames.length;default:return this}}return i[n]}return this})),e(mt,(function(e,t){var n=this.expression;if(e.option("unsafe")&&n instanceof gt){var i,o=n.property;if(o instanceof pe&&(o=o._eval(e,t))===n.property)return this;var a=n.expression;if(yi(a)){var s="hasOwnProperty"===a.name&&"call"===o&&this.args[0]&&this.args[0].evaluate(e);if(null==(s=s instanceof Dt?s.expression:s)||s.thedef&&s.thedef.undeclared)return this.clone();var u=Gi.get(a.name);if(!u||!u.has(o))return this;i=r[a.name]}else{if((i=a._eval(e,t+1))===a||!i)return this;var c=Ui.get(i.constructor.name);if(!c||!c.has(o))return this}for(var l=[],f=0,p=this.args.length;f<p;f++){var _=this.args[f],d=_._eval(e,t);if(_===d)return this;l.push(d)}try{return i[o].apply(i,l)}catch(t){e.warn("Error evaluating {code} [{file}:{line},{col}]",{code:this.print_to_string(),file:this.start.file,line:this.start.line,col:this.start.col})}}return this})),e(ht,c)}((function(e,t){e.DEFMETHOD("_eval",t)})),function(e){function t(e){return p(At,e,{operator:"!",expression:e})}function n(e,n,i){var r=t(e);if(i){var o=p(he,n,{body:n});return Li(r,o)===o?n:r}return Li(r,n)}e(pe,(function(){return t(this)})),e(_e,(function(){throw new Error("Cannot negate a statement")})),e(Pe,(function(){return t(this)})),e(Ve,(function(){return t(this)})),e(At,(function(){return"!"==this.operator?this.expression:t(this)})),e(Et,(function(e){var t=this.expressions.slice();return t.push(t.pop().negate(e)),mi(this,t)})),e(bt,(function(e,t){var i=this.clone();return i.consequent=i.consequent.negate(e),i.alternative=i.alternative.negate(e),n(this,i,t)})),e(yt,(function(e,i){var r=this.clone(),o=this.operator;if(e.option("unsafe_comps"))switch(o){case"<=":return r.operator=">",r;case"<":return r.operator=">=",r;case">=":return r.operator="<",r;case">":return r.operator="<=",r}switch(o){case"==":return r.operator="!=",r;case"!=":return r.operator="==",r;case"===":return r.operator="!==",r;case"!==":return r.operator="===",r;case"&&":return r.operator="||",r.left=r.left.negate(e,i),r.right=r.right.negate(e),n(this,r,i);case"||":return r.operator="&&",r.left=r.left.negate(e,i),r.right=r.right.negate(e),n(this,r,i);case"??":return r.right=r.right.negate(e),n(this,r,i)}return t(this)}))}((function(e,t){e.DEFMETHOD("negate",(function(e,n){return t.call(this,e,n)}))}));var Hi=E("Boolean decodeURI decodeURIComponent Date encodeURI encodeURIComponent Error escape EvalError isFinite isNaN Number Object parseFloat parseInt RangeError ReferenceError String SyntaxError TypeError unescape URIError");mt.DEFMETHOD("is_expr_pure",(function(e){if(e.option("unsafe")){var t=this.expression,n=this.args&&this.args[0]&&this.args[0].evaluate(e);if(t.expression&&"hasOwnProperty"===t.expression.name&&(null==n||n.thedef&&n.thedef.undeclared))return!1;if(yi(t)&&Hi.has(t.name))return!0;let i;if(t instanceof Dt&&yi(t.expression)&&(i=Gi.get(t.expression.name))&&i.has(t.property))return!0}return!!T(this,Mn)||!e.pure_funcs(this)})),pe.DEFMETHOD("is_call_pure",s),Dt.DEFMETHOD("is_call_pure",(function(e){if(!e.option("unsafe"))return;const t=this.expression;let n;return t instanceof Ft?n=Ui.get("Array"):t.is_boolean()?n=Ui.get("Boolean"):t.is_number(e)?n=Ui.get("Number"):t instanceof dn?n=Ui.get("RegExp"):t.is_string(e)?n=Ui.get("String"):this.may_throw_on_access(e)||(n=Ui.get("Object")),n&&n.has(this.property)}));const Xi=new Set(["Number","String","Array","Object","Function","Promise"]);function zi(e){return e&&e.aborts()}!function(e){function t(e,t){for(var n=e.length;--n>=0;)if(e[n].has_side_effects(t))return!0;return!1}e(pe,u),e(ve,s),e(ln,s),e(un,s),e(De,(function(e){return t(this.body,e)})),e(mt,(function(e){return!(this.is_expr_pure(e)||this.expression.is_call_pure(e)&&!this.expression.has_side_effects(e))||t(this.args,e)})),e(et,(function(e){return this.expression.has_side_effects(e)||t(this.body,e)})),e(it,(function(e){return this.expression.has_side_effects(e)||t(this.body,e)})),e(rt,(function(e){return t(this.body,e)||this.bcatch&&this.bcatch.has_side_effects(e)||this.bfinally&&this.bfinally.has_side_effects(e)})),e(Qe,(function(e){return this.condition.has_side_effects(e)||this.body&&this.body.has_side_effects(e)||this.alternative&&this.alternative.has_side_effects(e)})),e(Te,(function(e){return this.body.has_side_effects(e)})),e(he,(function(e){return this.body.has_side_effects(e)})),e(Ie,s),e(It,(function(e){return!(!this.extends||!this.extends.has_side_effects(e))||t(this.properties,e)})),e(yt,(function(e){return this.left.has_side_effects(e)||this.right.has_side_effects(e)})),e(Ct,u),e(bt,(function(e){return this.condition.has_side_effects(e)||this.consequent.has_side_effects(e)||this.alternative.has_side_effects(e)})),e(vt,(function(e){return ki.has(this.operator)||this.expression.has_side_effects(e)})),e(rn,(function(e){return!this.is_declared(e)&&!Xi.has(this.name)})),e($t,s),e(Ut,s),e(Mt,(function(e){return t(this.properties,e)})),e(Rt,(function(e){return this.computed_key()&&this.key.has_side_effects(e)||this.value.has_side_effects(e)})),e(Lt,(function(e){return this.computed_key()&&this.key.has_side_effects(e)||this.static&&this.value&&this.value.has_side_effects(e)})),e(kt,(function(e){return this.computed_key()&&this.key.has_side_effects(e)})),e(Nt,(function(e){return this.computed_key()&&this.key.has_side_effects(e)})),e(xt,(function(e){return this.computed_key()&&this.key.has_side_effects(e)})),e(Ft,(function(e){return t(this.elements,e)})),e(Dt,(function(e){return this.expression.may_throw_on_access(e)||this.expression.has_side_effects(e)})),e(St,(function(e){return this.expression.may_throw_on_access(e)||this.expression.has_side_effects(e)||this.property.has_side_effects(e)})),e(Et,(function(e){return t(this.expressions,e)})),e(st,(function(e){return t(this.definitions,e)})),e(ft,(function(){return this.value})),e(He,s),e(Ge,(function(e){return t(this.segments,e)}))}((function(e,t){e.DEFMETHOD("has_side_effects",t)})),function(e){function t(e,t){for(var n=e.length;--n>=0;)if(e[n].may_throw(t))return!0;return!1}e(pe,u),e(ln,s),e(ve,s),e(Ie,s),e(Ut,s),e(un,s),e(It,(function(e){return!(!this.extends||!this.extends.may_throw(e))||t(this.properties,e)})),e(Ft,(function(e){return t(this.elements,e)})),e(Ct,(function(e){return!!this.right.may_throw(e)||!(!e.has_directive("use strict")&&"="==this.operator&&this.left instanceof rn)&&this.left.may_throw(e)})),e(yt,(function(e){return this.left.may_throw(e)||this.right.may_throw(e)})),e(De,(function(e){return t(this.body,e)})),e(mt,(function(e){return!!t(this.args,e)||!this.is_expr_pure(e)&&(!!this.expression.may_throw(e)||(!(this.expression instanceof Ie)||t(this.expression.body,e)))})),e(it,(function(e){return this.expression.may_throw(e)||t(this.body,e)})),e(bt,(function(e){return this.condition.may_throw(e)||this.consequent.may_throw(e)||this.alternative.may_throw(e)})),e(st,(function(e){return t(this.definitions,e)})),e(Dt,(function(e){return this.expression.may_throw_on_access(e)||this.expression.may_throw(e)})),e(Qe,(function(e){return this.condition.may_throw(e)||this.body&&this.body.may_throw(e)||this.alternative&&this.alternative.may_throw(e)})),e(Te,(function(e){return this.body.may_throw(e)})),e(Mt,(function(e){return t(this.properties,e)})),e(Rt,(function(e){return this.value.may_throw(e)})),e(Lt,(function(e){return this.computed_key()&&this.key.may_throw(e)||this.static&&this.value&&this.value.may_throw(e)})),e(kt,(function(e){return this.computed_key()&&this.key.may_throw(e)})),e(Nt,(function(e){return this.computed_key()&&this.key.may_throw(e)})),e(xt,(function(e){return this.computed_key()&&this.key.may_throw(e)})),e(We,(function(e){return this.value&&this.value.may_throw(e)})),e(Et,(function(e){return t(this.expressions,e)})),e(he,(function(e){return this.body.may_throw(e)})),e(St,(function(e){return this.expression.may_throw_on_access(e)||this.expression.may_throw(e)||this.property.may_throw(e)})),e(et,(function(e){return this.expression.may_throw(e)||t(this.body,e)})),e(rn,(function(e){return!this.is_declared(e)&&!Xi.has(this.name)})),e($t,s),e(rt,(function(e){return this.bcatch?this.bcatch.may_throw(e):t(this.body,e)||this.bfinally&&this.bfinally.may_throw(e)})),e(vt,(function(e){return!("typeof"==this.operator&&this.expression instanceof rn)&&this.expression.may_throw(e)})),e(ft,(function(e){return!!this.value&&this.value.may_throw(e)}))}((function(e,t){e.DEFMETHOD("may_throw",t)})),function(e){function t(e){let t=!0;return yn(this,n=>{if(n instanceof rn){if(ii(this,16))return t=!1,Cn;var r=n.definition();if(i(r,this.enclosed)&&!this.variables.has(r.name)){if(e){var o=e.find_variable(n);if(r.undeclared?!o:o===r)return t="f",!0}return t=!1,Cn}return!0}if(n instanceof un&&this instanceof Ve)return t=!1,Cn}),t}e(pe,s),e(ln,u),e(It,(function(e){if(this.extends&&!this.extends.is_constant_expression(e))return!1;for(const t of this.properties){if(t.computed_key()&&!t.key.is_constant_expression(e))return!1;if(t.static&&t.value&&!t.value.is_constant_expression(e))return!1}return t.call(this,e)})),e(Ie,t),e(vt,(function(){return this.expression.is_constant_expression()})),e(yt,(function(){return this.left.is_constant_expression()&&this.right.is_constant_expression()})),e(Ft,(function(){return this.elements.every(e=>e.is_constant_expression())})),e(Mt,(function(){return this.properties.every(e=>e.is_constant_expression())})),e(Rt,(function(){return!(this.key instanceof pe)&&this.value.is_constant_expression()}))}((function(e,t){e.DEFMETHOD("is_constant_expression",t)})),function(e){function t(){for(var e=0;e<this.body.length;e++)if(zi(this.body[e]))return this.body[e];return null}e(_e,l),e(Xe,c),e(_t,(function(){return null})),e(Se,t),e(tt,t),e(Qe,(function(){return this.alternative&&zi(this.body)&&zi(this.alternative)&&this}))}((function(e,t){e.DEFMETHOD("aborts",t)}));var Wi=new Set(["use asm","use strict"]);function Yi(e,t){return Mi(e.body,t),t.option("side_effects")&&1==e.body.length&&e.body[0]===t.has_directive("use strict")&&(e.body.length=0),e}si(me,(function(e,t){return!t.option("directives")||Wi.has(e.value)&&t.has_directive(e.value)===e?e:p(ve,e)})),si(de,(function(e,t){return t.option("drop_debugger")?p(ve,e):e})),si(Te,(function(e,t){return e.body instanceof $e&&t.loopcontrol_target(e.body)===e.body?p(ve,e):0==e.label.references.length?e.body:e})),si(De,(function(e,t){return Mi(e.body,t),e})),si(Se,(function(e,t){switch(Mi(e.body,t),e.body.length){case 1:if(!t.has_directive("use strict")&&t.parent()instanceof Qe&&!((n=e.body[0])instanceof lt||n instanceof ct||n instanceof It)||vi(e.body[0]))return e.body[0];break;case 0:return p(ve,e)}var n;return e})),si(Ie,Yi);const qi=/keep_assign/;function $i(e,t){var n=!1,i=new On((function(t){return!!(n||t instanceof xe)||(t instanceof qe&&i.loopcontrol_target(t)===e?n=!0:void 0)}));return t instanceof Te&&i.push(t),i.push(e),e.body.walk(i),n}function ji(e,t){return t.top_retain&&e instanceof Be&&ii(e,1024)&&e.name&&t.top_retain(e.name)}xe.DEFMETHOD("drop_unused",(function(e){if(!e.option("unused"))return;if(e.has_directive("use asm"))return;var t=this;if(t.pinned())return;var n=!(t instanceof Ne)||e.toplevel.funcs,i=!(t instanceof Ne)||e.toplevel.vars;const r=qi.test(e.option("unused"))?s:function(e){return e instanceof Ct&&(ii(e,32)||"="==e.operator)?e.left:e instanceof vt&&ii(e,32)?e.expression:void 0};var o=new Map,a=new Map;t instanceof Ne&&e.top_retain&&t.variables.forEach((function(t){e.top_retain(t)&&!o.has(t.id)&&o.set(t.id,t)}));var u=new Map,c=new Map,l=this,_=new On((function(r,s){if(r instanceof Ie&&r.uses_arguments&&!_.has_directive("use strict")&&r.argnames.forEach((function(e){if(e instanceof Ut){var t=e.definition();o.has(t.id)||o.set(t.id,t)}})),r!==t){if(r instanceof Be||r instanceof Pt){var f=r.name.definition();if((_.parent()instanceof dt||!n&&l===t)&&f.global&&!o.has(f.id)&&o.set(f.id,f),r instanceof Pt){r.extends&&(r.extends.has_side_effects(e)||r.extends.may_throw(e))&&r.extends.walk(_);for(const t of r.properties)(t.has_side_effects(e)||t.may_throw(e))&&t.walk(_)}return g(c,f.id,r),!0}if(r instanceof Wt&&l===t&&g(u,r.definition().id,r),r instanceof st&&l===t){const t=_.parent()instanceof dt;return r.definitions.forEach((function(n){if(n.name instanceof Gt&&g(u,n.name.definition().id,n),!t&&i||yn(n.name,e=>{if(e instanceof Ut){const n=e.definition();!t&&!n.global||o.has(n.id)||o.set(n.id,n)}}),n.value){if(n.name instanceof Ke)n.walk(_);else{var r=n.name.definition();g(c,r.id,n.value),r.chained||n.name.fixed_value()!==n.value||a.set(r.id,n)}n.value.has_side_effects(e)&&n.value.walk(_)}})),!0}return h(r,s)}}));t.walk(_),_=new On(h),o.forEach((function(e){var t=c.get(e.id);t&&t.forEach((function(e){e.walk(_)}))}));var d=new Fn((function(s,c,_){var h=d.parent();if(i){const e=r(s);if(e instanceof rn){var E=e.definition(),g=o.has(E.id);if(s instanceof Ct){if(!g||a.has(E.id)&&a.get(E.id)!==s)return Ei(h,s,s.right.transform(d))}else if(!g)return _?f.skip:p(pn,s,{value:0})}}if(l===t){if(s.name&&(s instanceof Vt&&!S(e.option("keep_classnames"),(E=s.name.definition()).name)||s instanceof Pe&&!S(e.option("keep_fnames"),(E=s.name.definition()).name))&&(!o.has(E.id)||E.orig.length>1)&&(s.name=null),s instanceof Ie&&!(s instanceof Le))for(var D=!e.option("keep_fargs"),v=s.argnames,A=v.length;--A>=0;){var T=v[A];T instanceof ke&&(T=T.expression),T instanceof Ot&&(T=T.left),T instanceof Ke||o.has(T.definition().id)?D=!1:(ri(T,1),D&&(v.pop(),e[T.unreferenced()?"warn":"info"]("Dropping unused function argument {name} [{file}:{line},{col}]",R(T))))}if((s instanceof Be||s instanceof Pt)&&s!==t){const t=s.name.definition();if(!(t.global&&!n||o.has(t.id))){if(e[s.name.unreferenced()?"warn":"info"]("Dropping unused function {name} [{file}:{line},{col}]",R(s.name)),t.eliminated++,s instanceof Pt){const t=s.drop_side_effect_free(e);if(t)return p(he,s,{body:t})}return _?f.skip:p(ve,s)}}if(s instanceof st&&!(h instanceof Me&&h.init===s)){var y=!(h instanceof Ne||s instanceof ut),b=[],C=[],O=[],F=[];switch(s.definitions.forEach((function(t){t.value&&(t.value=t.value.transform(d));var n=t.name instanceof Ke,r=n?new zn(null,{name:"<destructure>"}):t.name.definition();if(y&&r.global)return O.push(t);if(!i&&!y||n&&(t.name.names.length||t.name.is_array||1!=e.option("pure_getters"))||o.has(r.id)){if(t.value&&a.has(r.id)&&a.get(r.id)!==t&&(t.value=t.value.drop_side_effect_free(e)),t.name instanceof Gt){var c=u.get(r.id);if(c.length>1&&(!t.value||r.orig.indexOf(t.name)>r.eliminated)){if(e.warn("Dropping duplicated definition of variable {name} [{file}:{line},{col}]",R(t.name)),t.value){var l=p(rn,t.name,t.name);r.references.push(l);var f=p(Ct,t,{operator:"=",left:l,right:t.value});a.get(r.id)===t&&a.set(r.id,f),F.push(f.transform(d))}return m(c,t),void r.eliminated++}}t.value?(F.length>0&&(O.length>0?(F.push(t.value),t.value=mi(t.value,F)):b.push(p(he,s,{body:mi(s,F)})),F=[]),O.push(t)):C.push(t)}else if(r.orig[0]instanceof Qt){(_=t.value&&t.value.drop_side_effect_free(e))&&F.push(_),t.value=null,C.push(t)}else{var _;(_=t.value&&t.value.drop_side_effect_free(e))?(n||e.warn("Side effects in initialization of unused variable {name} [{file}:{line},{col}]",R(t.name)),F.push(_)):n||e[t.name.unreferenced()?"warn":"info"]("Dropping unused variable {name} [{file}:{line},{col}]",R(t.name)),r.eliminated++}})),(C.length>0||O.length>0)&&(s.definitions=C.concat(O),b.push(s)),F.length>0&&b.push(p(he,s,{body:mi(s,F)})),b.length){case 0:return _?f.skip:p(ve,s);case 1:return b[0];default:return _?f.splice(b):p(Se,s,{body:b})}}if(s instanceof Fe)return c(s,this),s.init instanceof Se&&(M=s.init,s.init=M.body.pop(),M.body.push(s)),s.init instanceof he?s.init=s.init.body:Si(s.init)&&(s.init=null),M?_?f.splice(M.body):M:s;if(s instanceof Te&&s.body instanceof Fe){if(c(s,this),s.body instanceof Se){var M=s.body;return s.body=M.body.pop(),M.body.push(s),_?f.splice(M.body):M}return s}if(s instanceof Se)return c(s,this),_&&s.body.every(vi)?f.splice(s.body):s;if(s instanceof xe){const e=l;return l=s,c(s,this),l=e,s}}function R(e){return{name:e.name,file:e.start.file,line:e.start.line,col:e.start.col}}}));function h(e,n){var i;const s=r(e);if(s instanceof rn&&!pi(e.left,Ht)&&t.variables.get(s.name)===(i=s.definition()))return e instanceof Ct&&(e.right.walk(_),i.chained||e.left.fixed_value()!==e.right||a.set(i.id,e)),!0;if(e instanceof rn){if(i=e.definition(),!o.has(i.id)&&(o.set(i.id,i),i.orig[0]instanceof Qt)){const e=i.scope.is_block_scope()&&i.scope.get_defun_scope().variables.get(i.name);e&&o.set(e.id,e)}return!0}if(e instanceof xe){var u=l;return l=e,n(),l=u,!0}}t.transform(d)})),xe.DEFMETHOD("hoist_declarations",(function(e){var t=this;if(e.has_directive("use asm"))return t;if(!Array.isArray(t.body))return t;var n=e.option("hoist_funs"),i=e.option("hoist_vars");if(n||i){var r=[],o=[],a=new Map,s=0,u=0;yn(t,e=>e instanceof xe&&e!==t||(e instanceof ut?(++u,!0):void 0)),i=i&&u>1;var c=new Fn((function(u){if(u!==t){if(u instanceof me)return r.push(u),p(ve,u);if(n&&u instanceof Be&&!(c.parent()instanceof dt)&&c.parent()===t)return o.push(u),p(ve,u);if(i&&u instanceof ut){u.definitions.forEach((function(e){e.name instanceof Ke||(a.set(e.name.name,e),++s)}));var l=u.to_assignments(e),f=c.parent();if(f instanceof Me&&f.init===u){if(null==l){var _=u.definitions[0].name;return p(rn,_,_)}return l}return f instanceof Fe&&f.init===u?l:l?p(he,u,{body:l}):p(ve,u)}if(u instanceof xe)return u}}));if(t=t.transform(c),s>0){var l=[];const e=t instanceof Ie,n=e?t.args_as_names():null;if(a.forEach((t,i)=>{e&&n.some(e=>e.name===t.name.name)?a.delete(i):((t=t.clone()).value=null,l.push(t),a.set(i,t))}),l.length>0){for(var f=0;f<t.body.length;){if(t.body[f]instanceof he){var _,d,h=t.body[f].body;if(h instanceof Ct&&"="==h.operator&&(_=h.left)instanceof Bt&&a.has(_.name)){if((E=a.get(_.name)).value)break;E.value=h.right,m(l,E),l.push(E),t.body.splice(f,1);continue}if(h instanceof Et&&(d=h.expressions[0])instanceof Ct&&"="==d.operator&&(_=d.left)instanceof Bt&&a.has(_.name)){var E;if((E=a.get(_.name)).value)break;E.value=d.right,m(l,E),l.push(E),t.body[f].body=mi(h,h.expressions.slice(1));continue}}if(t.body[f]instanceof ve)t.body.splice(f,1);else{if(!(t.body[f]instanceof Se))break;var g=[f,1].concat(t.body[f].body);t.body.splice.apply(t.body,g)}}l=p(ut,t,{definitions:l}),o.push(l)}}t.body=r.concat(o,t.body)}return t})),xe.DEFMETHOD("make_var_name",(function(e){for(var t=this.var_names(),n=e=e.replace(/(?:^[^a-z_$]|[^a-z0-9_$])/gi,"_"),i=0;t.has(n);i++)n=e+"$"+i;return this.add_var_name(n),n})),xe.DEFMETHOD("hoist_properties",(function(e){var t=this;if(!e.option("hoist_props")||e.has_directive("use asm"))return t;var n=t instanceof Ne&&e.top_retain||s,i=new Map,r=new Fn((function(o,a){if(o instanceof st&&r.parent()instanceof dt)return o;if(o instanceof ft){const r=o.name;let u,c;if(r.scope===t&&1!=(u=r.definition()).escaped&&!u.assignments&&!u.direct_access&&!u.single_use&&!e.exposed(u)&&!n(u)&&(c=r.fixed_value())===o.value&&c instanceof Mt&&c.properties.every(e=>"string"==typeof e.key)){a(o,this);const e=new Map,t=[];return c.properties.forEach((function(n){t.push(p(ft,o,{name:s(r,n.key,e),value:n.value}))})),i.set(u.id,e),f.splice(t)}}else if(o instanceof gt&&o.expression instanceof rn){const e=i.get(o.expression.definition().id);if(e){const t=e.get(String(wi(o.property))),n=p(rn,o,{name:t.name,scope:o.expression.scope,thedef:t});return n.reference({}),n}}function s(e,n,i){const r=p(e.CTOR,e,{name:t.make_var_name(e.name+"_"+n),scope:t}),o=t.def_variable(r);return i.set(String(n),o),t.enclosed.push(o),r}}));return t.transform(r)})),function(e){function t(e,t,n){var i=e.length;if(!i)return null;for(var r=[],o=!1,a=0;a<i;a++){var s=e[a].drop_side_effect_free(t,n);o|=s!==e[a],s&&(r.push(s),n=!1)}return o?r.length?r:null:e}e(pe,c),e(ln,l),e(un,l),e(mt,(function(e,n){if(!this.is_expr_pure(e)){if(this.expression.is_call_pure(e)){var i=this.args.slice();return i.unshift(this.expression.expression),(i=t(i,e,n))&&mi(this,i)}if(li(this.expression)&&(!this.expression.name||!this.expression.name.definition().references.length)){var r=this.clone();return r.expression.process_expression(!1,e),r}return this}T(this,Mn)&&e.warn("Dropping __PURE__ call [{file}:{line},{col}]",this.start);var o=t(this.args,e,n);return o&&mi(this,o)})),e(Le,l),e(Pe,l),e(Ve,l),e(It,(function(e){const t=[],n=this.extends&&this.extends.drop_side_effect_free(e);n&&t.push(n);for(const n of this.properties){const i=n.drop_side_effect_free(e);i&&t.push(i)}return t.length?mi(this,t):null})),e(yt,(function(e,t){var n=this.right.drop_side_effect_free(e);if(!n)return this.left.drop_side_effect_free(e,t);if(Ni.has(this.operator)){if(n===this.right)return this;var i=this.clone();return i.right=n,i}var r=this.left.drop_side_effect_free(e,t);return r?mi(this,[r,n]):this.right.drop_side_effect_free(e,t)})),e(Ct,(function(e){var t=this.left;if(t.has_side_effects(e)||e.has_directive("use strict")&&t instanceof gt&&t.expression.is_constant())return this;for(ri(this,32);t instanceof gt;)t=t.expression;return t.is_constant_expression(e.find_parent(xe))?this.right.drop_side_effect_free(e):this})),e(bt,(function(e){var t=this.consequent.drop_side_effect_free(e),n=this.alternative.drop_side_effect_free(e);if(t===this.consequent&&n===this.alternative)return this;if(!t)return n?p(yt,this,{operator:"||",left:this.condition,right:n}):this.condition.drop_side_effect_free(e);if(!n)return p(yt,this,{operator:"&&",left:this.condition,right:t});var i=this.clone();return i.consequent=t,i.alternative=n,i})),e(vt,(function(e,t){if(ki.has(this.operator))return this.expression.has_side_effects(e)?oi(this,32):ri(this,32),this;if("typeof"==this.operator&&this.expression instanceof rn)return null;var n=this.expression.drop_side_effect_free(e,t);return t&&n&&Ti(n)?n===this.expression&&"!"==this.operator?this:n.negate(e,t):n})),e(rn,(function(e){return this.is_declared(e)||Xi.has(this.name)?null:this})),e(Mt,(function(e,n){var i=t(this.properties,e,n);return i&&mi(this,i)})),e(Rt,(function(e,t){const n=this instanceof wt&&this.key instanceof pe&&this.key.drop_side_effect_free(e,t),i=this.value.drop_side_effect_free(e,t);return n&&i?mi(this,[n,i]):n||i})),e(Lt,(function(e){const t=this.computed_key()&&this.key.drop_side_effect_free(e),n=this.static&&this.value&&this.value.drop_side_effect_free(e);return t&&n?mi(this,[t,n]):t||n||null})),e(kt,(function(){return this.computed_key()?this.key:null})),e(Nt,(function(){return this.computed_key()?this.key:null})),e(xt,(function(){return this.computed_key()?this.key:null})),e(Ft,(function(e,n){var i=t(this.elements,e,n);return i&&mi(this,i)})),e(Dt,(function(e,t){return this.expression.may_throw_on_access(e)?this:this.expression.drop_side_effect_free(e,t)})),e(St,(function(e,t){if(this.expression.may_throw_on_access(e))return this;var n=this.expression.drop_side_effect_free(e,t);if(!n)return this.property.drop_side_effect_free(e,t);var i=this.property.drop_side_effect_free(e);return i?mi(this,[n,i]):n})),e(Et,(function(e){var t=this.tail_node(),n=t.drop_side_effect_free(e);if(n===t)return this;var i=this.expressions.slice(0,-1);return n&&i.push(n),i.length?mi(this,i):p(pn,this,{value:0})})),e(ke,(function(e,t){return this.expression.drop_side_effect_free(e,t)})),e(He,l),e(Ge,(function(e){var n=t(this.segments,e,In);return n&&mi(this,n)}))}((function(e,t){e.DEFMETHOD("drop_side_effect_free",t)})),si(he,(function(e,t){if(t.option("side_effects")){var n=e.body,i=n.drop_side_effect_free(t,!0);if(!i)return t.warn("Dropping side-effect-free statement [{file}:{line},{col}]",e.start),p(ve,e);if(i!==n)return p(he,e,{body:i})}return e})),si(Oe,(function(e,t){return t.option("loops")?p(Fe,e,e).optimize(t):e})),si(Ce,(function(e,t){if(!t.option("loops"))return e;var n=e.condition.tail_node().evaluate(t);if(!(n instanceof pe)){if(n)return p(Fe,e,{body:p(Se,e.body,{body:[e.body,p(he,e.condition,{body:e.condition})]})}).optimize(t);if(!$i(e,t.parent()))return p(Se,e.body,{body:[e.body,p(he,e.condition,{body:e.condition})]}).optimize(t)}return e})),si(Fe,(function(e,t){if(!t.option("loops"))return e;if(t.option("side_effects")&&e.init&&(e.init=e.init.drop_side_effect_free(t)),e.condition){var n=e.condition.evaluate(t);if(!(n instanceof pe))if(n)e.condition=null;else if(!t.option("dead_code")){var i=e.condition;e.condition=hi(n,e.condition),e.condition=Li(e.condition.transform(t),i)}if(t.option("dead_code")&&(n instanceof pe&&(n=e.condition.tail_node().evaluate(t)),!n)){var r=[];return Ri(t,e.body,r),e.init instanceof _e?r.push(e.init):e.init&&r.push(p(he,e.init,{body:e.init})),r.push(p(he,e.condition,{body:e.condition})),p(Se,e,{body:r}).optimize(t)}}return function e(t,n){var i=t.body instanceof Se?t.body.body[0]:t.body;if(n.option("dead_code")&&o(i)){var r=[];return t.init instanceof _e?r.push(t.init):t.init&&r.push(p(he,t.init,{body:t.init})),t.condition&&r.push(p(he,t.condition,{body:t.condition})),Ri(n,t.body,r),p(Se,t,{body:r})}return i instanceof Qe&&(o(i.body)?(t.condition?t.condition=p(yt,t.condition,{left:t.condition,operator:"&&",right:i.condition.negate(n)}):t.condition=i.condition.negate(n),a(i.alternative)):o(i.alternative)&&(t.condition?t.condition=p(yt,t.condition,{left:t.condition,operator:"&&",right:i.condition}):t.condition=i.condition,a(i.body))),t;function o(e){return e instanceof $e&&n.loopcontrol_target(e)===n.self()}function a(i){i=Di(i),t.body instanceof Se?(t.body=t.body.clone(),t.body.body=i.concat(t.body.body.slice(1)),t.body=t.body.transform(n)):t.body=p(Se,t.body,{body:i}).transform(n),t=e(t,n)}}(e,t)})),si(Qe,(function(e,t){if(Si(e.alternative)&&(e.alternative=null),!t.option("conditionals"))return e;var n=e.condition.evaluate(t);if(!(t.option("dead_code")||n instanceof pe)){var i=e.condition;e.condition=hi(n,i),e.condition=Li(e.condition.transform(t),i)}if(t.option("dead_code")){if(n instanceof pe&&(n=e.condition.tail_node().evaluate(t)),!n){t.warn("Condition always false [{file}:{line},{col}]",e.condition.start);var r=[];return Ri(t,e.body,r),r.push(p(he,e.condition,{body:e.condition})),e.alternative&&r.push(e.alternative),p(Se,e,{body:r}).optimize(t)}if(!(n instanceof pe))return t.warn("Condition always true [{file}:{line},{col}]",e.condition.start),(r=[]).push(p(he,e.condition,{body:e.condition})),r.push(e.body),e.alternative&&Ri(t,e.alternative,r),p(Se,e,{body:r}).optimize(t)}var o=e.condition.negate(t),a=e.condition.size(),s=o.size(),u=s<a;if(e.alternative&&u){u=!1,e.condition=o;var c=e.body;e.body=e.alternative||p(ve,e),e.alternative=c}if(Si(e.body)&&Si(e.alternative))return p(he,e.condition,{body:e.condition.clone()}).optimize(t);if(e.body instanceof he&&e.alternative instanceof he)return p(he,e,{body:p(bt,e,{condition:e.condition,consequent:e.body.body,alternative:e.alternative.body})}).optimize(t);if(Si(e.alternative)&&e.body instanceof he)return a===s&&!u&&e.condition instanceof yt&&"||"==e.condition.operator&&(u=!0),u?p(he,e,{body:p(yt,e,{operator:"||",left:o,right:e.body.body})}).optimize(t):p(he,e,{body:p(yt,e,{operator:"&&",left:e.condition,right:e.body.body})}).optimize(t);if(e.body instanceof ve&&e.alternative instanceof he)return p(he,e,{body:p(yt,e,{operator:"||",left:e.condition,right:e.alternative.body})}).optimize(t);if(e.body instanceof ze&&e.alternative instanceof ze&&e.body.TYPE==e.alternative.TYPE)return p(e.body.CTOR,e,{value:p(bt,e,{condition:e.condition,consequent:e.body.value||p(gn,e.body),alternative:e.alternative.value||p(gn,e.alternative)}).transform(t)}).optimize(t);if(e.body instanceof Qe&&!e.body.alternative&&!e.alternative&&(e=p(Qe,e,{condition:p(yt,e.condition,{operator:"&&",left:e.condition,right:e.body.condition}),body:e.body.body,alternative:null})),zi(e.body)&&e.alternative){var l=e.alternative;return e.alternative=null,p(Se,e,{body:[e,l]}).optimize(t)}if(zi(e.alternative)){r=e.body;return e.body=e.alternative,e.condition=u?o:e.condition.negate(t),e.alternative=null,p(Se,e,{body:[e,r]}).optimize(t)}return e})),si(et,(function(e,t){if(!t.option("switches"))return e;var n,i=e.expression.evaluate(t);if(!(i instanceof pe)){var r=e.expression;e.expression=hi(i,r),e.expression=Li(e.expression.transform(t),r)}if(!t.option("dead_code"))return e;i instanceof pe&&(i=e.expression.tail_node().evaluate(t));for(var o,a,s=[],u=[],c=0,l=e.body.length;c<l&&!a;c++){if((n=e.body[c])instanceof nt)o?D(n,u[u.length-1]):o=n;else if(!(i instanceof pe)){if(!((E=n.expression.evaluate(t))instanceof pe)&&E!==i){D(n,u[u.length-1]);continue}if(E instanceof pe&&(E=n.expression.tail_node().evaluate(t)),E===i&&(a=n,o)){var f=u.indexOf(o);u.splice(f,1),D(o,u[f-1]),o=null}}if(zi(n)){var _=u[u.length-1];zi(_)&&_.body.length==n.body.length&&p(Se,_,_).equivalent_to(p(Se,n,n))&&(_.body=[])}u.push(n)}for(;c<l;)D(e.body[c++],u[u.length-1]);for(u.length>0&&(u[0].body=s.concat(u[0].body)),e.body=u;n=u[u.length-1];){var d=n.body[n.body.length-1];if(d instanceof $e&&t.loopcontrol_target(d)===e&&n.body.pop(),n.body.length||n instanceof it&&(o||n.expression.has_side_effects(t)))break;u.pop()===o&&(o=null)}if(0==u.length)return p(Se,e,{body:s.concat(p(he,e.expression,{body:e.expression}))}).optimize(t);if(1==u.length&&(u[0]===a||u[0]===o)){var m=!1,h=new On((function(t){if(m||t instanceof Ie||t instanceof he)return!0;t instanceof $e&&h.loopcontrol_target(t)===e&&(m=!0)}));if(e.walk(h),!m){var E,g=u[0].body.slice();return(E=u[0].expression)&&g.unshift(p(he,E,{body:E})),g.unshift(p(he,e.expression,{body:e.expression})),p(Se,e,{body:g}).optimize(t)}}return e;function D(e,n){n&&!zi(n)?n.body=n.body.concat(e.body):Ri(t,e,s)}})),si(rt,(function(e,t){if(Mi(e.body,t),e.bcatch&&e.bfinally&&e.bfinally.body.every(Si)&&(e.bfinally=null),t.option("dead_code")&&e.body.every(Si)){var n=[];return e.bcatch&&Ri(t,e.bcatch,n),e.bfinally&&n.push(...e.bfinally.body),p(Se,e,{body:n}).optimize(t)}return e})),st.DEFMETHOD("remove_initializers",(function(){var e=[];this.definitions.forEach((function(t){t.name instanceof Ut?(t.value=null,e.push(t)):yn(t.name,n=>{n instanceof Ut&&e.push(p(ft,t,{name:n,value:null}))})})),this.definitions=e})),st.DEFMETHOD("to_assignments",(function(e){var t=e.option("reduce_vars"),n=this.definitions.reduce((function(e,n){if(!n.value||n.name instanceof Ke){if(n.value){var i=p(ft,n,{name:n.name,value:n.value}),r=p(ut,n,{definitions:[i]});e.push(r)}}else{var o=p(rn,n.name,n.name);e.push(p(Ct,n,{operator:"=",left:o,right:n.value})),t&&(o.definition().fixed=!1)}return(n=n.name.definition()).eliminated++,n.replaced--,e}),[]);return 0==n.length?null:mi(this,n)})),si(st,(function(e){return 0==e.definitions.length?p(ve,e):e})),si(_t,(function(e){return e})),si(mt,(function(e,t){var n=e.expression,i=n;sr(e,t,e.args);var r=e.args.every(e=>!(e instanceof ke));if(t.option("reduce_vars")&&i instanceof rn&&!T(e,wn)){const e=i.fixed_value();ji(e,t)||(i=e)}var o=i instanceof Ie;if(t.option("unused")&&r&&o&&!i.uses_arguments&&!i.pinned()){for(var a=0,s=0,u=0,c=e.args.length;u<c;u++){if(i.argnames[u]instanceof ke){if(ii(i.argnames[u].expression,1))for(;u<c;){(D=e.args[u++].drop_side_effect_free(t))&&(e.args[a++]=D)}else for(;u<c;)e.args[a++]=e.args[u++];s=a;break}var l=u>=i.argnames.length;if(l||ii(i.argnames[u],1)){if(D=e.args[u].drop_side_effect_free(t))e.args[a++]=D;else if(!l){e.args[a++]=p(pn,e.args[u],{value:0});continue}}else e.args[a++]=e.args[u];s=a}e.args.length=s}if(t.option("unsafe"))if(yi(n))switch(n.name){case"Array":if(1!=e.args.length)return p(Ft,e,{elements:e.args}).optimize(t);if(e.args[0]instanceof pn&&e.args[0].value<=11){const t=[];for(let n=0;n<e.args[0].value;n++)t.push(new Dn);return new Ft({elements:t})}break;case"Object":if(0==e.args.length)return p(Mt,e,{properties:[]});break;case"String":if(0==e.args.length)return p(fn,e,{value:""});if(e.args.length<=1)return p(yt,e,{left:e.args[0],operator:"+",right:p(fn,e,{value:""})}).optimize(t);break;case"Number":if(0==e.args.length)return p(pn,e,{value:0});if(1==e.args.length&&t.option("unsafe_math"))return p(At,e,{expression:e.args[0],operator:"+"}).optimize(t);break;case"Symbol":1==e.args.length&&e.args[0]instanceof fn&&t.option("unsafe_symbols")&&(e.args.length=0);break;case"Boolean":if(0==e.args.length)return p(An,e);if(1==e.args.length)return p(At,e,{expression:p(At,e,{expression:e.args[0],operator:"!"}),operator:"!"}).optimize(t);break;case"RegExp":var f=[];if(e.args.length>=1&&e.args.length<=2&&e.args.every(e=>{var n=e.evaluate(t);return f.push(n),e!==n})){let[n,i]=f;n=A(new RegExp(n).source);const r=p(dn,e,{value:{source:n,flags:i}});if(r._eval(t)!==r)return r;t.warn("Error converting {expr} [{file}:{line},{col}]",{expr:e.print_to_string(),file:e.start.file,line:e.start.line,col:e.start.col})}}else if(n instanceof Dt)switch(n.property){case"toString":if(0==e.args.length&&!n.expression.may_throw_on_access(t))return p(yt,e,{left:p(fn,e,{value:""}),operator:"+",right:n.expression}).optimize(t);break;case"join":if(n.expression instanceof Ft)e:{var _;if(!(e.args.length>0&&(_=e.args[0].evaluate(t))===e.args[0])){var d,m=[],h=[];for(u=0,c=n.expression.elements.length;u<c;u++){var E=n.expression.elements[u];if(E instanceof ke)break e;var g=E.evaluate(t);g!==E?h.push(g):(h.length>0&&(m.push(p(fn,e,{value:h.join(_)})),h.length=0),m.push(E))}return h.length>0&&m.push(p(fn,e,{value:h.join(_)})),0==m.length?p(fn,e,{value:""}):1==m.length?m[0].is_string(t)?m[0]:p(yt,m[0],{operator:"+",left:p(fn,e,{value:""}),right:m[0]}):""==_?(d=m[0].is_string(t)||m[1].is_string(t)?m.shift():p(fn,e,{value:""}),m.reduce((function(e,t){return p(yt,t,{operator:"+",left:e,right:t})}),d).optimize(t)):((D=e.clone()).expression=D.expression.clone(),D.expression.expression=D.expression.expression.clone(),D.expression.expression.elements=m,Vi(t,e,D));var D}}break;case"charAt":if(n.expression.is_string(t)){var S=e.args[0],v=S?S.evaluate(t):0;if(v!==S)return p(St,n,{expression:n.expression,property:hi(0|v,S||n)}).optimize(t)}break;case"apply":if(2==e.args.length&&e.args[1]instanceof Ft)return(L=e.args[1].elements.slice()).unshift(e.args[0]),p(mt,e,{expression:p(Dt,n,{expression:n.expression,property:"call"}),args:L}).optimize(t);break;case"call":var y=n.expression;if(y instanceof rn&&(y=y.fixed_value()),y instanceof Ie&&!y.contains_this())return(e.args.length?mi(this,[e.args[0],p(mt,e,{expression:n.expression,args:e.args.slice(1)})]):p(mt,e,{expression:n.expression,args:[]})).optimize(t)}if(t.option("unsafe_Function")&&yi(n)&&"Function"==n.name){if(0==e.args.length)return p(Pe,e,{argnames:[],body:[]}).optimize(t);if(e.args.every(e=>e instanceof fn))try{var b=ce(M="n(function("+e.args.slice(0,-1).map((function(e){return e.value})).join(",")+"){"+e.args[e.args.length-1].value+"})"),C={ie8:t.option("ie8")};b.figure_out_scope(C);var O,F=new ai(t.options);(b=b.transform(F)).figure_out_scope(C),qn.reset(),b.compute_char_frequency(C),b.mangle_names(C),yn(b,e=>{if(li(e))return O=e,Cn});var M=Bn();return Se.prototype._codegen.call(O,O,M),e.args=[p(fn,e,{value:O.argnames.map((function(e){return e.print_to_string()})).join(",")}),p(fn,e.args[e.args.length-1],{value:M.get().replace(/^{|}$/g,"")})],e}catch(n){if(!(n instanceof Q))throw n;t.warn("Error parsing code passed to new Function [{file}:{line},{col}]",e.args[e.args.length-1].start),t.warn(n.toString())}}var R=o&&i.body[0],w=o&&!i.is_generator&&!i.async,x=w&&t.option("inline")&&!e.is_expr_pure(t);if(x&&R instanceof We){let n=R.value;if(!n||n.is_constant_expression()){n=n?n.clone(!0):p(gn,e);const i=e.args.concat(n);return mi(e,i).optimize(t)}if(1===i.argnames.length&&i.argnames[0]instanceof Wt&&e.args.length<2&&n instanceof rn&&n.name===i.argnames[0].name){let n;return e.args[0]instanceof gt&&(n=t.parent())instanceof mt&&n.expression===e?mi(e,[p(pn,e,{value:0}),e.args[0].optimize(t)]):(e.args[0]||p(gn)).optimize(t)}}if(x){var N,k,I=-1;let o,a,s;if(r&&!i.uses_arguments&&!i.pinned()&&!(t.parent()instanceof It)&&!(i.name&&i instanceof Pe)&&(a=function(e){var n=i.body,r=n.length;if(t.option("inline")<3)return 1==r&&V(e);e=null;for(var o=0;o<r;o++){var a=n[o];if(a instanceof ut){if(e&&!a.definitions.every(e=>!e.value))return!1}else{if(e)return!1;a instanceof ve||(e=a)}}return V(e)}(R))&&(n===i||T(e,Rn)||t.option("unused")&&1==(o=n.definition()).references.length&&!Ji(t,o)&&i.is_constant_expression(n.scope))&&!T(e,Mn|wn)&&!i.contains_this()&&function(){var n=new Set;do{if((N=t.parent(++I)).is_block_scope()&&N.block_scope&&N.block_scope.variables.forEach((function(e){n.add(e.name)})),N instanceof ot)N.argname&&n.add(N.argname.name);else if(N instanceof ye)k=[];else if(N instanceof rn&&N.fixed_value()instanceof xe)return!1}while(!(N instanceof xe));var r=!(N instanceof Ne)||t.toplevel.vars,o=t.option("inline");return!!function(e,t){for(var n=i.body.length,r=0;r<n;r++){var o=i.body[r];if(o instanceof ut){if(!t)return!1;for(var a=o.definitions.length;--a>=0;){var s=o.definitions[a].name;if(s instanceof Ke||e.has(s.name)||Oi.has(s.name)||N.var_names().has(s.name))return!1;k&&k.push(s.definition())}}}return!0}(n,o>=3&&r)&&(!!function(e,t){for(var n=0,r=i.argnames.length;n<r;n++){var o=i.argnames[n];if(o instanceof Ot){if(ii(o.left,1))continue;return!1}if(o instanceof Ke)return!1;if(o instanceof ke){if(ii(o.expression,1))continue;return!1}if(!ii(o,1)){if(!t||e.has(o.name)||Oi.has(o.name)||N.var_names().has(o.name))return!1;k&&k.push(o.definition())}}return!0}(n,o>=2&&r)&&(!!function(){var t=new Set;const n=e=>{if(e instanceof xe){var n=new Set;return e.enclosed.forEach((function(e){n.add(e.name)})),e.variables.forEach((function(e){n.delete(e)})),n.forEach((function(e){t.add(e)})),!0}};for(let t=0;t<e.args.length;t++)yn(e.args[t],n);if(0==t.size)return!0;for(let e=0,n=i.argnames.length;e<n;e++){var r=i.argnames[e];if(!(r instanceof Ot&&ii(r.left,1))&&(!(r instanceof ke&&ii(r.expression,1))&&!ii(r,1)&&t.has(r.name)))return!1}for(let e=0,n=i.body.length;e<n;e++){var o=i.body[e];if(o instanceof ut)for(var a=o.definitions.length;--a>=0;){var s=o.definitions[a].name;if(s instanceof Ke||t.has(s.name))return!1}}return!0}()&&(!k||0==k.length||!tr(i,k))))}()&&(s=_i(t))&&!Qi(s,i)&&!function(){let e,n=0;for(;e=t.parent(n++);){if(e instanceof Ot)return!0;if(e instanceof De)break}return!1}()&&!(N instanceof It))return ri(i,256),s.add_child_scope(i),mi(e,function(n){var r=[],o=[];if(function(t,n){for(var r=i.argnames.length,o=e.args.length;--o>=r;)n.push(e.args[o]);for(o=r;--o>=0;){var a=i.argnames[o],s=e.args[o];if(ii(a,1)||!a.name||N.var_names().has(a.name))s&&n.push(s);else{var u=p(Gt,a,a);a.definition().orig.push(u),!s&&k&&(s=p(gn,e)),B(t,n,u,s)}}t.reverse(),n.reverse()}(r,o),function(e,t){for(var n=t.length,r=0,o=i.body.length;r<o;r++){var a=i.body[r];if(a instanceof ut)for(var s=0,u=a.definitions.length;s<u;s++){var c=a.definitions[s],l=c.name;if(B(e,t,l,c.value),k&&i.argnames.every(e=>e.name!=l.name)){var f=i.variables.get(l.name),_=p(rn,l,l);f.references.push(_),t.splice(n++,0,p(Ct,c,{operator:"=",left:_,right:p(gn,l)}))}}}}(r,o),o.push(n),r.length){const e=N.body.indexOf(t.parent(I-1))+1;N.body.splice(e,0,p(ut,i,{definitions:r}))}return o.map(e=>e.clone(!0))}(a)).optimize(t)}if(w&&t.option("side_effects")&&i.body.every(Si)){var L=e.args.concat(p(gn,e));return mi(e,L).optimize(t)}if(t.option("negate_iife")&&t.parent()instanceof he&&Ti(e))return e.negate(t,!0);var P=e.evaluate(t);return P!==e?(P=hi(P,e).optimize(t),Vi(t,P,e)):e;function V(t){return t?t instanceof We?t.value?t.value.clone(!0):p(gn,e):t instanceof he?p(At,t,{operator:"void",expression:t.body.clone(!0)}):void 0:p(gn,e)}function B(t,n,i,r){var o=i.definition();N.variables.set(i.name,o),N.enclosed.push(o),N.var_names().has(i.name)||(N.add_var_name(i.name),t.push(p(ft,i,{name:i,value:null})));var a=p(rn,i,i);o.references.push(a),r&&n.push(p(Ct,e,{operator:"=",left:a,right:r.clone()}))}})),si(ht,(function(e,t){return t.option("unsafe")&&yi(e.expression)&&["Object","RegExp","Function","Error","Array"].includes(e.expression.name)?p(mt,e,e).transform(t):e})),si(Et,(function(e,t){if(!t.option("side_effects"))return e;var n,i,r=[];n=In(t),i=e.expressions.length-1,e.expressions.forEach((function(e,o){o<i&&(e=e.drop_side_effect_free(t,n)),e&&(gi(r,e),n=!1)}));var o=r.length-1;return function(){for(;o>0&&xi(r[o],t);)o--;o<r.length-1&&(r[o]=p(At,e,{operator:"void",expression:r[o]}),r.length=o+1)}(),0==o?((e=Ei(t.parent(),t.self(),r[0]))instanceof Et||(e=e.optimize(t)),e):(e.expressions=r,e)})),vt.DEFMETHOD("lift_sequences",(function(e){if(e.option("sequences")&&this.expression instanceof Et){var t=this.expression.expressions.slice(),n=this.clone();return n.expression=t.pop(),t.push(n),mi(this,t).optimize(e)}return this})),si(Tt,(function(e,t){return e.lift_sequences(t)})),si(At,(function(e,t){var n=e.expression;if("delete"==e.operator&&!(n instanceof rn||n instanceof gt||Fi(n))){if(n instanceof Et){const i=n.expressions.slice();return i.push(p(Tn,e)),mi(e,i).optimize(t)}return mi(e,[n,p(Tn,e)]).optimize(t)}var i=e.lift_sequences(t);if(i!==e)return i;if(t.option("side_effects")&&"void"==e.operator)return(n=n.drop_side_effect_free(t))?(e.expression=n,e):p(gn,e).optimize(t);if(t.in_boolean_context())switch(e.operator){case"!":if(n instanceof At&&"!"==n.operator)return n.expression;n instanceof yt&&(e=Vi(t,e,n.negate(t,In(t))));break;case"typeof":return t.warn("Boolean expression always true [{file}:{line},{col}]",e.start),(n instanceof rn?p(Tn,e):mi(e,[n,p(Tn,e)])).optimize(t)}if("-"==e.operator&&n instanceof Sn&&(n=n.transform(t)),n instanceof yt&&("+"==e.operator||"-"==e.operator)&&("*"==n.operator||"/"==n.operator||"%"==n.operator))return p(yt,e,{operator:n.operator,left:p(At,n.left,{operator:e.operator,expression:n.left}),right:n.right});if("-"!=e.operator||!(n instanceof pn||n instanceof Sn||n instanceof _n)){var r=e.evaluate(t);if(r!==e)return Vi(t,r=hi(r,e).optimize(t),e)}return e})),yt.DEFMETHOD("lift_sequences",(function(e){if(e.option("sequences")){if(this.left instanceof Et){var t=this.left.expressions.slice();return(n=this.clone()).left=t.pop(),t.push(n),mi(this,t).optimize(e)}if(this.right instanceof Et&&!this.left.has_side_effects(e)){for(var n,i="="==this.operator&&this.left instanceof rn,r=(t=this.right.expressions).length-1,o=0;o<r&&(i||!t[o].has_side_effects(e));o++);if(o==r)return t=t.slice(),(n=this.clone()).right=t.pop(),t.push(n),mi(this,t).optimize(e);if(o>0)return(n=this.clone()).right=mi(this.right,t.slice(o)),(t=t.slice(0,o)).push(n),mi(this,t).optimize(e)}}return this}));var Zi=E("== === != !== * & | ^");function Ji(e,t){for(var n,i=0;n=e.parent(i);i++)if(n instanceof Ie||n instanceof It){var r=n.name;if(r&&r.definition()===t)break}return n}function Qi(e,t){for(const n of t.enclosed){if(t.variables.has(n.name))continue;const i=e.find_variable(n.name);if(i){if(i===n)continue;return!0}}return!1}function er(e,t){return e instanceof rn||e.TYPE===t.TYPE}function tr(e,t){const n=e=>{if(e instanceof rn&&i(e.definition(),t))return Cn};return bn(e,(t,i)=>{if(t instanceof xe&&t!==e){var r=i.parent();if(r instanceof mt&&r.expression===t)return;return!yn(t,n)||Cn}})}si(yt,(function(e,t){function n(){return e.left.is_constant()||e.right.is_constant()||!e.left.has_side_effects(t)&&!e.right.has_side_effects(t)}function i(t){if(n()){t&&(e.operator=t);var i=e.left;e.left=e.right,e.right=i}}if(Zi.has(e.operator)&&e.right.is_constant()&&!e.left.is_constant()&&(e.left instanceof yt&&se[e.left.operator]>=se[e.operator]||i()),e=e.lift_sequences(t),t.option("comparisons"))switch(e.operator){case"===":case"!==":var r=!0;(e.left.is_string(t)&&e.right.is_string(t)||e.left.is_number(t)&&e.right.is_number(t)||e.left.is_boolean()&&e.right.is_boolean()||e.left.equivalent_to(e.right))&&(e.operator=e.operator.substr(0,2));case"==":case"!=":if(!r&&xi(e.left,t))e.left=p(hn,e.left);else if(t.option("typeofs")&&e.left instanceof fn&&"undefined"==e.left.value&&e.right instanceof At&&"typeof"==e.right.operator){var o=e.right.expression;(o instanceof rn?!o.is_declared(t):o instanceof gt&&t.option("ie8"))||(e.right=o,e.left=p(gn,e.left).optimize(t),2==e.operator.length&&(e.operator+="="))}else if(e.left instanceof rn&&e.right instanceof rn&&e.left.definition()===e.right.definition()&&((u=e.left.fixed_value())instanceof Ft||u instanceof Ie||u instanceof Mt||u instanceof It))return p("="==e.operator[0]?Tn:An,e);break;case"&&":case"||":var a=e.left;if(a.operator==e.operator&&(a=a.right),a instanceof yt&&a.operator==("&&"==e.operator?"!==":"===")&&e.right instanceof yt&&a.operator==e.right.operator&&(xi(a.left,t)&&e.right.left instanceof hn||a.left instanceof hn&&xi(e.right.left,t))&&!a.right.has_side_effects(t)&&a.right.equivalent_to(e.right.right)){var s=p(yt,e,{operator:a.operator.slice(0,-1),left:p(hn,e),right:a.right});return a!==e.left&&(s=p(yt,e,{operator:e.operator,left:e.left.left,right:s})),s}}var u;if("+"==e.operator&&t.in_boolean_context()){var c=e.left.evaluate(t),l=e.right.evaluate(t);if(c&&"string"==typeof c)return t.warn("+ in boolean context always true [{file}:{line},{col}]",e.start),mi(e,[e.right,p(Tn,e)]).optimize(t);if(l&&"string"==typeof l)return t.warn("+ in boolean context always true [{file}:{line},{col}]",e.start),mi(e,[e.left,p(Tn,e)]).optimize(t)}if(t.option("comparisons")&&e.is_boolean()){if(!(t.parent()instanceof yt)||t.parent()instanceof Ct){var f=p(At,e,{operator:"!",expression:e.negate(t,In(t))});e=Vi(t,e,f)}if(t.option("unsafe_comps"))switch(e.operator){case"<":i(">");break;case"<=":i(">=")}}if("+"==e.operator){if(e.right instanceof fn&&""==e.right.getValue()&&e.left.is_string(t))return e.left;if(e.left instanceof fn&&""==e.left.getValue()&&e.right.is_string(t))return e.right;if(e.left instanceof yt&&"+"==e.left.operator&&e.left.left instanceof fn&&""==e.left.left.getValue()&&e.right.is_string(t))return e.left=e.left.right,e.transform(t)}if(t.option("evaluate")){switch(e.operator){case"&&":if(!(c=!!ii(e.left,2)||!ii(e.left,4)&&e.left.evaluate(t)))return t.warn("Condition left of && always false [{file}:{line},{col}]",e.start),Ei(t.parent(),t.self(),e.left).optimize(t);if(!(c instanceof pe))return t.warn("Condition left of && always true [{file}:{line},{col}]",e.start),mi(e,[e.left,e.right]).optimize(t);if(l=e.right.evaluate(t)){if(!(l instanceof pe)){if("&&"==(_=t.parent()).operator&&_.left===t.self()||t.in_boolean_context())return t.warn("Dropping side-effect-free && [{file}:{line},{col}]",e.start),e.left.optimize(t)}}else{if(t.in_boolean_context())return t.warn("Boolean && always false [{file}:{line},{col}]",e.start),mi(e,[e.left,p(An,e)]).optimize(t);ri(e,4)}if("||"==e.left.operator)if(!(d=e.left.right.evaluate(t)))return p(bt,e,{condition:e.left.left,consequent:e.right,alternative:e.left.right}).optimize(t);break;case"||":var _,d;if(!(c=!!ii(e.left,2)||!ii(e.left,4)&&e.left.evaluate(t)))return t.warn("Condition left of || always false [{file}:{line},{col}]",e.start),mi(e,[e.left,e.right]).optimize(t);if(!(c instanceof pe))return t.warn("Condition left of || always true [{file}:{line},{col}]",e.start),Ei(t.parent(),t.self(),e.left).optimize(t);if(l=e.right.evaluate(t)){if(!(l instanceof pe)){if(t.in_boolean_context())return t.warn("Boolean || always true [{file}:{line},{col}]",e.start),mi(e,[e.left,p(Tn,e)]).optimize(t);ri(e,2)}}else if("||"==(_=t.parent()).operator&&_.left===t.self()||t.in_boolean_context())return t.warn("Dropping side-effect-free || [{file}:{line},{col}]",e.start),e.left.optimize(t);if("&&"==e.left.operator)if((d=e.left.right.evaluate(t))&&!(d instanceof pe))return p(bt,e,{condition:e.left.left,consequent:e.left.right,alternative:e.right}).optimize(t);break;case"??":if(rr(e.left))return e.right;if(!((c=e.left.evaluate(t))instanceof pe))return null==c?e.right:e.left;if(t.in_boolean_context()){const n=e.right.evaluate(t);if(!(n instanceof pe||n))return e.left}}var m=!0;switch(e.operator){case"+":if(e.left instanceof ln&&e.right instanceof yt&&"+"==e.right.operator&&e.right.is_string(t)){var h=(g=p(yt,e,{operator:"+",left:e.left,right:e.right.left})).optimize(t);g!==h&&(e=p(yt,e,{operator:"+",left:h,right:e.right.right}))}if(e.right instanceof ln&&e.left instanceof yt&&"+"==e.left.operator&&e.left.is_string(t)){var E=(g=p(yt,e,{operator:"+",left:e.left.right,right:e.right})).optimize(t);g!==E&&(e=p(yt,e,{operator:"+",left:e.left.left,right:E}))}if(e.left instanceof yt&&"+"==e.left.operator&&e.left.is_string(t)&&e.right instanceof yt&&"+"==e.right.operator&&e.right.is_string(t)){var g,D=(g=p(yt,e,{operator:"+",left:e.left.right,right:e.right.left})).optimize(t);g!==D&&(e=p(yt,e,{operator:"+",left:p(yt,e.left,{operator:"+",left:e.left.left,right:D}),right:e.right.right}))}if(e.right instanceof At&&"-"==e.right.operator&&e.left.is_number(t)){e=p(yt,e,{operator:"-",left:e.left,right:e.right.expression});break}if(e.left instanceof At&&"-"==e.left.operator&&n()&&e.right.is_number(t)){e=p(yt,e,{operator:"-",left:e.right,right:e.left.expression});break}if(e.left instanceof Ge){h=e.left;if((E=e.right.evaluate(t))!=e.right)return h.segments[h.segments.length-1].value+=E.toString(),h}if(e.right instanceof Ge){E=e.right;if((h=e.left.evaluate(t))!=e.left)return E.segments[0].value=h.toString()+E.segments[0].value,E}if(e.left instanceof Ge&&e.right instanceof Ge){var S=(h=e.left).segments;E=e.right;S[S.length-1].value+=E.segments[0].value;for(var v=1;v<E.segments.length;v++)S.push(E.segments[v]);return h}case"*":m=t.option("unsafe_math");case"&":case"|":case"^":if(e.left.is_number(t)&&e.right.is_number(t)&&n()&&!(e.left instanceof yt&&e.left.operator!=e.operator&&se[e.left.operator]>=se[e.operator])){var A=p(yt,e,{operator:e.operator,left:e.right,right:e.left});e=e.right instanceof ln&&!(e.left instanceof ln)?Vi(t,A,e):Vi(t,e,A)}m&&e.is_number(t)&&(e.right instanceof yt&&e.right.operator==e.operator&&(e=p(yt,e,{operator:e.operator,left:p(yt,e.left,{operator:e.operator,left:e.left,right:e.right.left,start:e.left.start,end:e.right.left.end}),right:e.right.right})),e.right instanceof ln&&e.left instanceof yt&&e.left.operator==e.operator&&(e.left.left instanceof ln?e=p(yt,e,{operator:e.operator,left:p(yt,e.left,{operator:e.operator,left:e.left.left,right:e.right,start:e.left.left.start,end:e.right.end}),right:e.left.right}):e.left.right instanceof ln&&(e=p(yt,e,{operator:e.operator,left:p(yt,e.left,{operator:e.operator,left:e.left.right,right:e.right,start:e.left.right.start,end:e.right.end}),right:e.left.left}))),e.left instanceof yt&&e.left.operator==e.operator&&e.left.right instanceof ln&&e.right instanceof yt&&e.right.operator==e.operator&&e.right.left instanceof ln&&(e=p(yt,e,{operator:e.operator,left:p(yt,e.left,{operator:e.operator,left:p(yt,e.left.left,{operator:e.operator,left:e.left.right,right:e.right.left,start:e.left.right.start,end:e.right.left.end}),right:e.left.left}),right:e.right.right})))}}if(e.right instanceof yt&&e.right.operator==e.operator&&(Ni.has(e.operator)||"+"==e.operator&&(e.right.left.is_string(t)||e.left.is_string(t)&&e.right.right.is_string(t))))return e.left=p(yt,e.left,{operator:e.operator,left:e.left,right:e.right.left}),e.right=e.right.right,e.transform(t);var T=e.evaluate(t);return T!==e?(T=hi(T,e).optimize(t),Vi(t,T,e)):e})),si(on,(function(e){return e})),si(rn,(function(e,t){if(!t.option("ie8")&&yi(e)&&(!e.scope.uses_with||!t.find_parent(we)))switch(e.name){case"undefined":return p(gn,e).optimize(t);case"NaN":return p(En,e).optimize(t);case"Infinity":return p(Sn,e).optimize(t)}var n=t.parent();if(t.option("reduce_vars")&&Ii(e,n)!==e){const f=e.definition();if(t.top_retain&&f.global&&t.top_retain(f))return f.fixed=!1,f.should_replace=!1,f.single_use=!1,e;var i=e.fixed_value(),r=f.single_use&&!(n instanceof mt&&n.is_expr_pure(t)||T(n,wn));if(r&&(i instanceof Ie||i instanceof It))if(ji(i,t))r=!1;else if(f.scope!==e.scope&&(1==f.escaped||ii(i,16)||function(e){for(var t,n=0;t=e.parent(n++);){if(t instanceof _e)return!1;if(t instanceof Ft||t instanceof wt||t instanceof Mt)return!0}return!1}(t)))r=!1;else if(Ji(t,f))r=!1;else if((f.scope!==e.scope||f.orig[0]instanceof Wt)&&"f"==(r=i.is_constant_expression(e.scope))){var o=e.scope;do{(o instanceof Be||li(o))&&ri(o,16)}while(o=o.parent_scope)}if(r&&i instanceof Ie){const o=_i(t);r=f.scope===e.scope&&!Qi(o,i)||n instanceof mt&&n.expression===e&&!Qi(o,i)}if(r&&i instanceof It){r=(!i.extends||!i.extends.may_throw(t)&&!i.extends.has_side_effects(t))&&!i.properties.some(e=>e.may_throw(t)||e.has_side_effects(t))}if(r&&i){if(i instanceof Pt&&(ri(i,256),i=p(Vt,i,i)),i instanceof Be&&(ri(i,256),i=p(Pe,i,i)),f.recursive_refs>0&&i.name instanceof Yt){const e=i.name.definition();let t=i.variables.get(i.name.name),n=t&&t.orig[0];n instanceof jt||(n=p(jt,i.name,i.name),n.scope=i,i.name=n,t=i.def_function(n)),yn(i,n=>{n instanceof rn&&n.definition()===e&&(n.thedef=t,t.references.push(n))})}return(i instanceof Ie||i instanceof It)&&_i(t).add_child_scope(i),i.optimize(t)}if(i&&void 0===f.should_replace){let e;if(i instanceof un)f.orig[0]instanceof Wt||!f.references.every(e=>f.scope===e.scope)||(e=i);else{var a=i.evaluate(t);a===i||!t.option("unsafe_regexp")&&a instanceof RegExp||(e=hi(a,i))}if(e){var s,u=e.optimize(t).size();yn(i,e=>{if(e instanceof rn)return Cn})?s=function(){var n=e.optimize(t);return n===e?n.clone(!0):n}:(u=Math.min(u,i.size()),s=function(){var n=Li(e.optimize(t),i);return n===e||n===i?n.clone(!0):n});var c=f.name.length,l=0;t.option("unused")&&!t.exposed(f)&&(l=(c+2+u)/(f.references.length-f.assignments)),f.should_replace=u<=c+l&&s}else f.should_replace=!1}if(f.should_replace)return f.should_replace()}return e})),si(gn,(function(e,t){if(t.option("unsafe_undefined")){var n=di(t,"undefined");if(n){var i=p(rn,e,{name:"undefined",scope:n.scope,thedef:n});return ri(i,8),i}}var r=Ii(t.self(),t.parent());return r&&er(r,e)?e:p(At,e,{operator:"void",expression:p(pn,e,{value:0})})})),si(Sn,(function(e,t){var n=Ii(t.self(),t.parent());return n&&er(n,e)?e:!t.option("keep_infinity")||n&&!er(n,e)||di(t,"Infinity")?p(yt,e,{operator:"/",left:p(pn,e,{value:1}),right:p(pn,e,{value:0})}):e})),si(En,(function(e,t){var n=Ii(t.self(),t.parent());return n&&!er(n,e)||di(t,"NaN")?p(yt,e,{operator:"/",left:p(pn,e,{value:0}),right:p(pn,e,{value:0})}):e}));const nr=E("+ - / * % >> << >>> | ^ &"),ir=E("* | ^ &");function rr(e){let t;return e instanceof hn||xi(e)||e instanceof rn&&(t=e.definition().fixed)instanceof pe&&rr(t)}function or(e,t){return e instanceof rn&&(e=e.fixed_value()),!!e&&(!(e instanceof Ie||e instanceof It)||(!(e instanceof Ie&&e.contains_this())||t.parent()instanceof ht))}function ar(e,t){return t.in_boolean_context()?Vi(t,e,mi(e,[e,p(Tn,e)]).optimize(t)):e}function sr(e,t,n){for(var i=0;i<n.length;i++){var r=n[i];if(r instanceof ke){var o=r.expression;o instanceof Ft&&(n.splice(i,1,...o.elements),i--)}}return e}function ur(e,t){if(!t.option("computed_props"))return e;if(!(e.key instanceof ln))return e;if(e.key instanceof fn||e.key instanceof pn){if("__proto__"===e.key.value)return e;if("constructor"==e.key.value&&t.parent()instanceof It)return e;e.key=e instanceof wt?e.key.value:p(e instanceof Lt?$t:qt,e.key,{name:e.key.value})}return e}si(Ct,(function(e,t){var n;if(t.option("dead_code")&&e.left instanceof rn&&(n=e.left.definition()).scope===t.find_parent(Ie)){var i,r=0,o=e;do{if(i=o,(o=t.parent(r++))instanceof ze){if(a(r,o))break;if(tr(n.scope,[n]))break;return"="==e.operator?e.right:(n.fixed=!1,p(yt,e,{operator:e.operator.slice(0,-1),left:e.left,right:e.right}).optimize(t))}}while(o instanceof yt&&o.right===i||o instanceof Et&&o.tail_node()===i)}return"="==(e=e.lift_sequences(t)).operator&&e.left instanceof rn&&e.right instanceof yt&&(e.right.left instanceof rn&&e.right.left.name==e.left.name&&nr.has(e.right.operator)?(e.operator=e.right.operator+"=",e.right=e.right.right):e.right.right instanceof rn&&e.right.right.name==e.left.name&&ir.has(e.right.operator)&&!e.right.left.has_side_effects(t)&&(e.operator=e.right.operator+"=",e.right=e.right.left)),e;function a(n,i){var r=e.right;e.right=p(hn,r);var o=i.may_throw(t);e.right=r;for(var a,s=e.left.definition().scope;(a=t.parent(n++))!==s;)if(a instanceof rt){if(a.bfinally)return!0;if(o&&a.bcatch)return!0}}})),si(Ot,(function(e,t){if(!t.option("evaluate"))return e;var n=e.right.evaluate(t);return void 0===n?e=e.left:n!==e.right&&(n=hi(n,e.right),e.right=Li(n,e.right)),e})),si(bt,(function(e,t){if(!t.option("conditionals"))return e;if(e.condition instanceof Et){var n=e.condition.expressions.slice();return e.condition=n.pop(),n.push(e),mi(e,n)}var i=e.condition.evaluate(t);if(i!==e.condition)return i?(t.warn("Condition always true [{file}:{line},{col}]",e.start),Ei(t.parent(),t.self(),e.consequent)):(t.warn("Condition always false [{file}:{line},{col}]",e.start),Ei(t.parent(),t.self(),e.alternative));var r=i.negate(t,In(t));Vi(t,i,r)===r&&(e=p(bt,e,{condition:r,consequent:e.alternative,alternative:e.consequent}));var o,a=e.condition,s=e.consequent,u=e.alternative;if(a instanceof rn&&s instanceof rn&&a.definition()===s.definition())return p(yt,e,{operator:"||",left:a,right:u});if(s instanceof Ct&&u instanceof Ct&&s.operator==u.operator&&s.left.equivalent_to(u.left)&&(!e.condition.has_side_effects(t)||"="==s.operator&&!s.left.has_side_effects(t)))return p(Ct,e,{operator:s.operator,left:s.left,right:p(bt,e,{condition:e.condition,consequent:s.right,alternative:u.right})});if(s instanceof mt&&u.TYPE===s.TYPE&&s.args.length>0&&s.args.length==u.args.length&&s.expression.equivalent_to(u.expression)&&!e.condition.has_side_effects(t)&&!s.expression.has_side_effects(t)&&"number"==typeof(o=function(){for(var e=s.args,t=u.args,n=0,i=e.length;n<i;n++){if(e[n]instanceof ke)return;if(!e[n].equivalent_to(t[n])){if(t[n]instanceof ke)return;for(var r=n+1;r<i;r++){if(e[r]instanceof ke)return;if(!e[r].equivalent_to(t[r]))return}return n}}}())){var c=s.clone();return c.args[o]=p(bt,e,{condition:e.condition,consequent:s.args[o],alternative:u.args[o]}),c}if(u instanceof bt&&s.equivalent_to(u.consequent))return p(bt,e,{condition:p(yt,e,{operator:"||",left:a,right:u.condition}),consequent:s,alternative:u.alternative}).optimize(t);if(t.option("ecma")>=2020&&function(e,t,n){if(t.may_throw(n))return!1;let i;if(e instanceof yt&&"=="===e.operator&&((i=rr(e.left)&&e.left)||(i=rr(e.right)&&e.right))&&(i===e.left?e.right:e.left).equivalent_to(t))return!0;if(e instanceof yt&&"||"===e.operator){let n,i;const r=e=>{if(!(e instanceof yt)||"==="!==e.operator&&"=="!==e.operator)return!1;let r,o=0;return e.left instanceof hn&&(o++,n=e,r=e.right),e.right instanceof hn&&(o++,n=e,r=e.left),xi(e.left)&&(o++,i=e,r=e.right),xi(e.right)&&(o++,i=e,r=e.left),1===o&&!!r.equivalent_to(t)};if(!r(e.left))return!1;if(!r(e.right))return!1;if(n&&i&&n!==i)return!0}return!1}(a,u,t))return p(yt,e,{operator:"??",left:u,right:s}).optimize(t);if(u instanceof Et&&s.equivalent_to(u.expressions[u.expressions.length-1]))return mi(e,[p(yt,e,{operator:"||",left:a,right:mi(e,u.expressions.slice(0,-1))}),s]).optimize(t);if(u instanceof yt&&"&&"==u.operator&&s.equivalent_to(u.right))return p(yt,e,{operator:"&&",left:p(yt,e,{operator:"||",left:a,right:u.left}),right:s}).optimize(t);if(s instanceof bt&&s.alternative.equivalent_to(u))return p(bt,e,{condition:p(yt,e,{left:e.condition,operator:"&&",right:s.condition}),consequent:s.consequent,alternative:u});if(s.equivalent_to(u))return mi(e,[e.condition,s]).optimize(t);if(s instanceof yt&&"||"==s.operator&&s.right.equivalent_to(u))return p(yt,e,{operator:"||",left:p(yt,e,{operator:"&&",left:e.condition,right:s.left}),right:u}).optimize(t);var l=t.in_boolean_context();return _(e.consequent)?d(e.alternative)?f(e.condition):p(yt,e,{operator:"||",left:f(e.condition),right:e.alternative}):d(e.consequent)?_(e.alternative)?f(e.condition.negate(t)):p(yt,e,{operator:"&&",left:f(e.condition.negate(t)),right:e.alternative}):_(e.alternative)?p(yt,e,{operator:"||",left:f(e.condition.negate(t)),right:e.consequent}):d(e.alternative)?p(yt,e,{operator:"&&",left:f(e.condition),right:e.consequent}):e;function f(e){return e.is_boolean()?e:p(At,e,{operator:"!",expression:e.negate(t)})}function _(e){return e instanceof Tn||l&&e instanceof ln&&e.getValue()||e instanceof At&&"!"==e.operator&&e.expression instanceof ln&&!e.expression.getValue()}function d(e){return e instanceof An||l&&e instanceof ln&&!e.getValue()||e instanceof At&&"!"==e.operator&&e.expression instanceof ln&&e.expression.getValue()}})),si(vn,(function(e,t){if(t.in_boolean_context())return p(pn,e,{value:+e.value});var n=t.parent();return t.option("booleans_as_integers")?(n instanceof yt&&("==="==n.operator||"!=="==n.operator)&&(n.operator=n.operator.replace(/=$/,"")),p(pn,e,{value:+e.value})):t.option("booleans")?n instanceof yt&&("=="==n.operator||"!="==n.operator)?(t.warn("Non-strict equality against boolean: {operator} {value} [{file}:{line},{col}]",{operator:n.operator,value:e.value,file:n.start.file,line:n.start.line,col:n.start.col}),p(pn,e,{value:+e.value})):p(At,e,{operator:"!",expression:p(pn,e,{value:1-e.value})}):e})),si(St,(function(e,t){var n,i=e.expression,r=e.property;if(t.option("properties")){var o=r.evaluate(t);if(o!==r){if("string"==typeof o)if("undefined"==o)o=void 0;else(A=parseFloat(o)).toString()==o&&(o=A);r=e.property=Li(r,hi(o,r).transform(t));var a=""+o;if(j(a)&&a.length<=r.size()+1)return p(Dt,e,{expression:i,property:a,quote:r.quote}).optimize(t)}}e:if(t.option("arguments")&&i instanceof rn&&"arguments"==i.name&&1==i.definition().orig.length&&(n=i.scope)instanceof Ie&&n.uses_arguments&&!(n instanceof Ve)&&r instanceof pn){for(var s=r.getValue(),u=new Set,c=n.argnames,l=0;l<c.length;l++){if(!(c[l]instanceof Wt))break e;var f=c[l].name;if(u.has(f))break e;u.add(f)}var _=n.argnames[s];if(_&&t.has_directive("use strict")){var d=_.definition();(!t.option("reduce_vars")||d.assignments||d.orig.length>1)&&(_=null)}else if(!_&&!t.option("keep_fargs")&&s<n.argnames.length+5)for(;s>=n.argnames.length;)_=p(Wt,n,{name:n.make_var_name("argument_"+n.argnames.length),scope:n}),n.argnames.push(_),n.enclosed.push(n.def_variable(_));if(_){var m=p(rn,e,_);return m.reference({}),oi(_,1),m}}if(Ii(e,t.parent()))return e;if(o!==r){var h=e.flatten_object(a,t);h&&(i=e.expression=h.expression,r=e.property=h.property)}if(t.option("properties")&&t.option("side_effects")&&r instanceof pn&&i instanceof Ft){s=r.getValue();var E=i.elements,g=E[s];e:if(or(g,t)){for(var D=!0,S=[],v=E.length;--v>s;){(A=E[v].drop_side_effect_free(t))&&(S.unshift(A),D&&A.has_side_effects(t)&&(D=!1))}if(g instanceof ke)break e;for(g=g instanceof Dn?p(gn,g):g,D||S.unshift(g);--v>=0;){var A;if((A=E[v])instanceof ke)break e;(A=A.drop_side_effect_free(t))?S.unshift(A):s--}return D?(S.push(g),mi(e,S).optimize(t)):p(St,e,{expression:p(Ft,i,{elements:S}),property:p(pn,r,{value:s})})}}var T=e.evaluate(t);return T!==e?Vi(t,T=hi(T,e).optimize(t),e):e})),Ie.DEFMETHOD("contains_this",(function(){return yn(this,e=>e instanceof un?Cn:e!==this&&e instanceof xe&&!(e instanceof Ve)||void 0)})),gt.DEFMETHOD("flatten_object",(function(e,t){if(t.option("properties")){var n=t.option("unsafe_arrows")&&t.option("ecma")>=2015,i=this.expression;if(i instanceof Mt)for(var r=i.properties,o=r.length;--o>=0;){var a=r[o];if(""+(a instanceof kt?a.key.name:a.key)==e){if(!r.every(e=>e instanceof wt||n&&e instanceof kt&&!e.is_generator))break;if(!or(a.value,t))break;return p(St,this,{expression:p(Ft,i,{elements:r.map((function(e){var t=e.value;t instanceof Le&&(t=p(Pe,t,t));var n=e.key;return n instanceof pe&&!(n instanceof qt)?mi(e,[n,t]):t}))}),property:p(pn,this,{value:o})})}}}})),si(Dt,(function(e,t){"arguments"!=e.property&&"caller"!=e.property||t.warn("Function.prototype.{prop} not supported [{file}:{line},{col}]",{prop:e.property,file:e.start.file,line:e.start.line,col:e.start.col});const n=t.parent();if(Ii(e,n))return e;if(t.option("unsafe_proto")&&e.expression instanceof Dt&&"prototype"==e.expression.property){var i=e.expression.expression;if(yi(i))switch(i.name){case"Array":e.expression=p(Ft,e.expression,{elements:[]});break;case"Function":e.expression=p(Pe,e.expression,{argnames:[],body:[]});break;case"Number":e.expression=p(pn,e.expression,{value:0});break;case"Object":e.expression=p(Mt,e.expression,{properties:[]});break;case"RegExp":e.expression=p(dn,e.expression,{value:{source:"t",flags:""}});break;case"String":e.expression=p(fn,e.expression,{value:""})}}if(!(n instanceof mt&&T(n,wn))){const n=e.flatten_object(e.property,t);if(n)return n.optimize(t)}let r=e.evaluate(t);return r!==e?(r=hi(r,e).optimize(t),Vi(t,r,e)):e})),si(Ft,(function(e,t){var n=ar(e,t);return n!==e?n:sr(e,0,e.elements)})),si(Mt,(function(e,t){var n=ar(e,t);if(n!==e)return n;for(var i=e.properties,r=0;r<i.length;r++){var o=i[r];if(o instanceof ke){var a=o.expression;a instanceof Mt?(i.splice.apply(i,[r,1].concat(o.expression.properties)),r--):a instanceof ln&&!(a instanceof fn)&&i.splice(r,1)}}return e})),si(dn,ar),si(We,(function(e,t){return e.value&&xi(e.value,t)&&(e.value=null),e})),si(Ve,Yi),si(Pe,(function(e,t){if(e=Yi(e,t),t.option("unsafe_arrows")&&t.option("ecma")>=2015&&!e.name&&!e.is_generator&&!e.uses_arguments&&!e.pinned()){if(!yn(e,e=>{if(e instanceof un)return Cn}))return p(Ve,e,e).optimize(t)}return e})),si(It,(function(e){return e})),si(Je,(function(e,t){return e.expression&&!e.is_star&&xi(e.expression,t)&&(e.expression=null),e})),si(Ge,(function(e,t){if(!t.option("evaluate")||t.parent()instanceof Ue)return e;for(var n=[],i=0;i<e.segments.length;i++){var r=e.segments[i];if(r instanceof pe){var o=r.evaluate(t);if(o!==r&&(o+"").length<=r.size()+"${}".length){n[n.length-1].value=n[n.length-1].value+o+e.segments[++i].value;continue}if(r instanceof Ge){var a=r.segments;n[n.length-1].value+=a[0].value;for(var s=1;s<a.length;s++)r=a[s],n.push(r);continue}}n.push(r)}if(e.segments=n,1==n.length)return p(fn,e,n[0]);if(3===n.length&&n[1]instanceof pe){if(""===n[2].value)return p(yt,e,{operator:"+",left:p(fn,e,{value:n[0].value}),right:n[1]});if(""===n[0].value)return p(yt,e,{operator:"+",left:n[1],right:p(fn,e,{value:n[2].value})})}return e})),si(Ue,(function(e){return e})),si(Rt,ur),si(kt,(function(e,t){if(ur(e,t),t.option("arrows")&&t.parent()instanceof Mt&&!e.is_generator&&!e.value.uses_arguments&&!e.value.pinned()&&1==e.value.body.length&&e.value.body[0]instanceof We&&e.value.body[0].value&&!e.value.contains_this()){var n=p(Ve,e.value,e.value);return n.async=e.async,n.is_generator=e.is_generator,p(wt,e,{key:e.key instanceof qt?e.key.name:e.key,value:n,quote:e.quote})}return e})),si(wt,(function(e,t){ur(e,t);var n=t.option("unsafe_methods");if(n&&t.option("ecma")>=2015&&(!(n instanceof RegExp)||n.test(e.key+""))){var i=e.key,r=e.value;if((r instanceof Ve&&Array.isArray(r.body)&&!r.contains_this()||r instanceof Pe)&&!r.name)return p(kt,e,{async:r.async,is_generator:r.is_generator,key:i instanceof pe?i:p(qt,e,{name:i}),value:p(Le,r,r),quote:e.quote})}return e})),si(Ke,(function(e,t){if(1==t.option("pure_getters")&&t.option("unused")&&!e.is_array&&Array.isArray(e.names)&&!function(e){for(var t=[/^VarDef$/,/^(Const|Let|Var)$/,/^Export$/],n=0,i=0,r=t.length;n<r;i++){var o=e.parent(i);if(!o)return!1;if(0!==n||"Destructuring"!=o.TYPE){if(!t[n].test(o.TYPE))return!1;n++}}return!0}(t)){for(var n=[],i=0;i<e.names.length;i++){var r=e.names[i];r instanceof wt&&"string"==typeof r.key&&r.value instanceof Ut&&!o(t,r.value.definition())||n.push(r)}n.length!=e.names.length&&(e.names=n)}return e;function o(e,t){return!!t.references.length||!!t.global&&(!e.toplevel.vars||!!e.top_retain&&e.top_retain(t))}}));var cr=["$&","$'","$*","$+","$1","$2","$3","$4","$5","$6","$7","$8","$9","$_","$`","$input","@@iterator","ABORT_ERR","ACTIVE","ACTIVE_ATTRIBUTES","ACTIVE_TEXTURE","ACTIVE_UNIFORMS","ADDITION","ALIASED_LINE_WIDTH_RANGE","ALIASED_POINT_SIZE_RANGE","ALLOW_KEYBOARD_INPUT","ALLPASS","ALPHA","ALPHA_BITS","ALT_MASK","ALWAYS","ANY_TYPE","ANY_UNORDERED_NODE_TYPE","ARRAY_BUFFER","ARRAY_BUFFER_BINDING","ATTACHED_SHADERS","ATTRIBUTE_NODE","AT_TARGET","AddSearchProvider","AnalyserNode","AnimationEvent","AnonXMLHttpRequest","ApplicationCache","ApplicationCacheErrorEvent","Array","ArrayBuffer","Attr","Audio","AudioBuffer","AudioBufferSourceNode","AudioContext","AudioDestinationNode","AudioListener","AudioNode","AudioParam","AudioProcessingEvent","AudioStreamTrack","AutocompleteErrorEvent","BACK","BAD_BOUNDARYPOINTS_ERR","BANDPASS","BLEND","BLEND_COLOR","BLEND_DST_ALPHA","BLEND_DST_RGB","BLEND_EQUATION","BLEND_EQUATION_ALPHA","BLEND_EQUATION_RGB","BLEND_SRC_ALPHA","BLEND_SRC_RGB","BLUE_BITS","BLUR","BOOL","BOOLEAN_TYPE","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","BOTH","BROWSER_DEFAULT_WEBGL","BUBBLING_PHASE","BUFFER_SIZE","BUFFER_USAGE","BYTE","BYTES_PER_ELEMENT","BarProp","BaseHref","BatteryManager","BeforeLoadEvent","BeforeUnloadEvent","BiquadFilterNode","Blob","BlobEvent","Boolean","CAPTURING_PHASE","CCW","CDATASection","CDATA_SECTION_NODE","CHANGE","CHARSET_RULE","CHECKING","CLAMP_TO_EDGE","CLICK","CLOSED","CLOSING","COLOR_ATTACHMENT0","COLOR_BUFFER_BIT","COLOR_CLEAR_VALUE","COLOR_WRITEMASK","COMMENT_NODE","COMPILE_STATUS","COMPRESSED_RGBA_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT3_EXT","COMPRESSED_RGBA_S3TC_DXT5_EXT","COMPRESSED_RGB_S3TC_DXT1_EXT","COMPRESSED_TEXTURE_FORMATS","CONNECTING","CONSTANT_ALPHA","CONSTANT_COLOR","CONSTRAINT_ERR","CONTEXT_LOST_WEBGL","CONTROL_MASK","COUNTER_STYLE_RULE","CSS","CSS2Properties","CSSCharsetRule","CSSConditionRule","CSSCounterStyleRule","CSSFontFaceRule","CSSFontFeatureValuesRule","CSSGroupingRule","CSSImportRule","CSSKeyframeRule","CSSKeyframesRule","CSSMediaRule","CSSMozDocumentRule","CSSNameSpaceRule","CSSPageRule","CSSPrimitiveValue","CSSRule","CSSRuleList","CSSStyleDeclaration","CSSStyleRule","CSSStyleSheet","CSSSupportsRule","CSSUnknownRule","CSSValue","CSSValueList","CSSVariablesDeclaration","CSSVariablesRule","CSSViewportRule","CSS_ATTR","CSS_CM","CSS_COUNTER","CSS_CUSTOM","CSS_DEG","CSS_DIMENSION","CSS_EMS","CSS_EXS","CSS_FILTER_BLUR","CSS_FILTER_BRIGHTNESS","CSS_FILTER_CONTRAST","CSS_FILTER_CUSTOM","CSS_FILTER_DROP_SHADOW","CSS_FILTER_GRAYSCALE","CSS_FILTER_HUE_ROTATE","CSS_FILTER_INVERT","CSS_FILTER_OPACITY","CSS_FILTER_REFERENCE","CSS_FILTER_SATURATE","CSS_FILTER_SEPIA","CSS_GRAD","CSS_HZ","CSS_IDENT","CSS_IN","CSS_INHERIT","CSS_KHZ","CSS_MATRIX","CSS_MATRIX3D","CSS_MM","CSS_MS","CSS_NUMBER","CSS_PC","CSS_PERCENTAGE","CSS_PERSPECTIVE","CSS_PRIMITIVE_VALUE","CSS_PT","CSS_PX","CSS_RAD","CSS_RECT","CSS_RGBCOLOR","CSS_ROTATE","CSS_ROTATE3D","CSS_ROTATEX","CSS_ROTATEY","CSS_ROTATEZ","CSS_S","CSS_SCALE","CSS_SCALE3D","CSS_SCALEX","CSS_SCALEY","CSS_SCALEZ","CSS_SKEW","CSS_SKEWX","CSS_SKEWY","CSS_STRING","CSS_TRANSLATE","CSS_TRANSLATE3D","CSS_TRANSLATEX","CSS_TRANSLATEY","CSS_TRANSLATEZ","CSS_UNKNOWN","CSS_URI","CSS_VALUE_LIST","CSS_VH","CSS_VMAX","CSS_VMIN","CSS_VW","CULL_FACE","CULL_FACE_MODE","CURRENT_PROGRAM","CURRENT_VERTEX_ATTRIB","CUSTOM","CW","CanvasGradient","CanvasPattern","CanvasRenderingContext2D","CaretPosition","ChannelMergerNode","ChannelSplitterNode","CharacterData","ClientRect","ClientRectList","Clipboard","ClipboardEvent","CloseEvent","Collator","CommandEvent","Comment","CompositionEvent","Console","Controllers","ConvolverNode","Counter","Crypto","CryptoKey","CustomEvent","DATABASE_ERR","DATA_CLONE_ERR","DATA_ERR","DBLCLICK","DECR","DECR_WRAP","DELETE_STATUS","DEPTH_ATTACHMENT","DEPTH_BITS","DEPTH_BUFFER_BIT","DEPTH_CLEAR_VALUE","DEPTH_COMPONENT","DEPTH_COMPONENT16","DEPTH_FUNC","DEPTH_RANGE","DEPTH_STENCIL","DEPTH_STENCIL_ATTACHMENT","DEPTH_TEST","DEPTH_WRITEMASK","DIRECTION_DOWN","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DISABLED","DISPATCH_REQUEST_ERR","DITHER","DOCUMENT_FRAGMENT_NODE","DOCUMENT_NODE","DOCUMENT_POSITION_CONTAINED_BY","DOCUMENT_POSITION_CONTAINS","DOCUMENT_POSITION_DISCONNECTED","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC","DOCUMENT_POSITION_PRECEDING","DOCUMENT_TYPE_NODE","DOMCursor","DOMError","DOMException","DOMImplementation","DOMImplementationLS","DOMMatrix","DOMMatrixReadOnly","DOMParser","DOMPoint","DOMPointReadOnly","DOMQuad","DOMRect","DOMRectList","DOMRectReadOnly","DOMRequest","DOMSTRING_SIZE_ERR","DOMSettableTokenList","DOMStringList","DOMStringMap","DOMTokenList","DOMTransactionEvent","DOM_DELTA_LINE","DOM_DELTA_PAGE","DOM_DELTA_PIXEL","DOM_INPUT_METHOD_DROP","DOM_INPUT_METHOD_HANDWRITING","DOM_INPUT_METHOD_IME","DOM_INPUT_METHOD_KEYBOARD","DOM_INPUT_METHOD_MULTIMODAL","DOM_INPUT_METHOD_OPTION","DOM_INPUT_METHOD_PASTE","DOM_INPUT_METHOD_SCRIPT","DOM_INPUT_METHOD_UNKNOWN","DOM_INPUT_METHOD_VOICE","DOM_KEY_LOCATION_JOYSTICK","DOM_KEY_LOCATION_LEFT","DOM_KEY_LOCATION_MOBILE","DOM_KEY_LOCATION_NUMPAD","DOM_KEY_LOCATION_RIGHT","DOM_KEY_LOCATION_STANDARD","DOM_VK_0","DOM_VK_1","DOM_VK_2","DOM_VK_3","DOM_VK_4","DOM_VK_5","DOM_VK_6","DOM_VK_7","DOM_VK_8","DOM_VK_9","DOM_VK_A","DOM_VK_ACCEPT","DOM_VK_ADD","DOM_VK_ALT","DOM_VK_ALTGR","DOM_VK_AMPERSAND","DOM_VK_ASTERISK","DOM_VK_AT","DOM_VK_ATTN","DOM_VK_B","DOM_VK_BACKSPACE","DOM_VK_BACK_QUOTE","DOM_VK_BACK_SLASH","DOM_VK_BACK_SPACE","DOM_VK_C","DOM_VK_CANCEL","DOM_VK_CAPS_LOCK","DOM_VK_CIRCUMFLEX","DOM_VK_CLEAR","DOM_VK_CLOSE_BRACKET","DOM_VK_CLOSE_CURLY_BRACKET","DOM_VK_CLOSE_PAREN","DOM_VK_COLON","DOM_VK_COMMA","DOM_VK_CONTEXT_MENU","DOM_VK_CONTROL","DOM_VK_CONVERT","DOM_VK_CRSEL","DOM_VK_CTRL","DOM_VK_D","DOM_VK_DECIMAL","DOM_VK_DELETE","DOM_VK_DIVIDE","DOM_VK_DOLLAR","DOM_VK_DOUBLE_QUOTE","DOM_VK_DOWN","DOM_VK_E","DOM_VK_EISU","DOM_VK_END","DOM_VK_ENTER","DOM_VK_EQUALS","DOM_VK_EREOF","DOM_VK_ESCAPE","DOM_VK_EXCLAMATION","DOM_VK_EXECUTE","DOM_VK_EXSEL","DOM_VK_F","DOM_VK_F1","DOM_VK_F10","DOM_VK_F11","DOM_VK_F12","DOM_VK_F13","DOM_VK_F14","DOM_VK_F15","DOM_VK_F16","DOM_VK_F17","DOM_VK_F18","DOM_VK_F19","DOM_VK_F2","DOM_VK_F20","DOM_VK_F21","DOM_VK_F22","DOM_VK_F23","DOM_VK_F24","DOM_VK_F25","DOM_VK_F26","DOM_VK_F27","DOM_VK_F28","DOM_VK_F29","DOM_VK_F3","DOM_VK_F30","DOM_VK_F31","DOM_VK_F32","DOM_VK_F33","DOM_VK_F34","DOM_VK_F35","DOM_VK_F36","DOM_VK_F4","DOM_VK_F5","DOM_VK_F6","DOM_VK_F7","DOM_VK_F8","DOM_VK_F9","DOM_VK_FINAL","DOM_VK_FRONT","DOM_VK_G","DOM_VK_GREATER_THAN","DOM_VK_H","DOM_VK_HANGUL","DOM_VK_HANJA","DOM_VK_HASH","DOM_VK_HELP","DOM_VK_HK_TOGGLE","DOM_VK_HOME","DOM_VK_HYPHEN_MINUS","DOM_VK_I","DOM_VK_INSERT","DOM_VK_J","DOM_VK_JUNJA","DOM_VK_K","DOM_VK_KANA","DOM_VK_KANJI","DOM_VK_L","DOM_VK_LEFT","DOM_VK_LEFT_TAB","DOM_VK_LESS_THAN","DOM_VK_M","DOM_VK_META","DOM_VK_MODECHANGE","DOM_VK_MULTIPLY","DOM_VK_N","DOM_VK_NONCONVERT","DOM_VK_NUMPAD0","DOM_VK_NUMPAD1","DOM_VK_NUMPAD2","DOM_VK_NUMPAD3","DOM_VK_NUMPAD4","DOM_VK_NUMPAD5","DOM_VK_NUMPAD6","DOM_VK_NUMPAD7","DOM_VK_NUMPAD8","DOM_VK_NUMPAD9","DOM_VK_NUM_LOCK","DOM_VK_O","DOM_VK_OEM_1","DOM_VK_OEM_102","DOM_VK_OEM_2","DOM_VK_OEM_3","DOM_VK_OEM_4","DOM_VK_OEM_5","DOM_VK_OEM_6","DOM_VK_OEM_7","DOM_VK_OEM_8","DOM_VK_OEM_COMMA","DOM_VK_OEM_MINUS","DOM_VK_OEM_PERIOD","DOM_VK_OEM_PLUS","DOM_VK_OPEN_BRACKET","DOM_VK_OPEN_CURLY_BRACKET","DOM_VK_OPEN_PAREN","DOM_VK_P","DOM_VK_PA1","DOM_VK_PAGEDOWN","DOM_VK_PAGEUP","DOM_VK_PAGE_DOWN","DOM_VK_PAGE_UP","DOM_VK_PAUSE","DOM_VK_PERCENT","DOM_VK_PERIOD","DOM_VK_PIPE","DOM_VK_PLAY","DOM_VK_PLUS","DOM_VK_PRINT","DOM_VK_PRINTSCREEN","DOM_VK_PROCESSKEY","DOM_VK_PROPERITES","DOM_VK_Q","DOM_VK_QUESTION_MARK","DOM_VK_QUOTE","DOM_VK_R","DOM_VK_REDO","DOM_VK_RETURN","DOM_VK_RIGHT","DOM_VK_S","DOM_VK_SCROLL_LOCK","DOM_VK_SELECT","DOM_VK_SEMICOLON","DOM_VK_SEPARATOR","DOM_VK_SHIFT","DOM_VK_SLASH","DOM_VK_SLEEP","DOM_VK_SPACE","DOM_VK_SUBTRACT","DOM_VK_T","DOM_VK_TAB","DOM_VK_TILDE","DOM_VK_U","DOM_VK_UNDERSCORE","DOM_VK_UNDO","DOM_VK_UNICODE","DOM_VK_UP","DOM_VK_V","DOM_VK_VOLUME_DOWN","DOM_VK_VOLUME_MUTE","DOM_VK_VOLUME_UP","DOM_VK_W","DOM_VK_WIN","DOM_VK_WINDOW","DOM_VK_WIN_ICO_00","DOM_VK_WIN_ICO_CLEAR","DOM_VK_WIN_ICO_HELP","DOM_VK_WIN_OEM_ATTN","DOM_VK_WIN_OEM_AUTO","DOM_VK_WIN_OEM_BACKTAB","DOM_VK_WIN_OEM_CLEAR","DOM_VK_WIN_OEM_COPY","DOM_VK_WIN_OEM_CUSEL","DOM_VK_WIN_OEM_ENLW","DOM_VK_WIN_OEM_FINISH","DOM_VK_WIN_OEM_FJ_JISHO","DOM_VK_WIN_OEM_FJ_LOYA","DOM_VK_WIN_OEM_FJ_MASSHOU","DOM_VK_WIN_OEM_FJ_ROYA","DOM_VK_WIN_OEM_FJ_TOUROKU","DOM_VK_WIN_OEM_JUMP","DOM_VK_WIN_OEM_PA1","DOM_VK_WIN_OEM_PA2","DOM_VK_WIN_OEM_PA3","DOM_VK_WIN_OEM_RESET","DOM_VK_WIN_OEM_WSCTRL","DOM_VK_X","DOM_VK_XF86XK_ADD_FAVORITE","DOM_VK_XF86XK_APPLICATION_LEFT","DOM_VK_XF86XK_APPLICATION_RIGHT","DOM_VK_XF86XK_AUDIO_CYCLE_TRACK","DOM_VK_XF86XK_AUDIO_FORWARD","DOM_VK_XF86XK_AUDIO_LOWER_VOLUME","DOM_VK_XF86XK_AUDIO_MEDIA","DOM_VK_XF86XK_AUDIO_MUTE","DOM_VK_XF86XK_AUDIO_NEXT","DOM_VK_XF86XK_AUDIO_PAUSE","DOM_VK_XF86XK_AUDIO_PLAY","DOM_VK_XF86XK_AUDIO_PREV","DOM_VK_XF86XK_AUDIO_RAISE_VOLUME","DOM_VK_XF86XK_AUDIO_RANDOM_PLAY","DOM_VK_XF86XK_AUDIO_RECORD","DOM_VK_XF86XK_AUDIO_REPEAT","DOM_VK_XF86XK_AUDIO_REWIND","DOM_VK_XF86XK_AUDIO_STOP","DOM_VK_XF86XK_AWAY","DOM_VK_XF86XK_BACK","DOM_VK_XF86XK_BACK_FORWARD","DOM_VK_XF86XK_BATTERY","DOM_VK_XF86XK_BLUE","DOM_VK_XF86XK_BLUETOOTH","DOM_VK_XF86XK_BOOK","DOM_VK_XF86XK_BRIGHTNESS_ADJUST","DOM_VK_XF86XK_CALCULATOR","DOM_VK_XF86XK_CALENDAR","DOM_VK_XF86XK_CD","DOM_VK_XF86XK_CLOSE","DOM_VK_XF86XK_COMMUNITY","DOM_VK_XF86XK_CONTRAST_ADJUST","DOM_VK_XF86XK_COPY","DOM_VK_XF86XK_CUT","DOM_VK_XF86XK_CYCLE_ANGLE","DOM_VK_XF86XK_DISPLAY","DOM_VK_XF86XK_DOCUMENTS","DOM_VK_XF86XK_DOS","DOM_VK_XF86XK_EJECT","DOM_VK_XF86XK_EXCEL","DOM_VK_XF86XK_EXPLORER","DOM_VK_XF86XK_FAVORITES","DOM_VK_XF86XK_FINANCE","DOM_VK_XF86XK_FORWARD","DOM_VK_XF86XK_FRAME_BACK","DOM_VK_XF86XK_FRAME_FORWARD","DOM_VK_XF86XK_GAME","DOM_VK_XF86XK_GO","DOM_VK_XF86XK_GREEN","DOM_VK_XF86XK_HIBERNATE","DOM_VK_XF86XK_HISTORY","DOM_VK_XF86XK_HOME_PAGE","DOM_VK_XF86XK_HOT_LINKS","DOM_VK_XF86XK_I_TOUCH","DOM_VK_XF86XK_KBD_BRIGHTNESS_DOWN","DOM_VK_XF86XK_KBD_BRIGHTNESS_UP","DOM_VK_XF86XK_KBD_LIGHT_ON_OFF","DOM_VK_XF86XK_LAUNCH0","DOM_VK_XF86XK_LAUNCH1","DOM_VK_XF86XK_LAUNCH2","DOM_VK_XF86XK_LAUNCH3","DOM_VK_XF86XK_LAUNCH4","DOM_VK_XF86XK_LAUNCH5","DOM_VK_XF86XK_LAUNCH6","DOM_VK_XF86XK_LAUNCH7","DOM_VK_XF86XK_LAUNCH8","DOM_VK_XF86XK_LAUNCH9","DOM_VK_XF86XK_LAUNCH_A","DOM_VK_XF86XK_LAUNCH_B","DOM_VK_XF86XK_LAUNCH_C","DOM_VK_XF86XK_LAUNCH_D","DOM_VK_XF86XK_LAUNCH_E","DOM_VK_XF86XK_LAUNCH_F","DOM_VK_XF86XK_LIGHT_BULB","DOM_VK_XF86XK_LOG_OFF","DOM_VK_XF86XK_MAIL","DOM_VK_XF86XK_MAIL_FORWARD","DOM_VK_XF86XK_MARKET","DOM_VK_XF86XK_MEETING","DOM_VK_XF86XK_MEMO","DOM_VK_XF86XK_MENU_KB","DOM_VK_XF86XK_MENU_PB","DOM_VK_XF86XK_MESSENGER","DOM_VK_XF86XK_MON_BRIGHTNESS_DOWN","DOM_VK_XF86XK_MON_BRIGHTNESS_UP","DOM_VK_XF86XK_MUSIC","DOM_VK_XF86XK_MY_COMPUTER","DOM_VK_XF86XK_MY_SITES","DOM_VK_XF86XK_NEW","DOM_VK_XF86XK_NEWS","DOM_VK_XF86XK_OFFICE_HOME","DOM_VK_XF86XK_OPEN","DOM_VK_XF86XK_OPEN_URL","DOM_VK_XF86XK_OPTION","DOM_VK_XF86XK_PASTE","DOM_VK_XF86XK_PHONE","DOM_VK_XF86XK_PICTURES","DOM_VK_XF86XK_POWER_DOWN","DOM_VK_XF86XK_POWER_OFF","DOM_VK_XF86XK_RED","DOM_VK_XF86XK_REFRESH","DOM_VK_XF86XK_RELOAD","DOM_VK_XF86XK_REPLY","DOM_VK_XF86XK_ROCKER_DOWN","DOM_VK_XF86XK_ROCKER_ENTER","DOM_VK_XF86XK_ROCKER_UP","DOM_VK_XF86XK_ROTATE_WINDOWS","DOM_VK_XF86XK_ROTATION_KB","DOM_VK_XF86XK_ROTATION_PB","DOM_VK_XF86XK_SAVE","DOM_VK_XF86XK_SCREEN_SAVER","DOM_VK_XF86XK_SCROLL_CLICK","DOM_VK_XF86XK_SCROLL_DOWN","DOM_VK_XF86XK_SCROLL_UP","DOM_VK_XF86XK_SEARCH","DOM_VK_XF86XK_SEND","DOM_VK_XF86XK_SHOP","DOM_VK_XF86XK_SPELL","DOM_VK_XF86XK_SPLIT_SCREEN","DOM_VK_XF86XK_STANDBY","DOM_VK_XF86XK_START","DOM_VK_XF86XK_STOP","DOM_VK_XF86XK_SUBTITLE","DOM_VK_XF86XK_SUPPORT","DOM_VK_XF86XK_SUSPEND","DOM_VK_XF86XK_TASK_PANE","DOM_VK_XF86XK_TERMINAL","DOM_VK_XF86XK_TIME","DOM_VK_XF86XK_TOOLS","DOM_VK_XF86XK_TOP_MENU","DOM_VK_XF86XK_TO_DO_LIST","DOM_VK_XF86XK_TRAVEL","DOM_VK_XF86XK_USER1KB","DOM_VK_XF86XK_USER2KB","DOM_VK_XF86XK_USER_PB","DOM_VK_XF86XK_UWB","DOM_VK_XF86XK_VENDOR_HOME","DOM_VK_XF86XK_VIDEO","DOM_VK_XF86XK_VIEW","DOM_VK_XF86XK_WAKE_UP","DOM_VK_XF86XK_WEB_CAM","DOM_VK_XF86XK_WHEEL_BUTTON","DOM_VK_XF86XK_WLAN","DOM_VK_XF86XK_WORD","DOM_VK_XF86XK_WWW","DOM_VK_XF86XK_XFER","DOM_VK_XF86XK_YELLOW","DOM_VK_XF86XK_ZOOM_IN","DOM_VK_XF86XK_ZOOM_OUT","DOM_VK_Y","DOM_VK_Z","DOM_VK_ZOOM","DONE","DONT_CARE","DOWNLOADING","DRAGDROP","DST_ALPHA","DST_COLOR","DYNAMIC_DRAW","DataChannel","DataTransfer","DataTransferItem","DataTransferItemList","DataView","Date","DateTimeFormat","DelayNode","DesktopNotification","DesktopNotificationCenter","DeviceLightEvent","DeviceMotionEvent","DeviceOrientationEvent","DeviceProximityEvent","DeviceStorage","DeviceStorageChangeEvent","Document","DocumentFragment","DocumentType","DragEvent","DynamicsCompressorNode","E","ELEMENT_ARRAY_BUFFER","ELEMENT_ARRAY_BUFFER_BINDING","ELEMENT_NODE","EMPTY","ENCODING_ERR","ENDED","END_TO_END","END_TO_START","ENTITY_NODE","ENTITY_REFERENCE_NODE","EPSILON","EQUAL","EQUALPOWER","ERROR","EXPONENTIAL_DISTANCE","Element","ElementQuery","Entity","EntityReference","Error","ErrorEvent","EvalError","Event","EventException","EventSource","EventTarget","External","FASTEST","FIDOSDK","FILTER_ACCEPT","FILTER_INTERRUPT","FILTER_REJECT","FILTER_SKIP","FINISHED_STATE","FIRST_ORDERED_NODE_TYPE","FLOAT","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","FOCUS","FONT_FACE_RULE","FONT_FEATURE_VALUES_RULE","FRAGMENT_SHADER","FRAGMENT_SHADER_DERIVATIVE_HINT_OES","FRAMEBUFFER","FRAMEBUFFER_ATTACHMENT_OBJECT_NAME","FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE","FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE","FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL","FRAMEBUFFER_BINDING","FRAMEBUFFER_COMPLETE","FRAMEBUFFER_INCOMPLETE_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_DIMENSIONS","FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT","FRAMEBUFFER_UNSUPPORTED","FRONT","FRONT_AND_BACK","FRONT_FACE","FUNC_ADD","FUNC_REVERSE_SUBTRACT","FUNC_SUBTRACT","Feed","FeedEntry","File","FileError","FileList","FileReader","FindInPage","Float32Array","Float64Array","FocusEvent","FontFace","FormData","Function","GENERATE_MIPMAP_HINT","GEQUAL","GREATER","GREEN_BITS","GainNode","Gamepad","GamepadButton","GamepadEvent","GestureEvent","HAVE_CURRENT_DATA","HAVE_ENOUGH_DATA","HAVE_FUTURE_DATA","HAVE_METADATA","HAVE_NOTHING","HEADERS_RECEIVED","HIDDEN","HIERARCHY_REQUEST_ERR","HIGHPASS","HIGHSHELF","HIGH_FLOAT","HIGH_INT","HORIZONTAL","HORIZONTAL_AXIS","HRTF","HTMLAllCollection","HTMLAnchorElement","HTMLAppletElement","HTMLAreaElement","HTMLAudioElement","HTMLBRElement","HTMLBaseElement","HTMLBaseFontElement","HTMLBlockquoteElement","HTMLBodyElement","HTMLButtonElement","HTMLCanvasElement","HTMLCollection","HTMLCommandElement","HTMLContentElement","HTMLDListElement","HTMLDataElement","HTMLDataListElement","HTMLDetailsElement","HTMLDialogElement","HTMLDirectoryElement","HTMLDivElement","HTMLDocument","HTMLElement","HTMLEmbedElement","HTMLFieldSetElement","HTMLFontElement","HTMLFormControlsCollection","HTMLFormElement","HTMLFrameElement","HTMLFrameSetElement","HTMLHRElement","HTMLHeadElement","HTMLHeadingElement","HTMLHtmlElement","HTMLIFrameElement","HTMLImageElement","HTMLInputElement","HTMLIsIndexElement","HTMLKeygenElement","HTMLLIElement","HTMLLabelElement","HTMLLegendElement","HTMLLinkElement","HTMLMapElement","HTMLMarqueeElement","HTMLMediaElement","HTMLMenuElement","HTMLMenuItemElement","HTMLMetaElement","HTMLMeterElement","HTMLModElement","HTMLOListElement","HTMLObjectElement","HTMLOptGroupElement","HTMLOptionElement","HTMLOptionsCollection","HTMLOutputElement","HTMLParagraphElement","HTMLParamElement","HTMLPictureElement","HTMLPreElement","HTMLProgressElement","HTMLPropertiesCollection","HTMLQuoteElement","HTMLScriptElement","HTMLSelectElement","HTMLShadowElement","HTMLSourceElement","HTMLSpanElement","HTMLStyleElement","HTMLTableCaptionElement","HTMLTableCellElement","HTMLTableColElement","HTMLTableElement","HTMLTableRowElement","HTMLTableSectionElement","HTMLTemplateElement","HTMLTextAreaElement","HTMLTimeElement","HTMLTitleElement","HTMLTrackElement","HTMLUListElement","HTMLUnknownElement","HTMLVideoElement","HashChangeEvent","Headers","History","ICE_CHECKING","ICE_CLOSED","ICE_COMPLETED","ICE_CONNECTED","ICE_FAILED","ICE_GATHERING","ICE_WAITING","IDBCursor","IDBCursorWithValue","IDBDatabase","IDBDatabaseException","IDBFactory","IDBFileHandle","IDBFileRequest","IDBIndex","IDBKeyRange","IDBMutableFile","IDBObjectStore","IDBOpenDBRequest","IDBRequest","IDBTransaction","IDBVersionChangeEvent","IDLE","IMPLEMENTATION_COLOR_READ_FORMAT","IMPLEMENTATION_COLOR_READ_TYPE","IMPORT_RULE","INCR","INCR_WRAP","INDEX_SIZE_ERR","INT","INT_VEC2","INT_VEC3","INT_VEC4","INUSE_ATTRIBUTE_ERR","INVALID_ACCESS_ERR","INVALID_CHARACTER_ERR","INVALID_ENUM","INVALID_EXPRESSION_ERR","INVALID_FRAMEBUFFER_OPERATION","INVALID_MODIFICATION_ERR","INVALID_NODE_TYPE_ERR","INVALID_OPERATION","INVALID_STATE_ERR","INVALID_VALUE","INVERSE_DISTANCE","INVERT","IceCandidate","Image","ImageBitmap","ImageData","Infinity","InputEvent","InputMethodContext","InstallTrigger","Int16Array","Int32Array","Int8Array","Intent","InternalError","Intl","IsSearchProviderInstalled","Iterator","JSON","KEEP","KEYDOWN","KEYFRAMES_RULE","KEYFRAME_RULE","KEYPRESS","KEYUP","KeyEvent","KeyboardEvent","LENGTHADJUST_SPACING","LENGTHADJUST_SPACINGANDGLYPHS","LENGTHADJUST_UNKNOWN","LEQUAL","LESS","LINEAR","LINEAR_DISTANCE","LINEAR_MIPMAP_LINEAR","LINEAR_MIPMAP_NEAREST","LINES","LINE_LOOP","LINE_STRIP","LINE_WIDTH","LINK_STATUS","LIVE","LN10","LN2","LOADED","LOADING","LOG10E","LOG2E","LOWPASS","LOWSHELF","LOW_FLOAT","LOW_INT","LSException","LSParserFilter","LUMINANCE","LUMINANCE_ALPHA","LocalMediaStream","Location","MAX_COMBINED_TEXTURE_IMAGE_UNITS","MAX_CUBE_MAP_TEXTURE_SIZE","MAX_FRAGMENT_UNIFORM_VECTORS","MAX_RENDERBUFFER_SIZE","MAX_SAFE_INTEGER","MAX_TEXTURE_IMAGE_UNITS","MAX_TEXTURE_MAX_ANISOTROPY_EXT","MAX_TEXTURE_SIZE","MAX_VALUE","MAX_VARYING_VECTORS","MAX_VERTEX_ATTRIBS","MAX_VERTEX_TEXTURE_IMAGE_UNITS","MAX_VERTEX_UNIFORM_VECTORS","MAX_VIEWPORT_DIMS","MEDIA_ERR_ABORTED","MEDIA_ERR_DECODE","MEDIA_ERR_ENCRYPTED","MEDIA_ERR_NETWORK","MEDIA_ERR_SRC_NOT_SUPPORTED","MEDIA_KEYERR_CLIENT","MEDIA_KEYERR_DOMAIN","MEDIA_KEYERR_HARDWARECHANGE","MEDIA_KEYERR_OUTPUT","MEDIA_KEYERR_SERVICE","MEDIA_KEYERR_UNKNOWN","MEDIA_RULE","MEDIUM_FLOAT","MEDIUM_INT","META_MASK","MIN_SAFE_INTEGER","MIN_VALUE","MIRRORED_REPEAT","MODE_ASYNCHRONOUS","MODE_SYNCHRONOUS","MODIFICATION","MOUSEDOWN","MOUSEDRAG","MOUSEMOVE","MOUSEOUT","MOUSEOVER","MOUSEUP","MOZ_KEYFRAMES_RULE","MOZ_KEYFRAME_RULE","MOZ_SOURCE_CURSOR","MOZ_SOURCE_ERASER","MOZ_SOURCE_KEYBOARD","MOZ_SOURCE_MOUSE","MOZ_SOURCE_PEN","MOZ_SOURCE_TOUCH","MOZ_SOURCE_UNKNOWN","MSGESTURE_FLAG_BEGIN","MSGESTURE_FLAG_CANCEL","MSGESTURE_FLAG_END","MSGESTURE_FLAG_INERTIA","MSGESTURE_FLAG_NONE","MSPOINTER_TYPE_MOUSE","MSPOINTER_TYPE_PEN","MSPOINTER_TYPE_TOUCH","MS_ASYNC_CALLBACK_STATUS_ASSIGN_DELEGATE","MS_ASYNC_CALLBACK_STATUS_CANCEL","MS_ASYNC_CALLBACK_STATUS_CHOOSEANY","MS_ASYNC_CALLBACK_STATUS_ERROR","MS_ASYNC_CALLBACK_STATUS_JOIN","MS_ASYNC_OP_STATUS_CANCELED","MS_ASYNC_OP_STATUS_ERROR","MS_ASYNC_OP_STATUS_SUCCESS","MS_MANIPULATION_STATE_ACTIVE","MS_MANIPULATION_STATE_CANCELLED","MS_MANIPULATION_STATE_COMMITTED","MS_MANIPULATION_STATE_DRAGGING","MS_MANIPULATION_STATE_INERTIA","MS_MANIPULATION_STATE_PRESELECT","MS_MANIPULATION_STATE_SELECTING","MS_MANIPULATION_STATE_STOPPED","MS_MEDIA_ERR_ENCRYPTED","MS_MEDIA_KEYERR_CLIENT","MS_MEDIA_KEYERR_DOMAIN","MS_MEDIA_KEYERR_HARDWARECHANGE","MS_MEDIA_KEYERR_OUTPUT","MS_MEDIA_KEYERR_SERVICE","MS_MEDIA_KEYERR_UNKNOWN","Map","Math","MediaController","MediaDevices","MediaElementAudioSourceNode","MediaEncryptedEvent","MediaError","MediaKeyError","MediaKeyEvent","MediaKeyMessageEvent","MediaKeyNeededEvent","MediaKeySession","MediaKeyStatusMap","MediaKeySystemAccess","MediaKeys","MediaList","MediaQueryList","MediaQueryListEvent","MediaRecorder","MediaSource","MediaStream","MediaStreamAudioDestinationNode","MediaStreamAudioSourceNode","MediaStreamEvent","MediaStreamTrack","MediaStreamTrackEvent","MessageChannel","MessageEvent","MessagePort","Methods","MimeType","MimeTypeArray","MouseEvent","MouseScrollEvent","MozAnimation","MozAnimationDelay","MozAnimationDirection","MozAnimationDuration","MozAnimationFillMode","MozAnimationIterationCount","MozAnimationName","MozAnimationPlayState","MozAnimationTimingFunction","MozAppearance","MozBackfaceVisibility","MozBinding","MozBorderBottomColors","MozBorderEnd","MozBorderEndColor","MozBorderEndStyle","MozBorderEndWidth","MozBorderImage","MozBorderLeftColors","MozBorderRightColors","MozBorderStart","MozBorderStartColor","MozBorderStartStyle","MozBorderStartWidth","MozBorderTopColors","MozBoxAlign","MozBoxDirection","MozBoxFlex","MozBoxOrdinalGroup","MozBoxOrient","MozBoxPack","MozBoxSizing","MozCSSKeyframeRule","MozCSSKeyframesRule","MozColumnCount","MozColumnFill","MozColumnGap","MozColumnRule","MozColumnRuleColor","MozColumnRuleStyle","MozColumnRuleWidth","MozColumnWidth","MozColumns","MozContactChangeEvent","MozFloatEdge","MozFontFeatureSettings","MozFontLanguageOverride","MozForceBrokenImageIcon","MozHyphens","MozImageRegion","MozMarginEnd","MozMarginStart","MozMmsEvent","MozMmsMessage","MozMobileMessageThread","MozOSXFontSmoothing","MozOrient","MozOutlineRadius","MozOutlineRadiusBottomleft","MozOutlineRadiusBottomright","MozOutlineRadiusTopleft","MozOutlineRadiusTopright","MozPaddingEnd","MozPaddingStart","MozPerspective","MozPerspectiveOrigin","MozPowerManager","MozSettingsEvent","MozSmsEvent","MozSmsMessage","MozStackSizing","MozTabSize","MozTextAlignLast","MozTextDecorationColor","MozTextDecorationLine","MozTextDecorationStyle","MozTextSizeAdjust","MozTransform","MozTransformOrigin","MozTransformStyle","MozTransition","MozTransitionDelay","MozTransitionDuration","MozTransitionProperty","MozTransitionTimingFunction","MozUserFocus","MozUserInput","MozUserModify","MozUserSelect","MozWindowDragging","MozWindowShadow","MutationEvent","MutationObserver","MutationRecord","NAMESPACE_ERR","NAMESPACE_RULE","NEAREST","NEAREST_MIPMAP_LINEAR","NEAREST_MIPMAP_NEAREST","NEGATIVE_INFINITY","NETWORK_EMPTY","NETWORK_ERR","NETWORK_IDLE","NETWORK_LOADED","NETWORK_LOADING","NETWORK_NO_SOURCE","NEVER","NEW","NEXT","NEXT_NO_DUPLICATE","NICEST","NODE_AFTER","NODE_BEFORE","NODE_BEFORE_AND_AFTER","NODE_INSIDE","NONE","NON_TRANSIENT_ERR","NOTATION_NODE","NOTCH","NOTEQUAL","NOT_ALLOWED_ERR","NOT_FOUND_ERR","NOT_READABLE_ERR","NOT_SUPPORTED_ERR","NO_DATA_ALLOWED_ERR","NO_ERR","NO_ERROR","NO_MODIFICATION_ALLOWED_ERR","NUMBER_TYPE","NUM_COMPRESSED_TEXTURE_FORMATS","NaN","NamedNodeMap","Navigator","NearbyLinks","NetworkInformation","Node","NodeFilter","NodeIterator","NodeList","Notation","Notification","NotifyPaintEvent","Number","NumberFormat","OBSOLETE","ONE","ONE_MINUS_CONSTANT_ALPHA","ONE_MINUS_CONSTANT_COLOR","ONE_MINUS_DST_ALPHA","ONE_MINUS_DST_COLOR","ONE_MINUS_SRC_ALPHA","ONE_MINUS_SRC_COLOR","OPEN","OPENED","OPENING","ORDERED_NODE_ITERATOR_TYPE","ORDERED_NODE_SNAPSHOT_TYPE","OUT_OF_MEMORY","Object","OfflineAudioCompletionEvent","OfflineAudioContext","OfflineResourceList","Option","OscillatorNode","OverflowEvent","PACK_ALIGNMENT","PAGE_RULE","PARSE_ERR","PATHSEG_ARC_ABS","PATHSEG_ARC_REL","PATHSEG_CLOSEPATH","PATHSEG_CURVETO_CUBIC_ABS","PATHSEG_CURVETO_CUBIC_REL","PATHSEG_CURVETO_CUBIC_SMOOTH_ABS","PATHSEG_CURVETO_CUBIC_SMOOTH_REL","PATHSEG_CURVETO_QUADRATIC_ABS","PATHSEG_CURVETO_QUADRATIC_REL","PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS","PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL","PATHSEG_LINETO_ABS","PATHSEG_LINETO_HORIZONTAL_ABS","PATHSEG_LINETO_HORIZONTAL_REL","PATHSEG_LINETO_REL","PATHSEG_LINETO_VERTICAL_ABS","PATHSEG_LINETO_VERTICAL_REL","PATHSEG_MOVETO_ABS","PATHSEG_MOVETO_REL","PATHSEG_UNKNOWN","PATH_EXISTS_ERR","PEAKING","PERMISSION_DENIED","PERSISTENT","PI","PLAYING_STATE","POINTS","POLYGON_OFFSET_FACTOR","POLYGON_OFFSET_FILL","POLYGON_OFFSET_UNITS","POSITION_UNAVAILABLE","POSITIVE_INFINITY","PREV","PREV_NO_DUPLICATE","PROCESSING_INSTRUCTION_NODE","PageChangeEvent","PageTransitionEvent","PaintRequest","PaintRequestList","PannerNode","Path2D","Performance","PerformanceEntry","PerformanceMark","PerformanceMeasure","PerformanceNavigation","PerformanceResourceTiming","PerformanceTiming","PeriodicWave","Plugin","PluginArray","PopStateEvent","PopupBlockedEvent","ProcessingInstruction","ProgressEvent","Promise","PropertyNodeList","Proxy","PushManager","PushSubscription","Q","QUOTA_ERR","QUOTA_EXCEEDED_ERR","QueryInterface","READ_ONLY","READ_ONLY_ERR","READ_WRITE","RED_BITS","REMOVAL","RENDERBUFFER","RENDERBUFFER_ALPHA_SIZE","RENDERBUFFER_BINDING","RENDERBUFFER_BLUE_SIZE","RENDERBUFFER_DEPTH_SIZE","RENDERBUFFER_GREEN_SIZE","RENDERBUFFER_HEIGHT","RENDERBUFFER_INTERNAL_FORMAT","RENDERBUFFER_RED_SIZE","RENDERBUFFER_STENCIL_SIZE","RENDERBUFFER_WIDTH","RENDERER","RENDERING_INTENT_ABSOLUTE_COLORIMETRIC","RENDERING_INTENT_AUTO","RENDERING_INTENT_PERCEPTUAL","RENDERING_INTENT_RELATIVE_COLORIMETRIC","RENDERING_INTENT_SATURATION","RENDERING_INTENT_UNKNOWN","REPEAT","REPLACE","RGB","RGB565","RGB5_A1","RGBA","RGBA4","RGBColor","ROTATION_CLOCKWISE","ROTATION_COUNTERCLOCKWISE","RTCDataChannelEvent","RTCIceCandidate","RTCPeerConnectionIceEvent","RTCRtpReceiver","RTCRtpSender","RTCSessionDescription","RTCStatsReport","RadioNodeList","Range","RangeError","RangeException","RecordErrorEvent","Rect","ReferenceError","RegExp","Request","Response","SAMPLER_2D","SAMPLER_CUBE","SAMPLES","SAMPLE_ALPHA_TO_COVERAGE","SAMPLE_BUFFERS","SAMPLE_COVERAGE","SAMPLE_COVERAGE_INVERT","SAMPLE_COVERAGE_VALUE","SAWTOOTH","SCHEDULED_STATE","SCISSOR_BOX","SCISSOR_TEST","SCROLL_PAGE_DOWN","SCROLL_PAGE_UP","SDP_ANSWER","SDP_OFFER","SDP_PRANSWER","SECURITY_ERR","SELECT","SERIALIZE_ERR","SEVERITY_ERROR","SEVERITY_FATAL_ERROR","SEVERITY_WARNING","SHADER_COMPILER","SHADER_TYPE","SHADING_LANGUAGE_VERSION","SHIFT_MASK","SHORT","SHOWING","SHOW_ALL","SHOW_ATTRIBUTE","SHOW_CDATA_SECTION","SHOW_COMMENT","SHOW_DOCUMENT","SHOW_DOCUMENT_FRAGMENT","SHOW_DOCUMENT_TYPE","SHOW_ELEMENT","SHOW_ENTITY","SHOW_ENTITY_REFERENCE","SHOW_NOTATION","SHOW_PROCESSING_INSTRUCTION","SHOW_TEXT","SINE","SOUNDFIELD","SQLException","SQRT1_2","SQRT2","SQUARE","SRC_ALPHA","SRC_ALPHA_SATURATE","SRC_COLOR","START_TO_END","START_TO_START","STATIC_DRAW","STENCIL_ATTACHMENT","STENCIL_BACK_FAIL","STENCIL_BACK_FUNC","STENCIL_BACK_PASS_DEPTH_FAIL","STENCIL_BACK_PASS_DEPTH_PASS","STENCIL_BACK_REF","STENCIL_BACK_VALUE_MASK","STENCIL_BACK_WRITEMASK","STENCIL_BITS","STENCIL_BUFFER_BIT","STENCIL_CLEAR_VALUE","STENCIL_FAIL","STENCIL_FUNC","STENCIL_INDEX","STENCIL_INDEX8","STENCIL_PASS_DEPTH_FAIL","STENCIL_PASS_DEPTH_PASS","STENCIL_REF","STENCIL_TEST","STENCIL_VALUE_MASK","STENCIL_WRITEMASK","STREAM_DRAW","STRING_TYPE","STYLE_RULE","SUBPIXEL_BITS","SUPPORTS_RULE","SVGAElement","SVGAltGlyphDefElement","SVGAltGlyphElement","SVGAltGlyphItemElement","SVGAngle","SVGAnimateColorElement","SVGAnimateElement","SVGAnimateMotionElement","SVGAnimateTransformElement","SVGAnimatedAngle","SVGAnimatedBoolean","SVGAnimatedEnumeration","SVGAnimatedInteger","SVGAnimatedLength","SVGAnimatedLengthList","SVGAnimatedNumber","SVGAnimatedNumberList","SVGAnimatedPreserveAspectRatio","SVGAnimatedRect","SVGAnimatedString","SVGAnimatedTransformList","SVGAnimationElement","SVGCircleElement","SVGClipPathElement","SVGColor","SVGComponentTransferFunctionElement","SVGCursorElement","SVGDefsElement","SVGDescElement","SVGDiscardElement","SVGDocument","SVGElement","SVGElementInstance","SVGElementInstanceList","SVGEllipseElement","SVGException","SVGFEBlendElement","SVGFEColorMatrixElement","SVGFEComponentTransferElement","SVGFECompositeElement","SVGFEConvolveMatrixElement","SVGFEDiffuseLightingElement","SVGFEDisplacementMapElement","SVGFEDistantLightElement","SVGFEDropShadowElement","SVGFEFloodElement","SVGFEFuncAElement","SVGFEFuncBElement","SVGFEFuncGElement","SVGFEFuncRElement","SVGFEGaussianBlurElement","SVGFEImageElement","SVGFEMergeElement","SVGFEMergeNodeElement","SVGFEMorphologyElement","SVGFEOffsetElement","SVGFEPointLightElement","SVGFESpecularLightingElement","SVGFESpotLightElement","SVGFETileElement","SVGFETurbulenceElement","SVGFilterElement","SVGFontElement","SVGFontFaceElement","SVGFontFaceFormatElement","SVGFontFaceNameElement","SVGFontFaceSrcElement","SVGFontFaceUriElement","SVGForeignObjectElement","SVGGElement","SVGGeometryElement","SVGGlyphElement","SVGGlyphRefElement","SVGGradientElement","SVGGraphicsElement","SVGHKernElement","SVGImageElement","SVGLength","SVGLengthList","SVGLineElement","SVGLinearGradientElement","SVGMPathElement","SVGMarkerElement","SVGMaskElement","SVGMatrix","SVGMetadataElement","SVGMissingGlyphElement","SVGNumber","SVGNumberList","SVGPaint","SVGPathElement","SVGPathSeg","SVGPathSegArcAbs","SVGPathSegArcRel","SVGPathSegClosePath","SVGPathSegCurvetoCubicAbs","SVGPathSegCurvetoCubicRel","SVGPathSegCurvetoCubicSmoothAbs","SVGPathSegCurvetoCubicSmoothRel","SVGPathSegCurvetoQuadraticAbs","SVGPathSegCurvetoQuadraticRel","SVGPathSegCurvetoQuadraticSmoothAbs","SVGPathSegCurvetoQuadraticSmoothRel","SVGPathSegLinetoAbs","SVGPathSegLinetoHorizontalAbs","SVGPathSegLinetoHorizontalRel","SVGPathSegLinetoRel","SVGPathSegLinetoVerticalAbs","SVGPathSegLinetoVerticalRel","SVGPathSegList","SVGPathSegMovetoAbs","SVGPathSegMovetoRel","SVGPatternElement","SVGPoint","SVGPointList","SVGPolygonElement","SVGPolylineElement","SVGPreserveAspectRatio","SVGRadialGradientElement","SVGRect","SVGRectElement","SVGRenderingIntent","SVGSVGElement","SVGScriptElement","SVGSetElement","SVGStopElement","SVGStringList","SVGStyleElement","SVGSwitchElement","SVGSymbolElement","SVGTRefElement","SVGTSpanElement","SVGTextContentElement","SVGTextElement","SVGTextPathElement","SVGTextPositioningElement","SVGTitleElement","SVGTransform","SVGTransformList","SVGUnitTypes","SVGUseElement","SVGVKernElement","SVGViewElement","SVGViewSpec","SVGZoomAndPan","SVGZoomEvent","SVG_ANGLETYPE_DEG","SVG_ANGLETYPE_GRAD","SVG_ANGLETYPE_RAD","SVG_ANGLETYPE_UNKNOWN","SVG_ANGLETYPE_UNSPECIFIED","SVG_CHANNEL_A","SVG_CHANNEL_B","SVG_CHANNEL_G","SVG_CHANNEL_R","SVG_CHANNEL_UNKNOWN","SVG_COLORTYPE_CURRENTCOLOR","SVG_COLORTYPE_RGBCOLOR","SVG_COLORTYPE_RGBCOLOR_ICCCOLOR","SVG_COLORTYPE_UNKNOWN","SVG_EDGEMODE_DUPLICATE","SVG_EDGEMODE_NONE","SVG_EDGEMODE_UNKNOWN","SVG_EDGEMODE_WRAP","SVG_FEBLEND_MODE_COLOR","SVG_FEBLEND_MODE_COLOR_BURN","SVG_FEBLEND_MODE_COLOR_DODGE","SVG_FEBLEND_MODE_DARKEN","SVG_FEBLEND_MODE_DIFFERENCE","SVG_FEBLEND_MODE_EXCLUSION","SVG_FEBLEND_MODE_HARD_LIGHT","SVG_FEBLEND_MODE_HUE","SVG_FEBLEND_MODE_LIGHTEN","SVG_FEBLEND_MODE_LUMINOSITY","SVG_FEBLEND_MODE_MULTIPLY","SVG_FEBLEND_MODE_NORMAL","SVG_FEBLEND_MODE_OVERLAY","SVG_FEBLEND_MODE_SATURATION","SVG_FEBLEND_MODE_SCREEN","SVG_FEBLEND_MODE_SOFT_LIGHT","SVG_FEBLEND_MODE_UNKNOWN","SVG_FECOLORMATRIX_TYPE_HUEROTATE","SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA","SVG_FECOLORMATRIX_TYPE_MATRIX","SVG_FECOLORMATRIX_TYPE_SATURATE","SVG_FECOLORMATRIX_TYPE_UNKNOWN","SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE","SVG_FECOMPONENTTRANSFER_TYPE_GAMMA","SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY","SVG_FECOMPONENTTRANSFER_TYPE_LINEAR","SVG_FECOMPONENTTRANSFER_TYPE_TABLE","SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN","SVG_FECOMPOSITE_OPERATOR_ARITHMETIC","SVG_FECOMPOSITE_OPERATOR_ATOP","SVG_FECOMPOSITE_OPERATOR_IN","SVG_FECOMPOSITE_OPERATOR_OUT","SVG_FECOMPOSITE_OPERATOR_OVER","SVG_FECOMPOSITE_OPERATOR_UNKNOWN","SVG_FECOMPOSITE_OPERATOR_XOR","SVG_INVALID_VALUE_ERR","SVG_LENGTHTYPE_CM","SVG_LENGTHTYPE_EMS","SVG_LENGTHTYPE_EXS","SVG_LENGTHTYPE_IN","SVG_LENGTHTYPE_MM","SVG_LENGTHTYPE_NUMBER","SVG_LENGTHTYPE_PC","SVG_LENGTHTYPE_PERCENTAGE","SVG_LENGTHTYPE_PT","SVG_LENGTHTYPE_PX","SVG_LENGTHTYPE_UNKNOWN","SVG_MARKERUNITS_STROKEWIDTH","SVG_MARKERUNITS_UNKNOWN","SVG_MARKERUNITS_USERSPACEONUSE","SVG_MARKER_ORIENT_ANGLE","SVG_MARKER_ORIENT_AUTO","SVG_MARKER_ORIENT_UNKNOWN","SVG_MASKTYPE_ALPHA","SVG_MASKTYPE_LUMINANCE","SVG_MATRIX_NOT_INVERTABLE","SVG_MEETORSLICE_MEET","SVG_MEETORSLICE_SLICE","SVG_MEETORSLICE_UNKNOWN","SVG_MORPHOLOGY_OPERATOR_DILATE","SVG_MORPHOLOGY_OPERATOR_ERODE","SVG_MORPHOLOGY_OPERATOR_UNKNOWN","SVG_PAINTTYPE_CURRENTCOLOR","SVG_PAINTTYPE_NONE","SVG_PAINTTYPE_RGBCOLOR","SVG_PAINTTYPE_RGBCOLOR_ICCCOLOR","SVG_PAINTTYPE_UNKNOWN","SVG_PAINTTYPE_URI","SVG_PAINTTYPE_URI_CURRENTCOLOR","SVG_PAINTTYPE_URI_NONE","SVG_PAINTTYPE_URI_RGBCOLOR","SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR","SVG_PRESERVEASPECTRATIO_NONE","SVG_PRESERVEASPECTRATIO_UNKNOWN","SVG_PRESERVEASPECTRATIO_XMAXYMAX","SVG_PRESERVEASPECTRATIO_XMAXYMID","SVG_PRESERVEASPECTRATIO_XMAXYMIN","SVG_PRESERVEASPECTRATIO_XMIDYMAX","SVG_PRESERVEASPECTRATIO_XMIDYMID","SVG_PRESERVEASPECTRATIO_XMIDYMIN","SVG_PRESERVEASPECTRATIO_XMINYMAX","SVG_PRESERVEASPECTRATIO_XMINYMID","SVG_PRESERVEASPECTRATIO_XMINYMIN","SVG_SPREADMETHOD_PAD","SVG_SPREADMETHOD_REFLECT","SVG_SPREADMETHOD_REPEAT","SVG_SPREADMETHOD_UNKNOWN","SVG_STITCHTYPE_NOSTITCH","SVG_STITCHTYPE_STITCH","SVG_STITCHTYPE_UNKNOWN","SVG_TRANSFORM_MATRIX","SVG_TRANSFORM_ROTATE","SVG_TRANSFORM_SCALE","SVG_TRANSFORM_SKEWX","SVG_TRANSFORM_SKEWY","SVG_TRANSFORM_TRANSLATE","SVG_TRANSFORM_UNKNOWN","SVG_TURBULENCE_TYPE_FRACTALNOISE","SVG_TURBULENCE_TYPE_TURBULENCE","SVG_TURBULENCE_TYPE_UNKNOWN","SVG_UNIT_TYPE_OBJECTBOUNDINGBOX","SVG_UNIT_TYPE_UNKNOWN","SVG_UNIT_TYPE_USERSPACEONUSE","SVG_WRONG_TYPE_ERR","SVG_ZOOMANDPAN_DISABLE","SVG_ZOOMANDPAN_MAGNIFY","SVG_ZOOMANDPAN_UNKNOWN","SYNTAX_ERR","SavedPages","Screen","ScreenOrientation","Script","ScriptProcessorNode","ScrollAreaEvent","SecurityPolicyViolationEvent","Selection","ServiceWorker","ServiceWorkerContainer","ServiceWorkerRegistration","SessionDescription","Set","ShadowRoot","SharedWorker","SimpleGestureEvent","SpeechSynthesisEvent","SpeechSynthesisUtterance","StopIteration","Storage","StorageEvent","String","StyleSheet","StyleSheetList","SubtleCrypto","Symbol","SyntaxError","TEMPORARY","TEXTPATH_METHODTYPE_ALIGN","TEXTPATH_METHODTYPE_STRETCH","TEXTPATH_METHODTYPE_UNKNOWN","TEXTPATH_SPACINGTYPE_AUTO","TEXTPATH_SPACINGTYPE_EXACT","TEXTPATH_SPACINGTYPE_UNKNOWN","TEXTURE","TEXTURE0","TEXTURE1","TEXTURE10","TEXTURE11","TEXTURE12","TEXTURE13","TEXTURE14","TEXTURE15","TEXTURE16","TEXTURE17","TEXTURE18","TEXTURE19","TEXTURE2","TEXTURE20","TEXTURE21","TEXTURE22","TEXTURE23","TEXTURE24","TEXTURE25","TEXTURE26","TEXTURE27","TEXTURE28","TEXTURE29","TEXTURE3","TEXTURE30","TEXTURE31","TEXTURE4","TEXTURE5","TEXTURE6","TEXTURE7","TEXTURE8","TEXTURE9","TEXTURE_2D","TEXTURE_BINDING_2D","TEXTURE_BINDING_CUBE_MAP","TEXTURE_CUBE_MAP","TEXTURE_CUBE_MAP_NEGATIVE_X","TEXTURE_CUBE_MAP_NEGATIVE_Y","TEXTURE_CUBE_MAP_NEGATIVE_Z","TEXTURE_CUBE_MAP_POSITIVE_X","TEXTURE_CUBE_MAP_POSITIVE_Y","TEXTURE_CUBE_MAP_POSITIVE_Z","TEXTURE_MAG_FILTER","TEXTURE_MAX_ANISOTROPY_EXT","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","TEXTURE_WRAP_T","TEXT_NODE","TIMEOUT","TIMEOUT_ERR","TOO_LARGE_ERR","TRANSACTION_INACTIVE_ERR","TRIANGLE","TRIANGLES","TRIANGLE_FAN","TRIANGLE_STRIP","TYPE_BACK_FORWARD","TYPE_ERR","TYPE_MISMATCH_ERR","TYPE_NAVIGATE","TYPE_RELOAD","TYPE_RESERVED","Text","TextDecoder","TextEncoder","TextEvent","TextMetrics","TextTrack","TextTrackCue","TextTrackCueList","TextTrackList","TimeEvent","TimeRanges","Touch","TouchEvent","TouchList","TrackEvent","TransitionEvent","TreeWalker","TypeError","UIEvent","UNCACHED","UNKNOWN_ERR","UNKNOWN_RULE","UNMASKED_RENDERER_WEBGL","UNMASKED_VENDOR_WEBGL","UNORDERED_NODE_ITERATOR_TYPE","UNORDERED_NODE_SNAPSHOT_TYPE","UNPACK_ALIGNMENT","UNPACK_COLORSPACE_CONVERSION_WEBGL","UNPACK_FLIP_Y_WEBGL","UNPACK_PREMULTIPLY_ALPHA_WEBGL","UNSCHEDULED_STATE","UNSENT","UNSIGNED_BYTE","UNSIGNED_INT","UNSIGNED_SHORT","UNSIGNED_SHORT_4_4_4_4","UNSIGNED_SHORT_5_5_5_1","UNSIGNED_SHORT_5_6_5","UNSPECIFIED_EVENT_TYPE_ERR","UPDATEREADY","URIError","URL","URLSearchParams","URLUnencoded","URL_MISMATCH_ERR","UTC","Uint16Array","Uint32Array","Uint8Array","Uint8ClampedArray","UserMessageHandler","UserMessageHandlersNamespace","UserProximityEvent","VALIDATE_STATUS","VALIDATION_ERR","VARIABLES_RULE","VENDOR","VERSION","VERSION_CHANGE","VERSION_ERR","VERTEX_ATTRIB_ARRAY_BUFFER_BINDING","VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE","VERTEX_ATTRIB_ARRAY_ENABLED","VERTEX_ATTRIB_ARRAY_NORMALIZED","VERTEX_ATTRIB_ARRAY_POINTER","VERTEX_ATTRIB_ARRAY_SIZE","VERTEX_ATTRIB_ARRAY_STRIDE","VERTEX_ATTRIB_ARRAY_TYPE","VERTEX_SHADER","VERTICAL","VERTICAL_AXIS","VER_ERR","VIEWPORT","VIEWPORT_RULE","VTTCue","VTTRegion","ValidityState","VideoStreamTrack","WEBKIT_FILTER_RULE","WEBKIT_KEYFRAMES_RULE","WEBKIT_KEYFRAME_RULE","WEBKIT_REGION_RULE","WRONG_DOCUMENT_ERR","WaveShaperNode","WeakMap","WeakSet","WebGLActiveInfo","WebGLBuffer","WebGLContextEvent","WebGLFramebuffer","WebGLProgram","WebGLRenderbuffer","WebGLRenderingContext","WebGLShader","WebGLShaderPrecisionFormat","WebGLTexture","WebGLUniformLocation","WebGLVertexArray","WebKitAnimationEvent","WebKitBlobBuilder","WebKitCSSFilterRule","WebKitCSSFilterValue","WebKitCSSKeyframeRule","WebKitCSSKeyframesRule","WebKitCSSMatrix","WebKitCSSRegionRule","WebKitCSSTransformValue","WebKitDataCue","WebKitGamepad","WebKitMediaKeyError","WebKitMediaKeyMessageEvent","WebKitMediaKeySession","WebKitMediaKeys","WebKitMediaSource","WebKitMutationObserver","WebKitNamespace","WebKitPlaybackTargetAvailabilityEvent","WebKitPoint","WebKitShadowRoot","WebKitSourceBuffer","WebKitSourceBufferList","WebKitTransitionEvent","WebSocket","WheelEvent","Window","Worker","XMLDocument","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestException","XMLHttpRequestProgressEvent","XMLHttpRequestUpload","XMLSerializer","XMLStylesheetProcessingInstruction","XPathEvaluator","XPathException","XPathExpression","XPathNSResolver","XPathResult","XSLTProcessor","ZERO","_XD0M_","_YD0M_","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","__opera","__proto__","_browserjsran","a","aLink","abbr","abort","abs","absolute","acceleration","accelerationIncludingGravity","accelerator","accept","acceptCharset","acceptNode","accessKey","accessKeyLabel","accuracy","acos","acosh","action","actionURL","active","activeCues","activeElement","activeSourceBuffers","activeSourceCount","activeTexture","add","addBehavior","addCandidate","addColorStop","addCue","addElement","addEventListener","addFilter","addFromString","addFromUri","addIceCandidate","addImport","addListener","addNamed","addPageRule","addPath","addPointer","addRange","addRegion","addRule","addSearchEngine","addSourceBuffer","addStream","addTextTrack","addTrack","addWakeLockListener","addedNodes","additionalName","additiveSymbols","addons","adoptNode","adr","advance","alert","algorithm","align","align-content","align-items","align-self","alignContent","alignItems","alignSelf","alignmentBaseline","alinkColor","all","allSettled","allowFullscreen","allowedDirections","alpha","alt","altGraphKey","altHtml","altKey","altLeft","altitude","altitudeAccuracy","amplitude","ancestorOrigins","anchor","anchorNode","anchorOffset","anchors","angle","animVal","animate","animatedInstanceRoot","animatedNormalizedPathSegList","animatedPathSegList","animatedPoints","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","animationDelay","animationDirection","animationDuration","animationFillMode","animationIterationCount","animationName","animationPlayState","animationStartTime","animationTimingFunction","animationsPaused","anniversary","any","app","appCodeName","appMinorVersion","appName","appNotifications","appVersion","append","appendBuffer","appendChild","appendData","appendItem","appendMedium","appendNamed","appendRule","appendStream","appendWindowEnd","appendWindowStart","applets","applicationCache","apply","applyElement","arc","arcTo","archive","areas","arguments","arrayBuffer","asin","asinh","assert","assign","async","atEnd","atan","atan2","atanh","atob","attachEvent","attachShader","attachShadow","attachments","attack","attrChange","attrName","attributeFilter","attributeName","attributeNamespace","attributeOldValue","attributes","audioTracks","autoIncrement","autobuffer","autocapitalize","autocomplete","autocorrect","autofocus","autoplay","availHeight","availLeft","availTop","availWidth","availability","available","aversion","axes","axis","azimuth","b","back","backface-visibility","backfaceVisibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","backgroundAttachment","backgroundBlendMode","backgroundClip","backgroundColor","backgroundImage","backgroundOrigin","backgroundPosition","backgroundPositionX","backgroundPositionY","backgroundRepeat","backgroundSize","badInput","balance","baseFrequencyX","baseFrequencyY","baseNode","baseOffset","baseURI","baseVal","baselineShift","battery","bday","beginElement","beginElementAt","beginPath","behavior","behaviorCookie","behaviorPart","behaviorUrns","beta","bezierCurveTo","bgColor","bgProperties","bias","big","binaryType","bind","bindAttribLocation","bindBuffer","bindFramebuffer","bindRenderbuffer","bindTexture","blendColor","blendEquation","blendEquationSeparate","blendFunc","blendFuncSeparate","blink","blob","blockDirection","blue","blur","body","bodyUsed","bold","bookmarks","booleanValue","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","borderBottom","borderBottomColor","borderBottomLeftRadius","borderBottomRightRadius","borderBottomStyle","borderBottomWidth","borderCollapse","borderColor","borderColorDark","borderColorLight","borderImage","borderImageOutset","borderImageRepeat","borderImageSlice","borderImageSource","borderImageWidth","borderLeft","borderLeftColor","borderLeftStyle","borderLeftWidth","borderRadius","borderRight","borderRightColor","borderRightStyle","borderRightWidth","borderSpacing","borderStyle","borderTop","borderTopColor","borderTopLeftRadius","borderTopRightRadius","borderTopStyle","borderTopWidth","borderWidth","bottom","bottomMargin","bound","boundElements","boundingClientRect","boundingHeight","boundingLeft","boundingTop","boundingWidth","bounds","box-decoration-break","box-shadow","box-sizing","boxDecorationBreak","boxShadow","boxSizing","breakAfter","breakBefore","breakInside","browserLanguage","btoa","bubbles","buffer","bufferData","bufferDepth","bufferSize","bufferSubData","buffered","bufferedAmount","buildID","buildNumber","button","buttonID","buttons","byteLength","byteOffset","c","call","caller","canBeFormatted","canBeMounted","canBeShared","canHaveChildren","canHaveHTML","canPlayType","cancel","cancelAnimationFrame","cancelBubble","cancelScheduledValues","cancelable","candidate","canvas","caption","caption-side","captionSide","capture","captureEvents","captureStackTrace","caretPositionFromPoint","caretRangeFromPoint","cast","catch","category","cbrt","cd","ceil","cellIndex","cellPadding","cellSpacing","cells","ch","chOff","chain","challenge","changedTouches","channel","channelCount","channelCountMode","channelInterpretation","char","charAt","charCode","charCodeAt","charIndex","characterData","characterDataOldValue","characterSet","charging","chargingTime","charset","checkEnclosure","checkFramebufferStatus","checkIntersection","checkValidity","checked","childElementCount","childList","childNodes","children","chrome","ciphertext","cite","classList","className","classid","clear","clearAttributes","clearColor","clearData","clearDepth","clearImmediate","clearInterval","clearMarks","clearMeasures","clearParameters","clearRect","clearResourceTimings","clearShadow","clearStencil","clearTimeout","clearWatch","click","clickCount","clientHeight","clientInformation","clientLeft","clientRect","clientRects","clientTop","clientWidth","clientX","clientY","clip","clip-path","clip-rule","clipBottom","clipLeft","clipPath","clipPathUnits","clipRight","clipRule","clipTop","clipboardData","clone","cloneContents","cloneNode","cloneRange","close","closePath","closed","closest","clz","clz32","cmp","code","codeBase","codePointAt","codeType","colSpan","collapse","collapseToEnd","collapseToStart","collapsed","collect","colno","color","color-interpolation","color-interpolation-filters","colorDepth","colorInterpolation","colorInterpolationFilters","colorMask","colorType","cols","columnCount","columnFill","columnGap","columnNumber","columnRule","columnRuleColor","columnRuleStyle","columnRuleWidth","columnSpan","columnWidth","columns","command","commitPreferences","commonAncestorContainer","compact","compareBoundaryPoints","compareDocumentPosition","compareEndPoints","compareNode","comparePoint","compatMode","compatible","compile","compileShader","complete","componentFromPoint","compositionEndOffset","compositionStartOffset","compressedTexImage2D","compressedTexSubImage2D","concat","conditionText","coneInnerAngle","coneOuterAngle","coneOuterGain","confirm","confirmComposition","confirmSiteSpecificTrackingException","confirmWebWideTrackingException","connect","connectEnd","connectStart","connected","connection","connectionSpeed","console","consolidate","constrictionActive","constructor","contactID","contains","containsNode","content","contentDocument","contentEditable","contentOverflow","contentScriptType","contentStyleType","contentType","contentWindow","context","contextMenu","contextmenu","continue","continuous","control","controller","controls","convertToSpecifiedUnits","cookie","cookieEnabled","coords","copyFromChannel","copyTexImage2D","copyTexSubImage2D","copyToChannel","copyWithin","correspondingElement","correspondingUseElement","cos","cosh","count","counter-increment","counter-reset","counterIncrement","counterReset","cpuClass","cpuSleepAllowed","create","createAnalyser","createAnswer","createAttribute","createAttributeNS","createBiquadFilter","createBuffer","createBufferSource","createCDATASection","createCSSStyleSheet","createCaption","createChannelMerger","createChannelSplitter","createComment","createContextualFragment","createControlRange","createConvolver","createDTMFSender","createDataChannel","createDelay","createDelayNode","createDocument","createDocumentFragment","createDocumentType","createDynamicsCompressor","createElement","createElementNS","createEntityReference","createEvent","createEventObject","createExpression","createFramebuffer","createFunction","createGain","createGainNode","createHTMLDocument","createImageBitmap","createImageData","createIndex","createJavaScriptNode","createLinearGradient","createMediaElementSource","createMediaKeys","createMediaStreamDestination","createMediaStreamSource","createMutableFile","createNSResolver","createNodeIterator","createNotification","createObjectStore","createObjectURL","createOffer","createOscillator","createPanner","createPattern","createPeriodicWave","createPopup","createProcessingInstruction","createProgram","createRadialGradient","createRange","createRangeCollection","createRenderbuffer","createSVGAngle","createSVGLength","createSVGMatrix","createSVGNumber","createSVGPathSegArcAbs","createSVGPathSegArcRel","createSVGPathSegClosePath","createSVGPathSegCurvetoCubicAbs","createSVGPathSegCurvetoCubicRel","createSVGPathSegCurvetoCubicSmoothAbs","createSVGPathSegCurvetoCubicSmoothRel","createSVGPathSegCurvetoQuadraticAbs","createSVGPathSegCurvetoQuadraticRel","createSVGPathSegCurvetoQuadraticSmoothAbs","createSVGPathSegCurvetoQuadraticSmoothRel","createSVGPathSegLinetoAbs","createSVGPathSegLinetoHorizontalAbs","createSVGPathSegLinetoHorizontalRel","createSVGPathSegLinetoRel","createSVGPathSegLinetoVerticalAbs","createSVGPathSegLinetoVerticalRel","createSVGPathSegMovetoAbs","createSVGPathSegMovetoRel","createSVGPoint","createSVGRect","createSVGTransform","createSVGTransformFromMatrix","createScriptProcessor","createSession","createShader","createShadowRoot","createStereoPanner","createStyleSheet","createTBody","createTFoot","createTHead","createTextNode","createTextRange","createTexture","createTouch","createTouchList","createTreeWalker","createWaveShaper","creationTime","crossOrigin","crypto","csi","cssFloat","cssRules","cssText","cssValueType","ctrlKey","ctrlLeft","cues","cullFace","currentNode","currentPage","currentScale","currentScript","currentSrc","currentState","currentStyle","currentTarget","currentTime","currentTranslate","currentView","cursor","curve","customError","cx","cy","d","data","dataFld","dataFormatAs","dataPageSize","dataSrc","dataTransfer","database","dataset","dateTime","db","debug","debuggerEnabled","declare","decode","decodeAudioData","decodeURI","decodeURIComponent","decodingInfo","decrypt","default","defaultCharset","defaultChecked","defaultMuted","defaultPlaybackRate","defaultPrevented","defaultSelected","defaultStatus","defaultURL","defaultValue","defaultView","defaultstatus","defer","defineMagicFunction","defineMagicVariable","defineProperties","defineProperty","delayTime","delete","deleteBuffer","deleteCaption","deleteCell","deleteContents","deleteData","deleteDatabase","deleteFramebuffer","deleteFromDocument","deleteIndex","deleteMedium","deleteObjectStore","deleteProgram","deleteRenderbuffer","deleteRow","deleteRule","deleteShader","deleteTFoot","deleteTHead","deleteTexture","deliverChangeRecords","delivery","deliveryInfo","deliveryStatus","deliveryTimestamp","delta","deltaMode","deltaX","deltaY","deltaZ","depthFunc","depthMask","depthRange","deriveBits","deriveKey","description","deselectAll","designMode","destination","destinationURL","detach","detachEvent","detachShader","detail","detune","devicePixelRatio","deviceXDPI","deviceYDPI","diffuseConstant","digest","dimensions","dir","dirName","direction","dirxml","disable","disableVertexAttribArray","disabled","dischargingTime","disconnect","dispatchEvent","display","distanceModel","divisor","djsapi","djsproxy","doImport","doNotTrack","doScroll","doctype","document","documentElement","documentMode","documentURI","dolphin","dolphinGameCenter","dolphininfo","dolphinmeta","domComplete","domContentLoadedEventEnd","domContentLoadedEventStart","domInteractive","domLoading","domain","domainLookupEnd","domainLookupStart","dominant-baseline","dominantBaseline","done","dopplerFactor","download","dragDrop","draggable","drawArrays","drawArraysInstancedANGLE","drawCustomFocusRing","drawElements","drawElementsInstancedANGLE","drawFocusIfNeeded","drawImage","drawImageFromRect","drawSystemFocusRing","drawingBufferHeight","drawingBufferWidth","dropEffect","droppedVideoFrames","dropzone","dump","duplicate","duration","dvname","dvnum","dx","dy","dynsrc","e","edgeMode","effectAllowed","elapsedTime","elementFromPoint","elements","elevation","ellipse","email","embeds","empty","empty-cells","emptyCells","enable","enableBackground","enableStyleSheetsForSet","enableVertexAttribArray","enabled","enabledPlugin","encode","encodeURI","encodeURIComponent","encoding","encrypt","enctype","end","endContainer","endElement","endElementAt","endOfStream","endOffset","endTime","ended","endsWith","entities","entries","entryType","enumerate","enumerateEditable","error","errorCode","escape","eval","evaluate","event","eventPhase","every","exception","exec","execCommand","execCommandShowHelp","execScript","exitFullscreen","exitPointerLock","exp","expand","expandEntityReferences","expando","expansion","expiryDate","explicitOriginalTarget","expm1","exponent","exponentialRampToValueAtTime","exportKey","extend","extensions","extentNode","extentOffset","external","externalResourcesRequired","extractContents","extractable","f","face","factoryReset","fallback","familyName","farthestViewportElement","fastSeek","fatal","fetch","fetchStart","fftSize","fgColor","fileCreatedDate","fileHandle","fileModifiedDate","fileName","fileSize","fileUpdatedDate","filename","files","fill","fill-opacity","fill-rule","fillOpacity","fillRect","fillRule","fillStyle","fillText","filter","filterResX","filterResY","filterUnits","filters","finally","find","findIndex","findRule","findText","finish","fireEvent","firstChild","firstElementChild","firstPage","fixed","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","flexBasis","flexDirection","flexFlow","flexGrow","flexShrink","flexWrap","flipX","flipY","float","flood-color","flood-opacity","floodColor","floodOpacity","floor","flush","focus","focusNode","focusOffset","font","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight","fontFamily","fontFeatureSettings","fontKerning","fontLanguageOverride","fontSize","fontSizeAdjust","fontSmoothingEnabled","fontStretch","fontStyle","fontSynthesis","fontVariant","fontVariantAlternates","fontVariantCaps","fontVariantEastAsian","fontVariantLigatures","fontVariantNumeric","fontVariantPosition","fontWeight","fontcolor","fonts","fontsize","for","forEach","forceRedraw","form","formAction","formEnctype","formMethod","formNoValidate","formTarget","format","formatToParts","forms","forward","fr","frame","frameBorder","frameElement","frameSpacing","framebufferRenderbuffer","framebufferTexture2D","frames","freeSpace","freeze","frequency","frequencyBinCount","from","fromCharCode","fromCodePoint","fromElement","frontFace","fround","fullScreen","fullscreenElement","fullscreenEnabled","fx","fy","gain","gamepad","gamma","genderIdentity","generateKey","generateMipmap","generateRequest","geolocation","gestureObject","get","getActiveAttrib","getActiveUniform","getAdjacentText","getAll","getAllResponseHeaders","getAsFile","getAsString","getAttachedShaders","getAttribLocation","getAttribute","getAttributeNS","getAttributeNode","getAttributeNodeNS","getAudioTracks","getBBox","getBattery","getBlob","getBookmark","getBoundingClientRect","getBufferParameter","getByteFrequencyData","getByteTimeDomainData","getCSSCanvasContext","getCTM","getCandidateWindowClientRect","getChannelData","getCharNumAtPosition","getClientRect","getClientRects","getCompositionAlternatives","getComputedStyle","getComputedTextLength","getConfiguration","getContext","getContextAttributes","getCounterValue","getCueAsHTML","getCueById","getCurrentPosition","getCurrentTime","getData","getDatabaseNames","getDate","getDay","getDefaultComputedStyle","getDestinationInsertionPoints","getDistributedNodes","getEditable","getElementById","getElementsByClassName","getElementsByName","getElementsByTagName","getElementsByTagNameNS","getEnclosureList","getEndPositionOfChar","getEntries","getEntriesByName","getEntriesByType","getError","getExtension","getExtentOfChar","getFeature","getFile","getFloat32","getFloat64","getFloatFrequencyData","getFloatTimeDomainData","getFloatValue","getFramebufferAttachmentParameter","getFrequencyResponse","getFullYear","getGamepads","getHours","getImageData","getInt16","getInt32","getInt8","getIntersectionList","getItem","getItems","getKey","getLineDash","getLocalStreams","getMarks","getMatchedCSSRules","getMeasures","getMetadata","getMilliseconds","getMinutes","getModifierState","getMonth","getNamedItem","getNamedItemNS","getNotifier","getNumberOfChars","getOverrideHistoryNavigationMode","getOverrideStyle","getOwnPropertyDescriptor","getOwnPropertyNames","getOwnPropertySymbols","getParameter","getPathSegAtLength","getPointAtLength","getPreference","getPreferenceDefault","getPresentationAttribute","getPreventDefault","getProgramInfoLog","getProgramParameter","getPropertyCSSValue","getPropertyPriority","getPropertyShorthand","getPropertyValue","getPrototypeOf","getRGBColorValue","getRandomValues","getRangeAt","getReceivers","getRectValue","getRegistration","getRemoteStreams","getRenderbufferParameter","getResponseHeader","getRoot","getRotationOfChar","getSVGDocument","getScreenCTM","getSeconds","getSelection","getSenders","getShaderInfoLog","getShaderParameter","getShaderPrecisionFormat","getShaderSource","getSimpleDuration","getSiteIcons","getSources","getSpeculativeParserUrls","getStartPositionOfChar","getStartTime","getStats","getStorageUpdates","getStreamById","getStringValue","getSubStringLength","getSubscription","getSupportedExtensions","getTexParameter","getTime","getTimezoneOffset","getTotalLength","getTrackById","getTracks","getTransformToElement","getUTCDate","getUTCDay","getUTCFullYear","getUTCHours","getUTCMilliseconds","getUTCMinutes","getUTCMonth","getUTCSeconds","getUint16","getUint32","getUint8","getUniform","getUniformLocation","getUserMedia","getValues","getVarDate","getVariableValue","getVertexAttrib","getVertexAttribOffset","getVideoPlaybackQuality","getVideoTracks","getWakeLockState","getYear","givenName","global","globalAlpha","globalCompositeOperation","glyphOrientationHorizontal","glyphOrientationVertical","glyphRef","go","gradientTransform","gradientUnits","grammars","green","group","groupCollapsed","groupEnd","hardwareConcurrency","has","hasAttribute","hasAttributeNS","hasAttributes","hasChildNodes","hasComposition","hasExtension","hasFeature","hasFocus","hasLayout","hasOwnProperty","hash","head","headers","heading","height","hidden","hide","hideFocus","high","hint","history","honorificPrefix","honorificSuffix","horizontalOverflow","host","hostname","href","hreflang","hspace","html5TagCheckInerface","htmlFor","htmlText","httpEquiv","hwTimestamp","hypot","iccId","iceConnectionState","iceGatheringState","icon","id","identifier","identity","ignoreBOM","ignoreCase","image-orientation","image-rendering","imageOrientation","imageRendering","images","ime-mode","imeMode","implementation","importKey","importNode","importStylesheet","imports","impp","imul","in1","in2","inBandMetadataTrackDispatchType","inRange","includes","incremental","indeterminate","index","indexNames","indexOf","indexedDB","inertiaDestinationX","inertiaDestinationY","info","init","initAnimationEvent","initBeforeLoadEvent","initClipboardEvent","initCloseEvent","initCommandEvent","initCompositionEvent","initCustomEvent","initData","initDeviceMotionEvent","initDeviceOrientationEvent","initDragEvent","initErrorEvent","initEvent","initFocusEvent","initGestureEvent","initHashChangeEvent","initKeyEvent","initKeyboardEvent","initMSManipulationEvent","initMessageEvent","initMouseEvent","initMouseScrollEvent","initMouseWheelEvent","initMutationEvent","initNSMouseEvent","initOverflowEvent","initPageEvent","initPageTransitionEvent","initPointerEvent","initPopStateEvent","initProgressEvent","initScrollAreaEvent","initSimpleGestureEvent","initStorageEvent","initTextEvent","initTimeEvent","initTouchEvent","initTransitionEvent","initUIEvent","initWebKitAnimationEvent","initWebKitTransitionEvent","initWebKitWheelEvent","initWheelEvent","initialTime","initialize","initiatorType","inner","innerHTML","innerHeight","innerText","innerWidth","input","inputBuffer","inputEncoding","inputMethod","insertAdjacentElement","insertAdjacentHTML","insertAdjacentText","insertBefore","insertCell","insertData","insertItemBefore","insertNode","insertRow","insertRule","instanceRoot","intercept","interimResults","internalSubset","intersectsNode","interval","invalidIteratorState","inverse","invertSelf","is","is2D","isAlternate","isArray","isBingCurrentSearchDefault","isBuffer","isCandidateWindowVisible","isChar","isCollapsed","isComposing","isContentEditable","isContentHandlerRegistered","isContextLost","isDefaultNamespace","isDisabled","isEnabled","isEqual","isEqualNode","isExtensible","isFinite","isFramebuffer","isFrozen","isGenerator","isId","isInjected","isInteger","isMap","isMultiLine","isNaN","isOpen","isPointInFill","isPointInPath","isPointInRange","isPointInStroke","isPrefAlternate","isPrimary","isProgram","isPropertyImplicit","isProtocolHandlerRegistered","isPrototypeOf","isRenderbuffer","isSafeInteger","isSameNode","isSealed","isShader","isSupported","isTextEdit","isTexture","isTrusted","isTypeSupported","isView","isolation","italics","item","itemId","itemProp","itemRef","itemScope","itemType","itemValue","iterateNext","iterator","javaEnabled","jobTitle","join","json","justify-content","justifyContent","k1","k2","k3","k4","kernelMatrix","kernelUnitLengthX","kernelUnitLengthY","kerning","key","keyCode","keyFor","keyIdentifier","keyLightEnabled","keyLocation","keyPath","keySystem","keyText","keyUsage","keys","keytype","kind","knee","label","labels","lang","language","languages","largeArcFlag","lastChild","lastElementChild","lastEventId","lastIndex","lastIndexOf","lastMatch","lastMessageSubject","lastMessageType","lastModified","lastModifiedDate","lastPage","lastParen","lastState","lastStyleSheetSet","latitude","layerX","layerY","layoutFlow","layoutGrid","layoutGridChar","layoutGridLine","layoutGridMode","layoutGridType","lbound","left","leftContext","leftMargin","length","lengthAdjust","lengthComputable","letter-spacing","letterSpacing","level","lighting-color","lightingColor","limitingConeAngle","line","line-height","lineAlign","lineBreak","lineCap","lineDashOffset","lineHeight","lineJoin","lineNumber","lineTo","lineWidth","linearRampToValueAtTime","lineno","link","linkColor","linkProgram","links","list","list-style","list-style-image","list-style-position","list-style-type","listStyle","listStyleImage","listStylePosition","listStyleType","listener","load","loadEventEnd","loadEventStart","loadTimes","loaded","localDescription","localName","localStorage","locale","localeCompare","location","locationbar","lock","lockedFile","log","log10","log1p","log2","logicalXDPI","logicalYDPI","longDesc","longitude","lookupNamespaceURI","lookupPrefix","loop","loopEnd","loopStart","looping","low","lower","lowerBound","lowerOpen","lowsrc","m11","m12","m13","m14","m21","m22","m23","m24","m31","m32","m33","m34","m41","m42","m43","m44","manifest","map","mapping","margin","margin-bottom","margin-left","margin-right","margin-top","marginBottom","marginHeight","marginLeft","marginRight","marginTop","marginWidth","mark","marker","marker-end","marker-mid","marker-offset","marker-start","markerEnd","markerHeight","markerMid","markerOffset","markerStart","markerUnits","markerWidth","marks","mask","mask-type","maskContentUnits","maskType","maskUnits","match","matchMedia","matchMedium","matches","matrix","matrixTransform","max","max-height","max-width","maxAlternatives","maxChannelCount","maxConnectionsPerServer","maxDecibels","maxDistance","maxHeight","maxLength","maxTouchPoints","maxValue","maxWidth","measure","measureText","media","mediaCapabilities","mediaDevices","mediaElement","mediaGroup","mediaKeys","mediaText","meetOrSlice","memory","menubar","mergeAttributes","message","messageClass","messageHandlers","metaKey","method","mimeType","mimeTypes","min","min-height","min-width","minDecibels","minHeight","minValue","minWidth","miterLimit","mix-blend-mode","mixBlendMode","mode","modify","mount","move","moveBy","moveEnd","moveFirst","moveFocusDown","moveFocusLeft","moveFocusRight","moveFocusUp","moveNext","moveRow","moveStart","moveTo","moveToBookmark","moveToElementText","moveToPoint","mozAdd","mozAnimationStartTime","mozAnon","mozApps","mozAudioCaptured","mozAudioChannelType","mozAutoplayEnabled","mozCancelAnimationFrame","mozCancelFullScreen","mozCancelRequestAnimationFrame","mozCaptureStream","mozCaptureStreamUntilEnded","mozClearDataAt","mozContact","mozContacts","mozCreateFileHandle","mozCurrentTransform","mozCurrentTransformInverse","mozCursor","mozDash","mozDashOffset","mozDecodedFrames","mozExitPointerLock","mozFillRule","mozFragmentEnd","mozFrameDelay","mozFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozGetAll","mozGetAllKeys","mozGetAsFile","mozGetDataAt","mozGetMetadata","mozGetUserMedia","mozHasAudio","mozHasItem","mozHidden","mozImageSmoothingEnabled","mozIndexedDB","mozInnerScreenX","mozInnerScreenY","mozInputSource","mozIsTextField","mozItem","mozItemCount","mozItems","mozLength","mozLockOrientation","mozMatchesSelector","mozMovementX","mozMovementY","mozOpaque","mozOrientation","mozPaintCount","mozPaintedFrames","mozParsedFrames","mozPay","mozPointerLockElement","mozPresentedFrames","mozPreservesPitch","mozPressure","mozPrintCallback","mozRTCIceCandidate","mozRTCPeerConnection","mozRTCSessionDescription","mozRemove","mozRequestAnimationFrame","mozRequestFullScreen","mozRequestPointerLock","mozSetDataAt","mozSetImageElement","mozSourceNode","mozSrcObject","mozSystem","mozTCPSocket","mozTextStyle","mozTypesAt","mozUnlockOrientation","mozUserCancelled","mozVisibilityState","msAnimation","msAnimationDelay","msAnimationDirection","msAnimationDuration","msAnimationFillMode","msAnimationIterationCount","msAnimationName","msAnimationPlayState","msAnimationStartTime","msAnimationTimingFunction","msBackfaceVisibility","msBlockProgression","msCSSOMElementFloatMetrics","msCaching","msCachingEnabled","msCancelRequestAnimationFrame","msCapsLockWarningOff","msClearImmediate","msClose","msContentZoomChaining","msContentZoomFactor","msContentZoomLimit","msContentZoomLimitMax","msContentZoomLimitMin","msContentZoomSnap","msContentZoomSnapPoints","msContentZoomSnapType","msContentZooming","msConvertURL","msCrypto","msDoNotTrack","msElementsFromPoint","msElementsFromRect","msExitFullscreen","msExtendedCode","msFillRule","msFirstPaint","msFlex","msFlexAlign","msFlexDirection","msFlexFlow","msFlexItemAlign","msFlexLinePack","msFlexNegative","msFlexOrder","msFlexPack","msFlexPositive","msFlexPreferredSize","msFlexWrap","msFlowFrom","msFlowInto","msFontFeatureSettings","msFullscreenElement","msFullscreenEnabled","msGetInputContext","msGetRegionContent","msGetUntransformedBounds","msGraphicsTrustStatus","msGridColumn","msGridColumnAlign","msGridColumnSpan","msGridColumns","msGridRow","msGridRowAlign","msGridRowSpan","msGridRows","msHidden","msHighContrastAdjust","msHyphenateLimitChars","msHyphenateLimitLines","msHyphenateLimitZone","msHyphens","msImageSmoothingEnabled","msImeAlign","msIndexedDB","msInterpolationMode","msIsStaticHTML","msKeySystem","msKeys","msLaunchUri","msLockOrientation","msManipulationViewsEnabled","msMatchMedia","msMatchesSelector","msMaxTouchPoints","msOrientation","msOverflowStyle","msPerspective","msPerspectiveOrigin","msPlayToDisabled","msPlayToPreferredSourceUri","msPlayToPrimary","msPointerEnabled","msRegionOverflow","msReleasePointerCapture","msRequestAnimationFrame","msRequestFullscreen","msSaveBlob","msSaveOrOpenBlob","msScrollChaining","msScrollLimit","msScrollLimitXMax","msScrollLimitXMin","msScrollLimitYMax","msScrollLimitYMin","msScrollRails","msScrollSnapPointsX","msScrollSnapPointsY","msScrollSnapType","msScrollSnapX","msScrollSnapY","msScrollTranslation","msSetImmediate","msSetMediaKeys","msSetPointerCapture","msTextCombineHorizontal","msTextSizeAdjust","msToBlob","msTouchAction","msTouchSelect","msTraceAsyncCallbackCompleted","msTraceAsyncCallbackStarting","msTraceAsyncOperationCompleted","msTraceAsyncOperationStarting","msTransform","msTransformOrigin","msTransformStyle","msTransition","msTransitionDelay","msTransitionDuration","msTransitionProperty","msTransitionTimingFunction","msUnlockOrientation","msUpdateAsyncCallbackRelation","msUserSelect","msVisibilityState","msWrapFlow","msWrapMargin","msWrapThrough","msWriteProfilerMark","msZoom","msZoomTo","mt","multiEntry","multiSelectionObj","multiline","multiple","multiply","multiplySelf","mutableFile","muted","n","name","nameProp","namedItem","namedRecordset","names","namespaceURI","namespaces","naturalHeight","naturalWidth","navigate","navigation","navigationMode","navigationStart","navigator","near","nearestViewportElement","negative","netscape","networkState","newScale","newTranslate","newURL","newValue","newValueSpecifiedUnits","newVersion","newhome","next","nextElementSibling","nextNode","nextPage","nextSibling","nickname","noHref","noResize","noShade","noValidate","noWrap","nodeName","nodeType","nodeValue","normalize","normalizedPathSegList","notationName","notations","note","noteGrainOn","noteOff","noteOn","now","numOctaves","number","numberOfChannels","numberOfInputs","numberOfItems","numberOfOutputs","numberValue","oMatchesSelector","object","object-fit","object-position","objectFit","objectPosition","objectStore","objectStoreNames","observe","of","offscreenBuffering","offset","offsetHeight","offsetLeft","offsetNode","offsetParent","offsetTop","offsetWidth","offsetX","offsetY","ok","oldURL","oldValue","oldVersion","olderShadowRoot","onLine","onabort","onactivate","onactive","onaddstream","onaddtrack","onafterprint","onafterscriptexecute","onafterupdate","onaudioend","onaudioprocess","onaudiostart","onautocomplete","onautocompleteerror","onbeforeactivate","onbeforecopy","onbeforecut","onbeforedeactivate","onbeforeeditfocus","onbeforepaste","onbeforeprint","onbeforescriptexecute","onbeforeunload","onbeforeupdate","onblocked","onblur","onbounce","onboundary","oncached","oncancel","oncandidatewindowhide","oncandidatewindowshow","oncandidatewindowupdate","oncanplay","oncanplaythrough","once","oncellchange","onchange","onchargingchange","onchargingtimechange","onchecking","onclick","onclose","oncompassneedscalibration","oncomplete","oncontextmenu","oncontrolselect","oncopy","oncuechange","oncut","ondataavailable","ondatachannel","ondatasetchanged","ondatasetcomplete","ondblclick","ondeactivate","ondevicelight","ondevicemotion","ondeviceorientation","ondeviceproximity","ondischargingtimechange","ondisplay","ondownloading","ondrag","ondragend","ondragenter","ondragleave","ondragover","ondragstart","ondrop","ondurationchange","onemptied","onencrypted","onend","onended","onenter","onerror","onerrorupdate","onexit","onfilterchange","onfinish","onfocus","onfocusin","onfocusout","onfullscreenchange","onfullscreenerror","ongesturechange","ongestureend","ongesturestart","ongotpointercapture","onhashchange","onhelp","onicecandidate","oniceconnectionstatechange","oninactive","oninput","oninvalid","onkeydown","onkeypress","onkeyup","onlanguagechange","onlayoutcomplete","onlevelchange","onload","onloadeddata","onloadedmetadata","onloadend","onloadstart","onlosecapture","onlostpointercapture","only","onmark","onmessage","onmousedown","onmouseenter","onmouseleave","onmousemove","onmouseout","onmouseover","onmouseup","onmousewheel","onmove","onmoveend","onmovestart","onmozfullscreenchange","onmozfullscreenerror","onmozorientationchange","onmozpointerlockchange","onmozpointerlockerror","onmscontentzoom","onmsfullscreenchange","onmsfullscreenerror","onmsgesturechange","onmsgesturedoubletap","onmsgestureend","onmsgesturehold","onmsgesturestart","onmsgesturetap","onmsgotpointercapture","onmsinertiastart","onmslostpointercapture","onmsmanipulationstatechanged","onmsneedkey","onmsorientationchange","onmspointercancel","onmspointerdown","onmspointerenter","onmspointerhover","onmspointerleave","onmspointermove","onmspointerout","onmspointerover","onmspointerup","onmssitemodejumplistitemremoved","onmsthumbnailclick","onnegotiationneeded","onnomatch","onnoupdate","onobsolete","onoffline","ononline","onopen","onorientationchange","onpagechange","onpagehide","onpageshow","onpaste","onpause","onplay","onplaying","onpluginstreamstart","onpointercancel","onpointerdown","onpointerenter","onpointerleave","onpointerlockchange","onpointerlockerror","onpointermove","onpointerout","onpointerover","onpointerup","onpopstate","onprogress","onpropertychange","onratechange","onreadystatechange","onremovestream","onremovetrack","onreset","onresize","onresizeend","onresizestart","onresourcetimingbufferfull","onresult","onresume","onrowenter","onrowexit","onrowsdelete","onrowsinserted","onscroll","onsearch","onseeked","onseeking","onselect","onselectionchange","onselectstart","onshow","onsignalingstatechange","onsoundend","onsoundstart","onspeechend","onspeechstart","onstalled","onstart","onstatechange","onstop","onstorage","onstoragecommit","onsubmit","onsuccess","onsuspend","ontextinput","ontimeout","ontimeupdate","ontoggle","ontouchcancel","ontouchend","ontouchmove","ontouchstart","ontransitionend","onunload","onupdateready","onupgradeneeded","onuserproximity","onversionchange","onvoiceschanged","onvolumechange","onwaiting","onwarning","onwebkitanimationend","onwebkitanimationiteration","onwebkitanimationstart","onwebkitcurrentplaybacktargetiswirelesschanged","onwebkitfullscreenchange","onwebkitfullscreenerror","onwebkitkeyadded","onwebkitkeyerror","onwebkitkeymessage","onwebkitneedkey","onwebkitorientationchange","onwebkitplaybacktargetavailabilitychanged","onwebkitpointerlockchange","onwebkitpointerlockerror","onwebkitresourcetimingbufferfull","onwebkittransitionend","onwheel","onzoom","opacity","open","openCursor","openDatabase","openKeyCursor","opener","opera","operationType","operator","opr","optimum","options","order","orderX","orderY","ordered","org","orient","orientAngle","orientType","orientation","origin","originalTarget","orphans","oscpu","outerHTML","outerHeight","outerText","outerWidth","outline","outline-color","outline-offset","outline-style","outline-width","outlineColor","outlineOffset","outlineStyle","outlineWidth","outputBuffer","overflow","overflow-x","overflow-y","overflowX","overflowY","overrideMimeType","oversample","ownerDocument","ownerElement","ownerNode","ownerRule","ownerSVGElement","owningElement","p1","p2","p3","p4","pad","padding","padding-bottom","padding-left","padding-right","padding-top","paddingBottom","paddingLeft","paddingRight","paddingTop","page","page-break-after","page-break-before","page-break-inside","pageBreakAfter","pageBreakBefore","pageBreakInside","pageCount","pageX","pageXOffset","pageY","pageYOffset","pages","paint-order","paintOrder","paintRequests","paintType","palette","panningModel","parent","parentElement","parentNode","parentRule","parentStyleSheet","parentTextEdit","parentWindow","parse","parseFloat","parseFromString","parseInt","participants","passive","password","pasteHTML","path","pathLength","pathSegList","pathSegType","pathSegTypeAsLetter","pathname","pattern","patternContentUnits","patternMismatch","patternTransform","patternUnits","pause","pauseAnimations","pauseOnExit","paused","pending","performance","permission","persisted","personalbar","perspective","perspective-origin","perspectiveOrigin","phoneticFamilyName","phoneticGivenName","photo","ping","pitch","pixelBottom","pixelDepth","pixelHeight","pixelLeft","pixelRight","pixelStorei","pixelTop","pixelUnitToMillimeterX","pixelUnitToMillimeterY","pixelWidth","placeholder","platform","play","playbackRate","playbackState","playbackTime","played","plugins","pluginspage","pname","pointer-events","pointerBeforeReferenceNode","pointerEnabled","pointerEvents","pointerId","pointerLockElement","pointerType","points","pointsAtX","pointsAtY","pointsAtZ","polygonOffset","pop","popupWindowFeatures","popupWindowName","popupWindowURI","port","port1","port2","ports","posBottom","posHeight","posLeft","posRight","posTop","posWidth","position","positionAlign","postError","postMessage","poster","pow","powerOff","preMultiplySelf","precision","preferredStyleSheetSet","preferredStylesheetSet","prefix","preload","prepend","preserveAlpha","preserveAspectRatio","preserveAspectRatioString","pressed","pressure","prevValue","preventDefault","preventExtensions","previousElementSibling","previousNode","previousPage","previousScale","previousSibling","previousTranslate","primaryKey","primitiveType","primitiveUnits","principals","print","privateKey","probablySupportsContext","process","processIceMessage","product","productSub","profile","profileEnd","profiles","prompt","properties","propertyIsEnumerable","propertyName","protocol","protocolLong","prototype","pseudoClass","pseudoElement","publicId","publicKey","published","push","pushNotification","pushState","put","putImageData","quadraticCurveTo","qualifier","queryCommandEnabled","queryCommandIndeterm","queryCommandState","queryCommandSupported","queryCommandText","queryCommandValue","querySelector","querySelectorAll","quote","quotes","r","r1","r2","race","radiogroup","radiusX","radiusY","random","range","rangeCount","rangeMax","rangeMin","rangeOffset","rangeOverflow","rangeParent","rangeUnderflow","rate","ratio","raw","read","readAsArrayBuffer","readAsBinaryString","readAsBlob","readAsDataURL","readAsText","readOnly","readPixels","readReportRequested","readyState","reason","reboot","receiver","receivers","recordNumber","recordset","rect","red","redirectCount","redirectEnd","redirectStart","reduce","reduceRight","reduction","refDistance","refX","refY","referenceNode","referrer","refresh","region","regionAnchorX","regionAnchorY","regionId","regions","register","registerContentHandler","registerElement","registerProtocolHandler","reject","rel","relList","relatedNode","relatedTarget","release","releaseCapture","releaseEvents","releasePointerCapture","releaseShaderCompiler","reliable","reload","remainingSpace","remoteDescription","remove","removeAllRanges","removeAttribute","removeAttributeNS","removeAttributeNode","removeBehavior","removeChild","removeCue","removeEventListener","removeFilter","removeImport","removeItem","removeListener","removeNamedItem","removeNamedItemNS","removeNode","removeParameter","removeProperty","removeRange","removeRegion","removeRule","removeSiteSpecificTrackingException","removeSourceBuffer","removeStream","removeTrack","removeVariable","removeWakeLockListener","removeWebWideTrackingException","removedNodes","renderbufferStorage","renderedBuffer","renderingMode","repeat","replace","replaceAdjacentText","replaceChild","replaceData","replaceId","replaceItem","replaceNode","replaceState","replaceTrack","replaceWholeText","reportValidity","requestAnimationFrame","requestAutocomplete","requestData","requestFullscreen","requestMediaKeySystemAccess","requestPermission","requestPointerLock","requestStart","requestingWindow","required","requiredExtensions","requiredFeatures","reset","resetTransform","resize","resizeBy","resizeTo","resolve","response","responseBody","responseEnd","responseStart","responseText","responseType","responseURL","responseXML","restore","result","resultType","resume","returnValue","rev","reverse","reversed","revocable","revokeObjectURL","rgbColor","right","rightContext","rightMargin","rolloffFactor","root","rootElement","rotate","rotateAxisAngle","rotateAxisAngleSelf","rotateFromVector","rotateFromVectorSelf","rotateSelf","rotation","rotationRate","round","rowIndex","rowSpan","rows","rubyAlign","rubyOverhang","rubyPosition","rules","runtime","runtimeStyle","rx","ry","safari","sampleCoverage","sampleRate","sandbox","save","scale","scale3d","scale3dSelf","scaleNonUniform","scaleNonUniformSelf","scaleSelf","scheme","scissor","scope","scopeName","scoped","screen","screenBrightness","screenEnabled","screenLeft","screenPixelToMillimeterX","screenPixelToMillimeterY","screenTop","screenX","screenY","scripts","scroll","scroll-behavior","scrollAmount","scrollBehavior","scrollBy","scrollByLines","scrollByPages","scrollDelay","scrollHeight","scrollIntoView","scrollIntoViewIfNeeded","scrollLeft","scrollLeftMax","scrollMaxX","scrollMaxY","scrollTo","scrollTop","scrollTopMax","scrollWidth","scrollX","scrollY","scrollbar3dLightColor","scrollbarArrowColor","scrollbarBaseColor","scrollbarDarkShadowColor","scrollbarFaceColor","scrollbarHighlightColor","scrollbarShadowColor","scrollbarTrackColor","scrollbars","scrolling","sdp","sdpMLineIndex","sdpMid","seal","search","searchBox","searchBoxJavaBridge_","searchParams","sectionRowIndex","secureConnectionStart","security","seed","seekable","seeking","select","selectAllChildren","selectNode","selectNodeContents","selectNodes","selectSingleNode","selectSubString","selected","selectedIndex","selectedOptions","selectedStyleSheetSet","selectedStylesheetSet","selection","selectionDirection","selectionEnd","selectionStart","selector","selectorText","self","send","sendAsBinary","sendBeacon","sender","sentTimestamp","separator","serializeToString","serviceWorker","sessionId","sessionStorage","set","setActive","setAlpha","setAttribute","setAttributeNS","setAttributeNode","setAttributeNodeNS","setBaseAndExtent","setBingCurrentSearchDefault","setCapture","setColor","setCompositeOperation","setCurrentTime","setCustomValidity","setData","setDate","setDragImage","setEnd","setEndAfter","setEndBefore","setEndPoint","setFillColor","setFilterRes","setFloat32","setFloat64","setFloatValue","setFullYear","setHours","setImmediate","setInt16","setInt32","setInt8","setInterval","setItem","setLineCap","setLineDash","setLineJoin","setLineWidth","setLocalDescription","setMatrix","setMatrixValue","setMediaKeys","setMilliseconds","setMinutes","setMiterLimit","setMonth","setNamedItem","setNamedItemNS","setNonUserCodeExceptions","setOrientToAngle","setOrientToAuto","setOrientation","setOverrideHistoryNavigationMode","setPaint","setParameter","setPeriodicWave","setPointerCapture","setPosition","setPreference","setProperty","setPrototypeOf","setRGBColor","setRGBColorICCColor","setRadius","setRangeText","setRemoteDescription","setRequestHeader","setResizable","setResourceTimingBufferSize","setRotate","setScale","setSeconds","setSelectionRange","setServerCertificate","setShadow","setSkewX","setSkewY","setStart","setStartAfter","setStartBefore","setStdDeviation","setStringValue","setStrokeColor","setSuggestResult","setTargetAtTime","setTargetValueAtTime","setTime","setTimeout","setTransform","setTranslate","setUTCDate","setUTCFullYear","setUTCHours","setUTCMilliseconds","setUTCMinutes","setUTCMonth","setUTCSeconds","setUint16","setUint32","setUint8","setUri","setValueAtTime","setValueCurveAtTime","setVariable","setVelocity","setVersion","setYear","settingName","settingValue","sex","shaderSource","shadowBlur","shadowColor","shadowOffsetX","shadowOffsetY","shadowRoot","shape","shape-rendering","shapeRendering","sheet","shift","shiftKey","shiftLeft","show","showHelp","showModal","showModalDialog","showModelessDialog","showNotification","sidebar","sign","signalingState","sin","singleNodeValue","sinh","size","sizeToContent","sizes","skewX","skewXSelf","skewY","skewYSelf","slice","slope","small","smil","smooth","smoothingTimeConstant","snapToLines","snapshotItem","snapshotLength","some","sort","source","sourceBuffer","sourceBuffers","sourceIndex","spacing","span","speakAs","speaking","specified","specularConstant","specularExponent","speechSynthesis","speed","speedOfSound","spellcheck","splice","split","splitText","spreadMethod","sqrt","src","srcElement","srcFilter","srcUrn","srcdoc","srclang","srcset","stack","stackTraceLimit","stacktrace","standalone","standby","start","startContainer","startIce","startOffset","startRendering","startTime","startsWith","state","status","statusMessage","statusText","statusbar","stdDeviationX","stdDeviationY","stencilFunc","stencilFuncSeparate","stencilMask","stencilMaskSeparate","stencilOp","stencilOpSeparate","step","stepDown","stepMismatch","stepUp","sticky","stitchTiles","stop","stop-color","stop-opacity","stopColor","stopImmediatePropagation","stopOpacity","stopPropagation","storageArea","storageName","storageStatus","storeSiteSpecificTrackingException","storeWebWideTrackingException","stpVersion","stream","strike","stringValue","stringify","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","strokeDasharray","strokeDashoffset","strokeLinecap","strokeLinejoin","strokeMiterlimit","strokeOpacity","strokeRect","strokeStyle","strokeText","strokeWidth","style","styleFloat","styleMedia","styleSheet","styleSheetSets","styleSheets","sub","subarray","subject","submit","subscribe","substr","substring","substringData","subtle","subtree","suffix","suffixes","summary","sup","supports","surfaceScale","surroundContents","suspend","suspendRedraw","swapCache","swapNode","sweepFlag","symbols","system","systemCode","systemId","systemLanguage","systemXDPI","systemYDPI","tBodies","tFoot","tHead","tabIndex","table","table-layout","tableLayout","tableValues","tag","tagName","tagUrn","tags","taintEnabled","takeRecords","tan","tanh","target","targetElement","targetTouches","targetX","targetY","tel","terminate","test","texImage2D","texParameterf","texParameteri","texSubImage2D","text","text-align","text-anchor","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-indent","text-overflow","text-rendering","text-shadow","text-transform","textAlign","textAlignLast","textAnchor","textAutospace","textBaseline","textContent","textDecoration","textDecorationBlink","textDecorationColor","textDecorationLine","textDecorationLineThrough","textDecorationNone","textDecorationOverline","textDecorationStyle","textDecorationUnderline","textIndent","textJustify","textJustifyTrim","textKashida","textKashidaSpace","textLength","textOverflow","textRendering","textShadow","textTracks","textTransform","textUnderlinePosition","then","threadId","threshold","tiltX","tiltY","time","timeEnd","timeStamp","timeout","timestamp","timestampOffset","timing","title","toArray","toBlob","toDataURL","toDateString","toElement","toExponential","toFixed","toFloat32Array","toFloat64Array","toGMTString","toISOString","toJSON","toLocaleDateString","toLocaleFormat","toLocaleLowerCase","toLocaleString","toLocaleTimeString","toLocaleUpperCase","toLowerCase","toMethod","toPrecision","toSdp","toSource","toStaticHTML","toString","toStringTag","toTimeString","toUTCString","toUpperCase","toggle","toggleLongPressEnabled","tooLong","toolbar","top","topMargin","total","totalFrameDelay","totalVideoFrames","touchAction","touches","trace","track","transaction","transactions","transform","transform-origin","transform-style","transformOrigin","transformPoint","transformString","transformStyle","transformToDocument","transformToFragment","transition","transition-delay","transition-duration","transition-property","transition-timing-function","transitionDelay","transitionDuration","transitionProperty","transitionTimingFunction","translate","translateSelf","translationX","translationY","trim","trimLeft","trimRight","trueSpeed","trunc","truncate","type","typeDetail","typeMismatch","typeMustMatch","types","ubound","undefined","unescape","uneval","unicode-bidi","unicodeBidi","uniform1f","uniform1fv","uniform1i","uniform1iv","uniform2f","uniform2fv","uniform2i","uniform2iv","uniform3f","uniform3fv","uniform3i","uniform3iv","uniform4f","uniform4fv","uniform4i","uniform4iv","uniformMatrix2fv","uniformMatrix3fv","uniformMatrix4fv","unique","uniqueID","uniqueNumber","unitType","units","unloadEventEnd","unloadEventStart","unlock","unmount","unobserve","unpause","unpauseAnimations","unreadCount","unregister","unregisterContentHandler","unregisterProtocolHandler","unscopables","unselectable","unshift","unsubscribe","unsuspendRedraw","unsuspendRedrawAll","unwatch","unwrapKey","update","updateCommands","updateIce","updateInterval","updateSettings","updated","updating","upload","upper","upperBound","upperOpen","uri","url","urn","urns","usages","useCurrentView","useMap","useProgram","usedSpace","userAgent","userLanguage","username","v8BreakIterator","vAlign","vLink","valid","validateProgram","validationMessage","validity","value","valueAsDate","valueAsNumber","valueAsString","valueInSpecifiedUnits","valueMissing","valueOf","valueText","valueType","values","vector-effect","vectorEffect","velocityAngular","velocityExpansion","velocityX","velocityY","vendor","vendorSub","verify","version","vertexAttrib1f","vertexAttrib1fv","vertexAttrib2f","vertexAttrib2fv","vertexAttrib3f","vertexAttrib3fv","vertexAttrib4f","vertexAttrib4fv","vertexAttribDivisorANGLE","vertexAttribPointer","vertical","vertical-align","verticalAlign","verticalOverflow","vibrate","videoHeight","videoTracks","videoWidth","view","viewBox","viewBoxString","viewTarget","viewTargetString","viewport","viewportAnchorX","viewportAnchorY","viewportElement","visibility","visibilityState","visible","vlinkColor","voice","volume","vrml","vspace","w","wand","warn","wasClean","watch","watchPosition","webdriver","webkitAddKey","webkitAnimation","webkitAnimationDelay","webkitAnimationDirection","webkitAnimationDuration","webkitAnimationFillMode","webkitAnimationIterationCount","webkitAnimationName","webkitAnimationPlayState","webkitAnimationTimingFunction","webkitAppearance","webkitAudioContext","webkitAudioDecodedByteCount","webkitAudioPannerNode","webkitBackfaceVisibility","webkitBackground","webkitBackgroundAttachment","webkitBackgroundClip","webkitBackgroundColor","webkitBackgroundImage","webkitBackgroundOrigin","webkitBackgroundPosition","webkitBackgroundPositionX","webkitBackgroundPositionY","webkitBackgroundRepeat","webkitBackgroundSize","webkitBackingStorePixelRatio","webkitBorderImage","webkitBorderImageOutset","webkitBorderImageRepeat","webkitBorderImageSlice","webkitBorderImageSource","webkitBorderImageWidth","webkitBoxAlign","webkitBoxDirection","webkitBoxFlex","webkitBoxOrdinalGroup","webkitBoxOrient","webkitBoxPack","webkitBoxSizing","webkitCancelAnimationFrame","webkitCancelFullScreen","webkitCancelKeyRequest","webkitCancelRequestAnimationFrame","webkitClearResourceTimings","webkitClosedCaptionsVisible","webkitConvertPointFromNodeToPage","webkitConvertPointFromPageToNode","webkitCreateShadowRoot","webkitCurrentFullScreenElement","webkitCurrentPlaybackTargetIsWireless","webkitDirectionInvertedFromDevice","webkitDisplayingFullscreen","webkitEnterFullScreen","webkitEnterFullscreen","webkitExitFullScreen","webkitExitFullscreen","webkitExitPointerLock","webkitFullScreenKeyboardInputAllowed","webkitFullscreenElement","webkitFullscreenEnabled","webkitGenerateKeyRequest","webkitGetAsEntry","webkitGetDatabaseNames","webkitGetEntries","webkitGetEntriesByName","webkitGetEntriesByType","webkitGetFlowByName","webkitGetGamepads","webkitGetImageDataHD","webkitGetNamedFlows","webkitGetRegionFlowRanges","webkitGetUserMedia","webkitHasClosedCaptions","webkitHidden","webkitIDBCursor","webkitIDBDatabase","webkitIDBDatabaseError","webkitIDBDatabaseException","webkitIDBFactory","webkitIDBIndex","webkitIDBKeyRange","webkitIDBObjectStore","webkitIDBRequest","webkitIDBTransaction","webkitImageSmoothingEnabled","webkitIndexedDB","webkitInitMessageEvent","webkitIsFullScreen","webkitKeys","webkitLineDashOffset","webkitLockOrientation","webkitMatchesSelector","webkitMediaStream","webkitNotifications","webkitOfflineAudioContext","webkitOrientation","webkitPeerConnection00","webkitPersistentStorage","webkitPointerLockElement","webkitPostMessage","webkitPreservesPitch","webkitPutImageDataHD","webkitRTCPeerConnection","webkitRegionOverset","webkitRequestAnimationFrame","webkitRequestFileSystem","webkitRequestFullScreen","webkitRequestFullscreen","webkitRequestPointerLock","webkitResolveLocalFileSystemURL","webkitSetMediaKeys","webkitSetResourceTimingBufferSize","webkitShadowRoot","webkitShowPlaybackTargetPicker","webkitSlice","webkitSpeechGrammar","webkitSpeechGrammarList","webkitSpeechRecognition","webkitSpeechRecognitionError","webkitSpeechRecognitionEvent","webkitStorageInfo","webkitSupportsFullscreen","webkitTemporaryStorage","webkitTextSizeAdjust","webkitTransform","webkitTransformOrigin","webkitTransition","webkitTransitionDelay","webkitTransitionDuration","webkitTransitionProperty","webkitTransitionTimingFunction","webkitURL","webkitUnlockOrientation","webkitUserSelect","webkitVideoDecodedByteCount","webkitVisibilityState","webkitWirelessVideoPlaybackDisabled","webkitdropzone","webstore","weight","whatToShow","wheelDelta","wheelDeltaX","wheelDeltaY","which","white-space","whiteSpace","wholeText","widows","width","will-change","willChange","willValidate","window","withCredentials","word-break","word-spacing","word-wrap","wordBreak","wordSpacing","wordWrap","wrap","wrapKey","write","writeln","writingMode","x","x1","x2","xChannelSelector","xmlEncoding","xmlStandalone","xmlVersion","xmlbase","xmllang","xmlspace","y","y1","y2","yChannelSelector","yandex","z","z-index","zIndex","zoom","zoomAndPan","zoomRectScreen"];function lr(e,t){function n(e){_(t,e)}e.walk(new On((function(e){e instanceof wt&&e.quote?n(e.key):e instanceof Rt&&e.quote?n(e.key.name):e instanceof St&&fr(e.property,n)})))}function fr(e,t){e.walk(new On((function(e){return e instanceof Et?fr(e.tail_node(),t):e instanceof fn?t(e.value):e instanceof bt&&(fr(e.consequent,t),fr(e.alternative,t)),!0})))}function pr(e,t){var n=(t=o(t,{builtins:!1,cache:null,debug:!1,keep_quoted:!1,only_cache:!1,regex:null,reserved:null,undeclared:!1},!0)).reserved;Array.isArray(n)||(n=[n]);var i=new Set(n);t.builtins||function(e){cr.forEach(i);var t={},n="object"==typeof global?global:self;function i(t){e.add(t)}["Symbol","Map","Promise","Proxy","Reflect","Set","WeakMap","WeakSet"].forEach((function(e){t[e]=n[e]||new Function})),["null","true","false","NaN","Infinity","-Infinity","undefined"].forEach(i),[Object,Array,Function,Number,String,Boolean,Error,Math,Date,RegExp,t.Symbol,ArrayBuffer,DataView,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,eval,EvalError,Float32Array,Float64Array,Int8Array,Int16Array,Int32Array,isFinite,isNaN,JSON,t.Map,parseFloat,parseInt,t.Promise,t.Proxy,RangeError,ReferenceError,t.Reflect,t.Set,SyntaxError,TypeError,Uint8Array,Uint8ClampedArray,Uint16Array,Uint32Array,URIError,t.WeakMap,t.WeakSet].forEach((function(e){Object.getOwnPropertyNames(e).map(i),e.prototype&&Object.getOwnPropertyNames(e.prototype).map(i)}))}(i);var r,a=-1;t.cache?(r=t.cache.props).forEach((function(e){i.add(e)})):r=new Map;var s,u=t.regex&&new RegExp(t.regex),c=!1!==t.debug;c&&(s=!0===t.debug?"":t.debug);var l=new Set,f=new Set,p="strict"===t.keep_quoted;return e.walk(new On((function(e){if(e instanceof wt)"string"!=typeof e.key||p&&e.quote||m(e.key);else if(e instanceof Rt)p&&e.key.end.quote||m(e.key.name);else if(e instanceof Dt){var n=!!t.undeclared;if(!n){for(var i=e;i.expression;)i=i.expression;n=!(i.thedef&&i.thedef.undeclared)}!n||p&&e.quote||m(e.property)}else e instanceof St?p||fr(e.property,m):e instanceof mt&&"Object.defineProperty"==e.expression.print_to_string()&&fr(e.args[1],m)}))),e.transform(new Fn((function(e){e instanceof wt?"string"!=typeof e.key||p&&e.quote||(e.key=h(e.key)):e instanceof Rt?p&&e.key.end.quote||(e.key.name=h(e.key.name)):e instanceof Dt?p&&e.quote||(e.property=h(e.property)):!t.keep_quoted&&e instanceof St?e.property=E(e.property):e instanceof mt&&"Object.defineProperty"==e.expression.print_to_string()&&(e.args[1]=E(e.args[1]))})));function _(e){return!f.has(e)&&(!i.has(e)&&(t.only_cache?r.has(e):!/^-?[0-9]+(\.[0-9]+)?(e[+-][0-9]+)?$/.test(e)))}function d(e){return!(u&&!u.test(e))&&(!i.has(e)&&(r.has(e)||l.has(e)))}function m(e){_(e)&&l.add(e),d(e)||f.add(e)}function h(e){if(!d(e))return e;var t=r.get(e);if(!t){if(c){var n="_$"+e+"$"+s+"_";_(n)&&(t=n)}if(!t)do{t=qn(++a)}while(!_(t));r.set(e,t)}return t}function E(e){return e.transform(new Fn((function(e){if(e instanceof Et){var t=e.expressions.length-1;e.expressions[t]=E(e.expressions[t])}else e instanceof fn?e.value=h(e.value):e instanceof bt&&(e.consequent=E(e.consequent),e.alternative=E(e.alternative));return e})))}}var _r="undefined"==typeof atob?function(e){return Buffer.from(e,"base64").toString()}:atob,dr="undefined"==typeof btoa?function(e){return Buffer.from(e).toString("base64")}:btoa;function mr(e,t,n){t[e]&&n.forEach((function(n){t[n]&&("object"!=typeof t[n]&&(t[n]={}),e in t[n]||(t[n][e]=t[e]))}))}function hr(e){e&&("props"in e?e.props instanceof Map||(e.props=function(e){var t=new Map;for(var n in e)D(e,n)&&"$"===n.charAt(0)&&t.set(n.substr(1),e[n]);return t}(e.props)):e.props=new Map)}function Er(e){return{props:(t=e.props,n=Object.create(null),t.forEach((function(e,t){n["$"+t]=e})),n)};var t,n}function gr(e,n){var i,r,a=pe.warn_function;try{var s,u=(n=o(n,{compress:{},ecma:void 0,enclose:!1,ie8:!1,keep_classnames:void 0,keep_fnames:!1,mangle:{},module:!1,nameCache:null,output:{},parse:{},rename:void 0,safari10:!1,sourceMap:!1,timings:!1,toplevel:!1,warnings:!1,wrap:!1},!0)).timings&&{start:Date.now()};void 0===n.keep_classnames&&(n.keep_classnames=n.keep_fnames),void 0===n.rename&&(n.rename=n.compress&&n.mangle),mr("ecma",n,["parse","compress","output"]),mr("ie8",n,["compress","mangle","output"]),mr("keep_classnames",n,["compress","mangle"]),mr("keep_fnames",n,["compress","mangle"]),mr("module",n,["parse","compress","mangle"]),mr("safari10",n,["mangle","output"]),mr("toplevel",n,["compress","mangle"]),mr("warnings",n,["compress"]),n.mangle&&(n.mangle=o(n.mangle,{cache:n.nameCache&&(n.nameCache.vars||{}),eval:!1,ie8:!1,keep_classnames:!1,keep_fnames:!1,module:!1,properties:!1,reserved:[],safari10:!1,toplevel:!1},!0),n.mangle.properties&&("object"!=typeof n.mangle.properties&&(n.mangle.properties={}),n.mangle.properties.keep_quoted&&(s=n.mangle.properties.reserved,Array.isArray(s)||(s=[]),n.mangle.properties.reserved=s),!n.nameCache||"cache"in n.mangle.properties||(n.mangle.properties.cache=n.nameCache.props||{})),hr(n.mangle.cache),hr(n.mangle.properties.cache)),n.sourceMap&&(n.sourceMap=o(n.sourceMap,{asObject:!1,content:null,filename:null,includeSources:!1,root:null,url:null},!0));var c,l=[];if(n.warnings&&!pe.warn_function&&(pe.warn_function=function(e){l.push(e)}),u&&(u.parse=Date.now()),e instanceof Ne)c=e;else{for(var f in"string"==typeof e&&(e=[e]),n.parse=n.parse||{},n.parse.toplevel=null,e)if(D(e,f)&&(n.parse.filename=f,n.parse.toplevel=ce(e[f],n.parse),n.sourceMap&&"inline"==n.sourceMap.content)){if(Object.keys(e).length>1)throw new Error("inline source map only works with singular input");n.sourceMap.content=(i=e[f],r=void 0,(r=/(?:^|[^.])\/\/# sourceMappingURL=data:application\/json(;[\w=-]*)?;base64,([+/0-9A-Za-z]*=*)\s*$/.exec(i))?_r(r[2]):(pe.warn("inline source map not found"),null))}c=n.parse.toplevel}s&&"strict"!==n.mangle.properties.keep_quoted&&lr(c,s),n.wrap&&(c=c.wrap_commonjs(n.wrap)),n.enclose&&(c=c.wrap_enclose(n.enclose)),u&&(u.rename=Date.now()),u&&(u.compress=Date.now()),n.compress&&(c=new ai(n.compress).compress(c)),u&&(u.scope=Date.now()),n.mangle&&c.figure_out_scope(n.mangle),u&&(u.mangle=Date.now()),n.mangle&&(qn.reset(),c.compute_char_frequency(n.mangle),c.mangle_names(n.mangle)),u&&(u.properties=Date.now()),n.mangle&&n.mangle.properties&&(c=pr(c,n.mangle.properties)),u&&(u.output=Date.now());var p={};if(n.output.ast&&(p.ast=c),!D(n.output,"code")||n.output.code){if(n.sourceMap&&("string"==typeof n.sourceMap.content&&(n.sourceMap.content=JSON.parse(n.sourceMap.content)),n.output.source_map=function(e){e=o(e,{file:null,root:null,orig:null,orig_line_diff:0,dest_line_diff:0});var n=new t.SourceMapGenerator({file:e.file,sourceRoot:e.root}),i=e.orig&&new t.SourceMapConsumer(e.orig);return i&&i.sources.forEach((function(e){var t=i.sourceContentFor(e,!0);t&&n.setSourceContent(e,t)})),{add:function(t,r,o,a,s,u){if(i){var c=i.originalPositionFor({line:a,column:s});if(null===c.source)return;t=c.source,a=c.line,s=c.column,u=c.name||u}n.addMapping({generated:{line:r+e.dest_line_diff,column:o},original:{line:a+e.orig_line_diff,column:s},source:t,name:u})},get:function(){return n},toString:function(){return JSON.stringify(n.toJSON())}}}({file:n.sourceMap.filename,orig:n.sourceMap.content,root:n.sourceMap.root}),n.sourceMap.includeSources)){if(e instanceof Ne)throw new Error("original source content unavailable");for(var f in e)D(e,f)&&n.output.source_map.get().setSourceContent(f,e[f])}delete n.output.ast,delete n.output.code;var _=Bn(n.output);if(c.print(_),p.code=_.get(),n.sourceMap)if(n.sourceMap.asObject?p.map=n.output.source_map.get().toJSON():p.map=n.output.source_map.toString(),"inline"==n.sourceMap.url){var d="object"==typeof p.map?JSON.stringify(p.map):p.map;p.code+="\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,"+dr(d)}else n.sourceMap.url&&(p.code+="\n//# sourceMappingURL="+n.sourceMap.url)}return n.nameCache&&n.mangle&&(n.mangle.cache&&(n.nameCache.vars=Er(n.mangle.cache)),n.mangle.properties&&n.mangle.properties.cache&&(n.nameCache.props=Er(n.mangle.properties.cache))),u&&(u.end=Date.now(),p.timings={parse:.001*(u.rename-u.parse),rename:.001*(u.compress-u.rename),compress:.001*(u.scope-u.compress),scope:.001*(u.mangle-u.scope),mangle:.001*(u.properties-u.mangle),properties:.001*(u.output-u.properties),output:.001*(u.end-u.output),total:.001*(u.end-u.start)}),l.length&&(p.warnings=l),p}catch(e){return{error:e}}finally{pe.warn_function=a}}!function(){var e=function(e){for(var t=!0,n=0;n<e.length;n++)t&&e[n]instanceof _e&&e[n].body instanceof fn?e[n]=new me({start:e[n].start,end:e[n].end,value:e[n].body.value}):!t||e[n]instanceof _e&&e[n].body instanceof fn||(t=!1);return e},t={Program:function(t){return new Ne({start:i(t),end:r(t),body:e(t.body.map(s))})},ArrayPattern:function(e){return new Ke({start:i(e),end:r(e),names:e.elements.map((function(e){return null===e?new Dn:s(e)})),is_array:!0})},ObjectPattern:function(e){return new Ke({start:i(e),end:r(e),names:e.properties.map(s),is_array:!1})},AssignmentPattern:function(e){return new Ot({start:i(e),end:r(e),left:s(e.left),operator:"=",right:s(e.right)})},SpreadElement:function(e){return new ke({start:i(e),end:r(e),expression:s(e.argument)})},RestElement:function(e){return new ke({start:i(e),end:r(e),expression:s(e.argument)})},TemplateElement:function(e){return new He({start:i(e),end:r(e),value:e.value.cooked,raw:e.value.raw})},TemplateLiteral:function(e){for(var t=[],n=0;n<e.quasis.length;n++)t.push(s(e.quasis[n])),e.expressions[n]&&t.push(s(e.expressions[n]));return new Ge({start:i(e),end:r(e),segments:t})},TaggedTemplateExpression:function(e){return new Ue({start:i(e),end:r(e),template_string:s(e.quasi),prefix:s(e.tag)})},FunctionDeclaration:function(t){return new Be({start:i(t),end:r(t),name:s(t.id),argnames:t.params.map(s),is_generator:t.generator,async:t.async,body:e(s(t.body).body)})},FunctionExpression:function(t){return new Pe({start:i(t),end:r(t),name:s(t.id),argnames:t.params.map(s),is_generator:t.generator,async:t.async,body:e(s(t.body).body)})},ArrowFunctionExpression:function(e){const t="BlockStatement"===e.body.type?s(e.body).body:[p(We,{},{value:s(e.body)})];return new Ve({start:i(e),end:r(e),argnames:e.params.map(s),body:t,async:e.async})},ExpressionStatement:function(e){return new he({start:i(e),end:r(e),body:s(e.expression)})},TryStatement:function(e){var t=e.handlers||[e.handler];if(t.length>1||e.guardedHandlers&&e.guardedHandlers.length)throw new Error("Multiple catch clauses are not supported.");return new rt({start:i(e),end:r(e),body:s(e.block).body,bcatch:s(t[0]),bfinally:e.finalizer?new at(s(e.finalizer)):null})},Property:function(e){var t=e.key,n={start:i(t||e.value),end:r(e.value),key:"Identifier"==t.type?t.name:t.value,value:s(e.value)};return e.computed&&(n.key=s(e.key)),e.method?(n.is_generator=e.value.generator,n.async=e.value.async,e.computed?n.key=s(e.key):n.key=new qt({name:n.key}),new kt(n)):"init"==e.kind?("Identifier"!=t.type&&"Literal"!=t.type&&(n.key=s(t)),new wt(n)):("string"!=typeof n.key&&"number"!=typeof n.key||(n.key=new qt({name:n.key})),n.value=new Le(n.value),"get"==e.kind?new Nt(n):"set"==e.kind?new xt(n):"method"==e.kind?(n.async=e.value.async,n.is_generator=e.value.generator,n.quote=e.computed?'"':null,new kt(n)):void 0)},MethodDefinition:function(e){var t={start:i(e),end:r(e),key:e.computed?s(e.key):new qt({name:e.key.name||e.key.value}),value:s(e.value),static:e.static};return"get"==e.kind?new Nt(t):"set"==e.kind?new xt(t):(t.is_generator=e.value.generator,t.async=e.value.async,new kt(t))},FieldDefinition:function(e){let t;if(e.computed)t=s(e.key);else{if("Identifier"!==e.key.type)throw new Error("Non-Identifier key in FieldDefinition");t=s(e.key)}return new Lt({start:i(e),end:r(e),key:t,value:s(e.value),static:e.static})},ArrayExpression:function(e){return new Ft({start:i(e),end:r(e),elements:e.elements.map((function(e){return null===e?new Dn:s(e)}))})},ObjectExpression:function(e){return new Mt({start:i(e),end:r(e),properties:e.properties.map((function(e){return"SpreadElement"===e.type||(e.type="Property"),s(e)}))})},SequenceExpression:function(e){return new Et({start:i(e),end:r(e),expressions:e.expressions.map(s)})},MemberExpression:function(e){return new(e.computed?St:Dt)({start:i(e),end:r(e),property:e.computed?s(e.property):e.property.name,expression:s(e.object)})},SwitchCase:function(e){return new(e.test?it:nt)({start:i(e),end:r(e),expression:s(e.test),body:e.consequent.map(s)})},VariableDeclaration:function(e){return new("const"===e.kind?lt:"let"===e.kind?ct:ut)({start:i(e),end:r(e),definitions:e.declarations.map(s)})},ImportDeclaration:function(e){var t=null,n=null;return e.specifiers.forEach((function(e){"ImportSpecifier"===e.type?(n||(n=[]),n.push(new pt({start:i(e),end:r(e),foreign_name:s(e.imported),name:s(e.local)}))):"ImportDefaultSpecifier"===e.type?t=s(e.local):"ImportNamespaceSpecifier"===e.type&&(n||(n=[]),n.push(new pt({start:i(e),end:r(e),foreign_name:new tn({name:"*"}),name:s(e.local)})))})),new _t({start:i(e),end:r(e),imported_name:t,imported_names:n,module_name:s(e.source)})},ExportAllDeclaration:function(e){return new dt({start:i(e),end:r(e),exported_names:[new pt({name:new an({name:"*"}),foreign_name:new an({name:"*"})})],module_name:s(e.source)})},ExportNamedDeclaration:function(e){return new dt({start:i(e),end:r(e),exported_definition:s(e.declaration),exported_names:e.specifiers&&e.specifiers.length?e.specifiers.map((function(e){return new pt({foreign_name:s(e.exported),name:s(e.local)})})):null,module_name:s(e.source)})},ExportDefaultDeclaration:function(e){return new dt({start:i(e),end:r(e),exported_value:s(e.declaration),is_default:!0})},Literal:function(e){var t=e.value,n={start:i(e),end:r(e)},o=e.regex;if(o&&o.pattern)return n.value={source:o.pattern,flags:o.flags},new dn(n);if(o){const i=e.raw||t,r=i.match(/^\/(.*)\/(\w*)$/);if(!r)throw new Error("Invalid regex source "+i);const[o,a,s]=r;return n.value={source:a,flags:s},new dn(n)}if(null===t)return new hn(n);switch(typeof t){case"string":return n.value=t,new fn(n);case"number":return n.value=t,new pn(n);case"boolean":return new(t?Tn:An)(n)}},MetaProperty:function(e){if("new"===e.meta.name&&"target"===e.property.name)return new Kt({start:i(e),end:r(e)})},Identifier:function(e){var t=a[a.length-2];return new("LabeledStatement"==t.type?nn:"VariableDeclarator"==t.type&&t.id===e?"const"==t.kind?Xt:"let"==t.kind?zt:Gt:/Import.*Specifier/.test(t.type)?t.local===e?en:tn:"ExportSpecifier"==t.type?t.local===e?on:an:"FunctionExpression"==t.type?t.id===e?jt:Wt:"FunctionDeclaration"==t.type?t.id===e?Yt:Wt:"ArrowFunctionExpression"==t.type?t.params.includes(e)?Wt:rn:"ClassExpression"==t.type?t.id===e?Jt:rn:"Property"==t.type?t.key===e&&t.computed||t.value===e?rn:qt:"FieldDefinition"==t.type?t.key===e&&t.computed||t.value===e?rn:$t:"ClassDeclaration"==t.type?t.id===e?Zt:rn:"MethodDefinition"==t.type?t.computed?rn:qt:"CatchClause"==t.type?Qt:"BreakStatement"==t.type||"ContinueStatement"==t.type?sn:rn)({start:i(e),end:r(e),name:e.name})},BigIntLiteral:e=>new _n({start:i(e),end:r(e),value:e.value})};function n(e){if("Literal"==e.type)return null!=e.raw?e.raw:e.value+""}function i(e){var t=e.loc,i=t&&t.start,r=e.range;return new fe({file:t&&t.source,line:i&&i.line,col:i&&i.column,pos:r?r[0]:e.start,endline:i&&i.line,endcol:i&&i.column,endpos:r?r[0]:e.start,raw:n(e)})}function r(e){var t=e.loc,i=t&&t.end,r=e.range;return new fe({file:t&&t.source,line:i&&i.line,col:i&&i.column,pos:r?r[1]:e.end,endline:i&&i.line,endcol:i&&i.column,endpos:r?r[1]:e.end,raw:n(e)})}function o(e,n,o){var a="function From_Moz_"+e+"(M){\n";a+="return new U2."+n.name+"({\nstart: my_start_token(M),\nend: my_end_token(M)";var c="function To_Moz_"+e+"(M){\n";c+="return {\ntype: "+JSON.stringify(e),o&&o.split(/\s*,\s*/).forEach((function(e){var t=/([a-z0-9$_]+)([=@>%])([a-z0-9$_]+)/i.exec(e);if(!t)throw new Error("Can't understand property map: "+e);var n=t[1],i=t[2],r=t[3];switch(a+=",\n"+r+": ",c+=",\n"+n+": ",i){case"@":a+="M."+n+".map(from_moz)",c+="M."+r+".map(to_moz)";break;case">":a+="from_moz(M."+n+")",c+="to_moz(M."+r+")";break;case"=":a+="M."+n,c+="M."+r;break;case"%":a+="from_moz(M."+n+").body",c+="to_moz_block(M)";break;default:throw new Error("Can't understand operator in propmap: "+e)}})),a+="\n})\n}",c+="\n}\n}",a=new Function("U2","my_start_token","my_end_token","from_moz","return("+a+")")(xn,i,r,s),c=new Function("to_moz","to_moz_block","to_moz_scope","return("+c+")")(l,_,d),t[e]=a,u(n,c)}t.UpdateExpression=t.UnaryExpression=function(e){return new(("prefix"in e?e.prefix:"UnaryExpression"==e.type)?At:Tt)({start:i(e),end:r(e),operator:e.operator,expression:s(e.argument)})},t.ClassDeclaration=t.ClassExpression=function(e){return new("ClassDeclaration"===e.type?Pt:Vt)({start:i(e),end:r(e),name:s(e.id),extends:s(e.superClass),properties:e.body.body.map(s)})},o("EmptyStatement",ve),o("BlockStatement",Se,"body@body"),o("IfStatement",Qe,"test>condition, consequent>body, alternate>alternative"),o("LabeledStatement",Te,"label>label, body>body"),o("BreakStatement",$e,"label>label"),o("ContinueStatement",je,"label>label"),o("WithStatement",we,"object>expression, body>body"),o("SwitchStatement",et,"discriminant>expression, cases@body"),o("ReturnStatement",We,"argument>value"),o("ThrowStatement",Ye,"argument>value"),o("WhileStatement",Oe,"test>condition, body>body"),o("DoWhileStatement",Ce,"test>condition, body>body"),o("ForStatement",Fe,"init>init, test>condition, update>step, body>body"),o("ForInStatement",Me,"left>init, right>object, body>body"),o("ForOfStatement",Re,"left>init, right>object, body>body, await=await"),o("AwaitExpression",Ze,"argument>expression"),o("YieldExpression",Je,"argument>expression, delegate=is_star"),o("DebuggerStatement",de),o("VariableDeclarator",ft,"id>name, init>value"),o("CatchClause",ot,"param>argname, body%body"),o("ThisExpression",un),o("Super",cn),o("BinaryExpression",yt,"operator=operator, left>left, right>right"),o("LogicalExpression",yt,"operator=operator, left>left, right>right"),o("AssignmentExpression",Ct,"operator=operator, left>left, right>right"),o("ConditionalExpression",bt,"test>condition, consequent>consequent, alternate>alternative"),o("NewExpression",ht,"callee>expression, arguments@args"),o("CallExpression",mt,"callee>expression, arguments@args"),u(Ne,(function(e){return d("Program",e)})),u(ke,(function(e){return{type:f()?"RestElement":"SpreadElement",argument:l(e.expression)}})),u(Ue,(function(e){return{type:"TaggedTemplateExpression",tag:l(e.prefix),quasi:l(e.template_string)}})),u(Ge,(function(e){for(var t=[],n=[],i=0;i<e.segments.length;i++)i%2!=0?n.push(l(e.segments[i])):t.push({type:"TemplateElement",value:{raw:e.segments[i].raw,cooked:e.segments[i].value},tail:i===e.segments.length-1});return{type:"TemplateLiteral",quasis:t,expressions:n}})),u(Be,(function(e){return{type:"FunctionDeclaration",id:l(e.name),params:e.argnames.map(l),generator:e.is_generator,async:e.async,body:d("BlockStatement",e)}})),u(Pe,(function(e,t){var n=void 0!==t.is_generator?t.is_generator:e.is_generator;return{type:"FunctionExpression",id:l(e.name),params:e.argnames.map(l),generator:n,async:e.async,body:d("BlockStatement",e)}})),u(Ve,(function(e){var t={type:"BlockStatement",body:e.body.map(l)};return{type:"ArrowFunctionExpression",params:e.argnames.map(l),async:e.async,body:t}})),u(Ke,(function(e){return e.is_array?{type:"ArrayPattern",elements:e.names.map(l)}:{type:"ObjectPattern",properties:e.names.map(l)}})),u(me,(function(e){return{type:"ExpressionStatement",expression:{type:"Literal",value:e.value,raw:e.print_to_string()},directive:e.value}})),u(he,(function(e){return{type:"ExpressionStatement",expression:l(e.body)}})),u(tt,(function(e){return{type:"SwitchCase",test:l(e.expression),consequent:e.body.map(l)}})),u(rt,(function(e){return{type:"TryStatement",block:_(e),handler:l(e.bcatch),guardedHandlers:[],finalizer:l(e.bfinally)}})),u(ot,(function(e){return{type:"CatchClause",param:l(e.argname),guard:null,body:_(e)}})),u(st,(function(e){return{type:"VariableDeclaration",kind:e instanceof lt?"const":e instanceof ct?"let":"var",declarations:e.definitions.map(l)}})),u(dt,(function(e){return e.exported_names?"*"===e.exported_names[0].name.name?{type:"ExportAllDeclaration",source:l(e.module_name)}:{type:"ExportNamedDeclaration",specifiers:e.exported_names.map((function(e){return{type:"ExportSpecifier",exported:l(e.foreign_name),local:l(e.name)}})),declaration:l(e.exported_definition),source:l(e.module_name)}:{type:e.is_default?"ExportDefaultDeclaration":"ExportNamedDeclaration",declaration:l(e.exported_value||e.exported_definition)}})),u(_t,(function(e){var t=[];return e.imported_name&&t.push({type:"ImportDefaultSpecifier",local:l(e.imported_name)}),e.imported_names&&"*"===e.imported_names[0].foreign_name.name?t.push({type:"ImportNamespaceSpecifier",local:l(e.imported_names[0].name)}):e.imported_names&&e.imported_names.forEach((function(e){t.push({type:"ImportSpecifier",local:l(e.name),imported:l(e.foreign_name)})})),{type:"ImportDeclaration",specifiers:t,source:l(e.module_name)}})),u(Et,(function(e){return{type:"SequenceExpression",expressions:e.expressions.map(l)}})),u(gt,(function(e){var t=e instanceof St;return{type:"MemberExpression",object:l(e.expression),computed:t,property:t?l(e.property):{type:"Identifier",name:e.property}}})),u(vt,(function(e){return{type:"++"==e.operator||"--"==e.operator?"UpdateExpression":"UnaryExpression",operator:e.operator,prefix:e instanceof At,argument:l(e.expression)}})),u(yt,(function(e){if("="==e.operator&&f())return{type:"AssignmentPattern",left:l(e.left),right:l(e.right)};return{type:"&&"==e.operator||"||"==e.operator||"??"===e.operator?"LogicalExpression":"BinaryExpression",left:l(e.left),operator:e.operator,right:l(e.right)}})),u(Ft,(function(e){return{type:"ArrayExpression",elements:e.elements.map(l)}})),u(Mt,(function(e){return{type:"ObjectExpression",properties:e.properties.map(l)}})),u(Rt,(function(e,t){var n,i=e.key instanceof pe?l(e.key):{type:"Identifier",value:e.key};"number"==typeof e.key&&(i={type:"Literal",value:Number(e.key)}),"string"==typeof e.key&&(i={type:"Identifier",name:e.key});var r="string"==typeof e.key||"number"==typeof e.key,o=!r&&(!(e.key instanceof Bt)||e.key instanceof rn);return e instanceof wt?(n="init",o=!r):e instanceof Nt?n="get":e instanceof xt&&(n="set"),e instanceof Lt?{type:"FieldDefinition",computed:o,key:i,value:l(e.value),static:e.static}:t instanceof It?{type:"MethodDefinition",computed:o,kind:n,static:e.static,key:l(e.key),value:l(e.value)}:{type:"Property",computed:o,kind:n,key:i,value:l(e.value)}})),u(kt,(function(e,t){return t instanceof Mt?{type:"Property",computed:!(e.key instanceof Bt)||e.key instanceof rn,kind:"init",method:!0,shorthand:!1,key:l(e.key),value:l(e.value)}:{type:"MethodDefinition",computed:!(e.key instanceof Bt)||e.key instanceof rn,kind:"constructor"===e.key?"constructor":"method",static:e.static,key:l(e.key),value:l(e.value)}})),u(It,(function(e){return{type:e instanceof Vt?"ClassExpression":"ClassDeclaration",superClass:l(e.extends),id:e.name?l(e.name):null,body:{type:"ClassBody",body:e.properties.map(l)}}})),u(Kt,(function(){return{type:"MetaProperty",meta:{type:"Identifier",name:"new"},property:{type:"Identifier",name:"target"}}})),u(Bt,(function(e,t){if(e instanceof qt&&t.quote)return{type:"Literal",value:e.name};var n=e.definition();return{type:"Identifier",name:n?n.mangled_name||n.name:e.name}})),u(dn,(function(e){const t=e.value.source,n=e.value.flags;return{type:"Literal",value:null,raw:e.print_to_string(),regex:{pattern:t,flags:n}}})),u(ln,(function(e){var t=e.value;return"number"==typeof t&&(t<0||0===t&&1/t<0)?{type:"UnaryExpression",operator:"-",prefix:!0,argument:{type:"Literal",value:-t,raw:e.start.raw}}:{type:"Literal",value:t,raw:e.start.raw}})),u(mn,(function(e){return{type:"Identifier",name:String(e.value)}})),u(_n,e=>({type:"BigIntLiteral",value:e.value})),vn.DEFMETHOD("to_mozilla_ast",ln.prototype.to_mozilla_ast),hn.DEFMETHOD("to_mozilla_ast",ln.prototype.to_mozilla_ast),Dn.DEFMETHOD("to_mozilla_ast",(function(){return null})),De.DEFMETHOD("to_mozilla_ast",Se.prototype.to_mozilla_ast),Ie.DEFMETHOD("to_mozilla_ast",Pe.prototype.to_mozilla_ast);var a=null;function s(e){a.push(e);var n=null!=e?t[e.type](e):null;return a.pop(),n}function u(e,t){e.DEFMETHOD("to_mozilla_ast",(function(e){return n=this,i=t(this,e),r=n.start,o=n.end,r&&o?(null!=r.pos&&null!=o.endpos&&(i.range=[r.pos,o.endpos]),r.line&&(i.loc={start:{line:r.line,column:r.col},end:o.endline?{line:o.endline,column:o.endcol}:null},r.file&&(i.loc.source=r.file)),i):i;var n,i,r,o}))}pe.from_mozilla_ast=function(e){var t=a;a=[];var n=s(e);return a=t,n};var c=null;function l(e){null===c&&(c=[]),c.push(e);var t=null!=e?e.to_mozilla_ast(c[c.length-2]):null;return c.pop(),0===c.length&&(c=null),t}function f(){for(var e=c.length;e--;)if(c[e]instanceof Ke)return!0;return!1}function _(e){return{type:"BlockStatement",body:e.body.map(l)}}function d(e,t){var n=t.body.map(l);return t.body[0]instanceof he&&t.body[0].body instanceof fn&&n.unshift(l(new ve(t.body[0]))),{type:e,body:n}}}(),e.AST_Accessor=Le,e.AST_Array=Ft,e.AST_Arrow=Ve,e.AST_Assign=Ct,e.AST_Atom=mn,e.AST_Await=Ze,e.AST_Binary=yt,e.AST_Block=De,e.AST_BlockStatement=Se,e.AST_Boolean=vn,e.AST_Break=$e,e.AST_Call=mt,e.AST_Case=it,e.AST_Catch=ot,e.AST_Class=It,e.AST_ClassExpression=Vt,e.AST_ConciseMethod=kt,e.AST_Conditional=bt,e.AST_Const=lt,e.AST_Constant=ln,e.AST_Continue=je,e.AST_DWLoop=be,e.AST_Debugger=de,e.AST_DefClass=Pt,e.AST_Default=nt,e.AST_DefaultAssign=Ot,e.AST_Definitions=st,e.AST_Defun=Be,e.AST_Destructuring=Ke,e.AST_Directive=me,e.AST_Do=Ce,e.AST_Dot=Dt,e.AST_EmptyStatement=ve,e.AST_Exit=ze,e.AST_Expansion=ke,e.AST_Export=dt,e.AST_False=An,e.AST_Finally=at,e.AST_For=Fe,e.AST_ForIn=Me,e.AST_ForOf=Re,e.AST_Function=Pe,e.AST_Hole=Dn,e.AST_If=Qe,e.AST_Import=_t,e.AST_Infinity=Sn,e.AST_IterationStatement=ye,e.AST_Jump=Xe,e.AST_Label=nn,e.AST_LabelRef=sn,e.AST_LabeledStatement=Te,e.AST_Lambda=Ie,e.AST_Let=ct,e.AST_LoopControl=qe,e.AST_NaN=En,e.AST_NameMapping=pt,e.AST_New=ht,e.AST_NewTarget=Kt,e.AST_Node=pe,e.AST_Null=hn,e.AST_Number=pn,e.AST_Object=Mt,e.AST_ObjectGetter=Nt,e.AST_ObjectKeyVal=wt,e.AST_ObjectProperty=Rt,e.AST_ObjectSetter=xt,e.AST_PrefixedTemplateString=Ue,e.AST_PropAccess=gt,e.AST_RegExp=dn,e.AST_Return=We,e.AST_Scope=xe,e.AST_Sequence=Et,e.AST_SimpleStatement=he,e.AST_Statement=_e,e.AST_StatementWithBody=Ae,e.AST_String=fn,e.AST_Sub=St,e.AST_Super=cn,e.AST_Switch=et,e.AST_SwitchBranch=tt,e.AST_Symbol=Bt,e.AST_SymbolBlockDeclaration=Ht,e.AST_SymbolCatch=Qt,e.AST_SymbolClass=Jt,e.AST_SymbolConst=Xt,e.AST_SymbolDeclaration=Ut,e.AST_SymbolDefClass=Zt,e.AST_SymbolDefun=Yt,e.AST_SymbolExport=on,e.AST_SymbolExportForeign=an,e.AST_SymbolFunarg=Wt,e.AST_SymbolImport=en,e.AST_SymbolImportForeign=tn,e.AST_SymbolLambda=jt,e.AST_SymbolLet=zt,e.AST_SymbolMethod=qt,e.AST_SymbolRef=rn,e.AST_SymbolVar=Gt,e.AST_TemplateSegment=He,e.AST_TemplateString=Ge,e.AST_This=un,e.AST_Throw=Ye,e.AST_Token=fe,e.AST_Toplevel=Ne,e.AST_True=Tn,e.AST_Try=rt,e.AST_Unary=vt,e.AST_UnaryPostfix=Tt,e.AST_UnaryPrefix=At,e.AST_Undefined=gn,e.AST_Var=ut,e.AST_VarDef=ft,e.AST_While=Oe,e.AST_With=we,e.AST_Yield=Je,e.Compressor=ai,e.OutputStream=Bn,e.TreeTransformer=Fn,e.TreeWalker=On,e._INLINE=Rn,e._JS_Parse_Error=Q,e._NOINLINE=wn,e._PURE=Mn,e._has_annotation=T,e._tokenizer=ie,e.base54=qn,e.default_options=$n,e.defaults=o,e.mangle_properties=pr,e.minify=gr,e.parse=ce,e.push_uniq=_,e.reserve_quoted_keys=lr,e.string_template=d,e.to_ascii=_r}));
+//# sourceMappingURL=bundle.min.js.map
diff --git a/node_modules/terser/dist/bundle.min.js.map b/node_modules/terser/dist/bundle.min.js.map
new file mode 100644
index 0000000..15cf9c7
--- /dev/null
+++ b/node_modules/terser/dist/bundle.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"bundle.min.js","sources":["../lib/utils/index.js","../lib/parse.js","../lib/ast.js","../lib/transform.js","../lib/utils/first_in_statement.js","../lib/output.js","../lib/equivalent-to.js","../lib/scope.js","../tools/node.js","../lib/size.js","../lib/compress/index.js","../tools/domprops.js","../lib/propmangle.js","../lib/minify.js","../lib/sourcemap.js","../lib/mozilla-ast.js"],"sourcesContent":["/***********************************************************************\n\n  A JavaScript tokenizer / parser / beautifier / compressor.\n  https://github.com/mishoo/UglifyJS2\n\n  -------------------------------- (C) ---------------------------------\n\n                           Author: Mihai Bazon\n                         <mihai.bazon@gmail.com>\n                       http://mihai.bazon.net/blog\n\n  Distributed under the BSD license:\n\n    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n        * Redistributions of source code must retain the above\n          copyright notice, this list of conditions and the following\n          disclaimer.\n\n        * Redistributions in binary form must reproduce the above\n          copyright notice, this list of conditions and the following\n          disclaimer in the documentation and/or other materials\n          provided with the distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n\n ***********************************************************************/\n\n\"use strict\";\n\nfunction characters(str) {\n    return str.split(\"\");\n}\n\nfunction member(name, array) {\n    return array.includes(name);\n}\n\nclass DefaultsError extends Error {\n    constructor(msg, defs) {\n        super();\n\n        this.name = \"DefaultsError\";\n        this.message = msg;\n        this.defs = defs;\n    }\n}\n\nfunction defaults(args, defs, croak) {\n    if (args === true)\n        args = {};\n    const ret = args || {};\n    if (croak) for (const i in ret) if (HOP(ret, i) && !HOP(defs, i))\n        throw new DefaultsError(\"`\" + i + \"` is not a supported option\", defs);\n    for (const i in defs) if (HOP(defs, i)) {\n        if (!args || !HOP(args, i)) {\n            ret[i] = defs[i];\n        } else if (i === \"ecma\") {\n            let ecma = args[i] | 0;\n            if (ecma > 5 && ecma < 2015) ecma += 2009;\n            ret[i] = ecma;\n        } else {\n            ret[i] = (args && HOP(args, i)) ? args[i] : defs[i];\n        }\n    }\n    return ret;\n}\n\nfunction noop() {}\nfunction return_false() { return false; }\nfunction return_true() { return true; }\nfunction return_this() { return this; }\nfunction return_null() { return null; }\n\nvar MAP = (function() {\n    function MAP(a, f, backwards) {\n        var ret = [], top = [], i;\n        function doit() {\n            var val = f(a[i], i);\n            var is_last = val instanceof Last;\n            if (is_last) val = val.v;\n            if (val instanceof AtTop) {\n                val = val.v;\n                if (val instanceof Splice) {\n                    top.push.apply(top, backwards ? val.v.slice().reverse() : val.v);\n                } else {\n                    top.push(val);\n                }\n            } else if (val !== skip) {\n                if (val instanceof Splice) {\n                    ret.push.apply(ret, backwards ? val.v.slice().reverse() : val.v);\n                } else {\n                    ret.push(val);\n                }\n            }\n            return is_last;\n        }\n        if (Array.isArray(a)) {\n            if (backwards) {\n                for (i = a.length; --i >= 0;) if (doit()) break;\n                ret.reverse();\n                top.reverse();\n            } else {\n                for (i = 0; i < a.length; ++i) if (doit()) break;\n            }\n        } else {\n            for (i in a) if (HOP(a, i)) if (doit()) break;\n        }\n        return top.concat(ret);\n    }\n    MAP.at_top = function(val) { return new AtTop(val); };\n    MAP.splice = function(val) { return new Splice(val); };\n    MAP.last = function(val) { return new Last(val); };\n    var skip = MAP.skip = {};\n    function AtTop(val) { this.v = val; }\n    function Splice(val) { this.v = val; }\n    function Last(val) { this.v = val; }\n    return MAP;\n})();\n\nfunction make_node(ctor, orig, props) {\n    if (!props) props = {};\n    if (orig) {\n        if (!props.start) props.start = orig.start;\n        if (!props.end) props.end = orig.end;\n    }\n    return new ctor(props);\n}\n\nfunction push_uniq(array, el) {\n    if (!array.includes(el))\n        array.push(el);\n}\n\nfunction string_template(text, props) {\n    return text.replace(/{(.+?)}/g, function(str, p) {\n        return props && props[p];\n    });\n}\n\nfunction remove(array, el) {\n    for (var i = array.length; --i >= 0;) {\n        if (array[i] === el) array.splice(i, 1);\n    }\n}\n\nfunction mergeSort(array, cmp) {\n    if (array.length < 2) return array.slice();\n    function merge(a, b) {\n        var r = [], ai = 0, bi = 0, i = 0;\n        while (ai < a.length && bi < b.length) {\n            cmp(a[ai], b[bi]) <= 0\n                ? r[i++] = a[ai++]\n                : r[i++] = b[bi++];\n        }\n        if (ai < a.length) r.push.apply(r, a.slice(ai));\n        if (bi < b.length) r.push.apply(r, b.slice(bi));\n        return r;\n    }\n    function _ms(a) {\n        if (a.length <= 1)\n            return a;\n        var m = Math.floor(a.length / 2), left = a.slice(0, m), right = a.slice(m);\n        left = _ms(left);\n        right = _ms(right);\n        return merge(left, right);\n    }\n    return _ms(array);\n}\n\nfunction makePredicate(words) {\n    if (!Array.isArray(words)) words = words.split(\" \");\n\n    return new Set(words);\n}\n\nfunction map_add(map, key, value) {\n    if (map.has(key)) {\n        map.get(key).push(value);\n    } else {\n        map.set(key, [ value ]);\n    }\n}\n\nfunction map_from_object(obj) {\n    var map = new Map();\n    for (var key in obj) {\n        if (HOP(obj, key) && key.charAt(0) === \"$\") {\n            map.set(key.substr(1), obj[key]);\n        }\n    }\n    return map;\n}\n\nfunction map_to_object(map) {\n    var obj = Object.create(null);\n    map.forEach(function (value, key) {\n        obj[\"$\" + key] = value;\n    });\n    return obj;\n}\n\nfunction HOP(obj, prop) {\n    return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nfunction keep_name(keep_setting, name) {\n    return keep_setting === true\n        || (keep_setting instanceof RegExp && keep_setting.test(name));\n}\n\nvar lineTerminatorEscape = {\n    \"\\n\": \"n\",\n    \"\\r\": \"r\",\n    \"\\u2028\": \"u2028\",\n    \"\\u2029\": \"u2029\",\n};\nfunction regexp_source_fix(source) {\n    // V8 does not escape line terminators in regexp patterns in node 12\n    return source.replace(/[\\n\\r\\u2028\\u2029]/g, function (match, offset) {\n        var escaped = source[offset - 1] == \"\\\\\"\n            && (source[offset - 2] != \"\\\\\"\n            || /(?:^|[^\\\\])(?:\\\\{2})*$/.test(source.slice(0, offset - 1)));\n        return (escaped ? \"\" : \"\\\\\") + lineTerminatorEscape[match];\n    });\n}\nconst all_flags = \"gimuy\";\nfunction sort_regexp_flags(flags) {\n    const existing_flags = new Set(flags.split(\"\"));\n    let out = \"\";\n    for (const flag of all_flags) {\n        if (existing_flags.has(flag)) {\n            out += flag;\n            existing_flags.delete(flag);\n        }\n    }\n    if (existing_flags.size) {\n        // Flags Terser doesn't know about\n        existing_flags.forEach(flag => { out += flag; });\n    }\n    return out;\n}\n\nfunction has_annotation(node, annotation) {\n    return node._annotations & annotation;\n}\n\nfunction set_annotation(node, annotation) {\n    node._annotations |= annotation;\n}\n\nexport {\n    characters,\n    defaults,\n    HOP,\n    keep_name,\n    make_node,\n    makePredicate,\n    map_add,\n    map_from_object,\n    map_to_object,\n    MAP,\n    member,\n    mergeSort,\n    noop,\n    push_uniq,\n    regexp_source_fix,\n    remove,\n    return_false,\n    return_null,\n    return_this,\n    return_true,\n    sort_regexp_flags,\n    string_template,\n    has_annotation,\n    set_annotation\n};\n","/***********************************************************************\n\n  A JavaScript tokenizer / parser / beautifier / compressor.\n  https://github.com/mishoo/UglifyJS2\n\n  -------------------------------- (C) ---------------------------------\n\n                           Author: Mihai Bazon\n                         <mihai.bazon@gmail.com>\n                       http://mihai.bazon.net/blog\n\n  Distributed under the BSD license:\n\n    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>\n    Parser based on parse-js (http://marijn.haverbeke.nl/parse-js/).\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n        * Redistributions of source code must retain the above\n          copyright notice, this list of conditions and the following\n          disclaimer.\n\n        * Redistributions in binary form must reproduce the above\n          copyright notice, this list of conditions and the following\n          disclaimer in the documentation and/or other materials\n          provided with the distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n\n ***********************************************************************/\n\n\"use strict\";\n\nimport {\n    characters,\n    defaults,\n    makePredicate,\n    set_annotation,\n} from \"./utils/index.js\";\nimport {\n    AST_Accessor,\n    AST_Array,\n    AST_Arrow,\n    AST_Assign,\n    AST_Await,\n    AST_BigInt,\n    AST_Binary,\n    AST_BlockStatement,\n    AST_Break,\n    AST_Call,\n    AST_Case,\n    AST_Catch,\n    AST_ClassExpression,\n    AST_ClassProperty,\n    AST_ConciseMethod,\n    AST_Conditional,\n    AST_Const,\n    AST_Continue,\n    AST_Debugger,\n    AST_Default,\n    AST_DefaultAssign,\n    AST_DefClass,\n    AST_Definitions,\n    AST_Defun,\n    AST_Destructuring,\n    AST_Directive,\n    AST_Do,\n    AST_Dot,\n    AST_EmptyStatement,\n    AST_Expansion,\n    AST_Export,\n    AST_False,\n    AST_Finally,\n    AST_For,\n    AST_ForIn,\n    AST_ForOf,\n    AST_Function,\n    AST_Hole,\n    AST_If,\n    AST_Import,\n    AST_IterationStatement,\n    AST_Label,\n    AST_LabeledStatement,\n    AST_LabelRef,\n    AST_Lambda,\n    AST_Let,\n    AST_NameMapping,\n    AST_New,\n    AST_NewTarget,\n    AST_Node,\n    AST_Null,\n    AST_Number,\n    AST_Object,\n    AST_ObjectGetter,\n    AST_ObjectKeyVal,\n    AST_ObjectProperty,\n    AST_ObjectSetter,\n    AST_PrefixedTemplateString,\n    AST_PropAccess,\n    AST_RegExp,\n    AST_Return,\n    AST_Sequence,\n    AST_SimpleStatement,\n    AST_String,\n    AST_Sub,\n    AST_Super,\n    AST_Switch,\n    AST_SymbolCatch,\n    AST_SymbolClass,\n    AST_SymbolClassProperty,\n    AST_SymbolConst,\n    AST_SymbolDeclaration,\n    AST_SymbolDefClass,\n    AST_SymbolDefun,\n    AST_SymbolExport,\n    AST_SymbolExportForeign,\n    AST_SymbolFunarg,\n    AST_SymbolImport,\n    AST_SymbolImportForeign,\n    AST_SymbolLambda,\n    AST_SymbolLet,\n    AST_SymbolMethod,\n    AST_SymbolRef,\n    AST_SymbolVar,\n    AST_TemplateSegment,\n    AST_TemplateString,\n    AST_This,\n    AST_Throw,\n    AST_Token,\n    AST_Toplevel,\n    AST_True,\n    AST_Try,\n    AST_UnaryPostfix,\n    AST_UnaryPrefix,\n    AST_Var,\n    AST_VarDef,\n    AST_While,\n    AST_With,\n    AST_Yield,\n    _INLINE,\n    _NOINLINE,\n    _PURE\n} from \"./ast.js\";\n\nvar KEYWORDS = \"break case catch class const continue debugger default delete do else export extends finally for function if in instanceof let new return switch throw try typeof var void while with\";\nvar KEYWORDS_ATOM = \"false null true\";\nvar RESERVED_WORDS = \"enum implements import interface package private protected public static super this \" + KEYWORDS_ATOM + \" \" + KEYWORDS;\nvar KEYWORDS_BEFORE_EXPRESSION = \"return new delete throw else case yield await\";\n\nKEYWORDS = makePredicate(KEYWORDS);\nRESERVED_WORDS = makePredicate(RESERVED_WORDS);\nKEYWORDS_BEFORE_EXPRESSION = makePredicate(KEYWORDS_BEFORE_EXPRESSION);\nKEYWORDS_ATOM = makePredicate(KEYWORDS_ATOM);\n\nvar OPERATOR_CHARS = makePredicate(characters(\"+-*&%=<>!?|~^\"));\n\nvar RE_NUM_LITERAL = /[0-9a-f]/i;\nvar RE_HEX_NUMBER = /^0x[0-9a-f]+$/i;\nvar RE_OCT_NUMBER = /^0[0-7]+$/;\nvar RE_ES6_OCT_NUMBER = /^0o[0-7]+$/i;\nvar RE_BIN_NUMBER = /^0b[01]+$/i;\nvar RE_DEC_NUMBER = /^\\d*\\.?\\d*(?:e[+-]?\\d*(?:\\d\\.?|\\.?\\d)\\d*)?$/i;\nvar RE_BIG_INT = /^(0[xob])?[0-9a-f]+n$/i;\n\nvar OPERATORS = makePredicate([\n    \"in\",\n    \"instanceof\",\n    \"typeof\",\n    \"new\",\n    \"void\",\n    \"delete\",\n    \"++\",\n    \"--\",\n    \"+\",\n    \"-\",\n    \"!\",\n    \"~\",\n    \"&\",\n    \"|\",\n    \"^\",\n    \"*\",\n    \"**\",\n    \"/\",\n    \"%\",\n    \">>\",\n    \"<<\",\n    \">>>\",\n    \"<\",\n    \">\",\n    \"<=\",\n    \">=\",\n    \"==\",\n    \"===\",\n    \"!=\",\n    \"!==\",\n    \"?\",\n    \"=\",\n    \"+=\",\n    \"-=\",\n    \"/=\",\n    \"*=\",\n    \"**=\",\n    \"%=\",\n    \">>=\",\n    \"<<=\",\n    \">>>=\",\n    \"|=\",\n    \"^=\",\n    \"&=\",\n    \"&&\",\n    \"??\",\n    \"||\",\n]);\n\nvar WHITESPACE_CHARS = makePredicate(characters(\" \\u00a0\\n\\r\\t\\f\\u000b\\u200b\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\uFEFF\"));\n\nvar NEWLINE_CHARS = makePredicate(characters(\"\\n\\r\\u2028\\u2029\"));\n\nvar PUNC_AFTER_EXPRESSION = makePredicate(characters(\";]),:\"));\n\nvar PUNC_BEFORE_EXPRESSION = makePredicate(characters(\"[{(,;:\"));\n\nvar PUNC_CHARS = makePredicate(characters(\"[]{}(),;:\"));\n\n/* -----[ Tokenizer ]----- */\n\n// surrogate safe regexps adapted from https://github.com/mathiasbynens/unicode-8.0.0/tree/89b412d8a71ecca9ed593d9e9fa073ab64acfebe/Binary_Property\nvar UNICODE = {\n    ID_Start: /[$A-Z_a-z\\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-\\u08B4\\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\\u0AF9\\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-\\u0C5A\\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\\u0D5F-\\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-\\u13F5\\u13F8-\\u13FD\\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\\u19B0-\\u19C9\\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-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AD\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\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-\\uAB65\\uAB70-\\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\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\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\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDF00-\\uDF19]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\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\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1]|\\uD87E[\\uDC00-\\uDE1D]/,\n    ID_Continue: /(?:[$0-9A-Z_a-z\\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-\\u08B4\\u08E3-\\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\\u0AF9\\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-\\u0C5A\\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\\u0D5F-\\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-\\u13F5\\u13F8-\\u13FD\\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-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AD\\uA7B0-\\uA7B7\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA8FD\\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-\\uAB65\\uAB70-\\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-\\uFE2F\\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\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\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\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDCA-\\uDDCC\\uDDD0-\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF00-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF50\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDDD8-\\uDDDD\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB7\\uDEC0-\\uDEC9\\uDF00-\\uDF19\\uDF1D-\\uDF2B\\uDF30-\\uDF39]|\\uD806[\\uDCA0-\\uDCE9\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\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]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\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\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF])+/,\n};\n\nfunction get_full_char(str, pos) {\n    if (is_surrogate_pair_head(str.charCodeAt(pos))) {\n        if (is_surrogate_pair_tail(str.charCodeAt(pos + 1))) {\n            return str.charAt(pos) + str.charAt(pos + 1);\n        }\n    } else if (is_surrogate_pair_tail(str.charCodeAt(pos))) {\n        if (is_surrogate_pair_head(str.charCodeAt(pos - 1))) {\n            return str.charAt(pos - 1) + str.charAt(pos);\n        }\n    }\n    return str.charAt(pos);\n}\n\nfunction get_full_char_code(str, pos) {\n    // https://en.wikipedia.org/wiki/Universal_Character_Set_characters#Surrogates\n    if (is_surrogate_pair_head(str.charCodeAt(pos))) {\n        return 0x10000 + (str.charCodeAt(pos) - 0xd800 << 10) + str.charCodeAt(pos + 1) - 0xdc00;\n    }\n    return str.charCodeAt(pos);\n}\n\nfunction get_full_char_length(str) {\n    var surrogates = 0;\n\n    for (var i = 0; i < str.length; i++) {\n        if (is_surrogate_pair_head(str.charCodeAt(i)) && is_surrogate_pair_tail(str.charCodeAt(i + 1))) {\n            surrogates++;\n            i++;\n        }\n    }\n\n    return str.length - surrogates;\n}\n\nfunction from_char_code(code) {\n    // Based on https://github.com/mathiasbynens/String.fromCodePoint/blob/master/fromcodepoint.js\n    if (code > 0xFFFF) {\n        code -= 0x10000;\n        return (String.fromCharCode((code >> 10) + 0xD800) +\n            String.fromCharCode((code % 0x400) + 0xDC00));\n    }\n    return String.fromCharCode(code);\n}\n\nfunction is_surrogate_pair_head(code) {\n    return code >= 0xd800 && code <= 0xdbff;\n}\n\nfunction is_surrogate_pair_tail(code) {\n    return code >= 0xdc00 && code <= 0xdfff;\n}\n\nfunction is_digit(code) {\n    return code >= 48 && code <= 57;\n}\n\nfunction is_identifier_start(ch) {\n    return UNICODE.ID_Start.test(ch);\n}\n\nfunction is_identifier_char(ch) {\n    return UNICODE.ID_Continue.test(ch);\n}\n\nfunction is_basic_identifier_string(str) {\n    return /^[a-z_$][a-z0-9_$]*$/i.test(str);\n}\n\nfunction is_identifier_string(str, allow_surrogates) {\n    if (/^[a-z_$][a-z0-9_$]*$/i.test(str)) {\n        return true;\n    }\n    if (!allow_surrogates && /[\\ud800-\\udfff]/.test(str)) {\n        return false;\n    }\n    var match = UNICODE.ID_Start.exec(str);\n    if (!match || match.index !== 0) {\n        return false;\n    }\n\n    str = str.slice(match[0].length);\n    if (!str) {\n        return true;\n    }\n\n    match = UNICODE.ID_Continue.exec(str);\n    return !!match && match[0].length === str.length;\n}\n\nfunction parse_js_number(num, allow_e = true) {\n    if (!allow_e && num.includes(\"e\")) {\n        return NaN;\n    }\n    if (RE_HEX_NUMBER.test(num)) {\n        return parseInt(num.substr(2), 16);\n    } else if (RE_OCT_NUMBER.test(num)) {\n        return parseInt(num.substr(1), 8);\n    } else if (RE_ES6_OCT_NUMBER.test(num)) {\n        return parseInt(num.substr(2), 8);\n    } else if (RE_BIN_NUMBER.test(num)) {\n        return parseInt(num.substr(2), 2);\n    } else if (RE_DEC_NUMBER.test(num)) {\n        return parseFloat(num);\n    } else {\n        var val = parseFloat(num);\n        if (val == num) return val;\n    }\n}\n\nclass JS_Parse_Error extends Error {\n    constructor(message, filename, line, col, pos) {\n        super();\n\n        this.name = \"SyntaxError\";\n        this.message = message;\n        this.filename = filename;\n        this.line = line;\n        this.col = col;\n        this.pos = pos;\n    }\n}\n\nfunction js_error(message, filename, line, col, pos) {\n    throw new JS_Parse_Error(message, filename, line, col, pos);\n}\n\nfunction is_token(token, type, val) {\n    return token.type == type && (val == null || token.value == val);\n}\n\nvar EX_EOF = {};\n\nfunction tokenizer($TEXT, filename, html5_comments, shebang) {\n    var S = {\n        text            : $TEXT,\n        filename        : filename,\n        pos             : 0,\n        tokpos          : 0,\n        line            : 1,\n        tokline         : 0,\n        col             : 0,\n        tokcol          : 0,\n        newline_before  : false,\n        regex_allowed   : false,\n        brace_counter   : 0,\n        template_braces : [],\n        comments_before : [],\n        directives      : {},\n        directive_stack : []\n    };\n\n    function peek() { return get_full_char(S.text, S.pos); }\n\n    function next(signal_eof, in_string) {\n        var ch = get_full_char(S.text, S.pos++);\n        if (signal_eof && !ch)\n            throw EX_EOF;\n        if (NEWLINE_CHARS.has(ch)) {\n            S.newline_before = S.newline_before || !in_string;\n            ++S.line;\n            S.col = 0;\n            if (ch == \"\\r\" && peek() == \"\\n\") {\n                // treat a \\r\\n sequence as a single \\n\n                ++S.pos;\n                ch = \"\\n\";\n            }\n        } else {\n            if (ch.length > 1) {\n                ++S.pos;\n                ++S.col;\n            }\n            ++S.col;\n        }\n        return ch;\n    }\n\n    function forward(i) {\n        while (i--) next();\n    }\n\n    function looking_at(str) {\n        return S.text.substr(S.pos, str.length) == str;\n    }\n\n    function find_eol() {\n        var text = S.text;\n        for (var i = S.pos, n = S.text.length; i < n; ++i) {\n            var ch = text[i];\n            if (NEWLINE_CHARS.has(ch))\n                return i;\n        }\n        return -1;\n    }\n\n    function find(what, signal_eof) {\n        var pos = S.text.indexOf(what, S.pos);\n        if (signal_eof && pos == -1) throw EX_EOF;\n        return pos;\n    }\n\n    function start_token() {\n        S.tokline = S.line;\n        S.tokcol = S.col;\n        S.tokpos = S.pos;\n    }\n\n    var prev_was_dot = false;\n    var previous_token = null;\n    function token(type, value, is_comment) {\n        S.regex_allowed = ((type == \"operator\" && !UNARY_POSTFIX.has(value)) ||\n                           (type == \"keyword\" && KEYWORDS_BEFORE_EXPRESSION.has(value)) ||\n                           (type == \"punc\" && PUNC_BEFORE_EXPRESSION.has(value))) ||\n                           (type == \"arrow\");\n        if (type == \"punc\" && value == \".\") {\n            prev_was_dot = true;\n        } else if (!is_comment) {\n            prev_was_dot = false;\n        }\n        var ret = {\n            type    : type,\n            value   : value,\n            line    : S.tokline,\n            col     : S.tokcol,\n            pos     : S.tokpos,\n            endline : S.line,\n            endcol  : S.col,\n            endpos  : S.pos,\n            nlb     : S.newline_before,\n            file    : filename\n        };\n        if (/^(?:num|string|regexp)$/i.test(type)) {\n            ret.raw = $TEXT.substring(ret.pos, ret.endpos);\n        }\n        if (!is_comment) {\n            ret.comments_before = S.comments_before;\n            ret.comments_after = S.comments_before = [];\n        }\n        S.newline_before = false;\n        ret = new AST_Token(ret);\n        if (!is_comment) previous_token = ret;\n        return ret;\n    }\n\n    function skip_whitespace() {\n        while (WHITESPACE_CHARS.has(peek()))\n            next();\n    }\n\n    function read_while(pred) {\n        var ret = \"\", ch, i = 0;\n        while ((ch = peek()) && pred(ch, i++))\n            ret += next();\n        return ret;\n    }\n\n    function parse_error(err) {\n        js_error(err, filename, S.tokline, S.tokcol, S.tokpos);\n    }\n\n    function read_num(prefix) {\n        var has_e = false, after_e = false, has_x = false, has_dot = prefix == \".\", is_big_int = false, numeric_separator = false;\n        var num = read_while(function(ch, i) {\n            if (is_big_int) return false;\n\n            var code = ch.charCodeAt(0);\n            switch (code) {\n              case 95: // _\n                return (numeric_separator = true);\n              case 98: case 66: // bB\n                return (has_x = true); // Can occur in hex sequence, don't return false yet\n              case 111: case 79: // oO\n              case 120: case 88: // xX\n                return has_x ? false : (has_x = true);\n              case 101: case 69: // eE\n                return has_x ? true : has_e ? false : (has_e = after_e = true);\n              case 45: // -\n                return after_e || (i == 0 && !prefix);\n              case 43: // +\n                return after_e;\n              case (after_e = false, 46): // .\n                return (!has_dot && !has_x && !has_e) ? (has_dot = true) : false;\n            }\n\n            if (ch === \"n\") {\n                is_big_int = true;\n\n                return true;\n            }\n\n            return RE_NUM_LITERAL.test(ch);\n        });\n        if (prefix) num = prefix + num;\n        if (RE_OCT_NUMBER.test(num) && next_token.has_directive(\"use strict\")) {\n            parse_error(\"Legacy octal literals are not allowed in strict mode\");\n        }\n        if (numeric_separator) {\n            if (num.endsWith(\"_\")) {\n                parse_error(\"Numeric separators are not allowed at the end of numeric literals\");\n            } else if (num.includes(\"__\")) {\n                parse_error(\"Only one underscore is allowed as numeric separator\");\n            }\n            num = num.replace(/_/g, \"\");\n        }\n        if (num.endsWith(\"n\")) {\n            const without_n = num.slice(0, -1);\n            const allow_e = RE_HEX_NUMBER.test(without_n);\n            const valid = parse_js_number(without_n, allow_e);\n            if (!has_dot && RE_BIG_INT.test(num) && !isNaN(valid))\n                return token(\"big_int\", without_n);\n            parse_error(\"Invalid or unexpected token\");\n        }\n        var valid = parse_js_number(num);\n        if (!isNaN(valid)) {\n            return token(\"num\", valid);\n        } else {\n            parse_error(\"Invalid syntax: \" + num);\n        }\n    }\n\n    function is_octal(ch) {\n        return ch >= \"0\" && ch <= \"7\";\n    }\n\n    function read_escaped_char(in_string, strict_hex, template_string) {\n        var ch = next(true, in_string);\n        switch (ch.charCodeAt(0)) {\n          case 110 : return \"\\n\";\n          case 114 : return \"\\r\";\n          case 116 : return \"\\t\";\n          case 98  : return \"\\b\";\n          case 118 : return \"\\u000b\"; // \\v\n          case 102 : return \"\\f\";\n          case 120 : return String.fromCharCode(hex_bytes(2, strict_hex)); // \\x\n          case 117 : // \\u\n            if (peek() == \"{\") {\n                next(true);\n                if (peek() === \"}\")\n                    parse_error(\"Expecting hex-character between {}\");\n                while (peek() == \"0\") next(true); // No significance\n                var result, length = find(\"}\", true) - S.pos;\n                // Avoid 32 bit integer overflow (1 << 32 === 1)\n                // We know first character isn't 0 and thus out of range anyway\n                if (length > 6 || (result = hex_bytes(length, strict_hex)) > 0x10FFFF) {\n                    parse_error(\"Unicode reference out of bounds\");\n                }\n                next(true);\n                return from_char_code(result);\n            }\n            return String.fromCharCode(hex_bytes(4, strict_hex));\n          case 10  : return \"\"; // newline\n          case 13  :            // \\r\n            if (peek() == \"\\n\") { // DOS newline\n                next(true, in_string);\n                return \"\";\n            }\n        }\n        if (is_octal(ch)) {\n            if (template_string && strict_hex) {\n                const represents_null_character = ch === \"0\" && !is_octal(peek());\n                if (!represents_null_character) {\n                    parse_error(\"Octal escape sequences are not allowed in template strings\");\n                }\n            }\n            return read_octal_escape_sequence(ch, strict_hex);\n        }\n        return ch;\n    }\n\n    function read_octal_escape_sequence(ch, strict_octal) {\n        // Read\n        var p = peek();\n        if (p >= \"0\" && p <= \"7\") {\n            ch += next(true);\n            if (ch[0] <= \"3\" && (p = peek()) >= \"0\" && p <= \"7\")\n                ch += next(true);\n        }\n\n        // Parse\n        if (ch === \"0\") return \"\\0\";\n        if (ch.length > 0 && next_token.has_directive(\"use strict\") && strict_octal)\n            parse_error(\"Legacy octal escape sequences are not allowed in strict mode\");\n        return String.fromCharCode(parseInt(ch, 8));\n    }\n\n    function hex_bytes(n, strict_hex) {\n        var num = 0;\n        for (; n > 0; --n) {\n            if (!strict_hex && isNaN(parseInt(peek(), 16))) {\n                return parseInt(num, 16) || \"\";\n            }\n            var digit = next(true);\n            if (isNaN(parseInt(digit, 16)))\n                parse_error(\"Invalid hex-character pattern in string\");\n            num += digit;\n        }\n        return parseInt(num, 16);\n    }\n\n    var read_string = with_eof_error(\"Unterminated string constant\", function() {\n        var quote = next(), ret = \"\";\n        for (;;) {\n            var ch = next(true, true);\n            if (ch == \"\\\\\") ch = read_escaped_char(true, true);\n            else if (ch == \"\\r\" || ch == \"\\n\") parse_error(\"Unterminated string constant\");\n            else if (ch == quote) break;\n            ret += ch;\n        }\n        var tok = token(\"string\", ret);\n        tok.quote = quote;\n        return tok;\n    });\n\n    var read_template_characters = with_eof_error(\"Unterminated template\", function(begin) {\n        if (begin) {\n            S.template_braces.push(S.brace_counter);\n        }\n        var content = \"\", raw = \"\", ch, tok;\n        next(true, true);\n        while ((ch = next(true, true)) != \"`\") {\n            if (ch == \"\\r\") {\n                if (peek() == \"\\n\") ++S.pos;\n                ch = \"\\n\";\n            } else if (ch == \"$\" && peek() == \"{\") {\n                next(true, true);\n                S.brace_counter++;\n                tok = token(begin ? \"template_head\" : \"template_substitution\", content);\n                tok.raw = raw;\n                return tok;\n            }\n\n            raw += ch;\n            if (ch == \"\\\\\") {\n                var tmp = S.pos;\n                var prev_is_tag = previous_token && (previous_token.type === \"name\" || previous_token.type === \"punc\" && (previous_token.value === \")\" || previous_token.value === \"]\"));\n                ch = read_escaped_char(true, !prev_is_tag, true);\n                raw += S.text.substr(tmp, S.pos - tmp);\n            }\n\n            content += ch;\n        }\n        S.template_braces.pop();\n        tok = token(begin ? \"template_head\" : \"template_substitution\", content);\n        tok.raw = raw;\n        tok.end = true;\n        return tok;\n    });\n\n    function skip_line_comment(type) {\n        var regex_allowed = S.regex_allowed;\n        var i = find_eol(), ret;\n        if (i == -1) {\n            ret = S.text.substr(S.pos);\n            S.pos = S.text.length;\n        } else {\n            ret = S.text.substring(S.pos, i);\n            S.pos = i;\n        }\n        S.col = S.tokcol + (S.pos - S.tokpos);\n        S.comments_before.push(token(type, ret, true));\n        S.regex_allowed = regex_allowed;\n        return next_token;\n    }\n\n    var skip_multiline_comment = with_eof_error(\"Unterminated multiline comment\", function() {\n        var regex_allowed = S.regex_allowed;\n        var i = find(\"*/\", true);\n        var text = S.text.substring(S.pos, i).replace(/\\r\\n|\\r|\\u2028|\\u2029/g, \"\\n\");\n        // update stream position\n        forward(get_full_char_length(text) /* text length doesn't count \\r\\n as 2 char while S.pos - i does */ + 2);\n        S.comments_before.push(token(\"comment2\", text, true));\n        S.newline_before = S.newline_before || text.includes(\"\\n\");\n        S.regex_allowed = regex_allowed;\n        return next_token;\n    });\n\n    var read_name = with_eof_error(\"Unterminated identifier name\", function() {\n        var name, ch, escaped = false;\n        var read_escaped_identifier_char = function() {\n            escaped = true;\n            next();\n            if (peek() !== \"u\") {\n                parse_error(\"Expecting UnicodeEscapeSequence -- uXXXX or u{XXXX}\");\n            }\n            return read_escaped_char(false, true);\n        };\n\n        // Read first character (ID_Start)\n        if ((name = peek()) === \"\\\\\") {\n            name = read_escaped_identifier_char();\n            if (!is_identifier_start(name)) {\n                parse_error(\"First identifier char is an invalid identifier char\");\n            }\n        } else if (is_identifier_start(name)) {\n            next();\n        } else {\n            return \"\";\n        }\n\n        // Read ID_Continue\n        while ((ch = peek()) != null) {\n            if ((ch = peek()) === \"\\\\\") {\n                ch = read_escaped_identifier_char();\n                if (!is_identifier_char(ch)) {\n                    parse_error(\"Invalid escaped identifier char\");\n                }\n            } else {\n                if (!is_identifier_char(ch)) {\n                    break;\n                }\n                next();\n            }\n            name += ch;\n        }\n        if (RESERVED_WORDS.has(name) && escaped) {\n            parse_error(\"Escaped characters are not allowed in keywords\");\n        }\n        return name;\n    });\n\n    var read_regexp = with_eof_error(\"Unterminated regular expression\", function(source) {\n        var prev_backslash = false, ch, in_class = false;\n        while ((ch = next(true))) if (NEWLINE_CHARS.has(ch)) {\n            parse_error(\"Unexpected line terminator\");\n        } else if (prev_backslash) {\n            source += \"\\\\\" + ch;\n            prev_backslash = false;\n        } else if (ch == \"[\") {\n            in_class = true;\n            source += ch;\n        } else if (ch == \"]\" && in_class) {\n            in_class = false;\n            source += ch;\n        } else if (ch == \"/\" && !in_class) {\n            break;\n        } else if (ch == \"\\\\\") {\n            prev_backslash = true;\n        } else {\n            source += ch;\n        }\n        const flags = read_name();\n        return token(\"regexp\", { source, flags });\n    });\n\n    function read_operator(prefix) {\n        function grow(op) {\n            if (!peek()) return op;\n            var bigger = op + peek();\n            if (OPERATORS.has(bigger)) {\n                next();\n                return grow(bigger);\n            } else {\n                return op;\n            }\n        }\n        return token(\"operator\", grow(prefix || next()));\n    }\n\n    function handle_slash() {\n        next();\n        switch (peek()) {\n          case \"/\":\n            next();\n            return skip_line_comment(\"comment1\");\n          case \"*\":\n            next();\n            return skip_multiline_comment();\n        }\n        return S.regex_allowed ? read_regexp(\"\") : read_operator(\"/\");\n    }\n\n    function handle_eq_sign() {\n        next();\n        if (peek() === \">\") {\n            next();\n            return token(\"arrow\", \"=>\");\n        } else {\n            return read_operator(\"=\");\n        }\n    }\n\n    function handle_dot() {\n        next();\n        if (is_digit(peek().charCodeAt(0))) {\n            return read_num(\".\");\n        }\n        if (peek() === \".\") {\n            next();  // Consume second dot\n            next();  // Consume third dot\n            return token(\"expand\", \"...\");\n        }\n\n        return token(\"punc\", \".\");\n    }\n\n    function read_word() {\n        var word = read_name();\n        if (prev_was_dot) return token(\"name\", word);\n        return KEYWORDS_ATOM.has(word) ? token(\"atom\", word)\n            : !KEYWORDS.has(word) ? token(\"name\", word)\n            : OPERATORS.has(word) ? token(\"operator\", word)\n            : token(\"keyword\", word);\n    }\n\n    function with_eof_error(eof_error, cont) {\n        return function(x) {\n            try {\n                return cont(x);\n            } catch(ex) {\n                if (ex === EX_EOF) parse_error(eof_error);\n                else throw ex;\n            }\n        };\n    }\n\n    function next_token(force_regexp) {\n        if (force_regexp != null)\n            return read_regexp(force_regexp);\n        if (shebang && S.pos == 0 && looking_at(\"#!\")) {\n            start_token();\n            forward(2);\n            skip_line_comment(\"comment5\");\n        }\n        for (;;) {\n            skip_whitespace();\n            start_token();\n            if (html5_comments) {\n                if (looking_at(\"<!--\")) {\n                    forward(4);\n                    skip_line_comment(\"comment3\");\n                    continue;\n                }\n                if (looking_at(\"-->\") && S.newline_before) {\n                    forward(3);\n                    skip_line_comment(\"comment4\");\n                    continue;\n                }\n            }\n            var ch = peek();\n            if (!ch) return token(\"eof\");\n            var code = ch.charCodeAt(0);\n            switch (code) {\n              case 34: case 39: return read_string();\n              case 46: return handle_dot();\n              case 47: {\n                  var tok = handle_slash();\n                  if (tok === next_token) continue;\n                  return tok;\n              }\n              case 61: return handle_eq_sign();\n              case 96: return read_template_characters(true);\n              case 123:\n                S.brace_counter++;\n                break;\n              case 125:\n                S.brace_counter--;\n                if (S.template_braces.length > 0\n                    && S.template_braces[S.template_braces.length - 1] === S.brace_counter)\n                    return read_template_characters(false);\n                break;\n            }\n            if (is_digit(code)) return read_num();\n            if (PUNC_CHARS.has(ch)) return token(\"punc\", next());\n            if (OPERATOR_CHARS.has(ch)) return read_operator();\n            if (code == 92 || is_identifier_start(ch)) return read_word();\n            break;\n        }\n        parse_error(\"Unexpected character '\" + ch + \"'\");\n    }\n\n    next_token.next = next;\n    next_token.peek = peek;\n\n    next_token.context = function(nc) {\n        if (nc) S = nc;\n        return S;\n    };\n\n    next_token.add_directive = function(directive) {\n        S.directive_stack[S.directive_stack.length - 1].push(directive);\n\n        if (S.directives[directive] === undefined) {\n            S.directives[directive] = 1;\n        } else {\n            S.directives[directive]++;\n        }\n    };\n\n    next_token.push_directives_stack = function() {\n        S.directive_stack.push([]);\n    };\n\n    next_token.pop_directives_stack = function() {\n        var directives = S.directive_stack[S.directive_stack.length - 1];\n\n        for (var i = 0; i < directives.length; i++) {\n            S.directives[directives[i]]--;\n        }\n\n        S.directive_stack.pop();\n    };\n\n    next_token.has_directive = function(directive) {\n        return S.directives[directive] > 0;\n    };\n\n    return next_token;\n\n}\n\n/* -----[ Parser (constants) ]----- */\n\nvar UNARY_PREFIX = makePredicate([\n    \"typeof\",\n    \"void\",\n    \"delete\",\n    \"--\",\n    \"++\",\n    \"!\",\n    \"~\",\n    \"-\",\n    \"+\"\n]);\n\nvar UNARY_POSTFIX = makePredicate([ \"--\", \"++\" ]);\n\nvar ASSIGNMENT = makePredicate([ \"=\", \"+=\", \"-=\", \"/=\", \"*=\", \"**=\", \"%=\", \">>=\", \"<<=\", \">>>=\", \"|=\", \"^=\", \"&=\" ]);\n\nvar PRECEDENCE = (function(a, ret) {\n    for (var i = 0; i < a.length; ++i) {\n        var b = a[i];\n        for (var j = 0; j < b.length; ++j) {\n            ret[b[j]] = i + 1;\n        }\n    }\n    return ret;\n})(\n    [\n        [\"||\"],\n        [\"??\"],\n        [\"&&\"],\n        [\"|\"],\n        [\"^\"],\n        [\"&\"],\n        [\"==\", \"===\", \"!=\", \"!==\"],\n        [\"<\", \">\", \"<=\", \">=\", \"in\", \"instanceof\"],\n        [\">>\", \"<<\", \">>>\"],\n        [\"+\", \"-\"],\n        [\"*\", \"/\", \"%\"],\n        [\"**\"]\n    ],\n    {}\n);\n\nvar ATOMIC_START_TOKEN = makePredicate([ \"atom\", \"num\", \"big_int\", \"string\", \"regexp\", \"name\" ]);\n\n/* -----[ Parser ]----- */\n\nfunction parse($TEXT, options) {\n    // maps start tokens to count of comments found outside of their parens\n    // Example: /* I count */ ( /* I don't */ foo() )\n    // Useful because comments_before property of call with parens outside\n    // contains both comments inside and outside these parens. Used to find the\n    // right #__PURE__ comments for an expression\n    const outer_comments_before_counts = new Map();\n\n    options = defaults(options, {\n        bare_returns   : false,\n        ecma           : 2017,\n        expression     : false,\n        filename       : null,\n        html5_comments : true,\n        module         : false,\n        shebang        : true,\n        strict         : false,\n        toplevel       : null,\n    }, true);\n\n    var S = {\n        input         : (typeof $TEXT == \"string\"\n                         ? tokenizer($TEXT, options.filename,\n                                     options.html5_comments, options.shebang)\n                         : $TEXT),\n        token         : null,\n        prev          : null,\n        peeked        : null,\n        in_function   : 0,\n        in_async      : -1,\n        in_generator  : -1,\n        in_directives : true,\n        in_loop       : 0,\n        labels        : []\n    };\n\n    S.token = next();\n\n    function is(type, value) {\n        return is_token(S.token, type, value);\n    }\n\n    function peek() { return S.peeked || (S.peeked = S.input()); }\n\n    function next() {\n        S.prev = S.token;\n\n        if (!S.peeked) peek();\n        S.token = S.peeked;\n        S.peeked = null;\n        S.in_directives = S.in_directives && (\n            S.token.type == \"string\" || is(\"punc\", \";\")\n        );\n        return S.token;\n    }\n\n    function prev() {\n        return S.prev;\n    }\n\n    function croak(msg, line, col, pos) {\n        var ctx = S.input.context();\n        js_error(msg,\n                 ctx.filename,\n                 line != null ? line : ctx.tokline,\n                 col != null ? col : ctx.tokcol,\n                 pos != null ? pos : ctx.tokpos);\n    }\n\n    function token_error(token, msg) {\n        croak(msg, token.line, token.col);\n    }\n\n    function unexpected(token) {\n        if (token == null)\n            token = S.token;\n        token_error(token, \"Unexpected token: \" + token.type + \" (\" + token.value + \")\");\n    }\n\n    function expect_token(type, val) {\n        if (is(type, val)) {\n            return next();\n        }\n        token_error(S.token, \"Unexpected token \" + S.token.type + \" «\" + S.token.value + \"»\" + \", expected \" + type + \" «\" + val + \"»\");\n    }\n\n    function expect(punc) { return expect_token(\"punc\", punc); }\n\n    function has_newline_before(token) {\n        return token.nlb || !token.comments_before.every((comment) => !comment.nlb);\n    }\n\n    function can_insert_semicolon() {\n        return !options.strict\n            && (is(\"eof\") || is(\"punc\", \"}\") || has_newline_before(S.token));\n    }\n\n    function is_in_generator() {\n        return S.in_generator === S.in_function;\n    }\n\n    function is_in_async() {\n        return S.in_async === S.in_function;\n    }\n\n    function semicolon(optional) {\n        if (is(\"punc\", \";\")) next();\n        else if (!optional && !can_insert_semicolon()) unexpected();\n    }\n\n    function parenthesised() {\n        expect(\"(\");\n        var exp = expression(true);\n        expect(\")\");\n        return exp;\n    }\n\n    function embed_tokens(parser) {\n        return function(...args) {\n            const start = S.token;\n            const expr = parser(...args);\n            expr.start = start;\n            expr.end = prev();\n            return expr;\n        };\n    }\n\n    function handle_regexp() {\n        if (is(\"operator\", \"/\") || is(\"operator\", \"/=\")) {\n            S.peeked = null;\n            S.token = S.input(S.token.value.substr(1)); // force regexp\n        }\n    }\n\n    var statement = embed_tokens(function(is_export_default, is_for_body, is_if_body) {\n        handle_regexp();\n        switch (S.token.type) {\n          case \"string\":\n            if (S.in_directives) {\n                var token = peek();\n                if (!S.token.raw.includes(\"\\\\\")\n                    && (is_token(token, \"punc\", \";\")\n                        || is_token(token, \"punc\", \"}\")\n                        || has_newline_before(token)\n                        || is_token(token, \"eof\"))) {\n                    S.input.add_directive(S.token.value);\n                } else {\n                    S.in_directives = false;\n                }\n            }\n            var dir = S.in_directives, stat = simple_statement();\n            return dir && stat.body instanceof AST_String ? new AST_Directive(stat.body) : stat;\n          case \"template_head\":\n          case \"num\":\n          case \"big_int\":\n          case \"regexp\":\n          case \"operator\":\n          case \"atom\":\n            return simple_statement();\n\n          case \"name\":\n            if (S.token.value == \"async\" && is_token(peek(), \"keyword\", \"function\")) {\n                next();\n                next();\n                if (is_for_body) {\n                    croak(\"functions are not allowed as the body of a loop\");\n                }\n                return function_(AST_Defun, false, true, is_export_default);\n            }\n            if (S.token.value == \"import\" && !is_token(peek(), \"punc\", \"(\")) {\n                next();\n                var node = import_();\n                semicolon();\n                return node;\n            }\n            return is_token(peek(), \"punc\", \":\")\n                ? labeled_statement()\n                : simple_statement();\n\n          case \"punc\":\n            switch (S.token.value) {\n              case \"{\":\n                return new AST_BlockStatement({\n                    start : S.token,\n                    body  : block_(),\n                    end   : prev()\n                });\n              case \"[\":\n              case \"(\":\n                return simple_statement();\n              case \";\":\n                S.in_directives = false;\n                next();\n                return new AST_EmptyStatement();\n              default:\n                unexpected();\n            }\n\n          case \"keyword\":\n            switch (S.token.value) {\n              case \"break\":\n                next();\n                return break_cont(AST_Break);\n\n              case \"continue\":\n                next();\n                return break_cont(AST_Continue);\n\n              case \"debugger\":\n                next();\n                semicolon();\n                return new AST_Debugger();\n\n              case \"do\":\n                next();\n                var body = in_loop(statement);\n                expect_token(\"keyword\", \"while\");\n                var condition = parenthesised();\n                semicolon(true);\n                return new AST_Do({\n                    body      : body,\n                    condition : condition\n                });\n\n              case \"while\":\n                next();\n                return new AST_While({\n                    condition : parenthesised(),\n                    body      : in_loop(function() { return statement(false, true); })\n                });\n\n              case \"for\":\n                next();\n                return for_();\n\n              case \"class\":\n                next();\n                if (is_for_body) {\n                    croak(\"classes are not allowed as the body of a loop\");\n                }\n                if (is_if_body) {\n                    croak(\"classes are not allowed as the body of an if\");\n                }\n                return class_(AST_DefClass);\n\n              case \"function\":\n                next();\n                if (is_for_body) {\n                    croak(\"functions are not allowed as the body of a loop\");\n                }\n                return function_(AST_Defun, false, false, is_export_default);\n\n              case \"if\":\n                next();\n                return if_();\n\n              case \"return\":\n                if (S.in_function == 0 && !options.bare_returns)\n                    croak(\"'return' outside of function\");\n                next();\n                var value = null;\n                if (is(\"punc\", \";\")) {\n                    next();\n                } else if (!can_insert_semicolon()) {\n                    value = expression(true);\n                    semicolon();\n                }\n                return new AST_Return({\n                    value: value\n                });\n\n              case \"switch\":\n                next();\n                return new AST_Switch({\n                    expression : parenthesised(),\n                    body       : in_loop(switch_body_)\n                });\n\n              case \"throw\":\n                next();\n                if (has_newline_before(S.token))\n                    croak(\"Illegal newline after 'throw'\");\n                var value = expression(true);\n                semicolon();\n                return new AST_Throw({\n                    value: value\n                });\n\n              case \"try\":\n                next();\n                return try_();\n\n              case \"var\":\n                next();\n                var node = var_();\n                semicolon();\n                return node;\n\n              case \"let\":\n                next();\n                var node = let_();\n                semicolon();\n                return node;\n\n              case \"const\":\n                next();\n                var node = const_();\n                semicolon();\n                return node;\n\n              case \"with\":\n                if (S.input.has_directive(\"use strict\")) {\n                    croak(\"Strict mode may not include a with statement\");\n                }\n                next();\n                return new AST_With({\n                    expression : parenthesised(),\n                    body       : statement()\n                });\n\n              case \"export\":\n                if (!is_token(peek(), \"punc\", \"(\")) {\n                    next();\n                    var node = export_();\n                    if (is(\"punc\", \";\")) semicolon();\n                    return node;\n                }\n            }\n        }\n        unexpected();\n    });\n\n    function labeled_statement() {\n        var label = as_symbol(AST_Label);\n        if (label.name === \"await\" && is_in_async()) {\n            token_error(S.prev, \"await cannot be used as label inside async function\");\n        }\n        if (S.labels.some((l) => l.name === label.name)) {\n            // ECMA-262, 12.12: An ECMAScript program is considered\n            // syntactically incorrect if it contains a\n            // LabelledStatement that is enclosed by a\n            // LabelledStatement with the same Identifier as label.\n            croak(\"Label \" + label.name + \" defined twice\");\n        }\n        expect(\":\");\n        S.labels.push(label);\n        var stat = statement();\n        S.labels.pop();\n        if (!(stat instanceof AST_IterationStatement)) {\n            // check for `continue` that refers to this label.\n            // those should be reported as syntax errors.\n            // https://github.com/mishoo/UglifyJS2/issues/287\n            label.references.forEach(function(ref) {\n                if (ref instanceof AST_Continue) {\n                    ref = ref.label.start;\n                    croak(\"Continue label `\" + label.name + \"` refers to non-IterationStatement.\",\n                          ref.line, ref.col, ref.pos);\n                }\n            });\n        }\n        return new AST_LabeledStatement({ body: stat, label: label });\n    }\n\n    function simple_statement(tmp) {\n        return new AST_SimpleStatement({ body: (tmp = expression(true), semicolon(), tmp) });\n    }\n\n    function break_cont(type) {\n        var label = null, ldef;\n        if (!can_insert_semicolon()) {\n            label = as_symbol(AST_LabelRef, true);\n        }\n        if (label != null) {\n            ldef = S.labels.find((l) => l.name === label.name);\n            if (!ldef)\n                croak(\"Undefined label \" + label.name);\n            label.thedef = ldef;\n        } else if (S.in_loop == 0)\n            croak(type.TYPE + \" not inside a loop or switch\");\n        semicolon();\n        var stat = new type({ label: label });\n        if (ldef) ldef.references.push(stat);\n        return stat;\n    }\n\n    function for_() {\n        var for_await_error = \"`for await` invalid in this context\";\n        var await_tok = S.token;\n        if (await_tok.type == \"name\" && await_tok.value == \"await\") {\n            if (!is_in_async()) {\n                token_error(await_tok, for_await_error);\n            }\n            next();\n        } else {\n            await_tok = false;\n        }\n        expect(\"(\");\n        var init = null;\n        if (!is(\"punc\", \";\")) {\n            init =\n                is(\"keyword\", \"var\") ? (next(), var_(true)) :\n                is(\"keyword\", \"let\") ? (next(), let_(true)) :\n                is(\"keyword\", \"const\") ? (next(), const_(true)) :\n                                       expression(true, true);\n            var is_in = is(\"operator\", \"in\");\n            var is_of = is(\"name\", \"of\");\n            if (await_tok && !is_of) {\n                token_error(await_tok, for_await_error);\n            }\n            if (is_in || is_of) {\n                if (init instanceof AST_Definitions) {\n                    if (init.definitions.length > 1)\n                        token_error(init.start, \"Only one variable declaration allowed in for..in loop\");\n                } else if (!(is_assignable(init) || (init = to_destructuring(init)) instanceof AST_Destructuring)) {\n                    token_error(init.start, \"Invalid left-hand side in for..in loop\");\n                }\n                next();\n                if (is_in) {\n                    return for_in(init);\n                } else {\n                    return for_of(init, !!await_tok);\n                }\n            }\n        } else if (await_tok) {\n            token_error(await_tok, for_await_error);\n        }\n        return regular_for(init);\n    }\n\n    function regular_for(init) {\n        expect(\";\");\n        var test = is(\"punc\", \";\") ? null : expression(true);\n        expect(\";\");\n        var step = is(\"punc\", \")\") ? null : expression(true);\n        expect(\")\");\n        return new AST_For({\n            init      : init,\n            condition : test,\n            step      : step,\n            body      : in_loop(function() { return statement(false, true); })\n        });\n    }\n\n    function for_of(init, is_await) {\n        var lhs = init instanceof AST_Definitions ? init.definitions[0].name : null;\n        var obj = expression(true);\n        expect(\")\");\n        return new AST_ForOf({\n            await  : is_await,\n            init   : init,\n            name   : lhs,\n            object : obj,\n            body   : in_loop(function() { return statement(false, true); })\n        });\n    }\n\n    function for_in(init) {\n        var obj = expression(true);\n        expect(\")\");\n        return new AST_ForIn({\n            init   : init,\n            object : obj,\n            body   : in_loop(function() { return statement(false, true); })\n        });\n    }\n\n    var arrow_function = function(start, argnames, is_async) {\n        if (has_newline_before(S.token)) {\n            croak(\"Unexpected newline before arrow (=>)\");\n        }\n\n        expect_token(\"arrow\", \"=>\");\n\n        var body = _function_body(is(\"punc\", \"{\"), false, is_async);\n\n        var end =\n            body instanceof Array && body.length ? body[body.length - 1].end :\n            body instanceof Array ? start :\n                body.end;\n\n        return new AST_Arrow({\n            start    : start,\n            end      : end,\n            async    : is_async,\n            argnames : argnames,\n            body     : body\n        });\n    };\n\n    var function_ = function(ctor, is_generator_property, is_async, is_export_default) {\n        var in_statement = ctor === AST_Defun;\n        var is_generator = is(\"operator\", \"*\");\n        if (is_generator) {\n            next();\n        }\n\n        var name = is(\"name\") ? as_symbol(in_statement ? AST_SymbolDefun : AST_SymbolLambda) : null;\n        if (in_statement && !name) {\n            if (is_export_default) {\n                ctor = AST_Function;\n            } else {\n                unexpected();\n            }\n        }\n\n        if (name && ctor !== AST_Accessor && !(name instanceof AST_SymbolDeclaration))\n            unexpected(prev());\n\n        var args = [];\n        var body = _function_body(true, is_generator || is_generator_property, is_async, name, args);\n        return new ctor({\n            start : args.start,\n            end   : body.end,\n            is_generator: is_generator,\n            async : is_async,\n            name  : name,\n            argnames: args,\n            body  : body\n        });\n    };\n\n    function track_used_binding_identifiers(is_parameter, strict) {\n        var parameters = new Set();\n        var duplicate = false;\n        var default_assignment = false;\n        var spread = false;\n        var strict_mode = !!strict;\n        var tracker = {\n            add_parameter: function(token) {\n                if (parameters.has(token.value)) {\n                    if (duplicate === false) {\n                        duplicate = token;\n                    }\n                    tracker.check_strict();\n                } else {\n                    parameters.add(token.value);\n                    if (is_parameter) {\n                        switch (token.value) {\n                          case \"arguments\":\n                          case \"eval\":\n                          case \"yield\":\n                            if (strict_mode) {\n                                token_error(token, \"Unexpected \" + token.value + \" identifier as parameter inside strict mode\");\n                            }\n                            break;\n                          default:\n                            if (RESERVED_WORDS.has(token.value)) {\n                                unexpected();\n                            }\n                        }\n                    }\n                }\n            },\n            mark_default_assignment: function(token) {\n                if (default_assignment === false) {\n                    default_assignment = token;\n                }\n            },\n            mark_spread: function(token) {\n                if (spread === false) {\n                    spread = token;\n                }\n            },\n            mark_strict_mode: function() {\n                strict_mode = true;\n            },\n            is_strict: function() {\n                return default_assignment !== false || spread !== false || strict_mode;\n            },\n            check_strict: function() {\n                if (tracker.is_strict() && duplicate !== false) {\n                    token_error(duplicate, \"Parameter \" + duplicate.value + \" was used already\");\n                }\n            }\n        };\n\n        return tracker;\n    }\n\n    function parameters(params) {\n        var used_parameters = track_used_binding_identifiers(true, S.input.has_directive(\"use strict\"));\n\n        expect(\"(\");\n\n        while (!is(\"punc\", \")\")) {\n            var param = parameter(used_parameters);\n            params.push(param);\n\n            if (!is(\"punc\", \")\")) {\n                expect(\",\");\n                if (is(\"punc\", \")\") && options.ecma < 2017) unexpected();\n            }\n\n            if (param instanceof AST_Expansion) {\n                break;\n            }\n        }\n\n        next();\n    }\n\n    function parameter(used_parameters, symbol_type) {\n        var param;\n        var expand = false;\n        if (used_parameters === undefined) {\n            used_parameters = track_used_binding_identifiers(true, S.input.has_directive(\"use strict\"));\n        }\n        if (is(\"expand\", \"...\")) {\n            expand = S.token;\n            used_parameters.mark_spread(S.token);\n            next();\n        }\n        param = binding_element(used_parameters, symbol_type);\n\n        if (is(\"operator\", \"=\") && expand === false) {\n            used_parameters.mark_default_assignment(S.token);\n            next();\n            param = new AST_DefaultAssign({\n                start: param.start,\n                left: param,\n                operator: \"=\",\n                right: expression(false),\n                end: S.token\n            });\n        }\n\n        if (expand !== false) {\n            if (!is(\"punc\", \")\")) {\n                unexpected();\n            }\n            param = new AST_Expansion({\n                start: expand,\n                expression: param,\n                end: expand\n            });\n        }\n        used_parameters.check_strict();\n\n        return param;\n    }\n\n    function binding_element(used_parameters, symbol_type) {\n        var elements = [];\n        var first = true;\n        var is_expand = false;\n        var expand_token;\n        var first_token = S.token;\n        if (used_parameters === undefined) {\n            used_parameters = track_used_binding_identifiers(false, S.input.has_directive(\"use strict\"));\n        }\n        symbol_type = symbol_type === undefined ? AST_SymbolFunarg : symbol_type;\n        if (is(\"punc\", \"[\")) {\n            next();\n            while (!is(\"punc\", \"]\")) {\n                if (first) {\n                    first = false;\n                } else {\n                    expect(\",\");\n                }\n\n                if (is(\"expand\", \"...\")) {\n                    is_expand = true;\n                    expand_token = S.token;\n                    used_parameters.mark_spread(S.token);\n                    next();\n                }\n                if (is(\"punc\")) {\n                    switch (S.token.value) {\n                      case \",\":\n                        elements.push(new AST_Hole({\n                            start: S.token,\n                            end: S.token\n                        }));\n                        continue;\n                      case \"]\": // Trailing comma after last element\n                        break;\n                      case \"[\":\n                      case \"{\":\n                        elements.push(binding_element(used_parameters, symbol_type));\n                        break;\n                      default:\n                        unexpected();\n                    }\n                } else if (is(\"name\")) {\n                    used_parameters.add_parameter(S.token);\n                    elements.push(as_symbol(symbol_type));\n                } else {\n                    croak(\"Invalid function parameter\");\n                }\n                if (is(\"operator\", \"=\") && is_expand === false) {\n                    used_parameters.mark_default_assignment(S.token);\n                    next();\n                    elements[elements.length - 1] = new AST_DefaultAssign({\n                        start: elements[elements.length - 1].start,\n                        left: elements[elements.length - 1],\n                        operator: \"=\",\n                        right: expression(false),\n                        end: S.token\n                    });\n                }\n                if (is_expand) {\n                    if (!is(\"punc\", \"]\")) {\n                        croak(\"Rest element must be last element\");\n                    }\n                    elements[elements.length - 1] = new AST_Expansion({\n                        start: expand_token,\n                        expression: elements[elements.length - 1],\n                        end: expand_token\n                    });\n                }\n            }\n            expect(\"]\");\n            used_parameters.check_strict();\n            return new AST_Destructuring({\n                start: first_token,\n                names: elements,\n                is_array: true,\n                end: prev()\n            });\n        } else if (is(\"punc\", \"{\")) {\n            next();\n            while (!is(\"punc\", \"}\")) {\n                if (first) {\n                    first = false;\n                } else {\n                    expect(\",\");\n                }\n                if (is(\"expand\", \"...\")) {\n                    is_expand = true;\n                    expand_token = S.token;\n                    used_parameters.mark_spread(S.token);\n                    next();\n                }\n                if (is(\"name\") && (is_token(peek(), \"punc\") || is_token(peek(), \"operator\")) && [\",\", \"}\", \"=\"].includes(peek().value)) {\n                    used_parameters.add_parameter(S.token);\n                    var start = prev();\n                    var value = as_symbol(symbol_type);\n                    if (is_expand) {\n                        elements.push(new AST_Expansion({\n                            start: expand_token,\n                            expression: value,\n                            end: value.end,\n                        }));\n                    } else {\n                        elements.push(new AST_ObjectKeyVal({\n                            start: start,\n                            key: value.name,\n                            value: value,\n                            end: value.end,\n                        }));\n                    }\n                } else if (is(\"punc\", \"}\")) {\n                    continue; // Allow trailing hole\n                } else {\n                    var property_token = S.token;\n                    var property = as_property_name();\n                    if (property === null) {\n                        unexpected(prev());\n                    } else if (prev().type === \"name\" && !is(\"punc\", \":\")) {\n                        elements.push(new AST_ObjectKeyVal({\n                            start: prev(),\n                            key: property,\n                            value: new symbol_type({\n                                start: prev(),\n                                name: property,\n                                end: prev()\n                            }),\n                            end: prev()\n                        }));\n                    } else {\n                        expect(\":\");\n                        elements.push(new AST_ObjectKeyVal({\n                            start: property_token,\n                            quote: property_token.quote,\n                            key: property,\n                            value: binding_element(used_parameters, symbol_type),\n                            end: prev()\n                        }));\n                    }\n                }\n                if (is_expand) {\n                    if (!is(\"punc\", \"}\")) {\n                        croak(\"Rest element must be last element\");\n                    }\n                } else if (is(\"operator\", \"=\")) {\n                    used_parameters.mark_default_assignment(S.token);\n                    next();\n                    elements[elements.length - 1].value = new AST_DefaultAssign({\n                        start: elements[elements.length - 1].value.start,\n                        left: elements[elements.length - 1].value,\n                        operator: \"=\",\n                        right: expression(false),\n                        end: S.token\n                    });\n                }\n            }\n            expect(\"}\");\n            used_parameters.check_strict();\n            return new AST_Destructuring({\n                start: first_token,\n                names: elements,\n                is_array: false,\n                end: prev()\n            });\n        } else if (is(\"name\")) {\n            used_parameters.add_parameter(S.token);\n            return as_symbol(symbol_type);\n        } else {\n            croak(\"Invalid function parameter\");\n        }\n    }\n\n    function params_or_seq_(allow_arrows, maybe_sequence) {\n        var spread_token;\n        var invalid_sequence;\n        var trailing_comma;\n        var a = [];\n        expect(\"(\");\n        while (!is(\"punc\", \")\")) {\n            if (spread_token) unexpected(spread_token);\n            if (is(\"expand\", \"...\")) {\n                spread_token = S.token;\n                if (maybe_sequence) invalid_sequence = S.token;\n                next();\n                a.push(new AST_Expansion({\n                    start: prev(),\n                    expression: expression(),\n                    end: S.token,\n                }));\n            } else {\n                a.push(expression());\n            }\n            if (!is(\"punc\", \")\")) {\n                expect(\",\");\n                if (is(\"punc\", \")\")) {\n                    if (options.ecma < 2017) unexpected();\n                    trailing_comma = prev();\n                    if (maybe_sequence) invalid_sequence = trailing_comma;\n                }\n            }\n        }\n        expect(\")\");\n        if (allow_arrows && is(\"arrow\", \"=>\")) {\n            if (spread_token && trailing_comma) unexpected(trailing_comma);\n        } else if (invalid_sequence) {\n            unexpected(invalid_sequence);\n        }\n        return a;\n    }\n\n    function _function_body(block, generator, is_async, name, args) {\n        var loop = S.in_loop;\n        var labels = S.labels;\n        var current_generator = S.in_generator;\n        var current_async = S.in_async;\n        ++S.in_function;\n        if (generator)\n            S.in_generator = S.in_function;\n        if (is_async)\n            S.in_async = S.in_function;\n        if (args) parameters(args);\n        if (block)\n            S.in_directives = true;\n        S.in_loop = 0;\n        S.labels = [];\n        if (block) {\n            S.input.push_directives_stack();\n            var a = block_();\n            if (name) _verify_symbol(name);\n            if (args) args.forEach(_verify_symbol);\n            S.input.pop_directives_stack();\n        } else {\n            var a = [new AST_Return({\n                start: S.token,\n                value: expression(false),\n                end: S.token\n            })];\n        }\n        --S.in_function;\n        S.in_loop = loop;\n        S.labels = labels;\n        S.in_generator = current_generator;\n        S.in_async = current_async;\n        return a;\n    }\n\n    function _await_expression() {\n        // Previous token must be \"await\" and not be interpreted as an identifier\n        if (!is_in_async()) {\n            croak(\"Unexpected await expression outside async function\",\n                S.prev.line, S.prev.col, S.prev.pos);\n        }\n        // the await expression is parsed as a unary expression in Babel\n        return new AST_Await({\n            start: prev(),\n            end: S.token,\n            expression : maybe_unary(true),\n        });\n    }\n\n    function _yield_expression() {\n        // Previous token must be keyword yield and not be interpret as an identifier\n        if (!is_in_generator()) {\n            croak(\"Unexpected yield expression outside generator function\",\n                S.prev.line, S.prev.col, S.prev.pos);\n        }\n        var start = S.token;\n        var star = false;\n        var has_expression = true;\n\n        // Attempt to get expression or star (and then the mandatory expression)\n        // behind yield on the same line.\n        //\n        // If nothing follows on the same line of the yieldExpression,\n        // it should default to the value `undefined` for yield to return.\n        // In that case, the `undefined` stored as `null` in ast.\n        //\n        // Note 1: It isn't allowed for yield* to close without an expression\n        // Note 2: If there is a nlb between yield and star, it is interpret as\n        //         yield <explicit undefined> <inserted automatic semicolon> *\n        if (can_insert_semicolon() ||\n            (is(\"punc\") && PUNC_AFTER_EXPRESSION.has(S.token.value))) {\n            has_expression = false;\n\n        } else if (is(\"operator\", \"*\")) {\n            star = true;\n            next();\n        }\n\n        return new AST_Yield({\n            start      : start,\n            is_star    : star,\n            expression : has_expression ? expression() : null,\n            end        : prev()\n        });\n    }\n\n    function if_() {\n        var cond = parenthesised(), body = statement(false, false, true), belse = null;\n        if (is(\"keyword\", \"else\")) {\n            next();\n            belse = statement(false, false, true);\n        }\n        return new AST_If({\n            condition   : cond,\n            body        : body,\n            alternative : belse\n        });\n    }\n\n    function block_() {\n        expect(\"{\");\n        var a = [];\n        while (!is(\"punc\", \"}\")) {\n            if (is(\"eof\")) unexpected();\n            a.push(statement());\n        }\n        next();\n        return a;\n    }\n\n    function switch_body_() {\n        expect(\"{\");\n        var a = [], cur = null, branch = null, tmp;\n        while (!is(\"punc\", \"}\")) {\n            if (is(\"eof\")) unexpected();\n            if (is(\"keyword\", \"case\")) {\n                if (branch) branch.end = prev();\n                cur = [];\n                branch = new AST_Case({\n                    start      : (tmp = S.token, next(), tmp),\n                    expression : expression(true),\n                    body       : cur\n                });\n                a.push(branch);\n                expect(\":\");\n            } else if (is(\"keyword\", \"default\")) {\n                if (branch) branch.end = prev();\n                cur = [];\n                branch = new AST_Default({\n                    start : (tmp = S.token, next(), expect(\":\"), tmp),\n                    body  : cur\n                });\n                a.push(branch);\n            } else {\n                if (!cur) unexpected();\n                cur.push(statement());\n            }\n        }\n        if (branch) branch.end = prev();\n        next();\n        return a;\n    }\n\n    function try_() {\n        var body = block_(), bcatch = null, bfinally = null;\n        if (is(\"keyword\", \"catch\")) {\n            var start = S.token;\n            next();\n            if (is(\"punc\", \"{\")) {\n                var name = null;\n            } else {\n                expect(\"(\");\n                var name = parameter(undefined, AST_SymbolCatch);\n                expect(\")\");\n            }\n            bcatch = new AST_Catch({\n                start   : start,\n                argname : name,\n                body    : block_(),\n                end     : prev()\n            });\n        }\n        if (is(\"keyword\", \"finally\")) {\n            var start = S.token;\n            next();\n            bfinally = new AST_Finally({\n                start : start,\n                body  : block_(),\n                end   : prev()\n            });\n        }\n        if (!bcatch && !bfinally)\n            croak(\"Missing catch/finally blocks\");\n        return new AST_Try({\n            body     : body,\n            bcatch   : bcatch,\n            bfinally : bfinally\n        });\n    }\n\n    function vardefs(no_in, kind) {\n        var a = [];\n        var def;\n        for (;;) {\n            var sym_type =\n                kind === \"var\" ? AST_SymbolVar :\n                kind === \"const\" ? AST_SymbolConst :\n                kind === \"let\" ? AST_SymbolLet : null;\n            if (is(\"punc\", \"{\") || is(\"punc\", \"[\")) {\n                def = new AST_VarDef({\n                    start: S.token,\n                    name: binding_element(undefined ,sym_type),\n                    value: is(\"operator\", \"=\") ? (expect_token(\"operator\", \"=\"), expression(false, no_in)) : null,\n                    end: prev()\n                });\n            } else {\n                def = new AST_VarDef({\n                    start : S.token,\n                    name  : as_symbol(sym_type),\n                    value : is(\"operator\", \"=\")\n                        ? (next(), expression(false, no_in))\n                        : !no_in && kind === \"const\"\n                            ? croak(\"Missing initializer in const declaration\") : null,\n                    end   : prev()\n                });\n                if (def.name.name == \"import\") croak(\"Unexpected token: import\");\n            }\n            a.push(def);\n            if (!is(\"punc\", \",\"))\n                break;\n            next();\n        }\n        return a;\n    }\n\n    var var_ = function(no_in) {\n        return new AST_Var({\n            start       : prev(),\n            definitions : vardefs(no_in, \"var\"),\n            end         : prev()\n        });\n    };\n\n    var let_ = function(no_in) {\n        return new AST_Let({\n            start       : prev(),\n            definitions : vardefs(no_in, \"let\"),\n            end         : prev()\n        });\n    };\n\n    var const_ = function(no_in) {\n        return new AST_Const({\n            start       : prev(),\n            definitions : vardefs(no_in, \"const\"),\n            end         : prev()\n        });\n    };\n\n    var new_ = function(allow_calls) {\n        var start = S.token;\n        expect_token(\"operator\", \"new\");\n        if (is(\"punc\", \".\")) {\n            next();\n            expect_token(\"name\", \"target\");\n            return subscripts(new AST_NewTarget({\n                start : start,\n                end   : prev()\n            }), allow_calls);\n        }\n        var newexp = expr_atom(false), args;\n        if (is(\"punc\", \"(\")) {\n            next();\n            args = expr_list(\")\", options.ecma >= 2017);\n        } else {\n            args = [];\n        }\n        var call = new AST_New({\n            start      : start,\n            expression : newexp,\n            args       : args,\n            end        : prev()\n        });\n        annotate(call);\n        return subscripts(call, allow_calls);\n    };\n\n    function as_atom_node() {\n        var tok = S.token, ret;\n        switch (tok.type) {\n          case \"name\":\n            ret = _make_symbol(AST_SymbolRef);\n            break;\n          case \"num\":\n            ret = new AST_Number({ start: tok, end: tok, value: tok.value });\n            break;\n          case \"big_int\":\n            ret = new AST_BigInt({ start: tok, end: tok, value: tok.value });\n            break;\n          case \"string\":\n            ret = new AST_String({\n                start : tok,\n                end   : tok,\n                value : tok.value,\n                quote : tok.quote\n            });\n            break;\n          case \"regexp\":\n            ret = new AST_RegExp({ start: tok, end: tok, value: tok.value });\n            break;\n          case \"atom\":\n            switch (tok.value) {\n              case \"false\":\n                ret = new AST_False({ start: tok, end: tok });\n                break;\n              case \"true\":\n                ret = new AST_True({ start: tok, end: tok });\n                break;\n              case \"null\":\n                ret = new AST_Null({ start: tok, end: tok });\n                break;\n            }\n            break;\n        }\n        next();\n        return ret;\n    }\n\n    function to_fun_args(ex, _, __, default_seen_above) {\n        var insert_default = function(ex, default_value) {\n            if (default_value) {\n                return new AST_DefaultAssign({\n                    start: ex.start,\n                    left: ex,\n                    operator: \"=\",\n                    right: default_value,\n                    end: default_value.end\n                });\n            }\n            return ex;\n        };\n        if (ex instanceof AST_Object) {\n            return insert_default(new AST_Destructuring({\n                start: ex.start,\n                end: ex.end,\n                is_array: false,\n                names: ex.properties.map(to_fun_args)\n            }), default_seen_above);\n        } else if (ex instanceof AST_ObjectKeyVal) {\n            ex.value = to_fun_args(ex.value, 0, [ex.key]);\n            return insert_default(ex, default_seen_above);\n        } else if (ex instanceof AST_Hole) {\n            return ex;\n        } else if (ex instanceof AST_Destructuring) {\n            ex.names = ex.names.map(to_fun_args);\n            return insert_default(ex, default_seen_above);\n        } else if (ex instanceof AST_SymbolRef) {\n            return insert_default(new AST_SymbolFunarg({\n                name: ex.name,\n                start: ex.start,\n                end: ex.end\n            }), default_seen_above);\n        } else if (ex instanceof AST_Expansion) {\n            ex.expression = to_fun_args(ex.expression);\n            return insert_default(ex, default_seen_above);\n        } else if (ex instanceof AST_Array) {\n            return insert_default(new AST_Destructuring({\n                start: ex.start,\n                end: ex.end,\n                is_array: true,\n                names: ex.elements.map(to_fun_args)\n            }), default_seen_above);\n        } else if (ex instanceof AST_Assign) {\n            return insert_default(to_fun_args(ex.left, undefined, undefined, ex.right), default_seen_above);\n        } else if (ex instanceof AST_DefaultAssign) {\n            ex.left = to_fun_args(ex.left, 0, [ex.left]);\n            return ex;\n        } else {\n            croak(\"Invalid function parameter\", ex.start.line, ex.start.col);\n        }\n    }\n\n    var expr_atom = function(allow_calls, allow_arrows) {\n        if (is(\"operator\", \"new\")) {\n            return new_(allow_calls);\n        }\n        var start = S.token;\n        var peeked;\n        var async = is(\"name\", \"async\")\n            && (peeked = peek()).value != \"[\"\n            && peeked.type != \"arrow\"\n            && as_atom_node();\n        if (is(\"punc\")) {\n            switch (S.token.value) {\n              case \"(\":\n                if (async && !allow_calls) break;\n                var exprs = params_or_seq_(allow_arrows, !async);\n                if (allow_arrows && is(\"arrow\", \"=>\")) {\n                    return arrow_function(start, exprs.map(to_fun_args), !!async);\n                }\n                var ex = async ? new AST_Call({\n                    expression: async,\n                    args: exprs\n                }) : exprs.length == 1 ? exprs[0] : new AST_Sequence({\n                    expressions: exprs\n                });\n                if (ex.start) {\n                    const outer_comments_before = start.comments_before.length;\n                    outer_comments_before_counts.set(start, outer_comments_before);\n                    ex.start.comments_before.unshift(...start.comments_before);\n                    start.comments_before = ex.start.comments_before;\n                    if (outer_comments_before == 0 && start.comments_before.length > 0) {\n                        var comment = start.comments_before[0];\n                        if (!comment.nlb) {\n                            comment.nlb = start.nlb;\n                            start.nlb = false;\n                        }\n                    }\n                    start.comments_after = ex.start.comments_after;\n                }\n                ex.start = start;\n                var end = prev();\n                if (ex.end) {\n                    end.comments_before = ex.end.comments_before;\n                    ex.end.comments_after.push(...end.comments_after);\n                    end.comments_after = ex.end.comments_after;\n                }\n                ex.end = end;\n                if (ex instanceof AST_Call) annotate(ex);\n                return subscripts(ex, allow_calls);\n              case \"[\":\n                return subscripts(array_(), allow_calls);\n              case \"{\":\n                return subscripts(object_or_destructuring_(), allow_calls);\n            }\n            if (!async) unexpected();\n        }\n        if (allow_arrows && is(\"name\") && is_token(peek(), \"arrow\")) {\n            var param = new AST_SymbolFunarg({\n                name: S.token.value,\n                start: start,\n                end: start,\n            });\n            next();\n            return arrow_function(start, [param], !!async);\n        }\n        if (is(\"keyword\", \"function\")) {\n            next();\n            var func = function_(AST_Function, false, !!async);\n            func.start = start;\n            func.end = prev();\n            return subscripts(func, allow_calls);\n        }\n        if (async) return subscripts(async, allow_calls);\n        if (is(\"keyword\", \"class\")) {\n            next();\n            var cls = class_(AST_ClassExpression);\n            cls.start = start;\n            cls.end = prev();\n            return subscripts(cls, allow_calls);\n        }\n        if (is(\"template_head\")) {\n            return subscripts(template_string(false), allow_calls);\n        }\n        if (ATOMIC_START_TOKEN.has(S.token.type)) {\n            return subscripts(as_atom_node(), allow_calls);\n        }\n        unexpected();\n    };\n\n    function template_string() {\n        var segments = [], start = S.token;\n\n        segments.push(new AST_TemplateSegment({\n            start: S.token,\n            raw: S.token.raw,\n            value: S.token.value,\n            end: S.token\n        }));\n        while (!S.token.end) {\n            next();\n            handle_regexp();\n            segments.push(expression(true));\n\n            if (!is_token(\"template_substitution\")) {\n                unexpected();\n            }\n\n            segments.push(new AST_TemplateSegment({\n                start: S.token,\n                raw: S.token.raw,\n                value: S.token.value,\n                end: S.token\n            }));\n        }\n        next();\n\n        return new AST_TemplateString({\n            start: start,\n            segments: segments,\n            end: S.token\n        });\n    }\n\n    function expr_list(closing, allow_trailing_comma, allow_empty) {\n        var first = true, a = [];\n        while (!is(\"punc\", closing)) {\n            if (first) first = false; else expect(\",\");\n            if (allow_trailing_comma && is(\"punc\", closing)) break;\n            if (is(\"punc\", \",\") && allow_empty) {\n                a.push(new AST_Hole({ start: S.token, end: S.token }));\n            } else if (is(\"expand\", \"...\")) {\n                next();\n                a.push(new AST_Expansion({start: prev(), expression: expression(),end: S.token}));\n            } else {\n                a.push(expression(false));\n            }\n        }\n        next();\n        return a;\n    }\n\n    var array_ = embed_tokens(function() {\n        expect(\"[\");\n        return new AST_Array({\n            elements: expr_list(\"]\", !options.strict, true)\n        });\n    });\n\n    var create_accessor = embed_tokens((is_generator, is_async) => {\n        return function_(AST_Accessor, is_generator, is_async);\n    });\n\n    var object_or_destructuring_ = embed_tokens(function object_or_destructuring_() {\n        var start = S.token, first = true, a = [];\n        expect(\"{\");\n        while (!is(\"punc\", \"}\")) {\n            if (first) first = false; else expect(\",\");\n            if (!options.strict && is(\"punc\", \"}\"))\n                // allow trailing comma\n                break;\n\n            start = S.token;\n            if (start.type == \"expand\") {\n                next();\n                a.push(new AST_Expansion({\n                    start: start,\n                    expression: expression(false),\n                    end: prev(),\n                }));\n                continue;\n            }\n\n            var name = as_property_name();\n            var value;\n\n            // Check property and fetch value\n            if (!is(\"punc\", \":\")) {\n                var concise = concise_method_or_getset(name, start);\n                if (concise) {\n                    a.push(concise);\n                    continue;\n                }\n\n                value = new AST_SymbolRef({\n                    start: prev(),\n                    name: name,\n                    end: prev()\n                });\n            } else if (name === null) {\n                unexpected(prev());\n            } else {\n                next(); // `:` - see first condition\n                value = expression(false);\n            }\n\n            // Check for default value and alter value accordingly if necessary\n            if (is(\"operator\", \"=\")) {\n                next();\n                value = new AST_Assign({\n                    start: start,\n                    left: value,\n                    operator: \"=\",\n                    right: expression(false),\n                    end: prev()\n                });\n            }\n\n            // Create property\n            a.push(new AST_ObjectKeyVal({\n                start: start,\n                quote: start.quote,\n                key: name instanceof AST_Node ? name : \"\" + name,\n                value: value,\n                end: prev()\n            }));\n        }\n        next();\n        return new AST_Object({ properties: a });\n    });\n\n    function class_(KindOfClass) {\n        var start, method, class_name, extends_, a = [];\n\n        S.input.push_directives_stack(); // Push directive stack, but not scope stack\n        S.input.add_directive(\"use strict\");\n\n        if (S.token.type == \"name\" && S.token.value != \"extends\") {\n            class_name = as_symbol(KindOfClass === AST_DefClass ? AST_SymbolDefClass : AST_SymbolClass);\n        }\n\n        if (KindOfClass === AST_DefClass && !class_name) {\n            unexpected();\n        }\n\n        if (S.token.value == \"extends\") {\n            next();\n            extends_ = expression(true);\n        }\n\n        expect(\"{\");\n\n        while (is(\"punc\", \";\")) { next(); }  // Leading semicolons are okay in class bodies.\n        while (!is(\"punc\", \"}\")) {\n            start = S.token;\n            method = concise_method_or_getset(as_property_name(), start, true);\n            if (!method) { unexpected(); }\n            a.push(method);\n            while (is(\"punc\", \";\")) { next(); }\n        }\n\n        S.input.pop_directives_stack();\n\n        next();\n\n        return new KindOfClass({\n            start: start,\n            name: class_name,\n            extends: extends_,\n            properties: a,\n            end: prev(),\n        });\n    }\n\n    function concise_method_or_getset(name, start, is_class) {\n        var get_method_name_ast = function(name, start) {\n            if (typeof name === \"string\" || typeof name === \"number\") {\n                return new AST_SymbolMethod({\n                    start,\n                    name: \"\" + name,\n                    end: prev()\n                });\n            } else if (name === null) {\n                unexpected();\n            }\n            return name;\n        };\n        const get_class_property_key_ast = (name) => {\n            if (typeof name === \"string\" || typeof name === \"number\") {\n                return new AST_SymbolClassProperty({\n                    start: property_token,\n                    end: property_token,\n                    name: \"\" + name\n                });\n            } else if (name === null) {\n                unexpected();\n            }\n            return name;\n        };\n        var is_async = false;\n        var is_static = false;\n        var is_generator = false;\n        var property_token = start;\n        if (is_class && name === \"static\" && !is(\"punc\", \"(\")) {\n            is_static = true;\n            property_token = S.token;\n            name = as_property_name();\n        }\n        if (name === \"async\" && !is(\"punc\", \"(\") && !is(\"punc\", \",\") && !is(\"punc\", \"}\") && !is(\"operator\", \"=\")) {\n            is_async = true;\n            property_token = S.token;\n            name = as_property_name();\n        }\n        if (name === null) {\n            is_generator = true;\n            property_token = S.token;\n            name = as_property_name();\n            if (name === null) {\n                unexpected();\n            }\n        }\n        if (is(\"punc\", \"(\")) {\n            name = get_method_name_ast(name, start);\n            var node = new AST_ConciseMethod({\n                start       : start,\n                static      : is_static,\n                is_generator: is_generator,\n                async       : is_async,\n                key         : name,\n                quote       : name instanceof AST_SymbolMethod ?\n                              property_token.quote : undefined,\n                value       : create_accessor(is_generator, is_async),\n                end         : prev()\n            });\n            return node;\n        }\n        const setter_token = S.token;\n        if (name == \"get\") {\n            if (!is(\"punc\") || is(\"punc\", \"[\")) {\n                name = get_method_name_ast(as_property_name(), start);\n                return new AST_ObjectGetter({\n                    start : start,\n                    static: is_static,\n                    key   : name,\n                    quote : name instanceof AST_SymbolMethod ?\n                            setter_token.quote : undefined,\n                    value : create_accessor(),\n                    end   : prev()\n                });\n            }\n        } else if (name == \"set\") {\n            if (!is(\"punc\") || is(\"punc\", \"[\")) {\n                name = get_method_name_ast(as_property_name(), start);\n                return new AST_ObjectSetter({\n                    start : start,\n                    static: is_static,\n                    key   : name,\n                    quote : name instanceof AST_SymbolMethod ?\n                            setter_token.quote : undefined,\n                    value : create_accessor(),\n                    end   : prev()\n                });\n            }\n        }\n        if (is_class) {\n            const key = get_class_property_key_ast(name, property_token);\n            const quote = key instanceof AST_SymbolClassProperty\n                ? property_token.quote\n                : undefined;\n            if (is(\"operator\", \"=\")) {\n                next();\n                return new AST_ClassProperty({\n                    start,\n                    static: is_static,\n                    quote,\n                    key,\n                    value: expression(false),\n                    end: prev()\n                });\n            } else if (is(\"name\") || is(\"punc\", \";\") || is(\"punc\", \"}\")) {\n                return new AST_ClassProperty({\n                    start,\n                    static: is_static,\n                    quote,\n                    key,\n                    end: prev()\n                });\n            }\n        }\n    }\n\n    function import_() {\n        var start = prev();\n        var imported_name;\n        var imported_names;\n        if (is(\"name\")) {\n            imported_name = as_symbol(AST_SymbolImport);\n        }\n\n        if (is(\"punc\", \",\")) {\n            next();\n        }\n\n        imported_names = map_names(true);\n\n        if (imported_names || imported_name) {\n            expect_token(\"name\", \"from\");\n        }\n        var mod_str = S.token;\n        if (mod_str.type !== \"string\") {\n            unexpected();\n        }\n        next();\n        return new AST_Import({\n            start: start,\n            imported_name: imported_name,\n            imported_names: imported_names,\n            module_name: new AST_String({\n                start: mod_str,\n                value: mod_str.value,\n                quote: mod_str.quote,\n                end: mod_str,\n            }),\n            end: S.token,\n        });\n    }\n\n    function map_name(is_import) {\n        function make_symbol(type) {\n            return new type({\n                name: as_property_name(),\n                start: prev(),\n                end: prev()\n            });\n        }\n\n        var foreign_type = is_import ? AST_SymbolImportForeign : AST_SymbolExportForeign;\n        var type = is_import ? AST_SymbolImport : AST_SymbolExport;\n        var start = S.token;\n        var foreign_name;\n        var name;\n\n        if (is_import) {\n            foreign_name = make_symbol(foreign_type);\n        } else {\n            name = make_symbol(type);\n        }\n        if (is(\"name\", \"as\")) {\n            next();  // The \"as\" word\n            if (is_import) {\n                name = make_symbol(type);\n            } else {\n                foreign_name = make_symbol(foreign_type);\n            }\n        } else if (is_import) {\n            name = new type(foreign_name);\n        } else {\n            foreign_name = new foreign_type(name);\n        }\n\n        return new AST_NameMapping({\n            start: start,\n            foreign_name: foreign_name,\n            name: name,\n            end: prev(),\n        });\n    }\n\n    function map_nameAsterisk(is_import, name) {\n        var foreign_type = is_import ? AST_SymbolImportForeign : AST_SymbolExportForeign;\n        var type = is_import ? AST_SymbolImport : AST_SymbolExport;\n        var start = S.token;\n        var foreign_name;\n        var end = prev();\n\n        name = name || new type({\n            name: \"*\",\n            start: start,\n            end: end,\n        });\n\n        foreign_name = new foreign_type({\n            name: \"*\",\n            start: start,\n            end: end,\n        });\n\n        return new AST_NameMapping({\n            start: start,\n            foreign_name: foreign_name,\n            name: name,\n            end: end,\n        });\n    }\n\n    function map_names(is_import) {\n        var names;\n        if (is(\"punc\", \"{\")) {\n            next();\n            names = [];\n            while (!is(\"punc\", \"}\")) {\n                names.push(map_name(is_import));\n                if (is(\"punc\", \",\")) {\n                    next();\n                }\n            }\n            next();\n        } else if (is(\"operator\", \"*\")) {\n            var name;\n            next();\n            if (is_import && is(\"name\", \"as\")) {\n                next();  // The \"as\" word\n                name = as_symbol(is_import ? AST_SymbolImport : AST_SymbolExportForeign);\n            }\n            names = [map_nameAsterisk(is_import, name)];\n        }\n        return names;\n    }\n\n    function export_() {\n        var start = S.token;\n        var is_default;\n        var exported_names;\n\n        if (is(\"keyword\", \"default\")) {\n            is_default = true;\n            next();\n        } else if (exported_names = map_names(false)) {\n            if (is(\"name\", \"from\")) {\n                next();\n\n                var mod_str = S.token;\n                if (mod_str.type !== \"string\") {\n                    unexpected();\n                }\n                next();\n\n                return new AST_Export({\n                    start: start,\n                    is_default: is_default,\n                    exported_names: exported_names,\n                    module_name: new AST_String({\n                        start: mod_str,\n                        value: mod_str.value,\n                        quote: mod_str.quote,\n                        end: mod_str,\n                    }),\n                    end: prev(),\n                });\n            } else {\n                return new AST_Export({\n                    start: start,\n                    is_default: is_default,\n                    exported_names: exported_names,\n                    end: prev(),\n                });\n            }\n        }\n\n        var node;\n        var exported_value;\n        var exported_definition;\n        if (is(\"punc\", \"{\")\n            || is_default\n                && (is(\"keyword\", \"class\") || is(\"keyword\", \"function\"))\n                && is_token(peek(), \"punc\")) {\n            exported_value = expression(false);\n            semicolon();\n        } else if ((node = statement(is_default)) instanceof AST_Definitions && is_default) {\n            unexpected(node.start);\n        } else if (node instanceof AST_Definitions || node instanceof AST_Lambda || node instanceof AST_DefClass) {\n            exported_definition = node;\n        } else if (node instanceof AST_SimpleStatement) {\n            exported_value = node.body;\n        } else {\n            unexpected(node.start);\n        }\n\n        return new AST_Export({\n            start: start,\n            is_default: is_default,\n            exported_value: exported_value,\n            exported_definition: exported_definition,\n            end: prev(),\n        });\n    }\n\n    function as_property_name() {\n        var tmp = S.token;\n        switch (tmp.type) {\n          case \"punc\":\n            if (tmp.value === \"[\") {\n                next();\n                var ex = expression(false);\n                expect(\"]\");\n                return ex;\n            } else unexpected(tmp);\n          case \"operator\":\n            if (tmp.value === \"*\") {\n                next();\n                return null;\n            }\n            if (![\"delete\", \"in\", \"instanceof\", \"new\", \"typeof\", \"void\"].includes(tmp.value)) {\n                unexpected(tmp);\n            }\n            /* falls through */\n          case \"name\":\n          case \"string\":\n          case \"num\":\n          case \"big_int\":\n          case \"keyword\":\n          case \"atom\":\n            next();\n            return tmp.value;\n          default:\n            unexpected(tmp);\n        }\n    }\n\n    function as_name() {\n        var tmp = S.token;\n        if (tmp.type != \"name\") unexpected();\n        next();\n        return tmp.value;\n    }\n\n    function _make_symbol(type) {\n        var name = S.token.value;\n        return new (name == \"this\" ? AST_This :\n                    name == \"super\" ? AST_Super :\n                    type)({\n            name  : String(name),\n            start : S.token,\n            end   : S.token\n        });\n    }\n\n    function _verify_symbol(sym) {\n        var name = sym.name;\n        if (is_in_generator() && name == \"yield\") {\n            token_error(sym.start, \"Yield cannot be used as identifier inside generators\");\n        }\n        if (S.input.has_directive(\"use strict\")) {\n            if (name == \"yield\") {\n                token_error(sym.start, \"Unexpected yield identifier inside strict mode\");\n            }\n            if (sym instanceof AST_SymbolDeclaration && (name == \"arguments\" || name == \"eval\")) {\n                token_error(sym.start, \"Unexpected \" + name + \" in strict mode\");\n            }\n        }\n    }\n\n    function as_symbol(type, noerror) {\n        if (!is(\"name\")) {\n            if (!noerror) croak(\"Name expected\");\n            return null;\n        }\n        var sym = _make_symbol(type);\n        _verify_symbol(sym);\n        next();\n        return sym;\n    }\n\n    // Annotate AST_Call, AST_Lambda or AST_New with the special comments\n    function annotate(node) {\n        var start = node.start;\n        var comments = start.comments_before;\n        const comments_outside_parens = outer_comments_before_counts.get(start);\n        var i = comments_outside_parens != null ? comments_outside_parens : comments.length;\n        while (--i >= 0) {\n            var comment = comments[i];\n            if (/[@#]__/.test(comment.value)) {\n                if (/[@#]__PURE__/.test(comment.value)) {\n                    set_annotation(node, _PURE);\n                    break;\n                }\n                if (/[@#]__INLINE__/.test(comment.value)) {\n                    set_annotation(node, _INLINE);\n                    break;\n                }\n                if (/[@#]__NOINLINE__/.test(comment.value)) {\n                    set_annotation(node, _NOINLINE);\n                    break;\n                }\n            }\n        }\n    }\n\n    var subscripts = function(expr, allow_calls) {\n        var start = expr.start;\n        if (is(\"punc\", \".\")) {\n            next();\n            return subscripts(new AST_Dot({\n                start      : start,\n                expression : expr,\n                property   : as_name(),\n                end        : prev()\n            }), allow_calls);\n        }\n        if (is(\"punc\", \"[\")) {\n            next();\n            var prop = expression(true);\n            expect(\"]\");\n            return subscripts(new AST_Sub({\n                start      : start,\n                expression : expr,\n                property   : prop,\n                end        : prev()\n            }), allow_calls);\n        }\n        if (allow_calls && is(\"punc\", \"(\")) {\n            next();\n            var call = new AST_Call({\n                start      : start,\n                expression : expr,\n                args       : call_args(),\n                end        : prev()\n            });\n            annotate(call);\n            return subscripts(call, true);\n        }\n        if (is(\"template_head\")) {\n            return subscripts(new AST_PrefixedTemplateString({\n                start: start,\n                prefix: expr,\n                template_string: template_string(true),\n                end: prev()\n            }), allow_calls);\n        }\n        return expr;\n    };\n\n    function call_args() {\n        var args = [];\n        while (!is(\"punc\", \")\")) {\n            if (is(\"expand\", \"...\")) {\n                next();\n                args.push(new AST_Expansion({\n                    start: prev(),\n                    expression: expression(false),\n                    end: prev()\n                }));\n            } else {\n                args.push(expression(false));\n            }\n            if (!is(\"punc\", \")\")) {\n                expect(\",\");\n                if (is(\"punc\", \")\") && options.ecma < 2017) unexpected();\n            }\n        }\n        next();\n        return args;\n    }\n\n    var maybe_unary = function(allow_calls, allow_arrows) {\n        var start = S.token;\n        if (start.type == \"name\" && start.value == \"await\") {\n            if (is_in_async()) {\n                next();\n                return _await_expression();\n            } else if (S.input.has_directive(\"use strict\")) {\n                token_error(S.token, \"Unexpected await identifier inside strict mode\");\n            }\n        }\n        if (is(\"operator\") && UNARY_PREFIX.has(start.value)) {\n            next();\n            handle_regexp();\n            var ex = make_unary(AST_UnaryPrefix, start, maybe_unary(allow_calls));\n            ex.start = start;\n            ex.end = prev();\n            return ex;\n        }\n        var val = expr_atom(allow_calls, allow_arrows);\n        while (is(\"operator\") && UNARY_POSTFIX.has(S.token.value) && !has_newline_before(S.token)) {\n            if (val instanceof AST_Arrow) unexpected();\n            val = make_unary(AST_UnaryPostfix, S.token, val);\n            val.start = start;\n            val.end = S.token;\n            next();\n        }\n        return val;\n    };\n\n    function make_unary(ctor, token, expr) {\n        var op = token.value;\n        switch (op) {\n          case \"++\":\n          case \"--\":\n            if (!is_assignable(expr))\n                croak(\"Invalid use of \" + op + \" operator\", token.line, token.col, token.pos);\n            break;\n          case \"delete\":\n            if (expr instanceof AST_SymbolRef && S.input.has_directive(\"use strict\"))\n                croak(\"Calling delete on expression not allowed in strict mode\", expr.start.line, expr.start.col, expr.start.pos);\n            break;\n        }\n        return new ctor({ operator: op, expression: expr });\n    }\n\n    var expr_op = function(left, min_prec, no_in) {\n        var op = is(\"operator\") ? S.token.value : null;\n        if (op == \"in\" && no_in) op = null;\n        if (op == \"**\" && left instanceof AST_UnaryPrefix\n            /* unary token in front not allowed - parenthesis required */\n            && !is_token(left.start, \"punc\", \"(\")\n            && left.operator !== \"--\" && left.operator !== \"++\")\n                unexpected(left.start);\n        var prec = op != null ? PRECEDENCE[op] : null;\n        if (prec != null && (prec > min_prec || (op === \"**\" && min_prec === prec))) {\n            next();\n            var right = expr_op(maybe_unary(true), prec, no_in);\n            return expr_op(new AST_Binary({\n                start    : left.start,\n                left     : left,\n                operator : op,\n                right    : right,\n                end      : right.end\n            }), min_prec, no_in);\n        }\n        return left;\n    };\n\n    function expr_ops(no_in) {\n        return expr_op(maybe_unary(true, true), 0, no_in);\n    }\n\n    var maybe_conditional = function(no_in) {\n        var start = S.token;\n        var expr = expr_ops(no_in);\n        if (is(\"operator\", \"?\")) {\n            next();\n            var yes = expression(false);\n            expect(\":\");\n            return new AST_Conditional({\n                start       : start,\n                condition   : expr,\n                consequent  : yes,\n                alternative : expression(false, no_in),\n                end         : prev()\n            });\n        }\n        return expr;\n    };\n\n    function is_assignable(expr) {\n        return expr instanceof AST_PropAccess || expr instanceof AST_SymbolRef;\n    }\n\n    function to_destructuring(node) {\n        if (node instanceof AST_Object) {\n            node = new AST_Destructuring({\n                start: node.start,\n                names: node.properties.map(to_destructuring),\n                is_array: false,\n                end: node.end\n            });\n        } else if (node instanceof AST_Array) {\n            var names = [];\n\n            for (var i = 0; i < node.elements.length; i++) {\n                // Only allow expansion as last element\n                if (node.elements[i] instanceof AST_Expansion) {\n                    if (i + 1 !== node.elements.length) {\n                        token_error(node.elements[i].start, \"Spread must the be last element in destructuring array\");\n                    }\n                    node.elements[i].expression = to_destructuring(node.elements[i].expression);\n                }\n\n                names.push(to_destructuring(node.elements[i]));\n            }\n\n            node = new AST_Destructuring({\n                start: node.start,\n                names: names,\n                is_array: true,\n                end: node.end\n            });\n        } else if (node instanceof AST_ObjectProperty) {\n            node.value = to_destructuring(node.value);\n        } else if (node instanceof AST_Assign) {\n            node = new AST_DefaultAssign({\n                start: node.start,\n                left: node.left,\n                operator: \"=\",\n                right: node.right,\n                end: node.end\n            });\n        }\n        return node;\n    }\n\n    // In ES6, AssignmentExpression can also be an ArrowFunction\n    var maybe_assign = function(no_in) {\n        handle_regexp();\n        var start = S.token;\n\n        if (start.type == \"name\" && start.value == \"yield\") {\n            if (is_in_generator()) {\n                next();\n                return _yield_expression();\n            } else if (S.input.has_directive(\"use strict\")) {\n                token_error(S.token, \"Unexpected yield identifier inside strict mode\");\n            }\n        }\n\n        var left = maybe_conditional(no_in);\n        var val = S.token.value;\n\n        if (is(\"operator\") && ASSIGNMENT.has(val)) {\n            if (is_assignable(left) || (left = to_destructuring(left)) instanceof AST_Destructuring) {\n                next();\n                return new AST_Assign({\n                    start    : start,\n                    left     : left,\n                    operator : val,\n                    right    : maybe_assign(no_in),\n                    end      : prev()\n                });\n            }\n            croak(\"Invalid assignment\");\n        }\n        return left;\n    };\n\n    var expression = function(commas, no_in) {\n        var start = S.token;\n        var exprs = [];\n        while (true) {\n            exprs.push(maybe_assign(no_in));\n            if (!commas || !is(\"punc\", \",\")) break;\n            next();\n            commas = true;\n        }\n        return exprs.length == 1 ? exprs[0] : new AST_Sequence({\n            start       : start,\n            expressions : exprs,\n            end         : peek()\n        });\n    };\n\n    function in_loop(cont) {\n        ++S.in_loop;\n        var ret = cont();\n        --S.in_loop;\n        return ret;\n    }\n\n    if (options.expression) {\n        return expression(true);\n    }\n\n    return (function() {\n        var start = S.token;\n        var body = [];\n        S.input.push_directives_stack();\n        if (options.module) S.input.add_directive(\"use strict\");\n        while (!is(\"eof\"))\n            body.push(statement());\n        S.input.pop_directives_stack();\n        var end = prev();\n        var toplevel = options.toplevel;\n        if (toplevel) {\n            toplevel.body = toplevel.body.concat(body);\n            toplevel.end = end;\n        } else {\n            toplevel = new AST_Toplevel({ start: start, body: body, end: end });\n        }\n        return toplevel;\n    })();\n\n}\n\nexport {\n    get_full_char_code,\n    get_full_char,\n    is_identifier_char,\n    is_basic_identifier_string,\n    is_identifier_string,\n    is_surrogate_pair_head,\n    is_surrogate_pair_tail,\n    js_error,\n    JS_Parse_Error,\n    parse,\n    PRECEDENCE,\n    RESERVED_WORDS,\n    tokenizer,\n};\n","/***********************************************************************\n\n  A JavaScript tokenizer / parser / beautifier / compressor.\n  https://github.com/mishoo/UglifyJS2\n\n  -------------------------------- (C) ---------------------------------\n\n                           Author: Mihai Bazon\n                         <mihai.bazon@gmail.com>\n                       http://mihai.bazon.net/blog\n\n  Distributed under the BSD license:\n\n    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n        * Redistributions of source code must retain the above\n          copyright notice, this list of conditions and the following\n          disclaimer.\n\n        * Redistributions in binary form must reproduce the above\n          copyright notice, this list of conditions and the following\n          disclaimer in the documentation and/or other materials\n          provided with the distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n\n ***********************************************************************/\n\n\"use strict\";\n\nimport {\n    HOP,\n    MAP,\n    noop,\n    string_template,\n} from \"./utils/index.js\";\nimport { parse } from \"./parse.js\";\n\nfunction DEFNODE(type, props, methods, base = AST_Node) {\n    if (!props) props = [];\n    else props = props.split(/\\s+/);\n    var self_props = props;\n    if (base && base.PROPS)\n        props = props.concat(base.PROPS);\n    var code = \"return function AST_\" + type + \"(props){ if (props) { \";\n    for (var i = props.length; --i >= 0;) {\n        code += \"this.\" + props[i] + \" = props.\" + props[i] + \";\";\n    }\n    const proto = base && Object.create(base.prototype);\n    if (proto && proto.initialize || (methods && methods.initialize))\n        code += \"this.initialize();\";\n    code += \"}\";\n    code += \"this.flags = 0;\";\n    code += \"}\";\n    var ctor = new Function(code)();\n    if (proto) {\n        ctor.prototype = proto;\n        ctor.BASE = base;\n    }\n    if (base) base.SUBCLASSES.push(ctor);\n    ctor.prototype.CTOR = ctor;\n    ctor.prototype.constructor = ctor;\n    ctor.PROPS = props || null;\n    ctor.SELF_PROPS = self_props;\n    ctor.SUBCLASSES = [];\n    if (type) {\n        ctor.prototype.TYPE = ctor.TYPE = type;\n    }\n    if (methods) for (i in methods) if (HOP(methods, i)) {\n        if (i[0] === \"$\") {\n            ctor[i.substr(1)] = methods[i];\n        } else {\n            ctor.prototype[i] = methods[i];\n        }\n    }\n    ctor.DEFMETHOD = function(name, method) {\n        this.prototype[name] = method;\n    };\n    return ctor;\n}\n\nvar AST_Token = DEFNODE(\"Token\", \"type value line col pos endline endcol endpos nlb comments_before comments_after file raw quote end\", {\n}, null);\n\nvar AST_Node = DEFNODE(\"Node\", \"start end\", {\n    _clone: function(deep) {\n        if (deep) {\n            var self = this.clone();\n            return self.transform(new TreeTransformer(function(node) {\n                if (node !== self) {\n                    return node.clone(true);\n                }\n            }));\n        }\n        return new this.CTOR(this);\n    },\n    clone: function(deep) {\n        return this._clone(deep);\n    },\n    $documentation: \"Base class of all AST nodes\",\n    $propdoc: {\n        start: \"[AST_Token] The first token of this node\",\n        end: \"[AST_Token] The last token of this node\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this);\n    },\n    walk: function(visitor) {\n        return this._walk(visitor); // not sure the indirection will be any help\n    },\n    _children_backwards: () => {}\n}, null);\n\nAST_Node.warn_function = null;\nAST_Node.warn = function(txt, props) {\n    if (AST_Node.warn_function)\n        AST_Node.warn_function(string_template(txt, props));\n};\n\n/* -----[ statements ]----- */\n\nvar AST_Statement = DEFNODE(\"Statement\", null, {\n    $documentation: \"Base class of all statements\",\n});\n\nvar AST_Debugger = DEFNODE(\"Debugger\", null, {\n    $documentation: \"Represents a debugger statement\",\n}, AST_Statement);\n\nvar AST_Directive = DEFNODE(\"Directive\", \"value quote\", {\n    $documentation: \"Represents a directive, like \\\"use strict\\\";\",\n    $propdoc: {\n        value: \"[string] The value of this directive as a plain string (it's not an AST_String!)\",\n        quote: \"[string] the original quote character\"\n    },\n}, AST_Statement);\n\nvar AST_SimpleStatement = DEFNODE(\"SimpleStatement\", \"body\", {\n    $documentation: \"A statement consisting of an expression, i.e. a = 1 + 2\",\n    $propdoc: {\n        body: \"[AST_Node] an expression node (should not be instanceof AST_Statement)\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.body._walk(visitor);\n        });\n    },\n    _children_backwards(push) {\n        push(this.body);\n    }\n}, AST_Statement);\n\nfunction walk_body(node, visitor) {\n    const body = node.body;\n    for (var i = 0, len = body.length; i < len; i++) {\n        body[i]._walk(visitor);\n    }\n}\n\nfunction clone_block_scope(deep) {\n    var clone = this._clone(deep);\n    if (this.block_scope) {\n        // TODO this is sometimes undefined during compression.\n        // But it should always have a value!\n        clone.block_scope = this.block_scope.clone();\n    }\n    return clone;\n}\n\nvar AST_Block = DEFNODE(\"Block\", \"body block_scope\", {\n    $documentation: \"A body of statements (usually braced)\",\n    $propdoc: {\n        body: \"[AST_Statement*] an array of statements\",\n        block_scope: \"[AST_Scope] the block scope\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            walk_body(this, visitor);\n        });\n    },\n    _children_backwards(push) {\n        let i = this.body.length;\n        while (i--) push(this.body[i]);\n    },\n    clone: clone_block_scope\n}, AST_Statement);\n\nvar AST_BlockStatement = DEFNODE(\"BlockStatement\", null, {\n    $documentation: \"A block statement\",\n}, AST_Block);\n\nvar AST_EmptyStatement = DEFNODE(\"EmptyStatement\", null, {\n    $documentation: \"The empty statement (empty block or simply a semicolon)\"\n}, AST_Statement);\n\nvar AST_StatementWithBody = DEFNODE(\"StatementWithBody\", \"body\", {\n    $documentation: \"Base class for all statements that contain one nested body: `For`, `ForIn`, `Do`, `While`, `With`\",\n    $propdoc: {\n        body: \"[AST_Statement] the body; this should always be present, even if it's an AST_EmptyStatement\"\n    }\n}, AST_Statement);\n\nvar AST_LabeledStatement = DEFNODE(\"LabeledStatement\", \"label\", {\n    $documentation: \"Statement with a label\",\n    $propdoc: {\n        label: \"[AST_Label] a label definition\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.label._walk(visitor);\n            this.body._walk(visitor);\n        });\n    },\n    _children_backwards(push) {\n        push(this.body);\n        push(this.label);\n    },\n    clone: function(deep) {\n        var node = this._clone(deep);\n        if (deep) {\n            var label = node.label;\n            var def = this.label;\n            node.walk(new TreeWalker(function(node) {\n                if (node instanceof AST_LoopControl\n                    && node.label && node.label.thedef === def) {\n                    node.label.thedef = label;\n                    label.references.push(node);\n                }\n            }));\n        }\n        return node;\n    }\n}, AST_StatementWithBody);\n\nvar AST_IterationStatement = DEFNODE(\"IterationStatement\", \"block_scope\", {\n    $documentation: \"Internal class.  All loops inherit from it.\",\n    $propdoc: {\n        block_scope: \"[AST_Scope] the block scope for this iteration statement.\"\n    },\n    clone: clone_block_scope\n}, AST_StatementWithBody);\n\nvar AST_DWLoop = DEFNODE(\"DWLoop\", \"condition\", {\n    $documentation: \"Base class for do/while statements\",\n    $propdoc: {\n        condition: \"[AST_Node] the loop condition.  Should not be instanceof AST_Statement\"\n    }\n}, AST_IterationStatement);\n\nvar AST_Do = DEFNODE(\"Do\", null, {\n    $documentation: \"A `do` statement\",\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.body._walk(visitor);\n            this.condition._walk(visitor);\n        });\n    },\n    _children_backwards(push) {\n        push(this.condition);\n        push(this.body);\n    }\n}, AST_DWLoop);\n\nvar AST_While = DEFNODE(\"While\", null, {\n    $documentation: \"A `while` statement\",\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.condition._walk(visitor);\n            this.body._walk(visitor);\n        });\n    },\n    _children_backwards(push) {\n        push(this.body);\n        push(this.condition);\n    },\n}, AST_DWLoop);\n\nvar AST_For = DEFNODE(\"For\", \"init condition step\", {\n    $documentation: \"A `for` statement\",\n    $propdoc: {\n        init: \"[AST_Node?] the `for` initialization code, or null if empty\",\n        condition: \"[AST_Node?] the `for` termination clause, or null if empty\",\n        step: \"[AST_Node?] the `for` update clause, or null if empty\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            if (this.init) this.init._walk(visitor);\n            if (this.condition) this.condition._walk(visitor);\n            if (this.step) this.step._walk(visitor);\n            this.body._walk(visitor);\n        });\n    },\n    _children_backwards(push) {\n        push(this.body);\n        if (this.step) push(this.step);\n        if (this.condition) push(this.condition);\n        if (this.init) push(this.init);\n    },\n}, AST_IterationStatement);\n\nvar AST_ForIn = DEFNODE(\"ForIn\", \"init object\", {\n    $documentation: \"A `for ... in` statement\",\n    $propdoc: {\n        init: \"[AST_Node] the `for/in` initialization code\",\n        object: \"[AST_Node] the object that we're looping through\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.init._walk(visitor);\n            this.object._walk(visitor);\n            this.body._walk(visitor);\n        });\n    },\n    _children_backwards(push) {\n        push(this.body);\n        if (this.object) push(this.object);\n        if (this.init) push(this.init);\n    },\n}, AST_IterationStatement);\n\nvar AST_ForOf = DEFNODE(\"ForOf\", \"await\", {\n    $documentation: \"A `for ... of` statement\",\n}, AST_ForIn);\n\nvar AST_With = DEFNODE(\"With\", \"expression\", {\n    $documentation: \"A `with` statement\",\n    $propdoc: {\n        expression: \"[AST_Node] the `with` expression\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.expression._walk(visitor);\n            this.body._walk(visitor);\n        });\n    },\n    _children_backwards(push) {\n        push(this.body);\n        push(this.expression);\n    },\n}, AST_StatementWithBody);\n\n/* -----[ scope and functions ]----- */\n\nvar AST_Scope = DEFNODE(\"Scope\", \"variables functions uses_with uses_eval parent_scope enclosed cname _var_name_cache\", {\n    $documentation: \"Base class for all statements introducing a lexical scope\",\n    $propdoc: {\n        variables: \"[Map/S] a map of name -> SymbolDef for all variables/functions defined in this scope\",\n        functions: \"[Map/S] like `variables`, but only lists function declarations\",\n        uses_with: \"[boolean/S] tells whether this scope uses the `with` statement\",\n        uses_eval: \"[boolean/S] tells whether this scope contains a direct call to the global `eval`\",\n        parent_scope: \"[AST_Scope?/S] link to the parent scope\",\n        enclosed: \"[SymbolDef*/S] a list of all symbol definitions that are accessed from this scope or any subscopes\",\n        cname: \"[integer/S] current index for mangling variables (used internally by the mangler)\",\n    },\n    get_defun_scope: function() {\n        var self = this;\n        while (self.is_block_scope()) {\n            self = self.parent_scope;\n        }\n        return self;\n    },\n    clone: function(deep) {\n        var node = this._clone(deep);\n        if (this.variables) node.variables = new Map(this.variables);\n        if (this.functions) node.functions = new Map(this.functions);\n        if (this.enclosed) node.enclosed = this.enclosed.slice();\n        if (this._block_scope) node._block_scope = this._block_scope;\n        return node;\n    },\n    pinned: function() {\n        return this.uses_eval || this.uses_with;\n    }\n}, AST_Block);\n\nvar AST_Toplevel = DEFNODE(\"Toplevel\", \"globals\", {\n    $documentation: \"The toplevel scope\",\n    $propdoc: {\n        globals: \"[Map/S] a map of name -> SymbolDef for all undeclared names\",\n    },\n    wrap_commonjs: function(name) {\n        var body = this.body;\n        var wrapped_tl = \"(function(exports){'$ORIG';})(typeof \" + name + \"=='undefined'?(\" + name + \"={}):\" + name + \");\";\n        wrapped_tl = parse(wrapped_tl);\n        wrapped_tl = wrapped_tl.transform(new TreeTransformer(function(node) {\n            if (node instanceof AST_Directive && node.value == \"$ORIG\") {\n                return MAP.splice(body);\n            }\n        }));\n        return wrapped_tl;\n    },\n    wrap_enclose: function(args_values) {\n        if (typeof args_values != \"string\") args_values = \"\";\n        var index = args_values.indexOf(\":\");\n        if (index < 0) index = args_values.length;\n        var body = this.body;\n        return parse([\n            \"(function(\",\n            args_values.slice(0, index),\n            '){\"$ORIG\"})(',\n            args_values.slice(index + 1),\n            \")\"\n        ].join(\"\")).transform(new TreeTransformer(function(node) {\n            if (node instanceof AST_Directive && node.value == \"$ORIG\") {\n                return MAP.splice(body);\n            }\n        }));\n    }\n}, AST_Scope);\n\nvar AST_Expansion = DEFNODE(\"Expansion\", \"expression\", {\n    $documentation: \"An expandible argument, such as ...rest, a splat, such as [1,2,...all], or an expansion in a variable declaration, such as var [first, ...rest] = list\",\n    $propdoc: {\n        expression: \"[AST_Node] the thing to be expanded\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.expression.walk(visitor);\n        });\n    },\n    _children_backwards(push) {\n        push(this.expression);\n    },\n});\n\nvar AST_Lambda = DEFNODE(\"Lambda\", \"name argnames uses_arguments is_generator async\", {\n    $documentation: \"Base class for functions\",\n    $propdoc: {\n        name: \"[AST_SymbolDeclaration?] the name of this function\",\n        argnames: \"[AST_SymbolFunarg|AST_Destructuring|AST_Expansion|AST_DefaultAssign*] array of function arguments, destructurings, or expanding arguments\",\n        uses_arguments: \"[boolean/S] tells whether this function accesses the arguments array\",\n        is_generator: \"[boolean] is this a generator method\",\n        async: \"[boolean] is this method async\",\n    },\n    args_as_names: function () {\n        var out = [];\n        for (var i = 0; i < this.argnames.length; i++) {\n            if (this.argnames[i] instanceof AST_Destructuring) {\n                out.push(...this.argnames[i].all_symbols());\n            } else {\n                out.push(this.argnames[i]);\n            }\n        }\n        return out;\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            if (this.name) this.name._walk(visitor);\n            var argnames = this.argnames;\n            for (var i = 0, len = argnames.length; i < len; i++) {\n                argnames[i]._walk(visitor);\n            }\n            walk_body(this, visitor);\n        });\n    },\n    _children_backwards(push) {\n        let i = this.body.length;\n        while (i--) push(this.body[i]);\n\n        i = this.argnames.length;\n        while (i--) push(this.argnames[i]);\n\n        if (this.name) push(this.name);\n    },\n}, AST_Scope);\n\nvar AST_Accessor = DEFNODE(\"Accessor\", null, {\n    $documentation: \"A setter/getter function.  The `name` property is always null.\"\n}, AST_Lambda);\n\nvar AST_Function = DEFNODE(\"Function\", null, {\n    $documentation: \"A function expression\"\n}, AST_Lambda);\n\nvar AST_Arrow = DEFNODE(\"Arrow\", null, {\n    $documentation: \"An ES6 Arrow function ((a) => b)\"\n}, AST_Lambda);\n\nvar AST_Defun = DEFNODE(\"Defun\", null, {\n    $documentation: \"A function definition\"\n}, AST_Lambda);\n\n/* -----[ DESTRUCTURING ]----- */\nvar AST_Destructuring = DEFNODE(\"Destructuring\", \"names is_array\", {\n    $documentation: \"A destructuring of several names. Used in destructuring assignment and with destructuring function argument names\",\n    $propdoc: {\n        \"names\": \"[AST_Node*] Array of properties or elements\",\n        \"is_array\": \"[Boolean] Whether the destructuring represents an object or array\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.names.forEach(function(name) {\n                name._walk(visitor);\n            });\n        });\n    },\n    _children_backwards(push) {\n        let i = this.names.length;\n        while (i--) push(this.names[i]);\n    },\n    all_symbols: function() {\n        var out = [];\n        this.walk(new TreeWalker(function (node) {\n            if (node instanceof AST_Symbol) {\n                out.push(node);\n            }\n        }));\n        return out;\n    }\n});\n\nvar AST_PrefixedTemplateString = DEFNODE(\"PrefixedTemplateString\", \"template_string prefix\", {\n    $documentation: \"A templatestring with a prefix, such as String.raw`foobarbaz`\",\n    $propdoc: {\n        template_string: \"[AST_TemplateString] The template string\",\n        prefix: \"[AST_SymbolRef|AST_PropAccess] The prefix, which can be a symbol such as `foo` or a dotted expression such as `String.raw`.\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function () {\n            this.prefix._walk(visitor);\n            this.template_string._walk(visitor);\n        });\n    },\n    _children_backwards(push) {\n        push(this.template_string);\n        push(this.prefix);\n    },\n});\n\nvar AST_TemplateString = DEFNODE(\"TemplateString\", \"segments\", {\n    $documentation: \"A template string literal\",\n    $propdoc: {\n        segments: \"[AST_Node*] One or more segments, starting with AST_TemplateSegment. AST_Node may follow AST_TemplateSegment, but each AST_Node must be followed by AST_TemplateSegment.\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.segments.forEach(function(seg) {\n                seg._walk(visitor);\n            });\n        });\n    },\n    _children_backwards(push) {\n        let i = this.segments.length;\n        while (i--) push(this.segments[i]);\n    }\n});\n\nvar AST_TemplateSegment = DEFNODE(\"TemplateSegment\", \"value raw\", {\n    $documentation: \"A segment of a template string literal\",\n    $propdoc: {\n        value: \"Content of the segment\",\n        raw: \"Raw content of the segment\"\n    }\n});\n\n/* -----[ JUMPS ]----- */\n\nvar AST_Jump = DEFNODE(\"Jump\", null, {\n    $documentation: \"Base class for “jumps” (for now that's `return`, `throw`, `break` and `continue`)\"\n}, AST_Statement);\n\nvar AST_Exit = DEFNODE(\"Exit\", \"value\", {\n    $documentation: \"Base class for “exits” (`return` and `throw`)\",\n    $propdoc: {\n        value: \"[AST_Node?] the value returned or thrown by this statement; could be null for AST_Return\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, this.value && function() {\n            this.value._walk(visitor);\n        });\n    },\n    _children_backwards(push) {\n        if (this.value) push(this.value);\n    },\n}, AST_Jump);\n\nvar AST_Return = DEFNODE(\"Return\", null, {\n    $documentation: \"A `return` statement\"\n}, AST_Exit);\n\nvar AST_Throw = DEFNODE(\"Throw\", null, {\n    $documentation: \"A `throw` statement\"\n}, AST_Exit);\n\nvar AST_LoopControl = DEFNODE(\"LoopControl\", \"label\", {\n    $documentation: \"Base class for loop control statements (`break` and `continue`)\",\n    $propdoc: {\n        label: \"[AST_LabelRef?] the label, or null if none\",\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, this.label && function() {\n            this.label._walk(visitor);\n        });\n    },\n    _children_backwards(push) {\n        if (this.label) push(this.label);\n    },\n}, AST_Jump);\n\nvar AST_Break = DEFNODE(\"Break\", null, {\n    $documentation: \"A `break` statement\"\n}, AST_LoopControl);\n\nvar AST_Continue = DEFNODE(\"Continue\", null, {\n    $documentation: \"A `continue` statement\"\n}, AST_LoopControl);\n\nvar AST_Await = DEFNODE(\"Await\", \"expression\", {\n    $documentation: \"An `await` statement\",\n    $propdoc: {\n        expression: \"[AST_Node] the mandatory expression being awaited\",\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.expression._walk(visitor);\n        });\n    },\n    _children_backwards(push) {\n        push(this.expression);\n    },\n});\n\nvar AST_Yield = DEFNODE(\"Yield\", \"expression is_star\", {\n    $documentation: \"A `yield` statement\",\n    $propdoc: {\n        expression: \"[AST_Node?] the value returned or thrown by this statement; could be null (representing undefined) but only when is_star is set to false\",\n        is_star: \"[Boolean] Whether this is a yield or yield* statement\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, this.expression && function() {\n            this.expression._walk(visitor);\n        });\n    },\n    _children_backwards(push) {\n        if (this.expression) push(this.expression);\n    }\n});\n\n/* -----[ IF ]----- */\n\nvar AST_If = DEFNODE(\"If\", \"condition alternative\", {\n    $documentation: \"A `if` statement\",\n    $propdoc: {\n        condition: \"[AST_Node] the `if` condition\",\n        alternative: \"[AST_Statement?] the `else` part, or null if not present\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.condition._walk(visitor);\n            this.body._walk(visitor);\n            if (this.alternative) this.alternative._walk(visitor);\n        });\n    },\n    _children_backwards(push) {\n        if (this.alternative) {\n            push(this.alternative);\n        }\n        push(this.body);\n        push(this.condition);\n    }\n}, AST_StatementWithBody);\n\n/* -----[ SWITCH ]----- */\n\nvar AST_Switch = DEFNODE(\"Switch\", \"expression\", {\n    $documentation: \"A `switch` statement\",\n    $propdoc: {\n        expression: \"[AST_Node] the `switch` “discriminant”\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.expression._walk(visitor);\n            walk_body(this, visitor);\n        });\n    },\n    _children_backwards(push) {\n        let i = this.body.length;\n        while (i--) push(this.body[i]);\n        push(this.expression);\n    }\n}, AST_Block);\n\nvar AST_SwitchBranch = DEFNODE(\"SwitchBranch\", null, {\n    $documentation: \"Base class for `switch` branches\",\n}, AST_Block);\n\nvar AST_Default = DEFNODE(\"Default\", null, {\n    $documentation: \"A `default` switch branch\",\n}, AST_SwitchBranch);\n\nvar AST_Case = DEFNODE(\"Case\", \"expression\", {\n    $documentation: \"A `case` switch branch\",\n    $propdoc: {\n        expression: \"[AST_Node] the `case` expression\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.expression._walk(visitor);\n            walk_body(this, visitor);\n        });\n    },\n    _children_backwards(push) {\n        let i = this.body.length;\n        while (i--) push(this.body[i]);\n        push(this.expression);\n    },\n}, AST_SwitchBranch);\n\n/* -----[ EXCEPTIONS ]----- */\n\nvar AST_Try = DEFNODE(\"Try\", \"bcatch bfinally\", {\n    $documentation: \"A `try` statement\",\n    $propdoc: {\n        bcatch: \"[AST_Catch?] the catch block, or null if not present\",\n        bfinally: \"[AST_Finally?] the finally block, or null if not present\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            walk_body(this, visitor);\n            if (this.bcatch) this.bcatch._walk(visitor);\n            if (this.bfinally) this.bfinally._walk(visitor);\n        });\n    },\n    _children_backwards(push) {\n        if (this.bfinally) push(this.bfinally);\n        if (this.bcatch) push(this.bcatch);\n        let i = this.body.length;\n        while (i--) push(this.body[i]);\n    },\n}, AST_Block);\n\nvar AST_Catch = DEFNODE(\"Catch\", \"argname\", {\n    $documentation: \"A `catch` node; only makes sense as part of a `try` statement\",\n    $propdoc: {\n        argname: \"[AST_SymbolCatch|AST_Destructuring|AST_Expansion|AST_DefaultAssign] symbol for the exception\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            if (this.argname) this.argname._walk(visitor);\n            walk_body(this, visitor);\n        });\n    },\n    _children_backwards(push) {\n        let i = this.body.length;\n        while (i--) push(this.body[i]);\n        if (this.argname) push(this.argname);\n    },\n}, AST_Block);\n\nvar AST_Finally = DEFNODE(\"Finally\", null, {\n    $documentation: \"A `finally` node; only makes sense as part of a `try` statement\"\n}, AST_Block);\n\n/* -----[ VAR/CONST ]----- */\n\nvar AST_Definitions = DEFNODE(\"Definitions\", \"definitions\", {\n    $documentation: \"Base class for `var` or `const` nodes (variable declarations/initializations)\",\n    $propdoc: {\n        definitions: \"[AST_VarDef*] array of variable definitions\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            var definitions = this.definitions;\n            for (var i = 0, len = definitions.length; i < len; i++) {\n                definitions[i]._walk(visitor);\n            }\n        });\n    },\n    _children_backwards(push) {\n        let i = this.definitions.length;\n        while (i--) push(this.definitions[i]);\n    },\n}, AST_Statement);\n\nvar AST_Var = DEFNODE(\"Var\", null, {\n    $documentation: \"A `var` statement\"\n}, AST_Definitions);\n\nvar AST_Let = DEFNODE(\"Let\", null, {\n    $documentation: \"A `let` statement\"\n}, AST_Definitions);\n\nvar AST_Const = DEFNODE(\"Const\", null, {\n    $documentation: \"A `const` statement\"\n}, AST_Definitions);\n\nvar AST_VarDef = DEFNODE(\"VarDef\", \"name value\", {\n    $documentation: \"A variable declaration; only appears in a AST_Definitions node\",\n    $propdoc: {\n        name: \"[AST_Destructuring|AST_SymbolConst|AST_SymbolLet|AST_SymbolVar] name of the variable\",\n        value: \"[AST_Node?] initializer, or null of there's no initializer\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.name._walk(visitor);\n            if (this.value) this.value._walk(visitor);\n        });\n    },\n    _children_backwards(push) {\n        if (this.value) push(this.value);\n        push(this.name);\n    },\n});\n\nvar AST_NameMapping = DEFNODE(\"NameMapping\", \"foreign_name name\", {\n    $documentation: \"The part of the export/import statement that declare names from a module.\",\n    $propdoc: {\n        foreign_name: \"[AST_SymbolExportForeign|AST_SymbolImportForeign] The name being exported/imported (as specified in the module)\",\n        name: \"[AST_SymbolExport|AST_SymbolImport] The name as it is visible to this module.\"\n    },\n    _walk: function (visitor) {\n        return visitor._visit(this, function() {\n            this.foreign_name._walk(visitor);\n            this.name._walk(visitor);\n        });\n    },\n    _children_backwards(push) {\n        push(this.name);\n        push(this.foreign_name);\n    },\n});\n\nvar AST_Import = DEFNODE(\"Import\", \"imported_name imported_names module_name\", {\n    $documentation: \"An `import` statement\",\n    $propdoc: {\n        imported_name: \"[AST_SymbolImport] The name of the variable holding the module's default export.\",\n        imported_names: \"[AST_NameMapping*] The names of non-default imported variables\",\n        module_name: \"[AST_String] String literal describing where this module came from\",\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            if (this.imported_name) {\n                this.imported_name._walk(visitor);\n            }\n            if (this.imported_names) {\n                this.imported_names.forEach(function(name_import) {\n                    name_import._walk(visitor);\n                });\n            }\n            this.module_name._walk(visitor);\n        });\n    },\n    _children_backwards(push) {\n        push(this.module_name);\n        if (this.imported_names) {\n            let i = this.imported_names.length;\n            while (i--) push(this.imported_names[i]);\n        }\n        if (this.imported_name) push(this.imported_name);\n    },\n});\n\nvar AST_Export = DEFNODE(\"Export\", \"exported_definition exported_value is_default exported_names module_name\", {\n    $documentation: \"An `export` statement\",\n    $propdoc: {\n        exported_definition: \"[AST_Defun|AST_Definitions|AST_DefClass?] An exported definition\",\n        exported_value: \"[AST_Node?] An exported value\",\n        exported_names: \"[AST_NameMapping*?] List of exported names\",\n        module_name: \"[AST_String?] Name of the file to load exports from\",\n        is_default: \"[Boolean] Whether this is the default exported value of this module\"\n    },\n    _walk: function (visitor) {\n        return visitor._visit(this, function () {\n            if (this.exported_definition) {\n                this.exported_definition._walk(visitor);\n            }\n            if (this.exported_value) {\n                this.exported_value._walk(visitor);\n            }\n            if (this.exported_names) {\n                this.exported_names.forEach(function(name_export) {\n                    name_export._walk(visitor);\n                });\n            }\n            if (this.module_name) {\n                this.module_name._walk(visitor);\n            }\n        });\n    },\n    _children_backwards(push) {\n        if (this.module_name) push(this.module_name);\n        if (this.exported_names) {\n            let i = this.exported_names.length;\n            while (i--) push(this.exported_names[i]);\n        }\n        if (this.exported_value) push(this.exported_value);\n        if (this.exported_definition) push(this.exported_definition);\n    }\n}, AST_Statement);\n\n/* -----[ OTHER ]----- */\n\nvar AST_Call = DEFNODE(\"Call\", \"expression args _annotations\", {\n    $documentation: \"A function call expression\",\n    $propdoc: {\n        expression: \"[AST_Node] expression to invoke as function\",\n        args: \"[AST_Node*] array of arguments\",\n        _annotations: \"[number] bitfield containing information about the call\"\n    },\n    initialize() {\n        if (this._annotations == null) this._annotations = 0;\n    },\n    _walk(visitor) {\n        return visitor._visit(this, function() {\n            var args = this.args;\n            for (var i = 0, len = args.length; i < len; i++) {\n                args[i]._walk(visitor);\n            }\n            this.expression._walk(visitor);  // TODO why do we need to crawl this last?\n        });\n    },\n    _children_backwards(push) {\n        let i = this.args.length;\n        while (i--) push(this.args[i]);\n        push(this.expression);\n    },\n});\n\nvar AST_New = DEFNODE(\"New\", null, {\n    $documentation: \"An object instantiation.  Derives from a function call since it has exactly the same properties\"\n}, AST_Call);\n\nvar AST_Sequence = DEFNODE(\"Sequence\", \"expressions\", {\n    $documentation: \"A sequence expression (comma-separated expressions)\",\n    $propdoc: {\n        expressions: \"[AST_Node*] array of expressions (at least two)\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.expressions.forEach(function(node) {\n                node._walk(visitor);\n            });\n        });\n    },\n    _children_backwards(push) {\n        let i = this.expressions.length;\n        while (i--) push(this.expressions[i]);\n    },\n});\n\nvar AST_PropAccess = DEFNODE(\"PropAccess\", \"expression property\", {\n    $documentation: \"Base class for property access expressions, i.e. `a.foo` or `a[\\\"foo\\\"]`\",\n    $propdoc: {\n        expression: \"[AST_Node] the “container” expression\",\n        property: \"[AST_Node|string] the property to access.  For AST_Dot this is always a plain string, while for AST_Sub it's an arbitrary AST_Node\"\n    }\n});\n\nvar AST_Dot = DEFNODE(\"Dot\", \"quote\", {\n    $documentation: \"A dotted property access expression\",\n    $propdoc: {\n        quote: \"[string] the original quote character when transformed from AST_Sub\",\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.expression._walk(visitor);\n        });\n    },\n    _children_backwards(push) {\n        push(this.expression);\n    },\n}, AST_PropAccess);\n\nvar AST_Sub = DEFNODE(\"Sub\", null, {\n    $documentation: \"Index-style property access, i.e. `a[\\\"foo\\\"]`\",\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.expression._walk(visitor);\n            this.property._walk(visitor);\n        });\n    },\n    _children_backwards(push) {\n        push(this.property);\n        push(this.expression);\n    },\n}, AST_PropAccess);\n\nvar AST_Unary = DEFNODE(\"Unary\", \"operator expression\", {\n    $documentation: \"Base class for unary expressions\",\n    $propdoc: {\n        operator: \"[string] the operator\",\n        expression: \"[AST_Node] expression that this unary operator applies to\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.expression._walk(visitor);\n        });\n    },\n    _children_backwards(push) {\n        push(this.expression);\n    },\n});\n\nvar AST_UnaryPrefix = DEFNODE(\"UnaryPrefix\", null, {\n    $documentation: \"Unary prefix expression, i.e. `typeof i` or `++i`\"\n}, AST_Unary);\n\nvar AST_UnaryPostfix = DEFNODE(\"UnaryPostfix\", null, {\n    $documentation: \"Unary postfix expression, i.e. `i++`\"\n}, AST_Unary);\n\nvar AST_Binary = DEFNODE(\"Binary\", \"operator left right\", {\n    $documentation: \"Binary expression, i.e. `a + b`\",\n    $propdoc: {\n        left: \"[AST_Node] left-hand side expression\",\n        operator: \"[string] the operator\",\n        right: \"[AST_Node] right-hand side expression\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.left._walk(visitor);\n            this.right._walk(visitor);\n        });\n    },\n    _children_backwards(push) {\n        push(this.right);\n        push(this.left);\n    },\n});\n\nvar AST_Conditional = DEFNODE(\"Conditional\", \"condition consequent alternative\", {\n    $documentation: \"Conditional expression using the ternary operator, i.e. `a ? b : c`\",\n    $propdoc: {\n        condition: \"[AST_Node]\",\n        consequent: \"[AST_Node]\",\n        alternative: \"[AST_Node]\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            this.condition._walk(visitor);\n            this.consequent._walk(visitor);\n            this.alternative._walk(visitor);\n        });\n    },\n    _children_backwards(push) {\n        push(this.alternative);\n        push(this.consequent);\n        push(this.condition);\n    },\n});\n\nvar AST_Assign = DEFNODE(\"Assign\", null, {\n    $documentation: \"An assignment expression — `a = b + 5`\",\n}, AST_Binary);\n\nvar AST_DefaultAssign = DEFNODE(\"DefaultAssign\", null, {\n    $documentation: \"A default assignment expression like in `(a = 3) => a`\"\n}, AST_Binary);\n\n/* -----[ LITERALS ]----- */\n\nvar AST_Array = DEFNODE(\"Array\", \"elements\", {\n    $documentation: \"An array literal\",\n    $propdoc: {\n        elements: \"[AST_Node*] array of elements\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            var elements = this.elements;\n            for (var i = 0, len = elements.length; i < len; i++) {\n                elements[i]._walk(visitor);\n            }\n        });\n    },\n    _children_backwards(push) {\n        let i = this.elements.length;\n        while (i--) push(this.elements[i]);\n    },\n});\n\nvar AST_Object = DEFNODE(\"Object\", \"properties\", {\n    $documentation: \"An object literal\",\n    $propdoc: {\n        properties: \"[AST_ObjectProperty*] array of properties\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            var properties = this.properties;\n            for (var i = 0, len = properties.length; i < len; i++) {\n                properties[i]._walk(visitor);\n            }\n        });\n    },\n    _children_backwards(push) {\n        let i = this.properties.length;\n        while (i--) push(this.properties[i]);\n    },\n});\n\nvar AST_ObjectProperty = DEFNODE(\"ObjectProperty\", \"key value\", {\n    $documentation: \"Base class for literal object properties\",\n    $propdoc: {\n        key: \"[string|AST_Node] property name. For ObjectKeyVal this is a string. For getters, setters and computed property this is an AST_Node.\",\n        value: \"[AST_Node] property value.  For getters and setters this is an AST_Accessor.\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            if (this.key instanceof AST_Node)\n                this.key._walk(visitor);\n            this.value._walk(visitor);\n        });\n    },\n    _children_backwards(push) {\n        push(this.value);\n        if (this.key instanceof AST_Node) push(this.key);\n    }\n});\n\nvar AST_ObjectKeyVal = DEFNODE(\"ObjectKeyVal\", \"quote\", {\n    $documentation: \"A key: value object property\",\n    $propdoc: {\n        quote: \"[string] the original quote character\"\n    },\n    computed_key() {\n        return this.key instanceof AST_Node;\n    }\n}, AST_ObjectProperty);\n\nvar AST_ObjectSetter = DEFNODE(\"ObjectSetter\", \"quote static\", {\n    $propdoc: {\n        quote: \"[string|undefined] the original quote character, if any\",\n        static: \"[boolean] whether this is a static setter (classes only)\"\n    },\n    $documentation: \"An object setter property\",\n    computed_key() {\n        return !(this.key instanceof AST_SymbolMethod);\n    }\n}, AST_ObjectProperty);\n\nvar AST_ObjectGetter = DEFNODE(\"ObjectGetter\", \"quote static\", {\n    $propdoc: {\n        quote: \"[string|undefined] the original quote character, if any\",\n        static: \"[boolean] whether this is a static getter (classes only)\"\n    },\n    $documentation: \"An object getter property\",\n    computed_key() {\n        return !(this.key instanceof AST_SymbolMethod);\n    }\n}, AST_ObjectProperty);\n\nvar AST_ConciseMethod = DEFNODE(\"ConciseMethod\", \"quote static is_generator async\", {\n    $propdoc: {\n        quote: \"[string|undefined] the original quote character, if any\",\n        static: \"[boolean] is this method static (classes only)\",\n        is_generator: \"[boolean] is this a generator method\",\n        async: \"[boolean] is this method async\",\n    },\n    $documentation: \"An ES6 concise method inside an object or class\",\n    computed_key() {\n        return !(this.key instanceof AST_SymbolMethod);\n    }\n}, AST_ObjectProperty);\n\nvar AST_Class = DEFNODE(\"Class\", \"name extends properties\", {\n    $propdoc: {\n        name: \"[AST_SymbolClass|AST_SymbolDefClass?] optional class name.\",\n        extends: \"[AST_Node]? optional parent class\",\n        properties: \"[AST_ObjectProperty*] array of properties\"\n    },\n    $documentation: \"An ES6 class\",\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            if (this.name) {\n                this.name._walk(visitor);\n            }\n            if (this.extends) {\n                this.extends._walk(visitor);\n            }\n            this.properties.forEach((prop) => prop._walk(visitor));\n        });\n    },\n    _children_backwards(push) {\n        let i = this.properties.length;\n        while (i--) push(this.properties[i]);\n        if (this.extends) push(this.extends);\n        if (this.name) push(this.name);\n    },\n}, AST_Scope /* TODO a class might have a scope but it's not a scope */);\n\nvar AST_ClassProperty = DEFNODE(\"ClassProperty\", \"static quote\", {\n    $documentation: \"A class property\",\n    $propdoc: {\n        static: \"[boolean] whether this is a static key\",\n        quote: \"[string] which quote is being used\"\n    },\n    _walk: function(visitor) {\n        return visitor._visit(this, function() {\n            if (this.key instanceof AST_Node)\n                this.key._walk(visitor);\n            if (this.value instanceof AST_Node)\n                this.value._walk(visitor);\n        });\n    },\n    _children_backwards(push) {\n        if (this.value instanceof AST_Node) push(this.value);\n        if (this.key instanceof AST_Node) push(this.key);\n    },\n    computed_key() {\n        return !(this.key instanceof AST_SymbolClassProperty);\n    }\n}, AST_ObjectProperty);\n\nvar AST_DefClass = DEFNODE(\"DefClass\", null, {\n    $documentation: \"A class definition\",\n}, AST_Class);\n\nvar AST_ClassExpression = DEFNODE(\"ClassExpression\", null, {\n    $documentation: \"A class expression.\"\n}, AST_Class);\n\nvar AST_Symbol = DEFNODE(\"Symbol\", \"scope name thedef\", {\n    $propdoc: {\n        name: \"[string] name of this symbol\",\n        scope: \"[AST_Scope/S] the current scope (not necessarily the definition scope)\",\n        thedef: \"[SymbolDef/S] the definition of this symbol\"\n    },\n    $documentation: \"Base class for all symbols\"\n});\n\nvar AST_NewTarget = DEFNODE(\"NewTarget\", null, {\n    $documentation: \"A reference to new.target\"\n});\n\nvar AST_SymbolDeclaration = DEFNODE(\"SymbolDeclaration\", \"init\", {\n    $documentation: \"A declaration symbol (symbol in var/const, function name or argument, symbol in catch)\",\n}, AST_Symbol);\n\nvar AST_SymbolVar = DEFNODE(\"SymbolVar\", null, {\n    $documentation: \"Symbol defining a variable\",\n}, AST_SymbolDeclaration);\n\nvar AST_SymbolBlockDeclaration = DEFNODE(\"SymbolBlockDeclaration\", null, {\n    $documentation: \"Base class for block-scoped declaration symbols\"\n}, AST_SymbolDeclaration);\n\nvar AST_SymbolConst = DEFNODE(\"SymbolConst\", null, {\n    $documentation: \"A constant declaration\"\n}, AST_SymbolBlockDeclaration);\n\nvar AST_SymbolLet = DEFNODE(\"SymbolLet\", null, {\n    $documentation: \"A block-scoped `let` declaration\"\n}, AST_SymbolBlockDeclaration);\n\nvar AST_SymbolFunarg = DEFNODE(\"SymbolFunarg\", null, {\n    $documentation: \"Symbol naming a function argument\",\n}, AST_SymbolVar);\n\nvar AST_SymbolDefun = DEFNODE(\"SymbolDefun\", null, {\n    $documentation: \"Symbol defining a function\",\n}, AST_SymbolDeclaration);\n\nvar AST_SymbolMethod = DEFNODE(\"SymbolMethod\", null, {\n    $documentation: \"Symbol in an object defining a method\",\n}, AST_Symbol);\n\nvar AST_SymbolClassProperty = DEFNODE(\"SymbolClassProperty\", null, {\n    $documentation: \"Symbol for a class property\",\n}, AST_Symbol);\n\nvar AST_SymbolLambda = DEFNODE(\"SymbolLambda\", null, {\n    $documentation: \"Symbol naming a function expression\",\n}, AST_SymbolDeclaration);\n\nvar AST_SymbolDefClass = DEFNODE(\"SymbolDefClass\", null, {\n    $documentation: \"Symbol naming a class's name in a class declaration. Lexically scoped to its containing scope, and accessible within the class.\"\n}, AST_SymbolBlockDeclaration);\n\nvar AST_SymbolClass = DEFNODE(\"SymbolClass\", null, {\n    $documentation: \"Symbol naming a class's name. Lexically scoped to the class.\"\n}, AST_SymbolDeclaration);\n\nvar AST_SymbolCatch = DEFNODE(\"SymbolCatch\", null, {\n    $documentation: \"Symbol naming the exception in catch\",\n}, AST_SymbolBlockDeclaration);\n\nvar AST_SymbolImport = DEFNODE(\"SymbolImport\", null, {\n    $documentation: \"Symbol referring to an imported name\",\n}, AST_SymbolBlockDeclaration);\n\nvar AST_SymbolImportForeign = DEFNODE(\"SymbolImportForeign\", null, {\n    $documentation: \"A symbol imported from a module, but it is defined in the other module, and its real name is irrelevant for this module's purposes\",\n}, AST_Symbol);\n\nvar AST_Label = DEFNODE(\"Label\", \"references\", {\n    $documentation: \"Symbol naming a label (declaration)\",\n    $propdoc: {\n        references: \"[AST_LoopControl*] a list of nodes referring to this label\"\n    },\n    initialize: function() {\n        this.references = [];\n        this.thedef = this;\n    }\n}, AST_Symbol);\n\nvar AST_SymbolRef = DEFNODE(\"SymbolRef\", null, {\n    $documentation: \"Reference to some symbol (not definition/declaration)\",\n}, AST_Symbol);\n\nvar AST_SymbolExport = DEFNODE(\"SymbolExport\", null, {\n    $documentation: \"Symbol referring to a name to export\",\n}, AST_SymbolRef);\n\nvar AST_SymbolExportForeign = DEFNODE(\"SymbolExportForeign\", null, {\n    $documentation: \"A symbol exported from this module, but it is used in the other module, and its real name is irrelevant for this module's purposes\",\n}, AST_Symbol);\n\nvar AST_LabelRef = DEFNODE(\"LabelRef\", null, {\n    $documentation: \"Reference to a label symbol\",\n}, AST_Symbol);\n\nvar AST_This = DEFNODE(\"This\", null, {\n    $documentation: \"The `this` symbol\",\n}, AST_Symbol);\n\nvar AST_Super = DEFNODE(\"Super\", null, {\n    $documentation: \"The `super` symbol\",\n}, AST_This);\n\nvar AST_Constant = DEFNODE(\"Constant\", null, {\n    $documentation: \"Base class for all constants\",\n    getValue: function() {\n        return this.value;\n    }\n});\n\nvar AST_String = DEFNODE(\"String\", \"value quote\", {\n    $documentation: \"A string literal\",\n    $propdoc: {\n        value: \"[string] the contents of this string\",\n        quote: \"[string] the original quote character\"\n    }\n}, AST_Constant);\n\nvar AST_Number = DEFNODE(\"Number\", \"value literal\", {\n    $documentation: \"A number literal\",\n    $propdoc: {\n        value: \"[number] the numeric value\",\n        literal: \"[string] numeric value as string (optional)\"\n    }\n}, AST_Constant);\n\nvar AST_BigInt = DEFNODE(\"BigInt\", \"value\", {\n    $documentation: \"A big int literal\",\n    $propdoc: {\n        value: \"[string] big int value\"\n    }\n}, AST_Constant);\n\nvar AST_RegExp = DEFNODE(\"RegExp\", \"value\", {\n    $documentation: \"A regexp literal\",\n    $propdoc: {\n        value: \"[RegExp] the actual regexp\",\n    }\n}, AST_Constant);\n\nvar AST_Atom = DEFNODE(\"Atom\", null, {\n    $documentation: \"Base class for atoms\",\n}, AST_Constant);\n\nvar AST_Null = DEFNODE(\"Null\", null, {\n    $documentation: \"The `null` atom\",\n    value: null\n}, AST_Atom);\n\nvar AST_NaN = DEFNODE(\"NaN\", null, {\n    $documentation: \"The impossible value\",\n    value: 0/0\n}, AST_Atom);\n\nvar AST_Undefined = DEFNODE(\"Undefined\", null, {\n    $documentation: \"The `undefined` value\",\n    value: (function() {}())\n}, AST_Atom);\n\nvar AST_Hole = DEFNODE(\"Hole\", null, {\n    $documentation: \"A hole in an array\",\n    value: (function() {}())\n}, AST_Atom);\n\nvar AST_Infinity = DEFNODE(\"Infinity\", null, {\n    $documentation: \"The `Infinity` value\",\n    value: 1/0\n}, AST_Atom);\n\nvar AST_Boolean = DEFNODE(\"Boolean\", null, {\n    $documentation: \"Base class for booleans\",\n}, AST_Atom);\n\nvar AST_False = DEFNODE(\"False\", null, {\n    $documentation: \"The `false` atom\",\n    value: false\n}, AST_Boolean);\n\nvar AST_True = DEFNODE(\"True\", null, {\n    $documentation: \"The `true` atom\",\n    value: true\n}, AST_Boolean);\n\n/* -----[ Walk function ]---- */\n\n/**\n * Walk nodes in depth-first search fashion.\n * Callback can return `walk_abort` symbol to stop iteration.\n * It can also return `true` to stop iteration just for child nodes.\n * Iteration can be stopped and continued by passing the `to_visit` argument,\n * which is given to the callback in the second argument.\n **/\nfunction walk(node, cb, to_visit = [node]) {\n    const push = to_visit.push.bind(to_visit);\n    while (to_visit.length) {\n        const node = to_visit.pop();\n        const ret = cb(node, to_visit);\n\n        if (ret) {\n            if (ret === walk_abort) return true;\n            continue;\n        }\n\n        node._children_backwards(push);\n    }\n    return false;\n}\n\nfunction walk_parent(node, cb, initial_stack) {\n    const to_visit = [node];\n    const push = to_visit.push.bind(to_visit);\n    const stack = initial_stack ? initial_stack.slice() : [];\n    const parent_pop_indices = [];\n\n    let current;\n\n    const info = {\n        parent: (n = 0) => {\n            if (n === -1) {\n                return current;\n            }\n\n            // [ p1 p0 ] [ 1 0 ]\n            if (initial_stack && n >= stack.length) {\n                n -= stack.length;\n                return initial_stack[\n                    initial_stack.length - (n + 1)\n                ];\n            }\n\n            return stack[stack.length - (1 + n)];\n        },\n    };\n\n    while (to_visit.length) {\n        current = to_visit.pop();\n\n        while (\n            parent_pop_indices.length &&\n            to_visit.length == parent_pop_indices[parent_pop_indices.length - 1]\n        ) {\n            stack.pop();\n            parent_pop_indices.pop();\n        }\n\n        const ret = cb(current, info);\n\n        if (ret) {\n            if (ret === walk_abort) return true;\n            continue;\n        }\n\n        const visit_length = to_visit.length;\n\n        current._children_backwards(push);\n\n        // Push only if we're going to traverse the children\n        if (to_visit.length > visit_length) {\n            stack.push(current);\n            parent_pop_indices.push(visit_length - 1);\n        }\n    }\n\n    return false;\n}\n\nconst walk_abort = Symbol(\"abort walk\");\n\n/* -----[ TreeWalker ]----- */\n\nclass TreeWalker {\n    constructor(callback) {\n        this.visit = callback;\n        this.stack = [];\n        this.directives = Object.create(null);\n    }\n\n    _visit(node, descend) {\n        this.push(node);\n        var ret = this.visit(node, descend ? function() {\n            descend.call(node);\n        } : noop);\n        if (!ret && descend) {\n            descend.call(node);\n        }\n        this.pop();\n        return ret;\n    }\n\n    parent(n) {\n        return this.stack[this.stack.length - 2 - (n || 0)];\n    }\n\n    push(node) {\n        if (node instanceof AST_Lambda) {\n            this.directives = Object.create(this.directives);\n        } else if (node instanceof AST_Directive && !this.directives[node.value]) {\n            this.directives[node.value] = node;\n        } else if (node instanceof AST_Class) {\n            this.directives = Object.create(this.directives);\n            if (!this.directives[\"use strict\"]) {\n                this.directives[\"use strict\"] = node;\n            }\n        }\n        this.stack.push(node);\n    }\n\n    pop() {\n        var node = this.stack.pop();\n        if (node instanceof AST_Lambda || node instanceof AST_Class) {\n            this.directives = Object.getPrototypeOf(this.directives);\n        }\n    }\n\n    self() {\n        return this.stack[this.stack.length - 1];\n    }\n\n    find_parent(type) {\n        var stack = this.stack;\n        for (var i = stack.length; --i >= 0;) {\n            var x = stack[i];\n            if (x instanceof type) return x;\n        }\n    }\n\n    has_directive(type) {\n        var dir = this.directives[type];\n        if (dir) return dir;\n        var node = this.stack[this.stack.length - 1];\n        if (node instanceof AST_Scope && node.body) {\n            for (var i = 0; i < node.body.length; ++i) {\n                var st = node.body[i];\n                if (!(st instanceof AST_Directive)) break;\n                if (st.value == type) return st;\n            }\n        }\n    }\n\n    loopcontrol_target(node) {\n        var stack = this.stack;\n        if (node.label) for (var i = stack.length; --i >= 0;) {\n            var x = stack[i];\n            if (x instanceof AST_LabeledStatement && x.label.name == node.label.name)\n                return x.body;\n        } else for (var i = stack.length; --i >= 0;) {\n            var x = stack[i];\n            if (x instanceof AST_IterationStatement\n                || node instanceof AST_Break && x instanceof AST_Switch)\n                return x;\n        }\n    }\n}\n\n// Tree transformer helpers.\nclass TreeTransformer extends TreeWalker {\n    constructor(before, after) {\n        super();\n        this.before = before;\n        this.after = after;\n    }\n}\n\nconst _PURE     = 0b00000001;\nconst _INLINE   = 0b00000010;\nconst _NOINLINE = 0b00000100;\n\nexport {\n    AST_Accessor,\n    AST_Array,\n    AST_Arrow,\n    AST_Assign,\n    AST_Atom,\n    AST_Await,\n    AST_BigInt,\n    AST_Binary,\n    AST_Block,\n    AST_BlockStatement,\n    AST_Boolean,\n    AST_Break,\n    AST_Call,\n    AST_Case,\n    AST_Catch,\n    AST_Class,\n    AST_ClassExpression,\n    AST_ClassProperty,\n    AST_ConciseMethod,\n    AST_Conditional,\n    AST_Const,\n    AST_Constant,\n    AST_Continue,\n    AST_Debugger,\n    AST_Default,\n    AST_DefaultAssign,\n    AST_DefClass,\n    AST_Definitions,\n    AST_Defun,\n    AST_Destructuring,\n    AST_Directive,\n    AST_Do,\n    AST_Dot,\n    AST_DWLoop,\n    AST_EmptyStatement,\n    AST_Exit,\n    AST_Expansion,\n    AST_Export,\n    AST_False,\n    AST_Finally,\n    AST_For,\n    AST_ForIn,\n    AST_ForOf,\n    AST_Function,\n    AST_Hole,\n    AST_If,\n    AST_Import,\n    AST_Infinity,\n    AST_IterationStatement,\n    AST_Jump,\n    AST_Label,\n    AST_LabeledStatement,\n    AST_LabelRef,\n    AST_Lambda,\n    AST_Let,\n    AST_LoopControl,\n    AST_NameMapping,\n    AST_NaN,\n    AST_New,\n    AST_NewTarget,\n    AST_Node,\n    AST_Null,\n    AST_Number,\n    AST_Object,\n    AST_ObjectGetter,\n    AST_ObjectKeyVal,\n    AST_ObjectProperty,\n    AST_ObjectSetter,\n    AST_PrefixedTemplateString,\n    AST_PropAccess,\n    AST_RegExp,\n    AST_Return,\n    AST_Scope,\n    AST_Sequence,\n    AST_SimpleStatement,\n    AST_Statement,\n    AST_StatementWithBody,\n    AST_String,\n    AST_Sub,\n    AST_Super,\n    AST_Switch,\n    AST_SwitchBranch,\n    AST_Symbol,\n    AST_SymbolBlockDeclaration,\n    AST_SymbolCatch,\n    AST_SymbolClass,\n    AST_SymbolClassProperty,\n    AST_SymbolConst,\n    AST_SymbolDeclaration,\n    AST_SymbolDefClass,\n    AST_SymbolDefun,\n    AST_SymbolExport,\n    AST_SymbolExportForeign,\n    AST_SymbolFunarg,\n    AST_SymbolImport,\n    AST_SymbolImportForeign,\n    AST_SymbolLambda,\n    AST_SymbolLet,\n    AST_SymbolMethod,\n    AST_SymbolRef,\n    AST_SymbolVar,\n    AST_TemplateSegment,\n    AST_TemplateString,\n    AST_This,\n    AST_Throw,\n    AST_Token,\n    AST_Toplevel,\n    AST_True,\n    AST_Try,\n    AST_Unary,\n    AST_UnaryPostfix,\n    AST_UnaryPrefix,\n    AST_Undefined,\n    AST_Var,\n    AST_VarDef,\n    AST_While,\n    AST_With,\n    AST_Yield,\n    TreeTransformer,\n    TreeWalker,\n    walk,\n    walk_abort,\n    walk_body,\n    walk_parent,\n    _INLINE,\n    _NOINLINE,\n    _PURE,\n};\n","/***********************************************************************\n\n  A JavaScript tokenizer / parser / beautifier / compressor.\n  https://github.com/mishoo/UglifyJS2\n\n  -------------------------------- (C) ---------------------------------\n\n                           Author: Mihai Bazon\n                         <mihai.bazon@gmail.com>\n                       http://mihai.bazon.net/blog\n\n  Distributed under the BSD license:\n\n    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n        * Redistributions of source code must retain the above\n          copyright notice, this list of conditions and the following\n          disclaimer.\n\n        * Redistributions in binary form must reproduce the above\n          copyright notice, this list of conditions and the following\n          disclaimer in the documentation and/or other materials\n          provided with the distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n\n ***********************************************************************/\n\n\"use strict\";\n\nimport {\n    AST_Array,\n    AST_Await,\n    AST_Binary,\n    AST_Block,\n    AST_Call,\n    AST_Case,\n    AST_Catch,\n    AST_Class,\n    AST_Conditional,\n    AST_Definitions,\n    AST_Destructuring,\n    AST_Do,\n    AST_Dot,\n    AST_Exit,\n    AST_Expansion,\n    AST_Export,\n    AST_For,\n    AST_ForIn,\n    AST_If,\n    AST_Import,\n    AST_LabeledStatement,\n    AST_Lambda,\n    AST_LoopControl,\n    AST_NameMapping,\n    AST_Node,\n    AST_Number,\n    AST_Object,\n    AST_ObjectProperty,\n    AST_PrefixedTemplateString,\n    AST_Sequence,\n    AST_SimpleStatement,\n    AST_Sub,\n    AST_Switch,\n    AST_TemplateString,\n    AST_Try,\n    AST_Unary,\n    AST_VarDef,\n    AST_While,\n    AST_With,\n    AST_Yield,\n} from \"./ast.js\";\nimport {\n    MAP,\n    noop,\n} from \"./utils/index.js\";\n\nfunction def_transform(node, descend) {\n    node.DEFMETHOD(\"transform\", function(tw, in_list) {\n        let transformed = undefined;\n        tw.push(this);\n        if (tw.before) transformed = tw.before(this, descend, in_list);\n        if (transformed === undefined) {\n            transformed = this;\n            descend(transformed, tw);\n            if (tw.after) {\n                const after_ret = tw.after(transformed, in_list);\n                if (after_ret !== undefined) transformed = after_ret;\n            }\n        }\n        tw.pop();\n        return transformed;\n    });\n}\n\nfunction do_list(list, tw) {\n    return MAP(list, function(node) {\n        return node.transform(tw, true);\n    });\n}\n\ndef_transform(AST_Node, noop);\n\ndef_transform(AST_LabeledStatement, function(self, tw) {\n    self.label = self.label.transform(tw);\n    self.body = self.body.transform(tw);\n});\n\ndef_transform(AST_SimpleStatement, function(self, tw) {\n    self.body = self.body.transform(tw);\n});\n\ndef_transform(AST_Block, function(self, tw) {\n    self.body = do_list(self.body, tw);\n});\n\ndef_transform(AST_Do, function(self, tw) {\n    self.body = self.body.transform(tw);\n    self.condition = self.condition.transform(tw);\n});\n\ndef_transform(AST_While, function(self, tw) {\n    self.condition = self.condition.transform(tw);\n    self.body = self.body.transform(tw);\n});\n\ndef_transform(AST_For, function(self, tw) {\n    if (self.init) self.init = self.init.transform(tw);\n    if (self.condition) self.condition = self.condition.transform(tw);\n    if (self.step) self.step = self.step.transform(tw);\n    self.body = self.body.transform(tw);\n});\n\ndef_transform(AST_ForIn, function(self, tw) {\n    self.init = self.init.transform(tw);\n    self.object = self.object.transform(tw);\n    self.body = self.body.transform(tw);\n});\n\ndef_transform(AST_With, function(self, tw) {\n    self.expression = self.expression.transform(tw);\n    self.body = self.body.transform(tw);\n});\n\ndef_transform(AST_Exit, function(self, tw) {\n    if (self.value) self.value = self.value.transform(tw);\n});\n\ndef_transform(AST_LoopControl, function(self, tw) {\n    if (self.label) self.label = self.label.transform(tw);\n});\n\ndef_transform(AST_If, function(self, tw) {\n    self.condition = self.condition.transform(tw);\n    self.body = self.body.transform(tw);\n    if (self.alternative) self.alternative = self.alternative.transform(tw);\n});\n\ndef_transform(AST_Switch, function(self, tw) {\n    self.expression = self.expression.transform(tw);\n    self.body = do_list(self.body, tw);\n});\n\ndef_transform(AST_Case, function(self, tw) {\n    self.expression = self.expression.transform(tw);\n    self.body = do_list(self.body, tw);\n});\n\ndef_transform(AST_Try, function(self, tw) {\n    self.body = do_list(self.body, tw);\n    if (self.bcatch) self.bcatch = self.bcatch.transform(tw);\n    if (self.bfinally) self.bfinally = self.bfinally.transform(tw);\n});\n\ndef_transform(AST_Catch, function(self, tw) {\n    if (self.argname) self.argname = self.argname.transform(tw);\n    self.body = do_list(self.body, tw);\n});\n\ndef_transform(AST_Definitions, function(self, tw) {\n    self.definitions = do_list(self.definitions, tw);\n});\n\ndef_transform(AST_VarDef, function(self, tw) {\n    self.name = self.name.transform(tw);\n    if (self.value) self.value = self.value.transform(tw);\n});\n\ndef_transform(AST_Destructuring, function(self, tw) {\n    self.names = do_list(self.names, tw);\n});\n\ndef_transform(AST_Lambda, function(self, tw) {\n    if (self.name) self.name = self.name.transform(tw);\n    self.argnames = do_list(self.argnames, tw);\n    if (self.body instanceof AST_Node) {\n        self.body = self.body.transform(tw);\n    } else {\n        self.body = do_list(self.body, tw);\n    }\n});\n\ndef_transform(AST_Call, function(self, tw) {\n    self.expression = self.expression.transform(tw);\n    self.args = do_list(self.args, tw);\n});\n\ndef_transform(AST_Sequence, function(self, tw) {\n    const result = do_list(self.expressions, tw);\n    self.expressions = result.length\n        ? result\n        : [new AST_Number({ value: 0 })];\n});\n\ndef_transform(AST_Dot, function(self, tw) {\n    self.expression = self.expression.transform(tw);\n});\n\ndef_transform(AST_Sub, function(self, tw) {\n    self.expression = self.expression.transform(tw);\n    self.property = self.property.transform(tw);\n});\n\ndef_transform(AST_Yield, function(self, tw) {\n    if (self.expression) self.expression = self.expression.transform(tw);\n});\n\ndef_transform(AST_Await, function(self, tw) {\n    self.expression = self.expression.transform(tw);\n});\n\ndef_transform(AST_Unary, function(self, tw) {\n    self.expression = self.expression.transform(tw);\n});\n\ndef_transform(AST_Binary, function(self, tw) {\n    self.left = self.left.transform(tw);\n    self.right = self.right.transform(tw);\n});\n\ndef_transform(AST_Conditional, function(self, tw) {\n    self.condition = self.condition.transform(tw);\n    self.consequent = self.consequent.transform(tw);\n    self.alternative = self.alternative.transform(tw);\n});\n\ndef_transform(AST_Array, function(self, tw) {\n    self.elements = do_list(self.elements, tw);\n});\n\ndef_transform(AST_Object, function(self, tw) {\n    self.properties = do_list(self.properties, tw);\n});\n\ndef_transform(AST_ObjectProperty, function(self, tw) {\n    if (self.key instanceof AST_Node) {\n        self.key = self.key.transform(tw);\n    }\n    if (self.value) self.value = self.value.transform(tw);\n});\n\ndef_transform(AST_Class, function(self, tw) {\n    if (self.name) self.name = self.name.transform(tw);\n    if (self.extends) self.extends = self.extends.transform(tw);\n    self.properties = do_list(self.properties, tw);\n});\n\ndef_transform(AST_Expansion, function(self, tw) {\n    self.expression = self.expression.transform(tw);\n});\n\ndef_transform(AST_NameMapping, function(self, tw) {\n    self.foreign_name = self.foreign_name.transform(tw);\n    self.name = self.name.transform(tw);\n});\n\ndef_transform(AST_Import, function(self, tw) {\n    if (self.imported_name) self.imported_name = self.imported_name.transform(tw);\n    if (self.imported_names) do_list(self.imported_names, tw);\n    self.module_name = self.module_name.transform(tw);\n});\n\ndef_transform(AST_Export, function(self, tw) {\n    if (self.exported_definition) self.exported_definition = self.exported_definition.transform(tw);\n    if (self.exported_value) self.exported_value = self.exported_value.transform(tw);\n    if (self.exported_names) do_list(self.exported_names, tw);\n    if (self.module_name) self.module_name = self.module_name.transform(tw);\n});\n\ndef_transform(AST_TemplateString, function(self, tw) {\n    self.segments = do_list(self.segments, tw);\n});\n\ndef_transform(AST_PrefixedTemplateString, function(self, tw) {\n    self.prefix = self.prefix.transform(tw);\n    self.template_string = self.template_string.transform(tw);\n});\n\n","import {\n    AST_Binary,\n    AST_Conditional,\n    AST_Dot,\n    AST_Object,\n    AST_Sequence,\n    AST_Statement,\n    AST_Sub,\n    AST_UnaryPostfix,\n    AST_PrefixedTemplateString\n} from \"../ast.js\";\n\n// return true if the node at the top of the stack (that means the\n// innermost node in the current output) is lexically the first in\n// a statement.\nfunction first_in_statement(stack) {\n    let node = stack.parent(-1);\n    for (let i = 0, p; p = stack.parent(i); i++) {\n        if (p instanceof AST_Statement && p.body === node)\n            return true;\n        if ((p instanceof AST_Sequence && p.expressions[0] === node) ||\n            (p.TYPE === \"Call\" && p.expression === node) ||\n            (p instanceof AST_PrefixedTemplateString && p.prefix === node) ||\n            (p instanceof AST_Dot && p.expression === node) ||\n            (p instanceof AST_Sub && p.expression === node) ||\n            (p instanceof AST_Conditional && p.condition === node) ||\n            (p instanceof AST_Binary && p.left === node) ||\n            (p instanceof AST_UnaryPostfix && p.expression === node)\n        ) {\n            node = p;\n        } else {\n            return false;\n        }\n    }\n}\n\n// Returns whether the leftmost item in the expression is an object\nfunction left_is_object(node) {\n    if (node instanceof AST_Object) return true;\n    if (node instanceof AST_Sequence) return left_is_object(node.expressions[0]);\n    if (node.TYPE === \"Call\") return left_is_object(node.expression);\n    if (node instanceof AST_PrefixedTemplateString) return left_is_object(node.prefix);\n    if (node instanceof AST_Dot || node instanceof AST_Sub) return left_is_object(node.expression);\n    if (node instanceof AST_Conditional) return left_is_object(node.condition);\n    if (node instanceof AST_Binary) return left_is_object(node.left);\n    if (node instanceof AST_UnaryPostfix) return left_is_object(node.expression);\n    return false;\n}\n\nexport { first_in_statement, left_is_object };\n","/***********************************************************************\n\n  A JavaScript tokenizer / parser / beautifier / compressor.\n  https://github.com/mishoo/UglifyJS2\n\n  -------------------------------- (C) ---------------------------------\n\n                           Author: Mihai Bazon\n                         <mihai.bazon@gmail.com>\n                       http://mihai.bazon.net/blog\n\n  Distributed under the BSD license:\n\n    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n        * Redistributions of source code must retain the above\n          copyright notice, this list of conditions and the following\n          disclaimer.\n\n        * Redistributions in binary form must reproduce the above\n          copyright notice, this list of conditions and the following\n          disclaimer in the documentation and/or other materials\n          provided with the distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n\n ***********************************************************************/\n\n\"use strict\";\n\nimport {\n    defaults,\n    makePredicate,\n    noop,\n    regexp_source_fix,\n    sort_regexp_flags,\n    return_false,\n    return_true,\n} from \"./utils/index.js\";\nimport { first_in_statement, left_is_object } from \"./utils/first_in_statement.js\";\nimport {\n    AST_Array,\n    AST_Arrow,\n    AST_Assign,\n    AST_Await,\n    AST_BigInt,\n    AST_Binary,\n    AST_BlockStatement,\n    AST_Break,\n    AST_Call,\n    AST_Case,\n    AST_Catch,\n    AST_Class,\n    AST_ClassExpression,\n    AST_ClassProperty,\n    AST_ConciseMethod,\n    AST_Conditional,\n    AST_Const,\n    AST_Constant,\n    AST_Continue,\n    AST_Debugger,\n    AST_Default,\n    AST_DefaultAssign,\n    AST_Definitions,\n    AST_Defun,\n    AST_Destructuring,\n    AST_Directive,\n    AST_Do,\n    AST_Dot,\n    AST_EmptyStatement,\n    AST_Exit,\n    AST_Expansion,\n    AST_Export,\n    AST_Finally,\n    AST_For,\n    AST_ForIn,\n    AST_ForOf,\n    AST_Function,\n    AST_Hole,\n    AST_If,\n    AST_Import,\n    AST_Jump,\n    AST_LabeledStatement,\n    AST_Lambda,\n    AST_Let,\n    AST_LoopControl,\n    AST_NameMapping,\n    AST_New,\n    AST_NewTarget,\n    AST_Node,\n    AST_Number,\n    AST_Object,\n    AST_ObjectGetter,\n    AST_ObjectKeyVal,\n    AST_ObjectProperty,\n    AST_ObjectSetter,\n    AST_PrefixedTemplateString,\n    AST_PropAccess,\n    AST_RegExp,\n    AST_Return,\n    AST_Scope,\n    AST_Sequence,\n    AST_SimpleStatement,\n    AST_Statement,\n    AST_StatementWithBody,\n    AST_String,\n    AST_Sub,\n    AST_Super,\n    AST_Switch,\n    AST_SwitchBranch,\n    AST_Symbol,\n    AST_SymbolClassProperty,\n    AST_SymbolMethod,\n    AST_SymbolRef,\n    AST_TemplateSegment,\n    AST_TemplateString,\n    AST_This,\n    AST_Throw,\n    AST_Toplevel,\n    AST_Try,\n    AST_Unary,\n    AST_UnaryPostfix,\n    AST_UnaryPrefix,\n    AST_Var,\n    AST_VarDef,\n    AST_While,\n    AST_With,\n    AST_Yield,\n    TreeWalker,\n    walk,\n    walk_abort\n} from \"./ast.js\";\nimport {\n    get_full_char_code,\n    get_full_char,\n    is_identifier_char,\n    is_basic_identifier_string,\n    is_identifier_string,\n    PRECEDENCE,\n    RESERVED_WORDS,\n} from \"./parse.js\";\n\nconst EXPECT_DIRECTIVE = /^$|[;{][\\s\\n]*$/;\nconst CODE_LINE_BREAK = 10;\nconst CODE_SPACE = 32;\n\nconst r_annotation = /[@#]__(PURE|INLINE|NOINLINE)__/g;\n\nfunction is_some_comments(comment) {\n    // multiline comment\n    return (\n        (comment.type === \"comment2\" || comment.type === \"comment1\")\n        && /@preserve|@lic|@cc_on|^\\**!/i.test(comment.value)\n    );\n}\n\nfunction OutputStream(options) {\n\n    var readonly = !options;\n    options = defaults(options, {\n        ascii_only           : false,\n        beautify             : false,\n        braces               : false,\n        comments             : \"some\",\n        ecma                 : 5,\n        ie8                  : false,\n        indent_level         : 4,\n        indent_start         : 0,\n        inline_script        : true,\n        keep_numbers         : false,\n        keep_quoted_props    : false,\n        max_line_len         : false,\n        preamble             : null,\n        preserve_annotations : false,\n        quote_keys           : false,\n        quote_style          : 0,\n        safari10             : false,\n        semicolons           : true,\n        shebang              : true,\n        shorthand            : undefined,\n        source_map           : null,\n        webkit               : false,\n        width                : 80,\n        wrap_iife            : false,\n        wrap_func_args       : true,\n    }, true);\n\n    if (options.shorthand === undefined)\n        options.shorthand = options.ecma > 5;\n\n    // Convert comment option to RegExp if neccessary and set up comments filter\n    var comment_filter = return_false; // Default case, throw all comments away\n    if (options.comments) {\n        let comments = options.comments;\n        if (typeof options.comments === \"string\" && /^\\/.*\\/[a-zA-Z]*$/.test(options.comments)) {\n            var regex_pos = options.comments.lastIndexOf(\"/\");\n            comments = new RegExp(\n                options.comments.substr(1, regex_pos - 1),\n                options.comments.substr(regex_pos + 1)\n            );\n        }\n        if (comments instanceof RegExp) {\n            comment_filter = function(comment) {\n                return comment.type != \"comment5\" && comments.test(comment.value);\n            };\n        } else if (typeof comments === \"function\") {\n            comment_filter = function(comment) {\n                return comment.type != \"comment5\" && comments(this, comment);\n            };\n        } else if (comments === \"some\") {\n            comment_filter = is_some_comments;\n        } else { // NOTE includes \"all\" option\n            comment_filter = return_true;\n        }\n    }\n\n    var indentation = 0;\n    var current_col = 0;\n    var current_line = 1;\n    var current_pos = 0;\n    var OUTPUT = \"\";\n    let printed_comments = new Set();\n\n    var to_utf8 = options.ascii_only ? function(str, identifier) {\n        if (options.ecma >= 2015) {\n            str = str.replace(/[\\ud800-\\udbff][\\udc00-\\udfff]/g, function(ch) {\n                var code = get_full_char_code(ch, 0).toString(16);\n                return \"\\\\u{\" + code + \"}\";\n            });\n        }\n        return str.replace(/[\\u0000-\\u001f\\u007f-\\uffff]/g, function(ch) {\n            var code = ch.charCodeAt(0).toString(16);\n            if (code.length <= 2 && !identifier) {\n                while (code.length < 2) code = \"0\" + code;\n                return \"\\\\x\" + code;\n            } else {\n                while (code.length < 4) code = \"0\" + code;\n                return \"\\\\u\" + code;\n            }\n        });\n    } : function(str) {\n        return str.replace(/[\\ud800-\\udbff][\\udc00-\\udfff]|([\\ud800-\\udbff]|[\\udc00-\\udfff])/g, function(match, lone) {\n            if (lone) {\n                return \"\\\\u\" + lone.charCodeAt(0).toString(16);\n            }\n            return match;\n        });\n    };\n\n    function make_string(str, quote) {\n        var dq = 0, sq = 0;\n        str = str.replace(/[\\\\\\b\\f\\n\\r\\v\\t\\x22\\x27\\u2028\\u2029\\0\\ufeff]/g,\n          function(s, i) {\n            switch (s) {\n              case '\"': ++dq; return '\"';\n              case \"'\": ++sq; return \"'\";\n              case \"\\\\\": return \"\\\\\\\\\";\n              case \"\\n\": return \"\\\\n\";\n              case \"\\r\": return \"\\\\r\";\n              case \"\\t\": return \"\\\\t\";\n              case \"\\b\": return \"\\\\b\";\n              case \"\\f\": return \"\\\\f\";\n              case \"\\x0B\": return options.ie8 ? \"\\\\x0B\" : \"\\\\v\";\n              case \"\\u2028\": return \"\\\\u2028\";\n              case \"\\u2029\": return \"\\\\u2029\";\n              case \"\\ufeff\": return \"\\\\ufeff\";\n              case \"\\0\":\n                  return /[0-9]/.test(get_full_char(str, i+1)) ? \"\\\\x00\" : \"\\\\0\";\n            }\n            return s;\n        });\n        function quote_single() {\n            return \"'\" + str.replace(/\\x27/g, \"\\\\'\") + \"'\";\n        }\n        function quote_double() {\n            return '\"' + str.replace(/\\x22/g, '\\\\\"') + '\"';\n        }\n        function quote_template() {\n            return \"`\" + str.replace(/`/g, \"\\\\`\") + \"`\";\n        }\n        str = to_utf8(str);\n        if (quote === \"`\") return quote_template();\n        switch (options.quote_style) {\n          case 1:\n            return quote_single();\n          case 2:\n            return quote_double();\n          case 3:\n            return quote == \"'\" ? quote_single() : quote_double();\n          default:\n            return dq > sq ? quote_single() : quote_double();\n        }\n    }\n\n    function encode_string(str, quote) {\n        var ret = make_string(str, quote);\n        if (options.inline_script) {\n            ret = ret.replace(/<\\x2f(script)([>\\/\\t\\n\\f\\r ])/gi, \"<\\\\/$1$2\");\n            ret = ret.replace(/\\x3c!--/g, \"\\\\x3c!--\");\n            ret = ret.replace(/--\\x3e/g, \"--\\\\x3e\");\n        }\n        return ret;\n    }\n\n    function make_name(name) {\n        name = name.toString();\n        name = to_utf8(name, true);\n        return name;\n    }\n\n    function make_indent(back) {\n        return \" \".repeat(options.indent_start + indentation - back * options.indent_level);\n    }\n\n    /* -----[ beautification/minification ]----- */\n\n    var has_parens = false;\n    var might_need_space = false;\n    var might_need_semicolon = false;\n    var might_add_newline = 0;\n    var need_newline_indented = false;\n    var need_space = false;\n    var newline_insert = -1;\n    var last = \"\";\n    var mapping_token, mapping_name, mappings = options.source_map && [];\n\n    var do_add_mapping = mappings ? function() {\n        mappings.forEach(function(mapping) {\n            try {\n                options.source_map.add(\n                    mapping.token.file,\n                    mapping.line, mapping.col,\n                    mapping.token.line, mapping.token.col,\n                    !mapping.name && mapping.token.type == \"name\" ? mapping.token.value : mapping.name\n                );\n            } catch(ex) {\n                mapping.token.file != null && AST_Node.warn(\"Couldn't figure out mapping for {file}:{line},{col} → {cline},{ccol} [{name}]\", {\n                    file: mapping.token.file,\n                    line: mapping.token.line,\n                    col: mapping.token.col,\n                    cline: mapping.line,\n                    ccol: mapping.col,\n                    name: mapping.name || \"\"\n                });\n            }\n        });\n        mappings = [];\n    } : noop;\n\n    var ensure_line_len = options.max_line_len ? function() {\n        if (current_col > options.max_line_len) {\n            if (might_add_newline) {\n                var left = OUTPUT.slice(0, might_add_newline);\n                var right = OUTPUT.slice(might_add_newline);\n                if (mappings) {\n                    var delta = right.length - current_col;\n                    mappings.forEach(function(mapping) {\n                        mapping.line++;\n                        mapping.col += delta;\n                    });\n                }\n                OUTPUT = left + \"\\n\" + right;\n                current_line++;\n                current_pos++;\n                current_col = right.length;\n            }\n            if (current_col > options.max_line_len) {\n                AST_Node.warn(\"Output exceeds {max_line_len} characters\", options);\n            }\n        }\n        if (might_add_newline) {\n            might_add_newline = 0;\n            do_add_mapping();\n        }\n    } : noop;\n\n    var requireSemicolonChars = makePredicate(\"( [ + * / - , . `\");\n\n    function print(str) {\n        str = String(str);\n        var ch = get_full_char(str, 0);\n        if (need_newline_indented && ch) {\n            need_newline_indented = false;\n            if (ch !== \"\\n\") {\n                print(\"\\n\");\n                indent();\n            }\n        }\n        if (need_space && ch) {\n            need_space = false;\n            if (!/[\\s;})]/.test(ch)) {\n                space();\n            }\n        }\n        newline_insert = -1;\n        var prev = last.charAt(last.length - 1);\n        if (might_need_semicolon) {\n            might_need_semicolon = false;\n\n            if (prev === \":\" && ch === \"}\" || (!ch || !\";}\".includes(ch)) && prev !== \";\") {\n                if (options.semicolons || requireSemicolonChars.has(ch)) {\n                    OUTPUT += \";\";\n                    current_col++;\n                    current_pos++;\n                } else {\n                    ensure_line_len();\n                    if (current_col > 0) {\n                        OUTPUT += \"\\n\";\n                        current_pos++;\n                        current_line++;\n                        current_col = 0;\n                    }\n\n                    if (/^\\s+$/.test(str)) {\n                        // reset the semicolon flag, since we didn't print one\n                        // now and might still have to later\n                        might_need_semicolon = true;\n                    }\n                }\n\n                if (!options.beautify)\n                    might_need_space = false;\n            }\n        }\n\n        if (might_need_space) {\n            if ((is_identifier_char(prev)\n                    && (is_identifier_char(ch) || ch == \"\\\\\"))\n                || (ch == \"/\" && ch == prev)\n                || ((ch == \"+\" || ch == \"-\") && ch == last)\n            ) {\n                OUTPUT += \" \";\n                current_col++;\n                current_pos++;\n            }\n            might_need_space = false;\n        }\n\n        if (mapping_token) {\n            mappings.push({\n                token: mapping_token,\n                name: mapping_name,\n                line: current_line,\n                col: current_col\n            });\n            mapping_token = false;\n            if (!might_add_newline) do_add_mapping();\n        }\n\n        OUTPUT += str;\n        has_parens = str[str.length - 1] == \"(\";\n        current_pos += str.length;\n        var a = str.split(/\\r?\\n/), n = a.length - 1;\n        current_line += n;\n        current_col += a[0].length;\n        if (n > 0) {\n            ensure_line_len();\n            current_col = a[n].length;\n        }\n        last = str;\n    }\n\n    var star = function() {\n        print(\"*\");\n    };\n\n    var space = options.beautify ? function() {\n        print(\" \");\n    } : function() {\n        might_need_space = true;\n    };\n\n    var indent = options.beautify ? function(half) {\n        if (options.beautify) {\n            print(make_indent(half ? 0.5 : 0));\n        }\n    } : noop;\n\n    var with_indent = options.beautify ? function(col, cont) {\n        if (col === true) col = next_indent();\n        var save_indentation = indentation;\n        indentation = col;\n        var ret = cont();\n        indentation = save_indentation;\n        return ret;\n    } : function(col, cont) { return cont(); };\n\n    var newline = options.beautify ? function() {\n        if (newline_insert < 0) return print(\"\\n\");\n        if (OUTPUT[newline_insert] != \"\\n\") {\n            OUTPUT = OUTPUT.slice(0, newline_insert) + \"\\n\" + OUTPUT.slice(newline_insert);\n            current_pos++;\n            current_line++;\n        }\n        newline_insert++;\n    } : options.max_line_len ? function() {\n        ensure_line_len();\n        might_add_newline = OUTPUT.length;\n    } : noop;\n\n    var semicolon = options.beautify ? function() {\n        print(\";\");\n    } : function() {\n        might_need_semicolon = true;\n    };\n\n    function force_semicolon() {\n        might_need_semicolon = false;\n        print(\";\");\n    }\n\n    function next_indent() {\n        return indentation + options.indent_level;\n    }\n\n    function with_block(cont) {\n        var ret;\n        print(\"{\");\n        newline();\n        with_indent(next_indent(), function() {\n            ret = cont();\n        });\n        indent();\n        print(\"}\");\n        return ret;\n    }\n\n    function with_parens(cont) {\n        print(\"(\");\n        //XXX: still nice to have that for argument lists\n        //var ret = with_indent(current_col, cont);\n        var ret = cont();\n        print(\")\");\n        return ret;\n    }\n\n    function with_square(cont) {\n        print(\"[\");\n        //var ret = with_indent(current_col, cont);\n        var ret = cont();\n        print(\"]\");\n        return ret;\n    }\n\n    function comma() {\n        print(\",\");\n        space();\n    }\n\n    function colon() {\n        print(\":\");\n        space();\n    }\n\n    var add_mapping = mappings ? function(token, name) {\n        mapping_token = token;\n        mapping_name = name;\n    } : noop;\n\n    function get() {\n        if (might_add_newline) {\n            ensure_line_len();\n        }\n        return OUTPUT;\n    }\n\n    function has_nlb() {\n        let n = OUTPUT.length - 1;\n        while (n >= 0) {\n            const code = OUTPUT.charCodeAt(n);\n            if (code === CODE_LINE_BREAK) {\n                return true;\n            }\n\n            if (code !== CODE_SPACE) {\n                return false;\n            }\n            n--;\n        }\n        return true;\n    }\n\n    function filter_comment(comment) {\n        if (!options.preserve_annotations) {\n            comment = comment.replace(r_annotation, \" \");\n        }\n        if (/^\\s*$/.test(comment)) {\n            return \"\";\n        }\n        return comment.replace(/(<\\s*\\/\\s*)(script)/i, \"<\\\\/$2\");\n    }\n\n    function prepend_comments(node) {\n        var self = this;\n        var start = node.start;\n        if (!start) return;\n        var printed_comments = self.printed_comments;\n\n        // There cannot be a newline between return and its value.\n        const return_with_value = node instanceof AST_Exit && node.value;\n\n        if (\n            start.comments_before\n            && printed_comments.has(start.comments_before)\n        ) {\n            if (return_with_value) {\n                start.comments_before = [];\n            } else {\n                return;\n            }\n        }\n\n        var comments = start.comments_before;\n        if (!comments) {\n            comments = start.comments_before = [];\n        }\n        printed_comments.add(comments);\n\n        if (return_with_value) {\n            var tw = new TreeWalker(function(node) {\n                var parent = tw.parent();\n                if (parent instanceof AST_Exit\n                    || parent instanceof AST_Binary && parent.left === node\n                    || parent.TYPE == \"Call\" && parent.expression === node\n                    || parent instanceof AST_Conditional && parent.condition === node\n                    || parent instanceof AST_Dot && parent.expression === node\n                    || parent instanceof AST_Sequence && parent.expressions[0] === node\n                    || parent instanceof AST_Sub && parent.expression === node\n                    || parent instanceof AST_UnaryPostfix) {\n                    if (!node.start) return;\n                    var text = node.start.comments_before;\n                    if (text && !printed_comments.has(text)) {\n                        printed_comments.add(text);\n                        comments = comments.concat(text);\n                    }\n                } else {\n                    return true;\n                }\n            });\n            tw.push(node);\n            node.value.walk(tw);\n        }\n\n        if (current_pos == 0) {\n            if (comments.length > 0 && options.shebang && comments[0].type === \"comment5\"\n                && !printed_comments.has(comments[0])) {\n                print(\"#!\" + comments.shift().value + \"\\n\");\n                indent();\n            }\n            var preamble = options.preamble;\n            if (preamble) {\n                print(preamble.replace(/\\r\\n?|[\\n\\u2028\\u2029]|\\s*$/g, \"\\n\"));\n            }\n        }\n\n        comments = comments.filter(comment_filter, node).filter(c => !printed_comments.has(c));\n        if (comments.length == 0) return;\n        var last_nlb = has_nlb();\n        comments.forEach(function(c, i) {\n            printed_comments.add(c);\n            if (!last_nlb) {\n                if (c.nlb) {\n                    print(\"\\n\");\n                    indent();\n                    last_nlb = true;\n                } else if (i > 0) {\n                    space();\n                }\n            }\n\n            if (/comment[134]/.test(c.type)) {\n                var value = filter_comment(c.value);\n                if (value) {\n                    print(\"//\" + value + \"\\n\");\n                    indent();\n                }\n                last_nlb = true;\n            } else if (c.type == \"comment2\") {\n                var value = filter_comment(c.value);\n                if (value) {\n                    print(\"/*\" + value + \"*/\");\n                }\n                last_nlb = false;\n            }\n        });\n        if (!last_nlb) {\n            if (start.nlb) {\n                print(\"\\n\");\n                indent();\n            } else {\n                space();\n            }\n        }\n    }\n\n    function append_comments(node, tail) {\n        var self = this;\n        var token = node.end;\n        if (!token) return;\n        var printed_comments = self.printed_comments;\n        var comments = token[tail ? \"comments_before\" : \"comments_after\"];\n        if (!comments || printed_comments.has(comments)) return;\n        if (!(node instanceof AST_Statement || comments.every((c) =>\n            !/comment[134]/.test(c.type)\n        ))) return;\n        printed_comments.add(comments);\n        var insert = OUTPUT.length;\n        comments.filter(comment_filter, node).forEach(function(c, i) {\n            if (printed_comments.has(c)) return;\n            printed_comments.add(c);\n            need_space = false;\n            if (need_newline_indented) {\n                print(\"\\n\");\n                indent();\n                need_newline_indented = false;\n            } else if (c.nlb && (i > 0 || !has_nlb())) {\n                print(\"\\n\");\n                indent();\n            } else if (i > 0 || !tail) {\n                space();\n            }\n            if (/comment[134]/.test(c.type)) {\n                const value = filter_comment(c.value);\n                if (value) {\n                    print(\"//\" + value);\n                }\n                need_newline_indented = true;\n            } else if (c.type == \"comment2\") {\n                const value = filter_comment(c.value);\n                if (value) {\n                    print(\"/*\" + value + \"*/\");\n                }\n                need_space = true;\n            }\n        });\n        if (OUTPUT.length > insert) newline_insert = insert;\n    }\n\n    var stack = [];\n    return {\n        get             : get,\n        toString        : get,\n        indent          : indent,\n        in_directive    : false,\n        use_asm         : null,\n        active_scope    : null,\n        indentation     : function() { return indentation; },\n        current_width   : function() { return current_col - indentation; },\n        should_break    : function() { return options.width && this.current_width() >= options.width; },\n        has_parens      : function() { return has_parens; },\n        newline         : newline,\n        print           : print,\n        star            : star,\n        space           : space,\n        comma           : comma,\n        colon           : colon,\n        last            : function() { return last; },\n        semicolon       : semicolon,\n        force_semicolon : force_semicolon,\n        to_utf8         : to_utf8,\n        print_name      : function(name) { print(make_name(name)); },\n        print_string    : function(str, quote, escape_directive) {\n            var encoded = encode_string(str, quote);\n            if (escape_directive === true && !encoded.includes(\"\\\\\")) {\n                // Insert semicolons to break directive prologue\n                if (!EXPECT_DIRECTIVE.test(OUTPUT)) {\n                    force_semicolon();\n                }\n                force_semicolon();\n            }\n            print(encoded);\n        },\n        print_template_string_chars: function(str) {\n            var encoded = encode_string(str, \"`\").replace(/\\${/g, \"\\\\${\");\n            return print(encoded.substr(1, encoded.length - 2));\n        },\n        encode_string   : encode_string,\n        next_indent     : next_indent,\n        with_indent     : with_indent,\n        with_block      : with_block,\n        with_parens     : with_parens,\n        with_square     : with_square,\n        add_mapping     : add_mapping,\n        option          : function(opt) { return options[opt]; },\n        printed_comments: printed_comments,\n        prepend_comments: readonly ? noop : prepend_comments,\n        append_comments : readonly || comment_filter === return_false ? noop : append_comments,\n        line            : function() { return current_line; },\n        col             : function() { return current_col; },\n        pos             : function() { return current_pos; },\n        push_node       : function(node) { stack.push(node); },\n        pop_node        : function() { return stack.pop(); },\n        parent          : function(n) {\n            return stack[stack.length - 2 - (n || 0)];\n        }\n    };\n\n}\n\n/* -----[ code generators ]----- */\n\n(function() {\n\n    /* -----[ utils ]----- */\n\n    function DEFPRINT(nodetype, generator) {\n        nodetype.DEFMETHOD(\"_codegen\", generator);\n    }\n\n    AST_Node.DEFMETHOD(\"print\", function(output, force_parens) {\n        var self = this, generator = self._codegen;\n        if (self instanceof AST_Scope) {\n            output.active_scope = self;\n        } else if (!output.use_asm && self instanceof AST_Directive && self.value == \"use asm\") {\n            output.use_asm = output.active_scope;\n        }\n        function doit() {\n            output.prepend_comments(self);\n            self.add_source_map(output);\n            generator(self, output);\n            output.append_comments(self);\n        }\n        output.push_node(self);\n        if (force_parens || self.needs_parens(output)) {\n            output.with_parens(doit);\n        } else {\n            doit();\n        }\n        output.pop_node();\n        if (self === output.use_asm) {\n            output.use_asm = null;\n        }\n    });\n    AST_Node.DEFMETHOD(\"_print\", AST_Node.prototype.print);\n\n    AST_Node.DEFMETHOD(\"print_to_string\", function(options) {\n        var output = OutputStream(options);\n        this.print(output);\n        return output.get();\n    });\n\n    /* -----[ PARENTHESES ]----- */\n\n    function PARENS(nodetype, func) {\n        if (Array.isArray(nodetype)) {\n            nodetype.forEach(function(nodetype) {\n                PARENS(nodetype, func);\n            });\n        } else {\n            nodetype.DEFMETHOD(\"needs_parens\", func);\n        }\n    }\n\n    PARENS(AST_Node, return_false);\n\n    // a function expression needs parens around it when it's provably\n    // the first token to appear in a statement.\n    PARENS(AST_Function, function(output) {\n        if (!output.has_parens() && first_in_statement(output)) {\n            return true;\n        }\n\n        if (output.option(\"webkit\")) {\n            var p = output.parent();\n            if (p instanceof AST_PropAccess && p.expression === this) {\n                return true;\n            }\n        }\n\n        if (output.option(\"wrap_iife\")) {\n            var p = output.parent();\n            if (p instanceof AST_Call && p.expression === this) {\n                return true;\n            }\n        }\n\n        if (output.option(\"wrap_func_args\")) {\n            var p = output.parent();\n            if (p instanceof AST_Call && p.args.includes(this)) {\n                return true;\n            }\n        }\n\n        return false;\n    });\n\n    PARENS(AST_Arrow, function(output) {\n        var p = output.parent();\n        return p instanceof AST_PropAccess && p.expression === this;\n    });\n\n    // same goes for an object literal, because otherwise it would be\n    // interpreted as a block of code.\n    PARENS(AST_Object, function(output) {\n        return !output.has_parens() && first_in_statement(output);\n    });\n\n    PARENS(AST_ClassExpression, first_in_statement);\n\n    PARENS(AST_Unary, function(output) {\n        var p = output.parent();\n        return p instanceof AST_PropAccess && p.expression === this\n            || p instanceof AST_Call && p.expression === this\n            || p instanceof AST_Binary\n                && p.operator === \"**\"\n                && this instanceof AST_UnaryPrefix\n                && p.left === this\n                && this.operator !== \"++\"\n                && this.operator !== \"--\";\n    });\n\n    PARENS(AST_Await, function(output) {\n        var p = output.parent();\n        return p instanceof AST_PropAccess && p.expression === this\n            || p instanceof AST_Call && p.expression === this\n            || output.option(\"safari10\") && p instanceof AST_UnaryPrefix;\n    });\n\n    PARENS(AST_Sequence, function(output) {\n        var p = output.parent();\n        return p instanceof AST_Call                          // (foo, bar)() or foo(1, (2, 3), 4)\n            || p instanceof AST_Unary                         // !(foo, bar, baz)\n            || p instanceof AST_Binary                        // 1 + (2, 3) + 4 ==> 8\n            || p instanceof AST_VarDef                        // var a = (1, 2), b = a + a; ==> b == 4\n            || p instanceof AST_PropAccess                    // (1, {foo:2}).foo or (1, {foo:2})[\"foo\"] ==> 2\n            || p instanceof AST_Array                         // [ 1, (2, 3), 4 ] ==> [ 1, 3, 4 ]\n            || p instanceof AST_ObjectProperty                // { foo: (1, 2) }.foo ==> 2\n            || p instanceof AST_Conditional                   /* (false, true) ? (a = 10, b = 20) : (c = 30)\n                                                               * ==> 20 (side effect, set a := 10 and b := 20) */\n            || p instanceof AST_Arrow                         // x => (x, x)\n            || p instanceof AST_DefaultAssign                 // x => (x = (0, function(){}))\n            || p instanceof AST_Expansion                     // [...(a, b)]\n            || p instanceof AST_ForOf && this === p.object    // for (e of (foo, bar)) {}\n            || p instanceof AST_Yield                         // yield (foo, bar)\n            || p instanceof AST_Export                        // export default (foo, bar)\n        ;\n    });\n\n    PARENS(AST_Binary, function(output) {\n        var p = output.parent();\n        // (foo && bar)()\n        if (p instanceof AST_Call && p.expression === this)\n            return true;\n        // typeof (foo && bar)\n        if (p instanceof AST_Unary)\n            return true;\n        // (foo && bar)[\"prop\"], (foo && bar).prop\n        if (p instanceof AST_PropAccess && p.expression === this)\n            return true;\n        // this deals with precedence: 3 * (2 + 1)\n        if (p instanceof AST_Binary) {\n            const po = p.operator;\n            const so = this.operator;\n\n            if (so === \"??\" && (po === \"||\" || po === \"&&\")) {\n                return true;\n            }\n\n            const pp = PRECEDENCE[po];\n            const sp = PRECEDENCE[so];\n            if (pp > sp\n                || (pp == sp\n                    && (this === p.right || po == \"**\"))) {\n                return true;\n            }\n        }\n    });\n\n    PARENS(AST_Yield, function(output) {\n        var p = output.parent();\n        // (yield 1) + (yield 2)\n        // a = yield 3\n        if (p instanceof AST_Binary && p.operator !== \"=\")\n            return true;\n        // (yield 1)()\n        // new (yield 1)()\n        if (p instanceof AST_Call && p.expression === this)\n            return true;\n        // (yield 1) ? yield 2 : yield 3\n        if (p instanceof AST_Conditional && p.condition === this)\n            return true;\n        // -(yield 4)\n        if (p instanceof AST_Unary)\n            return true;\n        // (yield x).foo\n        // (yield x)['foo']\n        if (p instanceof AST_PropAccess && p.expression === this)\n            return true;\n    });\n\n    PARENS(AST_PropAccess, function(output) {\n        var p = output.parent();\n        if (p instanceof AST_New && p.expression === this) {\n            // i.e. new (foo.bar().baz)\n            //\n            // if there's one call into this subtree, then we need\n            // parens around it too, otherwise the call will be\n            // interpreted as passing the arguments to the upper New\n            // expression.\n            return walk(this, node => {\n                if (node instanceof AST_Scope) return true;\n                if (node instanceof AST_Call) {\n                    return walk_abort;  // makes walk() return true.\n                }\n            });\n        }\n    });\n\n    PARENS(AST_Call, function(output) {\n        var p = output.parent(), p1;\n        if (p instanceof AST_New && p.expression === this\n            || p instanceof AST_Export && p.is_default && this.expression instanceof AST_Function)\n            return true;\n\n        // workaround for Safari bug.\n        // https://bugs.webkit.org/show_bug.cgi?id=123506\n        return this.expression instanceof AST_Function\n            && p instanceof AST_PropAccess\n            && p.expression === this\n            && (p1 = output.parent(1)) instanceof AST_Assign\n            && p1.left === p;\n    });\n\n    PARENS(AST_New, function(output) {\n        var p = output.parent();\n        if (this.args.length === 0\n            && (p instanceof AST_PropAccess // (new Date).getTime(), (new Date)[\"getTime\"]()\n                || p instanceof AST_Call && p.expression === this)) // (new foo)(bar)\n            return true;\n    });\n\n    PARENS(AST_Number, function(output) {\n        var p = output.parent();\n        if (p instanceof AST_PropAccess && p.expression === this) {\n            var value = this.getValue();\n            if (value < 0 || /^0/.test(make_num(value))) {\n                return true;\n            }\n        }\n    });\n\n    PARENS(AST_BigInt, function(output) {\n        var p = output.parent();\n        if (p instanceof AST_PropAccess && p.expression === this) {\n            var value = this.getValue();\n            if (value.startsWith(\"-\")) {\n                return true;\n            }\n        }\n    });\n\n    PARENS([ AST_Assign, AST_Conditional ], function(output) {\n        var p = output.parent();\n        // !(a = false) → true\n        if (p instanceof AST_Unary)\n            return true;\n        // 1 + (a = 2) + 3 → 6, side effect setting a = 2\n        if (p instanceof AST_Binary && !(p instanceof AST_Assign))\n            return true;\n        // (a = func)() —or— new (a = Object)()\n        if (p instanceof AST_Call && p.expression === this)\n            return true;\n        // (a = foo) ? bar : baz\n        if (p instanceof AST_Conditional && p.condition === this)\n            return true;\n        // (a = foo)[\"prop\"] —or— (a = foo).prop\n        if (p instanceof AST_PropAccess && p.expression === this)\n            return true;\n        // ({a, b} = {a: 1, b: 2}), a destructuring assignment\n        if (this instanceof AST_Assign && this.left instanceof AST_Destructuring && this.left.is_array === false)\n            return true;\n    });\n\n    /* -----[ PRINTERS ]----- */\n\n    DEFPRINT(AST_Directive, function(self, output) {\n        output.print_string(self.value, self.quote);\n        output.semicolon();\n    });\n\n    DEFPRINT(AST_Expansion, function (self, output) {\n        output.print(\"...\");\n        self.expression.print(output);\n    });\n\n    DEFPRINT(AST_Destructuring, function (self, output) {\n        output.print(self.is_array ? \"[\" : \"{\");\n        var len = self.names.length;\n        self.names.forEach(function (name, i) {\n            if (i > 0) output.comma();\n            name.print(output);\n            // If the final element is a hole, we need to make sure it\n            // doesn't look like a trailing comma, by inserting an actual\n            // trailing comma.\n            if (i == len - 1 && name instanceof AST_Hole) output.comma();\n        });\n        output.print(self.is_array ? \"]\" : \"}\");\n    });\n\n    DEFPRINT(AST_Debugger, function(self, output) {\n        output.print(\"debugger\");\n        output.semicolon();\n    });\n\n    /* -----[ statements ]----- */\n\n    function display_body(body, is_toplevel, output, allow_directives) {\n        var last = body.length - 1;\n        output.in_directive = allow_directives;\n        body.forEach(function(stmt, i) {\n            if (output.in_directive === true && !(stmt instanceof AST_Directive ||\n                stmt instanceof AST_EmptyStatement ||\n                (stmt instanceof AST_SimpleStatement && stmt.body instanceof AST_String)\n            )) {\n                output.in_directive = false;\n            }\n            if (!(stmt instanceof AST_EmptyStatement)) {\n                output.indent();\n                stmt.print(output);\n                if (!(i == last && is_toplevel)) {\n                    output.newline();\n                    if (is_toplevel) output.newline();\n                }\n            }\n            if (output.in_directive === true &&\n                stmt instanceof AST_SimpleStatement &&\n                stmt.body instanceof AST_String\n            ) {\n                output.in_directive = false;\n            }\n        });\n        output.in_directive = false;\n    }\n\n    AST_StatementWithBody.DEFMETHOD(\"_do_print_body\", function(output) {\n        force_statement(this.body, output);\n    });\n\n    DEFPRINT(AST_Statement, function(self, output) {\n        self.body.print(output);\n        output.semicolon();\n    });\n    DEFPRINT(AST_Toplevel, function(self, output) {\n        display_body(self.body, true, output, true);\n        output.print(\"\");\n    });\n    DEFPRINT(AST_LabeledStatement, function(self, output) {\n        self.label.print(output);\n        output.colon();\n        self.body.print(output);\n    });\n    DEFPRINT(AST_SimpleStatement, function(self, output) {\n        self.body.print(output);\n        output.semicolon();\n    });\n    function print_braced_empty(self, output) {\n        output.print(\"{\");\n        output.with_indent(output.next_indent(), function() {\n            output.append_comments(self, true);\n        });\n        output.print(\"}\");\n    }\n    function print_braced(self, output, allow_directives) {\n        if (self.body.length > 0) {\n            output.with_block(function() {\n                display_body(self.body, false, output, allow_directives);\n            });\n        } else print_braced_empty(self, output);\n    }\n    DEFPRINT(AST_BlockStatement, function(self, output) {\n        print_braced(self, output);\n    });\n    DEFPRINT(AST_EmptyStatement, function(self, output) {\n        output.semicolon();\n    });\n    DEFPRINT(AST_Do, function(self, output) {\n        output.print(\"do\");\n        output.space();\n        make_block(self.body, output);\n        output.space();\n        output.print(\"while\");\n        output.space();\n        output.with_parens(function() {\n            self.condition.print(output);\n        });\n        output.semicolon();\n    });\n    DEFPRINT(AST_While, function(self, output) {\n        output.print(\"while\");\n        output.space();\n        output.with_parens(function() {\n            self.condition.print(output);\n        });\n        output.space();\n        self._do_print_body(output);\n    });\n    DEFPRINT(AST_For, function(self, output) {\n        output.print(\"for\");\n        output.space();\n        output.with_parens(function() {\n            if (self.init) {\n                if (self.init instanceof AST_Definitions) {\n                    self.init.print(output);\n                } else {\n                    parenthesize_for_noin(self.init, output, true);\n                }\n                output.print(\";\");\n                output.space();\n            } else {\n                output.print(\";\");\n            }\n            if (self.condition) {\n                self.condition.print(output);\n                output.print(\";\");\n                output.space();\n            } else {\n                output.print(\";\");\n            }\n            if (self.step) {\n                self.step.print(output);\n            }\n        });\n        output.space();\n        self._do_print_body(output);\n    });\n    DEFPRINT(AST_ForIn, function(self, output) {\n        output.print(\"for\");\n        if (self.await) {\n            output.space();\n            output.print(\"await\");\n        }\n        output.space();\n        output.with_parens(function() {\n            self.init.print(output);\n            output.space();\n            output.print(self instanceof AST_ForOf ? \"of\" : \"in\");\n            output.space();\n            self.object.print(output);\n        });\n        output.space();\n        self._do_print_body(output);\n    });\n    DEFPRINT(AST_With, function(self, output) {\n        output.print(\"with\");\n        output.space();\n        output.with_parens(function() {\n            self.expression.print(output);\n        });\n        output.space();\n        self._do_print_body(output);\n    });\n\n    /* -----[ functions ]----- */\n    AST_Lambda.DEFMETHOD(\"_do_print\", function(output, nokeyword) {\n        var self = this;\n        if (!nokeyword) {\n            if (self.async) {\n                output.print(\"async\");\n                output.space();\n            }\n            output.print(\"function\");\n            if (self.is_generator) {\n                output.star();\n            }\n            if (self.name) {\n                output.space();\n            }\n        }\n        if (self.name instanceof AST_Symbol) {\n            self.name.print(output);\n        } else if (nokeyword && self.name instanceof AST_Node) {\n            output.with_square(function() {\n                self.name.print(output); // Computed method name\n            });\n        }\n        output.with_parens(function() {\n            self.argnames.forEach(function(arg, i) {\n                if (i) output.comma();\n                arg.print(output);\n            });\n        });\n        output.space();\n        print_braced(self, output, true);\n    });\n    DEFPRINT(AST_Lambda, function(self, output) {\n        self._do_print(output);\n    });\n\n    DEFPRINT(AST_PrefixedTemplateString, function(self, output) {\n        var tag = self.prefix;\n        var parenthesize_tag = tag instanceof AST_Lambda\n            || tag instanceof AST_Binary\n            || tag instanceof AST_Conditional\n            || tag instanceof AST_Sequence\n            || tag instanceof AST_Unary\n            || tag instanceof AST_Dot && tag.expression instanceof AST_Object;\n        if (parenthesize_tag) output.print(\"(\");\n        self.prefix.print(output);\n        if (parenthesize_tag) output.print(\")\");\n        self.template_string.print(output);\n    });\n    DEFPRINT(AST_TemplateString, function(self, output) {\n        var is_tagged = output.parent() instanceof AST_PrefixedTemplateString;\n\n        output.print(\"`\");\n        for (var i = 0; i < self.segments.length; i++) {\n            if (!(self.segments[i] instanceof AST_TemplateSegment)) {\n                output.print(\"${\");\n                self.segments[i].print(output);\n                output.print(\"}\");\n            } else if (is_tagged) {\n                output.print(self.segments[i].raw);\n            } else {\n                output.print_template_string_chars(self.segments[i].value);\n            }\n        }\n        output.print(\"`\");\n    });\n\n    AST_Arrow.DEFMETHOD(\"_do_print\", function(output) {\n        var self = this;\n        var parent = output.parent();\n        var needs_parens = (parent instanceof AST_Binary && !(parent instanceof AST_Assign)) ||\n            parent instanceof AST_Unary ||\n            (parent instanceof AST_Call && self === parent.expression);\n        if (needs_parens) { output.print(\"(\"); }\n        if (self.async) {\n            output.print(\"async\");\n            output.space();\n        }\n        if (self.argnames.length === 1 && self.argnames[0] instanceof AST_Symbol) {\n            self.argnames[0].print(output);\n        } else {\n            output.with_parens(function() {\n                self.argnames.forEach(function(arg, i) {\n                    if (i) output.comma();\n                    arg.print(output);\n                });\n            });\n        }\n        output.space();\n        output.print(\"=>\");\n        output.space();\n        const first_statement = self.body[0];\n        if (\n            self.body.length === 1\n            && first_statement instanceof AST_Return\n        ) {\n            const returned = first_statement.value;\n            if (!returned) {\n                output.print(\"{}\");\n            } else if (left_is_object(returned)) {\n                output.print(\"(\");\n                returned.print(output);\n                output.print(\")\");\n            } else {\n                returned.print(output);\n            }\n        } else {\n            print_braced(self, output);\n        }\n        if (needs_parens) { output.print(\")\"); }\n    });\n\n    /* -----[ exits ]----- */\n    AST_Exit.DEFMETHOD(\"_do_print\", function(output, kind) {\n        output.print(kind);\n        if (this.value) {\n            output.space();\n            const comments = this.value.start.comments_before;\n            if (comments && comments.length && !output.printed_comments.has(comments)) {\n                output.print(\"(\");\n                this.value.print(output);\n                output.print(\")\");\n            } else {\n                this.value.print(output);\n            }\n        }\n        output.semicolon();\n    });\n    DEFPRINT(AST_Return, function(self, output) {\n        self._do_print(output, \"return\");\n    });\n    DEFPRINT(AST_Throw, function(self, output) {\n        self._do_print(output, \"throw\");\n    });\n\n    /* -----[ yield ]----- */\n\n    DEFPRINT(AST_Yield, function(self, output) {\n        var star = self.is_star ? \"*\" : \"\";\n        output.print(\"yield\" + star);\n        if (self.expression) {\n            output.space();\n            self.expression.print(output);\n        }\n    });\n\n    DEFPRINT(AST_Await, function(self, output) {\n        output.print(\"await\");\n        output.space();\n        var e = self.expression;\n        var parens = !(\n               e instanceof AST_Call\n            || e instanceof AST_SymbolRef\n            || e instanceof AST_PropAccess\n            || e instanceof AST_Unary\n            || e instanceof AST_Constant\n        );\n        if (parens) output.print(\"(\");\n        self.expression.print(output);\n        if (parens) output.print(\")\");\n    });\n\n    /* -----[ loop control ]----- */\n    AST_LoopControl.DEFMETHOD(\"_do_print\", function(output, kind) {\n        output.print(kind);\n        if (this.label) {\n            output.space();\n            this.label.print(output);\n        }\n        output.semicolon();\n    });\n    DEFPRINT(AST_Break, function(self, output) {\n        self._do_print(output, \"break\");\n    });\n    DEFPRINT(AST_Continue, function(self, output) {\n        self._do_print(output, \"continue\");\n    });\n\n    /* -----[ if ]----- */\n    function make_then(self, output) {\n        var b = self.body;\n        if (output.option(\"braces\")\n            || output.option(\"ie8\") && b instanceof AST_Do)\n            return make_block(b, output);\n        // The squeezer replaces \"block\"-s that contain only a single\n        // statement with the statement itself; technically, the AST\n        // is correct, but this can create problems when we output an\n        // IF having an ELSE clause where the THEN clause ends in an\n        // IF *without* an ELSE block (then the outer ELSE would refer\n        // to the inner IF).  This function checks for this case and\n        // adds the block braces if needed.\n        if (!b) return output.force_semicolon();\n        while (true) {\n            if (b instanceof AST_If) {\n                if (!b.alternative) {\n                    make_block(self.body, output);\n                    return;\n                }\n                b = b.alternative;\n            } else if (b instanceof AST_StatementWithBody) {\n                b = b.body;\n            } else break;\n        }\n        force_statement(self.body, output);\n    }\n    DEFPRINT(AST_If, function(self, output) {\n        output.print(\"if\");\n        output.space();\n        output.with_parens(function() {\n            self.condition.print(output);\n        });\n        output.space();\n        if (self.alternative) {\n            make_then(self, output);\n            output.space();\n            output.print(\"else\");\n            output.space();\n            if (self.alternative instanceof AST_If)\n                self.alternative.print(output);\n            else\n                force_statement(self.alternative, output);\n        } else {\n            self._do_print_body(output);\n        }\n    });\n\n    /* -----[ switch ]----- */\n    DEFPRINT(AST_Switch, function(self, output) {\n        output.print(\"switch\");\n        output.space();\n        output.with_parens(function() {\n            self.expression.print(output);\n        });\n        output.space();\n        var last = self.body.length - 1;\n        if (last < 0) print_braced_empty(self, output);\n        else output.with_block(function() {\n            self.body.forEach(function(branch, i) {\n                output.indent(true);\n                branch.print(output);\n                if (i < last && branch.body.length > 0)\n                    output.newline();\n            });\n        });\n    });\n    AST_SwitchBranch.DEFMETHOD(\"_do_print_body\", function(output) {\n        output.newline();\n        this.body.forEach(function(stmt) {\n            output.indent();\n            stmt.print(output);\n            output.newline();\n        });\n    });\n    DEFPRINT(AST_Default, function(self, output) {\n        output.print(\"default:\");\n        self._do_print_body(output);\n    });\n    DEFPRINT(AST_Case, function(self, output) {\n        output.print(\"case\");\n        output.space();\n        self.expression.print(output);\n        output.print(\":\");\n        self._do_print_body(output);\n    });\n\n    /* -----[ exceptions ]----- */\n    DEFPRINT(AST_Try, function(self, output) {\n        output.print(\"try\");\n        output.space();\n        print_braced(self, output);\n        if (self.bcatch) {\n            output.space();\n            self.bcatch.print(output);\n        }\n        if (self.bfinally) {\n            output.space();\n            self.bfinally.print(output);\n        }\n    });\n    DEFPRINT(AST_Catch, function(self, output) {\n        output.print(\"catch\");\n        if (self.argname) {\n            output.space();\n            output.with_parens(function() {\n                self.argname.print(output);\n            });\n        }\n        output.space();\n        print_braced(self, output);\n    });\n    DEFPRINT(AST_Finally, function(self, output) {\n        output.print(\"finally\");\n        output.space();\n        print_braced(self, output);\n    });\n\n    /* -----[ var/const ]----- */\n    AST_Definitions.DEFMETHOD(\"_do_print\", function(output, kind) {\n        output.print(kind);\n        output.space();\n        this.definitions.forEach(function(def, i) {\n            if (i) output.comma();\n            def.print(output);\n        });\n        var p = output.parent();\n        var in_for = p instanceof AST_For || p instanceof AST_ForIn;\n        var output_semicolon = !in_for || p && p.init !== this;\n        if (output_semicolon)\n            output.semicolon();\n    });\n    DEFPRINT(AST_Let, function(self, output) {\n        self._do_print(output, \"let\");\n    });\n    DEFPRINT(AST_Var, function(self, output) {\n        self._do_print(output, \"var\");\n    });\n    DEFPRINT(AST_Const, function(self, output) {\n        self._do_print(output, \"const\");\n    });\n    DEFPRINT(AST_Import, function(self, output) {\n        output.print(\"import\");\n        output.space();\n        if (self.imported_name) {\n            self.imported_name.print(output);\n        }\n        if (self.imported_name && self.imported_names) {\n            output.print(\",\");\n            output.space();\n        }\n        if (self.imported_names) {\n            if (self.imported_names.length === 1 && self.imported_names[0].foreign_name.name === \"*\") {\n                self.imported_names[0].print(output);\n            } else {\n                output.print(\"{\");\n                self.imported_names.forEach(function (name_import, i) {\n                    output.space();\n                    name_import.print(output);\n                    if (i < self.imported_names.length - 1) {\n                        output.print(\",\");\n                    }\n                });\n                output.space();\n                output.print(\"}\");\n            }\n        }\n        if (self.imported_name || self.imported_names) {\n            output.space();\n            output.print(\"from\");\n            output.space();\n        }\n        self.module_name.print(output);\n        output.semicolon();\n    });\n\n    DEFPRINT(AST_NameMapping, function(self, output) {\n        var is_import = output.parent() instanceof AST_Import;\n        var definition = self.name.definition();\n        var names_are_different =\n            (definition && definition.mangled_name || self.name.name) !==\n            self.foreign_name.name;\n        if (names_are_different) {\n            if (is_import) {\n                output.print(self.foreign_name.name);\n            } else {\n                self.name.print(output);\n            }\n            output.space();\n            output.print(\"as\");\n            output.space();\n            if (is_import) {\n                self.name.print(output);\n            } else {\n                output.print(self.foreign_name.name);\n            }\n        } else {\n            self.name.print(output);\n        }\n    });\n\n    DEFPRINT(AST_Export, function(self, output) {\n        output.print(\"export\");\n        output.space();\n        if (self.is_default) {\n            output.print(\"default\");\n            output.space();\n        }\n        if (self.exported_names) {\n            if (self.exported_names.length === 1 && self.exported_names[0].name.name === \"*\") {\n                self.exported_names[0].print(output);\n            } else {\n                output.print(\"{\");\n                self.exported_names.forEach(function(name_export, i) {\n                    output.space();\n                    name_export.print(output);\n                    if (i < self.exported_names.length - 1) {\n                        output.print(\",\");\n                    }\n                });\n                output.space();\n                output.print(\"}\");\n            }\n        } else if (self.exported_value) {\n            self.exported_value.print(output);\n        } else if (self.exported_definition) {\n            self.exported_definition.print(output);\n            if (self.exported_definition instanceof AST_Definitions) return;\n        }\n        if (self.module_name) {\n            output.space();\n            output.print(\"from\");\n            output.space();\n            self.module_name.print(output);\n        }\n        if (self.exported_value\n                && !(self.exported_value instanceof AST_Defun ||\n                    self.exported_value instanceof AST_Function ||\n                    self.exported_value instanceof AST_Class)\n            || self.module_name\n            || self.exported_names\n        ) {\n            output.semicolon();\n        }\n    });\n\n    function parenthesize_for_noin(node, output, noin) {\n        var parens = false;\n        // need to take some precautions here:\n        //    https://github.com/mishoo/UglifyJS2/issues/60\n        if (noin) {\n            parens = walk(node, node => {\n                if (node instanceof AST_Scope) return true;\n                if (node instanceof AST_Binary && node.operator == \"in\") {\n                    return walk_abort;  // makes walk() return true\n                }\n            });\n        }\n        node.print(output, parens);\n    }\n\n    DEFPRINT(AST_VarDef, function(self, output) {\n        self.name.print(output);\n        if (self.value) {\n            output.space();\n            output.print(\"=\");\n            output.space();\n            var p = output.parent(1);\n            var noin = p instanceof AST_For || p instanceof AST_ForIn;\n            parenthesize_for_noin(self.value, output, noin);\n        }\n    });\n\n    /* -----[ other expressions ]----- */\n    DEFPRINT(AST_Call, function(self, output) {\n        self.expression.print(output);\n        if (self instanceof AST_New && self.args.length === 0)\n            return;\n        if (self.expression instanceof AST_Call || self.expression instanceof AST_Lambda) {\n            output.add_mapping(self.start);\n        }\n        output.with_parens(function() {\n            self.args.forEach(function(expr, i) {\n                if (i) output.comma();\n                expr.print(output);\n            });\n        });\n    });\n    DEFPRINT(AST_New, function(self, output) {\n        output.print(\"new\");\n        output.space();\n        AST_Call.prototype._codegen(self, output);\n    });\n\n    AST_Sequence.DEFMETHOD(\"_do_print\", function(output) {\n        this.expressions.forEach(function(node, index) {\n            if (index > 0) {\n                output.comma();\n                if (output.should_break()) {\n                    output.newline();\n                    output.indent();\n                }\n            }\n            node.print(output);\n        });\n    });\n    DEFPRINT(AST_Sequence, function(self, output) {\n        self._do_print(output);\n        // var p = output.parent();\n        // if (p instanceof AST_Statement) {\n        //     output.with_indent(output.next_indent(), function(){\n        //         self._do_print(output);\n        //     });\n        // } else {\n        //     self._do_print(output);\n        // }\n    });\n    DEFPRINT(AST_Dot, function(self, output) {\n        var expr = self.expression;\n        expr.print(output);\n        var prop = self.property;\n        var print_computed = RESERVED_WORDS.has(prop)\n            ? output.option(\"ie8\")\n            : !is_identifier_string(prop, output.option(\"ecma\") >= 2015);\n        if (print_computed) {\n            output.print(\"[\");\n            output.add_mapping(self.end);\n            output.print_string(prop);\n            output.print(\"]\");\n        } else {\n            if (expr instanceof AST_Number && expr.getValue() >= 0) {\n                if (!/[xa-f.)]/i.test(output.last())) {\n                    output.print(\".\");\n                }\n            }\n            output.print(\".\");\n            // the name after dot would be mapped about here.\n            output.add_mapping(self.end);\n            output.print_name(prop);\n        }\n    });\n    DEFPRINT(AST_Sub, function(self, output) {\n        self.expression.print(output);\n        output.print(\"[\");\n        self.property.print(output);\n        output.print(\"]\");\n    });\n    DEFPRINT(AST_UnaryPrefix, function(self, output) {\n        var op = self.operator;\n        output.print(op);\n        if (/^[a-z]/i.test(op)\n            || (/[+-]$/.test(op)\n                && self.expression instanceof AST_UnaryPrefix\n                && /^[+-]/.test(self.expression.operator))) {\n            output.space();\n        }\n        self.expression.print(output);\n    });\n    DEFPRINT(AST_UnaryPostfix, function(self, output) {\n        self.expression.print(output);\n        output.print(self.operator);\n    });\n    DEFPRINT(AST_Binary, function(self, output) {\n        var op = self.operator;\n        self.left.print(output);\n        if (op[0] == \">\" /* \">>\" \">>>\" \">\" \">=\" */\n            && self.left instanceof AST_UnaryPostfix\n            && self.left.operator == \"--\") {\n            // space is mandatory to avoid outputting -->\n            output.print(\" \");\n        } else {\n            // the space is optional depending on \"beautify\"\n            output.space();\n        }\n        output.print(op);\n        if ((op == \"<\" || op == \"<<\")\n            && self.right instanceof AST_UnaryPrefix\n            && self.right.operator == \"!\"\n            && self.right.expression instanceof AST_UnaryPrefix\n            && self.right.expression.operator == \"--\") {\n            // space is mandatory to avoid outputting <!--\n            output.print(\" \");\n        } else {\n            // the space is optional depending on \"beautify\"\n            output.space();\n        }\n        self.right.print(output);\n    });\n    DEFPRINT(AST_Conditional, function(self, output) {\n        self.condition.print(output);\n        output.space();\n        output.print(\"?\");\n        output.space();\n        self.consequent.print(output);\n        output.space();\n        output.colon();\n        self.alternative.print(output);\n    });\n\n    /* -----[ literals ]----- */\n    DEFPRINT(AST_Array, function(self, output) {\n        output.with_square(function() {\n            var a = self.elements, len = a.length;\n            if (len > 0) output.space();\n            a.forEach(function(exp, i) {\n                if (i) output.comma();\n                exp.print(output);\n                // If the final element is a hole, we need to make sure it\n                // doesn't look like a trailing comma, by inserting an actual\n                // trailing comma.\n                if (i === len - 1 && exp instanceof AST_Hole)\n                  output.comma();\n            });\n            if (len > 0) output.space();\n        });\n    });\n    DEFPRINT(AST_Object, function(self, output) {\n        if (self.properties.length > 0) output.with_block(function() {\n            self.properties.forEach(function(prop, i) {\n                if (i) {\n                    output.print(\",\");\n                    output.newline();\n                }\n                output.indent();\n                prop.print(output);\n            });\n            output.newline();\n        });\n        else print_braced_empty(self, output);\n    });\n    DEFPRINT(AST_Class, function(self, output) {\n        output.print(\"class\");\n        output.space();\n        if (self.name) {\n            self.name.print(output);\n            output.space();\n        }\n        if (self.extends) {\n            var parens = (\n                   !(self.extends instanceof AST_SymbolRef)\n                && !(self.extends instanceof AST_PropAccess)\n                && !(self.extends instanceof AST_ClassExpression)\n                && !(self.extends instanceof AST_Function)\n            );\n            output.print(\"extends\");\n            if (parens) {\n                output.print(\"(\");\n            } else {\n                output.space();\n            }\n            self.extends.print(output);\n            if (parens) {\n                output.print(\")\");\n            } else {\n                output.space();\n            }\n        }\n        if (self.properties.length > 0) output.with_block(function() {\n            self.properties.forEach(function(prop, i) {\n                if (i) {\n                    output.newline();\n                }\n                output.indent();\n                prop.print(output);\n            });\n            output.newline();\n        });\n        else output.print(\"{}\");\n    });\n    DEFPRINT(AST_NewTarget, function(self, output) {\n        output.print(\"new.target\");\n    });\n\n    function print_property_name(key, quote, output) {\n        if (output.option(\"quote_keys\")) {\n            return output.print_string(key);\n        }\n        if (\"\" + +key == key && key >= 0) {\n            if (output.option(\"keep_numbers\")) {\n                return output.print(key);\n            }\n            return output.print(make_num(key));\n        }\n        var print_string = RESERVED_WORDS.has(key)\n            ? output.option(\"ie8\")\n            : (\n                output.option(\"ecma\") < 2015\n                    ? !is_basic_identifier_string(key)\n                    : !is_identifier_string(key, true)\n            );\n        if (print_string || (quote && output.option(\"keep_quoted_props\"))) {\n            return output.print_string(key, quote);\n        }\n        return output.print_name(key);\n    }\n\n    DEFPRINT(AST_ObjectKeyVal, function(self, output) {\n        function get_name(self) {\n            var def = self.definition();\n            return def ? def.mangled_name || def.name : self.name;\n        }\n\n        var allowShortHand = output.option(\"shorthand\");\n        if (allowShortHand &&\n            self.value instanceof AST_Symbol &&\n            is_identifier_string(self.key, output.option(\"ecma\") >= 2015) &&\n            get_name(self.value) === self.key &&\n            !RESERVED_WORDS.has(self.key)\n        ) {\n            print_property_name(self.key, self.quote, output);\n\n        } else if (allowShortHand &&\n            self.value instanceof AST_DefaultAssign &&\n            self.value.left instanceof AST_Symbol &&\n            is_identifier_string(self.key, output.option(\"ecma\") >= 2015) &&\n            get_name(self.value.left) === self.key\n        ) {\n            print_property_name(self.key, self.quote, output);\n            output.space();\n            output.print(\"=\");\n            output.space();\n            self.value.right.print(output);\n        } else {\n            if (!(self.key instanceof AST_Node)) {\n                print_property_name(self.key, self.quote, output);\n            } else {\n                output.with_square(function() {\n                    self.key.print(output);\n                });\n            }\n            output.colon();\n            self.value.print(output);\n        }\n    });\n    DEFPRINT(AST_ClassProperty, (self, output) => {\n        if (self.static) {\n            output.print(\"static\");\n            output.space();\n        }\n\n        if (self.key instanceof AST_SymbolClassProperty) {\n            print_property_name(self.key.name, self.quote, output);\n        } else {\n            output.print(\"[\");\n            self.key.print(output);\n            output.print(\"]\");\n        }\n\n        if (self.value) {\n            output.print(\"=\");\n            self.value.print(output);\n        }\n\n        output.semicolon();\n    });\n    AST_ObjectProperty.DEFMETHOD(\"_print_getter_setter\", function(type, output) {\n        var self = this;\n        if (self.static) {\n            output.print(\"static\");\n            output.space();\n        }\n        if (type) {\n            output.print(type);\n            output.space();\n        }\n        if (self.key instanceof AST_SymbolMethod) {\n            print_property_name(self.key.name, self.quote, output);\n        } else {\n            output.with_square(function() {\n                self.key.print(output);\n            });\n        }\n        self.value._do_print(output, true);\n    });\n    DEFPRINT(AST_ObjectSetter, function(self, output) {\n        self._print_getter_setter(\"set\", output);\n    });\n    DEFPRINT(AST_ObjectGetter, function(self, output) {\n        self._print_getter_setter(\"get\", output);\n    });\n    DEFPRINT(AST_ConciseMethod, function(self, output) {\n        var type;\n        if (self.is_generator && self.async) {\n            type = \"async*\";\n        } else if (self.is_generator) {\n            type = \"*\";\n        } else if (self.async) {\n            type = \"async\";\n        }\n        self._print_getter_setter(type, output);\n    });\n    AST_Symbol.DEFMETHOD(\"_do_print\", function(output) {\n        var def = this.definition();\n        output.print_name(def ? def.mangled_name || def.name : this.name);\n    });\n    DEFPRINT(AST_Symbol, function (self, output) {\n        self._do_print(output);\n    });\n    DEFPRINT(AST_Hole, noop);\n    DEFPRINT(AST_This, function(self, output) {\n        output.print(\"this\");\n    });\n    DEFPRINT(AST_Super, function(self, output) {\n        output.print(\"super\");\n    });\n    DEFPRINT(AST_Constant, function(self, output) {\n        output.print(self.getValue());\n    });\n    DEFPRINT(AST_String, function(self, output) {\n        output.print_string(self.getValue(), self.quote, output.in_directive);\n    });\n    DEFPRINT(AST_Number, function(self, output) {\n        if ((output.option(\"keep_numbers\") || output.use_asm) && self.start && self.start.raw != null) {\n            output.print(self.start.raw);\n        } else {\n            output.print(make_num(self.getValue()));\n        }\n    });\n    DEFPRINT(AST_BigInt, function(self, output) {\n        output.print(self.getValue() + \"n\");\n    });\n\n    const r_slash_script = /(<\\s*\\/\\s*script)/i;\n    const slash_script_replace = (_, $1) => $1.replace(\"/\", \"\\\\/\");\n    DEFPRINT(AST_RegExp, function(self, output) {\n        let { source, flags } = self.getValue();\n        source = regexp_source_fix(source);\n        flags = flags ? sort_regexp_flags(flags) : \"\";\n        source = source.replace(r_slash_script, slash_script_replace);\n        output.print(output.to_utf8(`/${source}/${flags}`));\n        const parent = output.parent();\n        if (\n            parent instanceof AST_Binary\n            && /^\\w/.test(parent.operator)\n            && parent.left === self\n        ) {\n            output.print(\" \");\n        }\n    });\n\n    function force_statement(stat, output) {\n        if (output.option(\"braces\")) {\n            make_block(stat, output);\n        } else {\n            if (!stat || stat instanceof AST_EmptyStatement)\n                output.force_semicolon();\n            else\n                stat.print(output);\n        }\n    }\n\n    function best_of(a) {\n        var best = a[0], len = best.length;\n        for (var i = 1; i < a.length; ++i) {\n            if (a[i].length < len) {\n                best = a[i];\n                len = best.length;\n            }\n        }\n        return best;\n    }\n\n    function make_num(num) {\n        var str = num.toString(10).replace(/^0\\./, \".\").replace(\"e+\", \"e\");\n        var candidates = [ str ];\n        if (Math.floor(num) === num) {\n            if (num < 0) {\n                candidates.push(\"-0x\" + (-num).toString(16).toLowerCase());\n            } else {\n                candidates.push(\"0x\" + num.toString(16).toLowerCase());\n            }\n        }\n        var match, len, digits;\n        if (match = /^\\.0+/.exec(str)) {\n            len = match[0].length;\n            digits = str.slice(len);\n            candidates.push(digits + \"e-\" + (digits.length + len - 1));\n        } else if (match = /0+$/.exec(str)) {\n            len = match[0].length;\n            candidates.push(str.slice(0, -len) + \"e\" + len);\n        } else if (match = /^(\\d)\\.(\\d+)e(-?\\d+)$/.exec(str)) {\n            candidates.push(match[1] + match[2] + \"e\" + (match[3] - match[2].length));\n        }\n        return best_of(candidates);\n    }\n\n    function make_block(stmt, output) {\n        if (!stmt || stmt instanceof AST_EmptyStatement)\n            output.print(\"{}\");\n        else if (stmt instanceof AST_BlockStatement)\n            stmt.print(output);\n        else output.with_block(function() {\n            output.indent();\n            stmt.print(output);\n            output.newline();\n        });\n    }\n\n    /* -----[ source map generators ]----- */\n\n    function DEFMAP(nodetype, generator) {\n        nodetype.forEach(function(nodetype) {\n            nodetype.DEFMETHOD(\"add_source_map\", generator);\n        });\n    }\n\n    DEFMAP([\n        // We could easily add info for ALL nodes, but it seems to me that\n        // would be quite wasteful, hence this noop in the base class.\n        AST_Node,\n        // since the label symbol will mark it\n        AST_LabeledStatement,\n        AST_Toplevel,\n    ], noop);\n\n    // XXX: I'm not exactly sure if we need it for all of these nodes,\n    // or if we should add even more.\n    DEFMAP([\n        AST_Array,\n        AST_BlockStatement,\n        AST_Catch,\n        AST_Class,\n        AST_Constant,\n        AST_Debugger,\n        AST_Definitions,\n        AST_Directive,\n        AST_Finally,\n        AST_Jump,\n        AST_Lambda,\n        AST_New,\n        AST_Object,\n        AST_StatementWithBody,\n        AST_Symbol,\n        AST_Switch,\n        AST_SwitchBranch,\n        AST_TemplateString,\n        AST_TemplateSegment,\n        AST_Try,\n    ], function(output) {\n        output.add_mapping(this.start);\n    });\n\n    DEFMAP([\n        AST_ObjectGetter,\n        AST_ObjectSetter,\n    ], function(output) {\n        output.add_mapping(this.start, this.key.name);\n    });\n\n    DEFMAP([ AST_ObjectProperty ], function(output) {\n        output.add_mapping(this.start, this.key);\n    });\n})();\n\nexport {\n    OutputStream,\n};\n","import {\n    AST_Array,\n    AST_Atom,\n    AST_Await,\n    AST_BigInt,\n    AST_Binary,\n    AST_Block,\n    AST_Call,\n    AST_Catch,\n    AST_Class,\n    AST_ClassProperty,\n    AST_ConciseMethod,\n    AST_Conditional,\n    AST_Debugger,\n    AST_Definitions,\n    AST_Destructuring,\n    AST_Directive,\n    AST_Do,\n    AST_Dot,\n    AST_EmptyStatement,\n    AST_Expansion,\n    AST_Export,\n    AST_Finally,\n    AST_For,\n    AST_ForIn,\n    AST_ForOf,\n    AST_If,\n    AST_Import,\n    AST_Jump,\n    AST_LabeledStatement,\n    AST_Lambda,\n    AST_LoopControl,\n    AST_NameMapping,\n    AST_NewTarget,\n    AST_Node,\n    AST_Number,\n    AST_Object,\n    AST_ObjectGetter,\n    AST_ObjectKeyVal,\n    AST_ObjectProperty,\n    AST_ObjectSetter,\n    AST_PrefixedTemplateString,\n    AST_PropAccess,\n    AST_RegExp,\n    AST_Sequence,\n    AST_SimpleStatement,\n    AST_String,\n    AST_Super,\n    AST_Switch,\n    AST_SwitchBranch,\n    AST_Symbol,\n    AST_TemplateSegment,\n    AST_TemplateString,\n    AST_This,\n    AST_Toplevel,\n    AST_Try,\n    AST_Unary,\n    AST_VarDef,\n    AST_While,\n    AST_With,\n    AST_Yield\n} from \"./ast.js\";\n\nconst shallow_cmp = (node1, node2) => {\n    return (\n        node1 === null && node2 === null\n        || node1.TYPE === node2.TYPE && node1.shallow_cmp(node2)\n    );\n};\n\nexport const equivalent_to = (tree1, tree2) => {\n    if (!shallow_cmp(tree1, tree2)) return false;\n    const walk_1_state = [tree1];\n    const walk_2_state = [tree2];\n\n    const walk_1_push = walk_1_state.push.bind(walk_1_state);\n    const walk_2_push = walk_2_state.push.bind(walk_2_state);\n\n    while (walk_1_state.length && walk_2_state.length) {\n        const node_1 = walk_1_state.pop();\n        const node_2 = walk_2_state.pop();\n\n        if (!shallow_cmp(node_1, node_2)) return false;\n\n        node_1._children_backwards(walk_1_push);\n        node_2._children_backwards(walk_2_push);\n\n        if (walk_1_state.length !== walk_2_state.length) {\n            // Different number of children\n            return false;\n        }\n    }\n\n    return walk_1_state.length == 0 && walk_2_state.length == 0;\n};\n\n// Creates a shallow compare function\nconst mkshallow = (props) => {\n    const comparisons = Object\n        .keys(props)\n        .map(key => {\n            if (props[key] === \"eq\") {\n                return `this.${key} === other.${key}`;\n            } else if (props[key] === \"exist\") {\n                return `(this.${key} == null ? other.${key} == null : this.${key} === other.${key})`;\n            } else {\n                throw new Error(`mkshallow: Unexpected instruction: ${props[key]}`);\n            }\n        })\n        .join(\" && \");\n\n    return new Function(\"other\", \"return \" + comparisons);\n};\n\nconst pass_through = () => true;\n\nAST_Node.prototype.shallow_cmp = function () {\n    throw new Error(\"did not find a shallow_cmp function for \" + this.constructor.name);\n};\n\nAST_Debugger.prototype.shallow_cmp = pass_through;\n\nAST_Directive.prototype.shallow_cmp = mkshallow({ value: \"eq\" });\n\nAST_SimpleStatement.prototype.shallow_cmp = pass_through;\n\nAST_Block.prototype.shallow_cmp = pass_through;\n\nAST_EmptyStatement.prototype.shallow_cmp = pass_through;\n\nAST_LabeledStatement.prototype.shallow_cmp = mkshallow({ \"label.name\": \"eq\" });\n\nAST_Do.prototype.shallow_cmp = pass_through;\n\nAST_While.prototype.shallow_cmp = pass_through;\n\nAST_For.prototype.shallow_cmp = mkshallow({\n    init: \"exist\",\n    condition: \"exist\",\n    step: \"exist\"\n});\n\nAST_ForIn.prototype.shallow_cmp = pass_through;\n\nAST_ForOf.prototype.shallow_cmp = pass_through;\n\nAST_With.prototype.shallow_cmp = pass_through;\n\nAST_Toplevel.prototype.shallow_cmp = pass_through;\n\nAST_Expansion.prototype.shallow_cmp = pass_through;\n\nAST_Lambda.prototype.shallow_cmp = mkshallow({\n    is_generator: \"eq\",\n    async: \"eq\"\n});\n\nAST_Destructuring.prototype.shallow_cmp = mkshallow({\n    is_array: \"eq\"\n});\n\nAST_PrefixedTemplateString.prototype.shallow_cmp = pass_through;\n\nAST_TemplateString.prototype.shallow_cmp = pass_through;\n\nAST_TemplateSegment.prototype.shallow_cmp = mkshallow({\n    \"value\": \"eq\"\n});\n\nAST_Jump.prototype.shallow_cmp = pass_through;\n\nAST_LoopControl.prototype.shallow_cmp = pass_through;\n\nAST_Await.prototype.shallow_cmp = pass_through;\n\nAST_Yield.prototype.shallow_cmp = mkshallow({\n    is_star: \"eq\"\n});\n\nAST_If.prototype.shallow_cmp = mkshallow({\n    alternative: \"exist\"\n});\n\nAST_Switch.prototype.shallow_cmp = pass_through;\n\nAST_SwitchBranch.prototype.shallow_cmp = pass_through;\n\nAST_Try.prototype.shallow_cmp = mkshallow({\n    bcatch: \"exist\",\n    bfinally: \"exist\"\n});\n\nAST_Catch.prototype.shallow_cmp = mkshallow({\n    argname: \"exist\"\n});\n\nAST_Finally.prototype.shallow_cmp = pass_through;\n\nAST_Definitions.prototype.shallow_cmp = pass_through;\n\nAST_VarDef.prototype.shallow_cmp = mkshallow({\n    value: \"exist\"\n});\n\nAST_NameMapping.prototype.shallow_cmp = pass_through;\n\nAST_Import.prototype.shallow_cmp = mkshallow({\n    imported_name: \"exist\",\n    imported_names: \"exist\"\n});\n\nAST_Export.prototype.shallow_cmp = mkshallow({\n    exported_definition: \"exist\",\n    exported_value: \"exist\",\n    exported_names: \"exist\",\n    module_name: \"eq\",\n    is_default: \"eq\",\n});\n\nAST_Call.prototype.shallow_cmp = pass_through;\n\nAST_Sequence.prototype.shallow_cmp = pass_through;\n\nAST_PropAccess.prototype.shallow_cmp = pass_through;\n\nAST_Dot.prototype.shallow_cmp = mkshallow({\n    property: \"eq\"\n});\n\nAST_Unary.prototype.shallow_cmp = mkshallow({\n    operator: \"eq\"\n});\n\nAST_Binary.prototype.shallow_cmp = mkshallow({\n    operator: \"eq\"\n});\n\nAST_Conditional.prototype.shallow_cmp = pass_through;\n\nAST_Array.prototype.shallow_cmp = pass_through;\n\nAST_Object.prototype.shallow_cmp = pass_through;\n\nAST_ObjectProperty.prototype.shallow_cmp = pass_through;\n\nAST_ObjectKeyVal.prototype.shallow_cmp = mkshallow({\n    key: \"eq\"\n});\n\nAST_ObjectSetter.prototype.shallow_cmp = mkshallow({\n    static: \"eq\"\n});\n\nAST_ObjectGetter.prototype.shallow_cmp = mkshallow({\n    static: \"eq\"\n});\n\nAST_ConciseMethod.prototype.shallow_cmp = mkshallow({\n    static: \"eq\",\n    is_generator: \"eq\",\n    async: \"eq\",\n});\n\nAST_Class.prototype.shallow_cmp = mkshallow({\n    name: \"exist\",\n    extends: \"exist\",\n});\n\nAST_ClassProperty.prototype.shallow_cmp = mkshallow({\n    static: \"eq\"\n});\n\nAST_Symbol.prototype.shallow_cmp = mkshallow({\n    name: \"eq\"\n});\n\nAST_NewTarget.prototype.shallow_cmp = pass_through;\n\nAST_This.prototype.shallow_cmp = pass_through;\n\nAST_Super.prototype.shallow_cmp = pass_through;\n\nAST_String.prototype.shallow_cmp = mkshallow({\n    value: \"eq\"\n});\n\nAST_Number.prototype.shallow_cmp = mkshallow({\n    value: \"eq\"\n});\n\nAST_BigInt.prototype.shallow_cmp = mkshallow({\n    value: \"eq\"\n});\n\nAST_RegExp.prototype.shallow_cmp = function (other) {\n    return (\n        this.value.flags === other.value.flags\n        && this.value.source === other.value.source\n    );\n};\n\nAST_Atom.prototype.shallow_cmp = pass_through;\n","/***********************************************************************\n\n  A JavaScript tokenizer / parser / beautifier / compressor.\n  https://github.com/mishoo/UglifyJS2\n\n  -------------------------------- (C) ---------------------------------\n\n                           Author: Mihai Bazon\n                         <mihai.bazon@gmail.com>\n                       http://mihai.bazon.net/blog\n\n  Distributed under the BSD license:\n\n    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n        * Redistributions of source code must retain the above\n          copyright notice, this list of conditions and the following\n          disclaimer.\n\n        * Redistributions in binary form must reproduce the above\n          copyright notice, this list of conditions and the following\n          disclaimer in the documentation and/or other materials\n          provided with the distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n\n ***********************************************************************/\n\n\"use strict\";\n\nimport {\n    defaults,\n    keep_name,\n    mergeSort,\n    push_uniq,\n    return_false,\n    return_this,\n    return_true,\n    string_template,\n} from \"./utils/index.js\";\nimport {\n    AST_Arrow,\n    AST_Block,\n    AST_Call,\n    AST_Catch,\n    AST_Class,\n    AST_Conditional,\n    AST_DefClass,\n    AST_Defun,\n    AST_Destructuring,\n    AST_Dot,\n    AST_Export,\n    AST_For,\n    AST_ForIn,\n    AST_Function,\n    AST_Import,\n    AST_IterationStatement,\n    AST_Label,\n    AST_LabeledStatement,\n    AST_LabelRef,\n    AST_Lambda,\n    AST_LoopControl,\n    AST_NameMapping,\n    AST_Node,\n    AST_Scope,\n    AST_Sequence,\n    AST_String,\n    AST_Sub,\n    AST_Switch,\n    AST_SwitchBranch,\n    AST_Symbol,\n    AST_SymbolBlockDeclaration,\n    AST_SymbolCatch,\n    AST_SymbolClass,\n    AST_SymbolConst,\n    AST_SymbolDefClass,\n    AST_SymbolDefun,\n    AST_SymbolExport,\n    AST_SymbolFunarg,\n    AST_SymbolImport,\n    AST_SymbolLambda,\n    AST_SymbolLet,\n    AST_SymbolMethod,\n    AST_SymbolRef,\n    AST_SymbolVar,\n    AST_Toplevel,\n    AST_VarDef,\n    AST_With,\n    TreeWalker,\n    walk\n} from \"./ast.js\";\nimport {\n    RESERVED_WORDS,\n    js_error,\n} from \"./parse.js\";\n\nconst MASK_EXPORT_DONT_MANGLE = 1 << 0;\nconst MASK_EXPORT_WANT_MANGLE = 1 << 1;\n\nlet function_defs = null;\nlet unmangleable_names = null;\n\nclass SymbolDef {\n    constructor(scope, orig, init) {\n        this.name = orig.name;\n        this.orig = [ orig ];\n        this.init = init;\n        this.eliminated = 0;\n        this.assignments = 0;\n        this.scope = scope;\n        this.replaced = 0;\n        this.global = false;\n        this.export = 0;\n        this.mangled_name = null;\n        this.undeclared = false;\n        this.id = SymbolDef.next_id++;\n        this.chained = false;\n        this.direct_access = false;\n        this.escaped = 0;\n        this.recursive_refs = 0;\n        this.references = [];\n        this.should_replace = undefined;\n        this.single_use = false;\n        this.fixed = false;\n        Object.seal(this);\n    }\n    fixed_value() {\n        if (!this.fixed || this.fixed instanceof AST_Node) return this.fixed;\n        return this.fixed();\n    }\n    unmangleable(options) {\n        if (!options) options = {};\n\n        if (\n            function_defs &&\n            function_defs.has(this.id) &&\n            keep_name(options.keep_fnames, this.orig[0].name)\n        ) return true;\n\n        return this.global && !options.toplevel\n            || (this.export & MASK_EXPORT_DONT_MANGLE)\n            || this.undeclared\n            || !options.eval && this.scope.pinned()\n            || (this.orig[0] instanceof AST_SymbolLambda\n                  || this.orig[0] instanceof AST_SymbolDefun) && keep_name(options.keep_fnames, this.orig[0].name)\n            || this.orig[0] instanceof AST_SymbolMethod\n            || (this.orig[0] instanceof AST_SymbolClass\n                  || this.orig[0] instanceof AST_SymbolDefClass) && keep_name(options.keep_classnames, this.orig[0].name);\n    }\n    mangle(options) {\n        const cache = options.cache && options.cache.props;\n        if (this.global && cache && cache.has(this.name)) {\n            this.mangled_name = cache.get(this.name);\n        } else if (!this.mangled_name && !this.unmangleable(options)) {\n            var s = this.scope;\n            var sym = this.orig[0];\n            if (options.ie8 && sym instanceof AST_SymbolLambda)\n                s = s.parent_scope;\n            const redefinition = redefined_catch_def(this);\n            this.mangled_name = redefinition\n                ? redefinition.mangled_name || redefinition.name\n                : s.next_mangled(options, this);\n            if (this.global && cache) {\n                cache.set(this.name, this.mangled_name);\n            }\n        }\n    }\n}\n\nSymbolDef.next_id = 1;\n\nfunction redefined_catch_def(def) {\n    if (def.orig[0] instanceof AST_SymbolCatch\n        && def.scope.is_block_scope()\n    ) {\n        return def.scope.get_defun_scope().variables.get(def.name);\n    }\n}\n\nAST_Scope.DEFMETHOD(\"figure_out_scope\", function(options, { parent_scope = null, toplevel = this } = {}) {\n    options = defaults(options, {\n        cache: null,\n        ie8: false,\n        safari10: false,\n    });\n\n    if (!(toplevel instanceof AST_Toplevel)) {\n        throw new Error(\"Invalid toplevel scope\");\n    }\n\n    // pass 1: setup scope chaining and handle definitions\n    var scope = this.parent_scope = parent_scope;\n    var labels = new Map();\n    var defun = null;\n    var in_destructuring = null;\n    var for_scopes = [];\n    var tw = new TreeWalker((node, descend) => {\n        if (node.is_block_scope()) {\n            const save_scope = scope;\n            node.block_scope = scope = new AST_Scope(node);\n            scope._block_scope = true;\n            // AST_Try in the AST sadly *is* (not has) a body itself,\n            // and its catch and finally branches are children of the AST_Try itself\n            const parent_scope = node instanceof AST_Catch\n                ? save_scope.parent_scope\n                : save_scope;\n            scope.init_scope_vars(parent_scope);\n            scope.uses_with = save_scope.uses_with;\n            scope.uses_eval = save_scope.uses_eval;\n            if (options.safari10) {\n                if (node instanceof AST_For || node instanceof AST_ForIn) {\n                    for_scopes.push(scope);\n                }\n            }\n\n            if (node instanceof AST_Switch) {\n                // XXX: HACK! Ensure the switch expression gets the correct scope (the parent scope) and the body gets the contained scope\n                // AST_Switch has a scope within the body, but it itself \"is a block scope\"\n                // This means the switched expression has to belong to the outer scope\n                // while the body inside belongs to the switch itself.\n                // This is pretty nasty and warrants an AST change similar to AST_Try (read above)\n                const the_block_scope = scope;\n                scope = save_scope;\n                node.expression.walk(tw);\n                scope = the_block_scope;\n                for (let i = 0; i < node.body.length; i++) {\n                    node.body[i].walk(tw);\n                }\n            } else {\n                descend();\n            }\n            scope = save_scope;\n            return true;\n        }\n        if (node instanceof AST_Destructuring) {\n            const save_destructuring = in_destructuring;\n            in_destructuring = node;\n            descend();\n            in_destructuring = save_destructuring;\n            return true;\n        }\n        if (node instanceof AST_Scope) {\n            node.init_scope_vars(scope);\n            var save_scope = scope;\n            var save_defun = defun;\n            var save_labels = labels;\n            defun = scope = node;\n            labels = new Map();\n            descend();\n            scope = save_scope;\n            defun = save_defun;\n            labels = save_labels;\n            return true;        // don't descend again in TreeWalker\n        }\n        if (node instanceof AST_LabeledStatement) {\n            var l = node.label;\n            if (labels.has(l.name)) {\n                throw new Error(string_template(\"Label {name} defined twice\", l));\n            }\n            labels.set(l.name, l);\n            descend();\n            labels.delete(l.name);\n            return true;        // no descend again\n        }\n        if (node instanceof AST_With) {\n            for (var s = scope; s; s = s.parent_scope)\n                s.uses_with = true;\n            return;\n        }\n        if (node instanceof AST_Symbol) {\n            node.scope = scope;\n        }\n        if (node instanceof AST_Label) {\n            node.thedef = node;\n            node.references = [];\n        }\n        if (node instanceof AST_SymbolLambda) {\n            defun.def_function(node, node.name == \"arguments\" ? undefined : defun);\n        } else if (node instanceof AST_SymbolDefun) {\n            // Careful here, the scope where this should be defined is\n            // the parent scope.  The reason is that we enter a new\n            // scope when we encounter the AST_Defun node (which is\n            // instanceof AST_Scope) but we get to the symbol a bit\n            // later.\n            mark_export((node.scope = defun.parent_scope.get_defun_scope()).def_function(node, defun), 1);\n        } else if (node instanceof AST_SymbolClass) {\n            mark_export(defun.def_variable(node, defun), 1);\n        } else if (node instanceof AST_SymbolImport) {\n            scope.def_variable(node);\n        } else if (node instanceof AST_SymbolDefClass) {\n            // This deals with the name of the class being available\n            // inside the class.\n            mark_export((node.scope = defun.parent_scope).def_function(node, defun), 1);\n        } else if (\n            node instanceof AST_SymbolVar\n            || node instanceof AST_SymbolLet\n            || node instanceof AST_SymbolConst\n            || node instanceof AST_SymbolCatch\n        ) {\n            var def;\n            if (node instanceof AST_SymbolBlockDeclaration) {\n                def = scope.def_variable(node, null);\n            } else {\n                def = defun.def_variable(node, node.TYPE == \"SymbolVar\" ? null : undefined);\n            }\n            if (!def.orig.every((sym) => {\n                if (sym === node) return true;\n                if (node instanceof AST_SymbolBlockDeclaration) {\n                    return sym instanceof AST_SymbolLambda;\n                }\n                return !(sym instanceof AST_SymbolLet || sym instanceof AST_SymbolConst);\n            })) {\n                js_error(\n                    `\"${node.name}\" is redeclared`,\n                    node.start.file,\n                    node.start.line,\n                    node.start.col,\n                    node.start.pos\n                );\n            }\n            if (!(node instanceof AST_SymbolFunarg)) mark_export(def, 2);\n            if (defun !== scope) {\n                node.mark_enclosed();\n                var def = scope.find_variable(node);\n                if (node.thedef !== def) {\n                    node.thedef = def;\n                    node.reference();\n                }\n            }\n        } else if (node instanceof AST_LabelRef) {\n            var sym = labels.get(node.name);\n            if (!sym) throw new Error(string_template(\"Undefined label {name} [{line},{col}]\", {\n                name: node.name,\n                line: node.start.line,\n                col: node.start.col\n            }));\n            node.thedef = sym;\n        }\n        if (!(scope instanceof AST_Toplevel) && (node instanceof AST_Export || node instanceof AST_Import)) {\n            js_error(\n                `\"${node.TYPE}\" statement may only appear at the top level`,\n                node.start.file,\n                node.start.line,\n                node.start.col,\n                node.start.pos\n            );\n        }\n    });\n    this.walk(tw);\n\n    function mark_export(def, level) {\n        if (in_destructuring) {\n            var i = 0;\n            do {\n                level++;\n            } while (tw.parent(i++) !== in_destructuring);\n        }\n        var node = tw.parent(level);\n        if (def.export = node instanceof AST_Export ? MASK_EXPORT_DONT_MANGLE : 0) {\n            var exported = node.exported_definition;\n            if ((exported instanceof AST_Defun || exported instanceof AST_DefClass) && node.is_default) {\n                def.export = MASK_EXPORT_WANT_MANGLE;\n            }\n        }\n    }\n\n    // pass 2: find back references and eval\n    const is_toplevel = this instanceof AST_Toplevel;\n    if (is_toplevel) {\n        this.globals = new Map();\n    }\n\n    var tw = new TreeWalker(node => {\n        if (node instanceof AST_LoopControl && node.label) {\n            node.label.thedef.references.push(node);\n            return true;\n        }\n        if (node instanceof AST_SymbolRef) {\n            var name = node.name;\n            if (name == \"eval\" && tw.parent() instanceof AST_Call) {\n                for (var s = node.scope; s && !s.uses_eval; s = s.parent_scope) {\n                    s.uses_eval = true;\n                }\n            }\n            var sym;\n            if (tw.parent() instanceof AST_NameMapping && tw.parent(1).module_name\n                || !(sym = node.scope.find_variable(name))) {\n\n                sym = toplevel.def_global(node);\n                if (node instanceof AST_SymbolExport) sym.export = MASK_EXPORT_DONT_MANGLE;\n            } else if (sym.scope instanceof AST_Lambda && name == \"arguments\") {\n                sym.scope.uses_arguments = true;\n            }\n            node.thedef = sym;\n            node.reference();\n            if (node.scope.is_block_scope()\n                && !(sym.orig[0] instanceof AST_SymbolBlockDeclaration)) {\n                node.scope = node.scope.get_defun_scope();\n            }\n            return true;\n        }\n        // ensure mangling works if catch reuses a scope variable\n        var def;\n        if (node instanceof AST_SymbolCatch && (def = redefined_catch_def(node.definition()))) {\n            var s = node.scope;\n            while (s) {\n                push_uniq(s.enclosed, def);\n                if (s === def.scope) break;\n                s = s.parent_scope;\n            }\n        }\n    });\n    this.walk(tw);\n\n    // pass 3: work around IE8 and Safari catch scope bugs\n    if (options.ie8 || options.safari10) {\n        walk(this, node => {\n            if (node instanceof AST_SymbolCatch) {\n                var name = node.name;\n                var refs = node.thedef.references;\n                var scope = node.scope.get_defun_scope();\n                var def = scope.find_variable(name)\n                    || toplevel.globals.get(name)\n                    || scope.def_variable(node);\n                refs.forEach(function(ref) {\n                    ref.thedef = def;\n                    ref.reference();\n                });\n                node.thedef = def;\n                node.reference();\n                return true;\n            }\n        });\n    }\n\n    // pass 4: add symbol definitions to loop scopes\n    // Safari/Webkit bug workaround - loop init let variable shadowing argument.\n    // https://github.com/mishoo/UglifyJS2/issues/1753\n    // https://bugs.webkit.org/show_bug.cgi?id=171041\n    if (options.safari10) {\n        for (const scope of for_scopes) {\n            scope.parent_scope.variables.forEach(function(def) {\n                push_uniq(scope.enclosed, def);\n            });\n        }\n    }\n});\n\nAST_Toplevel.DEFMETHOD(\"def_global\", function(node) {\n    var globals = this.globals, name = node.name;\n    if (globals.has(name)) {\n        return globals.get(name);\n    } else {\n        var g = new SymbolDef(this, node);\n        g.undeclared = true;\n        g.global = true;\n        globals.set(name, g);\n        return g;\n    }\n});\n\nAST_Scope.DEFMETHOD(\"init_scope_vars\", function(parent_scope) {\n    this.variables = new Map();         // map name to AST_SymbolVar (variables defined in this scope; includes functions)\n    this.functions = new Map();         // map name to AST_SymbolDefun (functions defined in this scope)\n    this.uses_with = false;             // will be set to true if this or some nested scope uses the `with` statement\n    this.uses_eval = false;             // will be set to true if this or nested scope uses the global `eval`\n    this.parent_scope = parent_scope;   // the parent scope\n    this.enclosed = [];                 // a list of variables from this or outer scope(s) that are referenced from this or inner scopes\n    this.cname = -1;                    // the current index for mangling functions/variables\n    this._var_name_cache = null;\n});\n\nAST_Scope.DEFMETHOD(\"var_names\", function varNames() {\n    var var_names = this._var_name_cache;\n    if (!var_names) {\n        this._var_name_cache = var_names = new Set(\n            this.parent_scope ? varNames.call(this.parent_scope) : null\n        );\n        if (this._added_var_names) {\n            this._added_var_names.forEach(name => { var_names.add(name); });\n        }\n        this.enclosed.forEach(function(def) {\n            var_names.add(def.name);\n        });\n        this.variables.forEach(function(def, name) {\n            var_names.add(name);\n        });\n    }\n    return var_names;\n});\n\nAST_Scope.DEFMETHOD(\"add_var_name\", function (name) {\n    // TODO change enclosed too\n    if (!this._added_var_names) {\n        // TODO stop adding var names entirely\n        this._added_var_names = new Set();\n    }\n    this._added_var_names.add(name);\n    if (!this._var_name_cache) this.var_names();  // regen cache\n    this._var_name_cache.add(name);\n});\n\n// TODO create function that asks if we can inline\n\nAST_Scope.DEFMETHOD(\"add_child_scope\", function (scope) {\n    // `scope` is going to be moved into wherever the compressor is\n    // right now. Update the required scopes' information\n\n    if (scope.parent_scope === this) return;\n\n    scope.parent_scope = this;\n    scope._var_name_cache = null;\n    if (scope._added_var_names) {\n        scope._added_var_names.forEach(name => scope.add_var_name(name));\n    }\n\n    // TODO uses_with, uses_eval, etc\n\n    const new_scope_enclosed_set = new Set(scope.enclosed);\n    const scope_ancestry = (() => {\n        const ancestry = [];\n        let cur = this;\n        do {\n            ancestry.push(cur);\n        } while ((cur = cur.parent_scope));\n        ancestry.reverse();\n        return ancestry;\n    })();\n\n    const to_enclose = [];\n    for (const scope_topdown of scope_ancestry) {\n        to_enclose.forEach(e => push_uniq(scope_topdown.enclosed, e));\n        for (const def of scope_topdown.variables.values()) {\n            if (new_scope_enclosed_set.has(def)) {\n                push_uniq(to_enclose, def);\n                push_uniq(scope_topdown.enclosed, def);\n            }\n        }\n    }\n});\n\nAST_Node.DEFMETHOD(\"is_block_scope\", return_false);\nAST_Class.DEFMETHOD(\"is_block_scope\", return_false);\nAST_Lambda.DEFMETHOD(\"is_block_scope\", return_false);\nAST_Toplevel.DEFMETHOD(\"is_block_scope\", return_false);\nAST_SwitchBranch.DEFMETHOD(\"is_block_scope\", return_false);\nAST_Block.DEFMETHOD(\"is_block_scope\", return_true);\nAST_Scope.DEFMETHOD(\"is_block_scope\", function () {\n    return this._block_scope || false;\n});\nAST_IterationStatement.DEFMETHOD(\"is_block_scope\", return_true);\n\nAST_Lambda.DEFMETHOD(\"init_scope_vars\", function() {\n    AST_Scope.prototype.init_scope_vars.apply(this, arguments);\n    this.uses_arguments = false;\n    this.def_variable(new AST_SymbolFunarg({\n        name: \"arguments\",\n        start: this.start,\n        end: this.end\n    }));\n});\n\nAST_Arrow.DEFMETHOD(\"init_scope_vars\", function() {\n    AST_Scope.prototype.init_scope_vars.apply(this, arguments);\n    this.uses_arguments = false;\n});\n\nAST_Symbol.DEFMETHOD(\"mark_enclosed\", function() {\n    var def = this.definition();\n    var s = this.scope;\n    while (s) {\n        push_uniq(s.enclosed, def);\n        if (s === def.scope) break;\n        s = s.parent_scope;\n    }\n});\n\nAST_Symbol.DEFMETHOD(\"reference\", function() {\n    this.definition().references.push(this);\n    this.mark_enclosed();\n});\n\nAST_Scope.DEFMETHOD(\"find_variable\", function(name) {\n    if (name instanceof AST_Symbol) name = name.name;\n    return this.variables.get(name)\n        || (this.parent_scope && this.parent_scope.find_variable(name));\n});\n\nAST_Scope.DEFMETHOD(\"def_function\", function(symbol, init) {\n    var def = this.def_variable(symbol, init);\n    if (!def.init || def.init instanceof AST_Defun) def.init = init;\n    this.functions.set(symbol.name, def);\n    return def;\n});\n\nAST_Scope.DEFMETHOD(\"def_variable\", function(symbol, init) {\n    var def = this.variables.get(symbol.name);\n    if (def) {\n        def.orig.push(symbol);\n        if (def.init && (def.scope !== symbol.scope || def.init instanceof AST_Function)) {\n            def.init = init;\n        }\n    } else {\n        def = new SymbolDef(this, symbol, init);\n        this.variables.set(symbol.name, def);\n        def.global = !this.parent_scope;\n    }\n    return symbol.thedef = def;\n});\n\nfunction next_mangled(scope, options) {\n    var ext = scope.enclosed;\n    out: while (true) {\n        var m = base54(++scope.cname);\n        if (RESERVED_WORDS.has(m)) continue; // skip over \"do\"\n\n        // https://github.com/mishoo/UglifyJS2/issues/242 -- do not\n        // shadow a name reserved from mangling.\n        if (options.reserved.has(m)) continue;\n\n        // Functions with short names might collide with base54 output\n        // and therefore cause collisions when keep_fnames is true.\n        if (unmangleable_names && unmangleable_names.has(m)) continue out;\n\n        // we must ensure that the mangled name does not shadow a name\n        // from some parent scope that is referenced in this or in\n        // inner scopes.\n        for (let i = ext.length; --i >= 0;) {\n            const def = ext[i];\n            const name = def.mangled_name || (def.unmangleable(options) && def.name);\n            if (m == name) continue out;\n        }\n        return m;\n    }\n}\n\nAST_Scope.DEFMETHOD(\"next_mangled\", function(options) {\n    return next_mangled(this, options);\n});\n\nAST_Toplevel.DEFMETHOD(\"next_mangled\", function(options) {\n    let name;\n    const mangled_names = this.mangled_names;\n    do {\n        name = next_mangled(this, options);\n    } while (mangled_names.has(name));\n    return name;\n});\n\nAST_Function.DEFMETHOD(\"next_mangled\", function(options, def) {\n    // #179, #326\n    // in Safari strict mode, something like (function x(x){...}) is a syntax error;\n    // a function expression's argument cannot shadow the function expression's name\n\n    var tricky_def = def.orig[0] instanceof AST_SymbolFunarg && this.name && this.name.definition();\n\n    // the function's mangled_name is null when keep_fnames is true\n    var tricky_name = tricky_def ? tricky_def.mangled_name || tricky_def.name : null;\n\n    while (true) {\n        var name = next_mangled(this, options);\n        if (!tricky_name || tricky_name != name)\n            return name;\n    }\n});\n\nAST_Symbol.DEFMETHOD(\"unmangleable\", function(options) {\n    var def = this.definition();\n    return !def || def.unmangleable(options);\n});\n\n// labels are always mangleable\nAST_Label.DEFMETHOD(\"unmangleable\", return_false);\n\nAST_Symbol.DEFMETHOD(\"unreferenced\", function() {\n    return !this.definition().references.length && !this.scope.pinned();\n});\n\nAST_Symbol.DEFMETHOD(\"definition\", function() {\n    return this.thedef;\n});\n\nAST_Symbol.DEFMETHOD(\"global\", function() {\n    return this.thedef.global;\n});\n\nAST_Toplevel.DEFMETHOD(\"_default_mangler_options\", function(options) {\n    options = defaults(options, {\n        eval        : false,\n        ie8         : false,\n        keep_classnames: false,\n        keep_fnames : false,\n        module      : false,\n        reserved    : [],\n        toplevel    : false,\n    });\n    if (options.module) options.toplevel = true;\n    if (!Array.isArray(options.reserved)\n        && !(options.reserved instanceof Set)\n    ) {\n        options.reserved = [];\n    }\n    options.reserved = new Set(options.reserved);\n    // Never mangle arguments\n    options.reserved.add(\"arguments\");\n    return options;\n});\n\nAST_Toplevel.DEFMETHOD(\"mangle_names\", function(options) {\n    options = this._default_mangler_options(options);\n\n    // We only need to mangle declaration nodes.  Special logic wired\n    // into the code generator will display the mangled name if it's\n    // present (and for AST_SymbolRef-s it'll use the mangled name of\n    // the AST_SymbolDeclaration that it points to).\n    var lname = -1;\n    var to_mangle = [];\n\n    if (options.keep_fnames) {\n        function_defs = new Set();\n    }\n\n    const mangled_names = this.mangled_names = new Set();\n    if (options.cache) {\n        this.globals.forEach(collect);\n        if (options.cache.props) {\n            options.cache.props.forEach(function(mangled_name) {\n                mangled_names.add(mangled_name);\n            });\n        }\n    }\n\n    var tw = new TreeWalker(function(node, descend) {\n        if (node instanceof AST_LabeledStatement) {\n            // lname is incremented when we get to the AST_Label\n            var save_nesting = lname;\n            descend();\n            lname = save_nesting;\n            return true;        // don't descend again in TreeWalker\n        }\n        if (node instanceof AST_Scope) {\n            node.variables.forEach(collect);\n            return;\n        }\n        if (node.is_block_scope()) {\n            node.block_scope.variables.forEach(collect);\n            return;\n        }\n        if (\n            function_defs\n            && node instanceof AST_VarDef\n            && node.value instanceof AST_Lambda\n            && !node.value.name\n            && keep_name(options.keep_fnames, node.name.name)\n        ) {\n            function_defs.add(node.name.definition().id);\n            return;\n        }\n        if (node instanceof AST_Label) {\n            let name;\n            do {\n                name = base54(++lname);\n            } while (RESERVED_WORDS.has(name));\n            node.mangled_name = name;\n            return true;\n        }\n        if (!(options.ie8 || options.safari10) && node instanceof AST_SymbolCatch) {\n            to_mangle.push(node.definition());\n            return;\n        }\n    });\n\n    this.walk(tw);\n\n    if (options.keep_fnames || options.keep_classnames) {\n        unmangleable_names = new Set();\n        // Collect a set of short names which are unmangleable,\n        // for use in avoiding collisions in next_mangled.\n        to_mangle.forEach(def => {\n            if (def.name.length < 6 && def.unmangleable(options)) {\n                unmangleable_names.add(def.name);\n            }\n        });\n    }\n\n    to_mangle.forEach(def => { def.mangle(options); });\n\n    function_defs = null;\n    unmangleable_names = null;\n\n    function collect(symbol) {\n        const should_mangle = !options.reserved.has(symbol.name)\n            && !(symbol.export & MASK_EXPORT_DONT_MANGLE);\n        if (should_mangle) {\n            to_mangle.push(symbol);\n        }\n    }\n});\n\nAST_Toplevel.DEFMETHOD(\"find_colliding_names\", function(options) {\n    const cache = options.cache && options.cache.props;\n    const avoid = new Set();\n    options.reserved.forEach(to_avoid);\n    this.globals.forEach(add_def);\n    this.walk(new TreeWalker(function(node) {\n        if (node instanceof AST_Scope) node.variables.forEach(add_def);\n        if (node instanceof AST_SymbolCatch) add_def(node.definition());\n    }));\n    return avoid;\n\n    function to_avoid(name) {\n        avoid.add(name);\n    }\n\n    function add_def(def) {\n        var name = def.name;\n        if (def.global && cache && cache.has(name)) name = cache.get(name);\n        else if (!def.unmangleable(options)) return;\n        to_avoid(name);\n    }\n});\n\nAST_Toplevel.DEFMETHOD(\"expand_names\", function(options) {\n    base54.reset();\n    base54.sort();\n    options = this._default_mangler_options(options);\n    var avoid = this.find_colliding_names(options);\n    var cname = 0;\n    this.globals.forEach(rename);\n    this.walk(new TreeWalker(function(node) {\n        if (node instanceof AST_Scope) node.variables.forEach(rename);\n        if (node instanceof AST_SymbolCatch) rename(node.definition());\n    }));\n\n    function next_name() {\n        var name;\n        do {\n            name = base54(cname++);\n        } while (avoid.has(name) || RESERVED_WORDS.has(name));\n        return name;\n    }\n\n    function rename(def) {\n        if (def.global && options.cache) return;\n        if (def.unmangleable(options)) return;\n        if (options.reserved.has(def.name)) return;\n        const redefinition = redefined_catch_def(def);\n        const name = def.name = redefinition ? redefinition.name : next_name();\n        def.orig.forEach(function(sym) {\n            sym.name = name;\n        });\n        def.references.forEach(function(sym) {\n            sym.name = name;\n        });\n    }\n});\n\nAST_Node.DEFMETHOD(\"tail_node\", return_this);\nAST_Sequence.DEFMETHOD(\"tail_node\", function() {\n    return this.expressions[this.expressions.length - 1];\n});\n\nAST_Toplevel.DEFMETHOD(\"compute_char_frequency\", function(options) {\n    options = this._default_mangler_options(options);\n    try {\n        AST_Node.prototype.print = function(stream, force_parens) {\n            this._print(stream, force_parens);\n            if (this instanceof AST_Symbol && !this.unmangleable(options)) {\n                base54.consider(this.name, -1);\n            } else if (options.properties) {\n                if (this instanceof AST_Dot) {\n                    base54.consider(this.property, -1);\n                } else if (this instanceof AST_Sub) {\n                    skip_string(this.property);\n                }\n            }\n        };\n        base54.consider(this.print_to_string(), 1);\n    } finally {\n        AST_Node.prototype.print = AST_Node.prototype._print;\n    }\n    base54.sort();\n\n    function skip_string(node) {\n        if (node instanceof AST_String) {\n            base54.consider(node.value, -1);\n        } else if (node instanceof AST_Conditional) {\n            skip_string(node.consequent);\n            skip_string(node.alternative);\n        } else if (node instanceof AST_Sequence) {\n            skip_string(node.tail_node());\n        }\n    }\n});\n\nconst base54 = (() => {\n    const leading = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_\".split(\"\");\n    const digits = \"0123456789\".split(\"\");\n    let chars;\n    let frequency;\n    function reset() {\n        frequency = new Map();\n        leading.forEach(function(ch) {\n            frequency.set(ch, 0);\n        });\n        digits.forEach(function(ch) {\n            frequency.set(ch, 0);\n        });\n    }\n    base54.consider = function(str, delta) {\n        for (var i = str.length; --i >= 0;) {\n            frequency.set(str[i], frequency.get(str[i]) + delta);\n        }\n    };\n    function compare(a, b) {\n        return frequency.get(b) - frequency.get(a);\n    }\n    base54.sort = function() {\n        chars = mergeSort(leading, compare).concat(mergeSort(digits, compare));\n    };\n    base54.reset = reset;\n    reset();\n    function base54(num) {\n        var ret = \"\", base = 54;\n        num++;\n        do {\n            num--;\n            ret += chars[num % base];\n            num = Math.floor(num / base);\n            base = 64;\n        } while (num > 0);\n        return ret;\n    }\n    return base54;\n})();\n\nexport {\n    base54,\n    SymbolDef,\n};\n","import { minify } from \"../lib/minify\";\n\nexport function default_options() {\n    const defs = {};\n\n    Object.keys(infer_options({ 0: 0 })).forEach((component) => {\n        const options = infer_options({\n            [component]: {0: 0}\n        });\n\n        if (options) defs[component] = options;\n    });\n    return defs;\n}\n\nfunction infer_options(options) {\n    var result = minify(\"\", options);\n    return result.error && result.error.defs;\n}\n","import {\n    AST_Accessor,\n    AST_Array,\n    AST_Arrow,\n    AST_Await,\n    AST_BigInt,\n    AST_Binary,\n    AST_Block,\n    AST_Break,\n    AST_Call,\n    AST_Case,\n    AST_Class,\n    AST_ClassProperty,\n    AST_ConciseMethod,\n    AST_Conditional,\n    AST_Const,\n    AST_Continue,\n    AST_Debugger,\n    AST_Default,\n    AST_Defun,\n    AST_Destructuring,\n    AST_Directive,\n    AST_Do,\n    AST_Dot,\n    AST_EmptyStatement,\n    AST_Expansion,\n    AST_Export,\n    AST_False,\n    AST_For,\n    AST_ForIn,\n    AST_Function,\n    AST_Hole,\n    AST_If,\n    AST_Import,\n    AST_Infinity,\n    AST_LabeledStatement,\n    AST_Let,\n    AST_NameMapping,\n    AST_NaN,\n    AST_New,\n    AST_NewTarget,\n    AST_Node,\n    AST_Null,\n    AST_Number,\n    AST_Object,\n    AST_ObjectKeyVal,\n    AST_ObjectGetter,\n    AST_ObjectSetter,\n    AST_RegExp,\n    AST_Return,\n    AST_Sequence,\n    AST_String,\n    AST_Sub,\n    AST_Super,\n    AST_Switch,\n    AST_Symbol,\n    AST_SymbolClassProperty,\n    AST_SymbolExportForeign,\n    AST_SymbolImportForeign,\n    AST_SymbolRef,\n    AST_TemplateSegment,\n    AST_TemplateString,\n    AST_This,\n    AST_Throw,\n    AST_Toplevel,\n    AST_True,\n    AST_Try,\n    AST_Catch,\n    AST_Finally,\n    AST_Unary,\n    AST_Undefined,\n    AST_Var,\n    AST_VarDef,\n    AST_While,\n    AST_With,\n    AST_Yield,\n    walk_parent\n} from \"./ast.js\";\nimport { default_options } from \"../tools/node.js\";\nimport { first_in_statement } from \"./utils/first_in_statement.js\";\n\nlet mangle_options = undefined;\nAST_Node.prototype.size = function (compressor, stack) {\n    mangle_options = default_options.mangle;\n\n    let size = 0;\n    walk_parent(this, (node, info) => {\n        size += node._size(info);\n    }, stack || (compressor && compressor.stack));\n\n    // just to save a bit of memory\n    mangle_options = undefined;\n\n    return size;\n};\n\nAST_Node.prototype._size = () => 0;\n\nAST_Debugger.prototype._size = () => 8;\n\nAST_Directive.prototype._size = function () {\n    // TODO string encoding stuff\n    return 2 + this.value.length;\n};\n\nconst list_overhead = (array) => array.length && array.length - 1;\n\nAST_Block.prototype._size = function () {\n    return 2 + list_overhead(this.body);\n};\n\nAST_Toplevel.prototype._size = function() {\n    return list_overhead(this.body);\n};\n\nAST_EmptyStatement.prototype._size = () => 1;\n\nAST_LabeledStatement.prototype._size = () => 2;  // x:\n\nAST_Do.prototype._size = () => 9;\n\nAST_While.prototype._size = () => 7;\n\nAST_For.prototype._size = () => 8;\n\nAST_ForIn.prototype._size = () => 8;\n// AST_ForOf inherits ^\n\nAST_With.prototype._size = () => 6;\n\nAST_Expansion.prototype._size = () => 3;\n\n/*#__INLINE__*/\nconst lambda_modifiers = func =>\n    (func.is_generator ? 1 : 0) + (func.async ? 6 : 0);\n\nAST_Accessor.prototype._size = function () {\n    return lambda_modifiers(this) + 4 + list_overhead(this.argnames) + list_overhead(this.body);\n};\n\nAST_Function.prototype._size = function (info) {\n    const first = !!first_in_statement(info);\n    return (first * 2) + lambda_modifiers(this) + 12 + list_overhead(this.argnames) + list_overhead(this.body);\n};\n\nAST_Defun.prototype._size = function () {\n    return lambda_modifiers(this) + 13 + list_overhead(this.argnames) + list_overhead(this.body);\n};\n\nAST_Arrow.prototype._size = function () {\n    let args_and_arrow = 2 + list_overhead(this.argnames);\n\n    if (\n        !(\n            this.argnames.length === 1\n            && this.argnames[0] instanceof AST_Symbol\n        )\n    ) {\n        args_and_arrow += 2;\n    }\n\n    return lambda_modifiers(this) + args_and_arrow + (Array.isArray(this.body) ? list_overhead(this.body) : this.body._size());\n};\n\nAST_Destructuring.prototype._size = () => 2;\n\nAST_TemplateString.prototype._size = function () {\n    return 2 + (Math.floor(this.segments.length / 2) * 3);  /* \"${}\" */\n};\n\nAST_TemplateSegment.prototype._size = function () {\n    return this.value.length;\n};\n\nAST_Return.prototype._size = function () {\n    return this.value ? 7 : 6;\n};\n\nAST_Throw.prototype._size = () => 6;\n\nAST_Break.prototype._size = function () {\n    return this.label ? 6 : 5;\n};\n\nAST_Continue.prototype._size = function () {\n    return this.label ? 9 : 8;\n};\n\nAST_If.prototype._size = () => 4;\n\nAST_Switch.prototype._size = function () {\n    return 8 + list_overhead(this.body);\n};\n\nAST_Case.prototype._size = function () {\n    return 5 + list_overhead(this.body);\n};\n\nAST_Default.prototype._size = function () {\n    return 8 + list_overhead(this.body);\n};\n\nAST_Try.prototype._size = function () {\n    return 3 + list_overhead(this.body);\n};\n\nAST_Catch.prototype._size = function () {\n    let size = 7 + list_overhead(this.body);\n    if (this.argname) {\n        size += 2;\n    }\n    return size;\n};\n\nAST_Finally.prototype._size = function () {\n    return 7 + list_overhead(this.body);\n};\n\n/*#__INLINE__*/\nconst def_size = (size, def) => size + list_overhead(def.definitions);\n\nAST_Var.prototype._size = function () {\n    return def_size(4, this);\n};\n\nAST_Let.prototype._size = function () {\n    return def_size(4, this);\n};\n\nAST_Const.prototype._size = function () {\n    return def_size(6, this);\n};\n\nAST_VarDef.prototype._size = function () {\n    return this.value ? 1 : 0;\n};\n\nAST_NameMapping.prototype._size = function () {\n    // foreign name isn't mangled\n    return this.name ? 4 : 0;\n};\n\nAST_Import.prototype._size = function () {\n    // import\n    let size = 6;\n\n    if (this.imported_name) size += 1;\n\n    // from\n    if (this.imported_name || this.imported_names) size += 5;\n\n    // braces, and the commas\n    if (this.imported_names) {\n        size += 2 + list_overhead(this.imported_names);\n    }\n\n    return size;\n};\n\nAST_Export.prototype._size = function () {\n    let size = 7 + (this.is_default ? 8 : 0);\n\n    if (this.exported_value) {\n        size += this.exported_value._size();\n    }\n\n    if (this.exported_names) {\n        // Braces and commas\n        size += 2 + list_overhead(this.exported_names);\n    }\n\n    if (this.module_name) {\n        // \"from \"\n        size += 5;\n    }\n\n    return size;\n};\n\nAST_Call.prototype._size = function () {\n    return 2 + list_overhead(this.args);\n};\n\nAST_New.prototype._size = function () {\n    return 6 + list_overhead(this.args);\n};\n\nAST_Sequence.prototype._size = function () {\n    return list_overhead(this.expressions);\n};\n\nAST_Dot.prototype._size = function () {\n    return this.property.length + 1;\n};\n\nAST_Sub.prototype._size = () => 2;\n\nAST_Unary.prototype._size = function () {\n    if (this.operator === \"typeof\") return 7;\n    if (this.operator === \"void\") return 5;\n    return this.operator.length;\n};\n\nAST_Binary.prototype._size = function (info) {\n    if (this.operator === \"in\") return 4;\n\n    let size = this.operator.length;\n\n    if (\n        (this.operator === \"+\" || this.operator === \"-\")\n        && this.right instanceof AST_Unary && this.right.operator === this.operator\n    ) {\n        // 1+ +a > needs space between the +\n        size += 1;\n    }\n\n    if (this.needs_parens(info)) {\n        size += 2;\n    }\n\n    return size;\n};\n\nAST_Conditional.prototype._size = () => 3;\n\nAST_Array.prototype._size = function () {\n    return 2 + list_overhead(this.elements);\n};\n\nAST_Object.prototype._size = function (info) {\n    let base = 2;\n    if (first_in_statement(info)) {\n        base += 2; // parens\n    }\n    return base + list_overhead(this.properties);\n};\n\n/*#__INLINE__*/\nconst key_size = key =>\n    typeof key === \"string\" ? key.length : 0;\n\nAST_ObjectKeyVal.prototype._size = function () {\n    return key_size(this.key) + 1;\n};\n\n/*#__INLINE__*/\nconst static_size = is_static => is_static ? 7 : 0;\n\nAST_ObjectGetter.prototype._size = function () {\n    return 5 + static_size(this.static) + key_size(this.key);\n};\n\nAST_ObjectSetter.prototype._size = function () {\n    return 5 + static_size(this.static) + key_size(this.key);\n};\n\nAST_ConciseMethod.prototype._size = function () {\n    return static_size(this.static) + key_size(this.key) + lambda_modifiers(this);\n};\n\nAST_Class.prototype._size = function () {\n    return (\n        (this.name ? 8 : 7)\n        + (this.extends ? 8 : 0)\n    );\n};\n\nAST_ClassProperty.prototype._size = function () {\n    return (\n        static_size(this.static)\n        + (typeof this.key === \"string\" ? this.key.length + 2 : 0)\n        + (this.value ? 1 : 0)\n    );\n};\n\nAST_Symbol.prototype._size = function () {\n    return !mangle_options || this.definition().unmangleable(mangle_options)\n        ? this.name.length\n        : 2;\n};\n\n// TODO take propmangle into account\nAST_SymbolClassProperty.prototype._size = function () {\n    return this.name.length;\n};\n\nAST_SymbolRef.prototype._size = function () {\n    const { name, thedef } = this;\n\n    if (thedef && thedef.global) return name.length;\n\n    if (name === \"arguments\") return 9;\n\n    return 2;\n};\n\nAST_NewTarget.prototype._size = () => 10;\n\nAST_SymbolImportForeign.prototype._size = function () {\n    return this.name.length;\n};\n\nAST_SymbolExportForeign.prototype._size = function () {\n    return this.name.length;\n};\n\nAST_This.prototype._size = () => 4;\n\nAST_Super.prototype._size = () => 5;\n\nAST_String.prototype._size = function () {\n    return this.value.length + 2;\n};\n\nAST_Number.prototype._size = function () {\n    const { value } = this;\n    if (value === 0) return 1;\n    if (value > 0 && Math.floor(value) === value) {\n        return Math.floor(Math.log10(value) + 1);\n    }\n    return value.toString().length;\n};\n\nAST_BigInt.prototype._size = function () {\n    return this.value.length;\n};\n\nAST_RegExp.prototype._size = function () {\n    return this.value.toString().length;\n};\n\nAST_Null.prototype._size = () => 4;\n\nAST_NaN.prototype._size = () => 3;\n\nAST_Undefined.prototype._size = () => 6; // \"void 0\"\n\nAST_Hole.prototype._size = () => 0;  // comma is taken into account\n\nAST_Infinity.prototype._size = () => 8;\n\nAST_True.prototype._size = () => 4;\n\nAST_False.prototype._size = () => 5;\n\nAST_Await.prototype._size = () => 6;\n\nAST_Yield.prototype._size = () => 6;\n","/***********************************************************************\n\n  A JavaScript tokenizer / parser / beautifier / compressor.\n  https://github.com/mishoo/UglifyJS2\n\n  -------------------------------- (C) ---------------------------------\n\n                           Author: Mihai Bazon\n                         <mihai.bazon@gmail.com>\n                       http://mihai.bazon.net/blog\n\n  Distributed under the BSD license:\n\n    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n        * Redistributions of source code must retain the above\n          copyright notice, this list of conditions and the following\n          disclaimer.\n\n        * Redistributions in binary form must reproduce the above\n          copyright notice, this list of conditions and the following\n          disclaimer in the documentation and/or other materials\n          provided with the distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n\n ***********************************************************************/\n\n\"use strict\";\n\nimport {\n    defaults,\n    HOP,\n    keep_name,\n    make_node,\n    makePredicate,\n    map_add,\n    MAP,\n    member,\n    noop,\n    remove,\n    return_false,\n    return_null,\n    return_this,\n    return_true,\n    string_template,\n    regexp_source_fix,\n    has_annotation\n} from \"../utils/index.js\";\nimport { first_in_statement, } from \"../utils/first_in_statement.js\";\nimport {\n    AST_Accessor,\n    AST_Array,\n    AST_Arrow,\n    AST_Assign,\n    AST_Await,\n    AST_BigInt,\n    AST_Binary,\n    AST_Block,\n    AST_BlockStatement,\n    AST_Boolean,\n    AST_Break,\n    AST_Call,\n    AST_Case,\n    AST_Catch,\n    AST_Class,\n    AST_ClassExpression,\n    AST_ClassProperty,\n    AST_ConciseMethod,\n    AST_Conditional,\n    AST_Const,\n    AST_Constant,\n    AST_Continue,\n    AST_Debugger,\n    AST_Default,\n    AST_DefaultAssign,\n    AST_DefClass,\n    AST_Definitions,\n    AST_Defun,\n    AST_Destructuring,\n    AST_Directive,\n    AST_Do,\n    AST_Dot,\n    AST_DWLoop,\n    AST_EmptyStatement,\n    AST_Exit,\n    AST_Expansion,\n    AST_Export,\n    AST_False,\n    AST_Finally,\n    AST_For,\n    AST_ForIn,\n    AST_Function,\n    AST_Hole,\n    AST_If,\n    AST_Import,\n    AST_Infinity,\n    AST_IterationStatement,\n    AST_Jump,\n    AST_LabeledStatement,\n    AST_Lambda,\n    AST_Let,\n    AST_LoopControl,\n    AST_NaN,\n    AST_New,\n    AST_Node,\n    AST_Null,\n    AST_Number,\n    AST_Object,\n    AST_ObjectGetter,\n    AST_ObjectKeyVal,\n    AST_ObjectProperty,\n    AST_ObjectSetter,\n    AST_PrefixedTemplateString,\n    AST_PropAccess,\n    AST_RegExp,\n    AST_Return,\n    AST_Scope,\n    AST_Sequence,\n    AST_SimpleStatement,\n    AST_Statement,\n    AST_String,\n    AST_Sub,\n    AST_Switch,\n    AST_SwitchBranch,\n    AST_Symbol,\n    AST_SymbolBlockDeclaration,\n    AST_SymbolCatch,\n    AST_SymbolClassProperty,\n    AST_SymbolConst,\n    AST_SymbolDeclaration,\n    AST_SymbolDefun,\n    AST_SymbolExport,\n    AST_SymbolFunarg,\n    AST_SymbolLambda,\n    AST_SymbolLet,\n    AST_SymbolMethod,\n    AST_SymbolRef,\n    AST_SymbolVar,\n    AST_TemplateSegment,\n    AST_TemplateString,\n    AST_This,\n    AST_Toplevel,\n    AST_True,\n    AST_Try,\n    AST_Unary,\n    AST_UnaryPostfix,\n    AST_UnaryPrefix,\n    AST_Undefined,\n    AST_Var,\n    AST_VarDef,\n    AST_While,\n    AST_With,\n    AST_Yield,\n    TreeTransformer,\n    TreeWalker,\n    walk,\n    walk_abort,\n    walk_body,\n    walk_parent,\n    _INLINE,\n    _NOINLINE,\n    _PURE\n} from \"../ast.js\";\nimport { equivalent_to } from \"../equivalent-to.js\";\nimport {\n    is_basic_identifier_string,\n    JS_Parse_Error,\n    parse,\n    PRECEDENCE,\n} from \"../parse.js\";\nimport { OutputStream } from \"../output.js\";\nimport {\n    base54,\n    SymbolDef,\n} from \"../scope.js\";\nimport \"../size.js\";\n\nconst UNUSED    = 0b00000001;\nconst TRUTHY    = 0b00000010;\nconst FALSY     = 0b00000100;\nconst UNDEFINED = 0b00001000;\nconst INLINED   = 0b00010000;\n// Nodes to which values are ever written. Used when keep_assign is part of the unused option string.\nconst WRITE_ONLY= 0b00100000;\n\n// information specific to a single compression pass\nconst SQUEEZED  = 0b0000000100000000;\nconst OPTIMIZED = 0b0000001000000000;\nconst TOP       = 0b0000010000000000;\n\nconst CLEAR_BETWEEN_PASSES = SQUEEZED | OPTIMIZED | TOP;\n\n/*@__INLINE__*/\nconst has_flag = (node, flag) => node.flags & flag;\n/*@__INLINE__*/\nconst set_flag = (node, flag) => { node.flags |= flag; };\n/*@__INLINE__*/\nconst clear_flag = (node, flag) => { node.flags &= ~flag; };\n\nclass Compressor extends TreeWalker {\n    constructor(options, false_by_default) {\n        super();\n        if (options.defaults !== undefined && !options.defaults) false_by_default = true;\n        this.options = defaults(options, {\n            arguments     : false,\n            arrows        : !false_by_default,\n            booleans      : !false_by_default,\n            booleans_as_integers : false,\n            collapse_vars : !false_by_default,\n            comparisons   : !false_by_default,\n            computed_props: !false_by_default,\n            conditionals  : !false_by_default,\n            dead_code     : !false_by_default,\n            defaults      : true,\n            directives    : !false_by_default,\n            drop_console  : false,\n            drop_debugger : !false_by_default,\n            ecma          : 5,\n            evaluate      : !false_by_default,\n            expression    : false,\n            global_defs   : false,\n            hoist_funs    : false,\n            hoist_props   : !false_by_default,\n            hoist_vars    : false,\n            ie8           : false,\n            if_return     : !false_by_default,\n            inline        : !false_by_default,\n            join_vars     : !false_by_default,\n            keep_classnames: false,\n            keep_fargs    : true,\n            keep_fnames   : false,\n            keep_infinity : false,\n            loops         : !false_by_default,\n            module        : false,\n            negate_iife   : !false_by_default,\n            passes        : 1,\n            properties    : !false_by_default,\n            pure_getters  : !false_by_default && \"strict\",\n            pure_funcs    : null,\n            reduce_funcs  : null,  // legacy\n            reduce_vars   : !false_by_default,\n            sequences     : !false_by_default,\n            side_effects  : !false_by_default,\n            switches      : !false_by_default,\n            top_retain    : null,\n            toplevel      : !!(options && options[\"top_retain\"]),\n            typeofs       : !false_by_default,\n            unsafe        : false,\n            unsafe_arrows : false,\n            unsafe_comps  : false,\n            unsafe_Function: false,\n            unsafe_math   : false,\n            unsafe_symbols: false,\n            unsafe_methods: false,\n            unsafe_proto  : false,\n            unsafe_regexp : false,\n            unsafe_undefined: false,\n            unused        : !false_by_default,\n            warnings      : false,\n        }, true);\n        var global_defs = this.options[\"global_defs\"];\n        if (typeof global_defs == \"object\") for (var key in global_defs) {\n            if (key[0] === \"@\" && HOP(global_defs, key)) {\n                global_defs[key.slice(1)] = parse(global_defs[key], {\n                    expression: true\n                });\n            }\n        }\n        if (this.options[\"inline\"] === true) this.options[\"inline\"] = 3;\n        var pure_funcs = this.options[\"pure_funcs\"];\n        if (typeof pure_funcs == \"function\") {\n            this.pure_funcs = pure_funcs;\n        } else {\n            this.pure_funcs = pure_funcs ? function(node) {\n                return !pure_funcs.includes(node.expression.print_to_string());\n            } : return_true;\n        }\n        var top_retain = this.options[\"top_retain\"];\n        if (top_retain instanceof RegExp) {\n            this.top_retain = function(def) {\n                return top_retain.test(def.name);\n            };\n        } else if (typeof top_retain == \"function\") {\n            this.top_retain = top_retain;\n        } else if (top_retain) {\n            if (typeof top_retain == \"string\") {\n                top_retain = top_retain.split(/,/);\n            }\n            this.top_retain = function(def) {\n                return top_retain.includes(def.name);\n            };\n        }\n        if (this.options[\"module\"]) {\n            this.directives[\"use strict\"] = true;\n            this.options[\"toplevel\"] = true;\n        }\n        var toplevel = this.options[\"toplevel\"];\n        this.toplevel = typeof toplevel == \"string\" ? {\n            funcs: /funcs/.test(toplevel),\n            vars: /vars/.test(toplevel)\n        } : {\n            funcs: toplevel,\n            vars: toplevel\n        };\n        var sequences = this.options[\"sequences\"];\n        this.sequences_limit = sequences == 1 ? 800 : sequences | 0;\n        this.warnings_produced = {};\n        this.evaluated_regexps = new Map();\n    }\n\n    option(key) {\n        return this.options[key];\n    }\n\n    exposed(def) {\n        if (def.export) return true;\n        if (def.global) for (var i = 0, len = def.orig.length; i < len; i++)\n            if (!this.toplevel[def.orig[i] instanceof AST_SymbolDefun ? \"funcs\" : \"vars\"])\n                return true;\n        return false;\n    }\n\n    in_boolean_context() {\n        if (!this.option(\"booleans\")) return false;\n        var self = this.self();\n        for (var i = 0, p; p = this.parent(i); i++) {\n            if (p instanceof AST_SimpleStatement\n                || p instanceof AST_Conditional && p.condition === self\n                || p instanceof AST_DWLoop && p.condition === self\n                || p instanceof AST_For && p.condition === self\n                || p instanceof AST_If && p.condition === self\n                || p instanceof AST_UnaryPrefix && p.operator == \"!\" && p.expression === self) {\n                return true;\n            }\n            if (\n                p instanceof AST_Binary\n                    && (\n                        p.operator == \"&&\"\n                        || p.operator == \"||\"\n                        || p.operator == \"??\"\n                    )\n                || p instanceof AST_Conditional\n                || p.tail_node() === self\n            ) {\n                self = p;\n            } else {\n                return false;\n            }\n        }\n    }\n\n    compress(toplevel) {\n        toplevel = toplevel.resolve_defines(this);\n        if (this.option(\"expression\")) {\n            toplevel.process_expression(true);\n        }\n        var passes = +this.options.passes || 1;\n        var min_count = 1 / 0;\n        var stopping = false;\n        var mangle = { ie8: this.option(\"ie8\") };\n        for (var pass = 0; pass < passes; pass++) {\n            toplevel.figure_out_scope(mangle);\n            if (pass === 0 && this.option(\"drop_console\")) {\n                // must be run before reduce_vars and compress pass\n                toplevel = toplevel.drop_console();\n            }\n            if (pass > 0 || this.option(\"reduce_vars\")) {\n                toplevel.reset_opt_flags(this);\n            }\n            toplevel = toplevel.transform(this);\n            if (passes > 1) {\n                let count = 0;\n                walk(toplevel, () => { count++; });\n                this.info(\"pass \" + pass + \": last_count: \" + min_count + \", count: \" + count);\n                if (count < min_count) {\n                    min_count = count;\n                    stopping = false;\n                } else if (stopping) {\n                    break;\n                } else {\n                    stopping = true;\n                }\n            }\n        }\n        if (this.option(\"expression\")) {\n            toplevel.process_expression(false);\n        }\n        return toplevel;\n    }\n\n    info(...args) {\n        if (this.options.warnings == \"verbose\") {\n            AST_Node.warn(...args);\n        }\n    }\n\n    warn(text, props) {\n        if (this.options.warnings) {\n            // only emit unique warnings\n            var message = string_template(text, props);\n            if (!(message in this.warnings_produced)) {\n                this.warnings_produced[message] = true;\n                AST_Node.warn.apply(AST_Node, arguments);\n            }\n        }\n    }\n\n    clear_warnings() {\n        this.warnings_produced = {};\n    }\n\n    before(node, descend) {\n        if (has_flag(node, SQUEEZED)) return node;\n        var was_scope = false;\n        if (node instanceof AST_Scope) {\n            node = node.hoist_properties(this);\n            node = node.hoist_declarations(this);\n            was_scope = true;\n        }\n        // Before https://github.com/mishoo/UglifyJS2/pull/1602 AST_Node.optimize()\n        // would call AST_Node.transform() if a different instance of AST_Node is\n        // produced after def_optimize().\n        // This corrupts TreeWalker.stack, which cause AST look-ups to malfunction.\n        // Migrate and defer all children's AST_Node.transform() to below, which\n        // will now happen after this parent AST_Node has been properly substituted\n        // thus gives a consistent AST snapshot.\n        descend(node, this);\n        // Existing code relies on how AST_Node.optimize() worked, and omitting the\n        // following replacement call would result in degraded efficiency of both\n        // output and performance.\n        descend(node, this);\n        var opt = node.optimize(this);\n        if (was_scope && opt instanceof AST_Scope) {\n            opt.drop_unused(this);\n            descend(opt, this);\n        }\n        if (opt === node) set_flag(opt, SQUEEZED);\n        return opt;\n    }\n}\n\nfunction def_optimize(node, optimizer) {\n    node.DEFMETHOD(\"optimize\", function(compressor) {\n        var self = this;\n        if (has_flag(self, OPTIMIZED)) return self;\n        if (compressor.has_directive(\"use asm\")) return self;\n        var opt = optimizer(self, compressor);\n        set_flag(opt, OPTIMIZED);\n        return opt;\n    });\n}\n\ndef_optimize(AST_Node, function(self) {\n    return self;\n});\n\nAST_Toplevel.DEFMETHOD(\"drop_console\", function() {\n    return this.transform(new TreeTransformer(function(self) {\n        if (self.TYPE == \"Call\") {\n            var exp = self.expression;\n            if (exp instanceof AST_PropAccess) {\n                var name = exp.expression;\n                while (name.expression) {\n                    name = name.expression;\n                }\n                if (is_undeclared_ref(name) && name.name == \"console\") {\n                    return make_node(AST_Undefined, self);\n                }\n            }\n        }\n    }));\n});\n\nAST_Node.DEFMETHOD(\"equivalent_to\", function(node) {\n    return equivalent_to(this, node);\n});\n\nAST_Scope.DEFMETHOD(\"process_expression\", function(insert, compressor) {\n    var self = this;\n    var tt = new TreeTransformer(function(node) {\n        if (insert && node instanceof AST_SimpleStatement) {\n            return make_node(AST_Return, node, {\n                value: node.body\n            });\n        }\n        if (!insert && node instanceof AST_Return) {\n            if (compressor) {\n                var value = node.value && node.value.drop_side_effect_free(compressor, true);\n                return value ? make_node(AST_SimpleStatement, node, {\n                    body: value\n                }) : make_node(AST_EmptyStatement, node);\n            }\n            return make_node(AST_SimpleStatement, node, {\n                body: node.value || make_node(AST_UnaryPrefix, node, {\n                    operator: \"void\",\n                    expression: make_node(AST_Number, node, {\n                        value: 0\n                    })\n                })\n            });\n        }\n        if (node instanceof AST_Class || node instanceof AST_Lambda && node !== self) {\n            return node;\n        }\n        if (node instanceof AST_Block) {\n            var index = node.body.length - 1;\n            if (index >= 0) {\n                node.body[index] = node.body[index].transform(tt);\n            }\n        } else if (node instanceof AST_If) {\n            node.body = node.body.transform(tt);\n            if (node.alternative) {\n                node.alternative = node.alternative.transform(tt);\n            }\n        } else if (node instanceof AST_With) {\n            node.body = node.body.transform(tt);\n        }\n        return node;\n    });\n    self.transform(tt);\n});\n\nfunction read_property(obj, key) {\n    key = get_value(key);\n    if (key instanceof AST_Node) return;\n    var value;\n    if (obj instanceof AST_Array) {\n        var elements = obj.elements;\n        if (key == \"length\") return make_node_from_constant(elements.length, obj);\n        if (typeof key == \"number\" && key in elements) value = elements[key];\n    } else if (obj instanceof AST_Object) {\n        key = \"\" + key;\n        var props = obj.properties;\n        for (var i = props.length; --i >= 0;) {\n            var prop = props[i];\n            if (!(prop instanceof AST_ObjectKeyVal)) return;\n            if (!value && props[i].key === key) value = props[i].value;\n        }\n    }\n    return value instanceof AST_SymbolRef && value.fixed_value() || value;\n}\n\nfunction is_modified(compressor, tw, node, value, level, immutable) {\n    var parent = tw.parent(level);\n    var lhs = is_lhs(node, parent);\n    if (lhs) return lhs;\n    if (!immutable\n        && parent instanceof AST_Call\n        && parent.expression === node\n        && !(value instanceof AST_Arrow)\n        && !(value instanceof AST_Class)\n        && !parent.is_expr_pure(compressor)\n        && (!(value instanceof AST_Function)\n            || !(parent instanceof AST_New) && value.contains_this())) {\n        return true;\n    }\n    if (parent instanceof AST_Array) {\n        return is_modified(compressor, tw, parent, parent, level + 1);\n    }\n    if (parent instanceof AST_ObjectKeyVal && node === parent.value) {\n        var obj = tw.parent(level + 1);\n        return is_modified(compressor, tw, obj, obj, level + 2);\n    }\n    if (parent instanceof AST_PropAccess && parent.expression === node) {\n        var prop = read_property(value, parent.property);\n        return !immutable && is_modified(compressor, tw, parent, prop, level + 1);\n    }\n}\n\n(function(def_reduce_vars) {\n    def_reduce_vars(AST_Node, noop);\n\n    function reset_def(compressor, def) {\n        def.assignments = 0;\n        def.chained = false;\n        def.direct_access = false;\n        def.escaped = 0;\n        def.recursive_refs = 0;\n        def.references = [];\n        def.should_replace = undefined;\n        def.single_use = undefined;\n        if (def.scope.pinned()) {\n            def.fixed = false;\n        } else if (def.orig[0] instanceof AST_SymbolConst || !compressor.exposed(def)) {\n            def.fixed = def.init;\n        } else {\n            def.fixed = false;\n        }\n    }\n\n    function reset_variables(tw, compressor, node) {\n        node.variables.forEach(function(def) {\n            reset_def(compressor, def);\n            if (def.fixed === null) {\n                tw.defs_to_safe_ids.set(def.id, tw.safe_ids);\n                mark(tw, def, true);\n            } else if (def.fixed) {\n                tw.loop_ids.set(def.id, tw.in_loop);\n                mark(tw, def, true);\n            }\n        });\n    }\n\n    function reset_block_variables(compressor, node) {\n        if (node.block_scope) node.block_scope.variables.forEach((def) => {\n            reset_def(compressor, def);\n        });\n    }\n\n    function push(tw) {\n        tw.safe_ids = Object.create(tw.safe_ids);\n    }\n\n    function pop(tw) {\n        tw.safe_ids = Object.getPrototypeOf(tw.safe_ids);\n    }\n\n    function mark(tw, def, safe) {\n        tw.safe_ids[def.id] = safe;\n    }\n\n    function safe_to_read(tw, def) {\n        if (def.single_use == \"m\") return false;\n        if (tw.safe_ids[def.id]) {\n            if (def.fixed == null) {\n                var orig = def.orig[0];\n                if (orig instanceof AST_SymbolFunarg || orig.name == \"arguments\") return false;\n                def.fixed = make_node(AST_Undefined, orig);\n            }\n            return true;\n        }\n        return def.fixed instanceof AST_Defun;\n    }\n\n    function safe_to_assign(tw, def, scope, value) {\n        if (def.fixed === undefined) return true;\n        let def_safe_ids;\n        if (def.fixed === null\n            && (def_safe_ids = tw.defs_to_safe_ids.get(def.id))\n        ) {\n            def_safe_ids[def.id] = false;\n            tw.defs_to_safe_ids.delete(def.id);\n            return true;\n        }\n        if (!HOP(tw.safe_ids, def.id)) return false;\n        if (!safe_to_read(tw, def)) return false;\n        if (def.fixed === false) return false;\n        if (def.fixed != null && (!value || def.references.length > def.assignments)) return false;\n        if (def.fixed instanceof AST_Defun) {\n            return value instanceof AST_Node && def.fixed.parent_scope === scope;\n        }\n        return def.orig.every((sym) => {\n            return !(sym instanceof AST_SymbolConst\n                || sym instanceof AST_SymbolDefun\n                || sym instanceof AST_SymbolLambda);\n        });\n    }\n\n    function ref_once(tw, compressor, def) {\n        return compressor.option(\"unused\")\n            && !def.scope.pinned()\n            && def.references.length - def.recursive_refs == 1\n            && tw.loop_ids.get(def.id) === tw.in_loop;\n    }\n\n    function is_immutable(value) {\n        if (!value) return false;\n        return value.is_constant()\n            || value instanceof AST_Lambda\n            || value instanceof AST_This;\n    }\n\n    function mark_escaped(tw, d, scope, node, value, level, depth) {\n        var parent = tw.parent(level);\n        if (value) {\n            if (value.is_constant()) return;\n            if (value instanceof AST_ClassExpression) return;\n        }\n        if (parent instanceof AST_Assign && parent.operator == \"=\" && node === parent.right\n            || parent instanceof AST_Call && (node !== parent.expression || parent instanceof AST_New)\n            || parent instanceof AST_Exit && node === parent.value && node.scope !== d.scope\n            || parent instanceof AST_VarDef && node === parent.value\n            || parent instanceof AST_Yield && node === parent.value && node.scope !== d.scope) {\n            if (depth > 1 && !(value && value.is_constant_expression(scope))) depth = 1;\n            if (!d.escaped || d.escaped > depth) d.escaped = depth;\n            return;\n        } else if (parent instanceof AST_Array\n            || parent instanceof AST_Await\n            || parent instanceof AST_Binary && lazy_op.has(parent.operator)\n            || parent instanceof AST_Conditional && node !== parent.condition\n            || parent instanceof AST_Expansion\n            || parent instanceof AST_Sequence && node === parent.tail_node()) {\n            mark_escaped(tw, d, scope, parent, parent, level + 1, depth);\n        } else if (parent instanceof AST_ObjectKeyVal && node === parent.value) {\n            var obj = tw.parent(level + 1);\n            mark_escaped(tw, d, scope, obj, obj, level + 2, depth);\n        } else if (parent instanceof AST_PropAccess && node === parent.expression) {\n            value = read_property(value, parent.property);\n            mark_escaped(tw, d, scope, parent, value, level + 1, depth + 1);\n            if (value) return;\n        }\n        if (level > 0) return;\n        if (parent instanceof AST_Sequence && node !== parent.tail_node()) return;\n        if (parent instanceof AST_SimpleStatement) return;\n        d.direct_access = true;\n    }\n\n    const suppress = node => walk(node, node => {\n        if (!(node instanceof AST_Symbol)) return;\n        var d = node.definition();\n        if (!d) return;\n        if (node instanceof AST_SymbolRef) d.references.push(node);\n        d.fixed = false;\n    });\n    def_reduce_vars(AST_Accessor, function(tw, descend, compressor) {\n        push(tw);\n        reset_variables(tw, compressor, this);\n        descend();\n        pop(tw);\n        return true;\n    });\n    def_reduce_vars(AST_Assign, function(tw, descend, compressor) {\n        var node = this;\n        if (node.left instanceof AST_Destructuring) {\n            suppress(node.left);\n            return;\n        }\n        var sym = node.left;\n        if (!(sym instanceof AST_SymbolRef)) return;\n        var def = sym.definition();\n        var safe = safe_to_assign(tw, def, sym.scope, node.right);\n        def.assignments++;\n        if (!safe) return;\n        var fixed = def.fixed;\n        if (!fixed && node.operator != \"=\") return;\n        var eq = node.operator == \"=\";\n        var value = eq ? node.right : node;\n        if (is_modified(compressor, tw, node, value, 0)) return;\n        def.references.push(sym);\n        if (!eq) def.chained = true;\n        def.fixed = eq ? function() {\n            return node.right;\n        } : function() {\n            return make_node(AST_Binary, node, {\n                operator: node.operator.slice(0, -1),\n                left: fixed instanceof AST_Node ? fixed : fixed(),\n                right: node.right\n            });\n        };\n        mark(tw, def, false);\n        node.right.walk(tw);\n        mark(tw, def, true);\n        mark_escaped(tw, def, sym.scope, node, value, 0, 1);\n        return true;\n    });\n    def_reduce_vars(AST_Binary, function(tw) {\n        if (!lazy_op.has(this.operator)) return;\n        this.left.walk(tw);\n        push(tw);\n        this.right.walk(tw);\n        pop(tw);\n        return true;\n    });\n    def_reduce_vars(AST_Block, function(tw, descend, compressor) {\n        reset_block_variables(compressor, this);\n    });\n    def_reduce_vars(AST_Case, function(tw) {\n        push(tw);\n        this.expression.walk(tw);\n        pop(tw);\n        push(tw);\n        walk_body(this, tw);\n        pop(tw);\n        return true;\n    });\n    def_reduce_vars(AST_Class, function(tw, descend) {\n        clear_flag(this, INLINED);\n        push(tw);\n        descend();\n        pop(tw);\n        return true;\n    });\n    def_reduce_vars(AST_Conditional, function(tw) {\n        this.condition.walk(tw);\n        push(tw);\n        this.consequent.walk(tw);\n        pop(tw);\n        push(tw);\n        this.alternative.walk(tw);\n        pop(tw);\n        return true;\n    });\n    def_reduce_vars(AST_Default, function(tw, descend) {\n        push(tw);\n        descend();\n        pop(tw);\n        return true;\n    });\n\n    function mark_lambda(tw, descend, compressor) {\n        clear_flag(this, INLINED);\n        push(tw);\n        reset_variables(tw, compressor, this);\n        if (this.uses_arguments) {\n            descend();\n            pop(tw);\n            return;\n        }\n        var iife;\n        if (!this.name\n            && (iife = tw.parent()) instanceof AST_Call\n            && iife.expression === this\n            && !iife.args.some(arg => arg instanceof AST_Expansion)\n            && this.argnames.every(arg_name => arg_name instanceof AST_Symbol)\n        ) {\n            // Virtually turn IIFE parameters into variable definitions:\n            //   (function(a,b) {...})(c,d) => (function() {var a=c,b=d; ...})()\n            // So existing transformation rules can work on them.\n            this.argnames.forEach((arg, i) => {\n                if (!arg.definition) return;\n                var d = arg.definition();\n                // Avoid setting fixed when there's more than one origin for a variable value\n                if (d.orig.length > 1) return;\n                if (d.fixed === undefined && (!this.uses_arguments || tw.has_directive(\"use strict\"))) {\n                    d.fixed = function() {\n                        return iife.args[i] || make_node(AST_Undefined, iife);\n                    };\n                    tw.loop_ids.set(d.id, tw.in_loop);\n                    mark(tw, d, true);\n                } else {\n                    d.fixed = false;\n                }\n            });\n        }\n        descend();\n        pop(tw);\n        return true;\n    }\n\n    def_reduce_vars(AST_Lambda, mark_lambda);\n\n    def_reduce_vars(AST_Do, function(tw, descend, compressor) {\n        reset_block_variables(compressor, this);\n        const saved_loop = tw.in_loop;\n        tw.in_loop = this;\n        push(tw);\n        this.body.walk(tw);\n        if (has_break_or_continue(this)) {\n            pop(tw);\n            push(tw);\n        }\n        this.condition.walk(tw);\n        pop(tw);\n        tw.in_loop = saved_loop;\n        return true;\n    });\n    def_reduce_vars(AST_For, function(tw, descend, compressor) {\n        reset_block_variables(compressor, this);\n        if (this.init) this.init.walk(tw);\n        const saved_loop = tw.in_loop;\n        tw.in_loop = this;\n        push(tw);\n        if (this.condition) this.condition.walk(tw);\n        this.body.walk(tw);\n        if (this.step) {\n            if (has_break_or_continue(this)) {\n                pop(tw);\n                push(tw);\n            }\n            this.step.walk(tw);\n        }\n        pop(tw);\n        tw.in_loop = saved_loop;\n        return true;\n    });\n    def_reduce_vars(AST_ForIn, function(tw, descend, compressor) {\n        reset_block_variables(compressor, this);\n        suppress(this.init);\n        this.object.walk(tw);\n        const saved_loop = tw.in_loop;\n        tw.in_loop = this;\n        push(tw);\n        this.body.walk(tw);\n        pop(tw);\n        tw.in_loop = saved_loop;\n        return true;\n    });\n\n    def_reduce_vars(AST_If, function(tw) {\n        this.condition.walk(tw);\n        push(tw);\n        this.body.walk(tw);\n        pop(tw);\n        if (this.alternative) {\n            push(tw);\n            this.alternative.walk(tw);\n            pop(tw);\n        }\n        return true;\n    });\n    def_reduce_vars(AST_LabeledStatement, function(tw) {\n        push(tw);\n        this.body.walk(tw);\n        pop(tw);\n        return true;\n    });\n    def_reduce_vars(AST_SymbolCatch, function() {\n        this.definition().fixed = false;\n    });\n\n    def_reduce_vars(AST_SymbolRef, function(tw, descend, compressor) {\n        var d = this.definition();\n        d.references.push(this);\n        if (d.references.length == 1\n            && !d.fixed\n            && d.orig[0] instanceof AST_SymbolDefun) {\n            tw.loop_ids.set(d.id, tw.in_loop);\n        }\n        var fixed_value;\n        if (d.fixed === undefined || !safe_to_read(tw, d)) {\n            d.fixed = false;\n        } else if (d.fixed) {\n            fixed_value = this.fixed_value();\n            if (\n                fixed_value instanceof AST_Lambda\n                && recursive_ref(tw, d)\n            ) {\n                d.recursive_refs++;\n            } else if (fixed_value\n                && !compressor.exposed(d)\n                && ref_once(tw, compressor, d)\n            ) {\n                d.single_use =\n                    fixed_value instanceof AST_Lambda && !fixed_value.pinned()\n                    || fixed_value instanceof AST_Class\n                    || d.scope === this.scope && fixed_value.is_constant_expression();\n            } else {\n                d.single_use = false;\n            }\n            if (is_modified(compressor, tw, this, fixed_value, 0, is_immutable(fixed_value))) {\n                if (d.single_use) {\n                    d.single_use = \"m\";\n                } else {\n                    d.fixed = false;\n                }\n            }\n        }\n        mark_escaped(tw, d, this.scope, this, fixed_value, 0, 1);\n    });\n    def_reduce_vars(AST_Toplevel, function(tw, descend, compressor) {\n        this.globals.forEach(function(def) {\n            reset_def(compressor, def);\n        });\n        reset_variables(tw, compressor, this);\n    });\n    def_reduce_vars(AST_Try, function(tw, descend, compressor) {\n        reset_block_variables(compressor, this);\n        push(tw);\n        walk_body(this, tw);\n        pop(tw);\n        if (this.bcatch) {\n            push(tw);\n            this.bcatch.walk(tw);\n            pop(tw);\n        }\n        if (this.bfinally) this.bfinally.walk(tw);\n        return true;\n    });\n    def_reduce_vars(AST_Unary, function(tw) {\n        var node = this;\n        if (node.operator !== \"++\" && node.operator !== \"--\") return;\n        var exp = node.expression;\n        if (!(exp instanceof AST_SymbolRef)) return;\n        var def = exp.definition();\n        var safe = safe_to_assign(tw, def, exp.scope, true);\n        def.assignments++;\n        if (!safe) return;\n        var fixed = def.fixed;\n        if (!fixed) return;\n        def.references.push(exp);\n        def.chained = true;\n        def.fixed = function() {\n            return make_node(AST_Binary, node, {\n                operator: node.operator.slice(0, -1),\n                left: make_node(AST_UnaryPrefix, node, {\n                    operator: \"+\",\n                    expression: fixed instanceof AST_Node ? fixed : fixed()\n                }),\n                right: make_node(AST_Number, node, {\n                    value: 1\n                })\n            });\n        };\n        mark(tw, def, true);\n        return true;\n    });\n    def_reduce_vars(AST_VarDef, function(tw, descend) {\n        var node = this;\n        if (node.name instanceof AST_Destructuring) {\n            suppress(node.name);\n            return;\n        }\n        var d = node.name.definition();\n        if (node.value) {\n            if (safe_to_assign(tw, d, node.name.scope, node.value)) {\n                d.fixed = function() {\n                    return node.value;\n                };\n                tw.loop_ids.set(d.id, tw.in_loop);\n                mark(tw, d, false);\n                descend();\n                mark(tw, d, true);\n                return true;\n            } else {\n                d.fixed = false;\n            }\n        }\n    });\n    def_reduce_vars(AST_While, function(tw, descend, compressor) {\n        reset_block_variables(compressor, this);\n        const saved_loop = tw.in_loop;\n        tw.in_loop = this;\n        push(tw);\n        descend();\n        pop(tw);\n        tw.in_loop = saved_loop;\n        return true;\n    });\n})(function(node, func) {\n    node.DEFMETHOD(\"reduce_vars\", func);\n});\n\nAST_Toplevel.DEFMETHOD(\"reset_opt_flags\", function(compressor) {\n    const self = this;\n    const reduce_vars = compressor.option(\"reduce_vars\");\n\n    const preparation = new TreeWalker(function(node, descend) {\n        clear_flag(node, CLEAR_BETWEEN_PASSES);\n        if (reduce_vars) {\n            if (compressor.top_retain\n                && node instanceof AST_Defun  // Only functions are retained\n                && preparation.parent() === self\n            ) {\n                set_flag(node, TOP);\n            }\n            return node.reduce_vars(preparation, descend, compressor);\n        }\n    });\n    // Stack of look-up tables to keep track of whether a `SymbolDef` has been\n    // properly assigned before use:\n    // - `push()` & `pop()` when visiting conditional branches\n    preparation.safe_ids = Object.create(null);\n    preparation.in_loop = null;\n    preparation.loop_ids = new Map();\n    preparation.defs_to_safe_ids = new Map();\n    self.walk(preparation);\n});\n\nAST_Symbol.DEFMETHOD(\"fixed_value\", function() {\n    var fixed = this.thedef.fixed;\n    if (!fixed || fixed instanceof AST_Node) return fixed;\n    return fixed();\n});\n\nAST_SymbolRef.DEFMETHOD(\"is_immutable\", function() {\n    var orig = this.definition().orig;\n    return orig.length == 1 && orig[0] instanceof AST_SymbolLambda;\n});\n\nfunction is_func_expr(node) {\n    return node instanceof AST_Arrow || node instanceof AST_Function;\n}\n\nfunction is_lhs_read_only(lhs) {\n    if (lhs instanceof AST_This) return true;\n    if (lhs instanceof AST_SymbolRef) return lhs.definition().orig[0] instanceof AST_SymbolLambda;\n    if (lhs instanceof AST_PropAccess) {\n        lhs = lhs.expression;\n        if (lhs instanceof AST_SymbolRef) {\n            if (lhs.is_immutable()) return false;\n            lhs = lhs.fixed_value();\n        }\n        if (!lhs) return true;\n        if (lhs instanceof AST_RegExp) return false;\n        if (lhs instanceof AST_Constant) return true;\n        return is_lhs_read_only(lhs);\n    }\n    return false;\n}\n\nfunction is_ref_of(ref, type) {\n    if (!(ref instanceof AST_SymbolRef)) return false;\n    var orig = ref.definition().orig;\n    for (var i = orig.length; --i >= 0;) {\n        if (orig[i] instanceof type) return true;\n    }\n}\n\nfunction find_scope(tw) {\n    for (let i = 0;;i++) {\n        const p = tw.parent(i);\n        if (p instanceof AST_Toplevel) return p;\n        if (p instanceof AST_Lambda) return p;\n        if (p.block_scope) return p.block_scope;\n    }\n}\n\nfunction find_variable(compressor, name) {\n    var scope, i = 0;\n    while (scope = compressor.parent(i++)) {\n        if (scope instanceof AST_Scope) break;\n        if (scope instanceof AST_Catch && scope.argname) {\n            scope = scope.argname.definition().scope;\n            break;\n        }\n    }\n    return scope.find_variable(name);\n}\n\nfunction make_sequence(orig, expressions) {\n    if (expressions.length == 1) return expressions[0];\n    if (expressions.length == 0) throw new Error(\"trying to create a sequence with length zero!\");\n    return make_node(AST_Sequence, orig, {\n        expressions: expressions.reduce(merge_sequence, [])\n    });\n}\n\nfunction make_node_from_constant(val, orig) {\n    switch (typeof val) {\n      case \"string\":\n        return make_node(AST_String, orig, {\n            value: val\n        });\n      case \"number\":\n        if (isNaN(val)) return make_node(AST_NaN, orig);\n        if (isFinite(val)) {\n            return 1 / val < 0 ? make_node(AST_UnaryPrefix, orig, {\n                operator: \"-\",\n                expression: make_node(AST_Number, orig, { value: -val })\n            }) : make_node(AST_Number, orig, { value: val });\n        }\n        return val < 0 ? make_node(AST_UnaryPrefix, orig, {\n            operator: \"-\",\n            expression: make_node(AST_Infinity, orig)\n        }) : make_node(AST_Infinity, orig);\n      case \"boolean\":\n        return make_node(val ? AST_True : AST_False, orig);\n      case \"undefined\":\n        return make_node(AST_Undefined, orig);\n      default:\n        if (val === null) {\n            return make_node(AST_Null, orig, { value: null });\n        }\n        if (val instanceof RegExp) {\n            return make_node(AST_RegExp, orig, {\n                value: {\n                    source: regexp_source_fix(val.source),\n                    flags: val.flags\n                }\n            });\n        }\n        throw new Error(string_template(\"Can't handle constant of type: {type}\", {\n            type: typeof val\n        }));\n    }\n}\n\n// we shouldn't compress (1,func)(something) to\n// func(something) because that changes the meaning of\n// the func (becomes lexical instead of global).\nfunction maintain_this_binding(parent, orig, val) {\n    if (parent instanceof AST_UnaryPrefix && parent.operator == \"delete\"\n        || parent instanceof AST_Call && parent.expression === orig\n            && (val instanceof AST_PropAccess || val instanceof AST_SymbolRef && val.name == \"eval\")) {\n        return make_sequence(orig, [ make_node(AST_Number, orig, { value: 0 }), val ]);\n    }\n    return val;\n}\n\nfunction merge_sequence(array, node) {\n    if (node instanceof AST_Sequence) {\n        array.push(...node.expressions);\n    } else {\n        array.push(node);\n    }\n    return array;\n}\n\nfunction as_statement_array(thing) {\n    if (thing === null) return [];\n    if (thing instanceof AST_BlockStatement) return thing.body;\n    if (thing instanceof AST_EmptyStatement) return [];\n    if (thing instanceof AST_Statement) return [ thing ];\n    throw new Error(\"Can't convert thing to statement array\");\n}\n\nfunction is_empty(thing) {\n    if (thing === null) return true;\n    if (thing instanceof AST_EmptyStatement) return true;\n    if (thing instanceof AST_BlockStatement) return thing.body.length == 0;\n    return false;\n}\n\nfunction can_be_evicted_from_block(node) {\n    return !(\n        node instanceof AST_DefClass ||\n        node instanceof AST_Defun ||\n        node instanceof AST_Let ||\n        node instanceof AST_Const ||\n        node instanceof AST_Export ||\n        node instanceof AST_Import\n    );\n}\n\nfunction loop_body(x) {\n    if (x instanceof AST_IterationStatement) {\n        return x.body instanceof AST_BlockStatement ? x.body : x;\n    }\n    return x;\n}\n\nfunction is_iife_call(node) {\n    // Used to determine whether the node can benefit from negation.\n    // Not the case with arrow functions (you need an extra set of parens).\n    if (node.TYPE != \"Call\") return false;\n    return node.expression instanceof AST_Function || is_iife_call(node.expression);\n}\n\nfunction is_undeclared_ref(node) {\n    return node instanceof AST_SymbolRef && node.definition().undeclared;\n}\n\nvar global_names = makePredicate(\"Array Boolean clearInterval clearTimeout console Date decodeURI decodeURIComponent encodeURI encodeURIComponent Error escape eval EvalError Function isFinite isNaN JSON Math Number parseFloat parseInt RangeError ReferenceError RegExp Object setInterval setTimeout String SyntaxError TypeError unescape URIError\");\nAST_SymbolRef.DEFMETHOD(\"is_declared\", function(compressor) {\n    return !this.definition().undeclared\n        || compressor.option(\"unsafe\") && global_names.has(this.name);\n});\n\nvar identifier_atom = makePredicate(\"Infinity NaN undefined\");\nfunction is_identifier_atom(node) {\n    return node instanceof AST_Infinity\n        || node instanceof AST_NaN\n        || node instanceof AST_Undefined;\n}\n\n// Tighten a bunch of statements together. Used whenever there is a block.\nfunction tighten_body(statements, compressor) {\n    var in_loop, in_try;\n    var scope = compressor.find_parent(AST_Scope).get_defun_scope();\n    find_loop_scope_try();\n    var CHANGED, max_iter = 10;\n    do {\n        CHANGED = false;\n        eliminate_spurious_blocks(statements);\n        if (compressor.option(\"dead_code\")) {\n            eliminate_dead_code(statements, compressor);\n        }\n        if (compressor.option(\"if_return\")) {\n            handle_if_return(statements, compressor);\n        }\n        if (compressor.sequences_limit > 0) {\n            sequencesize(statements, compressor);\n            sequencesize_2(statements, compressor);\n        }\n        if (compressor.option(\"join_vars\")) {\n            join_consecutive_vars(statements);\n        }\n        if (compressor.option(\"collapse_vars\")) {\n            collapse(statements, compressor);\n        }\n    } while (CHANGED && max_iter-- > 0);\n\n    function find_loop_scope_try() {\n        var node = compressor.self(), level = 0;\n        do {\n            if (node instanceof AST_Catch || node instanceof AST_Finally) {\n                level++;\n            } else if (node instanceof AST_IterationStatement) {\n                in_loop = true;\n            } else if (node instanceof AST_Scope) {\n                scope = node;\n                break;\n            } else if (node instanceof AST_Try) {\n                in_try = true;\n            }\n        } while (node = compressor.parent(level++));\n    }\n\n    // Search from right to left for assignment-like expressions:\n    // - `var a = x;`\n    // - `a = x;`\n    // - `++a`\n    // For each candidate, scan from left to right for first usage, then try\n    // to fold assignment into the site for compression.\n    // Will not attempt to collapse assignments into or past code blocks\n    // which are not sequentially executed, e.g. loops and conditionals.\n    function collapse(statements, compressor) {\n        if (scope.pinned()) return statements;\n        var args;\n        var candidates = [];\n        var stat_index = statements.length;\n        var scanner = new TreeTransformer(function(node) {\n            if (abort) return node;\n            // Skip nodes before `candidate` as quickly as possible\n            if (!hit) {\n                if (node !== hit_stack[hit_index]) return node;\n                hit_index++;\n                if (hit_index < hit_stack.length) return handle_custom_scan_order(node);\n                hit = true;\n                stop_after = find_stop(node, 0);\n                if (stop_after === node) abort = true;\n                return node;\n            }\n            // Stop immediately if these node types are encountered\n            var parent = scanner.parent();\n            if (node instanceof AST_Assign && node.operator != \"=\" && lhs.equivalent_to(node.left)\n                || node instanceof AST_Await\n                || node instanceof AST_Call && lhs instanceof AST_PropAccess && lhs.equivalent_to(node.expression)\n                || node instanceof AST_Debugger\n                || node instanceof AST_Destructuring\n                || node instanceof AST_Expansion\n                   && node.expression instanceof AST_Symbol\n                   && node.expression.definition().references.length > 1\n                || node instanceof AST_IterationStatement && !(node instanceof AST_For)\n                || node instanceof AST_LoopControl\n                || node instanceof AST_Try\n                || node instanceof AST_With\n                || node instanceof AST_Yield\n                || node instanceof AST_Export\n                || node instanceof AST_Class\n                || parent instanceof AST_For && node !== parent.init\n                || !replace_all\n                    && (\n                        node instanceof AST_SymbolRef\n                        && !node.is_declared(compressor)\n                        && !pure_prop_access_globals.has(node))\n                || node instanceof AST_SymbolRef\n                    && parent instanceof AST_Call\n                    && has_annotation(parent, _NOINLINE)\n            ) {\n                abort = true;\n                return node;\n            }\n            // Stop only if candidate is found within conditional branches\n            if (!stop_if_hit && (!lhs_local || !replace_all)\n                && (parent instanceof AST_Binary && lazy_op.has(parent.operator) && parent.left !== node\n                    || parent instanceof AST_Conditional && parent.condition !== node\n                    || parent instanceof AST_If && parent.condition !== node)) {\n                stop_if_hit = parent;\n            }\n            // Replace variable with assignment when found\n            if (can_replace\n                && !(node instanceof AST_SymbolDeclaration)\n                && lhs.equivalent_to(node)\n            ) {\n                if (stop_if_hit) {\n                    abort = true;\n                    return node;\n                }\n                if (is_lhs(node, parent)) {\n                    if (value_def) replaced++;\n                    return node;\n                } else {\n                    replaced++;\n                    if (value_def && candidate instanceof AST_VarDef) return node;\n                }\n                CHANGED = abort = true;\n                compressor.info(\"Collapsing {name} [{file}:{line},{col}]\", {\n                    name: node.print_to_string(),\n                    file: node.start.file,\n                    line: node.start.line,\n                    col: node.start.col\n                });\n                if (candidate instanceof AST_UnaryPostfix) {\n                    return make_node(AST_UnaryPrefix, candidate, candidate);\n                }\n                if (candidate instanceof AST_VarDef) {\n                    var def = candidate.name.definition();\n                    var value = candidate.value;\n                    if (def.references.length - def.replaced == 1 && !compressor.exposed(def)) {\n                        def.replaced++;\n                        if (funarg && is_identifier_atom(value)) {\n                            return value.transform(compressor);\n                        } else {\n                            return maintain_this_binding(parent, node, value);\n                        }\n                    }\n                    return make_node(AST_Assign, candidate, {\n                        operator: \"=\",\n                        left: make_node(AST_SymbolRef, candidate.name, candidate.name),\n                        right: value\n                    });\n                }\n                clear_flag(candidate, WRITE_ONLY);\n                return candidate;\n            }\n            // These node types have child nodes that execute sequentially,\n            // but are otherwise not safe to scan into or beyond them.\n            var sym;\n            if (node instanceof AST_Call\n                || node instanceof AST_Exit\n                    && (side_effects || lhs instanceof AST_PropAccess || may_modify(lhs))\n                || node instanceof AST_PropAccess\n                    && (side_effects || node.expression.may_throw_on_access(compressor))\n                || node instanceof AST_SymbolRef\n                    && (lvalues.get(node.name) || side_effects && may_modify(node))\n                || node instanceof AST_VarDef && node.value\n                    && (lvalues.has(node.name.name) || side_effects && may_modify(node.name))\n                || (sym = is_lhs(node.left, node))\n                    && (sym instanceof AST_PropAccess || lvalues.has(sym.name))\n                || may_throw\n                    && (in_try ? node.has_side_effects(compressor) : side_effects_external(node))) {\n                stop_after = node;\n                if (node instanceof AST_Scope) abort = true;\n            }\n            return handle_custom_scan_order(node);\n        }, function(node) {\n            if (abort) return;\n            if (stop_after === node) abort = true;\n            if (stop_if_hit === node) stop_if_hit = null;\n        });\n        var multi_replacer = new TreeTransformer(function(node) {\n            if (abort) return node;\n            // Skip nodes before `candidate` as quickly as possible\n            if (!hit) {\n                if (node !== hit_stack[hit_index]) return node;\n                hit_index++;\n                if (hit_index < hit_stack.length) return;\n                hit = true;\n                return node;\n            }\n            // Replace variable when found\n            if (node instanceof AST_SymbolRef\n                && node.name == def.name) {\n                if (!--replaced) abort = true;\n                if (is_lhs(node, multi_replacer.parent())) return node;\n                def.replaced++;\n                value_def.replaced--;\n                return candidate.value;\n            }\n            // Skip (non-executed) functions and (leading) default case in switch statements\n            if (node instanceof AST_Default || node instanceof AST_Scope) return node;\n        });\n        while (--stat_index >= 0) {\n            // Treat parameters as collapsible in IIFE, i.e.\n            //   function(a, b){ ... }(x());\n            // would be translated into equivalent assignments:\n            //   var a = x(), b = undefined;\n            if (stat_index == 0 && compressor.option(\"unused\")) extract_args();\n            // Find collapsible assignments\n            var hit_stack = [];\n            extract_candidates(statements[stat_index]);\n            while (candidates.length > 0) {\n                hit_stack = candidates.pop();\n                var hit_index = 0;\n                var candidate = hit_stack[hit_stack.length - 1];\n                var value_def = null;\n                var stop_after = null;\n                var stop_if_hit = null;\n                var lhs = get_lhs(candidate);\n                if (!lhs || is_lhs_read_only(lhs) || lhs.has_side_effects(compressor)) continue;\n                // Locate symbols which may execute code outside of scanning range\n                var lvalues = get_lvalues(candidate);\n                var lhs_local = is_lhs_local(lhs);\n                if (lhs instanceof AST_SymbolRef) lvalues.set(lhs.name, false);\n                var side_effects = value_has_side_effects(candidate);\n                var replace_all = replace_all_symbols();\n                var may_throw = candidate.may_throw(compressor);\n                var funarg = candidate.name instanceof AST_SymbolFunarg;\n                var hit = funarg;\n                var abort = false, replaced = 0, can_replace = !args || !hit;\n                if (!can_replace) {\n                    for (var j = compressor.self().argnames.lastIndexOf(candidate.name) + 1; !abort && j < args.length; j++) {\n                        args[j].transform(scanner);\n                    }\n                    can_replace = true;\n                }\n                for (var i = stat_index; !abort && i < statements.length; i++) {\n                    statements[i].transform(scanner);\n                }\n                if (value_def) {\n                    var def = candidate.name.definition();\n                    if (abort && def.references.length - def.replaced > replaced) replaced = false;\n                    else {\n                        abort = false;\n                        hit_index = 0;\n                        hit = funarg;\n                        for (var i = stat_index; !abort && i < statements.length; i++) {\n                            statements[i].transform(multi_replacer);\n                        }\n                        value_def.single_use = false;\n                    }\n                }\n                if (replaced && !remove_candidate(candidate)) statements.splice(stat_index, 1);\n            }\n        }\n\n        function handle_custom_scan_order(node) {\n            // Skip (non-executed) functions\n            if (node instanceof AST_Scope) return node;\n\n            // Scan case expressions first in a switch statement\n            if (node instanceof AST_Switch) {\n                node.expression = node.expression.transform(scanner);\n                for (var i = 0, len = node.body.length; !abort && i < len; i++) {\n                    var branch = node.body[i];\n                    if (branch instanceof AST_Case) {\n                        if (!hit) {\n                            if (branch !== hit_stack[hit_index]) continue;\n                            hit_index++;\n                        }\n                        branch.expression = branch.expression.transform(scanner);\n                        if (!replace_all) break;\n                    }\n                }\n                abort = true;\n                return node;\n            }\n        }\n\n        function redefined_within_scope(def, scope) {\n            if (def.global) return false;\n            let cur_scope = def.scope;\n            while (cur_scope && cur_scope !== scope) {\n                if (cur_scope.variables.has(def.name)) return true;\n                cur_scope = cur_scope.parent_scope;\n            }\n            return false;\n        }\n\n        function has_overlapping_symbol(fn, arg, fn_strict) {\n            var found = false, scan_this = !(fn instanceof AST_Arrow);\n            arg.walk(new TreeWalker(function(node, descend) {\n                if (found) return true;\n                if (node instanceof AST_SymbolRef && (fn.variables.has(node.name) || redefined_within_scope(node.definition(), fn))) {\n                    var s = node.definition().scope;\n                    if (s !== scope) while (s = s.parent_scope) {\n                        if (s === scope) return true;\n                    }\n                    return found = true;\n                }\n                if ((fn_strict || scan_this) && node instanceof AST_This) {\n                    return found = true;\n                }\n                if (node instanceof AST_Scope && !(node instanceof AST_Arrow)) {\n                    var prev = scan_this;\n                    scan_this = false;\n                    descend();\n                    scan_this = prev;\n                    return true;\n                }\n            }));\n            return found;\n        }\n\n        function extract_args() {\n            var iife, fn = compressor.self();\n            if (is_func_expr(fn)\n                && !fn.name\n                && !fn.uses_arguments\n                && !fn.pinned()\n                && (iife = compressor.parent()) instanceof AST_Call\n                && iife.expression === fn\n                && iife.args.every((arg) => !(arg instanceof AST_Expansion))\n            ) {\n                var fn_strict = compressor.has_directive(\"use strict\");\n                if (fn_strict && !member(fn_strict, fn.body)) fn_strict = false;\n                var len = fn.argnames.length;\n                args = iife.args.slice(len);\n                var names = new Set();\n                for (var i = len; --i >= 0;) {\n                    var sym = fn.argnames[i];\n                    var arg = iife.args[i];\n                    // The following two line fix is a duplicate of the fix at\n                    // https://github.com/terser/terser/commit/011d3eb08cefe6922c7d1bdfa113fc4aeaca1b75\n                    // This might mean that these two pieces of code (one here in collapse_vars and another in reduce_vars\n                    // Might be doing the exact same thing.\n                    const def = sym.definition && sym.definition();\n                    const is_reassigned = def && def.orig.length > 1;\n                    if (is_reassigned) continue;\n                    args.unshift(make_node(AST_VarDef, sym, {\n                        name: sym,\n                        value: arg\n                    }));\n                    if (names.has(sym.name)) continue;\n                    names.add(sym.name);\n                    if (sym instanceof AST_Expansion) {\n                        var elements = iife.args.slice(i);\n                        if (elements.every((arg) =>\n                            !has_overlapping_symbol(fn, arg, fn_strict)\n                        )) {\n                            candidates.unshift([ make_node(AST_VarDef, sym, {\n                                name: sym.expression,\n                                value: make_node(AST_Array, iife, {\n                                    elements: elements\n                                })\n                            }) ]);\n                        }\n                    } else {\n                        if (!arg) {\n                            arg = make_node(AST_Undefined, sym).transform(compressor);\n                        } else if (arg instanceof AST_Lambda && arg.pinned()\n                            || has_overlapping_symbol(fn, arg, fn_strict)\n                        ) {\n                            arg = null;\n                        }\n                        if (arg) candidates.unshift([ make_node(AST_VarDef, sym, {\n                            name: sym,\n                            value: arg\n                        }) ]);\n                    }\n                }\n            }\n        }\n\n        function extract_candidates(expr) {\n            hit_stack.push(expr);\n            if (expr instanceof AST_Assign) {\n                if (!expr.left.has_side_effects(compressor)) {\n                    candidates.push(hit_stack.slice());\n                }\n                extract_candidates(expr.right);\n            } else if (expr instanceof AST_Binary) {\n                extract_candidates(expr.left);\n                extract_candidates(expr.right);\n            } else if (expr instanceof AST_Call && !has_annotation(expr, _NOINLINE)) {\n                extract_candidates(expr.expression);\n                expr.args.forEach(extract_candidates);\n            } else if (expr instanceof AST_Case) {\n                extract_candidates(expr.expression);\n            } else if (expr instanceof AST_Conditional) {\n                extract_candidates(expr.condition);\n                extract_candidates(expr.consequent);\n                extract_candidates(expr.alternative);\n            } else if (expr instanceof AST_Definitions) {\n                var len = expr.definitions.length;\n                // limit number of trailing variable definitions for consideration\n                var i = len - 200;\n                if (i < 0) i = 0;\n                for (; i < len; i++) {\n                    extract_candidates(expr.definitions[i]);\n                }\n            } else if (expr instanceof AST_DWLoop) {\n                extract_candidates(expr.condition);\n                if (!(expr.body instanceof AST_Block)) {\n                    extract_candidates(expr.body);\n                }\n            } else if (expr instanceof AST_Exit) {\n                if (expr.value) extract_candidates(expr.value);\n            } else if (expr instanceof AST_For) {\n                if (expr.init) extract_candidates(expr.init);\n                if (expr.condition) extract_candidates(expr.condition);\n                if (expr.step) extract_candidates(expr.step);\n                if (!(expr.body instanceof AST_Block)) {\n                    extract_candidates(expr.body);\n                }\n            } else if (expr instanceof AST_ForIn) {\n                extract_candidates(expr.object);\n                if (!(expr.body instanceof AST_Block)) {\n                    extract_candidates(expr.body);\n                }\n            } else if (expr instanceof AST_If) {\n                extract_candidates(expr.condition);\n                if (!(expr.body instanceof AST_Block)) {\n                    extract_candidates(expr.body);\n                }\n                if (expr.alternative && !(expr.alternative instanceof AST_Block)) {\n                    extract_candidates(expr.alternative);\n                }\n            } else if (expr instanceof AST_Sequence) {\n                expr.expressions.forEach(extract_candidates);\n            } else if (expr instanceof AST_SimpleStatement) {\n                extract_candidates(expr.body);\n            } else if (expr instanceof AST_Switch) {\n                extract_candidates(expr.expression);\n                expr.body.forEach(extract_candidates);\n            } else if (expr instanceof AST_Unary) {\n                if (expr.operator == \"++\" || expr.operator == \"--\") {\n                    candidates.push(hit_stack.slice());\n                }\n            } else if (expr instanceof AST_VarDef) {\n                if (expr.value) {\n                    candidates.push(hit_stack.slice());\n                    extract_candidates(expr.value);\n                }\n            }\n            hit_stack.pop();\n        }\n\n        function find_stop(node, level, write_only) {\n            var parent = scanner.parent(level);\n            if (parent instanceof AST_Assign) {\n                if (write_only\n                    && !(parent.left instanceof AST_PropAccess\n                        || lvalues.has(parent.left.name))) {\n                    return find_stop(parent, level + 1, write_only);\n                }\n                return node;\n            }\n            if (parent instanceof AST_Binary) {\n                if (write_only && (!lazy_op.has(parent.operator) || parent.left === node)) {\n                    return find_stop(parent, level + 1, write_only);\n                }\n                return node;\n            }\n            if (parent instanceof AST_Call) return node;\n            if (parent instanceof AST_Case) return node;\n            if (parent instanceof AST_Conditional) {\n                if (write_only && parent.condition === node) {\n                    return find_stop(parent, level + 1, write_only);\n                }\n                return node;\n            }\n            if (parent instanceof AST_Definitions) {\n                return find_stop(parent, level + 1, true);\n            }\n            if (parent instanceof AST_Exit) {\n                return write_only ? find_stop(parent, level + 1, write_only) : node;\n            }\n            if (parent instanceof AST_If) {\n                if (write_only && parent.condition === node) {\n                    return find_stop(parent, level + 1, write_only);\n                }\n                return node;\n            }\n            if (parent instanceof AST_IterationStatement) return node;\n            if (parent instanceof AST_Sequence) {\n                return find_stop(parent, level + 1, parent.tail_node() !== node);\n            }\n            if (parent instanceof AST_SimpleStatement) {\n                return find_stop(parent, level + 1, true);\n            }\n            if (parent instanceof AST_Switch) return node;\n            if (parent instanceof AST_VarDef) return node;\n            return null;\n        }\n\n        function mangleable_var(var_def) {\n            var value = var_def.value;\n            if (!(value instanceof AST_SymbolRef)) return;\n            if (value.name == \"arguments\") return;\n            var def = value.definition();\n            if (def.undeclared) return;\n            return value_def = def;\n        }\n\n        function get_lhs(expr) {\n            if (expr instanceof AST_VarDef && expr.name instanceof AST_SymbolDeclaration) {\n                var def = expr.name.definition();\n                if (!member(expr.name, def.orig)) return;\n                var referenced = def.references.length - def.replaced;\n                if (!referenced) return;\n                var declared = def.orig.length - def.eliminated;\n                if (declared > 1 && !(expr.name instanceof AST_SymbolFunarg)\n                    || (referenced > 1 ? mangleable_var(expr) : !compressor.exposed(def))) {\n                    return make_node(AST_SymbolRef, expr.name, expr.name);\n                }\n            } else {\n                const lhs = expr[expr instanceof AST_Assign ? \"left\" : \"expression\"];\n                return !is_ref_of(lhs, AST_SymbolConst)\n                    && !is_ref_of(lhs, AST_SymbolLet) && lhs;\n            }\n        }\n\n        function get_rvalue(expr) {\n            return expr[expr instanceof AST_Assign ? \"right\" : \"value\"];\n        }\n\n        function get_lvalues(expr) {\n            var lvalues = new Map();\n            if (expr instanceof AST_Unary) return lvalues;\n            var tw = new TreeWalker(function(node) {\n                var sym = node;\n                while (sym instanceof AST_PropAccess) sym = sym.expression;\n                if (sym instanceof AST_SymbolRef || sym instanceof AST_This) {\n                    lvalues.set(sym.name, lvalues.get(sym.name) || is_modified(compressor, tw, node, node, 0));\n                }\n            });\n            get_rvalue(expr).walk(tw);\n            return lvalues;\n        }\n\n        function remove_candidate(expr) {\n            if (expr.name instanceof AST_SymbolFunarg) {\n                var iife = compressor.parent(), argnames = compressor.self().argnames;\n                var index = argnames.indexOf(expr.name);\n                if (index < 0) {\n                    iife.args.length = Math.min(iife.args.length, argnames.length - 1);\n                } else {\n                    var args = iife.args;\n                    if (args[index]) args[index] = make_node(AST_Number, args[index], {\n                        value: 0\n                    });\n                }\n                return true;\n            }\n            var found = false;\n            return statements[stat_index].transform(new TreeTransformer(function(node, descend, in_list) {\n                if (found) return node;\n                if (node === expr || node.body === expr) {\n                    found = true;\n                    if (node instanceof AST_VarDef) {\n                        node.value = node.name instanceof AST_SymbolConst\n                             ? make_node(AST_Undefined, node.value)  // `const` always needs value.\n                             : null;\n                        return node;\n                    }\n                    return in_list ? MAP.skip : null;\n                }\n            }, function(node) {\n                if (node instanceof AST_Sequence) switch (node.expressions.length) {\n                  case 0: return null;\n                  case 1: return node.expressions[0];\n                }\n            }));\n        }\n\n        function is_lhs_local(lhs) {\n            while (lhs instanceof AST_PropAccess) lhs = lhs.expression;\n            return lhs instanceof AST_SymbolRef\n                && lhs.definition().scope === scope\n                && !(in_loop\n                    && (lvalues.has(lhs.name)\n                        || candidate instanceof AST_Unary\n                        || candidate instanceof AST_Assign && candidate.operator != \"=\"));\n        }\n\n        function value_has_side_effects(expr) {\n            if (expr instanceof AST_Unary) return unary_side_effects.has(expr.operator);\n            return get_rvalue(expr).has_side_effects(compressor);\n        }\n\n        function replace_all_symbols() {\n            if (side_effects) return false;\n            if (value_def) return true;\n            if (lhs instanceof AST_SymbolRef) {\n                var def = lhs.definition();\n                if (def.references.length - def.replaced == (candidate instanceof AST_VarDef ? 1 : 2)) {\n                    return true;\n                }\n            }\n            return false;\n        }\n\n        function may_modify(sym) {\n            if (!sym.definition) return true; // AST_Destructuring\n            var def = sym.definition();\n            if (def.orig.length == 1 && def.orig[0] instanceof AST_SymbolDefun) return false;\n            if (def.scope.get_defun_scope() !== scope) return true;\n            return !def.references.every((ref) => {\n                var s = ref.scope.get_defun_scope();\n                // \"block\" scope within AST_Catch\n                if (s.TYPE == \"Scope\") s = s.parent_scope;\n                return s === scope;\n            });\n        }\n\n        function side_effects_external(node, lhs) {\n            if (node instanceof AST_Assign) return side_effects_external(node.left, true);\n            if (node instanceof AST_Unary) return side_effects_external(node.expression, true);\n            if (node instanceof AST_VarDef) return node.value && side_effects_external(node.value);\n            if (lhs) {\n                if (node instanceof AST_Dot) return side_effects_external(node.expression, true);\n                if (node instanceof AST_Sub) return side_effects_external(node.expression, true);\n                if (node instanceof AST_SymbolRef) return node.definition().scope !== scope;\n            }\n            return false;\n        }\n    }\n\n    function eliminate_spurious_blocks(statements) {\n        var seen_dirs = [];\n        for (var i = 0; i < statements.length;) {\n            var stat = statements[i];\n            if (stat instanceof AST_BlockStatement && stat.body.every(can_be_evicted_from_block)) {\n                CHANGED = true;\n                eliminate_spurious_blocks(stat.body);\n                statements.splice(i, 1, ...stat.body);\n                i += stat.body.length;\n            } else if (stat instanceof AST_EmptyStatement) {\n                CHANGED = true;\n                statements.splice(i, 1);\n            } else if (stat instanceof AST_Directive) {\n                if (seen_dirs.indexOf(stat.value) < 0) {\n                    i++;\n                    seen_dirs.push(stat.value);\n                } else {\n                    CHANGED = true;\n                    statements.splice(i, 1);\n                }\n            } else i++;\n        }\n    }\n\n    function handle_if_return(statements, compressor) {\n        var self = compressor.self();\n        var multiple_if_returns = has_multiple_if_returns(statements);\n        var in_lambda = self instanceof AST_Lambda;\n        for (var i = statements.length; --i >= 0;) {\n            var stat = statements[i];\n            var j = next_index(i);\n            var next = statements[j];\n\n            if (in_lambda && !next && stat instanceof AST_Return) {\n                if (!stat.value) {\n                    CHANGED = true;\n                    statements.splice(i, 1);\n                    continue;\n                }\n                if (stat.value instanceof AST_UnaryPrefix && stat.value.operator == \"void\") {\n                    CHANGED = true;\n                    statements[i] = make_node(AST_SimpleStatement, stat, {\n                        body: stat.value.expression\n                    });\n                    continue;\n                }\n            }\n\n            if (stat instanceof AST_If) {\n                var ab = aborts(stat.body);\n                if (can_merge_flow(ab)) {\n                    if (ab.label) {\n                        remove(ab.label.thedef.references, ab);\n                    }\n                    CHANGED = true;\n                    stat = stat.clone();\n                    stat.condition = stat.condition.negate(compressor);\n                    var body = as_statement_array_with_return(stat.body, ab);\n                    stat.body = make_node(AST_BlockStatement, stat, {\n                        body: as_statement_array(stat.alternative).concat(extract_functions())\n                    });\n                    stat.alternative = make_node(AST_BlockStatement, stat, {\n                        body: body\n                    });\n                    statements[i] = stat.transform(compressor);\n                    continue;\n                }\n\n                var ab = aborts(stat.alternative);\n                if (can_merge_flow(ab)) {\n                    if (ab.label) {\n                        remove(ab.label.thedef.references, ab);\n                    }\n                    CHANGED = true;\n                    stat = stat.clone();\n                    stat.body = make_node(AST_BlockStatement, stat.body, {\n                        body: as_statement_array(stat.body).concat(extract_functions())\n                    });\n                    var body = as_statement_array_with_return(stat.alternative, ab);\n                    stat.alternative = make_node(AST_BlockStatement, stat.alternative, {\n                        body: body\n                    });\n                    statements[i] = stat.transform(compressor);\n                    continue;\n                }\n            }\n\n            if (stat instanceof AST_If && stat.body instanceof AST_Return) {\n                var value = stat.body.value;\n                //---\n                // pretty silly case, but:\n                // if (foo()) return; return; ==> foo(); return;\n                if (!value && !stat.alternative\n                    && (in_lambda && !next || next instanceof AST_Return && !next.value)) {\n                    CHANGED = true;\n                    statements[i] = make_node(AST_SimpleStatement, stat.condition, {\n                        body: stat.condition\n                    });\n                    continue;\n                }\n                //---\n                // if (foo()) return x; return y; ==> return foo() ? x : y;\n                if (value && !stat.alternative && next instanceof AST_Return && next.value) {\n                    CHANGED = true;\n                    stat = stat.clone();\n                    stat.alternative = next;\n                    statements[i] = stat.transform(compressor);\n                    statements.splice(j, 1);\n                    continue;\n                }\n                //---\n                // if (foo()) return x; [ return ; ] ==> return foo() ? x : undefined;\n                if (value && !stat.alternative\n                    && (!next && in_lambda && multiple_if_returns\n                        || next instanceof AST_Return)) {\n                    CHANGED = true;\n                    stat = stat.clone();\n                    stat.alternative = next || make_node(AST_Return, stat, {\n                        value: null\n                    });\n                    statements[i] = stat.transform(compressor);\n                    if (next) statements.splice(j, 1);\n                    continue;\n                }\n                //---\n                // if (a) return b; if (c) return d; e; ==> return a ? b : c ? d : void e;\n                //\n                // if sequences is not enabled, this can lead to an endless loop (issue #866).\n                // however, with sequences on this helps producing slightly better output for\n                // the example code.\n                var prev = statements[prev_index(i)];\n                if (compressor.option(\"sequences\") && in_lambda && !stat.alternative\n                    && prev instanceof AST_If && prev.body instanceof AST_Return\n                    && next_index(j) == statements.length && next instanceof AST_SimpleStatement) {\n                    CHANGED = true;\n                    stat = stat.clone();\n                    stat.alternative = make_node(AST_BlockStatement, next, {\n                        body: [\n                            next,\n                            make_node(AST_Return, next, {\n                                value: null\n                            })\n                        ]\n                    });\n                    statements[i] = stat.transform(compressor);\n                    statements.splice(j, 1);\n                    continue;\n                }\n            }\n        }\n\n        function has_multiple_if_returns(statements) {\n            var n = 0;\n            for (var i = statements.length; --i >= 0;) {\n                var stat = statements[i];\n                if (stat instanceof AST_If && stat.body instanceof AST_Return) {\n                    if (++n > 1) return true;\n                }\n            }\n            return false;\n        }\n\n        function is_return_void(value) {\n            return !value || value instanceof AST_UnaryPrefix && value.operator == \"void\";\n        }\n\n        function can_merge_flow(ab) {\n            if (!ab) return false;\n            for (var j = i + 1, len = statements.length; j < len; j++) {\n                var stat = statements[j];\n                if (stat instanceof AST_Const || stat instanceof AST_Let) return false;\n            }\n            var lct = ab instanceof AST_LoopControl ? compressor.loopcontrol_target(ab) : null;\n            return ab instanceof AST_Return && in_lambda && is_return_void(ab.value)\n                || ab instanceof AST_Continue && self === loop_body(lct)\n                || ab instanceof AST_Break && lct instanceof AST_BlockStatement && self === lct;\n        }\n\n        function extract_functions() {\n            var tail = statements.slice(i + 1);\n            statements.length = i + 1;\n            return tail.filter(function(stat) {\n                if (stat instanceof AST_Defun) {\n                    statements.push(stat);\n                    return false;\n                }\n                return true;\n            });\n        }\n\n        function as_statement_array_with_return(node, ab) {\n            var body = as_statement_array(node).slice(0, -1);\n            if (ab.value) {\n                body.push(make_node(AST_SimpleStatement, ab.value, {\n                    body: ab.value.expression\n                }));\n            }\n            return body;\n        }\n\n        function next_index(i) {\n            for (var j = i + 1, len = statements.length; j < len; j++) {\n                var stat = statements[j];\n                if (!(stat instanceof AST_Var && declarations_only(stat))) {\n                    break;\n                }\n            }\n            return j;\n        }\n\n        function prev_index(i) {\n            for (var j = i; --j >= 0;) {\n                var stat = statements[j];\n                if (!(stat instanceof AST_Var && declarations_only(stat))) {\n                    break;\n                }\n            }\n            return j;\n        }\n    }\n\n    function eliminate_dead_code(statements, compressor) {\n        var has_quit;\n        var self = compressor.self();\n        for (var i = 0, n = 0, len = statements.length; i < len; i++) {\n            var stat = statements[i];\n            if (stat instanceof AST_LoopControl) {\n                var lct = compressor.loopcontrol_target(stat);\n                if (stat instanceof AST_Break\n                        && !(lct instanceof AST_IterationStatement)\n                        && loop_body(lct) === self\n                    || stat instanceof AST_Continue\n                        && loop_body(lct) === self) {\n                    if (stat.label) {\n                        remove(stat.label.thedef.references, stat);\n                    }\n                } else {\n                    statements[n++] = stat;\n                }\n            } else {\n                statements[n++] = stat;\n            }\n            if (aborts(stat)) {\n                has_quit = statements.slice(i + 1);\n                break;\n            }\n        }\n        statements.length = n;\n        CHANGED = n != len;\n        if (has_quit) has_quit.forEach(function(stat) {\n            extract_declarations_from_unreachable_code(compressor, stat, statements);\n        });\n    }\n\n    function declarations_only(node) {\n        return node.definitions.every((var_def) =>\n            !var_def.value\n        );\n    }\n\n    function sequencesize(statements, compressor) {\n        if (statements.length < 2) return;\n        var seq = [], n = 0;\n        function push_seq() {\n            if (!seq.length) return;\n            var body = make_sequence(seq[0], seq);\n            statements[n++] = make_node(AST_SimpleStatement, body, { body: body });\n            seq = [];\n        }\n        for (var i = 0, len = statements.length; i < len; i++) {\n            var stat = statements[i];\n            if (stat instanceof AST_SimpleStatement) {\n                if (seq.length >= compressor.sequences_limit) push_seq();\n                var body = stat.body;\n                if (seq.length > 0) body = body.drop_side_effect_free(compressor);\n                if (body) merge_sequence(seq, body);\n            } else if (stat instanceof AST_Definitions && declarations_only(stat)\n                || stat instanceof AST_Defun) {\n                statements[n++] = stat;\n            } else {\n                push_seq();\n                statements[n++] = stat;\n            }\n        }\n        push_seq();\n        statements.length = n;\n        if (n != len) CHANGED = true;\n    }\n\n    function to_simple_statement(block, decls) {\n        if (!(block instanceof AST_BlockStatement)) return block;\n        var stat = null;\n        for (var i = 0, len = block.body.length; i < len; i++) {\n            var line = block.body[i];\n            if (line instanceof AST_Var && declarations_only(line)) {\n                decls.push(line);\n            } else if (stat) {\n                return false;\n            } else {\n                stat = line;\n            }\n        }\n        return stat;\n    }\n\n    function sequencesize_2(statements, compressor) {\n        function cons_seq(right) {\n            n--;\n            CHANGED = true;\n            var left = prev.body;\n            return make_sequence(left, [ left, right ]).transform(compressor);\n        }\n        var n = 0, prev;\n        for (var i = 0; i < statements.length; i++) {\n            var stat = statements[i];\n            if (prev) {\n                if (stat instanceof AST_Exit) {\n                    stat.value = cons_seq(stat.value || make_node(AST_Undefined, stat).transform(compressor));\n                } else if (stat instanceof AST_For) {\n                    if (!(stat.init instanceof AST_Definitions)) {\n                        const abort = walk(prev.body, node => {\n                            if (node instanceof AST_Scope) return true;\n                            if (\n                                node instanceof AST_Binary\n                                && node.operator === \"in\"\n                            ) {\n                                return walk_abort;\n                            }\n                        });\n                        if (!abort) {\n                            if (stat.init) stat.init = cons_seq(stat.init);\n                            else {\n                                stat.init = prev.body;\n                                n--;\n                                CHANGED = true;\n                            }\n                        }\n                    }\n                } else if (stat instanceof AST_ForIn) {\n                    if (!(stat.init instanceof AST_Const) && !(stat.init instanceof AST_Let)) {\n                        stat.object = cons_seq(stat.object);\n                    }\n                } else if (stat instanceof AST_If) {\n                    stat.condition = cons_seq(stat.condition);\n                } else if (stat instanceof AST_Switch) {\n                    stat.expression = cons_seq(stat.expression);\n                } else if (stat instanceof AST_With) {\n                    stat.expression = cons_seq(stat.expression);\n                }\n            }\n            if (compressor.option(\"conditionals\") && stat instanceof AST_If) {\n                var decls = [];\n                var body = to_simple_statement(stat.body, decls);\n                var alt = to_simple_statement(stat.alternative, decls);\n                if (body !== false && alt !== false && decls.length > 0) {\n                    var len = decls.length;\n                    decls.push(make_node(AST_If, stat, {\n                        condition: stat.condition,\n                        body: body || make_node(AST_EmptyStatement, stat.body),\n                        alternative: alt\n                    }));\n                    decls.unshift(n, 1);\n                    [].splice.apply(statements, decls);\n                    i += len;\n                    n += len + 1;\n                    prev = null;\n                    CHANGED = true;\n                    continue;\n                }\n            }\n            statements[n++] = stat;\n            prev = stat instanceof AST_SimpleStatement ? stat : null;\n        }\n        statements.length = n;\n    }\n\n    function join_object_assignments(defn, body) {\n        if (!(defn instanceof AST_Definitions)) return;\n        var def = defn.definitions[defn.definitions.length - 1];\n        if (!(def.value instanceof AST_Object)) return;\n        var exprs;\n        if (body instanceof AST_Assign) {\n            exprs = [ body ];\n        } else if (body instanceof AST_Sequence) {\n            exprs = body.expressions.slice();\n        }\n        if (!exprs) return;\n        var trimmed = false;\n        do {\n            var node = exprs[0];\n            if (!(node instanceof AST_Assign)) break;\n            if (node.operator != \"=\") break;\n            if (!(node.left instanceof AST_PropAccess)) break;\n            var sym = node.left.expression;\n            if (!(sym instanceof AST_SymbolRef)) break;\n            if (def.name.name != sym.name) break;\n            if (!node.right.is_constant_expression(scope)) break;\n            var prop = node.left.property;\n            if (prop instanceof AST_Node) {\n                prop = prop.evaluate(compressor);\n            }\n            if (prop instanceof AST_Node) break;\n            prop = \"\" + prop;\n            var diff = compressor.option(\"ecma\") < 2015\n                && compressor.has_directive(\"use strict\") ? function(node) {\n                return node.key != prop && (node.key && node.key.name != prop);\n            } : function(node) {\n                return node.key && node.key.name != prop;\n            };\n            if (!def.value.properties.every(diff)) break;\n            var p = def.value.properties.filter(function (p) { return p.key === prop; })[0];\n            if (!p) {\n                def.value.properties.push(make_node(AST_ObjectKeyVal, node, {\n                    key: prop,\n                    value: node.right\n                }));\n            } else {\n                p.value = new AST_Sequence({\n                    start: p.start,\n                    expressions: [p.value.clone(), node.right.clone()],\n                    end: p.end\n                });\n            }\n            exprs.shift();\n            trimmed = true;\n        } while (exprs.length);\n        return trimmed && exprs;\n    }\n\n    function join_consecutive_vars(statements) {\n        var defs;\n        for (var i = 0, j = -1, len = statements.length; i < len; i++) {\n            var stat = statements[i];\n            var prev = statements[j];\n            if (stat instanceof AST_Definitions) {\n                if (prev && prev.TYPE == stat.TYPE) {\n                    prev.definitions = prev.definitions.concat(stat.definitions);\n                    CHANGED = true;\n                } else if (defs && defs.TYPE == stat.TYPE && declarations_only(stat)) {\n                    defs.definitions = defs.definitions.concat(stat.definitions);\n                    CHANGED = true;\n                } else {\n                    statements[++j] = stat;\n                    defs = stat;\n                }\n            } else if (stat instanceof AST_Exit) {\n                stat.value = extract_object_assignments(stat.value);\n            } else if (stat instanceof AST_For) {\n                var exprs = join_object_assignments(prev, stat.init);\n                if (exprs) {\n                    CHANGED = true;\n                    stat.init = exprs.length ? make_sequence(stat.init, exprs) : null;\n                    statements[++j] = stat;\n                } else if (prev instanceof AST_Var && (!stat.init || stat.init.TYPE == prev.TYPE)) {\n                    if (stat.init) {\n                        prev.definitions = prev.definitions.concat(stat.init.definitions);\n                    }\n                    stat.init = prev;\n                    statements[j] = stat;\n                    CHANGED = true;\n                } else if (defs && stat.init && defs.TYPE == stat.init.TYPE && declarations_only(stat.init)) {\n                    defs.definitions = defs.definitions.concat(stat.init.definitions);\n                    stat.init = null;\n                    statements[++j] = stat;\n                    CHANGED = true;\n                } else {\n                    statements[++j] = stat;\n                }\n            } else if (stat instanceof AST_ForIn) {\n                stat.object = extract_object_assignments(stat.object);\n            } else if (stat instanceof AST_If) {\n                stat.condition = extract_object_assignments(stat.condition);\n            } else if (stat instanceof AST_SimpleStatement) {\n                var exprs = join_object_assignments(prev, stat.body);\n                if (exprs) {\n                    CHANGED = true;\n                    if (!exprs.length) continue;\n                    stat.body = make_sequence(stat.body, exprs);\n                }\n                statements[++j] = stat;\n            } else if (stat instanceof AST_Switch) {\n                stat.expression = extract_object_assignments(stat.expression);\n            } else if (stat instanceof AST_With) {\n                stat.expression = extract_object_assignments(stat.expression);\n            } else {\n                statements[++j] = stat;\n            }\n        }\n        statements.length = j + 1;\n\n        function extract_object_assignments(value) {\n            statements[++j] = stat;\n            var exprs = join_object_assignments(prev, value);\n            if (exprs) {\n                CHANGED = true;\n                if (exprs.length) {\n                    return make_sequence(value, exprs);\n                } else if (value instanceof AST_Sequence) {\n                    return value.tail_node().left;\n                } else {\n                    return value.left;\n                }\n            }\n            return value;\n        }\n    }\n}\n\nfunction extract_declarations_from_unreachable_code(compressor, stat, target) {\n    if (!(stat instanceof AST_Defun)) {\n        compressor.warn(\"Dropping unreachable code [{file}:{line},{col}]\", stat.start);\n    }\n    walk(stat, node => {\n        if (node instanceof AST_Var) {\n            compressor.warn(\"Declarations in unreachable code! [{file}:{line},{col}]\", node.start);\n            node.remove_initializers();\n            target.push(node);\n            return true;\n        }\n        if (\n            node instanceof AST_Defun\n            && (node === stat || !compressor.has_directive(\"use strict\"))\n        ) {\n            target.push(node === stat ? node : make_node(AST_Var, node, {\n                definitions: [\n                    make_node(AST_VarDef, node, {\n                        name: make_node(AST_SymbolVar, node.name, node.name),\n                        value: null\n                    })\n                ]\n            }));\n            return true;\n        }\n        if (node instanceof AST_Scope) {\n            return true;\n        }\n    });\n}\n\nfunction get_value(key) {\n    if (key instanceof AST_Constant) {\n        return key.getValue();\n    }\n    if (key instanceof AST_UnaryPrefix\n        && key.operator == \"void\"\n        && key.expression instanceof AST_Constant) {\n        return;\n    }\n    return key;\n}\n\nfunction is_undefined(node, compressor) {\n    return has_flag(node, UNDEFINED)\n        || node instanceof AST_Undefined\n        || node instanceof AST_UnaryPrefix\n            && node.operator == \"void\"\n            && !node.expression.has_side_effects(compressor);\n}\n\n// may_throw_on_access()\n// returns true if this node may be null, undefined or contain `AST_Accessor`\n(function(def_may_throw_on_access) {\n    AST_Node.DEFMETHOD(\"may_throw_on_access\", function(compressor) {\n        return !compressor.option(\"pure_getters\")\n            || this._dot_throw(compressor);\n    });\n\n    function is_strict(compressor) {\n        return /strict/.test(compressor.option(\"pure_getters\"));\n    }\n\n    def_may_throw_on_access(AST_Node, is_strict);\n    def_may_throw_on_access(AST_Null, return_true);\n    def_may_throw_on_access(AST_Undefined, return_true);\n    def_may_throw_on_access(AST_Constant, return_false);\n    def_may_throw_on_access(AST_Array, return_false);\n    def_may_throw_on_access(AST_Object, function(compressor) {\n        if (!is_strict(compressor)) return false;\n        for (var i = this.properties.length; --i >=0;)\n            if (this.properties[i]._dot_throw(compressor)) return true;\n        return false;\n    });\n    // Do not be as strict with classes as we are with objects.\n    // Hopefully the community is not going to abuse static getters and setters.\n    // https://github.com/terser/terser/issues/724#issuecomment-643655656\n    def_may_throw_on_access(AST_Class, return_false);\n    def_may_throw_on_access(AST_ObjectProperty, return_false);\n    def_may_throw_on_access(AST_ObjectGetter, return_true);\n    def_may_throw_on_access(AST_Expansion, function(compressor) {\n        return this.expression._dot_throw(compressor);\n    });\n    def_may_throw_on_access(AST_Function, return_false);\n    def_may_throw_on_access(AST_Arrow, return_false);\n    def_may_throw_on_access(AST_UnaryPostfix, return_false);\n    def_may_throw_on_access(AST_UnaryPrefix, function() {\n        return this.operator == \"void\";\n    });\n    def_may_throw_on_access(AST_Binary, function(compressor) {\n        return (this.operator == \"&&\" || this.operator == \"||\" || this.operator == \"??\")\n            && (this.left._dot_throw(compressor) || this.right._dot_throw(compressor));\n    });\n    def_may_throw_on_access(AST_Assign, function(compressor) {\n        return this.operator == \"=\"\n            && this.right._dot_throw(compressor);\n    });\n    def_may_throw_on_access(AST_Conditional, function(compressor) {\n        return this.consequent._dot_throw(compressor)\n            || this.alternative._dot_throw(compressor);\n    });\n    def_may_throw_on_access(AST_Dot, function(compressor) {\n        if (!is_strict(compressor)) return false;\n        if (this.expression instanceof AST_Function && this.property == \"prototype\") return false;\n        return true;\n    });\n    def_may_throw_on_access(AST_Sequence, function(compressor) {\n        return this.tail_node()._dot_throw(compressor);\n    });\n    def_may_throw_on_access(AST_SymbolRef, function(compressor) {\n        if (this.name === \"arguments\") return false;\n        if (has_flag(this, UNDEFINED)) return true;\n        if (!is_strict(compressor)) return false;\n        if (is_undeclared_ref(this) && this.is_declared(compressor)) return false;\n        if (this.is_immutable()) return false;\n        var fixed = this.fixed_value();\n        return !fixed || fixed._dot_throw(compressor);\n    });\n})(function(node, func) {\n    node.DEFMETHOD(\"_dot_throw\", func);\n});\n\n/* -----[ boolean/negation helpers ]----- */\n\n// methods to determine whether an expression has a boolean result type\n(function(def_is_boolean) {\n    const unary_bool = makePredicate(\"! delete\");\n    const binary_bool = makePredicate(\"in instanceof == != === !== < <= >= >\");\n    def_is_boolean(AST_Node, return_false);\n    def_is_boolean(AST_UnaryPrefix, function() {\n        return unary_bool.has(this.operator);\n    });\n    def_is_boolean(AST_Binary, function() {\n        return binary_bool.has(this.operator)\n            || lazy_op.has(this.operator)\n                && this.left.is_boolean()\n                && this.right.is_boolean();\n    });\n    def_is_boolean(AST_Conditional, function() {\n        return this.consequent.is_boolean() && this.alternative.is_boolean();\n    });\n    def_is_boolean(AST_Assign, function() {\n        return this.operator == \"=\" && this.right.is_boolean();\n    });\n    def_is_boolean(AST_Sequence, function() {\n        return this.tail_node().is_boolean();\n    });\n    def_is_boolean(AST_True, return_true);\n    def_is_boolean(AST_False, return_true);\n})(function(node, func) {\n    node.DEFMETHOD(\"is_boolean\", func);\n});\n\n// methods to determine if an expression has a numeric result type\n(function(def_is_number) {\n    def_is_number(AST_Node, return_false);\n    def_is_number(AST_Number, return_true);\n    var unary = makePredicate(\"+ - ~ ++ --\");\n    def_is_number(AST_Unary, function() {\n        return unary.has(this.operator);\n    });\n    var binary = makePredicate(\"- * / % & | ^ << >> >>>\");\n    def_is_number(AST_Binary, function(compressor) {\n        return binary.has(this.operator) || this.operator == \"+\"\n            && this.left.is_number(compressor)\n            && this.right.is_number(compressor);\n    });\n    def_is_number(AST_Assign, function(compressor) {\n        return binary.has(this.operator.slice(0, -1))\n            || this.operator == \"=\" && this.right.is_number(compressor);\n    });\n    def_is_number(AST_Sequence, function(compressor) {\n        return this.tail_node().is_number(compressor);\n    });\n    def_is_number(AST_Conditional, function(compressor) {\n        return this.consequent.is_number(compressor) && this.alternative.is_number(compressor);\n    });\n})(function(node, func) {\n    node.DEFMETHOD(\"is_number\", func);\n});\n\n// methods to determine if an expression has a string result type\n(function(def_is_string) {\n    def_is_string(AST_Node, return_false);\n    def_is_string(AST_String, return_true);\n    def_is_string(AST_TemplateString, return_true);\n    def_is_string(AST_UnaryPrefix, function() {\n        return this.operator == \"typeof\";\n    });\n    def_is_string(AST_Binary, function(compressor) {\n        return this.operator == \"+\" &&\n            (this.left.is_string(compressor) || this.right.is_string(compressor));\n    });\n    def_is_string(AST_Assign, function(compressor) {\n        return (this.operator == \"=\" || this.operator == \"+=\") && this.right.is_string(compressor);\n    });\n    def_is_string(AST_Sequence, function(compressor) {\n        return this.tail_node().is_string(compressor);\n    });\n    def_is_string(AST_Conditional, function(compressor) {\n        return this.consequent.is_string(compressor) && this.alternative.is_string(compressor);\n    });\n})(function(node, func) {\n    node.DEFMETHOD(\"is_string\", func);\n});\n\nvar lazy_op = makePredicate(\"&& || ??\");\nvar unary_side_effects = makePredicate(\"delete ++ --\");\n\nfunction is_lhs(node, parent) {\n    if (parent instanceof AST_Unary && unary_side_effects.has(parent.operator)) return parent.expression;\n    if (parent instanceof AST_Assign && parent.left === node) return node;\n}\n\n(function(def_find_defs) {\n    function to_node(value, orig) {\n        if (value instanceof AST_Node) return make_node(value.CTOR, orig, value);\n        if (Array.isArray(value)) return make_node(AST_Array, orig, {\n            elements: value.map(function(value) {\n                return to_node(value, orig);\n            })\n        });\n        if (value && typeof value == \"object\") {\n            var props = [];\n            for (var key in value) if (HOP(value, key)) {\n                props.push(make_node(AST_ObjectKeyVal, orig, {\n                    key: key,\n                    value: to_node(value[key], orig)\n                }));\n            }\n            return make_node(AST_Object, orig, {\n                properties: props\n            });\n        }\n        return make_node_from_constant(value, orig);\n    }\n\n    function warn(compressor, node) {\n        compressor.warn(\"global_defs \" + node.print_to_string() + \" redefined [{file}:{line},{col}]\", node.start);\n    }\n\n    AST_Toplevel.DEFMETHOD(\"resolve_defines\", function(compressor) {\n        if (!compressor.option(\"global_defs\")) return this;\n        this.figure_out_scope({ ie8: compressor.option(\"ie8\") });\n        return this.transform(new TreeTransformer(function(node) {\n            var def = node._find_defs(compressor, \"\");\n            if (!def) return;\n            var level = 0, child = node, parent;\n            while (parent = this.parent(level++)) {\n                if (!(parent instanceof AST_PropAccess)) break;\n                if (parent.expression !== child) break;\n                child = parent;\n            }\n            if (is_lhs(child, parent)) {\n                warn(compressor, node);\n                return;\n            }\n            return def;\n        }));\n    });\n    def_find_defs(AST_Node, noop);\n    def_find_defs(AST_Dot, function(compressor, suffix) {\n        return this.expression._find_defs(compressor, \".\" + this.property + suffix);\n    });\n    def_find_defs(AST_SymbolDeclaration, function(compressor) {\n        if (!this.global()) return;\n        if (HOP(compressor.option(\"global_defs\"), this.name)) warn(compressor, this);\n    });\n    def_find_defs(AST_SymbolRef, function(compressor, suffix) {\n        if (!this.global()) return;\n        var defines = compressor.option(\"global_defs\");\n        var name = this.name + suffix;\n        if (HOP(defines, name)) return to_node(defines[name], this);\n    });\n})(function(node, func) {\n    node.DEFMETHOD(\"_find_defs\", func);\n});\n\nfunction best_of_expression(ast1, ast2) {\n    return ast1.size() > ast2.size() ? ast2 : ast1;\n}\n\nfunction best_of_statement(ast1, ast2) {\n    return best_of_expression(\n        make_node(AST_SimpleStatement, ast1, {\n            body: ast1\n        }),\n        make_node(AST_SimpleStatement, ast2, {\n            body: ast2\n        })\n    ).body;\n}\n\nfunction best_of(compressor, ast1, ast2) {\n    return (first_in_statement(compressor) ? best_of_statement : best_of_expression)(ast1, ast2);\n}\n\nfunction convert_to_predicate(obj) {\n    const out = new Map();\n    for (var key of Object.keys(obj)) {\n        out.set(key, makePredicate(obj[key]));\n    }\n    return out;\n}\n\nvar object_fns = [\n    \"constructor\",\n    \"toString\",\n    \"valueOf\",\n];\nvar native_fns = convert_to_predicate({\n    Array: [\n        \"indexOf\",\n        \"join\",\n        \"lastIndexOf\",\n        \"slice\",\n    ].concat(object_fns),\n    Boolean: object_fns,\n    Function: object_fns,\n    Number: [\n        \"toExponential\",\n        \"toFixed\",\n        \"toPrecision\",\n    ].concat(object_fns),\n    Object: object_fns,\n    RegExp: [\n        \"test\",\n    ].concat(object_fns),\n    String: [\n        \"charAt\",\n        \"charCodeAt\",\n        \"concat\",\n        \"indexOf\",\n        \"italics\",\n        \"lastIndexOf\",\n        \"match\",\n        \"replace\",\n        \"search\",\n        \"slice\",\n        \"split\",\n        \"substr\",\n        \"substring\",\n        \"toLowerCase\",\n        \"toUpperCase\",\n        \"trim\",\n    ].concat(object_fns),\n});\nvar static_fns = convert_to_predicate({\n    Array: [\n        \"isArray\",\n    ],\n    Math: [\n        \"abs\",\n        \"acos\",\n        \"asin\",\n        \"atan\",\n        \"ceil\",\n        \"cos\",\n        \"exp\",\n        \"floor\",\n        \"log\",\n        \"round\",\n        \"sin\",\n        \"sqrt\",\n        \"tan\",\n        \"atan2\",\n        \"pow\",\n        \"max\",\n        \"min\",\n    ],\n    Number: [\n        \"isFinite\",\n        \"isNaN\",\n    ],\n    Object: [\n        \"create\",\n        \"getOwnPropertyDescriptor\",\n        \"getOwnPropertyNames\",\n        \"getPrototypeOf\",\n        \"isExtensible\",\n        \"isFrozen\",\n        \"isSealed\",\n        \"keys\",\n    ],\n    String: [\n        \"fromCharCode\",\n    ],\n});\n\n// methods to evaluate a constant expression\n(function(def_eval) {\n    // If the node has been successfully reduced to a constant,\n    // then its value is returned; otherwise the element itself\n    // is returned.\n    // They can be distinguished as constant value is never a\n    // descendant of AST_Node.\n    AST_Node.DEFMETHOD(\"evaluate\", function(compressor) {\n        if (!compressor.option(\"evaluate\")) return this;\n        var val = this._eval(compressor, 1);\n        if (!val || val instanceof RegExp) return val;\n        if (typeof val == \"function\" || typeof val == \"object\") return this;\n        return val;\n    });\n    var unaryPrefix = makePredicate(\"! ~ - + void\");\n    AST_Node.DEFMETHOD(\"is_constant\", function() {\n        // Accomodate when compress option evaluate=false\n        // as well as the common constant expressions !0 and -1\n        if (this instanceof AST_Constant) {\n            return !(this instanceof AST_RegExp);\n        } else {\n            return this instanceof AST_UnaryPrefix\n                && this.expression instanceof AST_Constant\n                && unaryPrefix.has(this.operator);\n        }\n    });\n    def_eval(AST_Statement, function() {\n        throw new Error(string_template(\"Cannot evaluate a statement [{file}:{line},{col}]\", this.start));\n    });\n    def_eval(AST_Lambda, return_this);\n    def_eval(AST_Class, return_this);\n    def_eval(AST_Node, return_this);\n    def_eval(AST_Constant, function() {\n        return this.getValue();\n    });\n    def_eval(AST_BigInt, return_this);\n    def_eval(AST_RegExp, function(compressor) {\n        let evaluated = compressor.evaluated_regexps.get(this);\n        if (evaluated === undefined) {\n            try {\n                evaluated = (0, eval)(this.print_to_string());\n            } catch (e) {\n                evaluated = null;\n            }\n            compressor.evaluated_regexps.set(this, evaluated);\n        }\n        return evaluated || this;\n    });\n    def_eval(AST_TemplateString, function() {\n        if (this.segments.length !== 1) return this;\n        return this.segments[0].value;\n    });\n    def_eval(AST_Function, function(compressor) {\n        if (compressor.option(\"unsafe\")) {\n            var fn = function() {};\n            fn.node = this;\n            fn.toString = function() {\n                return this.node.print_to_string();\n            };\n            return fn;\n        }\n        return this;\n    });\n    def_eval(AST_Array, function(compressor, depth) {\n        if (compressor.option(\"unsafe\")) {\n            var elements = [];\n            for (var i = 0, len = this.elements.length; i < len; i++) {\n                var element = this.elements[i];\n                var value = element._eval(compressor, depth);\n                if (element === value) return this;\n                elements.push(value);\n            }\n            return elements;\n        }\n        return this;\n    });\n    def_eval(AST_Object, function(compressor, depth) {\n        if (compressor.option(\"unsafe\")) {\n            var val = {};\n            for (var i = 0, len = this.properties.length; i < len; i++) {\n                var prop = this.properties[i];\n                if (prop instanceof AST_Expansion) return this;\n                var key = prop.key;\n                if (key instanceof AST_Symbol) {\n                    key = key.name;\n                } else if (key instanceof AST_Node) {\n                    key = key._eval(compressor, depth);\n                    if (key === prop.key) return this;\n                }\n                if (typeof Object.prototype[key] === \"function\") {\n                    return this;\n                }\n                if (prop.value instanceof AST_Function) continue;\n                val[key] = prop.value._eval(compressor, depth);\n                if (val[key] === prop.value) return this;\n            }\n            return val;\n        }\n        return this;\n    });\n    var non_converting_unary = makePredicate(\"! typeof void\");\n    def_eval(AST_UnaryPrefix, function(compressor, depth) {\n        var e = this.expression;\n        // Function would be evaluated to an array and so typeof would\n        // incorrectly return 'object'. Hence making is a special case.\n        if (compressor.option(\"typeofs\")\n            && this.operator == \"typeof\"\n            && (e instanceof AST_Lambda\n                || e instanceof AST_SymbolRef\n                    && e.fixed_value() instanceof AST_Lambda)) {\n            return typeof function() {};\n        }\n        if (!non_converting_unary.has(this.operator)) depth++;\n        e = e._eval(compressor, depth);\n        if (e === this.expression) return this;\n        switch (this.operator) {\n          case \"!\": return !e;\n          case \"typeof\":\n            // typeof <RegExp> returns \"object\" or \"function\" on different platforms\n            // so cannot evaluate reliably\n            if (e instanceof RegExp) return this;\n            return typeof e;\n          case \"void\": return void e;\n          case \"~\": return ~e;\n          case \"-\": return -e;\n          case \"+\": return +e;\n        }\n        return this;\n    });\n    var non_converting_binary = makePredicate(\"&& || ?? === !==\");\n    def_eval(AST_Binary, function(compressor, depth) {\n        if (!non_converting_binary.has(this.operator)) depth++;\n        var left = this.left._eval(compressor, depth);\n        if (left === this.left) return this;\n        var right = this.right._eval(compressor, depth);\n        if (right === this.right) return this;\n        var result;\n        switch (this.operator) {\n          case \"&&\"  : result = left &&  right; break;\n          case \"||\"  : result = left ||  right; break;\n          case \"??\"  : result = left != null ? left : right; break;\n          case \"|\"   : result = left |   right; break;\n          case \"&\"   : result = left &   right; break;\n          case \"^\"   : result = left ^   right; break;\n          case \"+\"   : result = left +   right; break;\n          case \"*\"   : result = left *   right; break;\n          case \"**\"  : result = Math.pow(left, right); break;\n          case \"/\"   : result = left /   right; break;\n          case \"%\"   : result = left %   right; break;\n          case \"-\"   : result = left -   right; break;\n          case \"<<\"  : result = left <<  right; break;\n          case \">>\"  : result = left >>  right; break;\n          case \">>>\" : result = left >>> right; break;\n          case \"==\"  : result = left ==  right; break;\n          case \"===\" : result = left === right; break;\n          case \"!=\"  : result = left !=  right; break;\n          case \"!==\" : result = left !== right; break;\n          case \"<\"   : result = left <   right; break;\n          case \"<=\"  : result = left <=  right; break;\n          case \">\"   : result = left >   right; break;\n          case \">=\"  : result = left >=  right; break;\n          default:\n              return this;\n        }\n        if (isNaN(result) && compressor.find_parent(AST_With)) {\n            // leave original expression as is\n            return this;\n        }\n        return result;\n    });\n    def_eval(AST_Conditional, function(compressor, depth) {\n        var condition = this.condition._eval(compressor, depth);\n        if (condition === this.condition) return this;\n        var node = condition ? this.consequent : this.alternative;\n        var value = node._eval(compressor, depth);\n        return value === node ? this : value;\n    });\n    def_eval(AST_SymbolRef, function(compressor, depth) {\n        var fixed = this.fixed_value();\n        if (!fixed) return this;\n        var value;\n        if (HOP(fixed, \"_eval\")) {\n            value = fixed._eval();\n        } else {\n            this._eval = return_this;\n            value = fixed._eval(compressor, depth);\n            delete this._eval;\n            if (value === fixed) return this;\n            fixed._eval = function() {\n                return value;\n            };\n        }\n        if (value && typeof value == \"object\") {\n            var escaped = this.definition().escaped;\n            if (escaped && depth > escaped) return this;\n        }\n        return value;\n    });\n    var global_objs = {\n        Array: Array,\n        Math: Math,\n        Number: Number,\n        Object: Object,\n        String: String,\n    };\n    var static_values = convert_to_predicate({\n        Math: [\n            \"E\",\n            \"LN10\",\n            \"LN2\",\n            \"LOG2E\",\n            \"LOG10E\",\n            \"PI\",\n            \"SQRT1_2\",\n            \"SQRT2\",\n        ],\n        Number: [\n            \"MAX_VALUE\",\n            \"MIN_VALUE\",\n            \"NaN\",\n            \"NEGATIVE_INFINITY\",\n            \"POSITIVE_INFINITY\",\n        ],\n    });\n    def_eval(AST_PropAccess, function(compressor, depth) {\n        if (compressor.option(\"unsafe\")) {\n            var key = this.property;\n            if (key instanceof AST_Node) {\n                key = key._eval(compressor, depth);\n                if (key === this.property) return this;\n            }\n            var exp = this.expression;\n            var val;\n            if (is_undeclared_ref(exp)) {\n\n                var aa;\n                var first_arg = exp.name === \"hasOwnProperty\"\n                    && key === \"call\"\n                    && (aa = compressor.parent() && compressor.parent().args)\n                    && (aa && aa[0]\n                    && aa[0].evaluate(compressor));\n\n                first_arg = first_arg instanceof AST_Dot ? first_arg.expression : first_arg;\n\n                if (first_arg == null || first_arg.thedef && first_arg.thedef.undeclared) {\n                    return this.clone();\n                }\n                var static_value = static_values.get(exp.name);\n                if (!static_value || !static_value.has(key)) return this;\n                val = global_objs[exp.name];\n            } else {\n                val = exp._eval(compressor, depth + 1);\n                if (!val || val === exp || !HOP(val, key)) return this;\n                if (typeof val == \"function\") switch (key) {\n                  case \"name\":\n                    return val.node.name ? val.node.name.name : \"\";\n                  case \"length\":\n                    return val.node.argnames.length;\n                  default:\n                    return this;\n                }\n            }\n            return val[key];\n        }\n        return this;\n    });\n    def_eval(AST_Call, function(compressor, depth) {\n        var exp = this.expression;\n        if (compressor.option(\"unsafe\") && exp instanceof AST_PropAccess) {\n            var key = exp.property;\n            if (key instanceof AST_Node) {\n                key = key._eval(compressor, depth);\n                if (key === exp.property) return this;\n            }\n            var val;\n            var e = exp.expression;\n            if (is_undeclared_ref(e)) {\n                var first_arg =\n                    e.name === \"hasOwnProperty\" &&\n                    key === \"call\" &&\n                    (this.args[0] && this.args[0].evaluate(compressor));\n\n                first_arg = first_arg instanceof AST_Dot ? first_arg.expression : first_arg;\n\n                if ((first_arg == null || first_arg.thedef && first_arg.thedef.undeclared)) {\n                    return this.clone();\n                }\n                var static_fn = static_fns.get(e.name);\n                if (!static_fn || !static_fn.has(key)) return this;\n                val = global_objs[e.name];\n            } else {\n                val = e._eval(compressor, depth + 1);\n                if (val === e || !val) return this;\n                var native_fn = native_fns.get(val.constructor.name);\n                if (!native_fn || !native_fn.has(key)) return this;\n            }\n            var args = [];\n            for (var i = 0, len = this.args.length; i < len; i++) {\n                var arg = this.args[i];\n                var value = arg._eval(compressor, depth);\n                if (arg === value) return this;\n                args.push(value);\n            }\n            try {\n                return val[key].apply(val, args);\n            } catch (ex) {\n                compressor.warn(\"Error evaluating {code} [{file}:{line},{col}]\", {\n                    code: this.print_to_string(),\n                    file: this.start.file,\n                    line: this.start.line,\n                    col: this.start.col\n                });\n            }\n        }\n        return this;\n    });\n    def_eval(AST_New, return_this);\n})(function(node, func) {\n    node.DEFMETHOD(\"_eval\", func);\n});\n\n// method to negate an expression\n(function(def_negate) {\n    function basic_negation(exp) {\n        return make_node(AST_UnaryPrefix, exp, {\n            operator: \"!\",\n            expression: exp\n        });\n    }\n    function best(orig, alt, first_in_statement) {\n        var negated = basic_negation(orig);\n        if (first_in_statement) {\n            var stat = make_node(AST_SimpleStatement, alt, {\n                body: alt\n            });\n            return best_of_expression(negated, stat) === stat ? alt : negated;\n        }\n        return best_of_expression(negated, alt);\n    }\n    def_negate(AST_Node, function() {\n        return basic_negation(this);\n    });\n    def_negate(AST_Statement, function() {\n        throw new Error(\"Cannot negate a statement\");\n    });\n    def_negate(AST_Function, function() {\n        return basic_negation(this);\n    });\n    def_negate(AST_Arrow, function() {\n        return basic_negation(this);\n    });\n    def_negate(AST_UnaryPrefix, function() {\n        if (this.operator == \"!\")\n            return this.expression;\n        return basic_negation(this);\n    });\n    def_negate(AST_Sequence, function(compressor) {\n        var expressions = this.expressions.slice();\n        expressions.push(expressions.pop().negate(compressor));\n        return make_sequence(this, expressions);\n    });\n    def_negate(AST_Conditional, function(compressor, first_in_statement) {\n        var self = this.clone();\n        self.consequent = self.consequent.negate(compressor);\n        self.alternative = self.alternative.negate(compressor);\n        return best(this, self, first_in_statement);\n    });\n    def_negate(AST_Binary, function(compressor, first_in_statement) {\n        var self = this.clone(), op = this.operator;\n        if (compressor.option(\"unsafe_comps\")) {\n            switch (op) {\n              case \"<=\" : self.operator = \">\"  ; return self;\n              case \"<\"  : self.operator = \">=\" ; return self;\n              case \">=\" : self.operator = \"<\"  ; return self;\n              case \">\"  : self.operator = \"<=\" ; return self;\n            }\n        }\n        switch (op) {\n          case \"==\" : self.operator = \"!=\"; return self;\n          case \"!=\" : self.operator = \"==\"; return self;\n          case \"===\": self.operator = \"!==\"; return self;\n          case \"!==\": self.operator = \"===\"; return self;\n          case \"&&\":\n            self.operator = \"||\";\n            self.left = self.left.negate(compressor, first_in_statement);\n            self.right = self.right.negate(compressor);\n            return best(this, self, first_in_statement);\n          case \"||\":\n            self.operator = \"&&\";\n            self.left = self.left.negate(compressor, first_in_statement);\n            self.right = self.right.negate(compressor);\n            return best(this, self, first_in_statement);\n          case \"??\":\n            self.right = self.right.negate(compressor);\n            return best(this, self, first_in_statement);\n        }\n        return basic_negation(this);\n    });\n})(function(node, func) {\n    node.DEFMETHOD(\"negate\", function(compressor, first_in_statement) {\n        return func.call(this, compressor, first_in_statement);\n    });\n});\n\nvar global_pure_fns = makePredicate(\"Boolean decodeURI decodeURIComponent Date encodeURI encodeURIComponent Error escape EvalError isFinite isNaN Number Object parseFloat parseInt RangeError ReferenceError String SyntaxError TypeError unescape URIError\");\nAST_Call.DEFMETHOD(\"is_expr_pure\", function(compressor) {\n    if (compressor.option(\"unsafe\")) {\n        var expr = this.expression;\n        var first_arg = (this.args && this.args[0] && this.args[0].evaluate(compressor));\n        if (\n            expr.expression && expr.expression.name === \"hasOwnProperty\" &&\n            (first_arg == null || first_arg.thedef && first_arg.thedef.undeclared)\n        ) {\n            return false;\n        }\n        if (is_undeclared_ref(expr) && global_pure_fns.has(expr.name)) return true;\n        let static_fn;\n        if (expr instanceof AST_Dot\n            && is_undeclared_ref(expr.expression)\n            && (static_fn = static_fns.get(expr.expression.name))\n            && static_fn.has(expr.property)) {\n            return true;\n        }\n    }\n    return !!has_annotation(this, _PURE) || !compressor.pure_funcs(this);\n});\nAST_Node.DEFMETHOD(\"is_call_pure\", return_false);\nAST_Dot.DEFMETHOD(\"is_call_pure\", function(compressor) {\n    if (!compressor.option(\"unsafe\")) return;\n    const expr = this.expression;\n    let map;\n    if (expr instanceof AST_Array) {\n        map = native_fns.get(\"Array\");\n    } else if (expr.is_boolean()) {\n        map = native_fns.get(\"Boolean\");\n    } else if (expr.is_number(compressor)) {\n        map = native_fns.get(\"Number\");\n    } else if (expr instanceof AST_RegExp) {\n        map = native_fns.get(\"RegExp\");\n    } else if (expr.is_string(compressor)) {\n        map = native_fns.get(\"String\");\n    } else if (!this.may_throw_on_access(compressor)) {\n        map = native_fns.get(\"Object\");\n    }\n    return map && map.has(this.property);\n});\n\nconst pure_prop_access_globals = new Set([\n    \"Number\",\n    \"String\",\n    \"Array\",\n    \"Object\",\n    \"Function\",\n    \"Promise\",\n]);\n// determine if expression has side effects\n(function(def_has_side_effects) {\n    def_has_side_effects(AST_Node, return_true);\n\n    def_has_side_effects(AST_EmptyStatement, return_false);\n    def_has_side_effects(AST_Constant, return_false);\n    def_has_side_effects(AST_This, return_false);\n\n    function any(list, compressor) {\n        for (var i = list.length; --i >= 0;)\n            if (list[i].has_side_effects(compressor))\n                return true;\n        return false;\n    }\n\n    def_has_side_effects(AST_Block, function(compressor) {\n        return any(this.body, compressor);\n    });\n    def_has_side_effects(AST_Call, function(compressor) {\n        if (!this.is_expr_pure(compressor)\n            && (!this.expression.is_call_pure(compressor)\n                || this.expression.has_side_effects(compressor))) {\n            return true;\n        }\n        return any(this.args, compressor);\n    });\n    def_has_side_effects(AST_Switch, function(compressor) {\n        return this.expression.has_side_effects(compressor)\n            || any(this.body, compressor);\n    });\n    def_has_side_effects(AST_Case, function(compressor) {\n        return this.expression.has_side_effects(compressor)\n            || any(this.body, compressor);\n    });\n    def_has_side_effects(AST_Try, function(compressor) {\n        return any(this.body, compressor)\n            || this.bcatch && this.bcatch.has_side_effects(compressor)\n            || this.bfinally && this.bfinally.has_side_effects(compressor);\n    });\n    def_has_side_effects(AST_If, function(compressor) {\n        return this.condition.has_side_effects(compressor)\n            || this.body && this.body.has_side_effects(compressor)\n            || this.alternative && this.alternative.has_side_effects(compressor);\n    });\n    def_has_side_effects(AST_LabeledStatement, function(compressor) {\n        return this.body.has_side_effects(compressor);\n    });\n    def_has_side_effects(AST_SimpleStatement, function(compressor) {\n        return this.body.has_side_effects(compressor);\n    });\n    def_has_side_effects(AST_Lambda, return_false);\n    def_has_side_effects(AST_Class, function (compressor) {\n        if (this.extends && this.extends.has_side_effects(compressor)) {\n            return true;\n        }\n        return any(this.properties, compressor);\n    });\n    def_has_side_effects(AST_Binary, function(compressor) {\n        return this.left.has_side_effects(compressor)\n            || this.right.has_side_effects(compressor);\n    });\n    def_has_side_effects(AST_Assign, return_true);\n    def_has_side_effects(AST_Conditional, function(compressor) {\n        return this.condition.has_side_effects(compressor)\n            || this.consequent.has_side_effects(compressor)\n            || this.alternative.has_side_effects(compressor);\n    });\n    def_has_side_effects(AST_Unary, function(compressor) {\n        return unary_side_effects.has(this.operator)\n            || this.expression.has_side_effects(compressor);\n    });\n    def_has_side_effects(AST_SymbolRef, function(compressor) {\n        return !this.is_declared(compressor) && !pure_prop_access_globals.has(this.name);\n    });\n    def_has_side_effects(AST_SymbolClassProperty, return_false);\n    def_has_side_effects(AST_SymbolDeclaration, return_false);\n    def_has_side_effects(AST_Object, function(compressor) {\n        return any(this.properties, compressor);\n    });\n    def_has_side_effects(AST_ObjectProperty, function(compressor) {\n        return (\n            this.computed_key() && this.key.has_side_effects(compressor)\n            || this.value.has_side_effects(compressor)\n        );\n    });\n    def_has_side_effects(AST_ClassProperty, function(compressor) {\n        return (\n            this.computed_key() && this.key.has_side_effects(compressor)\n            || this.static && this.value && this.value.has_side_effects(compressor)\n        );\n    });\n    def_has_side_effects(AST_ConciseMethod, function(compressor) {\n        return this.computed_key() && this.key.has_side_effects(compressor);\n    });\n    def_has_side_effects(AST_ObjectGetter, function(compressor) {\n        return this.computed_key() && this.key.has_side_effects(compressor);\n    });\n    def_has_side_effects(AST_ObjectSetter, function(compressor) {\n        return this.computed_key() && this.key.has_side_effects(compressor);\n    });\n    def_has_side_effects(AST_Array, function(compressor) {\n        return any(this.elements, compressor);\n    });\n    def_has_side_effects(AST_Dot, function(compressor) {\n        return this.expression.may_throw_on_access(compressor)\n            || this.expression.has_side_effects(compressor);\n    });\n    def_has_side_effects(AST_Sub, function(compressor) {\n        return this.expression.may_throw_on_access(compressor)\n            || this.expression.has_side_effects(compressor)\n            || this.property.has_side_effects(compressor);\n    });\n    def_has_side_effects(AST_Sequence, function(compressor) {\n        return any(this.expressions, compressor);\n    });\n    def_has_side_effects(AST_Definitions, function(compressor) {\n        return any(this.definitions, compressor);\n    });\n    def_has_side_effects(AST_VarDef, function() {\n        return this.value;\n    });\n    def_has_side_effects(AST_TemplateSegment, return_false);\n    def_has_side_effects(AST_TemplateString, function(compressor) {\n        return any(this.segments, compressor);\n    });\n})(function(node, func) {\n    node.DEFMETHOD(\"has_side_effects\", func);\n});\n\n// determine if expression may throw\n(function(def_may_throw) {\n    def_may_throw(AST_Node, return_true);\n\n    def_may_throw(AST_Constant, return_false);\n    def_may_throw(AST_EmptyStatement, return_false);\n    def_may_throw(AST_Lambda, return_false);\n    def_may_throw(AST_SymbolDeclaration, return_false);\n    def_may_throw(AST_This, return_false);\n\n    function any(list, compressor) {\n        for (var i = list.length; --i >= 0;)\n            if (list[i].may_throw(compressor))\n                return true;\n        return false;\n    }\n\n    def_may_throw(AST_Class, function(compressor) {\n        if (this.extends && this.extends.may_throw(compressor)) return true;\n        return any(this.properties, compressor);\n    });\n\n    def_may_throw(AST_Array, function(compressor) {\n        return any(this.elements, compressor);\n    });\n    def_may_throw(AST_Assign, function(compressor) {\n        if (this.right.may_throw(compressor)) return true;\n        if (!compressor.has_directive(\"use strict\")\n            && this.operator == \"=\"\n            && this.left instanceof AST_SymbolRef) {\n            return false;\n        }\n        return this.left.may_throw(compressor);\n    });\n    def_may_throw(AST_Binary, function(compressor) {\n        return this.left.may_throw(compressor)\n            || this.right.may_throw(compressor);\n    });\n    def_may_throw(AST_Block, function(compressor) {\n        return any(this.body, compressor);\n    });\n    def_may_throw(AST_Call, function(compressor) {\n        if (any(this.args, compressor)) return true;\n        if (this.is_expr_pure(compressor)) return false;\n        if (this.expression.may_throw(compressor)) return true;\n        return !(this.expression instanceof AST_Lambda)\n            || any(this.expression.body, compressor);\n    });\n    def_may_throw(AST_Case, function(compressor) {\n        return this.expression.may_throw(compressor)\n            || any(this.body, compressor);\n    });\n    def_may_throw(AST_Conditional, function(compressor) {\n        return this.condition.may_throw(compressor)\n            || this.consequent.may_throw(compressor)\n            || this.alternative.may_throw(compressor);\n    });\n    def_may_throw(AST_Definitions, function(compressor) {\n        return any(this.definitions, compressor);\n    });\n    def_may_throw(AST_Dot, function(compressor) {\n        return this.expression.may_throw_on_access(compressor)\n            || this.expression.may_throw(compressor);\n    });\n    def_may_throw(AST_If, function(compressor) {\n        return this.condition.may_throw(compressor)\n            || this.body && this.body.may_throw(compressor)\n            || this.alternative && this.alternative.may_throw(compressor);\n    });\n    def_may_throw(AST_LabeledStatement, function(compressor) {\n        return this.body.may_throw(compressor);\n    });\n    def_may_throw(AST_Object, function(compressor) {\n        return any(this.properties, compressor);\n    });\n    def_may_throw(AST_ObjectProperty, function(compressor) {\n        // TODO key may throw too\n        return this.value.may_throw(compressor);\n    });\n    def_may_throw(AST_ClassProperty, function(compressor) {\n        return (\n            this.computed_key() && this.key.may_throw(compressor)\n            || this.static && this.value && this.value.may_throw(compressor)\n        );\n    });\n    def_may_throw(AST_ConciseMethod, function(compressor) {\n        return this.computed_key() && this.key.may_throw(compressor);\n    });\n    def_may_throw(AST_ObjectGetter, function(compressor) {\n        return this.computed_key() && this.key.may_throw(compressor);\n    });\n    def_may_throw(AST_ObjectSetter, function(compressor) {\n        return this.computed_key() && this.key.may_throw(compressor);\n    });\n    def_may_throw(AST_Return, function(compressor) {\n        return this.value && this.value.may_throw(compressor);\n    });\n    def_may_throw(AST_Sequence, function(compressor) {\n        return any(this.expressions, compressor);\n    });\n    def_may_throw(AST_SimpleStatement, function(compressor) {\n        return this.body.may_throw(compressor);\n    });\n    def_may_throw(AST_Sub, function(compressor) {\n        return this.expression.may_throw_on_access(compressor)\n            || this.expression.may_throw(compressor)\n            || this.property.may_throw(compressor);\n    });\n    def_may_throw(AST_Switch, function(compressor) {\n        return this.expression.may_throw(compressor)\n            || any(this.body, compressor);\n    });\n    def_may_throw(AST_SymbolRef, function(compressor) {\n        return !this.is_declared(compressor) && !pure_prop_access_globals.has(this.name);\n    });\n    def_may_throw(AST_SymbolClassProperty, return_false);\n    def_may_throw(AST_Try, function(compressor) {\n        return this.bcatch ? this.bcatch.may_throw(compressor) : any(this.body, compressor)\n            || this.bfinally && this.bfinally.may_throw(compressor);\n    });\n    def_may_throw(AST_Unary, function(compressor) {\n        if (this.operator == \"typeof\" && this.expression instanceof AST_SymbolRef)\n            return false;\n        return this.expression.may_throw(compressor);\n    });\n    def_may_throw(AST_VarDef, function(compressor) {\n        if (!this.value) return false;\n        return this.value.may_throw(compressor);\n    });\n})(function(node, func) {\n    node.DEFMETHOD(\"may_throw\", func);\n});\n\n// determine if expression is constant\n(function(def_is_constant_expression) {\n    function all_refs_local(scope) {\n        let result = true;\n        walk(this, node => {\n            if (node instanceof AST_SymbolRef) {\n                if (has_flag(this, INLINED)) {\n                    result = false;\n                    return walk_abort;\n                }\n                var def = node.definition();\n                if (\n                    member(def, this.enclosed)\n                    && !this.variables.has(def.name)\n                ) {\n                    if (scope) {\n                        var scope_def = scope.find_variable(node);\n                        if (def.undeclared ? !scope_def : scope_def === def) {\n                            result = \"f\";\n                            return true;\n                        }\n                    }\n                    result = false;\n                    return walk_abort;\n                }\n                return true;\n            }\n            if (node instanceof AST_This && this instanceof AST_Arrow) {\n                result = false;\n                return walk_abort;\n            }\n        });\n        return result;\n    }\n\n    def_is_constant_expression(AST_Node, return_false);\n    def_is_constant_expression(AST_Constant, return_true);\n    def_is_constant_expression(AST_Class, function(scope) {\n        if (this.extends && !this.extends.is_constant_expression(scope)) {\n            return false;\n        }\n\n        for (const prop of this.properties) {\n            if (prop.computed_key() && !prop.key.is_constant_expression(scope)) {\n                return false;\n            }\n            if (prop.static && prop.value && !prop.value.is_constant_expression(scope)) {\n                return false;\n            }\n        }\n\n        return all_refs_local.call(this, scope);\n    });\n    def_is_constant_expression(AST_Lambda, all_refs_local);\n    def_is_constant_expression(AST_Unary, function() {\n        return this.expression.is_constant_expression();\n    });\n    def_is_constant_expression(AST_Binary, function() {\n        return this.left.is_constant_expression()\n            && this.right.is_constant_expression();\n    });\n    def_is_constant_expression(AST_Array, function() {\n        return this.elements.every((l) => l.is_constant_expression());\n    });\n    def_is_constant_expression(AST_Object, function() {\n        return this.properties.every((l) => l.is_constant_expression());\n    });\n    def_is_constant_expression(AST_ObjectProperty, function() {\n        return !(this.key instanceof AST_Node) && this.value.is_constant_expression();\n    });\n})(function(node, func) {\n    node.DEFMETHOD(\"is_constant_expression\", func);\n});\n\n// tell me if a statement aborts\nfunction aborts(thing) {\n    return thing && thing.aborts();\n}\n(function(def_aborts) {\n    def_aborts(AST_Statement, return_null);\n    def_aborts(AST_Jump, return_this);\n    function block_aborts() {\n        for (var i = 0; i < this.body.length; i++) {\n            if (aborts(this.body[i])) {\n                return this.body[i];\n            }\n        }\n        return null;\n    }\n    def_aborts(AST_Import, function() { return null; });\n    def_aborts(AST_BlockStatement, block_aborts);\n    def_aborts(AST_SwitchBranch, block_aborts);\n    def_aborts(AST_If, function() {\n        return this.alternative && aborts(this.body) && aborts(this.alternative) && this;\n    });\n})(function(node, func) {\n    node.DEFMETHOD(\"aborts\", func);\n});\n\n/* -----[ optimizers ]----- */\n\nvar directives = new Set([\"use asm\", \"use strict\"]);\ndef_optimize(AST_Directive, function(self, compressor) {\n    if (compressor.option(\"directives\")\n        && (!directives.has(self.value) || compressor.has_directive(self.value) !== self)) {\n        return make_node(AST_EmptyStatement, self);\n    }\n    return self;\n});\n\ndef_optimize(AST_Debugger, function(self, compressor) {\n    if (compressor.option(\"drop_debugger\"))\n        return make_node(AST_EmptyStatement, self);\n    return self;\n});\n\ndef_optimize(AST_LabeledStatement, function(self, compressor) {\n    if (self.body instanceof AST_Break\n        && compressor.loopcontrol_target(self.body) === self.body) {\n        return make_node(AST_EmptyStatement, self);\n    }\n    return self.label.references.length == 0 ? self.body : self;\n});\n\ndef_optimize(AST_Block, function(self, compressor) {\n    tighten_body(self.body, compressor);\n    return self;\n});\n\nfunction can_be_extracted_from_if_block(node) {\n    return !(\n        node instanceof AST_Const ||\n        node instanceof AST_Let ||\n        node instanceof AST_Class\n    );\n}\n\ndef_optimize(AST_BlockStatement, function(self, compressor) {\n    tighten_body(self.body, compressor);\n    switch (self.body.length) {\n      case 1:\n        if (!compressor.has_directive(\"use strict\")\n            && compressor.parent() instanceof AST_If\n            && can_be_extracted_from_if_block(self.body[0])\n            || can_be_evicted_from_block(self.body[0])) {\n            return self.body[0];\n        }\n        break;\n      case 0: return make_node(AST_EmptyStatement, self);\n    }\n    return self;\n});\n\nfunction opt_AST_Lambda(self, compressor) {\n    tighten_body(self.body, compressor);\n    if (compressor.option(\"side_effects\")\n        && self.body.length == 1\n        && self.body[0] === compressor.has_directive(\"use strict\")) {\n        self.body.length = 0;\n    }\n    return self;\n}\ndef_optimize(AST_Lambda, opt_AST_Lambda);\n\nconst r_keep_assign = /keep_assign/;\nAST_Scope.DEFMETHOD(\"drop_unused\", function(compressor) {\n    if (!compressor.option(\"unused\")) return;\n    if (compressor.has_directive(\"use asm\")) return;\n    var self = this;\n    if (self.pinned()) return;\n    var drop_funcs = !(self instanceof AST_Toplevel) || compressor.toplevel.funcs;\n    var drop_vars = !(self instanceof AST_Toplevel) || compressor.toplevel.vars;\n    const assign_as_unused = r_keep_assign.test(compressor.option(\"unused\")) ? return_false : function(node) {\n        if (node instanceof AST_Assign\n            && (has_flag(node, WRITE_ONLY) || node.operator == \"=\")\n        ) {\n            return node.left;\n        }\n        if (node instanceof AST_Unary && has_flag(node, WRITE_ONLY)) {\n            return node.expression;\n        }\n    };\n    var in_use_ids = new Map();\n    var fixed_ids = new Map();\n    if (self instanceof AST_Toplevel && compressor.top_retain) {\n        self.variables.forEach(function(def) {\n            if (compressor.top_retain(def) && !in_use_ids.has(def.id)) {\n                in_use_ids.set(def.id, def);\n            }\n        });\n    }\n    var var_defs_by_id = new Map();\n    var initializations = new Map();\n    // pass 1: find out which symbols are directly used in\n    // this scope (not in nested scopes).\n    var scope = this;\n    var tw = new TreeWalker(function(node, descend) {\n        if (node instanceof AST_Lambda && node.uses_arguments && !tw.has_directive(\"use strict\")) {\n            node.argnames.forEach(function(argname) {\n                if (!(argname instanceof AST_SymbolDeclaration)) return;\n                var def = argname.definition();\n                if (!in_use_ids.has(def.id)) {\n                    in_use_ids.set(def.id, def);\n                }\n            });\n        }\n        if (node === self) return;\n        if (node instanceof AST_Defun || node instanceof AST_DefClass) {\n            var node_def = node.name.definition();\n            const in_export = tw.parent() instanceof AST_Export;\n            if (in_export || !drop_funcs && scope === self) {\n                if (node_def.global && !in_use_ids.has(node_def.id)) {\n                    in_use_ids.set(node_def.id, node_def);\n                }\n            }\n            if (node instanceof AST_DefClass) {\n                if (\n                    node.extends\n                    && (node.extends.has_side_effects(compressor)\n                    || node.extends.may_throw(compressor))\n                ) {\n                    node.extends.walk(tw);\n                }\n                for (const prop of node.properties) {\n                    if (\n                        prop.has_side_effects(compressor) ||\n                        prop.may_throw(compressor)\n                    ) {\n                        prop.walk(tw);\n                    }\n                }\n            }\n            map_add(initializations, node_def.id, node);\n            return true; // don't go in nested scopes\n        }\n        if (node instanceof AST_SymbolFunarg && scope === self) {\n            map_add(var_defs_by_id, node.definition().id, node);\n        }\n        if (node instanceof AST_Definitions && scope === self) {\n            const in_export = tw.parent() instanceof AST_Export;\n            node.definitions.forEach(function(def) {\n                if (def.name instanceof AST_SymbolVar) {\n                    map_add(var_defs_by_id, def.name.definition().id, def);\n                }\n                if (in_export || !drop_vars) {\n                    walk(def.name, node => {\n                        if (node instanceof AST_SymbolDeclaration) {\n                            const def = node.definition();\n                            if (\n                                (in_export || def.global)\n                                && !in_use_ids.has(def.id)\n                            ) {\n                                in_use_ids.set(def.id, def);\n                            }\n                        }\n                    });\n                }\n                if (def.value) {\n                    if (def.name instanceof AST_Destructuring) {\n                        def.walk(tw);\n                    } else {\n                        var node_def = def.name.definition();\n                        map_add(initializations, node_def.id, def.value);\n                        if (!node_def.chained && def.name.fixed_value() === def.value) {\n                            fixed_ids.set(node_def.id, def);\n                        }\n                    }\n                    if (def.value.has_side_effects(compressor)) {\n                        def.value.walk(tw);\n                    }\n                }\n            });\n            return true;\n        }\n        return scan_ref_scoped(node, descend);\n    });\n    self.walk(tw);\n    // pass 2: for every used symbol we need to walk its\n    // initialization code to figure out if it uses other\n    // symbols (that may not be in_use).\n    tw = new TreeWalker(scan_ref_scoped);\n    in_use_ids.forEach(function (def) {\n        var init = initializations.get(def.id);\n        if (init) init.forEach(function(init) {\n            init.walk(tw);\n        });\n    });\n    // pass 3: we should drop declarations not in_use\n    var tt = new TreeTransformer(\n        function before(node, descend, in_list) {\n            var parent = tt.parent();\n            if (drop_vars) {\n                const sym = assign_as_unused(node);\n                if (sym instanceof AST_SymbolRef) {\n                    var def = sym.definition();\n                    var in_use = in_use_ids.has(def.id);\n                    if (node instanceof AST_Assign) {\n                        if (!in_use || fixed_ids.has(def.id) && fixed_ids.get(def.id) !== node) {\n                            return maintain_this_binding(parent, node, node.right.transform(tt));\n                        }\n                    } else if (!in_use) return in_list ? MAP.skip : make_node(AST_Number, node, {\n                        value: 0\n                    });\n                }\n            }\n            if (scope !== self) return;\n            var def;\n            if (node.name\n                && (node instanceof AST_ClassExpression\n                    && !keep_name(compressor.option(\"keep_classnames\"), (def = node.name.definition()).name)\n                || node instanceof AST_Function\n                    && !keep_name(compressor.option(\"keep_fnames\"), (def = node.name.definition()).name))) {\n                // any declarations with same name will overshadow\n                // name of this anonymous function and can therefore\n                // never be used anywhere\n                if (!in_use_ids.has(def.id) || def.orig.length > 1) node.name = null;\n            }\n            if (node instanceof AST_Lambda && !(node instanceof AST_Accessor)) {\n                var trim = !compressor.option(\"keep_fargs\");\n                for (var a = node.argnames, i = a.length; --i >= 0;) {\n                    var sym = a[i];\n                    if (sym instanceof AST_Expansion) {\n                        sym = sym.expression;\n                    }\n                    if (sym instanceof AST_DefaultAssign) {\n                        sym = sym.left;\n                    }\n                    // Do not drop destructuring arguments.\n                    // They constitute a type assertion, so dropping\n                    // them would stop that TypeError which would happen\n                    // if someone called it with an incorrectly formatted\n                    // parameter.\n                    if (!(sym instanceof AST_Destructuring) && !in_use_ids.has(sym.definition().id)) {\n                        set_flag(sym, UNUSED);\n                        if (trim) {\n                            a.pop();\n                            compressor[sym.unreferenced() ? \"warn\" : \"info\"](\"Dropping unused function argument {name} [{file}:{line},{col}]\", template(sym));\n                        }\n                    } else {\n                        trim = false;\n                    }\n                }\n            }\n            if ((node instanceof AST_Defun || node instanceof AST_DefClass) && node !== self) {\n                const def = node.name.definition();\n                let keep = def.global && !drop_funcs || in_use_ids.has(def.id);\n                if (!keep) {\n                    compressor[node.name.unreferenced() ? \"warn\" : \"info\"](\"Dropping unused function {name} [{file}:{line},{col}]\", template(node.name));\n                    def.eliminated++;\n                    if (node instanceof AST_DefClass) {\n                        // Classes might have extends with side effects\n                        const side_effects = node.drop_side_effect_free(compressor);\n                        if (side_effects) {\n                            return make_node(AST_SimpleStatement, node, {\n                                body: side_effects\n                            });\n                        }\n                    }\n                    return in_list ? MAP.skip : make_node(AST_EmptyStatement, node);\n                }\n            }\n            if (node instanceof AST_Definitions && !(parent instanceof AST_ForIn && parent.init === node)) {\n                var drop_block = !(parent instanceof AST_Toplevel) && !(node instanceof AST_Var);\n                // place uninitialized names at the start\n                var body = [], head = [], tail = [];\n                // for unused names whose initialization has\n                // side effects, we can cascade the init. code\n                // into the next one, or next statement.\n                var side_effects = [];\n                node.definitions.forEach(function(def) {\n                    if (def.value) def.value = def.value.transform(tt);\n                    var is_destructure = def.name instanceof AST_Destructuring;\n                    var sym = is_destructure\n                        ? new SymbolDef(null, { name: \"<destructure>\" }) /* fake SymbolDef */\n                        : def.name.definition();\n                    if (drop_block && sym.global) return tail.push(def);\n                    if (!(drop_vars || drop_block)\n                        || is_destructure\n                            && (def.name.names.length\n                                || def.name.is_array\n                                || compressor.option(\"pure_getters\") != true)\n                        || in_use_ids.has(sym.id)\n                    ) {\n                        if (def.value && fixed_ids.has(sym.id) && fixed_ids.get(sym.id) !== def) {\n                            def.value = def.value.drop_side_effect_free(compressor);\n                        }\n                        if (def.name instanceof AST_SymbolVar) {\n                            var var_defs = var_defs_by_id.get(sym.id);\n                            if (var_defs.length > 1 && (!def.value || sym.orig.indexOf(def.name) > sym.eliminated)) {\n                                compressor.warn(\"Dropping duplicated definition of variable {name} [{file}:{line},{col}]\", template(def.name));\n                                if (def.value) {\n                                    var ref = make_node(AST_SymbolRef, def.name, def.name);\n                                    sym.references.push(ref);\n                                    var assign = make_node(AST_Assign, def, {\n                                        operator: \"=\",\n                                        left: ref,\n                                        right: def.value\n                                    });\n                                    if (fixed_ids.get(sym.id) === def) {\n                                        fixed_ids.set(sym.id, assign);\n                                    }\n                                    side_effects.push(assign.transform(tt));\n                                }\n                                remove(var_defs, def);\n                                sym.eliminated++;\n                                return;\n                            }\n                        }\n                        if (def.value) {\n                            if (side_effects.length > 0) {\n                                if (tail.length > 0) {\n                                    side_effects.push(def.value);\n                                    def.value = make_sequence(def.value, side_effects);\n                                } else {\n                                    body.push(make_node(AST_SimpleStatement, node, {\n                                        body: make_sequence(node, side_effects)\n                                    }));\n                                }\n                                side_effects = [];\n                            }\n                            tail.push(def);\n                        } else {\n                            head.push(def);\n                        }\n                    } else if (sym.orig[0] instanceof AST_SymbolCatch) {\n                        var value = def.value && def.value.drop_side_effect_free(compressor);\n                        if (value) side_effects.push(value);\n                        def.value = null;\n                        head.push(def);\n                    } else {\n                        var value = def.value && def.value.drop_side_effect_free(compressor);\n                        if (value) {\n                            if (!is_destructure) compressor.warn(\"Side effects in initialization of unused variable {name} [{file}:{line},{col}]\", template(def.name));\n                            side_effects.push(value);\n                        } else {\n                            if (!is_destructure) compressor[def.name.unreferenced() ? \"warn\" : \"info\"](\"Dropping unused variable {name} [{file}:{line},{col}]\", template(def.name));\n                        }\n                        sym.eliminated++;\n                    }\n                });\n                if (head.length > 0 || tail.length > 0) {\n                    node.definitions = head.concat(tail);\n                    body.push(node);\n                }\n                if (side_effects.length > 0) {\n                    body.push(make_node(AST_SimpleStatement, node, {\n                        body: make_sequence(node, side_effects)\n                    }));\n                }\n                switch (body.length) {\n                  case 0:\n                    return in_list ? MAP.skip : make_node(AST_EmptyStatement, node);\n                  case 1:\n                    return body[0];\n                  default:\n                    return in_list ? MAP.splice(body) : make_node(AST_BlockStatement, node, {\n                        body: body\n                    });\n                }\n            }\n            // certain combination of unused name + side effect leads to:\n            //    https://github.com/mishoo/UglifyJS2/issues/44\n            //    https://github.com/mishoo/UglifyJS2/issues/1830\n            //    https://github.com/mishoo/UglifyJS2/issues/1838\n            // that's an invalid AST.\n            // We fix it at this stage by moving the `var` outside the `for`.\n            if (node instanceof AST_For) {\n                descend(node, this);\n                var block;\n                if (node.init instanceof AST_BlockStatement) {\n                    block = node.init;\n                    node.init = block.body.pop();\n                    block.body.push(node);\n                }\n                if (node.init instanceof AST_SimpleStatement) {\n                    node.init = node.init.body;\n                } else if (is_empty(node.init)) {\n                    node.init = null;\n                }\n                return !block ? node : in_list ? MAP.splice(block.body) : block;\n            }\n            if (node instanceof AST_LabeledStatement\n                && node.body instanceof AST_For\n            ) {\n                descend(node, this);\n                if (node.body instanceof AST_BlockStatement) {\n                    var block = node.body;\n                    node.body = block.body.pop();\n                    block.body.push(node);\n                    return in_list ? MAP.splice(block.body) : block;\n                }\n                return node;\n            }\n            if (node instanceof AST_BlockStatement) {\n                descend(node, this);\n                if (in_list && node.body.every(can_be_evicted_from_block)) {\n                    return MAP.splice(node.body);\n                }\n                return node;\n            }\n            if (node instanceof AST_Scope) {\n                const save_scope = scope;\n                scope = node;\n                descend(node, this);\n                scope = save_scope;\n                return node;\n            }\n\n            function template(sym) {\n                return {\n                    name : sym.name,\n                    file : sym.start.file,\n                    line : sym.start.line,\n                    col  : sym.start.col\n                };\n            }\n        }\n    );\n\n    self.transform(tt);\n\n    function scan_ref_scoped(node, descend) {\n        var node_def;\n        const sym = assign_as_unused(node);\n        if (sym instanceof AST_SymbolRef\n            && !is_ref_of(node.left, AST_SymbolBlockDeclaration)\n            && self.variables.get(sym.name) === (node_def = sym.definition())\n        ) {\n            if (node instanceof AST_Assign) {\n                node.right.walk(tw);\n                if (!node_def.chained && node.left.fixed_value() === node.right) {\n                    fixed_ids.set(node_def.id, node);\n                }\n            }\n            return true;\n        }\n        if (node instanceof AST_SymbolRef) {\n            node_def = node.definition();\n            if (!in_use_ids.has(node_def.id)) {\n                in_use_ids.set(node_def.id, node_def);\n                if (node_def.orig[0] instanceof AST_SymbolCatch) {\n                    const redef = node_def.scope.is_block_scope()\n                        && node_def.scope.get_defun_scope().variables.get(node_def.name);\n                    if (redef) in_use_ids.set(redef.id, redef);\n                }\n            }\n            return true;\n        }\n        if (node instanceof AST_Scope) {\n            var save_scope = scope;\n            scope = node;\n            descend();\n            scope = save_scope;\n            return true;\n        }\n    }\n});\n\nAST_Scope.DEFMETHOD(\"hoist_declarations\", function(compressor) {\n    var self = this;\n    if (compressor.has_directive(\"use asm\")) return self;\n    // Hoisting makes no sense in an arrow func\n    if (!Array.isArray(self.body)) return self;\n\n    var hoist_funs = compressor.option(\"hoist_funs\");\n    var hoist_vars = compressor.option(\"hoist_vars\");\n\n    if (hoist_funs || hoist_vars) {\n        var dirs = [];\n        var hoisted = [];\n        var vars = new Map(), vars_found = 0, var_decl = 0;\n        // let's count var_decl first, we seem to waste a lot of\n        // space if we hoist `var` when there's only one.\n        walk(self, node => {\n            if (node instanceof AST_Scope && node !== self)\n                return true;\n            if (node instanceof AST_Var) {\n                ++var_decl;\n                return true;\n            }\n        });\n        hoist_vars = hoist_vars && var_decl > 1;\n        var tt = new TreeTransformer(\n            function before(node) {\n                if (node !== self) {\n                    if (node instanceof AST_Directive) {\n                        dirs.push(node);\n                        return make_node(AST_EmptyStatement, node);\n                    }\n                    if (hoist_funs && node instanceof AST_Defun\n                        && !(tt.parent() instanceof AST_Export)\n                        && tt.parent() === self) {\n                        hoisted.push(node);\n                        return make_node(AST_EmptyStatement, node);\n                    }\n                    if (hoist_vars && node instanceof AST_Var) {\n                        node.definitions.forEach(function(def) {\n                            if (def.name instanceof AST_Destructuring) return;\n                            vars.set(def.name.name, def);\n                            ++vars_found;\n                        });\n                        var seq = node.to_assignments(compressor);\n                        var p = tt.parent();\n                        if (p instanceof AST_ForIn && p.init === node) {\n                            if (seq == null) {\n                                var def = node.definitions[0].name;\n                                return make_node(AST_SymbolRef, def, def);\n                            }\n                            return seq;\n                        }\n                        if (p instanceof AST_For && p.init === node) {\n                            return seq;\n                        }\n                        if (!seq) return make_node(AST_EmptyStatement, node);\n                        return make_node(AST_SimpleStatement, node, {\n                            body: seq\n                        });\n                    }\n                    if (node instanceof AST_Scope)\n                        return node; // to avoid descending in nested scopes\n                }\n            }\n        );\n        self = self.transform(tt);\n        if (vars_found > 0) {\n            // collect only vars which don't show up in self's arguments list\n            var defs = [];\n            const is_lambda = self instanceof AST_Lambda;\n            const args_as_names = is_lambda ? self.args_as_names() : null;\n            vars.forEach((def, name) => {\n                if (is_lambda && args_as_names.some((x) => x.name === def.name.name)) {\n                    vars.delete(name);\n                } else {\n                    def = def.clone();\n                    def.value = null;\n                    defs.push(def);\n                    vars.set(name, def);\n                }\n            });\n            if (defs.length > 0) {\n                // try to merge in assignments\n                for (var i = 0; i < self.body.length;) {\n                    if (self.body[i] instanceof AST_SimpleStatement) {\n                        var expr = self.body[i].body, sym, assign;\n                        if (expr instanceof AST_Assign\n                            && expr.operator == \"=\"\n                            && (sym = expr.left) instanceof AST_Symbol\n                            && vars.has(sym.name)\n                        ) {\n                            var def = vars.get(sym.name);\n                            if (def.value) break;\n                            def.value = expr.right;\n                            remove(defs, def);\n                            defs.push(def);\n                            self.body.splice(i, 1);\n                            continue;\n                        }\n                        if (expr instanceof AST_Sequence\n                            && (assign = expr.expressions[0]) instanceof AST_Assign\n                            && assign.operator == \"=\"\n                            && (sym = assign.left) instanceof AST_Symbol\n                            && vars.has(sym.name)\n                        ) {\n                            var def = vars.get(sym.name);\n                            if (def.value) break;\n                            def.value = assign.right;\n                            remove(defs, def);\n                            defs.push(def);\n                            self.body[i].body = make_sequence(expr, expr.expressions.slice(1));\n                            continue;\n                        }\n                    }\n                    if (self.body[i] instanceof AST_EmptyStatement) {\n                        self.body.splice(i, 1);\n                        continue;\n                    }\n                    if (self.body[i] instanceof AST_BlockStatement) {\n                        var tmp = [ i, 1 ].concat(self.body[i].body);\n                        self.body.splice.apply(self.body, tmp);\n                        continue;\n                    }\n                    break;\n                }\n                defs = make_node(AST_Var, self, {\n                    definitions: defs\n                });\n                hoisted.push(defs);\n            }\n        }\n        self.body = dirs.concat(hoisted, self.body);\n    }\n    return self;\n});\n\nAST_Scope.DEFMETHOD(\"make_var_name\", function(prefix) {\n    var var_names = this.var_names();\n    prefix = prefix.replace(/(?:^[^a-z_$]|[^a-z0-9_$])/ig, \"_\");\n    var name = prefix;\n    for (var i = 0; var_names.has(name); i++) name = prefix + \"$\" + i;\n    this.add_var_name(name);\n    return name;\n});\n\nAST_Scope.DEFMETHOD(\"hoist_properties\", function(compressor) {\n    var self = this;\n    if (!compressor.option(\"hoist_props\") || compressor.has_directive(\"use asm\")) return self;\n    var top_retain = self instanceof AST_Toplevel && compressor.top_retain || return_false;\n    var defs_by_id = new Map();\n    var hoister = new TreeTransformer(function(node, descend) {\n        if (node instanceof AST_Definitions\n            && hoister.parent() instanceof AST_Export) return node;\n        if (node instanceof AST_VarDef) {\n            const sym = node.name;\n            let def;\n            let value;\n            if (sym.scope === self\n                && (def = sym.definition()).escaped != 1\n                && !def.assignments\n                && !def.direct_access\n                && !def.single_use\n                && !compressor.exposed(def)\n                && !top_retain(def)\n                && (value = sym.fixed_value()) === node.value\n                && value instanceof AST_Object\n                && value.properties.every(prop => typeof prop.key === \"string\")\n            ) {\n                descend(node, this);\n                const defs = new Map();\n                const assignments = [];\n                value.properties.forEach(function(prop) {\n                    assignments.push(make_node(AST_VarDef, node, {\n                        name: make_sym(sym, prop.key, defs),\n                        value: prop.value\n                    }));\n                });\n                defs_by_id.set(def.id, defs);\n                return MAP.splice(assignments);\n            }\n        } else if (node instanceof AST_PropAccess\n            && node.expression instanceof AST_SymbolRef\n        ) {\n            const defs = defs_by_id.get(node.expression.definition().id);\n            if (defs) {\n                const def = defs.get(String(get_value(node.property)));\n                const sym = make_node(AST_SymbolRef, node, {\n                    name: def.name,\n                    scope: node.expression.scope,\n                    thedef: def\n                });\n                sym.reference({});\n                return sym;\n            }\n        }\n\n        function make_sym(sym, key, defs) {\n            const new_var = make_node(sym.CTOR, sym, {\n                name: self.make_var_name(sym.name + \"_\" + key),\n                scope: self\n            });\n            const def = self.def_variable(new_var);\n            defs.set(String(key), def);\n            self.enclosed.push(def);\n            return new_var;\n        }\n    });\n    return self.transform(hoister);\n});\n\n// drop_side_effect_free()\n// remove side-effect-free parts which only affects return value\n(function(def_drop_side_effect_free) {\n    // Drop side-effect-free elements from an array of expressions.\n    // Returns an array of expressions with side-effects or null\n    // if all elements were dropped. Note: original array may be\n    // returned if nothing changed.\n    function trim(nodes, compressor, first_in_statement) {\n        var len = nodes.length;\n        if (!len) return null;\n        var ret = [], changed = false;\n        for (var i = 0; i < len; i++) {\n            var node = nodes[i].drop_side_effect_free(compressor, first_in_statement);\n            changed |= node !== nodes[i];\n            if (node) {\n                ret.push(node);\n                first_in_statement = false;\n            }\n        }\n        return changed ? ret.length ? ret : null : nodes;\n    }\n\n    def_drop_side_effect_free(AST_Node, return_this);\n    def_drop_side_effect_free(AST_Constant, return_null);\n    def_drop_side_effect_free(AST_This, return_null);\n    def_drop_side_effect_free(AST_Call, function(compressor, first_in_statement) {\n        if (!this.is_expr_pure(compressor)) {\n            if (this.expression.is_call_pure(compressor)) {\n                var exprs = this.args.slice();\n                exprs.unshift(this.expression.expression);\n                exprs = trim(exprs, compressor, first_in_statement);\n                return exprs && make_sequence(this, exprs);\n            }\n            if (is_func_expr(this.expression)\n                && (!this.expression.name || !this.expression.name.definition().references.length)) {\n                var node = this.clone();\n                node.expression.process_expression(false, compressor);\n                return node;\n            }\n            return this;\n        }\n        if (has_annotation(this, _PURE)) {\n            compressor.warn(\"Dropping __PURE__ call [{file}:{line},{col}]\", this.start);\n        }\n        var args = trim(this.args, compressor, first_in_statement);\n        return args && make_sequence(this, args);\n    });\n    def_drop_side_effect_free(AST_Accessor, return_null);\n    def_drop_side_effect_free(AST_Function, return_null);\n    def_drop_side_effect_free(AST_Arrow, return_null);\n    def_drop_side_effect_free(AST_Class, function (compressor) {\n        const with_effects = [];\n        const trimmed_extends = this.extends && this.extends.drop_side_effect_free(compressor);\n        if (trimmed_extends) with_effects.push(trimmed_extends);\n        for (const prop of this.properties) {\n            const trimmed_prop = prop.drop_side_effect_free(compressor);\n            if (trimmed_prop) with_effects.push(trimmed_prop);\n        }\n        if (!with_effects.length) return null;\n        return make_sequence(this, with_effects);\n    });\n    def_drop_side_effect_free(AST_Binary, function(compressor, first_in_statement) {\n        var right = this.right.drop_side_effect_free(compressor);\n        if (!right) return this.left.drop_side_effect_free(compressor, first_in_statement);\n        if (lazy_op.has(this.operator)) {\n            if (right === this.right) return this;\n            var node = this.clone();\n            node.right = right;\n            return node;\n        } else {\n            var left = this.left.drop_side_effect_free(compressor, first_in_statement);\n            if (!left) return this.right.drop_side_effect_free(compressor, first_in_statement);\n            return make_sequence(this, [ left, right ]);\n        }\n    });\n    def_drop_side_effect_free(AST_Assign, function(compressor) {\n        var left = this.left;\n        if (left.has_side_effects(compressor)\n            || compressor.has_directive(\"use strict\")\n                && left instanceof AST_PropAccess\n                && left.expression.is_constant()) {\n            return this;\n        }\n        set_flag(this, WRITE_ONLY);\n        while (left instanceof AST_PropAccess) {\n            left = left.expression;\n        }\n        if (left.is_constant_expression(compressor.find_parent(AST_Scope))) {\n            return this.right.drop_side_effect_free(compressor);\n        }\n        return this;\n    });\n    def_drop_side_effect_free(AST_Conditional, function(compressor) {\n        var consequent = this.consequent.drop_side_effect_free(compressor);\n        var alternative = this.alternative.drop_side_effect_free(compressor);\n        if (consequent === this.consequent && alternative === this.alternative) return this;\n        if (!consequent) return alternative ? make_node(AST_Binary, this, {\n            operator: \"||\",\n            left: this.condition,\n            right: alternative\n        }) : this.condition.drop_side_effect_free(compressor);\n        if (!alternative) return make_node(AST_Binary, this, {\n            operator: \"&&\",\n            left: this.condition,\n            right: consequent\n        });\n        var node = this.clone();\n        node.consequent = consequent;\n        node.alternative = alternative;\n        return node;\n    });\n    def_drop_side_effect_free(AST_Unary, function(compressor, first_in_statement) {\n        if (unary_side_effects.has(this.operator)) {\n            if (!this.expression.has_side_effects(compressor)) {\n                set_flag(this, WRITE_ONLY);\n            } else {\n                clear_flag(this, WRITE_ONLY);\n            }\n            return this;\n        }\n        if (this.operator == \"typeof\" && this.expression instanceof AST_SymbolRef) return null;\n        var expression = this.expression.drop_side_effect_free(compressor, first_in_statement);\n        if (first_in_statement && expression && is_iife_call(expression)) {\n            if (expression === this.expression && this.operator == \"!\") return this;\n            return expression.negate(compressor, first_in_statement);\n        }\n        return expression;\n    });\n    def_drop_side_effect_free(AST_SymbolRef, function(compressor) {\n        const safe_access = this.is_declared(compressor)\n            || pure_prop_access_globals.has(this.name);\n        return safe_access ? null : this;\n    });\n    def_drop_side_effect_free(AST_Object, function(compressor, first_in_statement) {\n        var values = trim(this.properties, compressor, first_in_statement);\n        return values && make_sequence(this, values);\n    });\n    def_drop_side_effect_free(AST_ObjectProperty, function(compressor, first_in_statement) {\n        const computed_key = this instanceof AST_ObjectKeyVal && this.key instanceof AST_Node;\n        const key = computed_key && this.key.drop_side_effect_free(compressor, first_in_statement);\n        const value = this.value.drop_side_effect_free(compressor, first_in_statement);\n        if (key && value) {\n            return make_sequence(this, [key, value]);\n        }\n        return key || value;\n    });\n    def_drop_side_effect_free(AST_ClassProperty, function (compressor) {\n        const key = this.computed_key() && this.key.drop_side_effect_free(compressor);\n\n        const value = this.static && this.value\n            && this.value.drop_side_effect_free(compressor);\n\n        if (key && value) return make_sequence(this, [key, value]);\n        return key || value || null;\n    });\n    def_drop_side_effect_free(AST_ConciseMethod, function () {\n        return this.computed_key() ? this.key : null;\n    });\n    def_drop_side_effect_free(AST_ObjectGetter, function () {\n        return this.computed_key() ? this.key : null;\n    });\n    def_drop_side_effect_free(AST_ObjectSetter, function () {\n        return this.computed_key() ? this.key : null;\n    });\n    def_drop_side_effect_free(AST_Array, function(compressor, first_in_statement) {\n        var values = trim(this.elements, compressor, first_in_statement);\n        return values && make_sequence(this, values);\n    });\n    def_drop_side_effect_free(AST_Dot, function(compressor, first_in_statement) {\n        if (this.expression.may_throw_on_access(compressor)) return this;\n        return this.expression.drop_side_effect_free(compressor, first_in_statement);\n    });\n    def_drop_side_effect_free(AST_Sub, function(compressor, first_in_statement) {\n        if (this.expression.may_throw_on_access(compressor)) return this;\n        var expression = this.expression.drop_side_effect_free(compressor, first_in_statement);\n        if (!expression) return this.property.drop_side_effect_free(compressor, first_in_statement);\n        var property = this.property.drop_side_effect_free(compressor);\n        if (!property) return expression;\n        return make_sequence(this, [ expression, property ]);\n    });\n    def_drop_side_effect_free(AST_Sequence, function(compressor) {\n        var last = this.tail_node();\n        var expr = last.drop_side_effect_free(compressor);\n        if (expr === last) return this;\n        var expressions = this.expressions.slice(0, -1);\n        if (expr) expressions.push(expr);\n        if (!expressions.length) {\n            return make_node(AST_Number, this, { value: 0 });\n        }\n        return make_sequence(this, expressions);\n    });\n    def_drop_side_effect_free(AST_Expansion, function(compressor, first_in_statement) {\n        return this.expression.drop_side_effect_free(compressor, first_in_statement);\n    });\n    def_drop_side_effect_free(AST_TemplateSegment, return_null);\n    def_drop_side_effect_free(AST_TemplateString, function(compressor) {\n        var values = trim(this.segments, compressor, first_in_statement);\n        return values && make_sequence(this, values);\n    });\n})(function(node, func) {\n    node.DEFMETHOD(\"drop_side_effect_free\", func);\n});\n\ndef_optimize(AST_SimpleStatement, function(self, compressor) {\n    if (compressor.option(\"side_effects\")) {\n        var body = self.body;\n        var node = body.drop_side_effect_free(compressor, true);\n        if (!node) {\n            compressor.warn(\"Dropping side-effect-free statement [{file}:{line},{col}]\", self.start);\n            return make_node(AST_EmptyStatement, self);\n        }\n        if (node !== body) {\n            return make_node(AST_SimpleStatement, self, { body: node });\n        }\n    }\n    return self;\n});\n\ndef_optimize(AST_While, function(self, compressor) {\n    return compressor.option(\"loops\") ? make_node(AST_For, self, self).optimize(compressor) : self;\n});\n\nfunction has_break_or_continue(loop, parent) {\n    var found = false;\n    var tw = new TreeWalker(function(node) {\n        if (found || node instanceof AST_Scope) return true;\n        if (node instanceof AST_LoopControl && tw.loopcontrol_target(node) === loop) {\n            return found = true;\n        }\n    });\n    if (parent instanceof AST_LabeledStatement) tw.push(parent);\n    tw.push(loop);\n    loop.body.walk(tw);\n    return found;\n}\n\ndef_optimize(AST_Do, function(self, compressor) {\n    if (!compressor.option(\"loops\")) return self;\n    var cond = self.condition.tail_node().evaluate(compressor);\n    if (!(cond instanceof AST_Node)) {\n        if (cond) return make_node(AST_For, self, {\n            body: make_node(AST_BlockStatement, self.body, {\n                body: [\n                    self.body,\n                    make_node(AST_SimpleStatement, self.condition, {\n                        body: self.condition\n                    })\n                ]\n            })\n        }).optimize(compressor);\n        if (!has_break_or_continue(self, compressor.parent())) {\n            return make_node(AST_BlockStatement, self.body, {\n                body: [\n                    self.body,\n                    make_node(AST_SimpleStatement, self.condition, {\n                        body: self.condition\n                    })\n                ]\n            }).optimize(compressor);\n        }\n    }\n    return self;\n});\n\nfunction if_break_in_loop(self, compressor) {\n    var first = self.body instanceof AST_BlockStatement ? self.body.body[0] : self.body;\n    if (compressor.option(\"dead_code\") && is_break(first)) {\n        var body = [];\n        if (self.init instanceof AST_Statement) {\n            body.push(self.init);\n        } else if (self.init) {\n            body.push(make_node(AST_SimpleStatement, self.init, {\n                body: self.init\n            }));\n        }\n        if (self.condition) {\n            body.push(make_node(AST_SimpleStatement, self.condition, {\n                body: self.condition\n            }));\n        }\n        extract_declarations_from_unreachable_code(compressor, self.body, body);\n        return make_node(AST_BlockStatement, self, {\n            body: body\n        });\n    }\n    if (first instanceof AST_If) {\n        if (is_break(first.body)) {\n            if (self.condition) {\n                self.condition = make_node(AST_Binary, self.condition, {\n                    left: self.condition,\n                    operator: \"&&\",\n                    right: first.condition.negate(compressor),\n                });\n            } else {\n                self.condition = first.condition.negate(compressor);\n            }\n            drop_it(first.alternative);\n        } else if (is_break(first.alternative)) {\n            if (self.condition) {\n                self.condition = make_node(AST_Binary, self.condition, {\n                    left: self.condition,\n                    operator: \"&&\",\n                    right: first.condition,\n                });\n            } else {\n                self.condition = first.condition;\n            }\n            drop_it(first.body);\n        }\n    }\n    return self;\n\n    function is_break(node) {\n        return node instanceof AST_Break\n            && compressor.loopcontrol_target(node) === compressor.self();\n    }\n\n    function drop_it(rest) {\n        rest = as_statement_array(rest);\n        if (self.body instanceof AST_BlockStatement) {\n            self.body = self.body.clone();\n            self.body.body = rest.concat(self.body.body.slice(1));\n            self.body = self.body.transform(compressor);\n        } else {\n            self.body = make_node(AST_BlockStatement, self.body, {\n                body: rest\n            }).transform(compressor);\n        }\n        self = if_break_in_loop(self, compressor);\n    }\n}\n\ndef_optimize(AST_For, function(self, compressor) {\n    if (!compressor.option(\"loops\")) return self;\n    if (compressor.option(\"side_effects\") && self.init) {\n        self.init = self.init.drop_side_effect_free(compressor);\n    }\n    if (self.condition) {\n        var cond = self.condition.evaluate(compressor);\n        if (!(cond instanceof AST_Node)) {\n            if (cond) self.condition = null;\n            else if (!compressor.option(\"dead_code\")) {\n                var orig = self.condition;\n                self.condition = make_node_from_constant(cond, self.condition);\n                self.condition = best_of_expression(self.condition.transform(compressor), orig);\n            }\n        }\n        if (compressor.option(\"dead_code\")) {\n            if (cond instanceof AST_Node) cond = self.condition.tail_node().evaluate(compressor);\n            if (!cond) {\n                var body = [];\n                extract_declarations_from_unreachable_code(compressor, self.body, body);\n                if (self.init instanceof AST_Statement) {\n                    body.push(self.init);\n                } else if (self.init) {\n                    body.push(make_node(AST_SimpleStatement, self.init, {\n                        body: self.init\n                    }));\n                }\n                body.push(make_node(AST_SimpleStatement, self.condition, {\n                    body: self.condition\n                }));\n                return make_node(AST_BlockStatement, self, { body: body }).optimize(compressor);\n            }\n        }\n    }\n    return if_break_in_loop(self, compressor);\n});\n\ndef_optimize(AST_If, function(self, compressor) {\n    if (is_empty(self.alternative)) self.alternative = null;\n\n    if (!compressor.option(\"conditionals\")) return self;\n    // if condition can be statically determined, warn and drop\n    // one of the blocks.  note, statically determined implies\n    // “has no side effects”; also it doesn't work for cases like\n    // `x && true`, though it probably should.\n    var cond = self.condition.evaluate(compressor);\n    if (!compressor.option(\"dead_code\") && !(cond instanceof AST_Node)) {\n        var orig = self.condition;\n        self.condition = make_node_from_constant(cond, orig);\n        self.condition = best_of_expression(self.condition.transform(compressor), orig);\n    }\n    if (compressor.option(\"dead_code\")) {\n        if (cond instanceof AST_Node) cond = self.condition.tail_node().evaluate(compressor);\n        if (!cond) {\n            compressor.warn(\"Condition always false [{file}:{line},{col}]\", self.condition.start);\n            var body = [];\n            extract_declarations_from_unreachable_code(compressor, self.body, body);\n            body.push(make_node(AST_SimpleStatement, self.condition, {\n                body: self.condition\n            }));\n            if (self.alternative) body.push(self.alternative);\n            return make_node(AST_BlockStatement, self, { body: body }).optimize(compressor);\n        } else if (!(cond instanceof AST_Node)) {\n            compressor.warn(\"Condition always true [{file}:{line},{col}]\", self.condition.start);\n            var body = [];\n            body.push(make_node(AST_SimpleStatement, self.condition, {\n                body: self.condition\n            }));\n            body.push(self.body);\n            if (self.alternative) {\n                extract_declarations_from_unreachable_code(compressor, self.alternative, body);\n            }\n            return make_node(AST_BlockStatement, self, { body: body }).optimize(compressor);\n        }\n    }\n    var negated = self.condition.negate(compressor);\n    var self_condition_length = self.condition.size();\n    var negated_length = negated.size();\n    var negated_is_best = negated_length < self_condition_length;\n    if (self.alternative && negated_is_best) {\n        negated_is_best = false; // because we already do the switch here.\n        // no need to swap values of self_condition_length and negated_length\n        // here because they are only used in an equality comparison later on.\n        self.condition = negated;\n        var tmp = self.body;\n        self.body = self.alternative || make_node(AST_EmptyStatement, self);\n        self.alternative = tmp;\n    }\n    if (is_empty(self.body) && is_empty(self.alternative)) {\n        return make_node(AST_SimpleStatement, self.condition, {\n            body: self.condition.clone()\n        }).optimize(compressor);\n    }\n    if (self.body instanceof AST_SimpleStatement\n        && self.alternative instanceof AST_SimpleStatement) {\n        return make_node(AST_SimpleStatement, self, {\n            body: make_node(AST_Conditional, self, {\n                condition   : self.condition,\n                consequent  : self.body.body,\n                alternative : self.alternative.body\n            })\n        }).optimize(compressor);\n    }\n    if (is_empty(self.alternative) && self.body instanceof AST_SimpleStatement) {\n        if (self_condition_length === negated_length && !negated_is_best\n            && self.condition instanceof AST_Binary && self.condition.operator == \"||\") {\n            // although the code length of self.condition and negated are the same,\n            // negated does not require additional surrounding parentheses.\n            // see https://github.com/mishoo/UglifyJS2/issues/979\n            negated_is_best = true;\n        }\n        if (negated_is_best) return make_node(AST_SimpleStatement, self, {\n            body: make_node(AST_Binary, self, {\n                operator : \"||\",\n                left     : negated,\n                right    : self.body.body\n            })\n        }).optimize(compressor);\n        return make_node(AST_SimpleStatement, self, {\n            body: make_node(AST_Binary, self, {\n                operator : \"&&\",\n                left     : self.condition,\n                right    : self.body.body\n            })\n        }).optimize(compressor);\n    }\n    if (self.body instanceof AST_EmptyStatement\n        && self.alternative instanceof AST_SimpleStatement) {\n        return make_node(AST_SimpleStatement, self, {\n            body: make_node(AST_Binary, self, {\n                operator : \"||\",\n                left     : self.condition,\n                right    : self.alternative.body\n            })\n        }).optimize(compressor);\n    }\n    if (self.body instanceof AST_Exit\n        && self.alternative instanceof AST_Exit\n        && self.body.TYPE == self.alternative.TYPE) {\n        return make_node(self.body.CTOR, self, {\n            value: make_node(AST_Conditional, self, {\n                condition   : self.condition,\n                consequent  : self.body.value || make_node(AST_Undefined, self.body),\n                alternative : self.alternative.value || make_node(AST_Undefined, self.alternative)\n            }).transform(compressor)\n        }).optimize(compressor);\n    }\n    if (self.body instanceof AST_If\n        && !self.body.alternative\n        && !self.alternative) {\n        self = make_node(AST_If, self, {\n            condition: make_node(AST_Binary, self.condition, {\n                operator: \"&&\",\n                left: self.condition,\n                right: self.body.condition\n            }),\n            body: self.body.body,\n            alternative: null\n        });\n    }\n    if (aborts(self.body)) {\n        if (self.alternative) {\n            var alt = self.alternative;\n            self.alternative = null;\n            return make_node(AST_BlockStatement, self, {\n                body: [ self, alt ]\n            }).optimize(compressor);\n        }\n    }\n    if (aborts(self.alternative)) {\n        var body = self.body;\n        self.body = self.alternative;\n        self.condition = negated_is_best ? negated : self.condition.negate(compressor);\n        self.alternative = null;\n        return make_node(AST_BlockStatement, self, {\n            body: [ self, body ]\n        }).optimize(compressor);\n    }\n    return self;\n});\n\ndef_optimize(AST_Switch, function(self, compressor) {\n    if (!compressor.option(\"switches\")) return self;\n    var branch;\n    var value = self.expression.evaluate(compressor);\n    if (!(value instanceof AST_Node)) {\n        var orig = self.expression;\n        self.expression = make_node_from_constant(value, orig);\n        self.expression = best_of_expression(self.expression.transform(compressor), orig);\n    }\n    if (!compressor.option(\"dead_code\")) return self;\n    if (value instanceof AST_Node) {\n        value = self.expression.tail_node().evaluate(compressor);\n    }\n    var decl = [];\n    var body = [];\n    var default_branch;\n    var exact_match;\n    for (var i = 0, len = self.body.length; i < len && !exact_match; i++) {\n        branch = self.body[i];\n        if (branch instanceof AST_Default) {\n            if (!default_branch) {\n                default_branch = branch;\n            } else {\n                eliminate_branch(branch, body[body.length - 1]);\n            }\n        } else if (!(value instanceof AST_Node)) {\n            var exp = branch.expression.evaluate(compressor);\n            if (!(exp instanceof AST_Node) && exp !== value) {\n                eliminate_branch(branch, body[body.length - 1]);\n                continue;\n            }\n            if (exp instanceof AST_Node) exp = branch.expression.tail_node().evaluate(compressor);\n            if (exp === value) {\n                exact_match = branch;\n                if (default_branch) {\n                    var default_index = body.indexOf(default_branch);\n                    body.splice(default_index, 1);\n                    eliminate_branch(default_branch, body[default_index - 1]);\n                    default_branch = null;\n                }\n            }\n        }\n        if (aborts(branch)) {\n            var prev = body[body.length - 1];\n            if (aborts(prev) && prev.body.length == branch.body.length\n                && make_node(AST_BlockStatement, prev, prev).equivalent_to(make_node(AST_BlockStatement, branch, branch))) {\n                prev.body = [];\n            }\n        }\n        body.push(branch);\n    }\n    while (i < len) eliminate_branch(self.body[i++], body[body.length - 1]);\n    if (body.length > 0) {\n        body[0].body = decl.concat(body[0].body);\n    }\n    self.body = body;\n    while (branch = body[body.length - 1]) {\n        var stat = branch.body[branch.body.length - 1];\n        if (stat instanceof AST_Break && compressor.loopcontrol_target(stat) === self)\n            branch.body.pop();\n        if (branch.body.length || branch instanceof AST_Case\n            && (default_branch || branch.expression.has_side_effects(compressor))) break;\n        if (body.pop() === default_branch) default_branch = null;\n    }\n    if (body.length == 0) {\n        return make_node(AST_BlockStatement, self, {\n            body: decl.concat(make_node(AST_SimpleStatement, self.expression, {\n                body: self.expression\n            }))\n        }).optimize(compressor);\n    }\n    if (body.length == 1 && (body[0] === exact_match || body[0] === default_branch)) {\n        var has_break = false;\n        var tw = new TreeWalker(function(node) {\n            if (has_break\n                || node instanceof AST_Lambda\n                || node instanceof AST_SimpleStatement) return true;\n            if (node instanceof AST_Break && tw.loopcontrol_target(node) === self)\n                has_break = true;\n        });\n        self.walk(tw);\n        if (!has_break) {\n            var statements = body[0].body.slice();\n            var exp = body[0].expression;\n            if (exp) statements.unshift(make_node(AST_SimpleStatement, exp, {\n                body: exp\n            }));\n            statements.unshift(make_node(AST_SimpleStatement, self.expression, {\n                body:self.expression\n            }));\n            return make_node(AST_BlockStatement, self, {\n                body: statements\n            }).optimize(compressor);\n        }\n    }\n    return self;\n\n    function eliminate_branch(branch, prev) {\n        if (prev && !aborts(prev)) {\n            prev.body = prev.body.concat(branch.body);\n        } else {\n            extract_declarations_from_unreachable_code(compressor, branch, decl);\n        }\n    }\n});\n\ndef_optimize(AST_Try, function(self, compressor) {\n    tighten_body(self.body, compressor);\n    if (self.bcatch && self.bfinally && self.bfinally.body.every(is_empty)) self.bfinally = null;\n    if (compressor.option(\"dead_code\") && self.body.every(is_empty)) {\n        var body = [];\n        if (self.bcatch) {\n            extract_declarations_from_unreachable_code(compressor, self.bcatch, body);\n        }\n        if (self.bfinally) body.push(...self.bfinally.body);\n        return make_node(AST_BlockStatement, self, {\n            body: body\n        }).optimize(compressor);\n    }\n    return self;\n});\n\nAST_Definitions.DEFMETHOD(\"remove_initializers\", function() {\n    var decls = [];\n    this.definitions.forEach(function(def) {\n        if (def.name instanceof AST_SymbolDeclaration) {\n            def.value = null;\n            decls.push(def);\n        } else {\n            walk(def.name, node => {\n                if (node instanceof AST_SymbolDeclaration) {\n                    decls.push(make_node(AST_VarDef, def, {\n                        name: node,\n                        value: null\n                    }));\n                }\n            });\n        }\n    });\n    this.definitions = decls;\n});\n\nAST_Definitions.DEFMETHOD(\"to_assignments\", function(compressor) {\n    var reduce_vars = compressor.option(\"reduce_vars\");\n    var assignments = this.definitions.reduce(function(a, def) {\n        if (def.value && !(def.name instanceof AST_Destructuring)) {\n            var name = make_node(AST_SymbolRef, def.name, def.name);\n            a.push(make_node(AST_Assign, def, {\n                operator : \"=\",\n                left     : name,\n                right    : def.value\n            }));\n            if (reduce_vars) name.definition().fixed = false;\n        } else if (def.value) {\n            // Because it's a destructuring, do not turn into an assignment.\n            var varDef = make_node(AST_VarDef, def, {\n                name: def.name,\n                value: def.value\n            });\n            var var_ = make_node(AST_Var, def, {\n                definitions: [ varDef ]\n            });\n            a.push(var_);\n        }\n        def = def.name.definition();\n        def.eliminated++;\n        def.replaced--;\n        return a;\n    }, []);\n    if (assignments.length == 0) return null;\n    return make_sequence(this, assignments);\n});\n\ndef_optimize(AST_Definitions, function(self) {\n    if (self.definitions.length == 0)\n        return make_node(AST_EmptyStatement, self);\n    return self;\n});\n\ndef_optimize(AST_Import, function(self) {\n    return self;\n});\n\n// TODO this only works with AST_Defun, shouldn't it work for other ways of defining functions?\nfunction retain_top_func(fn, compressor) {\n    return compressor.top_retain\n        && fn instanceof AST_Defun\n        && has_flag(fn, TOP)\n        && fn.name\n        && compressor.top_retain(fn.name);\n}\n\ndef_optimize(AST_Call, function(self, compressor) {\n    var exp = self.expression;\n    var fn = exp;\n    inline_array_like_spread(self, compressor, self.args);\n    var simple_args = self.args.every((arg) =>\n        !(arg instanceof AST_Expansion)\n    );\n    if (compressor.option(\"reduce_vars\")\n        && fn instanceof AST_SymbolRef\n        && !has_annotation(self, _NOINLINE)\n    ) {\n        const fixed = fn.fixed_value();\n        if (!retain_top_func(fixed, compressor)) {\n            fn = fixed;\n        }\n    }\n    var is_func = fn instanceof AST_Lambda;\n    if (compressor.option(\"unused\")\n        && simple_args\n        && is_func\n        && !fn.uses_arguments\n        && !fn.pinned()) {\n        var pos = 0, last = 0;\n        for (var i = 0, len = self.args.length; i < len; i++) {\n            if (fn.argnames[i] instanceof AST_Expansion) {\n                if (has_flag(fn.argnames[i].expression, UNUSED)) while (i < len) {\n                    var node = self.args[i++].drop_side_effect_free(compressor);\n                    if (node) {\n                        self.args[pos++] = node;\n                    }\n                } else while (i < len) {\n                    self.args[pos++] = self.args[i++];\n                }\n                last = pos;\n                break;\n            }\n            var trim = i >= fn.argnames.length;\n            if (trim || has_flag(fn.argnames[i], UNUSED)) {\n                var node = self.args[i].drop_side_effect_free(compressor);\n                if (node) {\n                    self.args[pos++] = node;\n                } else if (!trim) {\n                    self.args[pos++] = make_node(AST_Number, self.args[i], {\n                        value: 0\n                    });\n                    continue;\n                }\n            } else {\n                self.args[pos++] = self.args[i];\n            }\n            last = pos;\n        }\n        self.args.length = last;\n    }\n    if (compressor.option(\"unsafe\")) {\n        if (is_undeclared_ref(exp)) switch (exp.name) {\n          case \"Array\":\n            if (self.args.length != 1) {\n                return make_node(AST_Array, self, {\n                    elements: self.args\n                }).optimize(compressor);\n            } else if (self.args[0] instanceof AST_Number && self.args[0].value <= 11) {\n                const elements = [];\n                for (let i = 0; i < self.args[0].value; i++) elements.push(new AST_Hole);\n                return new AST_Array({ elements });\n            }\n            break;\n          case \"Object\":\n            if (self.args.length == 0) {\n                return make_node(AST_Object, self, {\n                    properties: []\n                });\n            }\n            break;\n          case \"String\":\n            if (self.args.length == 0) return make_node(AST_String, self, {\n                value: \"\"\n            });\n            if (self.args.length <= 1) return make_node(AST_Binary, self, {\n                left: self.args[0],\n                operator: \"+\",\n                right: make_node(AST_String, self, { value: \"\" })\n            }).optimize(compressor);\n            break;\n          case \"Number\":\n            if (self.args.length == 0) return make_node(AST_Number, self, {\n                value: 0\n            });\n            if (self.args.length == 1 && compressor.option(\"unsafe_math\")) {\n                return make_node(AST_UnaryPrefix, self, {\n                    expression: self.args[0],\n                    operator: \"+\"\n                }).optimize(compressor);\n            }\n            break;\n          case \"Symbol\":\n            if (self.args.length == 1 && self.args[0] instanceof AST_String && compressor.option(\"unsafe_symbols\"))\n                self.args.length = 0;\n                break;\n          case \"Boolean\":\n            if (self.args.length == 0) return make_node(AST_False, self);\n            if (self.args.length == 1) return make_node(AST_UnaryPrefix, self, {\n                expression: make_node(AST_UnaryPrefix, self, {\n                    expression: self.args[0],\n                    operator: \"!\"\n                }),\n                operator: \"!\"\n            }).optimize(compressor);\n            break;\n          case \"RegExp\":\n            var params = [];\n            if (self.args.length >= 1\n                && self.args.length <= 2\n                && self.args.every((arg) => {\n                    var value = arg.evaluate(compressor);\n                    params.push(value);\n                    return arg !== value;\n                })\n            ) {\n                let [ source, flags ] = params;\n                source = regexp_source_fix(new RegExp(source).source);\n                const rx = make_node(AST_RegExp, self, {\n                    value: { source, flags }\n                });\n                if (rx._eval(compressor) !== rx) {\n                    return rx;\n                }\n                compressor.warn(\"Error converting {expr} [{file}:{line},{col}]\", {\n                    expr: self.print_to_string(),\n                    file: self.start.file,\n                    line: self.start.line,\n                    col: self.start.col\n                });\n            }\n            break;\n        } else if (exp instanceof AST_Dot) switch(exp.property) {\n          case \"toString\":\n            if (self.args.length == 0 && !exp.expression.may_throw_on_access(compressor)) {\n                return make_node(AST_Binary, self, {\n                    left: make_node(AST_String, self, { value: \"\" }),\n                    operator: \"+\",\n                    right: exp.expression\n                }).optimize(compressor);\n            }\n            break;\n          case \"join\":\n            if (exp.expression instanceof AST_Array) EXIT: {\n                var separator;\n                if (self.args.length > 0) {\n                    separator = self.args[0].evaluate(compressor);\n                    if (separator === self.args[0]) break EXIT; // not a constant\n                }\n                var elements = [];\n                var consts = [];\n                for (var i = 0, len = exp.expression.elements.length; i < len; i++) {\n                    var el = exp.expression.elements[i];\n                    if (el instanceof AST_Expansion) break EXIT;\n                    var value = el.evaluate(compressor);\n                    if (value !== el) {\n                        consts.push(value);\n                    } else {\n                        if (consts.length > 0) {\n                            elements.push(make_node(AST_String, self, {\n                                value: consts.join(separator)\n                            }));\n                            consts.length = 0;\n                        }\n                        elements.push(el);\n                    }\n                }\n                if (consts.length > 0) {\n                    elements.push(make_node(AST_String, self, {\n                        value: consts.join(separator)\n                    }));\n                }\n                if (elements.length == 0) return make_node(AST_String, self, { value: \"\" });\n                if (elements.length == 1) {\n                    if (elements[0].is_string(compressor)) {\n                        return elements[0];\n                    }\n                    return make_node(AST_Binary, elements[0], {\n                        operator : \"+\",\n                        left     : make_node(AST_String, self, { value: \"\" }),\n                        right    : elements[0]\n                    });\n                }\n                if (separator == \"\") {\n                    var first;\n                    if (elements[0].is_string(compressor)\n                        || elements[1].is_string(compressor)) {\n                        first = elements.shift();\n                    } else {\n                        first = make_node(AST_String, self, { value: \"\" });\n                    }\n                    return elements.reduce(function(prev, el) {\n                        return make_node(AST_Binary, el, {\n                            operator : \"+\",\n                            left     : prev,\n                            right    : el\n                        });\n                    }, first).optimize(compressor);\n                }\n                // need this awkward cloning to not affect original element\n                // best_of will decide which one to get through.\n                var node = self.clone();\n                node.expression = node.expression.clone();\n                node.expression.expression = node.expression.expression.clone();\n                node.expression.expression.elements = elements;\n                return best_of(compressor, self, node);\n            }\n            break;\n          case \"charAt\":\n            if (exp.expression.is_string(compressor)) {\n                var arg = self.args[0];\n                var index = arg ? arg.evaluate(compressor) : 0;\n                if (index !== arg) {\n                    return make_node(AST_Sub, exp, {\n                        expression: exp.expression,\n                        property: make_node_from_constant(index | 0, arg || exp)\n                    }).optimize(compressor);\n                }\n            }\n            break;\n          case \"apply\":\n            if (self.args.length == 2 && self.args[1] instanceof AST_Array) {\n                var args = self.args[1].elements.slice();\n                args.unshift(self.args[0]);\n                return make_node(AST_Call, self, {\n                    expression: make_node(AST_Dot, exp, {\n                        expression: exp.expression,\n                        property: \"call\"\n                    }),\n                    args: args\n                }).optimize(compressor);\n            }\n            break;\n          case \"call\":\n            var func = exp.expression;\n            if (func instanceof AST_SymbolRef) {\n                func = func.fixed_value();\n            }\n            if (func instanceof AST_Lambda && !func.contains_this()) {\n                return (self.args.length ? make_sequence(this, [\n                    self.args[0],\n                    make_node(AST_Call, self, {\n                        expression: exp.expression,\n                        args: self.args.slice(1)\n                    })\n                ]) : make_node(AST_Call, self, {\n                    expression: exp.expression,\n                    args: []\n                })).optimize(compressor);\n            }\n            break;\n        }\n    }\n    if (compressor.option(\"unsafe_Function\")\n        && is_undeclared_ref(exp)\n        && exp.name == \"Function\") {\n        // new Function() => function(){}\n        if (self.args.length == 0) return make_node(AST_Function, self, {\n            argnames: [],\n            body: []\n        }).optimize(compressor);\n        if (self.args.every((x) =>\n            x instanceof AST_String\n        )) {\n            // quite a corner-case, but we can handle it:\n            //   https://github.com/mishoo/UglifyJS2/issues/203\n            // if the code argument is a constant, then we can minify it.\n            try {\n                var code = \"n(function(\" + self.args.slice(0, -1).map(function(arg) {\n                    return arg.value;\n                }).join(\",\") + \"){\" + self.args[self.args.length - 1].value + \"})\";\n                var ast = parse(code);\n                var mangle = { ie8: compressor.option(\"ie8\") };\n                ast.figure_out_scope(mangle);\n                var comp = new Compressor(compressor.options);\n                ast = ast.transform(comp);\n                ast.figure_out_scope(mangle);\n                base54.reset();\n                ast.compute_char_frequency(mangle);\n                ast.mangle_names(mangle);\n                var fun;\n                walk(ast, node => {\n                    if (is_func_expr(node)) {\n                        fun = node;\n                        return walk_abort;\n                    }\n                });\n                var code = OutputStream();\n                AST_BlockStatement.prototype._codegen.call(fun, fun, code);\n                self.args = [\n                    make_node(AST_String, self, {\n                        value: fun.argnames.map(function(arg) {\n                            return arg.print_to_string();\n                        }).join(\",\")\n                    }),\n                    make_node(AST_String, self.args[self.args.length - 1], {\n                        value: code.get().replace(/^{|}$/g, \"\")\n                    })\n                ];\n                return self;\n            } catch (ex) {\n                if (ex instanceof JS_Parse_Error) {\n                    compressor.warn(\"Error parsing code passed to new Function [{file}:{line},{col}]\", self.args[self.args.length - 1].start);\n                    compressor.warn(ex.toString());\n                } else {\n                    throw ex;\n                }\n            }\n        }\n    }\n    var stat = is_func && fn.body[0];\n    var is_regular_func = is_func && !fn.is_generator && !fn.async;\n    var can_inline = is_regular_func && compressor.option(\"inline\") && !self.is_expr_pure(compressor);\n    if (can_inline && stat instanceof AST_Return) {\n        let returned = stat.value;\n        if (!returned || returned.is_constant_expression()) {\n            if (returned) {\n                returned = returned.clone(true);\n            } else {\n                returned = make_node(AST_Undefined, self);\n            }\n            const args = self.args.concat(returned);\n            return make_sequence(self, args).optimize(compressor);\n        }\n\n        // optimize identity function\n        if (\n            fn.argnames.length === 1\n            && (fn.argnames[0] instanceof AST_SymbolFunarg)\n            && self.args.length < 2\n            && returned instanceof AST_SymbolRef\n            && returned.name === fn.argnames[0].name\n        ) {\n            let parent;\n            if (\n                self.args[0] instanceof AST_PropAccess\n                && (parent = compressor.parent()) instanceof AST_Call\n                && parent.expression === self\n            ) {\n                // identity function was being used to remove `this`, like in\n                //\n                // id(bag.no_this)(...)\n                //\n                // Replace with a larger but more effish (0, bag.no_this) wrapper.\n\n                return make_sequence(self, [\n                    make_node(AST_Number, self, { value: 0 }),\n                    self.args[0].optimize(compressor)\n                ]);\n            }\n            // replace call with first argument or undefined if none passed\n            return (self.args[0] || make_node(AST_Undefined)).optimize(compressor);\n        }\n    }\n    if (can_inline) {\n        var scope, in_loop, level = -1;\n        let def;\n        let returned_value;\n        let nearest_scope;\n        if (simple_args\n            && !fn.uses_arguments\n            && !fn.pinned()\n            && !(compressor.parent() instanceof AST_Class)\n            && !(fn.name && fn instanceof AST_Function)\n            && (returned_value = can_flatten_body(stat))\n            && (exp === fn\n                || has_annotation(self, _INLINE)\n                || compressor.option(\"unused\")\n                    && (def = exp.definition()).references.length == 1\n                    && !recursive_ref(compressor, def)\n                    && fn.is_constant_expression(exp.scope))\n            && !has_annotation(self, _PURE | _NOINLINE)\n            && !fn.contains_this()\n            && can_inject_symbols()\n            && (nearest_scope = find_scope(compressor))\n            && !scope_encloses_variables_in_this_scope(nearest_scope, fn)\n            && !(function in_default_assign() {\n                    // Due to the fact function parameters have their own scope\n                    // which can't use `var something` in the function body within,\n                    // we simply don't inline into DefaultAssign.\n                    let i = 0;\n                    let p;\n                    while ((p = compressor.parent(i++))) {\n                        if (p instanceof AST_DefaultAssign) return true;\n                        if (p instanceof AST_Block) break;\n                    }\n                    return false;\n                })()\n            && !(scope instanceof AST_Class)\n        ) {\n            set_flag(fn, SQUEEZED);\n            nearest_scope.add_child_scope(fn);\n            return make_sequence(self, flatten_fn(returned_value)).optimize(compressor);\n        }\n    }\n    const can_drop_this_call = is_regular_func && compressor.option(\"side_effects\") && fn.body.every(is_empty);\n    if (can_drop_this_call) {\n        var args = self.args.concat(make_node(AST_Undefined, self));\n        return make_sequence(self, args).optimize(compressor);\n    }\n    if (compressor.option(\"negate_iife\")\n        && compressor.parent() instanceof AST_SimpleStatement\n        && is_iife_call(self)) {\n        return self.negate(compressor, true);\n    }\n    var ev = self.evaluate(compressor);\n    if (ev !== self) {\n        ev = make_node_from_constant(ev, self).optimize(compressor);\n        return best_of(compressor, ev, self);\n    }\n    return self;\n\n    function return_value(stat) {\n        if (!stat) return make_node(AST_Undefined, self);\n        if (stat instanceof AST_Return) {\n            if (!stat.value) return make_node(AST_Undefined, self);\n            return stat.value.clone(true);\n        }\n        if (stat instanceof AST_SimpleStatement) {\n            return make_node(AST_UnaryPrefix, stat, {\n                operator: \"void\",\n                expression: stat.body.clone(true)\n            });\n        }\n    }\n\n    function can_flatten_body(stat) {\n        var body = fn.body;\n        var len = body.length;\n        if (compressor.option(\"inline\") < 3) {\n            return len == 1 && return_value(stat);\n        }\n        stat = null;\n        for (var i = 0; i < len; i++) {\n            var line = body[i];\n            if (line instanceof AST_Var) {\n                if (stat && !line.definitions.every((var_def) =>\n                    !var_def.value\n                )) {\n                    return false;\n                }\n            } else if (stat) {\n                return false;\n            } else if (!(line instanceof AST_EmptyStatement)) {\n                stat = line;\n            }\n        }\n        return return_value(stat);\n    }\n\n    function can_inject_args(block_scoped, safe_to_inject) {\n        for (var i = 0, len = fn.argnames.length; i < len; i++) {\n            var arg = fn.argnames[i];\n            if (arg instanceof AST_DefaultAssign) {\n                if (has_flag(arg.left, UNUSED)) continue;\n                return false;\n            }\n            if (arg instanceof AST_Destructuring) return false;\n            if (arg instanceof AST_Expansion) {\n                if (has_flag(arg.expression, UNUSED)) continue;\n                return false;\n            }\n            if (has_flag(arg, UNUSED)) continue;\n            if (!safe_to_inject\n                || block_scoped.has(arg.name)\n                || identifier_atom.has(arg.name)\n                || scope.var_names().has(arg.name)) {\n                return false;\n            }\n            if (in_loop) in_loop.push(arg.definition());\n        }\n        return true;\n    }\n\n    function can_inject_args_values() {\n        var arg_vals_outer_refs = new Set();\n        const value_walker = node => {\n            if (node instanceof AST_Scope) {\n                var scope_outer_refs = new Set();\n                node.enclosed.forEach(function(def) {\n                    scope_outer_refs.add(def.name);\n                });\n                node.variables.forEach(function(name) {\n                    scope_outer_refs.delete(name);\n                });\n                scope_outer_refs.forEach(function(name) {\n                    arg_vals_outer_refs.add(name);\n                });\n                return true;\n            }\n        };\n        for (let i = 0; i < self.args.length; i++) {\n            walk(self.args[i], value_walker);\n        }\n        if (arg_vals_outer_refs.size == 0) return true;\n        for (let i = 0, len = fn.argnames.length; i < len; i++) {\n            var arg = fn.argnames[i];\n            if (arg instanceof AST_DefaultAssign && has_flag(arg.left, UNUSED)) continue;\n            if (arg instanceof AST_Expansion && has_flag(arg.expression, UNUSED)) continue;\n            if (has_flag(arg, UNUSED)) continue;\n            if (arg_vals_outer_refs.has(arg.name)) return false;\n        }\n        for (let i = 0, len = fn.body.length; i < len; i++) {\n            var stat = fn.body[i];\n            if (!(stat instanceof AST_Var)) continue;\n            for (var j = stat.definitions.length; --j >= 0;) {\n                var name = stat.definitions[j].name;\n                if (name instanceof AST_Destructuring\n                    || arg_vals_outer_refs.has(name.name)) {\n                    return false;\n                }\n            }\n        }\n        return true;\n    }\n\n    function can_inject_vars(block_scoped, safe_to_inject) {\n        var len = fn.body.length;\n        for (var i = 0; i < len; i++) {\n            var stat = fn.body[i];\n            if (!(stat instanceof AST_Var)) continue;\n            if (!safe_to_inject) return false;\n            for (var j = stat.definitions.length; --j >= 0;) {\n                var name = stat.definitions[j].name;\n                if (name instanceof AST_Destructuring\n                    || block_scoped.has(name.name)\n                    || identifier_atom.has(name.name)\n                    || scope.var_names().has(name.name)) {\n                    return false;\n                }\n                if (in_loop) in_loop.push(name.definition());\n            }\n        }\n        return true;\n    }\n\n    function can_inject_symbols() {\n        var block_scoped = new Set();\n        do {\n            scope = compressor.parent(++level);\n            if (scope.is_block_scope() && scope.block_scope) {\n                // TODO this is sometimes undefined during compression.\n                // But it should always have a value!\n                scope.block_scope.variables.forEach(function (variable) {\n                    block_scoped.add(variable.name);\n                });\n            }\n            if (scope instanceof AST_Catch) {\n                // TODO can we delete? AST_Catch is a block scope.\n                if (scope.argname) {\n                    block_scoped.add(scope.argname.name);\n                }\n            } else if (scope instanceof AST_IterationStatement) {\n                in_loop = [];\n            } else if (scope instanceof AST_SymbolRef) {\n                if (scope.fixed_value() instanceof AST_Scope) return false;\n            }\n        } while (!(scope instanceof AST_Scope));\n\n        var safe_to_inject = !(scope instanceof AST_Toplevel) || compressor.toplevel.vars;\n        var inline = compressor.option(\"inline\");\n        if (!can_inject_vars(block_scoped, inline >= 3 && safe_to_inject)) return false;\n        if (!can_inject_args(block_scoped, inline >= 2 && safe_to_inject)) return false;\n        if (!can_inject_args_values()) return false;\n        return !in_loop || in_loop.length == 0 || !is_reachable(fn, in_loop);\n    }\n\n    function append_var(decls, expressions, name, value) {\n        var def = name.definition();\n        scope.variables.set(name.name, def);\n        scope.enclosed.push(def);\n        if (!scope.var_names().has(name.name)) {\n            scope.add_var_name(name.name);\n            decls.push(make_node(AST_VarDef, name, {\n                name: name,\n                value: null\n            }));\n        }\n        var sym = make_node(AST_SymbolRef, name, name);\n        def.references.push(sym);\n        if (value) expressions.push(make_node(AST_Assign, self, {\n            operator: \"=\",\n            left: sym,\n            right: value.clone()\n        }));\n    }\n\n    function flatten_args(decls, expressions) {\n        var len = fn.argnames.length;\n        for (var i = self.args.length; --i >= len;) {\n            expressions.push(self.args[i]);\n        }\n        for (i = len; --i >= 0;) {\n            var name = fn.argnames[i];\n            var value = self.args[i];\n            if (has_flag(name, UNUSED) || !name.name || scope.var_names().has(name.name)) {\n                if (value) expressions.push(value);\n            } else {\n                var symbol = make_node(AST_SymbolVar, name, name);\n                name.definition().orig.push(symbol);\n                if (!value && in_loop) value = make_node(AST_Undefined, self);\n                append_var(decls, expressions, symbol, value);\n            }\n        }\n        decls.reverse();\n        expressions.reverse();\n    }\n\n    function flatten_vars(decls, expressions) {\n        var pos = expressions.length;\n        for (var i = 0, lines = fn.body.length; i < lines; i++) {\n            var stat = fn.body[i];\n            if (!(stat instanceof AST_Var)) continue;\n            for (var j = 0, defs = stat.definitions.length; j < defs; j++) {\n                var var_def = stat.definitions[j];\n                var name = var_def.name;\n                append_var(decls, expressions, name, var_def.value);\n                if (in_loop && fn.argnames.every((argname) =>\n                    argname.name != name.name\n                )) {\n                    var def = fn.variables.get(name.name);\n                    var sym = make_node(AST_SymbolRef, name, name);\n                    def.references.push(sym);\n                    expressions.splice(pos++, 0, make_node(AST_Assign, var_def, {\n                        operator: \"=\",\n                        left: sym,\n                        right: make_node(AST_Undefined, name)\n                    }));\n                }\n            }\n        }\n    }\n\n    function flatten_fn(returned_value) {\n        var decls = [];\n        var expressions = [];\n        flatten_args(decls, expressions);\n        flatten_vars(decls, expressions);\n        expressions.push(returned_value);\n        if (decls.length) {\n            const i = scope.body.indexOf(compressor.parent(level - 1)) + 1;\n            scope.body.splice(i, 0, make_node(AST_Var, fn, {\n                definitions: decls\n            }));\n        }\n        return expressions.map(exp => exp.clone(true));\n    }\n});\n\ndef_optimize(AST_New, function(self, compressor) {\n    if (\n        compressor.option(\"unsafe\") &&\n        is_undeclared_ref(self.expression) &&\n        [\"Object\", \"RegExp\", \"Function\", \"Error\", \"Array\"].includes(self.expression.name)\n    ) return make_node(AST_Call, self, self).transform(compressor);\n    return self;\n});\n\ndef_optimize(AST_Sequence, function(self, compressor) {\n    if (!compressor.option(\"side_effects\")) return self;\n    var expressions = [];\n    filter_for_side_effects();\n    var end = expressions.length - 1;\n    trim_right_for_undefined();\n    if (end == 0) {\n        self = maintain_this_binding(compressor.parent(), compressor.self(), expressions[0]);\n        if (!(self instanceof AST_Sequence)) self = self.optimize(compressor);\n        return self;\n    }\n    self.expressions = expressions;\n    return self;\n\n    function filter_for_side_effects() {\n        var first = first_in_statement(compressor);\n        var last = self.expressions.length - 1;\n        self.expressions.forEach(function(expr, index) {\n            if (index < last) expr = expr.drop_side_effect_free(compressor, first);\n            if (expr) {\n                merge_sequence(expressions, expr);\n                first = false;\n            }\n        });\n    }\n\n    function trim_right_for_undefined() {\n        while (end > 0 && is_undefined(expressions[end], compressor)) end--;\n        if (end < expressions.length - 1) {\n            expressions[end] = make_node(AST_UnaryPrefix, self, {\n                operator   : \"void\",\n                expression : expressions[end]\n            });\n            expressions.length = end + 1;\n        }\n    }\n});\n\nAST_Unary.DEFMETHOD(\"lift_sequences\", function(compressor) {\n    if (compressor.option(\"sequences\")) {\n        if (this.expression instanceof AST_Sequence) {\n            var x = this.expression.expressions.slice();\n            var e = this.clone();\n            e.expression = x.pop();\n            x.push(e);\n            return make_sequence(this, x).optimize(compressor);\n        }\n    }\n    return this;\n});\n\ndef_optimize(AST_UnaryPostfix, function(self, compressor) {\n    return self.lift_sequences(compressor);\n});\n\ndef_optimize(AST_UnaryPrefix, function(self, compressor) {\n    var e = self.expression;\n    if (self.operator == \"delete\"\n        && !(e instanceof AST_SymbolRef\n            || e instanceof AST_PropAccess\n            || is_identifier_atom(e))) {\n        if (e instanceof AST_Sequence) {\n            const exprs = e.expressions.slice();\n            exprs.push(make_node(AST_True, self));\n            return make_sequence(self, exprs).optimize(compressor);\n        }\n        return make_sequence(self, [ e, make_node(AST_True, self) ]).optimize(compressor);\n    }\n    var seq = self.lift_sequences(compressor);\n    if (seq !== self) {\n        return seq;\n    }\n    if (compressor.option(\"side_effects\") && self.operator == \"void\") {\n        e = e.drop_side_effect_free(compressor);\n        if (e) {\n            self.expression = e;\n            return self;\n        } else {\n            return make_node(AST_Undefined, self).optimize(compressor);\n        }\n    }\n    if (compressor.in_boolean_context()) {\n        switch (self.operator) {\n          case \"!\":\n            if (e instanceof AST_UnaryPrefix && e.operator == \"!\") {\n                // !!foo ==> foo, if we're in boolean context\n                return e.expression;\n            }\n            if (e instanceof AST_Binary) {\n                self = best_of(compressor, self, e.negate(compressor, first_in_statement(compressor)));\n            }\n            break;\n          case \"typeof\":\n            // typeof always returns a non-empty string, thus it's\n            // always true in booleans\n            compressor.warn(\"Boolean expression always true [{file}:{line},{col}]\", self.start);\n            return (e instanceof AST_SymbolRef ? make_node(AST_True, self) : make_sequence(self, [\n                e,\n                make_node(AST_True, self)\n            ])).optimize(compressor);\n        }\n    }\n    if (self.operator == \"-\" && e instanceof AST_Infinity) {\n        e = e.transform(compressor);\n    }\n    if (e instanceof AST_Binary\n        && (self.operator == \"+\" || self.operator == \"-\")\n        && (e.operator == \"*\" || e.operator == \"/\" || e.operator == \"%\")) {\n        return make_node(AST_Binary, self, {\n            operator: e.operator,\n            left: make_node(AST_UnaryPrefix, e.left, {\n                operator: self.operator,\n                expression: e.left\n            }),\n            right: e.right\n        });\n    }\n    // avoids infinite recursion of numerals\n    if (self.operator != \"-\"\n        || !(e instanceof AST_Number || e instanceof AST_Infinity || e instanceof AST_BigInt)) {\n        var ev = self.evaluate(compressor);\n        if (ev !== self) {\n            ev = make_node_from_constant(ev, self).optimize(compressor);\n            return best_of(compressor, ev, self);\n        }\n    }\n    return self;\n});\n\nAST_Binary.DEFMETHOD(\"lift_sequences\", function(compressor) {\n    if (compressor.option(\"sequences\")) {\n        if (this.left instanceof AST_Sequence) {\n            var x = this.left.expressions.slice();\n            var e = this.clone();\n            e.left = x.pop();\n            x.push(e);\n            return make_sequence(this, x).optimize(compressor);\n        }\n        if (this.right instanceof AST_Sequence && !this.left.has_side_effects(compressor)) {\n            var assign = this.operator == \"=\" && this.left instanceof AST_SymbolRef;\n            var x = this.right.expressions;\n            var last = x.length - 1;\n            for (var i = 0; i < last; i++) {\n                if (!assign && x[i].has_side_effects(compressor)) break;\n            }\n            if (i == last) {\n                x = x.slice();\n                var e = this.clone();\n                e.right = x.pop();\n                x.push(e);\n                return make_sequence(this, x).optimize(compressor);\n            } else if (i > 0) {\n                var e = this.clone();\n                e.right = make_sequence(this.right, x.slice(i));\n                x = x.slice(0, i);\n                x.push(e);\n                return make_sequence(this, x).optimize(compressor);\n            }\n        }\n    }\n    return this;\n});\n\nvar commutativeOperators = makePredicate(\"== === != !== * & | ^\");\nfunction is_object(node) {\n    return node instanceof AST_Array\n        || node instanceof AST_Lambda\n        || node instanceof AST_Object\n        || node instanceof AST_Class;\n}\n\ndef_optimize(AST_Binary, function(self, compressor) {\n    function reversible() {\n        return self.left.is_constant()\n            || self.right.is_constant()\n            || !self.left.has_side_effects(compressor)\n                && !self.right.has_side_effects(compressor);\n    }\n    function reverse(op) {\n        if (reversible()) {\n            if (op) self.operator = op;\n            var tmp = self.left;\n            self.left = self.right;\n            self.right = tmp;\n        }\n    }\n    if (commutativeOperators.has(self.operator)) {\n        if (self.right.is_constant()\n            && !self.left.is_constant()) {\n            // if right is a constant, whatever side effects the\n            // left side might have could not influence the\n            // result.  hence, force switch.\n\n            if (!(self.left instanceof AST_Binary\n                  && PRECEDENCE[self.left.operator] >= PRECEDENCE[self.operator])) {\n                reverse();\n            }\n        }\n    }\n    self = self.lift_sequences(compressor);\n    if (compressor.option(\"comparisons\")) switch (self.operator) {\n      case \"===\":\n      case \"!==\":\n        var is_strict_comparison = true;\n        if ((self.left.is_string(compressor) && self.right.is_string(compressor)) ||\n            (self.left.is_number(compressor) && self.right.is_number(compressor)) ||\n            (self.left.is_boolean() && self.right.is_boolean()) ||\n            self.left.equivalent_to(self.right)) {\n            self.operator = self.operator.substr(0, 2);\n        }\n        // XXX: intentionally falling down to the next case\n      case \"==\":\n      case \"!=\":\n        // void 0 == x => null == x\n        if (!is_strict_comparison && is_undefined(self.left, compressor)) {\n            self.left = make_node(AST_Null, self.left);\n        } else if (compressor.option(\"typeofs\")\n            // \"undefined\" == typeof x => undefined === x\n            && self.left instanceof AST_String\n            && self.left.value == \"undefined\"\n            && self.right instanceof AST_UnaryPrefix\n            && self.right.operator == \"typeof\") {\n            var expr = self.right.expression;\n            if (expr instanceof AST_SymbolRef ? expr.is_declared(compressor)\n                : !(expr instanceof AST_PropAccess && compressor.option(\"ie8\"))) {\n                self.right = expr;\n                self.left = make_node(AST_Undefined, self.left).optimize(compressor);\n                if (self.operator.length == 2) self.operator += \"=\";\n            }\n        } else if (self.left instanceof AST_SymbolRef\n            // obj !== obj => false\n            && self.right instanceof AST_SymbolRef\n            && self.left.definition() === self.right.definition()\n            && is_object(self.left.fixed_value())) {\n            return make_node(self.operator[0] == \"=\" ? AST_True : AST_False, self);\n        }\n        break;\n      case \"&&\":\n      case \"||\":\n        var lhs = self.left;\n        if (lhs.operator == self.operator) {\n            lhs = lhs.right;\n        }\n        if (lhs instanceof AST_Binary\n            && lhs.operator == (self.operator == \"&&\" ? \"!==\" : \"===\")\n            && self.right instanceof AST_Binary\n            && lhs.operator == self.right.operator\n            && (is_undefined(lhs.left, compressor) && self.right.left instanceof AST_Null\n                || lhs.left instanceof AST_Null && is_undefined(self.right.left, compressor))\n            && !lhs.right.has_side_effects(compressor)\n            && lhs.right.equivalent_to(self.right.right)) {\n            var combined = make_node(AST_Binary, self, {\n                operator: lhs.operator.slice(0, -1),\n                left: make_node(AST_Null, self),\n                right: lhs.right\n            });\n            if (lhs !== self.left) {\n                combined = make_node(AST_Binary, self, {\n                    operator: self.operator,\n                    left: self.left.left,\n                    right: combined\n                });\n            }\n            return combined;\n        }\n        break;\n    }\n    if (self.operator == \"+\" && compressor.in_boolean_context()) {\n        var ll = self.left.evaluate(compressor);\n        var rr = self.right.evaluate(compressor);\n        if (ll && typeof ll == \"string\") {\n            compressor.warn(\"+ in boolean context always true [{file}:{line},{col}]\", self.start);\n            return make_sequence(self, [\n                self.right,\n                make_node(AST_True, self)\n            ]).optimize(compressor);\n        }\n        if (rr && typeof rr == \"string\") {\n            compressor.warn(\"+ in boolean context always true [{file}:{line},{col}]\", self.start);\n            return make_sequence(self, [\n                self.left,\n                make_node(AST_True, self)\n            ]).optimize(compressor);\n        }\n    }\n    if (compressor.option(\"comparisons\") && self.is_boolean()) {\n        if (!(compressor.parent() instanceof AST_Binary)\n            || compressor.parent() instanceof AST_Assign) {\n            var negated = make_node(AST_UnaryPrefix, self, {\n                operator: \"!\",\n                expression: self.negate(compressor, first_in_statement(compressor))\n            });\n            self = best_of(compressor, self, negated);\n        }\n        if (compressor.option(\"unsafe_comps\")) {\n            switch (self.operator) {\n              case \"<\": reverse(\">\"); break;\n              case \"<=\": reverse(\">=\"); break;\n            }\n        }\n    }\n    if (self.operator == \"+\") {\n        if (self.right instanceof AST_String\n            && self.right.getValue() == \"\"\n            && self.left.is_string(compressor)) {\n            return self.left;\n        }\n        if (self.left instanceof AST_String\n            && self.left.getValue() == \"\"\n            && self.right.is_string(compressor)) {\n            return self.right;\n        }\n        if (self.left instanceof AST_Binary\n            && self.left.operator == \"+\"\n            && self.left.left instanceof AST_String\n            && self.left.left.getValue() == \"\"\n            && self.right.is_string(compressor)) {\n            self.left = self.left.right;\n            return self.transform(compressor);\n        }\n    }\n    if (compressor.option(\"evaluate\")) {\n        switch (self.operator) {\n          case \"&&\":\n            var ll = has_flag(self.left, TRUTHY)\n                ? true\n                : has_flag(self.left, FALSY)\n                    ? false\n                    : self.left.evaluate(compressor);\n            if (!ll) {\n                compressor.warn(\"Condition left of && always false [{file}:{line},{col}]\", self.start);\n                return maintain_this_binding(compressor.parent(), compressor.self(), self.left).optimize(compressor);\n            } else if (!(ll instanceof AST_Node)) {\n                compressor.warn(\"Condition left of && always true [{file}:{line},{col}]\", self.start);\n                return make_sequence(self, [ self.left, self.right ]).optimize(compressor);\n            }\n            var rr = self.right.evaluate(compressor);\n            if (!rr) {\n                if (compressor.in_boolean_context()) {\n                    compressor.warn(\"Boolean && always false [{file}:{line},{col}]\", self.start);\n                    return make_sequence(self, [\n                        self.left,\n                        make_node(AST_False, self)\n                    ]).optimize(compressor);\n                } else {\n                    set_flag(self, FALSY);\n                }\n            } else if (!(rr instanceof AST_Node)) {\n                var parent = compressor.parent();\n                if (parent.operator == \"&&\" && parent.left === compressor.self() || compressor.in_boolean_context()) {\n                    compressor.warn(\"Dropping side-effect-free && [{file}:{line},{col}]\", self.start);\n                    return self.left.optimize(compressor);\n                }\n            }\n            // x || false && y ---> x ? y : false\n            if (self.left.operator == \"||\") {\n                var lr = self.left.right.evaluate(compressor);\n                if (!lr) return make_node(AST_Conditional, self, {\n                    condition: self.left.left,\n                    consequent: self.right,\n                    alternative: self.left.right\n                }).optimize(compressor);\n            }\n            break;\n          case \"||\":\n            var ll = has_flag(self.left, TRUTHY)\n              ? true\n              : has_flag(self.left, FALSY)\n                ? false\n                : self.left.evaluate(compressor);\n            if (!ll) {\n                compressor.warn(\"Condition left of || always false [{file}:{line},{col}]\", self.start);\n                return make_sequence(self, [ self.left, self.right ]).optimize(compressor);\n            } else if (!(ll instanceof AST_Node)) {\n                compressor.warn(\"Condition left of || always true [{file}:{line},{col}]\", self.start);\n                return maintain_this_binding(compressor.parent(), compressor.self(), self.left).optimize(compressor);\n            }\n            var rr = self.right.evaluate(compressor);\n            if (!rr) {\n                var parent = compressor.parent();\n                if (parent.operator == \"||\" && parent.left === compressor.self() || compressor.in_boolean_context()) {\n                    compressor.warn(\"Dropping side-effect-free || [{file}:{line},{col}]\", self.start);\n                    return self.left.optimize(compressor);\n                }\n            } else if (!(rr instanceof AST_Node)) {\n                if (compressor.in_boolean_context()) {\n                    compressor.warn(\"Boolean || always true [{file}:{line},{col}]\", self.start);\n                    return make_sequence(self, [\n                        self.left,\n                        make_node(AST_True, self)\n                    ]).optimize(compressor);\n                } else {\n                    set_flag(self, TRUTHY);\n                }\n            }\n            if (self.left.operator == \"&&\") {\n                var lr = self.left.right.evaluate(compressor);\n                if (lr && !(lr instanceof AST_Node)) return make_node(AST_Conditional, self, {\n                    condition: self.left.left,\n                    consequent: self.left.right,\n                    alternative: self.right\n                }).optimize(compressor);\n            }\n            break;\n          case \"??\":\n            if (is_nullish(self.left)) {\n                return self.right;\n            }\n\n            var ll = self.left.evaluate(compressor);\n            if (!(ll instanceof AST_Node)) {\n                // if we know the value for sure we can simply compute right away.\n                return ll == null ? self.right : self.left;\n            }\n\n            if (compressor.in_boolean_context()) {\n                const rr = self.right.evaluate(compressor);\n                if (!(rr instanceof AST_Node) && !rr) {\n                    return self.left;\n                }\n            }\n        }\n        var associative = true;\n        switch (self.operator) {\n          case \"+\":\n            // \"foo\" + (\"bar\" + x) => \"foobar\" + x\n            if (self.left instanceof AST_Constant\n                && self.right instanceof AST_Binary\n                && self.right.operator == \"+\"\n                && self.right.is_string(compressor)) {\n                var binary = make_node(AST_Binary, self, {\n                    operator: \"+\",\n                    left: self.left,\n                    right: self.right.left,\n                });\n                var l = binary.optimize(compressor);\n                if (binary !== l) {\n                    self = make_node(AST_Binary, self, {\n                        operator: \"+\",\n                        left: l,\n                        right: self.right.right\n                    });\n                }\n            }\n            // (x + \"foo\") + \"bar\" => x + \"foobar\"\n            if (self.right instanceof AST_Constant\n                && self.left instanceof AST_Binary\n                && self.left.operator == \"+\"\n                && self.left.is_string(compressor)) {\n                var binary = make_node(AST_Binary, self, {\n                    operator: \"+\",\n                    left: self.left.right,\n                    right: self.right,\n                });\n                var r = binary.optimize(compressor);\n                if (binary !== r) {\n                    self = make_node(AST_Binary, self, {\n                        operator: \"+\",\n                        left: self.left.left,\n                        right: r\n                    });\n                }\n            }\n            // (x + \"foo\") + (\"bar\" + y) => (x + \"foobar\") + y\n            if (self.left instanceof AST_Binary\n                && self.left.operator == \"+\"\n                && self.left.is_string(compressor)\n                && self.right instanceof AST_Binary\n                && self.right.operator == \"+\"\n                && self.right.is_string(compressor)) {\n                var binary = make_node(AST_Binary, self, {\n                    operator: \"+\",\n                    left: self.left.right,\n                    right: self.right.left,\n                });\n                var m = binary.optimize(compressor);\n                if (binary !== m) {\n                    self = make_node(AST_Binary, self, {\n                        operator: \"+\",\n                        left: make_node(AST_Binary, self.left, {\n                            operator: \"+\",\n                            left: self.left.left,\n                            right: m\n                        }),\n                        right: self.right.right\n                    });\n                }\n            }\n            // a + -b => a - b\n            if (self.right instanceof AST_UnaryPrefix\n                && self.right.operator == \"-\"\n                && self.left.is_number(compressor)) {\n                self = make_node(AST_Binary, self, {\n                    operator: \"-\",\n                    left: self.left,\n                    right: self.right.expression\n                });\n                break;\n            }\n            // -a + b => b - a\n            if (self.left instanceof AST_UnaryPrefix\n                && self.left.operator == \"-\"\n                && reversible()\n                && self.right.is_number(compressor)) {\n                self = make_node(AST_Binary, self, {\n                    operator: \"-\",\n                    left: self.right,\n                    right: self.left.expression\n                });\n                break;\n            }\n            // `foo${bar}baz` + 1 => `foo${bar}baz1`\n            if (self.left instanceof AST_TemplateString) {\n                var l = self.left;\n                var r = self.right.evaluate(compressor);\n                if (r != self.right) {\n                    l.segments[l.segments.length - 1].value += r.toString();\n                    return l;\n                }\n            }\n            // 1 + `foo${bar}baz` => `1foo${bar}baz`\n            if (self.right instanceof AST_TemplateString) {\n                var r = self.right;\n                var l = self.left.evaluate(compressor);\n                if (l != self.left) {\n                    r.segments[0].value = l.toString() + r.segments[0].value ;\n                    return r;\n                }\n            }\n            // `1${bar}2` + `foo${bar}baz` => `1${bar}2foo${bar}baz`\n            if (self.left instanceof AST_TemplateString\n                && self.right instanceof AST_TemplateString) {\n                var l = self.left;\n                var segments = l.segments;\n                var r = self.right;\n                segments[segments.length - 1].value += r.segments[0].value;\n                for (var i = 1; i < r.segments.length; i++) {\n                    segments.push(r.segments[i]);\n                }\n                return l;\n            }\n          case \"*\":\n            associative = compressor.option(\"unsafe_math\");\n          case \"&\":\n          case \"|\":\n          case \"^\":\n            // a + +b => +b + a\n            if (self.left.is_number(compressor)\n                && self.right.is_number(compressor)\n                && reversible()\n                && !(self.left instanceof AST_Binary\n                    && self.left.operator != self.operator\n                    && PRECEDENCE[self.left.operator] >= PRECEDENCE[self.operator])) {\n                var reversed = make_node(AST_Binary, self, {\n                    operator: self.operator,\n                    left: self.right,\n                    right: self.left\n                });\n                if (self.right instanceof AST_Constant\n                    && !(self.left instanceof AST_Constant)) {\n                    self = best_of(compressor, reversed, self);\n                } else {\n                    self = best_of(compressor, self, reversed);\n                }\n            }\n            if (associative && self.is_number(compressor)) {\n                // a + (b + c) => (a + b) + c\n                if (self.right instanceof AST_Binary\n                    && self.right.operator == self.operator) {\n                    self = make_node(AST_Binary, self, {\n                        operator: self.operator,\n                        left: make_node(AST_Binary, self.left, {\n                            operator: self.operator,\n                            left: self.left,\n                            right: self.right.left,\n                            start: self.left.start,\n                            end: self.right.left.end\n                        }),\n                        right: self.right.right\n                    });\n                }\n                // (n + 2) + 3 => 5 + n\n                // (2 * n) * 3 => 6 + n\n                if (self.right instanceof AST_Constant\n                    && self.left instanceof AST_Binary\n                    && self.left.operator == self.operator) {\n                    if (self.left.left instanceof AST_Constant) {\n                        self = make_node(AST_Binary, self, {\n                            operator: self.operator,\n                            left: make_node(AST_Binary, self.left, {\n                                operator: self.operator,\n                                left: self.left.left,\n                                right: self.right,\n                                start: self.left.left.start,\n                                end: self.right.end\n                            }),\n                            right: self.left.right\n                        });\n                    } else if (self.left.right instanceof AST_Constant) {\n                        self = make_node(AST_Binary, self, {\n                            operator: self.operator,\n                            left: make_node(AST_Binary, self.left, {\n                                operator: self.operator,\n                                left: self.left.right,\n                                right: self.right,\n                                start: self.left.right.start,\n                                end: self.right.end\n                            }),\n                            right: self.left.left\n                        });\n                    }\n                }\n                // (a | 1) | (2 | d) => (3 | a) | b\n                if (self.left instanceof AST_Binary\n                    && self.left.operator == self.operator\n                    && self.left.right instanceof AST_Constant\n                    && self.right instanceof AST_Binary\n                    && self.right.operator == self.operator\n                    && self.right.left instanceof AST_Constant) {\n                    self = make_node(AST_Binary, self, {\n                        operator: self.operator,\n                        left: make_node(AST_Binary, self.left, {\n                            operator: self.operator,\n                            left: make_node(AST_Binary, self.left.left, {\n                                operator: self.operator,\n                                left: self.left.right,\n                                right: self.right.left,\n                                start: self.left.right.start,\n                                end: self.right.left.end\n                            }),\n                            right: self.left.left\n                        }),\n                        right: self.right.right\n                    });\n                }\n            }\n        }\n    }\n    // x && (y && z)  ==>  x && y && z\n    // x || (y || z)  ==>  x || y || z\n    // x + (\"y\" + z)  ==>  x + \"y\" + z\n    // \"x\" + (y + \"z\")==>  \"x\" + y + \"z\"\n    if (self.right instanceof AST_Binary\n        && self.right.operator == self.operator\n        && (lazy_op.has(self.operator)\n            || (self.operator == \"+\"\n                && (self.right.left.is_string(compressor)\n                    || (self.left.is_string(compressor)\n                        && self.right.right.is_string(compressor)))))\n    ) {\n        self.left = make_node(AST_Binary, self.left, {\n            operator : self.operator,\n            left     : self.left,\n            right    : self.right.left\n        });\n        self.right = self.right.right;\n        return self.transform(compressor);\n    }\n    var ev = self.evaluate(compressor);\n    if (ev !== self) {\n        ev = make_node_from_constant(ev, self).optimize(compressor);\n        return best_of(compressor, ev, self);\n    }\n    return self;\n});\n\ndef_optimize(AST_SymbolExport, function(self) {\n    return self;\n});\n\nfunction recursive_ref(compressor, def) {\n    var node;\n    for (var i = 0; node = compressor.parent(i); i++) {\n        if (\n            node instanceof AST_Lambda\n            || node instanceof AST_Class\n        ) {\n            var name = node.name;\n            if (name && name.definition() === def) break;\n        }\n    }\n    return node;\n}\n\nfunction within_array_or_object_literal(compressor) {\n    var node, level = 0;\n    while (node = compressor.parent(level++)) {\n        if (node instanceof AST_Statement) return false;\n        if (node instanceof AST_Array\n            || node instanceof AST_ObjectKeyVal\n            || node instanceof AST_Object) {\n            return true;\n        }\n    }\n    return false;\n}\n\ndef_optimize(AST_SymbolRef, function(self, compressor) {\n    if (!compressor.option(\"ie8\")\n        && is_undeclared_ref(self)\n        && (!self.scope.uses_with || !compressor.find_parent(AST_With))) {\n        switch (self.name) {\n          case \"undefined\":\n            return make_node(AST_Undefined, self).optimize(compressor);\n          case \"NaN\":\n            return make_node(AST_NaN, self).optimize(compressor);\n          case \"Infinity\":\n            return make_node(AST_Infinity, self).optimize(compressor);\n        }\n    }\n    var parent = compressor.parent();\n    if (compressor.option(\"reduce_vars\") && is_lhs(self, parent) !== self) {\n        const def = self.definition();\n        if (compressor.top_retain && def.global && compressor.top_retain(def)) {\n            def.fixed = false;\n            def.should_replace = false;\n            def.single_use = false;\n            return self;\n        }\n        var fixed = self.fixed_value();\n        var single_use = def.single_use\n            && !(parent instanceof AST_Call\n                && (parent.is_expr_pure(compressor))\n                    || has_annotation(parent, _NOINLINE));\n        if (single_use && (fixed instanceof AST_Lambda || fixed instanceof AST_Class)) {\n            if (retain_top_func(fixed, compressor)) {\n                single_use = false;\n            } else if (def.scope !== self.scope\n                && (def.escaped == 1\n                    || has_flag(fixed, INLINED)\n                    || within_array_or_object_literal(compressor))) {\n                single_use = false;\n            } else if (recursive_ref(compressor, def)) {\n                single_use = false;\n            } else if (def.scope !== self.scope || def.orig[0] instanceof AST_SymbolFunarg) {\n                single_use = fixed.is_constant_expression(self.scope);\n                if (single_use == \"f\") {\n                    var scope = self.scope;\n                    do {\n                        if (scope instanceof AST_Defun || is_func_expr(scope)) {\n                            set_flag(scope, INLINED);\n                        }\n                    } while (scope = scope.parent_scope);\n                }\n            }\n        }\n        if (single_use && fixed instanceof AST_Lambda) {\n            const block_scope = find_scope(compressor);\n            single_use =\n                def.scope === self.scope\n                    && !scope_encloses_variables_in_this_scope(block_scope, fixed)\n                || parent instanceof AST_Call\n                    && parent.expression === self\n                    && !scope_encloses_variables_in_this_scope(block_scope, fixed);\n        }\n        if (single_use && fixed instanceof AST_Class) {\n            const extends_inert = !fixed.extends\n                || !fixed.extends.may_throw(compressor)\n                    && !fixed.extends.has_side_effects(compressor);\n            single_use = extends_inert\n                && !fixed.properties.some(prop =>\n                    prop.may_throw(compressor) || prop.has_side_effects(compressor)\n                );\n        }\n        const can_pull_in = single_use && fixed;\n        if (can_pull_in) {\n            if (fixed instanceof AST_DefClass) {\n                set_flag(fixed, SQUEEZED);\n                fixed = make_node(AST_ClassExpression, fixed, fixed);\n            }\n            if (fixed instanceof AST_Defun) {\n                set_flag(fixed, SQUEEZED);\n                fixed = make_node(AST_Function, fixed, fixed);\n            }\n            if (def.recursive_refs > 0 && fixed.name instanceof AST_SymbolDefun) {\n                const defun_def = fixed.name.definition();\n                let lambda_def = fixed.variables.get(fixed.name.name);\n                let name = lambda_def && lambda_def.orig[0];\n                if (!(name instanceof AST_SymbolLambda)) {\n                    name = make_node(AST_SymbolLambda, fixed.name, fixed.name);\n                    name.scope = fixed;\n                    fixed.name = name;\n                    lambda_def = fixed.def_function(name);\n                }\n                walk(fixed, node => {\n                    if (node instanceof AST_SymbolRef && node.definition() === defun_def) {\n                        node.thedef = lambda_def;\n                        lambda_def.references.push(node);\n                    }\n                });\n            }\n            if (fixed instanceof AST_Lambda || fixed instanceof AST_Class) {\n                find_scope(compressor).add_child_scope(fixed);\n            }\n            return fixed.optimize(compressor);\n        }\n        if (fixed && def.should_replace === undefined) {\n            let init;\n            if (fixed instanceof AST_This) {\n                if (!(def.orig[0] instanceof AST_SymbolFunarg)\n                    && def.references.every((ref) =>\n                        def.scope === ref.scope\n                    )) {\n                    init = fixed;\n                }\n            } else {\n                var ev = fixed.evaluate(compressor);\n                if (ev !== fixed && (compressor.option(\"unsafe_regexp\") || !(ev instanceof RegExp))) {\n                    init = make_node_from_constant(ev, fixed);\n                }\n            }\n            if (init) {\n                var value_length = init.optimize(compressor).size();\n                var fn;\n                if (has_symbol_ref(fixed)) {\n                    fn = function() {\n                        var result = init.optimize(compressor);\n                        return result === init ? result.clone(true) : result;\n                    };\n                } else {\n                    value_length = Math.min(value_length, fixed.size());\n                    fn = function() {\n                        var result = best_of_expression(init.optimize(compressor), fixed);\n                        return result === init || result === fixed ? result.clone(true) : result;\n                    };\n                }\n                var name_length = def.name.length;\n                var overhead = 0;\n                if (compressor.option(\"unused\") && !compressor.exposed(def)) {\n                    overhead = (name_length + 2 + value_length) / (def.references.length - def.assignments);\n                }\n                def.should_replace = value_length <= name_length + overhead ? fn : false;\n            } else {\n                def.should_replace = false;\n            }\n        }\n        if (def.should_replace) {\n            return def.should_replace();\n        }\n    }\n    return self;\n\n    function has_symbol_ref(value) {\n        return walk(value, node => {\n            if (node instanceof AST_SymbolRef) return walk_abort;\n        });\n    }\n});\n\nfunction scope_encloses_variables_in_this_scope(scope, pulled_scope) {\n    for (const enclosed of pulled_scope.enclosed) {\n        if (pulled_scope.variables.has(enclosed.name)) {\n            continue;\n        }\n        const looked_up = scope.find_variable(enclosed.name);\n        if (looked_up) {\n            if (looked_up === enclosed) continue;\n            return true;\n        }\n    }\n    return false;\n}\n\nfunction is_atomic(lhs, self) {\n    return lhs instanceof AST_SymbolRef || lhs.TYPE === self.TYPE;\n}\n\ndef_optimize(AST_Undefined, function(self, compressor) {\n    if (compressor.option(\"unsafe_undefined\")) {\n        var undef = find_variable(compressor, \"undefined\");\n        if (undef) {\n            var ref = make_node(AST_SymbolRef, self, {\n                name   : \"undefined\",\n                scope  : undef.scope,\n                thedef : undef\n            });\n            set_flag(ref, UNDEFINED);\n            return ref;\n        }\n    }\n    var lhs = is_lhs(compressor.self(), compressor.parent());\n    if (lhs && is_atomic(lhs, self)) return self;\n    return make_node(AST_UnaryPrefix, self, {\n        operator: \"void\",\n        expression: make_node(AST_Number, self, {\n            value: 0\n        })\n    });\n});\n\ndef_optimize(AST_Infinity, function(self, compressor) {\n    var lhs = is_lhs(compressor.self(), compressor.parent());\n    if (lhs && is_atomic(lhs, self)) return self;\n    if (\n        compressor.option(\"keep_infinity\")\n        && !(lhs && !is_atomic(lhs, self))\n        && !find_variable(compressor, \"Infinity\")\n    ) {\n        return self;\n    }\n    return make_node(AST_Binary, self, {\n        operator: \"/\",\n        left: make_node(AST_Number, self, {\n            value: 1\n        }),\n        right: make_node(AST_Number, self, {\n            value: 0\n        })\n    });\n});\n\ndef_optimize(AST_NaN, function(self, compressor) {\n    var lhs = is_lhs(compressor.self(), compressor.parent());\n    if (lhs && !is_atomic(lhs, self)\n        || find_variable(compressor, \"NaN\")) {\n        return make_node(AST_Binary, self, {\n            operator: \"/\",\n            left: make_node(AST_Number, self, {\n                value: 0\n            }),\n            right: make_node(AST_Number, self, {\n                value: 0\n            })\n        });\n    }\n    return self;\n});\n\nfunction is_reachable(self, defs) {\n    const find_ref = node => {\n        if (node instanceof AST_SymbolRef && member(node.definition(), defs)) {\n            return walk_abort;\n        }\n    };\n\n    return walk_parent(self, (node, info) => {\n        if (node instanceof AST_Scope && node !== self) {\n            var parent = info.parent();\n            if (parent instanceof AST_Call && parent.expression === node) return;\n            if (walk(node, find_ref)) {\n                return walk_abort;\n            }\n            return true;\n        }\n    });\n}\n\nconst ASSIGN_OPS = makePredicate(\"+ - / * % >> << >>> | ^ &\");\nconst ASSIGN_OPS_COMMUTATIVE = makePredicate(\"* | ^ &\");\ndef_optimize(AST_Assign, function(self, compressor) {\n    var def;\n    if (compressor.option(\"dead_code\")\n        && self.left instanceof AST_SymbolRef\n        && (def = self.left.definition()).scope === compressor.find_parent(AST_Lambda)) {\n        var level = 0, node, parent = self;\n        do {\n            node = parent;\n            parent = compressor.parent(level++);\n            if (parent instanceof AST_Exit) {\n                if (in_try(level, parent)) break;\n                if (is_reachable(def.scope, [ def ])) break;\n                if (self.operator == \"=\") return self.right;\n                def.fixed = false;\n                return make_node(AST_Binary, self, {\n                    operator: self.operator.slice(0, -1),\n                    left: self.left,\n                    right: self.right\n                }).optimize(compressor);\n            }\n        } while (parent instanceof AST_Binary && parent.right === node\n            || parent instanceof AST_Sequence && parent.tail_node() === node);\n    }\n    self = self.lift_sequences(compressor);\n    if (self.operator == \"=\" && self.left instanceof AST_SymbolRef && self.right instanceof AST_Binary) {\n        // x = expr1 OP expr2\n        if (self.right.left instanceof AST_SymbolRef\n            && self.right.left.name == self.left.name\n            && ASSIGN_OPS.has(self.right.operator)) {\n            // x = x - 2  --->  x -= 2\n            self.operator = self.right.operator + \"=\";\n            self.right = self.right.right;\n        } else if (self.right.right instanceof AST_SymbolRef\n            && self.right.right.name == self.left.name\n            && ASSIGN_OPS_COMMUTATIVE.has(self.right.operator)\n            && !self.right.left.has_side_effects(compressor)) {\n            // x = 2 & x  --->  x &= 2\n            self.operator = self.right.operator + \"=\";\n            self.right = self.right.left;\n        }\n    }\n    return self;\n\n    function in_try(level, node) {\n        var right = self.right;\n        self.right = make_node(AST_Null, right);\n        var may_throw = node.may_throw(compressor);\n        self.right = right;\n        var scope = self.left.definition().scope;\n        var parent;\n        while ((parent = compressor.parent(level++)) !== scope) {\n            if (parent instanceof AST_Try) {\n                if (parent.bfinally) return true;\n                if (may_throw && parent.bcatch) return true;\n            }\n        }\n    }\n});\n\ndef_optimize(AST_DefaultAssign, function(self, compressor) {\n    if (!compressor.option(\"evaluate\")) {\n        return self;\n    }\n    var evaluateRight = self.right.evaluate(compressor);\n\n    // `[x = undefined] = foo` ---> `[x] = foo`\n    if (evaluateRight === undefined) {\n        self = self.left;\n    } else if (evaluateRight !== self.right) {\n        evaluateRight = make_node_from_constant(evaluateRight, self.right);\n        self.right = best_of_expression(evaluateRight, self.right);\n    }\n\n    return self;\n});\n\nfunction is_nullish(node) {\n    let fixed;\n    return (\n        node instanceof AST_Null\n        || is_undefined(node)\n        || (\n            node instanceof AST_SymbolRef\n            && (fixed = node.definition().fixed) instanceof AST_Node\n            && is_nullish(fixed)\n        )\n    );\n}\n\nfunction is_nullish_check(check, check_subject, compressor) {\n    if (check_subject.may_throw(compressor)) return false;\n\n    let nullish_side;\n\n    // foo == null\n    if (\n        check instanceof AST_Binary\n        && check.operator === \"==\"\n        // which side is nullish?\n        && (\n            (nullish_side = is_nullish(check.left) && check.left)\n            || (nullish_side = is_nullish(check.right) && check.right)\n        )\n        // is the other side the same as the check_subject\n        && (\n            nullish_side === check.left\n                ? check.right\n                : check.left\n        ).equivalent_to(check_subject)\n    ) {\n        return true;\n    }\n\n    // foo === null || foo === undefined\n    if (check instanceof AST_Binary && check.operator === \"||\") {\n        let null_cmp;\n        let undefined_cmp;\n\n        const find_comparison = cmp => {\n            if (!(\n                cmp instanceof AST_Binary\n                && (cmp.operator === \"===\" || cmp.operator === \"==\")\n            )) {\n                return false;\n            }\n\n            let found = 0;\n            let defined_side;\n\n            if (cmp.left instanceof AST_Null) {\n                found++;\n                null_cmp = cmp;\n                defined_side = cmp.right;\n            }\n            if (cmp.right instanceof AST_Null) {\n                found++;\n                null_cmp = cmp;\n                defined_side = cmp.left;\n            }\n            if (is_undefined(cmp.left)) {\n                found++;\n                undefined_cmp = cmp;\n                defined_side = cmp.right;\n            }\n            if (is_undefined(cmp.right)) {\n                found++;\n                undefined_cmp = cmp;\n                defined_side = cmp.left;\n            }\n\n            if (found !== 1) {\n                return false;\n            }\n\n            if (!defined_side.equivalent_to(check_subject)) {\n                return false;\n            }\n\n            return true;\n        };\n\n        if (!find_comparison(check.left)) return false;\n        if (!find_comparison(check.right)) return false;\n\n        if (null_cmp && undefined_cmp && null_cmp !== undefined_cmp) {\n            return true;\n        }\n    }\n\n    return false;\n}\n\ndef_optimize(AST_Conditional, function(self, compressor) {\n    if (!compressor.option(\"conditionals\")) return self;\n    // This looks like lift_sequences(), should probably be under \"sequences\"\n    if (self.condition instanceof AST_Sequence) {\n        var expressions = self.condition.expressions.slice();\n        self.condition = expressions.pop();\n        expressions.push(self);\n        return make_sequence(self, expressions);\n    }\n    var cond = self.condition.evaluate(compressor);\n    if (cond !== self.condition) {\n        if (cond) {\n            compressor.warn(\"Condition always true [{file}:{line},{col}]\", self.start);\n            return maintain_this_binding(compressor.parent(), compressor.self(), self.consequent);\n        } else {\n            compressor.warn(\"Condition always false [{file}:{line},{col}]\", self.start);\n            return maintain_this_binding(compressor.parent(), compressor.self(), self.alternative);\n        }\n    }\n    var negated = cond.negate(compressor, first_in_statement(compressor));\n    if (best_of(compressor, cond, negated) === negated) {\n        self = make_node(AST_Conditional, self, {\n            condition: negated,\n            consequent: self.alternative,\n            alternative: self.consequent\n        });\n    }\n    var condition = self.condition;\n    var consequent = self.consequent;\n    var alternative = self.alternative;\n    // x?x:y --> x||y\n    if (condition instanceof AST_SymbolRef\n        && consequent instanceof AST_SymbolRef\n        && condition.definition() === consequent.definition()) {\n        return make_node(AST_Binary, self, {\n            operator: \"||\",\n            left: condition,\n            right: alternative\n        });\n    }\n    // if (foo) exp = something; else exp = something_else;\n    //                   |\n    //                   v\n    // exp = foo ? something : something_else;\n    if (consequent instanceof AST_Assign\n        && alternative instanceof AST_Assign\n        && consequent.operator == alternative.operator\n        && consequent.left.equivalent_to(alternative.left)\n        && (!self.condition.has_side_effects(compressor)\n            || consequent.operator == \"=\"\n                && !consequent.left.has_side_effects(compressor))) {\n        return make_node(AST_Assign, self, {\n            operator: consequent.operator,\n            left: consequent.left,\n            right: make_node(AST_Conditional, self, {\n                condition: self.condition,\n                consequent: consequent.right,\n                alternative: alternative.right\n            })\n        });\n    }\n    // x ? y(a) : y(b) --> y(x ? a : b)\n    var arg_index;\n    if (consequent instanceof AST_Call\n        && alternative.TYPE === consequent.TYPE\n        && consequent.args.length > 0\n        && consequent.args.length == alternative.args.length\n        && consequent.expression.equivalent_to(alternative.expression)\n        && !self.condition.has_side_effects(compressor)\n        && !consequent.expression.has_side_effects(compressor)\n        && typeof (arg_index = single_arg_diff()) == \"number\") {\n        var node = consequent.clone();\n        node.args[arg_index] = make_node(AST_Conditional, self, {\n            condition: self.condition,\n            consequent: consequent.args[arg_index],\n            alternative: alternative.args[arg_index]\n        });\n        return node;\n    }\n    // a ? b : c ? b : d --> (a || c) ? b : d\n    if (alternative instanceof AST_Conditional\n        && consequent.equivalent_to(alternative.consequent)) {\n        return make_node(AST_Conditional, self, {\n            condition: make_node(AST_Binary, self, {\n                operator: \"||\",\n                left: condition,\n                right: alternative.condition\n            }),\n            consequent: consequent,\n            alternative: alternative.alternative\n        }).optimize(compressor);\n    }\n\n    // a == null ? b : a -> a ?? b\n    if (\n        compressor.option(\"ecma\") >= 2020 &&\n        is_nullish_check(condition, alternative, compressor)\n    ) {\n        return make_node(AST_Binary, self, {\n            operator: \"??\",\n            left: alternative,\n            right: consequent\n        }).optimize(compressor);\n    }\n\n    // a ? b : (c, b) --> (a || c), b\n    if (alternative instanceof AST_Sequence\n        && consequent.equivalent_to(alternative.expressions[alternative.expressions.length - 1])) {\n        return make_sequence(self, [\n            make_node(AST_Binary, self, {\n                operator: \"||\",\n                left: condition,\n                right: make_sequence(self, alternative.expressions.slice(0, -1))\n            }),\n            consequent\n        ]).optimize(compressor);\n    }\n    // a ? b : (c && b) --> (a || c) && b\n    if (alternative instanceof AST_Binary\n        && alternative.operator == \"&&\"\n        && consequent.equivalent_to(alternative.right)) {\n        return make_node(AST_Binary, self, {\n            operator: \"&&\",\n            left: make_node(AST_Binary, self, {\n                operator: \"||\",\n                left: condition,\n                right: alternative.left\n            }),\n            right: consequent\n        }).optimize(compressor);\n    }\n    // x?y?z:a:a --> x&&y?z:a\n    if (consequent instanceof AST_Conditional\n        && consequent.alternative.equivalent_to(alternative)) {\n        return make_node(AST_Conditional, self, {\n            condition: make_node(AST_Binary, self, {\n                left: self.condition,\n                operator: \"&&\",\n                right: consequent.condition\n            }),\n            consequent: consequent.consequent,\n            alternative: alternative\n        });\n    }\n    // x ? y : y --> x, y\n    if (consequent.equivalent_to(alternative)) {\n        return make_sequence(self, [\n            self.condition,\n            consequent\n        ]).optimize(compressor);\n    }\n    // x ? y || z : z --> x && y || z\n    if (consequent instanceof AST_Binary\n        && consequent.operator == \"||\"\n        && consequent.right.equivalent_to(alternative)) {\n        return make_node(AST_Binary, self, {\n            operator: \"||\",\n            left: make_node(AST_Binary, self, {\n                operator: \"&&\",\n                left: self.condition,\n                right: consequent.left\n            }),\n            right: alternative\n        }).optimize(compressor);\n    }\n    var in_bool = compressor.in_boolean_context();\n    if (is_true(self.consequent)) {\n        if (is_false(self.alternative)) {\n            // c ? true : false ---> !!c\n            return booleanize(self.condition);\n        }\n        // c ? true : x ---> !!c || x\n        return make_node(AST_Binary, self, {\n            operator: \"||\",\n            left: booleanize(self.condition),\n            right: self.alternative\n        });\n    }\n    if (is_false(self.consequent)) {\n        if (is_true(self.alternative)) {\n            // c ? false : true ---> !c\n            return booleanize(self.condition.negate(compressor));\n        }\n        // c ? false : x ---> !c && x\n        return make_node(AST_Binary, self, {\n            operator: \"&&\",\n            left: booleanize(self.condition.negate(compressor)),\n            right: self.alternative\n        });\n    }\n    if (is_true(self.alternative)) {\n        // c ? x : true ---> !c || x\n        return make_node(AST_Binary, self, {\n            operator: \"||\",\n            left: booleanize(self.condition.negate(compressor)),\n            right: self.consequent\n        });\n    }\n    if (is_false(self.alternative)) {\n        // c ? x : false ---> !!c && x\n        return make_node(AST_Binary, self, {\n            operator: \"&&\",\n            left: booleanize(self.condition),\n            right: self.consequent\n        });\n    }\n\n    return self;\n\n    function booleanize(node) {\n        if (node.is_boolean()) return node;\n        // !!expression\n        return make_node(AST_UnaryPrefix, node, {\n            operator: \"!\",\n            expression: node.negate(compressor)\n        });\n    }\n\n    // AST_True or !0\n    function is_true(node) {\n        return node instanceof AST_True\n            || in_bool\n                && node instanceof AST_Constant\n                && node.getValue()\n            || (node instanceof AST_UnaryPrefix\n                && node.operator == \"!\"\n                && node.expression instanceof AST_Constant\n                && !node.expression.getValue());\n    }\n    // AST_False or !1\n    function is_false(node) {\n        return node instanceof AST_False\n            || in_bool\n                && node instanceof AST_Constant\n                && !node.getValue()\n            || (node instanceof AST_UnaryPrefix\n                && node.operator == \"!\"\n                && node.expression instanceof AST_Constant\n                && node.expression.getValue());\n    }\n\n    function single_arg_diff() {\n        var a = consequent.args;\n        var b = alternative.args;\n        for (var i = 0, len = a.length; i < len; i++) {\n            if (a[i] instanceof AST_Expansion) return;\n            if (!a[i].equivalent_to(b[i])) {\n                if (b[i] instanceof AST_Expansion) return;\n                for (var j = i + 1; j < len; j++) {\n                    if (a[j] instanceof AST_Expansion) return;\n                    if (!a[j].equivalent_to(b[j])) return;\n                }\n                return i;\n            }\n        }\n    }\n});\n\ndef_optimize(AST_Boolean, function(self, compressor) {\n    if (compressor.in_boolean_context()) return make_node(AST_Number, self, {\n        value: +self.value\n    });\n    var p = compressor.parent();\n    if (compressor.option(\"booleans_as_integers\")) {\n        if (p instanceof AST_Binary && (p.operator == \"===\" || p.operator == \"!==\")) {\n            p.operator = p.operator.replace(/=$/, \"\");\n        }\n        return make_node(AST_Number, self, {\n            value: +self.value\n        });\n    }\n    if (compressor.option(\"booleans\")) {\n        if (p instanceof AST_Binary && (p.operator == \"==\"\n                                        || p.operator == \"!=\")) {\n            compressor.warn(\"Non-strict equality against boolean: {operator} {value} [{file}:{line},{col}]\", {\n                operator : p.operator,\n                value    : self.value,\n                file     : p.start.file,\n                line     : p.start.line,\n                col      : p.start.col,\n            });\n            return make_node(AST_Number, self, {\n                value: +self.value\n            });\n        }\n        return make_node(AST_UnaryPrefix, self, {\n            operator: \"!\",\n            expression: make_node(AST_Number, self, {\n                value: 1 - self.value\n            })\n        });\n    }\n    return self;\n});\n\nfunction safe_to_flatten(value, compressor) {\n    if (value instanceof AST_SymbolRef) {\n        value = value.fixed_value();\n    }\n    if (!value) return false;\n    if (!(value instanceof AST_Lambda || value instanceof AST_Class)) return true;\n    if (!(value instanceof AST_Lambda && value.contains_this())) return true;\n    return compressor.parent() instanceof AST_New;\n}\n\ndef_optimize(AST_Sub, function(self, compressor) {\n    var expr = self.expression;\n    var prop = self.property;\n    if (compressor.option(\"properties\")) {\n        var key = prop.evaluate(compressor);\n        if (key !== prop) {\n            if (typeof key == \"string\") {\n                if (key == \"undefined\") {\n                    key = undefined;\n                } else {\n                    var value = parseFloat(key);\n                    if (value.toString() == key) {\n                        key = value;\n                    }\n                }\n            }\n            prop = self.property = best_of_expression(prop, make_node_from_constant(key, prop).transform(compressor));\n            var property = \"\" + key;\n            if (is_basic_identifier_string(property)\n                && property.length <= prop.size() + 1) {\n                return make_node(AST_Dot, self, {\n                    expression: expr,\n                    property: property,\n                    quote: prop.quote,\n                }).optimize(compressor);\n            }\n        }\n    }\n    var fn;\n    OPT_ARGUMENTS: if (compressor.option(\"arguments\")\n        && expr instanceof AST_SymbolRef\n        && expr.name == \"arguments\"\n        && expr.definition().orig.length == 1\n        && (fn = expr.scope) instanceof AST_Lambda\n        && fn.uses_arguments\n        && !(fn instanceof AST_Arrow)\n        && prop instanceof AST_Number) {\n        var index = prop.getValue();\n        var params = new Set();\n        var argnames = fn.argnames;\n        for (var n = 0; n < argnames.length; n++) {\n            if (!(argnames[n] instanceof AST_SymbolFunarg)) {\n                break OPT_ARGUMENTS; // destructuring parameter - bail\n            }\n            var param = argnames[n].name;\n            if (params.has(param)) {\n                break OPT_ARGUMENTS; // duplicate parameter - bail\n            }\n            params.add(param);\n        }\n        var argname = fn.argnames[index];\n        if (argname && compressor.has_directive(\"use strict\")) {\n            var def = argname.definition();\n            if (!compressor.option(\"reduce_vars\") || def.assignments || def.orig.length > 1) {\n                argname = null;\n            }\n        } else if (!argname && !compressor.option(\"keep_fargs\") && index < fn.argnames.length + 5) {\n            while (index >= fn.argnames.length) {\n                argname = make_node(AST_SymbolFunarg, fn, {\n                    name: fn.make_var_name(\"argument_\" + fn.argnames.length),\n                    scope: fn\n                });\n                fn.argnames.push(argname);\n                fn.enclosed.push(fn.def_variable(argname));\n            }\n        }\n        if (argname) {\n            var sym = make_node(AST_SymbolRef, self, argname);\n            sym.reference({});\n            clear_flag(argname, UNUSED);\n            return sym;\n        }\n    }\n    if (is_lhs(self, compressor.parent())) return self;\n    if (key !== prop) {\n        var sub = self.flatten_object(property, compressor);\n        if (sub) {\n            expr = self.expression = sub.expression;\n            prop = self.property = sub.property;\n        }\n    }\n    if (compressor.option(\"properties\") && compressor.option(\"side_effects\")\n        && prop instanceof AST_Number && expr instanceof AST_Array) {\n        var index = prop.getValue();\n        var elements = expr.elements;\n        var retValue = elements[index];\n        FLATTEN: if (safe_to_flatten(retValue, compressor)) {\n            var flatten = true;\n            var values = [];\n            for (var i = elements.length; --i > index;) {\n                var value = elements[i].drop_side_effect_free(compressor);\n                if (value) {\n                    values.unshift(value);\n                    if (flatten && value.has_side_effects(compressor)) flatten = false;\n                }\n            }\n            if (retValue instanceof AST_Expansion) break FLATTEN;\n            retValue = retValue instanceof AST_Hole ? make_node(AST_Undefined, retValue) : retValue;\n            if (!flatten) values.unshift(retValue);\n            while (--i >= 0) {\n                var value = elements[i];\n                if (value instanceof AST_Expansion) break FLATTEN;\n                value = value.drop_side_effect_free(compressor);\n                if (value) values.unshift(value);\n                else index--;\n            }\n            if (flatten) {\n                values.push(retValue);\n                return make_sequence(self, values).optimize(compressor);\n            } else return make_node(AST_Sub, self, {\n                expression: make_node(AST_Array, expr, {\n                    elements: values\n                }),\n                property: make_node(AST_Number, prop, {\n                    value: index\n                })\n            });\n        }\n    }\n    var ev = self.evaluate(compressor);\n    if (ev !== self) {\n        ev = make_node_from_constant(ev, self).optimize(compressor);\n        return best_of(compressor, ev, self);\n    }\n    return self;\n});\n\nAST_Lambda.DEFMETHOD(\"contains_this\", function() {\n    return walk(this, node => {\n        if (node instanceof AST_This) return walk_abort;\n        if (\n            node !== this\n            && node instanceof AST_Scope\n            && !(node instanceof AST_Arrow)\n        ) {\n            return true;\n        }\n    });\n});\n\nAST_PropAccess.DEFMETHOD(\"flatten_object\", function(key, compressor) {\n    if (!compressor.option(\"properties\")) return;\n    var arrows = compressor.option(\"unsafe_arrows\") && compressor.option(\"ecma\") >= 2015;\n    var expr = this.expression;\n    if (expr instanceof AST_Object) {\n        var props = expr.properties;\n        for (var i = props.length; --i >= 0;) {\n            var prop = props[i];\n            if (\"\" + (prop instanceof AST_ConciseMethod ? prop.key.name : prop.key) == key) {\n                if (!props.every((prop) => {\n                    return prop instanceof AST_ObjectKeyVal\n                        || arrows && prop instanceof AST_ConciseMethod && !prop.is_generator;\n                })) break;\n                if (!safe_to_flatten(prop.value, compressor)) break;\n                return make_node(AST_Sub, this, {\n                    expression: make_node(AST_Array, expr, {\n                        elements: props.map(function(prop) {\n                            var v = prop.value;\n                            if (v instanceof AST_Accessor) v = make_node(AST_Function, v, v);\n                            var k = prop.key;\n                            if (k instanceof AST_Node && !(k instanceof AST_SymbolMethod)) {\n                                return make_sequence(prop, [ k, v ]);\n                            }\n                            return v;\n                        })\n                    }),\n                    property: make_node(AST_Number, this, {\n                        value: i\n                    })\n                });\n            }\n        }\n    }\n});\n\ndef_optimize(AST_Dot, function(self, compressor) {\n    if (self.property == \"arguments\" || self.property == \"caller\") {\n        compressor.warn(\"Function.prototype.{prop} not supported [{file}:{line},{col}]\", {\n            prop: self.property,\n            file: self.start.file,\n            line: self.start.line,\n            col: self.start.col\n        });\n    }\n    const parent = compressor.parent();\n    if (is_lhs(self, parent)) return self;\n    if (compressor.option(\"unsafe_proto\")\n        && self.expression instanceof AST_Dot\n        && self.expression.property == \"prototype\") {\n        var exp = self.expression.expression;\n        if (is_undeclared_ref(exp)) switch (exp.name) {\n          case \"Array\":\n            self.expression = make_node(AST_Array, self.expression, {\n                elements: []\n            });\n            break;\n          case \"Function\":\n            self.expression = make_node(AST_Function, self.expression, {\n                argnames: [],\n                body: []\n            });\n            break;\n          case \"Number\":\n            self.expression = make_node(AST_Number, self.expression, {\n                value: 0\n            });\n            break;\n          case \"Object\":\n            self.expression = make_node(AST_Object, self.expression, {\n                properties: []\n            });\n            break;\n          case \"RegExp\":\n            self.expression = make_node(AST_RegExp, self.expression, {\n                value: { source: \"t\", flags: \"\" }\n            });\n            break;\n          case \"String\":\n            self.expression = make_node(AST_String, self.expression, {\n                value: \"\"\n            });\n            break;\n        }\n    }\n    if (!(parent instanceof AST_Call) || !has_annotation(parent, _NOINLINE)) {\n        const sub = self.flatten_object(self.property, compressor);\n        if (sub) return sub.optimize(compressor);\n    }\n    let ev = self.evaluate(compressor);\n    if (ev !== self) {\n        ev = make_node_from_constant(ev, self).optimize(compressor);\n        return best_of(compressor, ev, self);\n    }\n    return self;\n});\n\nfunction literals_in_boolean_context(self, compressor) {\n    if (compressor.in_boolean_context()) {\n        return best_of(compressor, self, make_sequence(self, [\n            self,\n            make_node(AST_True, self)\n        ]).optimize(compressor));\n    }\n    return self;\n}\n\nfunction inline_array_like_spread(self, compressor, elements) {\n    for (var i = 0; i < elements.length; i++) {\n        var el = elements[i];\n        if (el instanceof AST_Expansion) {\n            var expr = el.expression;\n            if ( expr instanceof AST_Array) {\n                elements.splice(i, 1, ...expr.elements);\n                // Step back one, as the element at i is now new.\n                i--;\n            }\n            // In array-like spread, spreading a non-iterable value is TypeError.\n            // We therefore can’t optimize anything else, unlike with object spread.\n        }\n    }\n    return self;\n}\n\ndef_optimize(AST_Array, function(self, compressor) {\n    var optimized = literals_in_boolean_context(self, compressor);\n    if (optimized !== self) {\n        return optimized;\n    }\n    return inline_array_like_spread(self, compressor, self.elements);\n});\n\ndef_optimize(AST_Object, function(self, compressor) {\n    var optimized = literals_in_boolean_context(self, compressor);\n    if (optimized !== self) {\n        return optimized;\n    }\n    var props = self.properties;\n    for (var i = 0; i < props.length; i++) {\n        var prop = props[i];\n        if (prop instanceof AST_Expansion) {\n            var expr = prop.expression;\n            if (expr instanceof AST_Object) {\n                props.splice.apply(props, [i, 1].concat(prop.expression.properties));\n                // Step back one, as the property at i is now new.\n                i--;\n            } else if (expr instanceof AST_Constant\n                && !(expr instanceof AST_String)) {\n                // Unlike array-like spread, in object spread, spreading a\n                // non-iterable value silently does nothing; it is thus safe\n                // to remove. AST_String is the only iterable AST_Constant.\n                props.splice(i, 1);\n            }\n        }\n    }\n    return self;\n});\n\ndef_optimize(AST_RegExp, literals_in_boolean_context);\n\ndef_optimize(AST_Return, function(self, compressor) {\n    if (self.value && is_undefined(self.value, compressor)) {\n        self.value = null;\n    }\n    return self;\n});\n\ndef_optimize(AST_Arrow, opt_AST_Lambda);\n\ndef_optimize(AST_Function, function(self, compressor) {\n    self = opt_AST_Lambda(self, compressor);\n    if (compressor.option(\"unsafe_arrows\")\n        && compressor.option(\"ecma\") >= 2015\n        && !self.name\n        && !self.is_generator\n        && !self.uses_arguments\n        && !self.pinned()) {\n        const has_special_symbol = walk(self, node => {\n            if (node instanceof AST_This) return walk_abort;\n        });\n        if (!has_special_symbol) return make_node(AST_Arrow, self, self).optimize(compressor);\n    }\n    return self;\n});\n\ndef_optimize(AST_Class, function(self) {\n    // HACK to avoid compress failure.\n    // AST_Class is not really an AST_Scope/AST_Block as it lacks a body.\n    return self;\n});\n\ndef_optimize(AST_Yield, function(self, compressor) {\n    if (self.expression && !self.is_star && is_undefined(self.expression, compressor)) {\n        self.expression = null;\n    }\n    return self;\n});\n\ndef_optimize(AST_TemplateString, function(self, compressor) {\n    if (!compressor.option(\"evaluate\")\n    || compressor.parent() instanceof AST_PrefixedTemplateString)\n        return self;\n\n    var segments = [];\n    for (var i = 0; i < self.segments.length; i++) {\n        var segment = self.segments[i];\n        if (segment instanceof AST_Node) {\n            var result = segment.evaluate(compressor);\n            // Evaluate to constant value\n            // Constant value shorter than ${segment}\n            if (result !== segment && (result + \"\").length <= segment.size() + \"${}\".length) {\n                // There should always be a previous and next segment if segment is a node\n                segments[segments.length - 1].value = segments[segments.length - 1].value + result + self.segments[++i].value;\n                continue;\n            }\n            // `before ${`innerBefore ${any} innerAfter`} after` => `before innerBefore ${any} innerAfter after`\n            // TODO:\n            // `before ${'test' + foo} after` => `before innerBefore ${any} innerAfter after`\n            // `before ${foo + 'test} after` => `before innerBefore ${any} innerAfter after`\n            if (segment instanceof AST_TemplateString) {\n                var inners = segment.segments;\n                segments[segments.length - 1].value += inners[0].value;\n                for (var j = 1; j < inners.length; j++) {\n                    segment = inners[j];\n                    segments.push(segment);\n                }\n                continue;\n            }\n        }\n        segments.push(segment);\n    }\n    self.segments = segments;\n\n    // `foo` => \"foo\"\n    if (segments.length == 1) {\n        return make_node(AST_String, self, segments[0]);\n    }\n    if (segments.length === 3 && segments[1] instanceof AST_Node) {\n        // `foo${bar}` => \"foo\" + bar\n        if (segments[2].value === \"\") {\n            return make_node(AST_Binary, self, {\n                operator: \"+\",\n                left: make_node(AST_String, self, {\n                    value: segments[0].value,\n                }),\n                right: segments[1],\n            });\n        }\n        // `{bar}baz` => bar + \"baz\"\n        if (segments[0].value === \"\") {\n            return make_node(AST_Binary, self, {\n                operator: \"+\",\n                left: segments[1],\n                right: make_node(AST_String, self, {\n                    value: segments[2].value,\n                }),\n            });\n        }\n    }\n    return self;\n});\n\ndef_optimize(AST_PrefixedTemplateString, function(self) {\n    return self;\n});\n\n// [\"p\"]:1 ---> p:1\n// [42]:1 ---> 42:1\nfunction lift_key(self, compressor) {\n    if (!compressor.option(\"computed_props\")) return self;\n    // save a comparison in the typical case\n    if (!(self.key instanceof AST_Constant)) return self;\n    // whitelist acceptable props as not all AST_Constants are true constants\n    if (self.key instanceof AST_String || self.key instanceof AST_Number) {\n        if (self.key.value === \"__proto__\") return self;\n        if (self.key.value == \"constructor\"\n            && compressor.parent() instanceof AST_Class) return self;\n        if (self instanceof AST_ObjectKeyVal) {\n            self.key = self.key.value;\n        } else if (self instanceof AST_ClassProperty) {\n            self.key = make_node(AST_SymbolClassProperty, self.key, {\n                name: self.key.value\n            });\n        } else {\n            self.key = make_node(AST_SymbolMethod, self.key, {\n                name: self.key.value\n            });\n        }\n    }\n    return self;\n}\n\ndef_optimize(AST_ObjectProperty, lift_key);\n\ndef_optimize(AST_ConciseMethod, function(self, compressor) {\n    lift_key(self, compressor);\n    // p(){return x;} ---> p:()=>x\n    if (compressor.option(\"arrows\")\n        && compressor.parent() instanceof AST_Object\n        && !self.is_generator\n        && !self.value.uses_arguments\n        && !self.value.pinned()\n        && self.value.body.length == 1\n        && self.value.body[0] instanceof AST_Return\n        && self.value.body[0].value\n        && !self.value.contains_this()) {\n        var arrow = make_node(AST_Arrow, self.value, self.value);\n        arrow.async = self.async;\n        arrow.is_generator = self.is_generator;\n        return make_node(AST_ObjectKeyVal, self, {\n            key: self.key instanceof AST_SymbolMethod ? self.key.name : self.key,\n            value: arrow,\n            quote: self.quote,\n        });\n    }\n    return self;\n});\n\ndef_optimize(AST_ObjectKeyVal, function(self, compressor) {\n    lift_key(self, compressor);\n    // p:function(){} ---> p(){}\n    // p:function*(){} ---> *p(){}\n    // p:async function(){} ---> async p(){}\n    // p:()=>{} ---> p(){}\n    // p:async()=>{} ---> async p(){}\n    var unsafe_methods = compressor.option(\"unsafe_methods\");\n    if (unsafe_methods\n        && compressor.option(\"ecma\") >= 2015\n        && (!(unsafe_methods instanceof RegExp) || unsafe_methods.test(self.key + \"\"))) {\n        var key = self.key;\n        var value = self.value;\n        var is_arrow_with_block = value instanceof AST_Arrow\n            && Array.isArray(value.body)\n            && !value.contains_this();\n        if ((is_arrow_with_block || value instanceof AST_Function) && !value.name) {\n            return make_node(AST_ConciseMethod, self, {\n                async: value.async,\n                is_generator: value.is_generator,\n                key: key instanceof AST_Node ? key : make_node(AST_SymbolMethod, self, {\n                    name: key,\n                }),\n                value: make_node(AST_Accessor, value, value),\n                quote: self.quote,\n            });\n        }\n    }\n    return self;\n});\n\ndef_optimize(AST_Destructuring, function(self, compressor) {\n    if (compressor.option(\"pure_getters\") == true\n        && compressor.option(\"unused\")\n        && !self.is_array\n        && Array.isArray(self.names)\n        && !is_destructuring_export_decl(compressor)) {\n        var keep = [];\n        for (var i = 0; i < self.names.length; i++) {\n            var elem = self.names[i];\n            if (!(elem instanceof AST_ObjectKeyVal\n                && typeof elem.key == \"string\"\n                && elem.value instanceof AST_SymbolDeclaration\n                && !should_retain(compressor, elem.value.definition()))) {\n                keep.push(elem);\n            }\n        }\n        if (keep.length != self.names.length) {\n            self.names = keep;\n        }\n    }\n    return self;\n\n    function is_destructuring_export_decl(compressor) {\n        var ancestors = [/^VarDef$/, /^(Const|Let|Var)$/, /^Export$/];\n        for (var a = 0, p = 0, len = ancestors.length; a < len; p++) {\n            var parent = compressor.parent(p);\n            if (!parent) return false;\n            if (a === 0 && parent.TYPE == \"Destructuring\") continue;\n            if (!ancestors[a].test(parent.TYPE)) {\n                return false;\n            }\n            a++;\n        }\n        return true;\n    }\n\n    function should_retain(compressor, def) {\n        if (def.references.length) return true;\n        if (!def.global) return false;\n        if (compressor.toplevel.vars) {\n             if (compressor.top_retain) {\n                 return compressor.top_retain(def);\n             }\n             return false;\n        }\n        return true;\n    }\n});\n\nexport {\n    Compressor,\n};\n","export var domprops = [\n    \"$&\",\n    \"$'\",\n    \"$*\",\n    \"$+\",\n    \"$1\",\n    \"$2\",\n    \"$3\",\n    \"$4\",\n    \"$5\",\n    \"$6\",\n    \"$7\",\n    \"$8\",\n    \"$9\",\n    \"$_\",\n    \"$`\",\n    \"$input\",\n    \"@@iterator\",\n    \"ABORT_ERR\",\n    \"ACTIVE\",\n    \"ACTIVE_ATTRIBUTES\",\n    \"ACTIVE_TEXTURE\",\n    \"ACTIVE_UNIFORMS\",\n    \"ADDITION\",\n    \"ALIASED_LINE_WIDTH_RANGE\",\n    \"ALIASED_POINT_SIZE_RANGE\",\n    \"ALLOW_KEYBOARD_INPUT\",\n    \"ALLPASS\",\n    \"ALPHA\",\n    \"ALPHA_BITS\",\n    \"ALT_MASK\",\n    \"ALWAYS\",\n    \"ANY_TYPE\",\n    \"ANY_UNORDERED_NODE_TYPE\",\n    \"ARRAY_BUFFER\",\n    \"ARRAY_BUFFER_BINDING\",\n    \"ATTACHED_SHADERS\",\n    \"ATTRIBUTE_NODE\",\n    \"AT_TARGET\",\n    \"AddSearchProvider\",\n    \"AnalyserNode\",\n    \"AnimationEvent\",\n    \"AnonXMLHttpRequest\",\n    \"ApplicationCache\",\n    \"ApplicationCacheErrorEvent\",\n    \"Array\",\n    \"ArrayBuffer\",\n    \"Attr\",\n    \"Audio\",\n    \"AudioBuffer\",\n    \"AudioBufferSourceNode\",\n    \"AudioContext\",\n    \"AudioDestinationNode\",\n    \"AudioListener\",\n    \"AudioNode\",\n    \"AudioParam\",\n    \"AudioProcessingEvent\",\n    \"AudioStreamTrack\",\n    \"AutocompleteErrorEvent\",\n    \"BACK\",\n    \"BAD_BOUNDARYPOINTS_ERR\",\n    \"BANDPASS\",\n    \"BLEND\",\n    \"BLEND_COLOR\",\n    \"BLEND_DST_ALPHA\",\n    \"BLEND_DST_RGB\",\n    \"BLEND_EQUATION\",\n    \"BLEND_EQUATION_ALPHA\",\n    \"BLEND_EQUATION_RGB\",\n    \"BLEND_SRC_ALPHA\",\n    \"BLEND_SRC_RGB\",\n    \"BLUE_BITS\",\n    \"BLUR\",\n    \"BOOL\",\n    \"BOOLEAN_TYPE\",\n    \"BOOL_VEC2\",\n    \"BOOL_VEC3\",\n    \"BOOL_VEC4\",\n    \"BOTH\",\n    \"BROWSER_DEFAULT_WEBGL\",\n    \"BUBBLING_PHASE\",\n    \"BUFFER_SIZE\",\n    \"BUFFER_USAGE\",\n    \"BYTE\",\n    \"BYTES_PER_ELEMENT\",\n    \"BarProp\",\n    \"BaseHref\",\n    \"BatteryManager\",\n    \"BeforeLoadEvent\",\n    \"BeforeUnloadEvent\",\n    \"BiquadFilterNode\",\n    \"Blob\",\n    \"BlobEvent\",\n    \"Boolean\",\n    \"CAPTURING_PHASE\",\n    \"CCW\",\n    \"CDATASection\",\n    \"CDATA_SECTION_NODE\",\n    \"CHANGE\",\n    \"CHARSET_RULE\",\n    \"CHECKING\",\n    \"CLAMP_TO_EDGE\",\n    \"CLICK\",\n    \"CLOSED\",\n    \"CLOSING\",\n    \"COLOR_ATTACHMENT0\",\n    \"COLOR_BUFFER_BIT\",\n    \"COLOR_CLEAR_VALUE\",\n    \"COLOR_WRITEMASK\",\n    \"COMMENT_NODE\",\n    \"COMPILE_STATUS\",\n    \"COMPRESSED_RGBA_S3TC_DXT1_EXT\",\n    \"COMPRESSED_RGBA_S3TC_DXT3_EXT\",\n    \"COMPRESSED_RGBA_S3TC_DXT5_EXT\",\n    \"COMPRESSED_RGB_S3TC_DXT1_EXT\",\n    \"COMPRESSED_TEXTURE_FORMATS\",\n    \"CONNECTING\",\n    \"CONSTANT_ALPHA\",\n    \"CONSTANT_COLOR\",\n    \"CONSTRAINT_ERR\",\n    \"CONTEXT_LOST_WEBGL\",\n    \"CONTROL_MASK\",\n    \"COUNTER_STYLE_RULE\",\n    \"CSS\",\n    \"CSS2Properties\",\n    \"CSSCharsetRule\",\n    \"CSSConditionRule\",\n    \"CSSCounterStyleRule\",\n    \"CSSFontFaceRule\",\n    \"CSSFontFeatureValuesRule\",\n    \"CSSGroupingRule\",\n    \"CSSImportRule\",\n    \"CSSKeyframeRule\",\n    \"CSSKeyframesRule\",\n    \"CSSMediaRule\",\n    \"CSSMozDocumentRule\",\n    \"CSSNameSpaceRule\",\n    \"CSSPageRule\",\n    \"CSSPrimitiveValue\",\n    \"CSSRule\",\n    \"CSSRuleList\",\n    \"CSSStyleDeclaration\",\n    \"CSSStyleRule\",\n    \"CSSStyleSheet\",\n    \"CSSSupportsRule\",\n    \"CSSUnknownRule\",\n    \"CSSValue\",\n    \"CSSValueList\",\n    \"CSSVariablesDeclaration\",\n    \"CSSVariablesRule\",\n    \"CSSViewportRule\",\n    \"CSS_ATTR\",\n    \"CSS_CM\",\n    \"CSS_COUNTER\",\n    \"CSS_CUSTOM\",\n    \"CSS_DEG\",\n    \"CSS_DIMENSION\",\n    \"CSS_EMS\",\n    \"CSS_EXS\",\n    \"CSS_FILTER_BLUR\",\n    \"CSS_FILTER_BRIGHTNESS\",\n    \"CSS_FILTER_CONTRAST\",\n    \"CSS_FILTER_CUSTOM\",\n    \"CSS_FILTER_DROP_SHADOW\",\n    \"CSS_FILTER_GRAYSCALE\",\n    \"CSS_FILTER_HUE_ROTATE\",\n    \"CSS_FILTER_INVERT\",\n    \"CSS_FILTER_OPACITY\",\n    \"CSS_FILTER_REFERENCE\",\n    \"CSS_FILTER_SATURATE\",\n    \"CSS_FILTER_SEPIA\",\n    \"CSS_GRAD\",\n    \"CSS_HZ\",\n    \"CSS_IDENT\",\n    \"CSS_IN\",\n    \"CSS_INHERIT\",\n    \"CSS_KHZ\",\n    \"CSS_MATRIX\",\n    \"CSS_MATRIX3D\",\n    \"CSS_MM\",\n    \"CSS_MS\",\n    \"CSS_NUMBER\",\n    \"CSS_PC\",\n    \"CSS_PERCENTAGE\",\n    \"CSS_PERSPECTIVE\",\n    \"CSS_PRIMITIVE_VALUE\",\n    \"CSS_PT\",\n    \"CSS_PX\",\n    \"CSS_RAD\",\n    \"CSS_RECT\",\n    \"CSS_RGBCOLOR\",\n    \"CSS_ROTATE\",\n    \"CSS_ROTATE3D\",\n    \"CSS_ROTATEX\",\n    \"CSS_ROTATEY\",\n    \"CSS_ROTATEZ\",\n    \"CSS_S\",\n    \"CSS_SCALE\",\n    \"CSS_SCALE3D\",\n    \"CSS_SCALEX\",\n    \"CSS_SCALEY\",\n    \"CSS_SCALEZ\",\n    \"CSS_SKEW\",\n    \"CSS_SKEWX\",\n    \"CSS_SKEWY\",\n    \"CSS_STRING\",\n    \"CSS_TRANSLATE\",\n    \"CSS_TRANSLATE3D\",\n    \"CSS_TRANSLATEX\",\n    \"CSS_TRANSLATEY\",\n    \"CSS_TRANSLATEZ\",\n    \"CSS_UNKNOWN\",\n    \"CSS_URI\",\n    \"CSS_VALUE_LIST\",\n    \"CSS_VH\",\n    \"CSS_VMAX\",\n    \"CSS_VMIN\",\n    \"CSS_VW\",\n    \"CULL_FACE\",\n    \"CULL_FACE_MODE\",\n    \"CURRENT_PROGRAM\",\n    \"CURRENT_VERTEX_ATTRIB\",\n    \"CUSTOM\",\n    \"CW\",\n    \"CanvasGradient\",\n    \"CanvasPattern\",\n    \"CanvasRenderingContext2D\",\n    \"CaretPosition\",\n    \"ChannelMergerNode\",\n    \"ChannelSplitterNode\",\n    \"CharacterData\",\n    \"ClientRect\",\n    \"ClientRectList\",\n    \"Clipboard\",\n    \"ClipboardEvent\",\n    \"CloseEvent\",\n    \"Collator\",\n    \"CommandEvent\",\n    \"Comment\",\n    \"CompositionEvent\",\n    \"Console\",\n    \"Controllers\",\n    \"ConvolverNode\",\n    \"Counter\",\n    \"Crypto\",\n    \"CryptoKey\",\n    \"CustomEvent\",\n    \"DATABASE_ERR\",\n    \"DATA_CLONE_ERR\",\n    \"DATA_ERR\",\n    \"DBLCLICK\",\n    \"DECR\",\n    \"DECR_WRAP\",\n    \"DELETE_STATUS\",\n    \"DEPTH_ATTACHMENT\",\n    \"DEPTH_BITS\",\n    \"DEPTH_BUFFER_BIT\",\n    \"DEPTH_CLEAR_VALUE\",\n    \"DEPTH_COMPONENT\",\n    \"DEPTH_COMPONENT16\",\n    \"DEPTH_FUNC\",\n    \"DEPTH_RANGE\",\n    \"DEPTH_STENCIL\",\n    \"DEPTH_STENCIL_ATTACHMENT\",\n    \"DEPTH_TEST\",\n    \"DEPTH_WRITEMASK\",\n    \"DIRECTION_DOWN\",\n    \"DIRECTION_LEFT\",\n    \"DIRECTION_RIGHT\",\n    \"DIRECTION_UP\",\n    \"DISABLED\",\n    \"DISPATCH_REQUEST_ERR\",\n    \"DITHER\",\n    \"DOCUMENT_FRAGMENT_NODE\",\n    \"DOCUMENT_NODE\",\n    \"DOCUMENT_POSITION_CONTAINED_BY\",\n    \"DOCUMENT_POSITION_CONTAINS\",\n    \"DOCUMENT_POSITION_DISCONNECTED\",\n    \"DOCUMENT_POSITION_FOLLOWING\",\n    \"DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC\",\n    \"DOCUMENT_POSITION_PRECEDING\",\n    \"DOCUMENT_TYPE_NODE\",\n    \"DOMCursor\",\n    \"DOMError\",\n    \"DOMException\",\n    \"DOMImplementation\",\n    \"DOMImplementationLS\",\n    \"DOMMatrix\",\n    \"DOMMatrixReadOnly\",\n    \"DOMParser\",\n    \"DOMPoint\",\n    \"DOMPointReadOnly\",\n    \"DOMQuad\",\n    \"DOMRect\",\n    \"DOMRectList\",\n    \"DOMRectReadOnly\",\n    \"DOMRequest\",\n    \"DOMSTRING_SIZE_ERR\",\n    \"DOMSettableTokenList\",\n    \"DOMStringList\",\n    \"DOMStringMap\",\n    \"DOMTokenList\",\n    \"DOMTransactionEvent\",\n    \"DOM_DELTA_LINE\",\n    \"DOM_DELTA_PAGE\",\n    \"DOM_DELTA_PIXEL\",\n    \"DOM_INPUT_METHOD_DROP\",\n    \"DOM_INPUT_METHOD_HANDWRITING\",\n    \"DOM_INPUT_METHOD_IME\",\n    \"DOM_INPUT_METHOD_KEYBOARD\",\n    \"DOM_INPUT_METHOD_MULTIMODAL\",\n    \"DOM_INPUT_METHOD_OPTION\",\n    \"DOM_INPUT_METHOD_PASTE\",\n    \"DOM_INPUT_METHOD_SCRIPT\",\n    \"DOM_INPUT_METHOD_UNKNOWN\",\n    \"DOM_INPUT_METHOD_VOICE\",\n    \"DOM_KEY_LOCATION_JOYSTICK\",\n    \"DOM_KEY_LOCATION_LEFT\",\n    \"DOM_KEY_LOCATION_MOBILE\",\n    \"DOM_KEY_LOCATION_NUMPAD\",\n    \"DOM_KEY_LOCATION_RIGHT\",\n    \"DOM_KEY_LOCATION_STANDARD\",\n    \"DOM_VK_0\",\n    \"DOM_VK_1\",\n    \"DOM_VK_2\",\n    \"DOM_VK_3\",\n    \"DOM_VK_4\",\n    \"DOM_VK_5\",\n    \"DOM_VK_6\",\n    \"DOM_VK_7\",\n    \"DOM_VK_8\",\n    \"DOM_VK_9\",\n    \"DOM_VK_A\",\n    \"DOM_VK_ACCEPT\",\n    \"DOM_VK_ADD\",\n    \"DOM_VK_ALT\",\n    \"DOM_VK_ALTGR\",\n    \"DOM_VK_AMPERSAND\",\n    \"DOM_VK_ASTERISK\",\n    \"DOM_VK_AT\",\n    \"DOM_VK_ATTN\",\n    \"DOM_VK_B\",\n    \"DOM_VK_BACKSPACE\",\n    \"DOM_VK_BACK_QUOTE\",\n    \"DOM_VK_BACK_SLASH\",\n    \"DOM_VK_BACK_SPACE\",\n    \"DOM_VK_C\",\n    \"DOM_VK_CANCEL\",\n    \"DOM_VK_CAPS_LOCK\",\n    \"DOM_VK_CIRCUMFLEX\",\n    \"DOM_VK_CLEAR\",\n    \"DOM_VK_CLOSE_BRACKET\",\n    \"DOM_VK_CLOSE_CURLY_BRACKET\",\n    \"DOM_VK_CLOSE_PAREN\",\n    \"DOM_VK_COLON\",\n    \"DOM_VK_COMMA\",\n    \"DOM_VK_CONTEXT_MENU\",\n    \"DOM_VK_CONTROL\",\n    \"DOM_VK_CONVERT\",\n    \"DOM_VK_CRSEL\",\n    \"DOM_VK_CTRL\",\n    \"DOM_VK_D\",\n    \"DOM_VK_DECIMAL\",\n    \"DOM_VK_DELETE\",\n    \"DOM_VK_DIVIDE\",\n    \"DOM_VK_DOLLAR\",\n    \"DOM_VK_DOUBLE_QUOTE\",\n    \"DOM_VK_DOWN\",\n    \"DOM_VK_E\",\n    \"DOM_VK_EISU\",\n    \"DOM_VK_END\",\n    \"DOM_VK_ENTER\",\n    \"DOM_VK_EQUALS\",\n    \"DOM_VK_EREOF\",\n    \"DOM_VK_ESCAPE\",\n    \"DOM_VK_EXCLAMATION\",\n    \"DOM_VK_EXECUTE\",\n    \"DOM_VK_EXSEL\",\n    \"DOM_VK_F\",\n    \"DOM_VK_F1\",\n    \"DOM_VK_F10\",\n    \"DOM_VK_F11\",\n    \"DOM_VK_F12\",\n    \"DOM_VK_F13\",\n    \"DOM_VK_F14\",\n    \"DOM_VK_F15\",\n    \"DOM_VK_F16\",\n    \"DOM_VK_F17\",\n    \"DOM_VK_F18\",\n    \"DOM_VK_F19\",\n    \"DOM_VK_F2\",\n    \"DOM_VK_F20\",\n    \"DOM_VK_F21\",\n    \"DOM_VK_F22\",\n    \"DOM_VK_F23\",\n    \"DOM_VK_F24\",\n    \"DOM_VK_F25\",\n    \"DOM_VK_F26\",\n    \"DOM_VK_F27\",\n    \"DOM_VK_F28\",\n    \"DOM_VK_F29\",\n    \"DOM_VK_F3\",\n    \"DOM_VK_F30\",\n    \"DOM_VK_F31\",\n    \"DOM_VK_F32\",\n    \"DOM_VK_F33\",\n    \"DOM_VK_F34\",\n    \"DOM_VK_F35\",\n    \"DOM_VK_F36\",\n    \"DOM_VK_F4\",\n    \"DOM_VK_F5\",\n    \"DOM_VK_F6\",\n    \"DOM_VK_F7\",\n    \"DOM_VK_F8\",\n    \"DOM_VK_F9\",\n    \"DOM_VK_FINAL\",\n    \"DOM_VK_FRONT\",\n    \"DOM_VK_G\",\n    \"DOM_VK_GREATER_THAN\",\n    \"DOM_VK_H\",\n    \"DOM_VK_HANGUL\",\n    \"DOM_VK_HANJA\",\n    \"DOM_VK_HASH\",\n    \"DOM_VK_HELP\",\n    \"DOM_VK_HK_TOGGLE\",\n    \"DOM_VK_HOME\",\n    \"DOM_VK_HYPHEN_MINUS\",\n    \"DOM_VK_I\",\n    \"DOM_VK_INSERT\",\n    \"DOM_VK_J\",\n    \"DOM_VK_JUNJA\",\n    \"DOM_VK_K\",\n    \"DOM_VK_KANA\",\n    \"DOM_VK_KANJI\",\n    \"DOM_VK_L\",\n    \"DOM_VK_LEFT\",\n    \"DOM_VK_LEFT_TAB\",\n    \"DOM_VK_LESS_THAN\",\n    \"DOM_VK_M\",\n    \"DOM_VK_META\",\n    \"DOM_VK_MODECHANGE\",\n    \"DOM_VK_MULTIPLY\",\n    \"DOM_VK_N\",\n    \"DOM_VK_NONCONVERT\",\n    \"DOM_VK_NUMPAD0\",\n    \"DOM_VK_NUMPAD1\",\n    \"DOM_VK_NUMPAD2\",\n    \"DOM_VK_NUMPAD3\",\n    \"DOM_VK_NUMPAD4\",\n    \"DOM_VK_NUMPAD5\",\n    \"DOM_VK_NUMPAD6\",\n    \"DOM_VK_NUMPAD7\",\n    \"DOM_VK_NUMPAD8\",\n    \"DOM_VK_NUMPAD9\",\n    \"DOM_VK_NUM_LOCK\",\n    \"DOM_VK_O\",\n    \"DOM_VK_OEM_1\",\n    \"DOM_VK_OEM_102\",\n    \"DOM_VK_OEM_2\",\n    \"DOM_VK_OEM_3\",\n    \"DOM_VK_OEM_4\",\n    \"DOM_VK_OEM_5\",\n    \"DOM_VK_OEM_6\",\n    \"DOM_VK_OEM_7\",\n    \"DOM_VK_OEM_8\",\n    \"DOM_VK_OEM_COMMA\",\n    \"DOM_VK_OEM_MINUS\",\n    \"DOM_VK_OEM_PERIOD\",\n    \"DOM_VK_OEM_PLUS\",\n    \"DOM_VK_OPEN_BRACKET\",\n    \"DOM_VK_OPEN_CURLY_BRACKET\",\n    \"DOM_VK_OPEN_PAREN\",\n    \"DOM_VK_P\",\n    \"DOM_VK_PA1\",\n    \"DOM_VK_PAGEDOWN\",\n    \"DOM_VK_PAGEUP\",\n    \"DOM_VK_PAGE_DOWN\",\n    \"DOM_VK_PAGE_UP\",\n    \"DOM_VK_PAUSE\",\n    \"DOM_VK_PERCENT\",\n    \"DOM_VK_PERIOD\",\n    \"DOM_VK_PIPE\",\n    \"DOM_VK_PLAY\",\n    \"DOM_VK_PLUS\",\n    \"DOM_VK_PRINT\",\n    \"DOM_VK_PRINTSCREEN\",\n    \"DOM_VK_PROCESSKEY\",\n    \"DOM_VK_PROPERITES\",\n    \"DOM_VK_Q\",\n    \"DOM_VK_QUESTION_MARK\",\n    \"DOM_VK_QUOTE\",\n    \"DOM_VK_R\",\n    \"DOM_VK_REDO\",\n    \"DOM_VK_RETURN\",\n    \"DOM_VK_RIGHT\",\n    \"DOM_VK_S\",\n    \"DOM_VK_SCROLL_LOCK\",\n    \"DOM_VK_SELECT\",\n    \"DOM_VK_SEMICOLON\",\n    \"DOM_VK_SEPARATOR\",\n    \"DOM_VK_SHIFT\",\n    \"DOM_VK_SLASH\",\n    \"DOM_VK_SLEEP\",\n    \"DOM_VK_SPACE\",\n    \"DOM_VK_SUBTRACT\",\n    \"DOM_VK_T\",\n    \"DOM_VK_TAB\",\n    \"DOM_VK_TILDE\",\n    \"DOM_VK_U\",\n    \"DOM_VK_UNDERSCORE\",\n    \"DOM_VK_UNDO\",\n    \"DOM_VK_UNICODE\",\n    \"DOM_VK_UP\",\n    \"DOM_VK_V\",\n    \"DOM_VK_VOLUME_DOWN\",\n    \"DOM_VK_VOLUME_MUTE\",\n    \"DOM_VK_VOLUME_UP\",\n    \"DOM_VK_W\",\n    \"DOM_VK_WIN\",\n    \"DOM_VK_WINDOW\",\n    \"DOM_VK_WIN_ICO_00\",\n    \"DOM_VK_WIN_ICO_CLEAR\",\n    \"DOM_VK_WIN_ICO_HELP\",\n    \"DOM_VK_WIN_OEM_ATTN\",\n    \"DOM_VK_WIN_OEM_AUTO\",\n    \"DOM_VK_WIN_OEM_BACKTAB\",\n    \"DOM_VK_WIN_OEM_CLEAR\",\n    \"DOM_VK_WIN_OEM_COPY\",\n    \"DOM_VK_WIN_OEM_CUSEL\",\n    \"DOM_VK_WIN_OEM_ENLW\",\n    \"DOM_VK_WIN_OEM_FINISH\",\n    \"DOM_VK_WIN_OEM_FJ_JISHO\",\n    \"DOM_VK_WIN_OEM_FJ_LOYA\",\n    \"DOM_VK_WIN_OEM_FJ_MASSHOU\",\n    \"DOM_VK_WIN_OEM_FJ_ROYA\",\n    \"DOM_VK_WIN_OEM_FJ_TOUROKU\",\n    \"DOM_VK_WIN_OEM_JUMP\",\n    \"DOM_VK_WIN_OEM_PA1\",\n    \"DOM_VK_WIN_OEM_PA2\",\n    \"DOM_VK_WIN_OEM_PA3\",\n    \"DOM_VK_WIN_OEM_RESET\",\n    \"DOM_VK_WIN_OEM_WSCTRL\",\n    \"DOM_VK_X\",\n    \"DOM_VK_XF86XK_ADD_FAVORITE\",\n    \"DOM_VK_XF86XK_APPLICATION_LEFT\",\n    \"DOM_VK_XF86XK_APPLICATION_RIGHT\",\n    \"DOM_VK_XF86XK_AUDIO_CYCLE_TRACK\",\n    \"DOM_VK_XF86XK_AUDIO_FORWARD\",\n    \"DOM_VK_XF86XK_AUDIO_LOWER_VOLUME\",\n    \"DOM_VK_XF86XK_AUDIO_MEDIA\",\n    \"DOM_VK_XF86XK_AUDIO_MUTE\",\n    \"DOM_VK_XF86XK_AUDIO_NEXT\",\n    \"DOM_VK_XF86XK_AUDIO_PAUSE\",\n    \"DOM_VK_XF86XK_AUDIO_PLAY\",\n    \"DOM_VK_XF86XK_AUDIO_PREV\",\n    \"DOM_VK_XF86XK_AUDIO_RAISE_VOLUME\",\n    \"DOM_VK_XF86XK_AUDIO_RANDOM_PLAY\",\n    \"DOM_VK_XF86XK_AUDIO_RECORD\",\n    \"DOM_VK_XF86XK_AUDIO_REPEAT\",\n    \"DOM_VK_XF86XK_AUDIO_REWIND\",\n    \"DOM_VK_XF86XK_AUDIO_STOP\",\n    \"DOM_VK_XF86XK_AWAY\",\n    \"DOM_VK_XF86XK_BACK\",\n    \"DOM_VK_XF86XK_BACK_FORWARD\",\n    \"DOM_VK_XF86XK_BATTERY\",\n    \"DOM_VK_XF86XK_BLUE\",\n    \"DOM_VK_XF86XK_BLUETOOTH\",\n    \"DOM_VK_XF86XK_BOOK\",\n    \"DOM_VK_XF86XK_BRIGHTNESS_ADJUST\",\n    \"DOM_VK_XF86XK_CALCULATOR\",\n    \"DOM_VK_XF86XK_CALENDAR\",\n    \"DOM_VK_XF86XK_CD\",\n    \"DOM_VK_XF86XK_CLOSE\",\n    \"DOM_VK_XF86XK_COMMUNITY\",\n    \"DOM_VK_XF86XK_CONTRAST_ADJUST\",\n    \"DOM_VK_XF86XK_COPY\",\n    \"DOM_VK_XF86XK_CUT\",\n    \"DOM_VK_XF86XK_CYCLE_ANGLE\",\n    \"DOM_VK_XF86XK_DISPLAY\",\n    \"DOM_VK_XF86XK_DOCUMENTS\",\n    \"DOM_VK_XF86XK_DOS\",\n    \"DOM_VK_XF86XK_EJECT\",\n    \"DOM_VK_XF86XK_EXCEL\",\n    \"DOM_VK_XF86XK_EXPLORER\",\n    \"DOM_VK_XF86XK_FAVORITES\",\n    \"DOM_VK_XF86XK_FINANCE\",\n    \"DOM_VK_XF86XK_FORWARD\",\n    \"DOM_VK_XF86XK_FRAME_BACK\",\n    \"DOM_VK_XF86XK_FRAME_FORWARD\",\n    \"DOM_VK_XF86XK_GAME\",\n    \"DOM_VK_XF86XK_GO\",\n    \"DOM_VK_XF86XK_GREEN\",\n    \"DOM_VK_XF86XK_HIBERNATE\",\n    \"DOM_VK_XF86XK_HISTORY\",\n    \"DOM_VK_XF86XK_HOME_PAGE\",\n    \"DOM_VK_XF86XK_HOT_LINKS\",\n    \"DOM_VK_XF86XK_I_TOUCH\",\n    \"DOM_VK_XF86XK_KBD_BRIGHTNESS_DOWN\",\n    \"DOM_VK_XF86XK_KBD_BRIGHTNESS_UP\",\n    \"DOM_VK_XF86XK_KBD_LIGHT_ON_OFF\",\n    \"DOM_VK_XF86XK_LAUNCH0\",\n    \"DOM_VK_XF86XK_LAUNCH1\",\n    \"DOM_VK_XF86XK_LAUNCH2\",\n    \"DOM_VK_XF86XK_LAUNCH3\",\n    \"DOM_VK_XF86XK_LAUNCH4\",\n    \"DOM_VK_XF86XK_LAUNCH5\",\n    \"DOM_VK_XF86XK_LAUNCH6\",\n    \"DOM_VK_XF86XK_LAUNCH7\",\n    \"DOM_VK_XF86XK_LAUNCH8\",\n    \"DOM_VK_XF86XK_LAUNCH9\",\n    \"DOM_VK_XF86XK_LAUNCH_A\",\n    \"DOM_VK_XF86XK_LAUNCH_B\",\n    \"DOM_VK_XF86XK_LAUNCH_C\",\n    \"DOM_VK_XF86XK_LAUNCH_D\",\n    \"DOM_VK_XF86XK_LAUNCH_E\",\n    \"DOM_VK_XF86XK_LAUNCH_F\",\n    \"DOM_VK_XF86XK_LIGHT_BULB\",\n    \"DOM_VK_XF86XK_LOG_OFF\",\n    \"DOM_VK_XF86XK_MAIL\",\n    \"DOM_VK_XF86XK_MAIL_FORWARD\",\n    \"DOM_VK_XF86XK_MARKET\",\n    \"DOM_VK_XF86XK_MEETING\",\n    \"DOM_VK_XF86XK_MEMO\",\n    \"DOM_VK_XF86XK_MENU_KB\",\n    \"DOM_VK_XF86XK_MENU_PB\",\n    \"DOM_VK_XF86XK_MESSENGER\",\n    \"DOM_VK_XF86XK_MON_BRIGHTNESS_DOWN\",\n    \"DOM_VK_XF86XK_MON_BRIGHTNESS_UP\",\n    \"DOM_VK_XF86XK_MUSIC\",\n    \"DOM_VK_XF86XK_MY_COMPUTER\",\n    \"DOM_VK_XF86XK_MY_SITES\",\n    \"DOM_VK_XF86XK_NEW\",\n    \"DOM_VK_XF86XK_NEWS\",\n    \"DOM_VK_XF86XK_OFFICE_HOME\",\n    \"DOM_VK_XF86XK_OPEN\",\n    \"DOM_VK_XF86XK_OPEN_URL\",\n    \"DOM_VK_XF86XK_OPTION\",\n    \"DOM_VK_XF86XK_PASTE\",\n    \"DOM_VK_XF86XK_PHONE\",\n    \"DOM_VK_XF86XK_PICTURES\",\n    \"DOM_VK_XF86XK_POWER_DOWN\",\n    \"DOM_VK_XF86XK_POWER_OFF\",\n    \"DOM_VK_XF86XK_RED\",\n    \"DOM_VK_XF86XK_REFRESH\",\n    \"DOM_VK_XF86XK_RELOAD\",\n    \"DOM_VK_XF86XK_REPLY\",\n    \"DOM_VK_XF86XK_ROCKER_DOWN\",\n    \"DOM_VK_XF86XK_ROCKER_ENTER\",\n    \"DOM_VK_XF86XK_ROCKER_UP\",\n    \"DOM_VK_XF86XK_ROTATE_WINDOWS\",\n    \"DOM_VK_XF86XK_ROTATION_KB\",\n    \"DOM_VK_XF86XK_ROTATION_PB\",\n    \"DOM_VK_XF86XK_SAVE\",\n    \"DOM_VK_XF86XK_SCREEN_SAVER\",\n    \"DOM_VK_XF86XK_SCROLL_CLICK\",\n    \"DOM_VK_XF86XK_SCROLL_DOWN\",\n    \"DOM_VK_XF86XK_SCROLL_UP\",\n    \"DOM_VK_XF86XK_SEARCH\",\n    \"DOM_VK_XF86XK_SEND\",\n    \"DOM_VK_XF86XK_SHOP\",\n    \"DOM_VK_XF86XK_SPELL\",\n    \"DOM_VK_XF86XK_SPLIT_SCREEN\",\n    \"DOM_VK_XF86XK_STANDBY\",\n    \"DOM_VK_XF86XK_START\",\n    \"DOM_VK_XF86XK_STOP\",\n    \"DOM_VK_XF86XK_SUBTITLE\",\n    \"DOM_VK_XF86XK_SUPPORT\",\n    \"DOM_VK_XF86XK_SUSPEND\",\n    \"DOM_VK_XF86XK_TASK_PANE\",\n    \"DOM_VK_XF86XK_TERMINAL\",\n    \"DOM_VK_XF86XK_TIME\",\n    \"DOM_VK_XF86XK_TOOLS\",\n    \"DOM_VK_XF86XK_TOP_MENU\",\n    \"DOM_VK_XF86XK_TO_DO_LIST\",\n    \"DOM_VK_XF86XK_TRAVEL\",\n    \"DOM_VK_XF86XK_USER1KB\",\n    \"DOM_VK_XF86XK_USER2KB\",\n    \"DOM_VK_XF86XK_USER_PB\",\n    \"DOM_VK_XF86XK_UWB\",\n    \"DOM_VK_XF86XK_VENDOR_HOME\",\n    \"DOM_VK_XF86XK_VIDEO\",\n    \"DOM_VK_XF86XK_VIEW\",\n    \"DOM_VK_XF86XK_WAKE_UP\",\n    \"DOM_VK_XF86XK_WEB_CAM\",\n    \"DOM_VK_XF86XK_WHEEL_BUTTON\",\n    \"DOM_VK_XF86XK_WLAN\",\n    \"DOM_VK_XF86XK_WORD\",\n    \"DOM_VK_XF86XK_WWW\",\n    \"DOM_VK_XF86XK_XFER\",\n    \"DOM_VK_XF86XK_YELLOW\",\n    \"DOM_VK_XF86XK_ZOOM_IN\",\n    \"DOM_VK_XF86XK_ZOOM_OUT\",\n    \"DOM_VK_Y\",\n    \"DOM_VK_Z\",\n    \"DOM_VK_ZOOM\",\n    \"DONE\",\n    \"DONT_CARE\",\n    \"DOWNLOADING\",\n    \"DRAGDROP\",\n    \"DST_ALPHA\",\n    \"DST_COLOR\",\n    \"DYNAMIC_DRAW\",\n    \"DataChannel\",\n    \"DataTransfer\",\n    \"DataTransferItem\",\n    \"DataTransferItemList\",\n    \"DataView\",\n    \"Date\",\n    \"DateTimeFormat\",\n    \"DelayNode\",\n    \"DesktopNotification\",\n    \"DesktopNotificationCenter\",\n    \"DeviceLightEvent\",\n    \"DeviceMotionEvent\",\n    \"DeviceOrientationEvent\",\n    \"DeviceProximityEvent\",\n    \"DeviceStorage\",\n    \"DeviceStorageChangeEvent\",\n    \"Document\",\n    \"DocumentFragment\",\n    \"DocumentType\",\n    \"DragEvent\",\n    \"DynamicsCompressorNode\",\n    \"E\",\n    \"ELEMENT_ARRAY_BUFFER\",\n    \"ELEMENT_ARRAY_BUFFER_BINDING\",\n    \"ELEMENT_NODE\",\n    \"EMPTY\",\n    \"ENCODING_ERR\",\n    \"ENDED\",\n    \"END_TO_END\",\n    \"END_TO_START\",\n    \"ENTITY_NODE\",\n    \"ENTITY_REFERENCE_NODE\",\n    \"EPSILON\",\n    \"EQUAL\",\n    \"EQUALPOWER\",\n    \"ERROR\",\n    \"EXPONENTIAL_DISTANCE\",\n    \"Element\",\n    \"ElementQuery\",\n    \"Entity\",\n    \"EntityReference\",\n    \"Error\",\n    \"ErrorEvent\",\n    \"EvalError\",\n    \"Event\",\n    \"EventException\",\n    \"EventSource\",\n    \"EventTarget\",\n    \"External\",\n    \"FASTEST\",\n    \"FIDOSDK\",\n    \"FILTER_ACCEPT\",\n    \"FILTER_INTERRUPT\",\n    \"FILTER_REJECT\",\n    \"FILTER_SKIP\",\n    \"FINISHED_STATE\",\n    \"FIRST_ORDERED_NODE_TYPE\",\n    \"FLOAT\",\n    \"FLOAT_MAT2\",\n    \"FLOAT_MAT3\",\n    \"FLOAT_MAT4\",\n    \"FLOAT_VEC2\",\n    \"FLOAT_VEC3\",\n    \"FLOAT_VEC4\",\n    \"FOCUS\",\n    \"FONT_FACE_RULE\",\n    \"FONT_FEATURE_VALUES_RULE\",\n    \"FRAGMENT_SHADER\",\n    \"FRAGMENT_SHADER_DERIVATIVE_HINT_OES\",\n    \"FRAMEBUFFER\",\n    \"FRAMEBUFFER_ATTACHMENT_OBJECT_NAME\",\n    \"FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE\",\n    \"FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE\",\n    \"FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL\",\n    \"FRAMEBUFFER_BINDING\",\n    \"FRAMEBUFFER_COMPLETE\",\n    \"FRAMEBUFFER_INCOMPLETE_ATTACHMENT\",\n    \"FRAMEBUFFER_INCOMPLETE_DIMENSIONS\",\n    \"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\",\n    \"FRAMEBUFFER_UNSUPPORTED\",\n    \"FRONT\",\n    \"FRONT_AND_BACK\",\n    \"FRONT_FACE\",\n    \"FUNC_ADD\",\n    \"FUNC_REVERSE_SUBTRACT\",\n    \"FUNC_SUBTRACT\",\n    \"Feed\",\n    \"FeedEntry\",\n    \"File\",\n    \"FileError\",\n    \"FileList\",\n    \"FileReader\",\n    \"FindInPage\",\n    \"Float32Array\",\n    \"Float64Array\",\n    \"FocusEvent\",\n    \"FontFace\",\n    \"FormData\",\n    \"Function\",\n    \"GENERATE_MIPMAP_HINT\",\n    \"GEQUAL\",\n    \"GREATER\",\n    \"GREEN_BITS\",\n    \"GainNode\",\n    \"Gamepad\",\n    \"GamepadButton\",\n    \"GamepadEvent\",\n    \"GestureEvent\",\n    \"HAVE_CURRENT_DATA\",\n    \"HAVE_ENOUGH_DATA\",\n    \"HAVE_FUTURE_DATA\",\n    \"HAVE_METADATA\",\n    \"HAVE_NOTHING\",\n    \"HEADERS_RECEIVED\",\n    \"HIDDEN\",\n    \"HIERARCHY_REQUEST_ERR\",\n    \"HIGHPASS\",\n    \"HIGHSHELF\",\n    \"HIGH_FLOAT\",\n    \"HIGH_INT\",\n    \"HORIZONTAL\",\n    \"HORIZONTAL_AXIS\",\n    \"HRTF\",\n    \"HTMLAllCollection\",\n    \"HTMLAnchorElement\",\n    \"HTMLAppletElement\",\n    \"HTMLAreaElement\",\n    \"HTMLAudioElement\",\n    \"HTMLBRElement\",\n    \"HTMLBaseElement\",\n    \"HTMLBaseFontElement\",\n    \"HTMLBlockquoteElement\",\n    \"HTMLBodyElement\",\n    \"HTMLButtonElement\",\n    \"HTMLCanvasElement\",\n    \"HTMLCollection\",\n    \"HTMLCommandElement\",\n    \"HTMLContentElement\",\n    \"HTMLDListElement\",\n    \"HTMLDataElement\",\n    \"HTMLDataListElement\",\n    \"HTMLDetailsElement\",\n    \"HTMLDialogElement\",\n    \"HTMLDirectoryElement\",\n    \"HTMLDivElement\",\n    \"HTMLDocument\",\n    \"HTMLElement\",\n    \"HTMLEmbedElement\",\n    \"HTMLFieldSetElement\",\n    \"HTMLFontElement\",\n    \"HTMLFormControlsCollection\",\n    \"HTMLFormElement\",\n    \"HTMLFrameElement\",\n    \"HTMLFrameSetElement\",\n    \"HTMLHRElement\",\n    \"HTMLHeadElement\",\n    \"HTMLHeadingElement\",\n    \"HTMLHtmlElement\",\n    \"HTMLIFrameElement\",\n    \"HTMLImageElement\",\n    \"HTMLInputElement\",\n    \"HTMLIsIndexElement\",\n    \"HTMLKeygenElement\",\n    \"HTMLLIElement\",\n    \"HTMLLabelElement\",\n    \"HTMLLegendElement\",\n    \"HTMLLinkElement\",\n    \"HTMLMapElement\",\n    \"HTMLMarqueeElement\",\n    \"HTMLMediaElement\",\n    \"HTMLMenuElement\",\n    \"HTMLMenuItemElement\",\n    \"HTMLMetaElement\",\n    \"HTMLMeterElement\",\n    \"HTMLModElement\",\n    \"HTMLOListElement\",\n    \"HTMLObjectElement\",\n    \"HTMLOptGroupElement\",\n    \"HTMLOptionElement\",\n    \"HTMLOptionsCollection\",\n    \"HTMLOutputElement\",\n    \"HTMLParagraphElement\",\n    \"HTMLParamElement\",\n    \"HTMLPictureElement\",\n    \"HTMLPreElement\",\n    \"HTMLProgressElement\",\n    \"HTMLPropertiesCollection\",\n    \"HTMLQuoteElement\",\n    \"HTMLScriptElement\",\n    \"HTMLSelectElement\",\n    \"HTMLShadowElement\",\n    \"HTMLSourceElement\",\n    \"HTMLSpanElement\",\n    \"HTMLStyleElement\",\n    \"HTMLTableCaptionElement\",\n    \"HTMLTableCellElement\",\n    \"HTMLTableColElement\",\n    \"HTMLTableElement\",\n    \"HTMLTableRowElement\",\n    \"HTMLTableSectionElement\",\n    \"HTMLTemplateElement\",\n    \"HTMLTextAreaElement\",\n    \"HTMLTimeElement\",\n    \"HTMLTitleElement\",\n    \"HTMLTrackElement\",\n    \"HTMLUListElement\",\n    \"HTMLUnknownElement\",\n    \"HTMLVideoElement\",\n    \"HashChangeEvent\",\n    \"Headers\",\n    \"History\",\n    \"ICE_CHECKING\",\n    \"ICE_CLOSED\",\n    \"ICE_COMPLETED\",\n    \"ICE_CONNECTED\",\n    \"ICE_FAILED\",\n    \"ICE_GATHERING\",\n    \"ICE_WAITING\",\n    \"IDBCursor\",\n    \"IDBCursorWithValue\",\n    \"IDBDatabase\",\n    \"IDBDatabaseException\",\n    \"IDBFactory\",\n    \"IDBFileHandle\",\n    \"IDBFileRequest\",\n    \"IDBIndex\",\n    \"IDBKeyRange\",\n    \"IDBMutableFile\",\n    \"IDBObjectStore\",\n    \"IDBOpenDBRequest\",\n    \"IDBRequest\",\n    \"IDBTransaction\",\n    \"IDBVersionChangeEvent\",\n    \"IDLE\",\n    \"IMPLEMENTATION_COLOR_READ_FORMAT\",\n    \"IMPLEMENTATION_COLOR_READ_TYPE\",\n    \"IMPORT_RULE\",\n    \"INCR\",\n    \"INCR_WRAP\",\n    \"INDEX_SIZE_ERR\",\n    \"INT\",\n    \"INT_VEC2\",\n    \"INT_VEC3\",\n    \"INT_VEC4\",\n    \"INUSE_ATTRIBUTE_ERR\",\n    \"INVALID_ACCESS_ERR\",\n    \"INVALID_CHARACTER_ERR\",\n    \"INVALID_ENUM\",\n    \"INVALID_EXPRESSION_ERR\",\n    \"INVALID_FRAMEBUFFER_OPERATION\",\n    \"INVALID_MODIFICATION_ERR\",\n    \"INVALID_NODE_TYPE_ERR\",\n    \"INVALID_OPERATION\",\n    \"INVALID_STATE_ERR\",\n    \"INVALID_VALUE\",\n    \"INVERSE_DISTANCE\",\n    \"INVERT\",\n    \"IceCandidate\",\n    \"Image\",\n    \"ImageBitmap\",\n    \"ImageData\",\n    \"Infinity\",\n    \"InputEvent\",\n    \"InputMethodContext\",\n    \"InstallTrigger\",\n    \"Int16Array\",\n    \"Int32Array\",\n    \"Int8Array\",\n    \"Intent\",\n    \"InternalError\",\n    \"Intl\",\n    \"IsSearchProviderInstalled\",\n    \"Iterator\",\n    \"JSON\",\n    \"KEEP\",\n    \"KEYDOWN\",\n    \"KEYFRAMES_RULE\",\n    \"KEYFRAME_RULE\",\n    \"KEYPRESS\",\n    \"KEYUP\",\n    \"KeyEvent\",\n    \"KeyboardEvent\",\n    \"LENGTHADJUST_SPACING\",\n    \"LENGTHADJUST_SPACINGANDGLYPHS\",\n    \"LENGTHADJUST_UNKNOWN\",\n    \"LEQUAL\",\n    \"LESS\",\n    \"LINEAR\",\n    \"LINEAR_DISTANCE\",\n    \"LINEAR_MIPMAP_LINEAR\",\n    \"LINEAR_MIPMAP_NEAREST\",\n    \"LINES\",\n    \"LINE_LOOP\",\n    \"LINE_STRIP\",\n    \"LINE_WIDTH\",\n    \"LINK_STATUS\",\n    \"LIVE\",\n    \"LN10\",\n    \"LN2\",\n    \"LOADED\",\n    \"LOADING\",\n    \"LOG10E\",\n    \"LOG2E\",\n    \"LOWPASS\",\n    \"LOWSHELF\",\n    \"LOW_FLOAT\",\n    \"LOW_INT\",\n    \"LSException\",\n    \"LSParserFilter\",\n    \"LUMINANCE\",\n    \"LUMINANCE_ALPHA\",\n    \"LocalMediaStream\",\n    \"Location\",\n    \"MAX_COMBINED_TEXTURE_IMAGE_UNITS\",\n    \"MAX_CUBE_MAP_TEXTURE_SIZE\",\n    \"MAX_FRAGMENT_UNIFORM_VECTORS\",\n    \"MAX_RENDERBUFFER_SIZE\",\n    \"MAX_SAFE_INTEGER\",\n    \"MAX_TEXTURE_IMAGE_UNITS\",\n    \"MAX_TEXTURE_MAX_ANISOTROPY_EXT\",\n    \"MAX_TEXTURE_SIZE\",\n    \"MAX_VALUE\",\n    \"MAX_VARYING_VECTORS\",\n    \"MAX_VERTEX_ATTRIBS\",\n    \"MAX_VERTEX_TEXTURE_IMAGE_UNITS\",\n    \"MAX_VERTEX_UNIFORM_VECTORS\",\n    \"MAX_VIEWPORT_DIMS\",\n    \"MEDIA_ERR_ABORTED\",\n    \"MEDIA_ERR_DECODE\",\n    \"MEDIA_ERR_ENCRYPTED\",\n    \"MEDIA_ERR_NETWORK\",\n    \"MEDIA_ERR_SRC_NOT_SUPPORTED\",\n    \"MEDIA_KEYERR_CLIENT\",\n    \"MEDIA_KEYERR_DOMAIN\",\n    \"MEDIA_KEYERR_HARDWARECHANGE\",\n    \"MEDIA_KEYERR_OUTPUT\",\n    \"MEDIA_KEYERR_SERVICE\",\n    \"MEDIA_KEYERR_UNKNOWN\",\n    \"MEDIA_RULE\",\n    \"MEDIUM_FLOAT\",\n    \"MEDIUM_INT\",\n    \"META_MASK\",\n    \"MIN_SAFE_INTEGER\",\n    \"MIN_VALUE\",\n    \"MIRRORED_REPEAT\",\n    \"MODE_ASYNCHRONOUS\",\n    \"MODE_SYNCHRONOUS\",\n    \"MODIFICATION\",\n    \"MOUSEDOWN\",\n    \"MOUSEDRAG\",\n    \"MOUSEMOVE\",\n    \"MOUSEOUT\",\n    \"MOUSEOVER\",\n    \"MOUSEUP\",\n    \"MOZ_KEYFRAMES_RULE\",\n    \"MOZ_KEYFRAME_RULE\",\n    \"MOZ_SOURCE_CURSOR\",\n    \"MOZ_SOURCE_ERASER\",\n    \"MOZ_SOURCE_KEYBOARD\",\n    \"MOZ_SOURCE_MOUSE\",\n    \"MOZ_SOURCE_PEN\",\n    \"MOZ_SOURCE_TOUCH\",\n    \"MOZ_SOURCE_UNKNOWN\",\n    \"MSGESTURE_FLAG_BEGIN\",\n    \"MSGESTURE_FLAG_CANCEL\",\n    \"MSGESTURE_FLAG_END\",\n    \"MSGESTURE_FLAG_INERTIA\",\n    \"MSGESTURE_FLAG_NONE\",\n    \"MSPOINTER_TYPE_MOUSE\",\n    \"MSPOINTER_TYPE_PEN\",\n    \"MSPOINTER_TYPE_TOUCH\",\n    \"MS_ASYNC_CALLBACK_STATUS_ASSIGN_DELEGATE\",\n    \"MS_ASYNC_CALLBACK_STATUS_CANCEL\",\n    \"MS_ASYNC_CALLBACK_STATUS_CHOOSEANY\",\n    \"MS_ASYNC_CALLBACK_STATUS_ERROR\",\n    \"MS_ASYNC_CALLBACK_STATUS_JOIN\",\n    \"MS_ASYNC_OP_STATUS_CANCELED\",\n    \"MS_ASYNC_OP_STATUS_ERROR\",\n    \"MS_ASYNC_OP_STATUS_SUCCESS\",\n    \"MS_MANIPULATION_STATE_ACTIVE\",\n    \"MS_MANIPULATION_STATE_CANCELLED\",\n    \"MS_MANIPULATION_STATE_COMMITTED\",\n    \"MS_MANIPULATION_STATE_DRAGGING\",\n    \"MS_MANIPULATION_STATE_INERTIA\",\n    \"MS_MANIPULATION_STATE_PRESELECT\",\n    \"MS_MANIPULATION_STATE_SELECTING\",\n    \"MS_MANIPULATION_STATE_STOPPED\",\n    \"MS_MEDIA_ERR_ENCRYPTED\",\n    \"MS_MEDIA_KEYERR_CLIENT\",\n    \"MS_MEDIA_KEYERR_DOMAIN\",\n    \"MS_MEDIA_KEYERR_HARDWARECHANGE\",\n    \"MS_MEDIA_KEYERR_OUTPUT\",\n    \"MS_MEDIA_KEYERR_SERVICE\",\n    \"MS_MEDIA_KEYERR_UNKNOWN\",\n    \"Map\",\n    \"Math\",\n    \"MediaController\",\n    \"MediaDevices\",\n    \"MediaElementAudioSourceNode\",\n    \"MediaEncryptedEvent\",\n    \"MediaError\",\n    \"MediaKeyError\",\n    \"MediaKeyEvent\",\n    \"MediaKeyMessageEvent\",\n    \"MediaKeyNeededEvent\",\n    \"MediaKeySession\",\n    \"MediaKeyStatusMap\",\n    \"MediaKeySystemAccess\",\n    \"MediaKeys\",\n    \"MediaList\",\n    \"MediaQueryList\",\n    \"MediaQueryListEvent\",\n    \"MediaRecorder\",\n    \"MediaSource\",\n    \"MediaStream\",\n    \"MediaStreamAudioDestinationNode\",\n    \"MediaStreamAudioSourceNode\",\n    \"MediaStreamEvent\",\n    \"MediaStreamTrack\",\n    \"MediaStreamTrackEvent\",\n    \"MessageChannel\",\n    \"MessageEvent\",\n    \"MessagePort\",\n    \"Methods\",\n    \"MimeType\",\n    \"MimeTypeArray\",\n    \"MouseEvent\",\n    \"MouseScrollEvent\",\n    \"MozAnimation\",\n    \"MozAnimationDelay\",\n    \"MozAnimationDirection\",\n    \"MozAnimationDuration\",\n    \"MozAnimationFillMode\",\n    \"MozAnimationIterationCount\",\n    \"MozAnimationName\",\n    \"MozAnimationPlayState\",\n    \"MozAnimationTimingFunction\",\n    \"MozAppearance\",\n    \"MozBackfaceVisibility\",\n    \"MozBinding\",\n    \"MozBorderBottomColors\",\n    \"MozBorderEnd\",\n    \"MozBorderEndColor\",\n    \"MozBorderEndStyle\",\n    \"MozBorderEndWidth\",\n    \"MozBorderImage\",\n    \"MozBorderLeftColors\",\n    \"MozBorderRightColors\",\n    \"MozBorderStart\",\n    \"MozBorderStartColor\",\n    \"MozBorderStartStyle\",\n    \"MozBorderStartWidth\",\n    \"MozBorderTopColors\",\n    \"MozBoxAlign\",\n    \"MozBoxDirection\",\n    \"MozBoxFlex\",\n    \"MozBoxOrdinalGroup\",\n    \"MozBoxOrient\",\n    \"MozBoxPack\",\n    \"MozBoxSizing\",\n    \"MozCSSKeyframeRule\",\n    \"MozCSSKeyframesRule\",\n    \"MozColumnCount\",\n    \"MozColumnFill\",\n    \"MozColumnGap\",\n    \"MozColumnRule\",\n    \"MozColumnRuleColor\",\n    \"MozColumnRuleStyle\",\n    \"MozColumnRuleWidth\",\n    \"MozColumnWidth\",\n    \"MozColumns\",\n    \"MozContactChangeEvent\",\n    \"MozFloatEdge\",\n    \"MozFontFeatureSettings\",\n    \"MozFontLanguageOverride\",\n    \"MozForceBrokenImageIcon\",\n    \"MozHyphens\",\n    \"MozImageRegion\",\n    \"MozMarginEnd\",\n    \"MozMarginStart\",\n    \"MozMmsEvent\",\n    \"MozMmsMessage\",\n    \"MozMobileMessageThread\",\n    \"MozOSXFontSmoothing\",\n    \"MozOrient\",\n    \"MozOutlineRadius\",\n    \"MozOutlineRadiusBottomleft\",\n    \"MozOutlineRadiusBottomright\",\n    \"MozOutlineRadiusTopleft\",\n    \"MozOutlineRadiusTopright\",\n    \"MozPaddingEnd\",\n    \"MozPaddingStart\",\n    \"MozPerspective\",\n    \"MozPerspectiveOrigin\",\n    \"MozPowerManager\",\n    \"MozSettingsEvent\",\n    \"MozSmsEvent\",\n    \"MozSmsMessage\",\n    \"MozStackSizing\",\n    \"MozTabSize\",\n    \"MozTextAlignLast\",\n    \"MozTextDecorationColor\",\n    \"MozTextDecorationLine\",\n    \"MozTextDecorationStyle\",\n    \"MozTextSizeAdjust\",\n    \"MozTransform\",\n    \"MozTransformOrigin\",\n    \"MozTransformStyle\",\n    \"MozTransition\",\n    \"MozTransitionDelay\",\n    \"MozTransitionDuration\",\n    \"MozTransitionProperty\",\n    \"MozTransitionTimingFunction\",\n    \"MozUserFocus\",\n    \"MozUserInput\",\n    \"MozUserModify\",\n    \"MozUserSelect\",\n    \"MozWindowDragging\",\n    \"MozWindowShadow\",\n    \"MutationEvent\",\n    \"MutationObserver\",\n    \"MutationRecord\",\n    \"NAMESPACE_ERR\",\n    \"NAMESPACE_RULE\",\n    \"NEAREST\",\n    \"NEAREST_MIPMAP_LINEAR\",\n    \"NEAREST_MIPMAP_NEAREST\",\n    \"NEGATIVE_INFINITY\",\n    \"NETWORK_EMPTY\",\n    \"NETWORK_ERR\",\n    \"NETWORK_IDLE\",\n    \"NETWORK_LOADED\",\n    \"NETWORK_LOADING\",\n    \"NETWORK_NO_SOURCE\",\n    \"NEVER\",\n    \"NEW\",\n    \"NEXT\",\n    \"NEXT_NO_DUPLICATE\",\n    \"NICEST\",\n    \"NODE_AFTER\",\n    \"NODE_BEFORE\",\n    \"NODE_BEFORE_AND_AFTER\",\n    \"NODE_INSIDE\",\n    \"NONE\",\n    \"NON_TRANSIENT_ERR\",\n    \"NOTATION_NODE\",\n    \"NOTCH\",\n    \"NOTEQUAL\",\n    \"NOT_ALLOWED_ERR\",\n    \"NOT_FOUND_ERR\",\n    \"NOT_READABLE_ERR\",\n    \"NOT_SUPPORTED_ERR\",\n    \"NO_DATA_ALLOWED_ERR\",\n    \"NO_ERR\",\n    \"NO_ERROR\",\n    \"NO_MODIFICATION_ALLOWED_ERR\",\n    \"NUMBER_TYPE\",\n    \"NUM_COMPRESSED_TEXTURE_FORMATS\",\n    \"NaN\",\n    \"NamedNodeMap\",\n    \"Navigator\",\n    \"NearbyLinks\",\n    \"NetworkInformation\",\n    \"Node\",\n    \"NodeFilter\",\n    \"NodeIterator\",\n    \"NodeList\",\n    \"Notation\",\n    \"Notification\",\n    \"NotifyPaintEvent\",\n    \"Number\",\n    \"NumberFormat\",\n    \"OBSOLETE\",\n    \"ONE\",\n    \"ONE_MINUS_CONSTANT_ALPHA\",\n    \"ONE_MINUS_CONSTANT_COLOR\",\n    \"ONE_MINUS_DST_ALPHA\",\n    \"ONE_MINUS_DST_COLOR\",\n    \"ONE_MINUS_SRC_ALPHA\",\n    \"ONE_MINUS_SRC_COLOR\",\n    \"OPEN\",\n    \"OPENED\",\n    \"OPENING\",\n    \"ORDERED_NODE_ITERATOR_TYPE\",\n    \"ORDERED_NODE_SNAPSHOT_TYPE\",\n    \"OUT_OF_MEMORY\",\n    \"Object\",\n    \"OfflineAudioCompletionEvent\",\n    \"OfflineAudioContext\",\n    \"OfflineResourceList\",\n    \"Option\",\n    \"OscillatorNode\",\n    \"OverflowEvent\",\n    \"PACK_ALIGNMENT\",\n    \"PAGE_RULE\",\n    \"PARSE_ERR\",\n    \"PATHSEG_ARC_ABS\",\n    \"PATHSEG_ARC_REL\",\n    \"PATHSEG_CLOSEPATH\",\n    \"PATHSEG_CURVETO_CUBIC_ABS\",\n    \"PATHSEG_CURVETO_CUBIC_REL\",\n    \"PATHSEG_CURVETO_CUBIC_SMOOTH_ABS\",\n    \"PATHSEG_CURVETO_CUBIC_SMOOTH_REL\",\n    \"PATHSEG_CURVETO_QUADRATIC_ABS\",\n    \"PATHSEG_CURVETO_QUADRATIC_REL\",\n    \"PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS\",\n    \"PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL\",\n    \"PATHSEG_LINETO_ABS\",\n    \"PATHSEG_LINETO_HORIZONTAL_ABS\",\n    \"PATHSEG_LINETO_HORIZONTAL_REL\",\n    \"PATHSEG_LINETO_REL\",\n    \"PATHSEG_LINETO_VERTICAL_ABS\",\n    \"PATHSEG_LINETO_VERTICAL_REL\",\n    \"PATHSEG_MOVETO_ABS\",\n    \"PATHSEG_MOVETO_REL\",\n    \"PATHSEG_UNKNOWN\",\n    \"PATH_EXISTS_ERR\",\n    \"PEAKING\",\n    \"PERMISSION_DENIED\",\n    \"PERSISTENT\",\n    \"PI\",\n    \"PLAYING_STATE\",\n    \"POINTS\",\n    \"POLYGON_OFFSET_FACTOR\",\n    \"POLYGON_OFFSET_FILL\",\n    \"POLYGON_OFFSET_UNITS\",\n    \"POSITION_UNAVAILABLE\",\n    \"POSITIVE_INFINITY\",\n    \"PREV\",\n    \"PREV_NO_DUPLICATE\",\n    \"PROCESSING_INSTRUCTION_NODE\",\n    \"PageChangeEvent\",\n    \"PageTransitionEvent\",\n    \"PaintRequest\",\n    \"PaintRequestList\",\n    \"PannerNode\",\n    \"Path2D\",\n    \"Performance\",\n    \"PerformanceEntry\",\n    \"PerformanceMark\",\n    \"PerformanceMeasure\",\n    \"PerformanceNavigation\",\n    \"PerformanceResourceTiming\",\n    \"PerformanceTiming\",\n    \"PeriodicWave\",\n    \"Plugin\",\n    \"PluginArray\",\n    \"PopStateEvent\",\n    \"PopupBlockedEvent\",\n    \"ProcessingInstruction\",\n    \"ProgressEvent\",\n    \"Promise\",\n    \"PropertyNodeList\",\n    \"Proxy\",\n    \"PushManager\",\n    \"PushSubscription\",\n    \"Q\",\n    \"QUOTA_ERR\",\n    \"QUOTA_EXCEEDED_ERR\",\n    \"QueryInterface\",\n    \"READ_ONLY\",\n    \"READ_ONLY_ERR\",\n    \"READ_WRITE\",\n    \"RED_BITS\",\n    \"REMOVAL\",\n    \"RENDERBUFFER\",\n    \"RENDERBUFFER_ALPHA_SIZE\",\n    \"RENDERBUFFER_BINDING\",\n    \"RENDERBUFFER_BLUE_SIZE\",\n    \"RENDERBUFFER_DEPTH_SIZE\",\n    \"RENDERBUFFER_GREEN_SIZE\",\n    \"RENDERBUFFER_HEIGHT\",\n    \"RENDERBUFFER_INTERNAL_FORMAT\",\n    \"RENDERBUFFER_RED_SIZE\",\n    \"RENDERBUFFER_STENCIL_SIZE\",\n    \"RENDERBUFFER_WIDTH\",\n    \"RENDERER\",\n    \"RENDERING_INTENT_ABSOLUTE_COLORIMETRIC\",\n    \"RENDERING_INTENT_AUTO\",\n    \"RENDERING_INTENT_PERCEPTUAL\",\n    \"RENDERING_INTENT_RELATIVE_COLORIMETRIC\",\n    \"RENDERING_INTENT_SATURATION\",\n    \"RENDERING_INTENT_UNKNOWN\",\n    \"REPEAT\",\n    \"REPLACE\",\n    \"RGB\",\n    \"RGB565\",\n    \"RGB5_A1\",\n    \"RGBA\",\n    \"RGBA4\",\n    \"RGBColor\",\n    \"ROTATION_CLOCKWISE\",\n    \"ROTATION_COUNTERCLOCKWISE\",\n    \"RTCDataChannelEvent\",\n    \"RTCIceCandidate\",\n    \"RTCPeerConnectionIceEvent\",\n    \"RTCRtpReceiver\",\n    \"RTCRtpSender\",\n    \"RTCSessionDescription\",\n    \"RTCStatsReport\",\n    \"RadioNodeList\",\n    \"Range\",\n    \"RangeError\",\n    \"RangeException\",\n    \"RecordErrorEvent\",\n    \"Rect\",\n    \"ReferenceError\",\n    \"RegExp\",\n    \"Request\",\n    \"Response\",\n    \"SAMPLER_2D\",\n    \"SAMPLER_CUBE\",\n    \"SAMPLES\",\n    \"SAMPLE_ALPHA_TO_COVERAGE\",\n    \"SAMPLE_BUFFERS\",\n    \"SAMPLE_COVERAGE\",\n    \"SAMPLE_COVERAGE_INVERT\",\n    \"SAMPLE_COVERAGE_VALUE\",\n    \"SAWTOOTH\",\n    \"SCHEDULED_STATE\",\n    \"SCISSOR_BOX\",\n    \"SCISSOR_TEST\",\n    \"SCROLL_PAGE_DOWN\",\n    \"SCROLL_PAGE_UP\",\n    \"SDP_ANSWER\",\n    \"SDP_OFFER\",\n    \"SDP_PRANSWER\",\n    \"SECURITY_ERR\",\n    \"SELECT\",\n    \"SERIALIZE_ERR\",\n    \"SEVERITY_ERROR\",\n    \"SEVERITY_FATAL_ERROR\",\n    \"SEVERITY_WARNING\",\n    \"SHADER_COMPILER\",\n    \"SHADER_TYPE\",\n    \"SHADING_LANGUAGE_VERSION\",\n    \"SHIFT_MASK\",\n    \"SHORT\",\n    \"SHOWING\",\n    \"SHOW_ALL\",\n    \"SHOW_ATTRIBUTE\",\n    \"SHOW_CDATA_SECTION\",\n    \"SHOW_COMMENT\",\n    \"SHOW_DOCUMENT\",\n    \"SHOW_DOCUMENT_FRAGMENT\",\n    \"SHOW_DOCUMENT_TYPE\",\n    \"SHOW_ELEMENT\",\n    \"SHOW_ENTITY\",\n    \"SHOW_ENTITY_REFERENCE\",\n    \"SHOW_NOTATION\",\n    \"SHOW_PROCESSING_INSTRUCTION\",\n    \"SHOW_TEXT\",\n    \"SINE\",\n    \"SOUNDFIELD\",\n    \"SQLException\",\n    \"SQRT1_2\",\n    \"SQRT2\",\n    \"SQUARE\",\n    \"SRC_ALPHA\",\n    \"SRC_ALPHA_SATURATE\",\n    \"SRC_COLOR\",\n    \"START_TO_END\",\n    \"START_TO_START\",\n    \"STATIC_DRAW\",\n    \"STENCIL_ATTACHMENT\",\n    \"STENCIL_BACK_FAIL\",\n    \"STENCIL_BACK_FUNC\",\n    \"STENCIL_BACK_PASS_DEPTH_FAIL\",\n    \"STENCIL_BACK_PASS_DEPTH_PASS\",\n    \"STENCIL_BACK_REF\",\n    \"STENCIL_BACK_VALUE_MASK\",\n    \"STENCIL_BACK_WRITEMASK\",\n    \"STENCIL_BITS\",\n    \"STENCIL_BUFFER_BIT\",\n    \"STENCIL_CLEAR_VALUE\",\n    \"STENCIL_FAIL\",\n    \"STENCIL_FUNC\",\n    \"STENCIL_INDEX\",\n    \"STENCIL_INDEX8\",\n    \"STENCIL_PASS_DEPTH_FAIL\",\n    \"STENCIL_PASS_DEPTH_PASS\",\n    \"STENCIL_REF\",\n    \"STENCIL_TEST\",\n    \"STENCIL_VALUE_MASK\",\n    \"STENCIL_WRITEMASK\",\n    \"STREAM_DRAW\",\n    \"STRING_TYPE\",\n    \"STYLE_RULE\",\n    \"SUBPIXEL_BITS\",\n    \"SUPPORTS_RULE\",\n    \"SVGAElement\",\n    \"SVGAltGlyphDefElement\",\n    \"SVGAltGlyphElement\",\n    \"SVGAltGlyphItemElement\",\n    \"SVGAngle\",\n    \"SVGAnimateColorElement\",\n    \"SVGAnimateElement\",\n    \"SVGAnimateMotionElement\",\n    \"SVGAnimateTransformElement\",\n    \"SVGAnimatedAngle\",\n    \"SVGAnimatedBoolean\",\n    \"SVGAnimatedEnumeration\",\n    \"SVGAnimatedInteger\",\n    \"SVGAnimatedLength\",\n    \"SVGAnimatedLengthList\",\n    \"SVGAnimatedNumber\",\n    \"SVGAnimatedNumberList\",\n    \"SVGAnimatedPreserveAspectRatio\",\n    \"SVGAnimatedRect\",\n    \"SVGAnimatedString\",\n    \"SVGAnimatedTransformList\",\n    \"SVGAnimationElement\",\n    \"SVGCircleElement\",\n    \"SVGClipPathElement\",\n    \"SVGColor\",\n    \"SVGComponentTransferFunctionElement\",\n    \"SVGCursorElement\",\n    \"SVGDefsElement\",\n    \"SVGDescElement\",\n    \"SVGDiscardElement\",\n    \"SVGDocument\",\n    \"SVGElement\",\n    \"SVGElementInstance\",\n    \"SVGElementInstanceList\",\n    \"SVGEllipseElement\",\n    \"SVGException\",\n    \"SVGFEBlendElement\",\n    \"SVGFEColorMatrixElement\",\n    \"SVGFEComponentTransferElement\",\n    \"SVGFECompositeElement\",\n    \"SVGFEConvolveMatrixElement\",\n    \"SVGFEDiffuseLightingElement\",\n    \"SVGFEDisplacementMapElement\",\n    \"SVGFEDistantLightElement\",\n    \"SVGFEDropShadowElement\",\n    \"SVGFEFloodElement\",\n    \"SVGFEFuncAElement\",\n    \"SVGFEFuncBElement\",\n    \"SVGFEFuncGElement\",\n    \"SVGFEFuncRElement\",\n    \"SVGFEGaussianBlurElement\",\n    \"SVGFEImageElement\",\n    \"SVGFEMergeElement\",\n    \"SVGFEMergeNodeElement\",\n    \"SVGFEMorphologyElement\",\n    \"SVGFEOffsetElement\",\n    \"SVGFEPointLightElement\",\n    \"SVGFESpecularLightingElement\",\n    \"SVGFESpotLightElement\",\n    \"SVGFETileElement\",\n    \"SVGFETurbulenceElement\",\n    \"SVGFilterElement\",\n    \"SVGFontElement\",\n    \"SVGFontFaceElement\",\n    \"SVGFontFaceFormatElement\",\n    \"SVGFontFaceNameElement\",\n    \"SVGFontFaceSrcElement\",\n    \"SVGFontFaceUriElement\",\n    \"SVGForeignObjectElement\",\n    \"SVGGElement\",\n    \"SVGGeometryElement\",\n    \"SVGGlyphElement\",\n    \"SVGGlyphRefElement\",\n    \"SVGGradientElement\",\n    \"SVGGraphicsElement\",\n    \"SVGHKernElement\",\n    \"SVGImageElement\",\n    \"SVGLength\",\n    \"SVGLengthList\",\n    \"SVGLineElement\",\n    \"SVGLinearGradientElement\",\n    \"SVGMPathElement\",\n    \"SVGMarkerElement\",\n    \"SVGMaskElement\",\n    \"SVGMatrix\",\n    \"SVGMetadataElement\",\n    \"SVGMissingGlyphElement\",\n    \"SVGNumber\",\n    \"SVGNumberList\",\n    \"SVGPaint\",\n    \"SVGPathElement\",\n    \"SVGPathSeg\",\n    \"SVGPathSegArcAbs\",\n    \"SVGPathSegArcRel\",\n    \"SVGPathSegClosePath\",\n    \"SVGPathSegCurvetoCubicAbs\",\n    \"SVGPathSegCurvetoCubicRel\",\n    \"SVGPathSegCurvetoCubicSmoothAbs\",\n    \"SVGPathSegCurvetoCubicSmoothRel\",\n    \"SVGPathSegCurvetoQuadraticAbs\",\n    \"SVGPathSegCurvetoQuadraticRel\",\n    \"SVGPathSegCurvetoQuadraticSmoothAbs\",\n    \"SVGPathSegCurvetoQuadraticSmoothRel\",\n    \"SVGPathSegLinetoAbs\",\n    \"SVGPathSegLinetoHorizontalAbs\",\n    \"SVGPathSegLinetoHorizontalRel\",\n    \"SVGPathSegLinetoRel\",\n    \"SVGPathSegLinetoVerticalAbs\",\n    \"SVGPathSegLinetoVerticalRel\",\n    \"SVGPathSegList\",\n    \"SVGPathSegMovetoAbs\",\n    \"SVGPathSegMovetoRel\",\n    \"SVGPatternElement\",\n    \"SVGPoint\",\n    \"SVGPointList\",\n    \"SVGPolygonElement\",\n    \"SVGPolylineElement\",\n    \"SVGPreserveAspectRatio\",\n    \"SVGRadialGradientElement\",\n    \"SVGRect\",\n    \"SVGRectElement\",\n    \"SVGRenderingIntent\",\n    \"SVGSVGElement\",\n    \"SVGScriptElement\",\n    \"SVGSetElement\",\n    \"SVGStopElement\",\n    \"SVGStringList\",\n    \"SVGStyleElement\",\n    \"SVGSwitchElement\",\n    \"SVGSymbolElement\",\n    \"SVGTRefElement\",\n    \"SVGTSpanElement\",\n    \"SVGTextContentElement\",\n    \"SVGTextElement\",\n    \"SVGTextPathElement\",\n    \"SVGTextPositioningElement\",\n    \"SVGTitleElement\",\n    \"SVGTransform\",\n    \"SVGTransformList\",\n    \"SVGUnitTypes\",\n    \"SVGUseElement\",\n    \"SVGVKernElement\",\n    \"SVGViewElement\",\n    \"SVGViewSpec\",\n    \"SVGZoomAndPan\",\n    \"SVGZoomEvent\",\n    \"SVG_ANGLETYPE_DEG\",\n    \"SVG_ANGLETYPE_GRAD\",\n    \"SVG_ANGLETYPE_RAD\",\n    \"SVG_ANGLETYPE_UNKNOWN\",\n    \"SVG_ANGLETYPE_UNSPECIFIED\",\n    \"SVG_CHANNEL_A\",\n    \"SVG_CHANNEL_B\",\n    \"SVG_CHANNEL_G\",\n    \"SVG_CHANNEL_R\",\n    \"SVG_CHANNEL_UNKNOWN\",\n    \"SVG_COLORTYPE_CURRENTCOLOR\",\n    \"SVG_COLORTYPE_RGBCOLOR\",\n    \"SVG_COLORTYPE_RGBCOLOR_ICCCOLOR\",\n    \"SVG_COLORTYPE_UNKNOWN\",\n    \"SVG_EDGEMODE_DUPLICATE\",\n    \"SVG_EDGEMODE_NONE\",\n    \"SVG_EDGEMODE_UNKNOWN\",\n    \"SVG_EDGEMODE_WRAP\",\n    \"SVG_FEBLEND_MODE_COLOR\",\n    \"SVG_FEBLEND_MODE_COLOR_BURN\",\n    \"SVG_FEBLEND_MODE_COLOR_DODGE\",\n    \"SVG_FEBLEND_MODE_DARKEN\",\n    \"SVG_FEBLEND_MODE_DIFFERENCE\",\n    \"SVG_FEBLEND_MODE_EXCLUSION\",\n    \"SVG_FEBLEND_MODE_HARD_LIGHT\",\n    \"SVG_FEBLEND_MODE_HUE\",\n    \"SVG_FEBLEND_MODE_LIGHTEN\",\n    \"SVG_FEBLEND_MODE_LUMINOSITY\",\n    \"SVG_FEBLEND_MODE_MULTIPLY\",\n    \"SVG_FEBLEND_MODE_NORMAL\",\n    \"SVG_FEBLEND_MODE_OVERLAY\",\n    \"SVG_FEBLEND_MODE_SATURATION\",\n    \"SVG_FEBLEND_MODE_SCREEN\",\n    \"SVG_FEBLEND_MODE_SOFT_LIGHT\",\n    \"SVG_FEBLEND_MODE_UNKNOWN\",\n    \"SVG_FECOLORMATRIX_TYPE_HUEROTATE\",\n    \"SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA\",\n    \"SVG_FECOLORMATRIX_TYPE_MATRIX\",\n    \"SVG_FECOLORMATRIX_TYPE_SATURATE\",\n    \"SVG_FECOLORMATRIX_TYPE_UNKNOWN\",\n    \"SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE\",\n    \"SVG_FECOMPONENTTRANSFER_TYPE_GAMMA\",\n    \"SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY\",\n    \"SVG_FECOMPONENTTRANSFER_TYPE_LINEAR\",\n    \"SVG_FECOMPONENTTRANSFER_TYPE_TABLE\",\n    \"SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN\",\n    \"SVG_FECOMPOSITE_OPERATOR_ARITHMETIC\",\n    \"SVG_FECOMPOSITE_OPERATOR_ATOP\",\n    \"SVG_FECOMPOSITE_OPERATOR_IN\",\n    \"SVG_FECOMPOSITE_OPERATOR_OUT\",\n    \"SVG_FECOMPOSITE_OPERATOR_OVER\",\n    \"SVG_FECOMPOSITE_OPERATOR_UNKNOWN\",\n    \"SVG_FECOMPOSITE_OPERATOR_XOR\",\n    \"SVG_INVALID_VALUE_ERR\",\n    \"SVG_LENGTHTYPE_CM\",\n    \"SVG_LENGTHTYPE_EMS\",\n    \"SVG_LENGTHTYPE_EXS\",\n    \"SVG_LENGTHTYPE_IN\",\n    \"SVG_LENGTHTYPE_MM\",\n    \"SVG_LENGTHTYPE_NUMBER\",\n    \"SVG_LENGTHTYPE_PC\",\n    \"SVG_LENGTHTYPE_PERCENTAGE\",\n    \"SVG_LENGTHTYPE_PT\",\n    \"SVG_LENGTHTYPE_PX\",\n    \"SVG_LENGTHTYPE_UNKNOWN\",\n    \"SVG_MARKERUNITS_STROKEWIDTH\",\n    \"SVG_MARKERUNITS_UNKNOWN\",\n    \"SVG_MARKERUNITS_USERSPACEONUSE\",\n    \"SVG_MARKER_ORIENT_ANGLE\",\n    \"SVG_MARKER_ORIENT_AUTO\",\n    \"SVG_MARKER_ORIENT_UNKNOWN\",\n    \"SVG_MASKTYPE_ALPHA\",\n    \"SVG_MASKTYPE_LUMINANCE\",\n    \"SVG_MATRIX_NOT_INVERTABLE\",\n    \"SVG_MEETORSLICE_MEET\",\n    \"SVG_MEETORSLICE_SLICE\",\n    \"SVG_MEETORSLICE_UNKNOWN\",\n    \"SVG_MORPHOLOGY_OPERATOR_DILATE\",\n    \"SVG_MORPHOLOGY_OPERATOR_ERODE\",\n    \"SVG_MORPHOLOGY_OPERATOR_UNKNOWN\",\n    \"SVG_PAINTTYPE_CURRENTCOLOR\",\n    \"SVG_PAINTTYPE_NONE\",\n    \"SVG_PAINTTYPE_RGBCOLOR\",\n    \"SVG_PAINTTYPE_RGBCOLOR_ICCCOLOR\",\n    \"SVG_PAINTTYPE_UNKNOWN\",\n    \"SVG_PAINTTYPE_URI\",\n    \"SVG_PAINTTYPE_URI_CURRENTCOLOR\",\n    \"SVG_PAINTTYPE_URI_NONE\",\n    \"SVG_PAINTTYPE_URI_RGBCOLOR\",\n    \"SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR\",\n    \"SVG_PRESERVEASPECTRATIO_NONE\",\n    \"SVG_PRESERVEASPECTRATIO_UNKNOWN\",\n    \"SVG_PRESERVEASPECTRATIO_XMAXYMAX\",\n    \"SVG_PRESERVEASPECTRATIO_XMAXYMID\",\n    \"SVG_PRESERVEASPECTRATIO_XMAXYMIN\",\n    \"SVG_PRESERVEASPECTRATIO_XMIDYMAX\",\n    \"SVG_PRESERVEASPECTRATIO_XMIDYMID\",\n    \"SVG_PRESERVEASPECTRATIO_XMIDYMIN\",\n    \"SVG_PRESERVEASPECTRATIO_XMINYMAX\",\n    \"SVG_PRESERVEASPECTRATIO_XMINYMID\",\n    \"SVG_PRESERVEASPECTRATIO_XMINYMIN\",\n    \"SVG_SPREADMETHOD_PAD\",\n    \"SVG_SPREADMETHOD_REFLECT\",\n    \"SVG_SPREADMETHOD_REPEAT\",\n    \"SVG_SPREADMETHOD_UNKNOWN\",\n    \"SVG_STITCHTYPE_NOSTITCH\",\n    \"SVG_STITCHTYPE_STITCH\",\n    \"SVG_STITCHTYPE_UNKNOWN\",\n    \"SVG_TRANSFORM_MATRIX\",\n    \"SVG_TRANSFORM_ROTATE\",\n    \"SVG_TRANSFORM_SCALE\",\n    \"SVG_TRANSFORM_SKEWX\",\n    \"SVG_TRANSFORM_SKEWY\",\n    \"SVG_TRANSFORM_TRANSLATE\",\n    \"SVG_TRANSFORM_UNKNOWN\",\n    \"SVG_TURBULENCE_TYPE_FRACTALNOISE\",\n    \"SVG_TURBULENCE_TYPE_TURBULENCE\",\n    \"SVG_TURBULENCE_TYPE_UNKNOWN\",\n    \"SVG_UNIT_TYPE_OBJECTBOUNDINGBOX\",\n    \"SVG_UNIT_TYPE_UNKNOWN\",\n    \"SVG_UNIT_TYPE_USERSPACEONUSE\",\n    \"SVG_WRONG_TYPE_ERR\",\n    \"SVG_ZOOMANDPAN_DISABLE\",\n    \"SVG_ZOOMANDPAN_MAGNIFY\",\n    \"SVG_ZOOMANDPAN_UNKNOWN\",\n    \"SYNTAX_ERR\",\n    \"SavedPages\",\n    \"Screen\",\n    \"ScreenOrientation\",\n    \"Script\",\n    \"ScriptProcessorNode\",\n    \"ScrollAreaEvent\",\n    \"SecurityPolicyViolationEvent\",\n    \"Selection\",\n    \"ServiceWorker\",\n    \"ServiceWorkerContainer\",\n    \"ServiceWorkerRegistration\",\n    \"SessionDescription\",\n    \"Set\",\n    \"ShadowRoot\",\n    \"SharedWorker\",\n    \"SimpleGestureEvent\",\n    \"SpeechSynthesisEvent\",\n    \"SpeechSynthesisUtterance\",\n    \"StopIteration\",\n    \"Storage\",\n    \"StorageEvent\",\n    \"String\",\n    \"StyleSheet\",\n    \"StyleSheetList\",\n    \"SubtleCrypto\",\n    \"Symbol\",\n    \"SyntaxError\",\n    \"TEMPORARY\",\n    \"TEXTPATH_METHODTYPE_ALIGN\",\n    \"TEXTPATH_METHODTYPE_STRETCH\",\n    \"TEXTPATH_METHODTYPE_UNKNOWN\",\n    \"TEXTPATH_SPACINGTYPE_AUTO\",\n    \"TEXTPATH_SPACINGTYPE_EXACT\",\n    \"TEXTPATH_SPACINGTYPE_UNKNOWN\",\n    \"TEXTURE\",\n    \"TEXTURE0\",\n    \"TEXTURE1\",\n    \"TEXTURE10\",\n    \"TEXTURE11\",\n    \"TEXTURE12\",\n    \"TEXTURE13\",\n    \"TEXTURE14\",\n    \"TEXTURE15\",\n    \"TEXTURE16\",\n    \"TEXTURE17\",\n    \"TEXTURE18\",\n    \"TEXTURE19\",\n    \"TEXTURE2\",\n    \"TEXTURE20\",\n    \"TEXTURE21\",\n    \"TEXTURE22\",\n    \"TEXTURE23\",\n    \"TEXTURE24\",\n    \"TEXTURE25\",\n    \"TEXTURE26\",\n    \"TEXTURE27\",\n    \"TEXTURE28\",\n    \"TEXTURE29\",\n    \"TEXTURE3\",\n    \"TEXTURE30\",\n    \"TEXTURE31\",\n    \"TEXTURE4\",\n    \"TEXTURE5\",\n    \"TEXTURE6\",\n    \"TEXTURE7\",\n    \"TEXTURE8\",\n    \"TEXTURE9\",\n    \"TEXTURE_2D\",\n    \"TEXTURE_BINDING_2D\",\n    \"TEXTURE_BINDING_CUBE_MAP\",\n    \"TEXTURE_CUBE_MAP\",\n    \"TEXTURE_CUBE_MAP_NEGATIVE_X\",\n    \"TEXTURE_CUBE_MAP_NEGATIVE_Y\",\n    \"TEXTURE_CUBE_MAP_NEGATIVE_Z\",\n    \"TEXTURE_CUBE_MAP_POSITIVE_X\",\n    \"TEXTURE_CUBE_MAP_POSITIVE_Y\",\n    \"TEXTURE_CUBE_MAP_POSITIVE_Z\",\n    \"TEXTURE_MAG_FILTER\",\n    \"TEXTURE_MAX_ANISOTROPY_EXT\",\n    \"TEXTURE_MIN_FILTER\",\n    \"TEXTURE_WRAP_S\",\n    \"TEXTURE_WRAP_T\",\n    \"TEXT_NODE\",\n    \"TIMEOUT\",\n    \"TIMEOUT_ERR\",\n    \"TOO_LARGE_ERR\",\n    \"TRANSACTION_INACTIVE_ERR\",\n    \"TRIANGLE\",\n    \"TRIANGLES\",\n    \"TRIANGLE_FAN\",\n    \"TRIANGLE_STRIP\",\n    \"TYPE_BACK_FORWARD\",\n    \"TYPE_ERR\",\n    \"TYPE_MISMATCH_ERR\",\n    \"TYPE_NAVIGATE\",\n    \"TYPE_RELOAD\",\n    \"TYPE_RESERVED\",\n    \"Text\",\n    \"TextDecoder\",\n    \"TextEncoder\",\n    \"TextEvent\",\n    \"TextMetrics\",\n    \"TextTrack\",\n    \"TextTrackCue\",\n    \"TextTrackCueList\",\n    \"TextTrackList\",\n    \"TimeEvent\",\n    \"TimeRanges\",\n    \"Touch\",\n    \"TouchEvent\",\n    \"TouchList\",\n    \"TrackEvent\",\n    \"TransitionEvent\",\n    \"TreeWalker\",\n    \"TypeError\",\n    \"UIEvent\",\n    \"UNCACHED\",\n    \"UNKNOWN_ERR\",\n    \"UNKNOWN_RULE\",\n    \"UNMASKED_RENDERER_WEBGL\",\n    \"UNMASKED_VENDOR_WEBGL\",\n    \"UNORDERED_NODE_ITERATOR_TYPE\",\n    \"UNORDERED_NODE_SNAPSHOT_TYPE\",\n    \"UNPACK_ALIGNMENT\",\n    \"UNPACK_COLORSPACE_CONVERSION_WEBGL\",\n    \"UNPACK_FLIP_Y_WEBGL\",\n    \"UNPACK_PREMULTIPLY_ALPHA_WEBGL\",\n    \"UNSCHEDULED_STATE\",\n    \"UNSENT\",\n    \"UNSIGNED_BYTE\",\n    \"UNSIGNED_INT\",\n    \"UNSIGNED_SHORT\",\n    \"UNSIGNED_SHORT_4_4_4_4\",\n    \"UNSIGNED_SHORT_5_5_5_1\",\n    \"UNSIGNED_SHORT_5_6_5\",\n    \"UNSPECIFIED_EVENT_TYPE_ERR\",\n    \"UPDATEREADY\",\n    \"URIError\",\n    \"URL\",\n    \"URLSearchParams\",\n    \"URLUnencoded\",\n    \"URL_MISMATCH_ERR\",\n    \"UTC\",\n    \"Uint16Array\",\n    \"Uint32Array\",\n    \"Uint8Array\",\n    \"Uint8ClampedArray\",\n    \"UserMessageHandler\",\n    \"UserMessageHandlersNamespace\",\n    \"UserProximityEvent\",\n    \"VALIDATE_STATUS\",\n    \"VALIDATION_ERR\",\n    \"VARIABLES_RULE\",\n    \"VENDOR\",\n    \"VERSION\",\n    \"VERSION_CHANGE\",\n    \"VERSION_ERR\",\n    \"VERTEX_ATTRIB_ARRAY_BUFFER_BINDING\",\n    \"VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE\",\n    \"VERTEX_ATTRIB_ARRAY_ENABLED\",\n    \"VERTEX_ATTRIB_ARRAY_NORMALIZED\",\n    \"VERTEX_ATTRIB_ARRAY_POINTER\",\n    \"VERTEX_ATTRIB_ARRAY_SIZE\",\n    \"VERTEX_ATTRIB_ARRAY_STRIDE\",\n    \"VERTEX_ATTRIB_ARRAY_TYPE\",\n    \"VERTEX_SHADER\",\n    \"VERTICAL\",\n    \"VERTICAL_AXIS\",\n    \"VER_ERR\",\n    \"VIEWPORT\",\n    \"VIEWPORT_RULE\",\n    \"VTTCue\",\n    \"VTTRegion\",\n    \"ValidityState\",\n    \"VideoStreamTrack\",\n    \"WEBKIT_FILTER_RULE\",\n    \"WEBKIT_KEYFRAMES_RULE\",\n    \"WEBKIT_KEYFRAME_RULE\",\n    \"WEBKIT_REGION_RULE\",\n    \"WRONG_DOCUMENT_ERR\",\n    \"WaveShaperNode\",\n    \"WeakMap\",\n    \"WeakSet\",\n    \"WebGLActiveInfo\",\n    \"WebGLBuffer\",\n    \"WebGLContextEvent\",\n    \"WebGLFramebuffer\",\n    \"WebGLProgram\",\n    \"WebGLRenderbuffer\",\n    \"WebGLRenderingContext\",\n    \"WebGLShader\",\n    \"WebGLShaderPrecisionFormat\",\n    \"WebGLTexture\",\n    \"WebGLUniformLocation\",\n    \"WebGLVertexArray\",\n    \"WebKitAnimationEvent\",\n    \"WebKitBlobBuilder\",\n    \"WebKitCSSFilterRule\",\n    \"WebKitCSSFilterValue\",\n    \"WebKitCSSKeyframeRule\",\n    \"WebKitCSSKeyframesRule\",\n    \"WebKitCSSMatrix\",\n    \"WebKitCSSRegionRule\",\n    \"WebKitCSSTransformValue\",\n    \"WebKitDataCue\",\n    \"WebKitGamepad\",\n    \"WebKitMediaKeyError\",\n    \"WebKitMediaKeyMessageEvent\",\n    \"WebKitMediaKeySession\",\n    \"WebKitMediaKeys\",\n    \"WebKitMediaSource\",\n    \"WebKitMutationObserver\",\n    \"WebKitNamespace\",\n    \"WebKitPlaybackTargetAvailabilityEvent\",\n    \"WebKitPoint\",\n    \"WebKitShadowRoot\",\n    \"WebKitSourceBuffer\",\n    \"WebKitSourceBufferList\",\n    \"WebKitTransitionEvent\",\n    \"WebSocket\",\n    \"WheelEvent\",\n    \"Window\",\n    \"Worker\",\n    \"XMLDocument\",\n    \"XMLHttpRequest\",\n    \"XMLHttpRequestEventTarget\",\n    \"XMLHttpRequestException\",\n    \"XMLHttpRequestProgressEvent\",\n    \"XMLHttpRequestUpload\",\n    \"XMLSerializer\",\n    \"XMLStylesheetProcessingInstruction\",\n    \"XPathEvaluator\",\n    \"XPathException\",\n    \"XPathExpression\",\n    \"XPathNSResolver\",\n    \"XPathResult\",\n    \"XSLTProcessor\",\n    \"ZERO\",\n    \"_XD0M_\",\n    \"_YD0M_\",\n    \"__defineGetter__\",\n    \"__defineSetter__\",\n    \"__lookupGetter__\",\n    \"__lookupSetter__\",\n    \"__opera\",\n    \"__proto__\",\n    \"_browserjsran\",\n    \"a\",\n    \"aLink\",\n    \"abbr\",\n    \"abort\",\n    \"abs\",\n    \"absolute\",\n    \"acceleration\",\n    \"accelerationIncludingGravity\",\n    \"accelerator\",\n    \"accept\",\n    \"acceptCharset\",\n    \"acceptNode\",\n    \"accessKey\",\n    \"accessKeyLabel\",\n    \"accuracy\",\n    \"acos\",\n    \"acosh\",\n    \"action\",\n    \"actionURL\",\n    \"active\",\n    \"activeCues\",\n    \"activeElement\",\n    \"activeSourceBuffers\",\n    \"activeSourceCount\",\n    \"activeTexture\",\n    \"add\",\n    \"addBehavior\",\n    \"addCandidate\",\n    \"addColorStop\",\n    \"addCue\",\n    \"addElement\",\n    \"addEventListener\",\n    \"addFilter\",\n    \"addFromString\",\n    \"addFromUri\",\n    \"addIceCandidate\",\n    \"addImport\",\n    \"addListener\",\n    \"addNamed\",\n    \"addPageRule\",\n    \"addPath\",\n    \"addPointer\",\n    \"addRange\",\n    \"addRegion\",\n    \"addRule\",\n    \"addSearchEngine\",\n    \"addSourceBuffer\",\n    \"addStream\",\n    \"addTextTrack\",\n    \"addTrack\",\n    \"addWakeLockListener\",\n    \"addedNodes\",\n    \"additionalName\",\n    \"additiveSymbols\",\n    \"addons\",\n    \"adoptNode\",\n    \"adr\",\n    \"advance\",\n    \"alert\",\n    \"algorithm\",\n    \"align\",\n    \"align-content\",\n    \"align-items\",\n    \"align-self\",\n    \"alignContent\",\n    \"alignItems\",\n    \"alignSelf\",\n    \"alignmentBaseline\",\n    \"alinkColor\",\n    \"all\",\n    \"allSettled\",\n    \"allowFullscreen\",\n    \"allowedDirections\",\n    \"alpha\",\n    \"alt\",\n    \"altGraphKey\",\n    \"altHtml\",\n    \"altKey\",\n    \"altLeft\",\n    \"altitude\",\n    \"altitudeAccuracy\",\n    \"amplitude\",\n    \"ancestorOrigins\",\n    \"anchor\",\n    \"anchorNode\",\n    \"anchorOffset\",\n    \"anchors\",\n    \"angle\",\n    \"animVal\",\n    \"animate\",\n    \"animatedInstanceRoot\",\n    \"animatedNormalizedPathSegList\",\n    \"animatedPathSegList\",\n    \"animatedPoints\",\n    \"animation\",\n    \"animation-delay\",\n    \"animation-direction\",\n    \"animation-duration\",\n    \"animation-fill-mode\",\n    \"animation-iteration-count\",\n    \"animation-name\",\n    \"animation-play-state\",\n    \"animation-timing-function\",\n    \"animationDelay\",\n    \"animationDirection\",\n    \"animationDuration\",\n    \"animationFillMode\",\n    \"animationIterationCount\",\n    \"animationName\",\n    \"animationPlayState\",\n    \"animationStartTime\",\n    \"animationTimingFunction\",\n    \"animationsPaused\",\n    \"anniversary\",\n    \"any\",\n    \"app\",\n    \"appCodeName\",\n    \"appMinorVersion\",\n    \"appName\",\n    \"appNotifications\",\n    \"appVersion\",\n    \"append\",\n    \"appendBuffer\",\n    \"appendChild\",\n    \"appendData\",\n    \"appendItem\",\n    \"appendMedium\",\n    \"appendNamed\",\n    \"appendRule\",\n    \"appendStream\",\n    \"appendWindowEnd\",\n    \"appendWindowStart\",\n    \"applets\",\n    \"applicationCache\",\n    \"apply\",\n    \"applyElement\",\n    \"arc\",\n    \"arcTo\",\n    \"archive\",\n    \"areas\",\n    \"arguments\",\n    \"arrayBuffer\",\n    \"asin\",\n    \"asinh\",\n    \"assert\",\n    \"assign\",\n    \"async\",\n    \"atEnd\",\n    \"atan\",\n    \"atan2\",\n    \"atanh\",\n    \"atob\",\n    \"attachEvent\",\n    \"attachShader\",\n    \"attachShadow\",\n    \"attachments\",\n    \"attack\",\n    \"attrChange\",\n    \"attrName\",\n    \"attributeFilter\",\n    \"attributeName\",\n    \"attributeNamespace\",\n    \"attributeOldValue\",\n    \"attributes\",\n    \"audioTracks\",\n    \"autoIncrement\",\n    \"autobuffer\",\n    \"autocapitalize\",\n    \"autocomplete\",\n    \"autocorrect\",\n    \"autofocus\",\n    \"autoplay\",\n    \"availHeight\",\n    \"availLeft\",\n    \"availTop\",\n    \"availWidth\",\n    \"availability\",\n    \"available\",\n    \"aversion\",\n    \"axes\",\n    \"axis\",\n    \"azimuth\",\n    \"b\",\n    \"back\",\n    \"backface-visibility\",\n    \"backfaceVisibility\",\n    \"background\",\n    \"background-attachment\",\n    \"background-blend-mode\",\n    \"background-clip\",\n    \"background-color\",\n    \"background-image\",\n    \"background-origin\",\n    \"background-position\",\n    \"background-repeat\",\n    \"background-size\",\n    \"backgroundAttachment\",\n    \"backgroundBlendMode\",\n    \"backgroundClip\",\n    \"backgroundColor\",\n    \"backgroundImage\",\n    \"backgroundOrigin\",\n    \"backgroundPosition\",\n    \"backgroundPositionX\",\n    \"backgroundPositionY\",\n    \"backgroundRepeat\",\n    \"backgroundSize\",\n    \"badInput\",\n    \"balance\",\n    \"baseFrequencyX\",\n    \"baseFrequencyY\",\n    \"baseNode\",\n    \"baseOffset\",\n    \"baseURI\",\n    \"baseVal\",\n    \"baselineShift\",\n    \"battery\",\n    \"bday\",\n    \"beginElement\",\n    \"beginElementAt\",\n    \"beginPath\",\n    \"behavior\",\n    \"behaviorCookie\",\n    \"behaviorPart\",\n    \"behaviorUrns\",\n    \"beta\",\n    \"bezierCurveTo\",\n    \"bgColor\",\n    \"bgProperties\",\n    \"bias\",\n    \"big\",\n    \"binaryType\",\n    \"bind\",\n    \"bindAttribLocation\",\n    \"bindBuffer\",\n    \"bindFramebuffer\",\n    \"bindRenderbuffer\",\n    \"bindTexture\",\n    \"blendColor\",\n    \"blendEquation\",\n    \"blendEquationSeparate\",\n    \"blendFunc\",\n    \"blendFuncSeparate\",\n    \"blink\",\n    \"blob\",\n    \"blockDirection\",\n    \"blue\",\n    \"blur\",\n    \"body\",\n    \"bodyUsed\",\n    \"bold\",\n    \"bookmarks\",\n    \"booleanValue\",\n    \"border\",\n    \"border-bottom\",\n    \"border-bottom-color\",\n    \"border-bottom-left-radius\",\n    \"border-bottom-right-radius\",\n    \"border-bottom-style\",\n    \"border-bottom-width\",\n    \"border-collapse\",\n    \"border-color\",\n    \"border-image\",\n    \"border-image-outset\",\n    \"border-image-repeat\",\n    \"border-image-slice\",\n    \"border-image-source\",\n    \"border-image-width\",\n    \"border-left\",\n    \"border-left-color\",\n    \"border-left-style\",\n    \"border-left-width\",\n    \"border-radius\",\n    \"border-right\",\n    \"border-right-color\",\n    \"border-right-style\",\n    \"border-right-width\",\n    \"border-spacing\",\n    \"border-style\",\n    \"border-top\",\n    \"border-top-color\",\n    \"border-top-left-radius\",\n    \"border-top-right-radius\",\n    \"border-top-style\",\n    \"border-top-width\",\n    \"border-width\",\n    \"borderBottom\",\n    \"borderBottomColor\",\n    \"borderBottomLeftRadius\",\n    \"borderBottomRightRadius\",\n    \"borderBottomStyle\",\n    \"borderBottomWidth\",\n    \"borderCollapse\",\n    \"borderColor\",\n    \"borderColorDark\",\n    \"borderColorLight\",\n    \"borderImage\",\n    \"borderImageOutset\",\n    \"borderImageRepeat\",\n    \"borderImageSlice\",\n    \"borderImageSource\",\n    \"borderImageWidth\",\n    \"borderLeft\",\n    \"borderLeftColor\",\n    \"borderLeftStyle\",\n    \"borderLeftWidth\",\n    \"borderRadius\",\n    \"borderRight\",\n    \"borderRightColor\",\n    \"borderRightStyle\",\n    \"borderRightWidth\",\n    \"borderSpacing\",\n    \"borderStyle\",\n    \"borderTop\",\n    \"borderTopColor\",\n    \"borderTopLeftRadius\",\n    \"borderTopRightRadius\",\n    \"borderTopStyle\",\n    \"borderTopWidth\",\n    \"borderWidth\",\n    \"bottom\",\n    \"bottomMargin\",\n    \"bound\",\n    \"boundElements\",\n    \"boundingClientRect\",\n    \"boundingHeight\",\n    \"boundingLeft\",\n    \"boundingTop\",\n    \"boundingWidth\",\n    \"bounds\",\n    \"box-decoration-break\",\n    \"box-shadow\",\n    \"box-sizing\",\n    \"boxDecorationBreak\",\n    \"boxShadow\",\n    \"boxSizing\",\n    \"breakAfter\",\n    \"breakBefore\",\n    \"breakInside\",\n    \"browserLanguage\",\n    \"btoa\",\n    \"bubbles\",\n    \"buffer\",\n    \"bufferData\",\n    \"bufferDepth\",\n    \"bufferSize\",\n    \"bufferSubData\",\n    \"buffered\",\n    \"bufferedAmount\",\n    \"buildID\",\n    \"buildNumber\",\n    \"button\",\n    \"buttonID\",\n    \"buttons\",\n    \"byteLength\",\n    \"byteOffset\",\n    \"c\",\n    \"call\",\n    \"caller\",\n    \"canBeFormatted\",\n    \"canBeMounted\",\n    \"canBeShared\",\n    \"canHaveChildren\",\n    \"canHaveHTML\",\n    \"canPlayType\",\n    \"cancel\",\n    \"cancelAnimationFrame\",\n    \"cancelBubble\",\n    \"cancelScheduledValues\",\n    \"cancelable\",\n    \"candidate\",\n    \"canvas\",\n    \"caption\",\n    \"caption-side\",\n    \"captionSide\",\n    \"capture\",\n    \"captureEvents\",\n    \"captureStackTrace\",\n    \"caretPositionFromPoint\",\n    \"caretRangeFromPoint\",\n    \"cast\",\n    \"catch\",\n    \"category\",\n    \"cbrt\",\n    \"cd\",\n    \"ceil\",\n    \"cellIndex\",\n    \"cellPadding\",\n    \"cellSpacing\",\n    \"cells\",\n    \"ch\",\n    \"chOff\",\n    \"chain\",\n    \"challenge\",\n    \"changedTouches\",\n    \"channel\",\n    \"channelCount\",\n    \"channelCountMode\",\n    \"channelInterpretation\",\n    \"char\",\n    \"charAt\",\n    \"charCode\",\n    \"charCodeAt\",\n    \"charIndex\",\n    \"characterData\",\n    \"characterDataOldValue\",\n    \"characterSet\",\n    \"charging\",\n    \"chargingTime\",\n    \"charset\",\n    \"checkEnclosure\",\n    \"checkFramebufferStatus\",\n    \"checkIntersection\",\n    \"checkValidity\",\n    \"checked\",\n    \"childElementCount\",\n    \"childList\",\n    \"childNodes\",\n    \"children\",\n    \"chrome\",\n    \"ciphertext\",\n    \"cite\",\n    \"classList\",\n    \"className\",\n    \"classid\",\n    \"clear\",\n    \"clearAttributes\",\n    \"clearColor\",\n    \"clearData\",\n    \"clearDepth\",\n    \"clearImmediate\",\n    \"clearInterval\",\n    \"clearMarks\",\n    \"clearMeasures\",\n    \"clearParameters\",\n    \"clearRect\",\n    \"clearResourceTimings\",\n    \"clearShadow\",\n    \"clearStencil\",\n    \"clearTimeout\",\n    \"clearWatch\",\n    \"click\",\n    \"clickCount\",\n    \"clientHeight\",\n    \"clientInformation\",\n    \"clientLeft\",\n    \"clientRect\",\n    \"clientRects\",\n    \"clientTop\",\n    \"clientWidth\",\n    \"clientX\",\n    \"clientY\",\n    \"clip\",\n    \"clip-path\",\n    \"clip-rule\",\n    \"clipBottom\",\n    \"clipLeft\",\n    \"clipPath\",\n    \"clipPathUnits\",\n    \"clipRight\",\n    \"clipRule\",\n    \"clipTop\",\n    \"clipboardData\",\n    \"clone\",\n    \"cloneContents\",\n    \"cloneNode\",\n    \"cloneRange\",\n    \"close\",\n    \"closePath\",\n    \"closed\",\n    \"closest\",\n    \"clz\",\n    \"clz32\",\n    \"cmp\",\n    \"code\",\n    \"codeBase\",\n    \"codePointAt\",\n    \"codeType\",\n    \"colSpan\",\n    \"collapse\",\n    \"collapseToEnd\",\n    \"collapseToStart\",\n    \"collapsed\",\n    \"collect\",\n    \"colno\",\n    \"color\",\n    \"color-interpolation\",\n    \"color-interpolation-filters\",\n    \"colorDepth\",\n    \"colorInterpolation\",\n    \"colorInterpolationFilters\",\n    \"colorMask\",\n    \"colorType\",\n    \"cols\",\n    \"columnCount\",\n    \"columnFill\",\n    \"columnGap\",\n    \"columnNumber\",\n    \"columnRule\",\n    \"columnRuleColor\",\n    \"columnRuleStyle\",\n    \"columnRuleWidth\",\n    \"columnSpan\",\n    \"columnWidth\",\n    \"columns\",\n    \"command\",\n    \"commitPreferences\",\n    \"commonAncestorContainer\",\n    \"compact\",\n    \"compareBoundaryPoints\",\n    \"compareDocumentPosition\",\n    \"compareEndPoints\",\n    \"compareNode\",\n    \"comparePoint\",\n    \"compatMode\",\n    \"compatible\",\n    \"compile\",\n    \"compileShader\",\n    \"complete\",\n    \"componentFromPoint\",\n    \"compositionEndOffset\",\n    \"compositionStartOffset\",\n    \"compressedTexImage2D\",\n    \"compressedTexSubImage2D\",\n    \"concat\",\n    \"conditionText\",\n    \"coneInnerAngle\",\n    \"coneOuterAngle\",\n    \"coneOuterGain\",\n    \"confirm\",\n    \"confirmComposition\",\n    \"confirmSiteSpecificTrackingException\",\n    \"confirmWebWideTrackingException\",\n    \"connect\",\n    \"connectEnd\",\n    \"connectStart\",\n    \"connected\",\n    \"connection\",\n    \"connectionSpeed\",\n    \"console\",\n    \"consolidate\",\n    \"constrictionActive\",\n    \"constructor\",\n    \"contactID\",\n    \"contains\",\n    \"containsNode\",\n    \"content\",\n    \"contentDocument\",\n    \"contentEditable\",\n    \"contentOverflow\",\n    \"contentScriptType\",\n    \"contentStyleType\",\n    \"contentType\",\n    \"contentWindow\",\n    \"context\",\n    \"contextMenu\",\n    \"contextmenu\",\n    \"continue\",\n    \"continuous\",\n    \"control\",\n    \"controller\",\n    \"controls\",\n    \"convertToSpecifiedUnits\",\n    \"cookie\",\n    \"cookieEnabled\",\n    \"coords\",\n    \"copyFromChannel\",\n    \"copyTexImage2D\",\n    \"copyTexSubImage2D\",\n    \"copyToChannel\",\n    \"copyWithin\",\n    \"correspondingElement\",\n    \"correspondingUseElement\",\n    \"cos\",\n    \"cosh\",\n    \"count\",\n    \"counter-increment\",\n    \"counter-reset\",\n    \"counterIncrement\",\n    \"counterReset\",\n    \"cpuClass\",\n    \"cpuSleepAllowed\",\n    \"create\",\n    \"createAnalyser\",\n    \"createAnswer\",\n    \"createAttribute\",\n    \"createAttributeNS\",\n    \"createBiquadFilter\",\n    \"createBuffer\",\n    \"createBufferSource\",\n    \"createCDATASection\",\n    \"createCSSStyleSheet\",\n    \"createCaption\",\n    \"createChannelMerger\",\n    \"createChannelSplitter\",\n    \"createComment\",\n    \"createContextualFragment\",\n    \"createControlRange\",\n    \"createConvolver\",\n    \"createDTMFSender\",\n    \"createDataChannel\",\n    \"createDelay\",\n    \"createDelayNode\",\n    \"createDocument\",\n    \"createDocumentFragment\",\n    \"createDocumentType\",\n    \"createDynamicsCompressor\",\n    \"createElement\",\n    \"createElementNS\",\n    \"createEntityReference\",\n    \"createEvent\",\n    \"createEventObject\",\n    \"createExpression\",\n    \"createFramebuffer\",\n    \"createFunction\",\n    \"createGain\",\n    \"createGainNode\",\n    \"createHTMLDocument\",\n    \"createImageBitmap\",\n    \"createImageData\",\n    \"createIndex\",\n    \"createJavaScriptNode\",\n    \"createLinearGradient\",\n    \"createMediaElementSource\",\n    \"createMediaKeys\",\n    \"createMediaStreamDestination\",\n    \"createMediaStreamSource\",\n    \"createMutableFile\",\n    \"createNSResolver\",\n    \"createNodeIterator\",\n    \"createNotification\",\n    \"createObjectStore\",\n    \"createObjectURL\",\n    \"createOffer\",\n    \"createOscillator\",\n    \"createPanner\",\n    \"createPattern\",\n    \"createPeriodicWave\",\n    \"createPopup\",\n    \"createProcessingInstruction\",\n    \"createProgram\",\n    \"createRadialGradient\",\n    \"createRange\",\n    \"createRangeCollection\",\n    \"createRenderbuffer\",\n    \"createSVGAngle\",\n    \"createSVGLength\",\n    \"createSVGMatrix\",\n    \"createSVGNumber\",\n    \"createSVGPathSegArcAbs\",\n    \"createSVGPathSegArcRel\",\n    \"createSVGPathSegClosePath\",\n    \"createSVGPathSegCurvetoCubicAbs\",\n    \"createSVGPathSegCurvetoCubicRel\",\n    \"createSVGPathSegCurvetoCubicSmoothAbs\",\n    \"createSVGPathSegCurvetoCubicSmoothRel\",\n    \"createSVGPathSegCurvetoQuadraticAbs\",\n    \"createSVGPathSegCurvetoQuadraticRel\",\n    \"createSVGPathSegCurvetoQuadraticSmoothAbs\",\n    \"createSVGPathSegCurvetoQuadraticSmoothRel\",\n    \"createSVGPathSegLinetoAbs\",\n    \"createSVGPathSegLinetoHorizontalAbs\",\n    \"createSVGPathSegLinetoHorizontalRel\",\n    \"createSVGPathSegLinetoRel\",\n    \"createSVGPathSegLinetoVerticalAbs\",\n    \"createSVGPathSegLinetoVerticalRel\",\n    \"createSVGPathSegMovetoAbs\",\n    \"createSVGPathSegMovetoRel\",\n    \"createSVGPoint\",\n    \"createSVGRect\",\n    \"createSVGTransform\",\n    \"createSVGTransformFromMatrix\",\n    \"createScriptProcessor\",\n    \"createSession\",\n    \"createShader\",\n    \"createShadowRoot\",\n    \"createStereoPanner\",\n    \"createStyleSheet\",\n    \"createTBody\",\n    \"createTFoot\",\n    \"createTHead\",\n    \"createTextNode\",\n    \"createTextRange\",\n    \"createTexture\",\n    \"createTouch\",\n    \"createTouchList\",\n    \"createTreeWalker\",\n    \"createWaveShaper\",\n    \"creationTime\",\n    \"crossOrigin\",\n    \"crypto\",\n    \"csi\",\n    \"cssFloat\",\n    \"cssRules\",\n    \"cssText\",\n    \"cssValueType\",\n    \"ctrlKey\",\n    \"ctrlLeft\",\n    \"cues\",\n    \"cullFace\",\n    \"currentNode\",\n    \"currentPage\",\n    \"currentScale\",\n    \"currentScript\",\n    \"currentSrc\",\n    \"currentState\",\n    \"currentStyle\",\n    \"currentTarget\",\n    \"currentTime\",\n    \"currentTranslate\",\n    \"currentView\",\n    \"cursor\",\n    \"curve\",\n    \"customError\",\n    \"cx\",\n    \"cy\",\n    \"d\",\n    \"data\",\n    \"dataFld\",\n    \"dataFormatAs\",\n    \"dataPageSize\",\n    \"dataSrc\",\n    \"dataTransfer\",\n    \"database\",\n    \"dataset\",\n    \"dateTime\",\n    \"db\",\n    \"debug\",\n    \"debuggerEnabled\",\n    \"declare\",\n    \"decode\",\n    \"decodeAudioData\",\n    \"decodeURI\",\n    \"decodeURIComponent\",\n    \"decodingInfo\",\n    \"decrypt\",\n    \"default\",\n    \"defaultCharset\",\n    \"defaultChecked\",\n    \"defaultMuted\",\n    \"defaultPlaybackRate\",\n    \"defaultPrevented\",\n    \"defaultSelected\",\n    \"defaultStatus\",\n    \"defaultURL\",\n    \"defaultValue\",\n    \"defaultView\",\n    \"defaultstatus\",\n    \"defer\",\n    \"defineMagicFunction\",\n    \"defineMagicVariable\",\n    \"defineProperties\",\n    \"defineProperty\",\n    \"delayTime\",\n    \"delete\",\n    \"deleteBuffer\",\n    \"deleteCaption\",\n    \"deleteCell\",\n    \"deleteContents\",\n    \"deleteData\",\n    \"deleteDatabase\",\n    \"deleteFramebuffer\",\n    \"deleteFromDocument\",\n    \"deleteIndex\",\n    \"deleteMedium\",\n    \"deleteObjectStore\",\n    \"deleteProgram\",\n    \"deleteRenderbuffer\",\n    \"deleteRow\",\n    \"deleteRule\",\n    \"deleteShader\",\n    \"deleteTFoot\",\n    \"deleteTHead\",\n    \"deleteTexture\",\n    \"deliverChangeRecords\",\n    \"delivery\",\n    \"deliveryInfo\",\n    \"deliveryStatus\",\n    \"deliveryTimestamp\",\n    \"delta\",\n    \"deltaMode\",\n    \"deltaX\",\n    \"deltaY\",\n    \"deltaZ\",\n    \"depthFunc\",\n    \"depthMask\",\n    \"depthRange\",\n    \"deriveBits\",\n    \"deriveKey\",\n    \"description\",\n    \"deselectAll\",\n    \"designMode\",\n    \"destination\",\n    \"destinationURL\",\n    \"detach\",\n    \"detachEvent\",\n    \"detachShader\",\n    \"detail\",\n    \"detune\",\n    \"devicePixelRatio\",\n    \"deviceXDPI\",\n    \"deviceYDPI\",\n    \"diffuseConstant\",\n    \"digest\",\n    \"dimensions\",\n    \"dir\",\n    \"dirName\",\n    \"direction\",\n    \"dirxml\",\n    \"disable\",\n    \"disableVertexAttribArray\",\n    \"disabled\",\n    \"dischargingTime\",\n    \"disconnect\",\n    \"dispatchEvent\",\n    \"display\",\n    \"distanceModel\",\n    \"divisor\",\n    \"djsapi\",\n    \"djsproxy\",\n    \"doImport\",\n    \"doNotTrack\",\n    \"doScroll\",\n    \"doctype\",\n    \"document\",\n    \"documentElement\",\n    \"documentMode\",\n    \"documentURI\",\n    \"dolphin\",\n    \"dolphinGameCenter\",\n    \"dolphininfo\",\n    \"dolphinmeta\",\n    \"domComplete\",\n    \"domContentLoadedEventEnd\",\n    \"domContentLoadedEventStart\",\n    \"domInteractive\",\n    \"domLoading\",\n    \"domain\",\n    \"domainLookupEnd\",\n    \"domainLookupStart\",\n    \"dominant-baseline\",\n    \"dominantBaseline\",\n    \"done\",\n    \"dopplerFactor\",\n    \"download\",\n    \"dragDrop\",\n    \"draggable\",\n    \"drawArrays\",\n    \"drawArraysInstancedANGLE\",\n    \"drawCustomFocusRing\",\n    \"drawElements\",\n    \"drawElementsInstancedANGLE\",\n    \"drawFocusIfNeeded\",\n    \"drawImage\",\n    \"drawImageFromRect\",\n    \"drawSystemFocusRing\",\n    \"drawingBufferHeight\",\n    \"drawingBufferWidth\",\n    \"dropEffect\",\n    \"droppedVideoFrames\",\n    \"dropzone\",\n    \"dump\",\n    \"duplicate\",\n    \"duration\",\n    \"dvname\",\n    \"dvnum\",\n    \"dx\",\n    \"dy\",\n    \"dynsrc\",\n    \"e\",\n    \"edgeMode\",\n    \"effectAllowed\",\n    \"elapsedTime\",\n    \"elementFromPoint\",\n    \"elements\",\n    \"elevation\",\n    \"ellipse\",\n    \"email\",\n    \"embeds\",\n    \"empty\",\n    \"empty-cells\",\n    \"emptyCells\",\n    \"enable\",\n    \"enableBackground\",\n    \"enableStyleSheetsForSet\",\n    \"enableVertexAttribArray\",\n    \"enabled\",\n    \"enabledPlugin\",\n    \"encode\",\n    \"encodeURI\",\n    \"encodeURIComponent\",\n    \"encoding\",\n    \"encrypt\",\n    \"enctype\",\n    \"end\",\n    \"endContainer\",\n    \"endElement\",\n    \"endElementAt\",\n    \"endOfStream\",\n    \"endOffset\",\n    \"endTime\",\n    \"ended\",\n    \"endsWith\",\n    \"entities\",\n    \"entries\",\n    \"entryType\",\n    \"enumerate\",\n    \"enumerateEditable\",\n    \"error\",\n    \"errorCode\",\n    \"escape\",\n    \"eval\",\n    \"evaluate\",\n    \"event\",\n    \"eventPhase\",\n    \"every\",\n    \"exception\",\n    \"exec\",\n    \"execCommand\",\n    \"execCommandShowHelp\",\n    \"execScript\",\n    \"exitFullscreen\",\n    \"exitPointerLock\",\n    \"exp\",\n    \"expand\",\n    \"expandEntityReferences\",\n    \"expando\",\n    \"expansion\",\n    \"expiryDate\",\n    \"explicitOriginalTarget\",\n    \"expm1\",\n    \"exponent\",\n    \"exponentialRampToValueAtTime\",\n    \"exportKey\",\n    \"extend\",\n    \"extensions\",\n    \"extentNode\",\n    \"extentOffset\",\n    \"external\",\n    \"externalResourcesRequired\",\n    \"extractContents\",\n    \"extractable\",\n    \"f\",\n    \"face\",\n    \"factoryReset\",\n    \"fallback\",\n    \"familyName\",\n    \"farthestViewportElement\",\n    \"fastSeek\",\n    \"fatal\",\n    \"fetch\",\n    \"fetchStart\",\n    \"fftSize\",\n    \"fgColor\",\n    \"fileCreatedDate\",\n    \"fileHandle\",\n    \"fileModifiedDate\",\n    \"fileName\",\n    \"fileSize\",\n    \"fileUpdatedDate\",\n    \"filename\",\n    \"files\",\n    \"fill\",\n    \"fill-opacity\",\n    \"fill-rule\",\n    \"fillOpacity\",\n    \"fillRect\",\n    \"fillRule\",\n    \"fillStyle\",\n    \"fillText\",\n    \"filter\",\n    \"filterResX\",\n    \"filterResY\",\n    \"filterUnits\",\n    \"filters\",\n    \"finally\",\n    \"find\",\n    \"findIndex\",\n    \"findRule\",\n    \"findText\",\n    \"finish\",\n    \"fireEvent\",\n    \"firstChild\",\n    \"firstElementChild\",\n    \"firstPage\",\n    \"fixed\",\n    \"flex\",\n    \"flex-basis\",\n    \"flex-direction\",\n    \"flex-flow\",\n    \"flex-grow\",\n    \"flex-shrink\",\n    \"flex-wrap\",\n    \"flexBasis\",\n    \"flexDirection\",\n    \"flexFlow\",\n    \"flexGrow\",\n    \"flexShrink\",\n    \"flexWrap\",\n    \"flipX\",\n    \"flipY\",\n    \"float\",\n    \"flood-color\",\n    \"flood-opacity\",\n    \"floodColor\",\n    \"floodOpacity\",\n    \"floor\",\n    \"flush\",\n    \"focus\",\n    \"focusNode\",\n    \"focusOffset\",\n    \"font\",\n    \"font-family\",\n    \"font-feature-settings\",\n    \"font-kerning\",\n    \"font-language-override\",\n    \"font-size\",\n    \"font-size-adjust\",\n    \"font-stretch\",\n    \"font-style\",\n    \"font-synthesis\",\n    \"font-variant\",\n    \"font-variant-alternates\",\n    \"font-variant-caps\",\n    \"font-variant-east-asian\",\n    \"font-variant-ligatures\",\n    \"font-variant-numeric\",\n    \"font-variant-position\",\n    \"font-weight\",\n    \"fontFamily\",\n    \"fontFeatureSettings\",\n    \"fontKerning\",\n    \"fontLanguageOverride\",\n    \"fontSize\",\n    \"fontSizeAdjust\",\n    \"fontSmoothingEnabled\",\n    \"fontStretch\",\n    \"fontStyle\",\n    \"fontSynthesis\",\n    \"fontVariant\",\n    \"fontVariantAlternates\",\n    \"fontVariantCaps\",\n    \"fontVariantEastAsian\",\n    \"fontVariantLigatures\",\n    \"fontVariantNumeric\",\n    \"fontVariantPosition\",\n    \"fontWeight\",\n    \"fontcolor\",\n    \"fonts\",\n    \"fontsize\",\n    \"for\",\n    \"forEach\",\n    \"forceRedraw\",\n    \"form\",\n    \"formAction\",\n    \"formEnctype\",\n    \"formMethod\",\n    \"formNoValidate\",\n    \"formTarget\",\n    \"format\",\n    \"formatToParts\",\n    \"forms\",\n    \"forward\",\n    \"fr\",\n    \"frame\",\n    \"frameBorder\",\n    \"frameElement\",\n    \"frameSpacing\",\n    \"framebufferRenderbuffer\",\n    \"framebufferTexture2D\",\n    \"frames\",\n    \"freeSpace\",\n    \"freeze\",\n    \"frequency\",\n    \"frequencyBinCount\",\n    \"from\",\n    \"fromCharCode\",\n    \"fromCodePoint\",\n    \"fromElement\",\n    \"frontFace\",\n    \"fround\",\n    \"fullScreen\",\n    \"fullscreenElement\",\n    \"fullscreenEnabled\",\n    \"fx\",\n    \"fy\",\n    \"gain\",\n    \"gamepad\",\n    \"gamma\",\n    \"genderIdentity\",\n    \"generateKey\",\n    \"generateMipmap\",\n    \"generateRequest\",\n    \"geolocation\",\n    \"gestureObject\",\n    \"get\",\n    \"getActiveAttrib\",\n    \"getActiveUniform\",\n    \"getAdjacentText\",\n    \"getAll\",\n    \"getAllResponseHeaders\",\n    \"getAsFile\",\n    \"getAsString\",\n    \"getAttachedShaders\",\n    \"getAttribLocation\",\n    \"getAttribute\",\n    \"getAttributeNS\",\n    \"getAttributeNode\",\n    \"getAttributeNodeNS\",\n    \"getAudioTracks\",\n    \"getBBox\",\n    \"getBattery\",\n    \"getBlob\",\n    \"getBookmark\",\n    \"getBoundingClientRect\",\n    \"getBufferParameter\",\n    \"getByteFrequencyData\",\n    \"getByteTimeDomainData\",\n    \"getCSSCanvasContext\",\n    \"getCTM\",\n    \"getCandidateWindowClientRect\",\n    \"getChannelData\",\n    \"getCharNumAtPosition\",\n    \"getClientRect\",\n    \"getClientRects\",\n    \"getCompositionAlternatives\",\n    \"getComputedStyle\",\n    \"getComputedTextLength\",\n    \"getConfiguration\",\n    \"getContext\",\n    \"getContextAttributes\",\n    \"getCounterValue\",\n    \"getCueAsHTML\",\n    \"getCueById\",\n    \"getCurrentPosition\",\n    \"getCurrentTime\",\n    \"getData\",\n    \"getDatabaseNames\",\n    \"getDate\",\n    \"getDay\",\n    \"getDefaultComputedStyle\",\n    \"getDestinationInsertionPoints\",\n    \"getDistributedNodes\",\n    \"getEditable\",\n    \"getElementById\",\n    \"getElementsByClassName\",\n    \"getElementsByName\",\n    \"getElementsByTagName\",\n    \"getElementsByTagNameNS\",\n    \"getEnclosureList\",\n    \"getEndPositionOfChar\",\n    \"getEntries\",\n    \"getEntriesByName\",\n    \"getEntriesByType\",\n    \"getError\",\n    \"getExtension\",\n    \"getExtentOfChar\",\n    \"getFeature\",\n    \"getFile\",\n    \"getFloat32\",\n    \"getFloat64\",\n    \"getFloatFrequencyData\",\n    \"getFloatTimeDomainData\",\n    \"getFloatValue\",\n    \"getFramebufferAttachmentParameter\",\n    \"getFrequencyResponse\",\n    \"getFullYear\",\n    \"getGamepads\",\n    \"getHours\",\n    \"getImageData\",\n    \"getInt16\",\n    \"getInt32\",\n    \"getInt8\",\n    \"getIntersectionList\",\n    \"getItem\",\n    \"getItems\",\n    \"getKey\",\n    \"getLineDash\",\n    \"getLocalStreams\",\n    \"getMarks\",\n    \"getMatchedCSSRules\",\n    \"getMeasures\",\n    \"getMetadata\",\n    \"getMilliseconds\",\n    \"getMinutes\",\n    \"getModifierState\",\n    \"getMonth\",\n    \"getNamedItem\",\n    \"getNamedItemNS\",\n    \"getNotifier\",\n    \"getNumberOfChars\",\n    \"getOverrideHistoryNavigationMode\",\n    \"getOverrideStyle\",\n    \"getOwnPropertyDescriptor\",\n    \"getOwnPropertyNames\",\n    \"getOwnPropertySymbols\",\n    \"getParameter\",\n    \"getPathSegAtLength\",\n    \"getPointAtLength\",\n    \"getPreference\",\n    \"getPreferenceDefault\",\n    \"getPresentationAttribute\",\n    \"getPreventDefault\",\n    \"getProgramInfoLog\",\n    \"getProgramParameter\",\n    \"getPropertyCSSValue\",\n    \"getPropertyPriority\",\n    \"getPropertyShorthand\",\n    \"getPropertyValue\",\n    \"getPrototypeOf\",\n    \"getRGBColorValue\",\n    \"getRandomValues\",\n    \"getRangeAt\",\n    \"getReceivers\",\n    \"getRectValue\",\n    \"getRegistration\",\n    \"getRemoteStreams\",\n    \"getRenderbufferParameter\",\n    \"getResponseHeader\",\n    \"getRoot\",\n    \"getRotationOfChar\",\n    \"getSVGDocument\",\n    \"getScreenCTM\",\n    \"getSeconds\",\n    \"getSelection\",\n    \"getSenders\",\n    \"getShaderInfoLog\",\n    \"getShaderParameter\",\n    \"getShaderPrecisionFormat\",\n    \"getShaderSource\",\n    \"getSimpleDuration\",\n    \"getSiteIcons\",\n    \"getSources\",\n    \"getSpeculativeParserUrls\",\n    \"getStartPositionOfChar\",\n    \"getStartTime\",\n    \"getStats\",\n    \"getStorageUpdates\",\n    \"getStreamById\",\n    \"getStringValue\",\n    \"getSubStringLength\",\n    \"getSubscription\",\n    \"getSupportedExtensions\",\n    \"getTexParameter\",\n    \"getTime\",\n    \"getTimezoneOffset\",\n    \"getTotalLength\",\n    \"getTrackById\",\n    \"getTracks\",\n    \"getTransformToElement\",\n    \"getUTCDate\",\n    \"getUTCDay\",\n    \"getUTCFullYear\",\n    \"getUTCHours\",\n    \"getUTCMilliseconds\",\n    \"getUTCMinutes\",\n    \"getUTCMonth\",\n    \"getUTCSeconds\",\n    \"getUint16\",\n    \"getUint32\",\n    \"getUint8\",\n    \"getUniform\",\n    \"getUniformLocation\",\n    \"getUserMedia\",\n    \"getValues\",\n    \"getVarDate\",\n    \"getVariableValue\",\n    \"getVertexAttrib\",\n    \"getVertexAttribOffset\",\n    \"getVideoPlaybackQuality\",\n    \"getVideoTracks\",\n    \"getWakeLockState\",\n    \"getYear\",\n    \"givenName\",\n    \"global\",\n    \"globalAlpha\",\n    \"globalCompositeOperation\",\n    \"glyphOrientationHorizontal\",\n    \"glyphOrientationVertical\",\n    \"glyphRef\",\n    \"go\",\n    \"gradientTransform\",\n    \"gradientUnits\",\n    \"grammars\",\n    \"green\",\n    \"group\",\n    \"groupCollapsed\",\n    \"groupEnd\",\n    \"hardwareConcurrency\",\n    \"has\",\n    \"hasAttribute\",\n    \"hasAttributeNS\",\n    \"hasAttributes\",\n    \"hasChildNodes\",\n    \"hasComposition\",\n    \"hasExtension\",\n    \"hasFeature\",\n    \"hasFocus\",\n    \"hasLayout\",\n    \"hasOwnProperty\",\n    \"hash\",\n    \"head\",\n    \"headers\",\n    \"heading\",\n    \"height\",\n    \"hidden\",\n    \"hide\",\n    \"hideFocus\",\n    \"high\",\n    \"hint\",\n    \"history\",\n    \"honorificPrefix\",\n    \"honorificSuffix\",\n    \"horizontalOverflow\",\n    \"host\",\n    \"hostname\",\n    \"href\",\n    \"hreflang\",\n    \"hspace\",\n    \"html5TagCheckInerface\",\n    \"htmlFor\",\n    \"htmlText\",\n    \"httpEquiv\",\n    \"hwTimestamp\",\n    \"hypot\",\n    \"iccId\",\n    \"iceConnectionState\",\n    \"iceGatheringState\",\n    \"icon\",\n    \"id\",\n    \"identifier\",\n    \"identity\",\n    \"ignoreBOM\",\n    \"ignoreCase\",\n    \"image-orientation\",\n    \"image-rendering\",\n    \"imageOrientation\",\n    \"imageRendering\",\n    \"images\",\n    \"ime-mode\",\n    \"imeMode\",\n    \"implementation\",\n    \"importKey\",\n    \"importNode\",\n    \"importStylesheet\",\n    \"imports\",\n    \"impp\",\n    \"imul\",\n    \"in1\",\n    \"in2\",\n    \"inBandMetadataTrackDispatchType\",\n    \"inRange\",\n    \"includes\",\n    \"incremental\",\n    \"indeterminate\",\n    \"index\",\n    \"indexNames\",\n    \"indexOf\",\n    \"indexedDB\",\n    \"inertiaDestinationX\",\n    \"inertiaDestinationY\",\n    \"info\",\n    \"init\",\n    \"initAnimationEvent\",\n    \"initBeforeLoadEvent\",\n    \"initClipboardEvent\",\n    \"initCloseEvent\",\n    \"initCommandEvent\",\n    \"initCompositionEvent\",\n    \"initCustomEvent\",\n    \"initData\",\n    \"initDeviceMotionEvent\",\n    \"initDeviceOrientationEvent\",\n    \"initDragEvent\",\n    \"initErrorEvent\",\n    \"initEvent\",\n    \"initFocusEvent\",\n    \"initGestureEvent\",\n    \"initHashChangeEvent\",\n    \"initKeyEvent\",\n    \"initKeyboardEvent\",\n    \"initMSManipulationEvent\",\n    \"initMessageEvent\",\n    \"initMouseEvent\",\n    \"initMouseScrollEvent\",\n    \"initMouseWheelEvent\",\n    \"initMutationEvent\",\n    \"initNSMouseEvent\",\n    \"initOverflowEvent\",\n    \"initPageEvent\",\n    \"initPageTransitionEvent\",\n    \"initPointerEvent\",\n    \"initPopStateEvent\",\n    \"initProgressEvent\",\n    \"initScrollAreaEvent\",\n    \"initSimpleGestureEvent\",\n    \"initStorageEvent\",\n    \"initTextEvent\",\n    \"initTimeEvent\",\n    \"initTouchEvent\",\n    \"initTransitionEvent\",\n    \"initUIEvent\",\n    \"initWebKitAnimationEvent\",\n    \"initWebKitTransitionEvent\",\n    \"initWebKitWheelEvent\",\n    \"initWheelEvent\",\n    \"initialTime\",\n    \"initialize\",\n    \"initiatorType\",\n    \"inner\",\n    \"innerHTML\",\n    \"innerHeight\",\n    \"innerText\",\n    \"innerWidth\",\n    \"input\",\n    \"inputBuffer\",\n    \"inputEncoding\",\n    \"inputMethod\",\n    \"insertAdjacentElement\",\n    \"insertAdjacentHTML\",\n    \"insertAdjacentText\",\n    \"insertBefore\",\n    \"insertCell\",\n    \"insertData\",\n    \"insertItemBefore\",\n    \"insertNode\",\n    \"insertRow\",\n    \"insertRule\",\n    \"instanceRoot\",\n    \"intercept\",\n    \"interimResults\",\n    \"internalSubset\",\n    \"intersectsNode\",\n    \"interval\",\n    \"invalidIteratorState\",\n    \"inverse\",\n    \"invertSelf\",\n    \"is\",\n    \"is2D\",\n    \"isAlternate\",\n    \"isArray\",\n    \"isBingCurrentSearchDefault\",\n    \"isBuffer\",\n    \"isCandidateWindowVisible\",\n    \"isChar\",\n    \"isCollapsed\",\n    \"isComposing\",\n    \"isContentEditable\",\n    \"isContentHandlerRegistered\",\n    \"isContextLost\",\n    \"isDefaultNamespace\",\n    \"isDisabled\",\n    \"isEnabled\",\n    \"isEqual\",\n    \"isEqualNode\",\n    \"isExtensible\",\n    \"isFinite\",\n    \"isFramebuffer\",\n    \"isFrozen\",\n    \"isGenerator\",\n    \"isId\",\n    \"isInjected\",\n    \"isInteger\",\n    \"isMap\",\n    \"isMultiLine\",\n    \"isNaN\",\n    \"isOpen\",\n    \"isPointInFill\",\n    \"isPointInPath\",\n    \"isPointInRange\",\n    \"isPointInStroke\",\n    \"isPrefAlternate\",\n    \"isPrimary\",\n    \"isProgram\",\n    \"isPropertyImplicit\",\n    \"isProtocolHandlerRegistered\",\n    \"isPrototypeOf\",\n    \"isRenderbuffer\",\n    \"isSafeInteger\",\n    \"isSameNode\",\n    \"isSealed\",\n    \"isShader\",\n    \"isSupported\",\n    \"isTextEdit\",\n    \"isTexture\",\n    \"isTrusted\",\n    \"isTypeSupported\",\n    \"isView\",\n    \"isolation\",\n    \"italics\",\n    \"item\",\n    \"itemId\",\n    \"itemProp\",\n    \"itemRef\",\n    \"itemScope\",\n    \"itemType\",\n    \"itemValue\",\n    \"iterateNext\",\n    \"iterator\",\n    \"javaEnabled\",\n    \"jobTitle\",\n    \"join\",\n    \"json\",\n    \"justify-content\",\n    \"justifyContent\",\n    \"k1\",\n    \"k2\",\n    \"k3\",\n    \"k4\",\n    \"kernelMatrix\",\n    \"kernelUnitLengthX\",\n    \"kernelUnitLengthY\",\n    \"kerning\",\n    \"key\",\n    \"keyCode\",\n    \"keyFor\",\n    \"keyIdentifier\",\n    \"keyLightEnabled\",\n    \"keyLocation\",\n    \"keyPath\",\n    \"keySystem\",\n    \"keyText\",\n    \"keyUsage\",\n    \"keys\",\n    \"keytype\",\n    \"kind\",\n    \"knee\",\n    \"label\",\n    \"labels\",\n    \"lang\",\n    \"language\",\n    \"languages\",\n    \"largeArcFlag\",\n    \"lastChild\",\n    \"lastElementChild\",\n    \"lastEventId\",\n    \"lastIndex\",\n    \"lastIndexOf\",\n    \"lastMatch\",\n    \"lastMessageSubject\",\n    \"lastMessageType\",\n    \"lastModified\",\n    \"lastModifiedDate\",\n    \"lastPage\",\n    \"lastParen\",\n    \"lastState\",\n    \"lastStyleSheetSet\",\n    \"latitude\",\n    \"layerX\",\n    \"layerY\",\n    \"layoutFlow\",\n    \"layoutGrid\",\n    \"layoutGridChar\",\n    \"layoutGridLine\",\n    \"layoutGridMode\",\n    \"layoutGridType\",\n    \"lbound\",\n    \"left\",\n    \"leftContext\",\n    \"leftMargin\",\n    \"length\",\n    \"lengthAdjust\",\n    \"lengthComputable\",\n    \"letter-spacing\",\n    \"letterSpacing\",\n    \"level\",\n    \"lighting-color\",\n    \"lightingColor\",\n    \"limitingConeAngle\",\n    \"line\",\n    \"line-height\",\n    \"lineAlign\",\n    \"lineBreak\",\n    \"lineCap\",\n    \"lineDashOffset\",\n    \"lineHeight\",\n    \"lineJoin\",\n    \"lineNumber\",\n    \"lineTo\",\n    \"lineWidth\",\n    \"linearRampToValueAtTime\",\n    \"lineno\",\n    \"link\",\n    \"linkColor\",\n    \"linkProgram\",\n    \"links\",\n    \"list\",\n    \"list-style\",\n    \"list-style-image\",\n    \"list-style-position\",\n    \"list-style-type\",\n    \"listStyle\",\n    \"listStyleImage\",\n    \"listStylePosition\",\n    \"listStyleType\",\n    \"listener\",\n    \"load\",\n    \"loadEventEnd\",\n    \"loadEventStart\",\n    \"loadTimes\",\n    \"loaded\",\n    \"localDescription\",\n    \"localName\",\n    \"localStorage\",\n    \"locale\",\n    \"localeCompare\",\n    \"location\",\n    \"locationbar\",\n    \"lock\",\n    \"lockedFile\",\n    \"log\",\n    \"log10\",\n    \"log1p\",\n    \"log2\",\n    \"logicalXDPI\",\n    \"logicalYDPI\",\n    \"longDesc\",\n    \"longitude\",\n    \"lookupNamespaceURI\",\n    \"lookupPrefix\",\n    \"loop\",\n    \"loopEnd\",\n    \"loopStart\",\n    \"looping\",\n    \"low\",\n    \"lower\",\n    \"lowerBound\",\n    \"lowerOpen\",\n    \"lowsrc\",\n    \"m11\",\n    \"m12\",\n    \"m13\",\n    \"m14\",\n    \"m21\",\n    \"m22\",\n    \"m23\",\n    \"m24\",\n    \"m31\",\n    \"m32\",\n    \"m33\",\n    \"m34\",\n    \"m41\",\n    \"m42\",\n    \"m43\",\n    \"m44\",\n    \"manifest\",\n    \"map\",\n    \"mapping\",\n    \"margin\",\n    \"margin-bottom\",\n    \"margin-left\",\n    \"margin-right\",\n    \"margin-top\",\n    \"marginBottom\",\n    \"marginHeight\",\n    \"marginLeft\",\n    \"marginRight\",\n    \"marginTop\",\n    \"marginWidth\",\n    \"mark\",\n    \"marker\",\n    \"marker-end\",\n    \"marker-mid\",\n    \"marker-offset\",\n    \"marker-start\",\n    \"markerEnd\",\n    \"markerHeight\",\n    \"markerMid\",\n    \"markerOffset\",\n    \"markerStart\",\n    \"markerUnits\",\n    \"markerWidth\",\n    \"marks\",\n    \"mask\",\n    \"mask-type\",\n    \"maskContentUnits\",\n    \"maskType\",\n    \"maskUnits\",\n    \"match\",\n    \"matchMedia\",\n    \"matchMedium\",\n    \"matches\",\n    \"matrix\",\n    \"matrixTransform\",\n    \"max\",\n    \"max-height\",\n    \"max-width\",\n    \"maxAlternatives\",\n    \"maxChannelCount\",\n    \"maxConnectionsPerServer\",\n    \"maxDecibels\",\n    \"maxDistance\",\n    \"maxHeight\",\n    \"maxLength\",\n    \"maxTouchPoints\",\n    \"maxValue\",\n    \"maxWidth\",\n    \"measure\",\n    \"measureText\",\n    \"media\",\n    \"mediaCapabilities\",\n    \"mediaDevices\",\n    \"mediaElement\",\n    \"mediaGroup\",\n    \"mediaKeys\",\n    \"mediaText\",\n    \"meetOrSlice\",\n    \"memory\",\n    \"menubar\",\n    \"mergeAttributes\",\n    \"message\",\n    \"messageClass\",\n    \"messageHandlers\",\n    \"metaKey\",\n    \"method\",\n    \"mimeType\",\n    \"mimeTypes\",\n    \"min\",\n    \"min-height\",\n    \"min-width\",\n    \"minDecibels\",\n    \"minHeight\",\n    \"minValue\",\n    \"minWidth\",\n    \"miterLimit\",\n    \"mix-blend-mode\",\n    \"mixBlendMode\",\n    \"mode\",\n    \"modify\",\n    \"mount\",\n    \"move\",\n    \"moveBy\",\n    \"moveEnd\",\n    \"moveFirst\",\n    \"moveFocusDown\",\n    \"moveFocusLeft\",\n    \"moveFocusRight\",\n    \"moveFocusUp\",\n    \"moveNext\",\n    \"moveRow\",\n    \"moveStart\",\n    \"moveTo\",\n    \"moveToBookmark\",\n    \"moveToElementText\",\n    \"moveToPoint\",\n    \"mozAdd\",\n    \"mozAnimationStartTime\",\n    \"mozAnon\",\n    \"mozApps\",\n    \"mozAudioCaptured\",\n    \"mozAudioChannelType\",\n    \"mozAutoplayEnabled\",\n    \"mozCancelAnimationFrame\",\n    \"mozCancelFullScreen\",\n    \"mozCancelRequestAnimationFrame\",\n    \"mozCaptureStream\",\n    \"mozCaptureStreamUntilEnded\",\n    \"mozClearDataAt\",\n    \"mozContact\",\n    \"mozContacts\",\n    \"mozCreateFileHandle\",\n    \"mozCurrentTransform\",\n    \"mozCurrentTransformInverse\",\n    \"mozCursor\",\n    \"mozDash\",\n    \"mozDashOffset\",\n    \"mozDecodedFrames\",\n    \"mozExitPointerLock\",\n    \"mozFillRule\",\n    \"mozFragmentEnd\",\n    \"mozFrameDelay\",\n    \"mozFullScreen\",\n    \"mozFullScreenElement\",\n    \"mozFullScreenEnabled\",\n    \"mozGetAll\",\n    \"mozGetAllKeys\",\n    \"mozGetAsFile\",\n    \"mozGetDataAt\",\n    \"mozGetMetadata\",\n    \"mozGetUserMedia\",\n    \"mozHasAudio\",\n    \"mozHasItem\",\n    \"mozHidden\",\n    \"mozImageSmoothingEnabled\",\n    \"mozIndexedDB\",\n    \"mozInnerScreenX\",\n    \"mozInnerScreenY\",\n    \"mozInputSource\",\n    \"mozIsTextField\",\n    \"mozItem\",\n    \"mozItemCount\",\n    \"mozItems\",\n    \"mozLength\",\n    \"mozLockOrientation\",\n    \"mozMatchesSelector\",\n    \"mozMovementX\",\n    \"mozMovementY\",\n    \"mozOpaque\",\n    \"mozOrientation\",\n    \"mozPaintCount\",\n    \"mozPaintedFrames\",\n    \"mozParsedFrames\",\n    \"mozPay\",\n    \"mozPointerLockElement\",\n    \"mozPresentedFrames\",\n    \"mozPreservesPitch\",\n    \"mozPressure\",\n    \"mozPrintCallback\",\n    \"mozRTCIceCandidate\",\n    \"mozRTCPeerConnection\",\n    \"mozRTCSessionDescription\",\n    \"mozRemove\",\n    \"mozRequestAnimationFrame\",\n    \"mozRequestFullScreen\",\n    \"mozRequestPointerLock\",\n    \"mozSetDataAt\",\n    \"mozSetImageElement\",\n    \"mozSourceNode\",\n    \"mozSrcObject\",\n    \"mozSystem\",\n    \"mozTCPSocket\",\n    \"mozTextStyle\",\n    \"mozTypesAt\",\n    \"mozUnlockOrientation\",\n    \"mozUserCancelled\",\n    \"mozVisibilityState\",\n    \"msAnimation\",\n    \"msAnimationDelay\",\n    \"msAnimationDirection\",\n    \"msAnimationDuration\",\n    \"msAnimationFillMode\",\n    \"msAnimationIterationCount\",\n    \"msAnimationName\",\n    \"msAnimationPlayState\",\n    \"msAnimationStartTime\",\n    \"msAnimationTimingFunction\",\n    \"msBackfaceVisibility\",\n    \"msBlockProgression\",\n    \"msCSSOMElementFloatMetrics\",\n    \"msCaching\",\n    \"msCachingEnabled\",\n    \"msCancelRequestAnimationFrame\",\n    \"msCapsLockWarningOff\",\n    \"msClearImmediate\",\n    \"msClose\",\n    \"msContentZoomChaining\",\n    \"msContentZoomFactor\",\n    \"msContentZoomLimit\",\n    \"msContentZoomLimitMax\",\n    \"msContentZoomLimitMin\",\n    \"msContentZoomSnap\",\n    \"msContentZoomSnapPoints\",\n    \"msContentZoomSnapType\",\n    \"msContentZooming\",\n    \"msConvertURL\",\n    \"msCrypto\",\n    \"msDoNotTrack\",\n    \"msElementsFromPoint\",\n    \"msElementsFromRect\",\n    \"msExitFullscreen\",\n    \"msExtendedCode\",\n    \"msFillRule\",\n    \"msFirstPaint\",\n    \"msFlex\",\n    \"msFlexAlign\",\n    \"msFlexDirection\",\n    \"msFlexFlow\",\n    \"msFlexItemAlign\",\n    \"msFlexLinePack\",\n    \"msFlexNegative\",\n    \"msFlexOrder\",\n    \"msFlexPack\",\n    \"msFlexPositive\",\n    \"msFlexPreferredSize\",\n    \"msFlexWrap\",\n    \"msFlowFrom\",\n    \"msFlowInto\",\n    \"msFontFeatureSettings\",\n    \"msFullscreenElement\",\n    \"msFullscreenEnabled\",\n    \"msGetInputContext\",\n    \"msGetRegionContent\",\n    \"msGetUntransformedBounds\",\n    \"msGraphicsTrustStatus\",\n    \"msGridColumn\",\n    \"msGridColumnAlign\",\n    \"msGridColumnSpan\",\n    \"msGridColumns\",\n    \"msGridRow\",\n    \"msGridRowAlign\",\n    \"msGridRowSpan\",\n    \"msGridRows\",\n    \"msHidden\",\n    \"msHighContrastAdjust\",\n    \"msHyphenateLimitChars\",\n    \"msHyphenateLimitLines\",\n    \"msHyphenateLimitZone\",\n    \"msHyphens\",\n    \"msImageSmoothingEnabled\",\n    \"msImeAlign\",\n    \"msIndexedDB\",\n    \"msInterpolationMode\",\n    \"msIsStaticHTML\",\n    \"msKeySystem\",\n    \"msKeys\",\n    \"msLaunchUri\",\n    \"msLockOrientation\",\n    \"msManipulationViewsEnabled\",\n    \"msMatchMedia\",\n    \"msMatchesSelector\",\n    \"msMaxTouchPoints\",\n    \"msOrientation\",\n    \"msOverflowStyle\",\n    \"msPerspective\",\n    \"msPerspectiveOrigin\",\n    \"msPlayToDisabled\",\n    \"msPlayToPreferredSourceUri\",\n    \"msPlayToPrimary\",\n    \"msPointerEnabled\",\n    \"msRegionOverflow\",\n    \"msReleasePointerCapture\",\n    \"msRequestAnimationFrame\",\n    \"msRequestFullscreen\",\n    \"msSaveBlob\",\n    \"msSaveOrOpenBlob\",\n    \"msScrollChaining\",\n    \"msScrollLimit\",\n    \"msScrollLimitXMax\",\n    \"msScrollLimitXMin\",\n    \"msScrollLimitYMax\",\n    \"msScrollLimitYMin\",\n    \"msScrollRails\",\n    \"msScrollSnapPointsX\",\n    \"msScrollSnapPointsY\",\n    \"msScrollSnapType\",\n    \"msScrollSnapX\",\n    \"msScrollSnapY\",\n    \"msScrollTranslation\",\n    \"msSetImmediate\",\n    \"msSetMediaKeys\",\n    \"msSetPointerCapture\",\n    \"msTextCombineHorizontal\",\n    \"msTextSizeAdjust\",\n    \"msToBlob\",\n    \"msTouchAction\",\n    \"msTouchSelect\",\n    \"msTraceAsyncCallbackCompleted\",\n    \"msTraceAsyncCallbackStarting\",\n    \"msTraceAsyncOperationCompleted\",\n    \"msTraceAsyncOperationStarting\",\n    \"msTransform\",\n    \"msTransformOrigin\",\n    \"msTransformStyle\",\n    \"msTransition\",\n    \"msTransitionDelay\",\n    \"msTransitionDuration\",\n    \"msTransitionProperty\",\n    \"msTransitionTimingFunction\",\n    \"msUnlockOrientation\",\n    \"msUpdateAsyncCallbackRelation\",\n    \"msUserSelect\",\n    \"msVisibilityState\",\n    \"msWrapFlow\",\n    \"msWrapMargin\",\n    \"msWrapThrough\",\n    \"msWriteProfilerMark\",\n    \"msZoom\",\n    \"msZoomTo\",\n    \"mt\",\n    \"multiEntry\",\n    \"multiSelectionObj\",\n    \"multiline\",\n    \"multiple\",\n    \"multiply\",\n    \"multiplySelf\",\n    \"mutableFile\",\n    \"muted\",\n    \"n\",\n    \"name\",\n    \"nameProp\",\n    \"namedItem\",\n    \"namedRecordset\",\n    \"names\",\n    \"namespaceURI\",\n    \"namespaces\",\n    \"naturalHeight\",\n    \"naturalWidth\",\n    \"navigate\",\n    \"navigation\",\n    \"navigationMode\",\n    \"navigationStart\",\n    \"navigator\",\n    \"near\",\n    \"nearestViewportElement\",\n    \"negative\",\n    \"netscape\",\n    \"networkState\",\n    \"newScale\",\n    \"newTranslate\",\n    \"newURL\",\n    \"newValue\",\n    \"newValueSpecifiedUnits\",\n    \"newVersion\",\n    \"newhome\",\n    \"next\",\n    \"nextElementSibling\",\n    \"nextNode\",\n    \"nextPage\",\n    \"nextSibling\",\n    \"nickname\",\n    \"noHref\",\n    \"noResize\",\n    \"noShade\",\n    \"noValidate\",\n    \"noWrap\",\n    \"nodeName\",\n    \"nodeType\",\n    \"nodeValue\",\n    \"normalize\",\n    \"normalizedPathSegList\",\n    \"notationName\",\n    \"notations\",\n    \"note\",\n    \"noteGrainOn\",\n    \"noteOff\",\n    \"noteOn\",\n    \"now\",\n    \"numOctaves\",\n    \"number\",\n    \"numberOfChannels\",\n    \"numberOfInputs\",\n    \"numberOfItems\",\n    \"numberOfOutputs\",\n    \"numberValue\",\n    \"oMatchesSelector\",\n    \"object\",\n    \"object-fit\",\n    \"object-position\",\n    \"objectFit\",\n    \"objectPosition\",\n    \"objectStore\",\n    \"objectStoreNames\",\n    \"observe\",\n    \"of\",\n    \"offscreenBuffering\",\n    \"offset\",\n    \"offsetHeight\",\n    \"offsetLeft\",\n    \"offsetNode\",\n    \"offsetParent\",\n    \"offsetTop\",\n    \"offsetWidth\",\n    \"offsetX\",\n    \"offsetY\",\n    \"ok\",\n    \"oldURL\",\n    \"oldValue\",\n    \"oldVersion\",\n    \"olderShadowRoot\",\n    \"onLine\",\n    \"onabort\",\n    \"onactivate\",\n    \"onactive\",\n    \"onaddstream\",\n    \"onaddtrack\",\n    \"onafterprint\",\n    \"onafterscriptexecute\",\n    \"onafterupdate\",\n    \"onaudioend\",\n    \"onaudioprocess\",\n    \"onaudiostart\",\n    \"onautocomplete\",\n    \"onautocompleteerror\",\n    \"onbeforeactivate\",\n    \"onbeforecopy\",\n    \"onbeforecut\",\n    \"onbeforedeactivate\",\n    \"onbeforeeditfocus\",\n    \"onbeforepaste\",\n    \"onbeforeprint\",\n    \"onbeforescriptexecute\",\n    \"onbeforeunload\",\n    \"onbeforeupdate\",\n    \"onblocked\",\n    \"onblur\",\n    \"onbounce\",\n    \"onboundary\",\n    \"oncached\",\n    \"oncancel\",\n    \"oncandidatewindowhide\",\n    \"oncandidatewindowshow\",\n    \"oncandidatewindowupdate\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"once\",\n    \"oncellchange\",\n    \"onchange\",\n    \"onchargingchange\",\n    \"onchargingtimechange\",\n    \"onchecking\",\n    \"onclick\",\n    \"onclose\",\n    \"oncompassneedscalibration\",\n    \"oncomplete\",\n    \"oncontextmenu\",\n    \"oncontrolselect\",\n    \"oncopy\",\n    \"oncuechange\",\n    \"oncut\",\n    \"ondataavailable\",\n    \"ondatachannel\",\n    \"ondatasetchanged\",\n    \"ondatasetcomplete\",\n    \"ondblclick\",\n    \"ondeactivate\",\n    \"ondevicelight\",\n    \"ondevicemotion\",\n    \"ondeviceorientation\",\n    \"ondeviceproximity\",\n    \"ondischargingtimechange\",\n    \"ondisplay\",\n    \"ondownloading\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onencrypted\",\n    \"onend\",\n    \"onended\",\n    \"onenter\",\n    \"onerror\",\n    \"onerrorupdate\",\n    \"onexit\",\n    \"onfilterchange\",\n    \"onfinish\",\n    \"onfocus\",\n    \"onfocusin\",\n    \"onfocusout\",\n    \"onfullscreenchange\",\n    \"onfullscreenerror\",\n    \"ongesturechange\",\n    \"ongestureend\",\n    \"ongesturestart\",\n    \"ongotpointercapture\",\n    \"onhashchange\",\n    \"onhelp\",\n    \"onicecandidate\",\n    \"oniceconnectionstatechange\",\n    \"oninactive\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onlanguagechange\",\n    \"onlayoutcomplete\",\n    \"onlevelchange\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadend\",\n    \"onloadstart\",\n    \"onlosecapture\",\n    \"onlostpointercapture\",\n    \"only\",\n    \"onmark\",\n    \"onmessage\",\n    \"onmousedown\",\n    \"onmouseenter\",\n    \"onmouseleave\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onmove\",\n    \"onmoveend\",\n    \"onmovestart\",\n    \"onmozfullscreenchange\",\n    \"onmozfullscreenerror\",\n    \"onmozorientationchange\",\n    \"onmozpointerlockchange\",\n    \"onmozpointerlockerror\",\n    \"onmscontentzoom\",\n    \"onmsfullscreenchange\",\n    \"onmsfullscreenerror\",\n    \"onmsgesturechange\",\n    \"onmsgesturedoubletap\",\n    \"onmsgestureend\",\n    \"onmsgesturehold\",\n    \"onmsgesturestart\",\n    \"onmsgesturetap\",\n    \"onmsgotpointercapture\",\n    \"onmsinertiastart\",\n    \"onmslostpointercapture\",\n    \"onmsmanipulationstatechanged\",\n    \"onmsneedkey\",\n    \"onmsorientationchange\",\n    \"onmspointercancel\",\n    \"onmspointerdown\",\n    \"onmspointerenter\",\n    \"onmspointerhover\",\n    \"onmspointerleave\",\n    \"onmspointermove\",\n    \"onmspointerout\",\n    \"onmspointerover\",\n    \"onmspointerup\",\n    \"onmssitemodejumplistitemremoved\",\n    \"onmsthumbnailclick\",\n    \"onnegotiationneeded\",\n    \"onnomatch\",\n    \"onnoupdate\",\n    \"onobsolete\",\n    \"onoffline\",\n    \"ononline\",\n    \"onopen\",\n    \"onorientationchange\",\n    \"onpagechange\",\n    \"onpagehide\",\n    \"onpageshow\",\n    \"onpaste\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onpluginstreamstart\",\n    \"onpointercancel\",\n    \"onpointerdown\",\n    \"onpointerenter\",\n    \"onpointerleave\",\n    \"onpointerlockchange\",\n    \"onpointerlockerror\",\n    \"onpointermove\",\n    \"onpointerout\",\n    \"onpointerover\",\n    \"onpointerup\",\n    \"onpopstate\",\n    \"onprogress\",\n    \"onpropertychange\",\n    \"onratechange\",\n    \"onreadystatechange\",\n    \"onremovestream\",\n    \"onremovetrack\",\n    \"onreset\",\n    \"onresize\",\n    \"onresizeend\",\n    \"onresizestart\",\n    \"onresourcetimingbufferfull\",\n    \"onresult\",\n    \"onresume\",\n    \"onrowenter\",\n    \"onrowexit\",\n    \"onrowsdelete\",\n    \"onrowsinserted\",\n    \"onscroll\",\n    \"onsearch\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onselectionchange\",\n    \"onselectstart\",\n    \"onshow\",\n    \"onsignalingstatechange\",\n    \"onsoundend\",\n    \"onsoundstart\",\n    \"onspeechend\",\n    \"onspeechstart\",\n    \"onstalled\",\n    \"onstart\",\n    \"onstatechange\",\n    \"onstop\",\n    \"onstorage\",\n    \"onstoragecommit\",\n    \"onsubmit\",\n    \"onsuccess\",\n    \"onsuspend\",\n    \"ontextinput\",\n    \"ontimeout\",\n    \"ontimeupdate\",\n    \"ontoggle\",\n    \"ontouchcancel\",\n    \"ontouchend\",\n    \"ontouchmove\",\n    \"ontouchstart\",\n    \"ontransitionend\",\n    \"onunload\",\n    \"onupdateready\",\n    \"onupgradeneeded\",\n    \"onuserproximity\",\n    \"onversionchange\",\n    \"onvoiceschanged\",\n    \"onvolumechange\",\n    \"onwaiting\",\n    \"onwarning\",\n    \"onwebkitanimationend\",\n    \"onwebkitanimationiteration\",\n    \"onwebkitanimationstart\",\n    \"onwebkitcurrentplaybacktargetiswirelesschanged\",\n    \"onwebkitfullscreenchange\",\n    \"onwebkitfullscreenerror\",\n    \"onwebkitkeyadded\",\n    \"onwebkitkeyerror\",\n    \"onwebkitkeymessage\",\n    \"onwebkitneedkey\",\n    \"onwebkitorientationchange\",\n    \"onwebkitplaybacktargetavailabilitychanged\",\n    \"onwebkitpointerlockchange\",\n    \"onwebkitpointerlockerror\",\n    \"onwebkitresourcetimingbufferfull\",\n    \"onwebkittransitionend\",\n    \"onwheel\",\n    \"onzoom\",\n    \"opacity\",\n    \"open\",\n    \"openCursor\",\n    \"openDatabase\",\n    \"openKeyCursor\",\n    \"opener\",\n    \"opera\",\n    \"operationType\",\n    \"operator\",\n    \"opr\",\n    \"optimum\",\n    \"options\",\n    \"order\",\n    \"orderX\",\n    \"orderY\",\n    \"ordered\",\n    \"org\",\n    \"orient\",\n    \"orientAngle\",\n    \"orientType\",\n    \"orientation\",\n    \"origin\",\n    \"originalTarget\",\n    \"orphans\",\n    \"oscpu\",\n    \"outerHTML\",\n    \"outerHeight\",\n    \"outerText\",\n    \"outerWidth\",\n    \"outline\",\n    \"outline-color\",\n    \"outline-offset\",\n    \"outline-style\",\n    \"outline-width\",\n    \"outlineColor\",\n    \"outlineOffset\",\n    \"outlineStyle\",\n    \"outlineWidth\",\n    \"outputBuffer\",\n    \"overflow\",\n    \"overflow-x\",\n    \"overflow-y\",\n    \"overflowX\",\n    \"overflowY\",\n    \"overrideMimeType\",\n    \"oversample\",\n    \"ownerDocument\",\n    \"ownerElement\",\n    \"ownerNode\",\n    \"ownerRule\",\n    \"ownerSVGElement\",\n    \"owningElement\",\n    \"p1\",\n    \"p2\",\n    \"p3\",\n    \"p4\",\n    \"pad\",\n    \"padding\",\n    \"padding-bottom\",\n    \"padding-left\",\n    \"padding-right\",\n    \"padding-top\",\n    \"paddingBottom\",\n    \"paddingLeft\",\n    \"paddingRight\",\n    \"paddingTop\",\n    \"page\",\n    \"page-break-after\",\n    \"page-break-before\",\n    \"page-break-inside\",\n    \"pageBreakAfter\",\n    \"pageBreakBefore\",\n    \"pageBreakInside\",\n    \"pageCount\",\n    \"pageX\",\n    \"pageXOffset\",\n    \"pageY\",\n    \"pageYOffset\",\n    \"pages\",\n    \"paint-order\",\n    \"paintOrder\",\n    \"paintRequests\",\n    \"paintType\",\n    \"palette\",\n    \"panningModel\",\n    \"parent\",\n    \"parentElement\",\n    \"parentNode\",\n    \"parentRule\",\n    \"parentStyleSheet\",\n    \"parentTextEdit\",\n    \"parentWindow\",\n    \"parse\",\n    \"parseFloat\",\n    \"parseFromString\",\n    \"parseInt\",\n    \"participants\",\n    \"passive\",\n    \"password\",\n    \"pasteHTML\",\n    \"path\",\n    \"pathLength\",\n    \"pathSegList\",\n    \"pathSegType\",\n    \"pathSegTypeAsLetter\",\n    \"pathname\",\n    \"pattern\",\n    \"patternContentUnits\",\n    \"patternMismatch\",\n    \"patternTransform\",\n    \"patternUnits\",\n    \"pause\",\n    \"pauseAnimations\",\n    \"pauseOnExit\",\n    \"paused\",\n    \"pending\",\n    \"performance\",\n    \"permission\",\n    \"persisted\",\n    \"personalbar\",\n    \"perspective\",\n    \"perspective-origin\",\n    \"perspectiveOrigin\",\n    \"phoneticFamilyName\",\n    \"phoneticGivenName\",\n    \"photo\",\n    \"ping\",\n    \"pitch\",\n    \"pixelBottom\",\n    \"pixelDepth\",\n    \"pixelHeight\",\n    \"pixelLeft\",\n    \"pixelRight\",\n    \"pixelStorei\",\n    \"pixelTop\",\n    \"pixelUnitToMillimeterX\",\n    \"pixelUnitToMillimeterY\",\n    \"pixelWidth\",\n    \"placeholder\",\n    \"platform\",\n    \"play\",\n    \"playbackRate\",\n    \"playbackState\",\n    \"playbackTime\",\n    \"played\",\n    \"plugins\",\n    \"pluginspage\",\n    \"pname\",\n    \"pointer-events\",\n    \"pointerBeforeReferenceNode\",\n    \"pointerEnabled\",\n    \"pointerEvents\",\n    \"pointerId\",\n    \"pointerLockElement\",\n    \"pointerType\",\n    \"points\",\n    \"pointsAtX\",\n    \"pointsAtY\",\n    \"pointsAtZ\",\n    \"polygonOffset\",\n    \"pop\",\n    \"popupWindowFeatures\",\n    \"popupWindowName\",\n    \"popupWindowURI\",\n    \"port\",\n    \"port1\",\n    \"port2\",\n    \"ports\",\n    \"posBottom\",\n    \"posHeight\",\n    \"posLeft\",\n    \"posRight\",\n    \"posTop\",\n    \"posWidth\",\n    \"position\",\n    \"positionAlign\",\n    \"postError\",\n    \"postMessage\",\n    \"poster\",\n    \"pow\",\n    \"powerOff\",\n    \"preMultiplySelf\",\n    \"precision\",\n    \"preferredStyleSheetSet\",\n    \"preferredStylesheetSet\",\n    \"prefix\",\n    \"preload\",\n    \"prepend\",\n    \"preserveAlpha\",\n    \"preserveAspectRatio\",\n    \"preserveAspectRatioString\",\n    \"pressed\",\n    \"pressure\",\n    \"prevValue\",\n    \"preventDefault\",\n    \"preventExtensions\",\n    \"previousElementSibling\",\n    \"previousNode\",\n    \"previousPage\",\n    \"previousScale\",\n    \"previousSibling\",\n    \"previousTranslate\",\n    \"primaryKey\",\n    \"primitiveType\",\n    \"primitiveUnits\",\n    \"principals\",\n    \"print\",\n    \"privateKey\",\n    \"probablySupportsContext\",\n    \"process\",\n    \"processIceMessage\",\n    \"product\",\n    \"productSub\",\n    \"profile\",\n    \"profileEnd\",\n    \"profiles\",\n    \"prompt\",\n    \"properties\",\n    \"propertyIsEnumerable\",\n    \"propertyName\",\n    \"protocol\",\n    \"protocolLong\",\n    \"prototype\",\n    \"pseudoClass\",\n    \"pseudoElement\",\n    \"publicId\",\n    \"publicKey\",\n    \"published\",\n    \"push\",\n    \"pushNotification\",\n    \"pushState\",\n    \"put\",\n    \"putImageData\",\n    \"quadraticCurveTo\",\n    \"qualifier\",\n    \"queryCommandEnabled\",\n    \"queryCommandIndeterm\",\n    \"queryCommandState\",\n    \"queryCommandSupported\",\n    \"queryCommandText\",\n    \"queryCommandValue\",\n    \"querySelector\",\n    \"querySelectorAll\",\n    \"quote\",\n    \"quotes\",\n    \"r\",\n    \"r1\",\n    \"r2\",\n    \"race\",\n    \"radiogroup\",\n    \"radiusX\",\n    \"radiusY\",\n    \"random\",\n    \"range\",\n    \"rangeCount\",\n    \"rangeMax\",\n    \"rangeMin\",\n    \"rangeOffset\",\n    \"rangeOverflow\",\n    \"rangeParent\",\n    \"rangeUnderflow\",\n    \"rate\",\n    \"ratio\",\n    \"raw\",\n    \"read\",\n    \"readAsArrayBuffer\",\n    \"readAsBinaryString\",\n    \"readAsBlob\",\n    \"readAsDataURL\",\n    \"readAsText\",\n    \"readOnly\",\n    \"readPixels\",\n    \"readReportRequested\",\n    \"readyState\",\n    \"reason\",\n    \"reboot\",\n    \"receiver\",\n    \"receivers\",\n    \"recordNumber\",\n    \"recordset\",\n    \"rect\",\n    \"red\",\n    \"redirectCount\",\n    \"redirectEnd\",\n    \"redirectStart\",\n    \"reduce\",\n    \"reduceRight\",\n    \"reduction\",\n    \"refDistance\",\n    \"refX\",\n    \"refY\",\n    \"referenceNode\",\n    \"referrer\",\n    \"refresh\",\n    \"region\",\n    \"regionAnchorX\",\n    \"regionAnchorY\",\n    \"regionId\",\n    \"regions\",\n    \"register\",\n    \"registerContentHandler\",\n    \"registerElement\",\n    \"registerProtocolHandler\",\n    \"reject\",\n    \"rel\",\n    \"relList\",\n    \"relatedNode\",\n    \"relatedTarget\",\n    \"release\",\n    \"releaseCapture\",\n    \"releaseEvents\",\n    \"releasePointerCapture\",\n    \"releaseShaderCompiler\",\n    \"reliable\",\n    \"reload\",\n    \"remainingSpace\",\n    \"remoteDescription\",\n    \"remove\",\n    \"removeAllRanges\",\n    \"removeAttribute\",\n    \"removeAttributeNS\",\n    \"removeAttributeNode\",\n    \"removeBehavior\",\n    \"removeChild\",\n    \"removeCue\",\n    \"removeEventListener\",\n    \"removeFilter\",\n    \"removeImport\",\n    \"removeItem\",\n    \"removeListener\",\n    \"removeNamedItem\",\n    \"removeNamedItemNS\",\n    \"removeNode\",\n    \"removeParameter\",\n    \"removeProperty\",\n    \"removeRange\",\n    \"removeRegion\",\n    \"removeRule\",\n    \"removeSiteSpecificTrackingException\",\n    \"removeSourceBuffer\",\n    \"removeStream\",\n    \"removeTrack\",\n    \"removeVariable\",\n    \"removeWakeLockListener\",\n    \"removeWebWideTrackingException\",\n    \"removedNodes\",\n    \"renderbufferStorage\",\n    \"renderedBuffer\",\n    \"renderingMode\",\n    \"repeat\",\n    \"replace\",\n    \"replaceAdjacentText\",\n    \"replaceChild\",\n    \"replaceData\",\n    \"replaceId\",\n    \"replaceItem\",\n    \"replaceNode\",\n    \"replaceState\",\n    \"replaceTrack\",\n    \"replaceWholeText\",\n    \"reportValidity\",\n    \"requestAnimationFrame\",\n    \"requestAutocomplete\",\n    \"requestData\",\n    \"requestFullscreen\",\n    \"requestMediaKeySystemAccess\",\n    \"requestPermission\",\n    \"requestPointerLock\",\n    \"requestStart\",\n    \"requestingWindow\",\n    \"required\",\n    \"requiredExtensions\",\n    \"requiredFeatures\",\n    \"reset\",\n    \"resetTransform\",\n    \"resize\",\n    \"resizeBy\",\n    \"resizeTo\",\n    \"resolve\",\n    \"response\",\n    \"responseBody\",\n    \"responseEnd\",\n    \"responseStart\",\n    \"responseText\",\n    \"responseType\",\n    \"responseURL\",\n    \"responseXML\",\n    \"restore\",\n    \"result\",\n    \"resultType\",\n    \"resume\",\n    \"returnValue\",\n    \"rev\",\n    \"reverse\",\n    \"reversed\",\n    \"revocable\",\n    \"revokeObjectURL\",\n    \"rgbColor\",\n    \"right\",\n    \"rightContext\",\n    \"rightMargin\",\n    \"rolloffFactor\",\n    \"root\",\n    \"rootElement\",\n    \"rotate\",\n    \"rotateAxisAngle\",\n    \"rotateAxisAngleSelf\",\n    \"rotateFromVector\",\n    \"rotateFromVectorSelf\",\n    \"rotateSelf\",\n    \"rotation\",\n    \"rotationRate\",\n    \"round\",\n    \"rowIndex\",\n    \"rowSpan\",\n    \"rows\",\n    \"rubyAlign\",\n    \"rubyOverhang\",\n    \"rubyPosition\",\n    \"rules\",\n    \"runtime\",\n    \"runtimeStyle\",\n    \"rx\",\n    \"ry\",\n    \"safari\",\n    \"sampleCoverage\",\n    \"sampleRate\",\n    \"sandbox\",\n    \"save\",\n    \"scale\",\n    \"scale3d\",\n    \"scale3dSelf\",\n    \"scaleNonUniform\",\n    \"scaleNonUniformSelf\",\n    \"scaleSelf\",\n    \"scheme\",\n    \"scissor\",\n    \"scope\",\n    \"scopeName\",\n    \"scoped\",\n    \"screen\",\n    \"screenBrightness\",\n    \"screenEnabled\",\n    \"screenLeft\",\n    \"screenPixelToMillimeterX\",\n    \"screenPixelToMillimeterY\",\n    \"screenTop\",\n    \"screenX\",\n    \"screenY\",\n    \"scripts\",\n    \"scroll\",\n    \"scroll-behavior\",\n    \"scrollAmount\",\n    \"scrollBehavior\",\n    \"scrollBy\",\n    \"scrollByLines\",\n    \"scrollByPages\",\n    \"scrollDelay\",\n    \"scrollHeight\",\n    \"scrollIntoView\",\n    \"scrollIntoViewIfNeeded\",\n    \"scrollLeft\",\n    \"scrollLeftMax\",\n    \"scrollMaxX\",\n    \"scrollMaxY\",\n    \"scrollTo\",\n    \"scrollTop\",\n    \"scrollTopMax\",\n    \"scrollWidth\",\n    \"scrollX\",\n    \"scrollY\",\n    \"scrollbar3dLightColor\",\n    \"scrollbarArrowColor\",\n    \"scrollbarBaseColor\",\n    \"scrollbarDarkShadowColor\",\n    \"scrollbarFaceColor\",\n    \"scrollbarHighlightColor\",\n    \"scrollbarShadowColor\",\n    \"scrollbarTrackColor\",\n    \"scrollbars\",\n    \"scrolling\",\n    \"sdp\",\n    \"sdpMLineIndex\",\n    \"sdpMid\",\n    \"seal\",\n    \"search\",\n    \"searchBox\",\n    \"searchBoxJavaBridge_\",\n    \"searchParams\",\n    \"sectionRowIndex\",\n    \"secureConnectionStart\",\n    \"security\",\n    \"seed\",\n    \"seekable\",\n    \"seeking\",\n    \"select\",\n    \"selectAllChildren\",\n    \"selectNode\",\n    \"selectNodeContents\",\n    \"selectNodes\",\n    \"selectSingleNode\",\n    \"selectSubString\",\n    \"selected\",\n    \"selectedIndex\",\n    \"selectedOptions\",\n    \"selectedStyleSheetSet\",\n    \"selectedStylesheetSet\",\n    \"selection\",\n    \"selectionDirection\",\n    \"selectionEnd\",\n    \"selectionStart\",\n    \"selector\",\n    \"selectorText\",\n    \"self\",\n    \"send\",\n    \"sendAsBinary\",\n    \"sendBeacon\",\n    \"sender\",\n    \"sentTimestamp\",\n    \"separator\",\n    \"serializeToString\",\n    \"serviceWorker\",\n    \"sessionId\",\n    \"sessionStorage\",\n    \"set\",\n    \"setActive\",\n    \"setAlpha\",\n    \"setAttribute\",\n    \"setAttributeNS\",\n    \"setAttributeNode\",\n    \"setAttributeNodeNS\",\n    \"setBaseAndExtent\",\n    \"setBingCurrentSearchDefault\",\n    \"setCapture\",\n    \"setColor\",\n    \"setCompositeOperation\",\n    \"setCurrentTime\",\n    \"setCustomValidity\",\n    \"setData\",\n    \"setDate\",\n    \"setDragImage\",\n    \"setEnd\",\n    \"setEndAfter\",\n    \"setEndBefore\",\n    \"setEndPoint\",\n    \"setFillColor\",\n    \"setFilterRes\",\n    \"setFloat32\",\n    \"setFloat64\",\n    \"setFloatValue\",\n    \"setFullYear\",\n    \"setHours\",\n    \"setImmediate\",\n    \"setInt16\",\n    \"setInt32\",\n    \"setInt8\",\n    \"setInterval\",\n    \"setItem\",\n    \"setLineCap\",\n    \"setLineDash\",\n    \"setLineJoin\",\n    \"setLineWidth\",\n    \"setLocalDescription\",\n    \"setMatrix\",\n    \"setMatrixValue\",\n    \"setMediaKeys\",\n    \"setMilliseconds\",\n    \"setMinutes\",\n    \"setMiterLimit\",\n    \"setMonth\",\n    \"setNamedItem\",\n    \"setNamedItemNS\",\n    \"setNonUserCodeExceptions\",\n    \"setOrientToAngle\",\n    \"setOrientToAuto\",\n    \"setOrientation\",\n    \"setOverrideHistoryNavigationMode\",\n    \"setPaint\",\n    \"setParameter\",\n    \"setPeriodicWave\",\n    \"setPointerCapture\",\n    \"setPosition\",\n    \"setPreference\",\n    \"setProperty\",\n    \"setPrototypeOf\",\n    \"setRGBColor\",\n    \"setRGBColorICCColor\",\n    \"setRadius\",\n    \"setRangeText\",\n    \"setRemoteDescription\",\n    \"setRequestHeader\",\n    \"setResizable\",\n    \"setResourceTimingBufferSize\",\n    \"setRotate\",\n    \"setScale\",\n    \"setSeconds\",\n    \"setSelectionRange\",\n    \"setServerCertificate\",\n    \"setShadow\",\n    \"setSkewX\",\n    \"setSkewY\",\n    \"setStart\",\n    \"setStartAfter\",\n    \"setStartBefore\",\n    \"setStdDeviation\",\n    \"setStringValue\",\n    \"setStrokeColor\",\n    \"setSuggestResult\",\n    \"setTargetAtTime\",\n    \"setTargetValueAtTime\",\n    \"setTime\",\n    \"setTimeout\",\n    \"setTransform\",\n    \"setTranslate\",\n    \"setUTCDate\",\n    \"setUTCFullYear\",\n    \"setUTCHours\",\n    \"setUTCMilliseconds\",\n    \"setUTCMinutes\",\n    \"setUTCMonth\",\n    \"setUTCSeconds\",\n    \"setUint16\",\n    \"setUint32\",\n    \"setUint8\",\n    \"setUri\",\n    \"setValueAtTime\",\n    \"setValueCurveAtTime\",\n    \"setVariable\",\n    \"setVelocity\",\n    \"setVersion\",\n    \"setYear\",\n    \"settingName\",\n    \"settingValue\",\n    \"sex\",\n    \"shaderSource\",\n    \"shadowBlur\",\n    \"shadowColor\",\n    \"shadowOffsetX\",\n    \"shadowOffsetY\",\n    \"shadowRoot\",\n    \"shape\",\n    \"shape-rendering\",\n    \"shapeRendering\",\n    \"sheet\",\n    \"shift\",\n    \"shiftKey\",\n    \"shiftLeft\",\n    \"show\",\n    \"showHelp\",\n    \"showModal\",\n    \"showModalDialog\",\n    \"showModelessDialog\",\n    \"showNotification\",\n    \"sidebar\",\n    \"sign\",\n    \"signalingState\",\n    \"sin\",\n    \"singleNodeValue\",\n    \"sinh\",\n    \"size\",\n    \"sizeToContent\",\n    \"sizes\",\n    \"skewX\",\n    \"skewXSelf\",\n    \"skewY\",\n    \"skewYSelf\",\n    \"slice\",\n    \"slope\",\n    \"small\",\n    \"smil\",\n    \"smooth\",\n    \"smoothingTimeConstant\",\n    \"snapToLines\",\n    \"snapshotItem\",\n    \"snapshotLength\",\n    \"some\",\n    \"sort\",\n    \"source\",\n    \"sourceBuffer\",\n    \"sourceBuffers\",\n    \"sourceIndex\",\n    \"spacing\",\n    \"span\",\n    \"speakAs\",\n    \"speaking\",\n    \"specified\",\n    \"specularConstant\",\n    \"specularExponent\",\n    \"speechSynthesis\",\n    \"speed\",\n    \"speedOfSound\",\n    \"spellcheck\",\n    \"splice\",\n    \"split\",\n    \"splitText\",\n    \"spreadMethod\",\n    \"sqrt\",\n    \"src\",\n    \"srcElement\",\n    \"srcFilter\",\n    \"srcUrn\",\n    \"srcdoc\",\n    \"srclang\",\n    \"srcset\",\n    \"stack\",\n    \"stackTraceLimit\",\n    \"stacktrace\",\n    \"standalone\",\n    \"standby\",\n    \"start\",\n    \"startContainer\",\n    \"startIce\",\n    \"startOffset\",\n    \"startRendering\",\n    \"startTime\",\n    \"startsWith\",\n    \"state\",\n    \"status\",\n    \"statusMessage\",\n    \"statusText\",\n    \"statusbar\",\n    \"stdDeviationX\",\n    \"stdDeviationY\",\n    \"stencilFunc\",\n    \"stencilFuncSeparate\",\n    \"stencilMask\",\n    \"stencilMaskSeparate\",\n    \"stencilOp\",\n    \"stencilOpSeparate\",\n    \"step\",\n    \"stepDown\",\n    \"stepMismatch\",\n    \"stepUp\",\n    \"sticky\",\n    \"stitchTiles\",\n    \"stop\",\n    \"stop-color\",\n    \"stop-opacity\",\n    \"stopColor\",\n    \"stopImmediatePropagation\",\n    \"stopOpacity\",\n    \"stopPropagation\",\n    \"storageArea\",\n    \"storageName\",\n    \"storageStatus\",\n    \"storeSiteSpecificTrackingException\",\n    \"storeWebWideTrackingException\",\n    \"stpVersion\",\n    \"stream\",\n    \"strike\",\n    \"stringValue\",\n    \"stringify\",\n    \"stroke\",\n    \"stroke-dasharray\",\n    \"stroke-dashoffset\",\n    \"stroke-linecap\",\n    \"stroke-linejoin\",\n    \"stroke-miterlimit\",\n    \"stroke-opacity\",\n    \"stroke-width\",\n    \"strokeDasharray\",\n    \"strokeDashoffset\",\n    \"strokeLinecap\",\n    \"strokeLinejoin\",\n    \"strokeMiterlimit\",\n    \"strokeOpacity\",\n    \"strokeRect\",\n    \"strokeStyle\",\n    \"strokeText\",\n    \"strokeWidth\",\n    \"style\",\n    \"styleFloat\",\n    \"styleMedia\",\n    \"styleSheet\",\n    \"styleSheetSets\",\n    \"styleSheets\",\n    \"sub\",\n    \"subarray\",\n    \"subject\",\n    \"submit\",\n    \"subscribe\",\n    \"substr\",\n    \"substring\",\n    \"substringData\",\n    \"subtle\",\n    \"subtree\",\n    \"suffix\",\n    \"suffixes\",\n    \"summary\",\n    \"sup\",\n    \"supports\",\n    \"surfaceScale\",\n    \"surroundContents\",\n    \"suspend\",\n    \"suspendRedraw\",\n    \"swapCache\",\n    \"swapNode\",\n    \"sweepFlag\",\n    \"symbols\",\n    \"system\",\n    \"systemCode\",\n    \"systemId\",\n    \"systemLanguage\",\n    \"systemXDPI\",\n    \"systemYDPI\",\n    \"tBodies\",\n    \"tFoot\",\n    \"tHead\",\n    \"tabIndex\",\n    \"table\",\n    \"table-layout\",\n    \"tableLayout\",\n    \"tableValues\",\n    \"tag\",\n    \"tagName\",\n    \"tagUrn\",\n    \"tags\",\n    \"taintEnabled\",\n    \"takeRecords\",\n    \"tan\",\n    \"tanh\",\n    \"target\",\n    \"targetElement\",\n    \"targetTouches\",\n    \"targetX\",\n    \"targetY\",\n    \"tel\",\n    \"terminate\",\n    \"test\",\n    \"texImage2D\",\n    \"texParameterf\",\n    \"texParameteri\",\n    \"texSubImage2D\",\n    \"text\",\n    \"text-align\",\n    \"text-anchor\",\n    \"text-decoration\",\n    \"text-decoration-color\",\n    \"text-decoration-line\",\n    \"text-decoration-style\",\n    \"text-indent\",\n    \"text-overflow\",\n    \"text-rendering\",\n    \"text-shadow\",\n    \"text-transform\",\n    \"textAlign\",\n    \"textAlignLast\",\n    \"textAnchor\",\n    \"textAutospace\",\n    \"textBaseline\",\n    \"textContent\",\n    \"textDecoration\",\n    \"textDecorationBlink\",\n    \"textDecorationColor\",\n    \"textDecorationLine\",\n    \"textDecorationLineThrough\",\n    \"textDecorationNone\",\n    \"textDecorationOverline\",\n    \"textDecorationStyle\",\n    \"textDecorationUnderline\",\n    \"textIndent\",\n    \"textJustify\",\n    \"textJustifyTrim\",\n    \"textKashida\",\n    \"textKashidaSpace\",\n    \"textLength\",\n    \"textOverflow\",\n    \"textRendering\",\n    \"textShadow\",\n    \"textTracks\",\n    \"textTransform\",\n    \"textUnderlinePosition\",\n    \"then\",\n    \"threadId\",\n    \"threshold\",\n    \"tiltX\",\n    \"tiltY\",\n    \"time\",\n    \"timeEnd\",\n    \"timeStamp\",\n    \"timeout\",\n    \"timestamp\",\n    \"timestampOffset\",\n    \"timing\",\n    \"title\",\n    \"toArray\",\n    \"toBlob\",\n    \"toDataURL\",\n    \"toDateString\",\n    \"toElement\",\n    \"toExponential\",\n    \"toFixed\",\n    \"toFloat32Array\",\n    \"toFloat64Array\",\n    \"toGMTString\",\n    \"toISOString\",\n    \"toJSON\",\n    \"toLocaleDateString\",\n    \"toLocaleFormat\",\n    \"toLocaleLowerCase\",\n    \"toLocaleString\",\n    \"toLocaleTimeString\",\n    \"toLocaleUpperCase\",\n    \"toLowerCase\",\n    \"toMethod\",\n    \"toPrecision\",\n    \"toSdp\",\n    \"toSource\",\n    \"toStaticHTML\",\n    \"toString\",\n    \"toStringTag\",\n    \"toTimeString\",\n    \"toUTCString\",\n    \"toUpperCase\",\n    \"toggle\",\n    \"toggleLongPressEnabled\",\n    \"tooLong\",\n    \"toolbar\",\n    \"top\",\n    \"topMargin\",\n    \"total\",\n    \"totalFrameDelay\",\n    \"totalVideoFrames\",\n    \"touchAction\",\n    \"touches\",\n    \"trace\",\n    \"track\",\n    \"transaction\",\n    \"transactions\",\n    \"transform\",\n    \"transform-origin\",\n    \"transform-style\",\n    \"transformOrigin\",\n    \"transformPoint\",\n    \"transformString\",\n    \"transformStyle\",\n    \"transformToDocument\",\n    \"transformToFragment\",\n    \"transition\",\n    \"transition-delay\",\n    \"transition-duration\",\n    \"transition-property\",\n    \"transition-timing-function\",\n    \"transitionDelay\",\n    \"transitionDuration\",\n    \"transitionProperty\",\n    \"transitionTimingFunction\",\n    \"translate\",\n    \"translateSelf\",\n    \"translationX\",\n    \"translationY\",\n    \"trim\",\n    \"trimLeft\",\n    \"trimRight\",\n    \"trueSpeed\",\n    \"trunc\",\n    \"truncate\",\n    \"type\",\n    \"typeDetail\",\n    \"typeMismatch\",\n    \"typeMustMatch\",\n    \"types\",\n    \"ubound\",\n    \"undefined\",\n    \"unescape\",\n    \"uneval\",\n    \"unicode-bidi\",\n    \"unicodeBidi\",\n    \"uniform1f\",\n    \"uniform1fv\",\n    \"uniform1i\",\n    \"uniform1iv\",\n    \"uniform2f\",\n    \"uniform2fv\",\n    \"uniform2i\",\n    \"uniform2iv\",\n    \"uniform3f\",\n    \"uniform3fv\",\n    \"uniform3i\",\n    \"uniform3iv\",\n    \"uniform4f\",\n    \"uniform4fv\",\n    \"uniform4i\",\n    \"uniform4iv\",\n    \"uniformMatrix2fv\",\n    \"uniformMatrix3fv\",\n    \"uniformMatrix4fv\",\n    \"unique\",\n    \"uniqueID\",\n    \"uniqueNumber\",\n    \"unitType\",\n    \"units\",\n    \"unloadEventEnd\",\n    \"unloadEventStart\",\n    \"unlock\",\n    \"unmount\",\n    \"unobserve\",\n    \"unpause\",\n    \"unpauseAnimations\",\n    \"unreadCount\",\n    \"unregister\",\n    \"unregisterContentHandler\",\n    \"unregisterProtocolHandler\",\n    \"unscopables\",\n    \"unselectable\",\n    \"unshift\",\n    \"unsubscribe\",\n    \"unsuspendRedraw\",\n    \"unsuspendRedrawAll\",\n    \"unwatch\",\n    \"unwrapKey\",\n    \"update\",\n    \"updateCommands\",\n    \"updateIce\",\n    \"updateInterval\",\n    \"updateSettings\",\n    \"updated\",\n    \"updating\",\n    \"upload\",\n    \"upper\",\n    \"upperBound\",\n    \"upperOpen\",\n    \"uri\",\n    \"url\",\n    \"urn\",\n    \"urns\",\n    \"usages\",\n    \"useCurrentView\",\n    \"useMap\",\n    \"useProgram\",\n    \"usedSpace\",\n    \"userAgent\",\n    \"userLanguage\",\n    \"username\",\n    \"v8BreakIterator\",\n    \"vAlign\",\n    \"vLink\",\n    \"valid\",\n    \"validateProgram\",\n    \"validationMessage\",\n    \"validity\",\n    \"value\",\n    \"valueAsDate\",\n    \"valueAsNumber\",\n    \"valueAsString\",\n    \"valueInSpecifiedUnits\",\n    \"valueMissing\",\n    \"valueOf\",\n    \"valueText\",\n    \"valueType\",\n    \"values\",\n    \"vector-effect\",\n    \"vectorEffect\",\n    \"velocityAngular\",\n    \"velocityExpansion\",\n    \"velocityX\",\n    \"velocityY\",\n    \"vendor\",\n    \"vendorSub\",\n    \"verify\",\n    \"version\",\n    \"vertexAttrib1f\",\n    \"vertexAttrib1fv\",\n    \"vertexAttrib2f\",\n    \"vertexAttrib2fv\",\n    \"vertexAttrib3f\",\n    \"vertexAttrib3fv\",\n    \"vertexAttrib4f\",\n    \"vertexAttrib4fv\",\n    \"vertexAttribDivisorANGLE\",\n    \"vertexAttribPointer\",\n    \"vertical\",\n    \"vertical-align\",\n    \"verticalAlign\",\n    \"verticalOverflow\",\n    \"vibrate\",\n    \"videoHeight\",\n    \"videoTracks\",\n    \"videoWidth\",\n    \"view\",\n    \"viewBox\",\n    \"viewBoxString\",\n    \"viewTarget\",\n    \"viewTargetString\",\n    \"viewport\",\n    \"viewportAnchorX\",\n    \"viewportAnchorY\",\n    \"viewportElement\",\n    \"visibility\",\n    \"visibilityState\",\n    \"visible\",\n    \"vlinkColor\",\n    \"voice\",\n    \"volume\",\n    \"vrml\",\n    \"vspace\",\n    \"w\",\n    \"wand\",\n    \"warn\",\n    \"wasClean\",\n    \"watch\",\n    \"watchPosition\",\n    \"webdriver\",\n    \"webkitAddKey\",\n    \"webkitAnimation\",\n    \"webkitAnimationDelay\",\n    \"webkitAnimationDirection\",\n    \"webkitAnimationDuration\",\n    \"webkitAnimationFillMode\",\n    \"webkitAnimationIterationCount\",\n    \"webkitAnimationName\",\n    \"webkitAnimationPlayState\",\n    \"webkitAnimationTimingFunction\",\n    \"webkitAppearance\",\n    \"webkitAudioContext\",\n    \"webkitAudioDecodedByteCount\",\n    \"webkitAudioPannerNode\",\n    \"webkitBackfaceVisibility\",\n    \"webkitBackground\",\n    \"webkitBackgroundAttachment\",\n    \"webkitBackgroundClip\",\n    \"webkitBackgroundColor\",\n    \"webkitBackgroundImage\",\n    \"webkitBackgroundOrigin\",\n    \"webkitBackgroundPosition\",\n    \"webkitBackgroundPositionX\",\n    \"webkitBackgroundPositionY\",\n    \"webkitBackgroundRepeat\",\n    \"webkitBackgroundSize\",\n    \"webkitBackingStorePixelRatio\",\n    \"webkitBorderImage\",\n    \"webkitBorderImageOutset\",\n    \"webkitBorderImageRepeat\",\n    \"webkitBorderImageSlice\",\n    \"webkitBorderImageSource\",\n    \"webkitBorderImageWidth\",\n    \"webkitBoxAlign\",\n    \"webkitBoxDirection\",\n    \"webkitBoxFlex\",\n    \"webkitBoxOrdinalGroup\",\n    \"webkitBoxOrient\",\n    \"webkitBoxPack\",\n    \"webkitBoxSizing\",\n    \"webkitCancelAnimationFrame\",\n    \"webkitCancelFullScreen\",\n    \"webkitCancelKeyRequest\",\n    \"webkitCancelRequestAnimationFrame\",\n    \"webkitClearResourceTimings\",\n    \"webkitClosedCaptionsVisible\",\n    \"webkitConvertPointFromNodeToPage\",\n    \"webkitConvertPointFromPageToNode\",\n    \"webkitCreateShadowRoot\",\n    \"webkitCurrentFullScreenElement\",\n    \"webkitCurrentPlaybackTargetIsWireless\",\n    \"webkitDirectionInvertedFromDevice\",\n    \"webkitDisplayingFullscreen\",\n    \"webkitEnterFullScreen\",\n    \"webkitEnterFullscreen\",\n    \"webkitExitFullScreen\",\n    \"webkitExitFullscreen\",\n    \"webkitExitPointerLock\",\n    \"webkitFullScreenKeyboardInputAllowed\",\n    \"webkitFullscreenElement\",\n    \"webkitFullscreenEnabled\",\n    \"webkitGenerateKeyRequest\",\n    \"webkitGetAsEntry\",\n    \"webkitGetDatabaseNames\",\n    \"webkitGetEntries\",\n    \"webkitGetEntriesByName\",\n    \"webkitGetEntriesByType\",\n    \"webkitGetFlowByName\",\n    \"webkitGetGamepads\",\n    \"webkitGetImageDataHD\",\n    \"webkitGetNamedFlows\",\n    \"webkitGetRegionFlowRanges\",\n    \"webkitGetUserMedia\",\n    \"webkitHasClosedCaptions\",\n    \"webkitHidden\",\n    \"webkitIDBCursor\",\n    \"webkitIDBDatabase\",\n    \"webkitIDBDatabaseError\",\n    \"webkitIDBDatabaseException\",\n    \"webkitIDBFactory\",\n    \"webkitIDBIndex\",\n    \"webkitIDBKeyRange\",\n    \"webkitIDBObjectStore\",\n    \"webkitIDBRequest\",\n    \"webkitIDBTransaction\",\n    \"webkitImageSmoothingEnabled\",\n    \"webkitIndexedDB\",\n    \"webkitInitMessageEvent\",\n    \"webkitIsFullScreen\",\n    \"webkitKeys\",\n    \"webkitLineDashOffset\",\n    \"webkitLockOrientation\",\n    \"webkitMatchesSelector\",\n    \"webkitMediaStream\",\n    \"webkitNotifications\",\n    \"webkitOfflineAudioContext\",\n    \"webkitOrientation\",\n    \"webkitPeerConnection00\",\n    \"webkitPersistentStorage\",\n    \"webkitPointerLockElement\",\n    \"webkitPostMessage\",\n    \"webkitPreservesPitch\",\n    \"webkitPutImageDataHD\",\n    \"webkitRTCPeerConnection\",\n    \"webkitRegionOverset\",\n    \"webkitRequestAnimationFrame\",\n    \"webkitRequestFileSystem\",\n    \"webkitRequestFullScreen\",\n    \"webkitRequestFullscreen\",\n    \"webkitRequestPointerLock\",\n    \"webkitResolveLocalFileSystemURL\",\n    \"webkitSetMediaKeys\",\n    \"webkitSetResourceTimingBufferSize\",\n    \"webkitShadowRoot\",\n    \"webkitShowPlaybackTargetPicker\",\n    \"webkitSlice\",\n    \"webkitSpeechGrammar\",\n    \"webkitSpeechGrammarList\",\n    \"webkitSpeechRecognition\",\n    \"webkitSpeechRecognitionError\",\n    \"webkitSpeechRecognitionEvent\",\n    \"webkitStorageInfo\",\n    \"webkitSupportsFullscreen\",\n    \"webkitTemporaryStorage\",\n    \"webkitTextSizeAdjust\",\n    \"webkitTransform\",\n    \"webkitTransformOrigin\",\n    \"webkitTransition\",\n    \"webkitTransitionDelay\",\n    \"webkitTransitionDuration\",\n    \"webkitTransitionProperty\",\n    \"webkitTransitionTimingFunction\",\n    \"webkitURL\",\n    \"webkitUnlockOrientation\",\n    \"webkitUserSelect\",\n    \"webkitVideoDecodedByteCount\",\n    \"webkitVisibilityState\",\n    \"webkitWirelessVideoPlaybackDisabled\",\n    \"webkitdropzone\",\n    \"webstore\",\n    \"weight\",\n    \"whatToShow\",\n    \"wheelDelta\",\n    \"wheelDeltaX\",\n    \"wheelDeltaY\",\n    \"which\",\n    \"white-space\",\n    \"whiteSpace\",\n    \"wholeText\",\n    \"widows\",\n    \"width\",\n    \"will-change\",\n    \"willChange\",\n    \"willValidate\",\n    \"window\",\n    \"withCredentials\",\n    \"word-break\",\n    \"word-spacing\",\n    \"word-wrap\",\n    \"wordBreak\",\n    \"wordSpacing\",\n    \"wordWrap\",\n    \"wrap\",\n    \"wrapKey\",\n    \"write\",\n    \"writeln\",\n    \"writingMode\",\n    \"x\",\n    \"x1\",\n    \"x2\",\n    \"xChannelSelector\",\n    \"xmlEncoding\",\n    \"xmlStandalone\",\n    \"xmlVersion\",\n    \"xmlbase\",\n    \"xmllang\",\n    \"xmlspace\",\n    \"y\",\n    \"y1\",\n    \"y2\",\n    \"yChannelSelector\",\n    \"yandex\",\n    \"z\",\n    \"z-index\",\n    \"zIndex\",\n    \"zoom\",\n    \"zoomAndPan\",\n    \"zoomRectScreen\"\n];\n","/***********************************************************************\n\n  A JavaScript tokenizer / parser / beautifier / compressor.\n  https://github.com/mishoo/UglifyJS2\n\n  -------------------------------- (C) ---------------------------------\n\n                           Author: Mihai Bazon\n                         <mihai.bazon@gmail.com>\n                       http://mihai.bazon.net/blog\n\n  Distributed under the BSD license:\n\n    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n        * Redistributions of source code must retain the above\n          copyright notice, this list of conditions and the following\n          disclaimer.\n\n        * Redistributions in binary form must reproduce the above\n          copyright notice, this list of conditions and the following\n          disclaimer in the documentation and/or other materials\n          provided with the distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n\n ***********************************************************************/\n\n\"use strict\";\n/* global global, self */\n\nimport {\n    defaults,\n    push_uniq,\n} from \"./utils/index.js\";\nimport { base54 } from \"./scope\";\nimport {\n    AST_Call,\n    AST_Conditional,\n    AST_Dot,\n    AST_ObjectKeyVal,\n    AST_ObjectProperty,\n    AST_Sequence,\n    AST_String,\n    AST_Sub,\n    TreeTransformer,\n    TreeWalker,\n} from \"./ast.js\";\nimport { domprops } from \"../tools/domprops.js\";\n\nfunction find_builtins(reserved) {\n    domprops.forEach(add);\n\n    // Compatibility fix for some standard defined globals not defined on every js environment\n    var new_globals = [\"Symbol\", \"Map\", \"Promise\", \"Proxy\", \"Reflect\", \"Set\", \"WeakMap\", \"WeakSet\"];\n    var objects = {};\n    var global_ref = typeof global === \"object\" ? global : self;\n\n    new_globals.forEach(function (new_global) {\n        objects[new_global] = global_ref[new_global] || new Function();\n    });\n\n    [\n        \"null\",\n        \"true\",\n        \"false\",\n        \"NaN\",\n        \"Infinity\",\n        \"-Infinity\",\n        \"undefined\",\n    ].forEach(add);\n    [ Object, Array, Function, Number,\n      String, Boolean, Error, Math,\n      Date, RegExp, objects.Symbol, ArrayBuffer,\n      DataView, decodeURI, decodeURIComponent,\n      encodeURI, encodeURIComponent, eval, EvalError,\n      Float32Array, Float64Array, Int8Array, Int16Array,\n      Int32Array, isFinite, isNaN, JSON, objects.Map, parseFloat,\n      parseInt, objects.Promise, objects.Proxy, RangeError, ReferenceError,\n      objects.Reflect, objects.Set, SyntaxError, TypeError, Uint8Array,\n      Uint8ClampedArray, Uint16Array, Uint32Array, URIError,\n      objects.WeakMap, objects.WeakSet\n    ].forEach(function(ctor) {\n        Object.getOwnPropertyNames(ctor).map(add);\n        if (ctor.prototype) {\n            Object.getOwnPropertyNames(ctor.prototype).map(add);\n        }\n    });\n    function add(name) {\n        reserved.add(name);\n    }\n}\n\nfunction reserve_quoted_keys(ast, reserved) {\n    function add(name) {\n        push_uniq(reserved, name);\n    }\n\n    ast.walk(new TreeWalker(function(node) {\n        if (node instanceof AST_ObjectKeyVal && node.quote) {\n            add(node.key);\n        } else if (node instanceof AST_ObjectProperty && node.quote) {\n            add(node.key.name);\n        } else if (node instanceof AST_Sub) {\n            addStrings(node.property, add);\n        }\n    }));\n}\n\nfunction addStrings(node, add) {\n    node.walk(new TreeWalker(function(node) {\n        if (node instanceof AST_Sequence) {\n            addStrings(node.tail_node(), add);\n        } else if (node instanceof AST_String) {\n            add(node.value);\n        } else if (node instanceof AST_Conditional) {\n            addStrings(node.consequent, add);\n            addStrings(node.alternative, add);\n        }\n        return true;\n    }));\n}\n\nfunction mangle_properties(ast, options) {\n    options = defaults(options, {\n        builtins: false,\n        cache: null,\n        debug: false,\n        keep_quoted: false,\n        only_cache: false,\n        regex: null,\n        reserved: null,\n        undeclared: false,\n    }, true);\n\n    var reserved_option = options.reserved;\n    if (!Array.isArray(reserved_option)) reserved_option = [reserved_option];\n    var reserved = new Set(reserved_option);\n    if (!options.builtins) find_builtins(reserved);\n\n    var cname = -1;\n    var cache;\n    if (options.cache) {\n        cache = options.cache.props;\n        cache.forEach(function(mangled_name) {\n            reserved.add(mangled_name);\n        });\n    } else {\n        cache = new Map();\n    }\n\n    var regex = options.regex && new RegExp(options.regex);\n\n    // note debug is either false (disabled), or a string of the debug suffix to use (enabled).\n    // note debug may be enabled as an empty string, which is falsey. Also treat passing 'true'\n    // the same as passing an empty string.\n    var debug = options.debug !== false;\n    var debug_name_suffix;\n    if (debug) {\n        debug_name_suffix = (options.debug === true ? \"\" : options.debug);\n    }\n\n    var names_to_mangle = new Set();\n    var unmangleable = new Set();\n\n    var keep_quoted_strict = options.keep_quoted === \"strict\";\n\n    // step 1: find candidates to mangle\n    ast.walk(new TreeWalker(function(node) {\n        if (node instanceof AST_ObjectKeyVal) {\n            if (typeof node.key == \"string\" &&\n                (!keep_quoted_strict || !node.quote)) {\n                add(node.key);\n            }\n        } else if (node instanceof AST_ObjectProperty) {\n            // setter or getter, since KeyVal is handled above\n            if (!keep_quoted_strict || !node.key.end.quote) {\n                add(node.key.name);\n            }\n        } else if (node instanceof AST_Dot) {\n            var declared = !!options.undeclared;\n            if (!declared) {\n                var root = node;\n                while (root.expression) {\n                    root = root.expression;\n                }\n                declared = !(root.thedef && root.thedef.undeclared);\n            }\n            if (declared &&\n                (!keep_quoted_strict || !node.quote)) {\n                add(node.property);\n            }\n        } else if (node instanceof AST_Sub) {\n            if (!keep_quoted_strict) {\n                addStrings(node.property, add);\n            }\n        } else if (node instanceof AST_Call\n            && node.expression.print_to_string() == \"Object.defineProperty\") {\n            addStrings(node.args[1], add);\n        }\n    }));\n\n    // step 2: transform the tree, renaming properties\n    return ast.transform(new TreeTransformer(function(node) {\n        if (node instanceof AST_ObjectKeyVal) {\n            if (typeof node.key == \"string\" &&\n                (!keep_quoted_strict || !node.quote)) {\n                node.key = mangle(node.key);\n            }\n        } else if (node instanceof AST_ObjectProperty) {\n            // setter, getter, method or class field\n            if (!keep_quoted_strict || !node.key.end.quote) {\n                node.key.name = mangle(node.key.name);\n            }\n        } else if (node instanceof AST_Dot) {\n            if (!keep_quoted_strict || !node.quote) {\n                node.property = mangle(node.property);\n            }\n        } else if (!options.keep_quoted && node instanceof AST_Sub) {\n            node.property = mangleStrings(node.property);\n        } else if (node instanceof AST_Call\n            && node.expression.print_to_string() == \"Object.defineProperty\") {\n            node.args[1] = mangleStrings(node.args[1]);\n        }\n    }));\n\n    // only function declarations after this line\n\n    function can_mangle(name) {\n        if (unmangleable.has(name)) return false;\n        if (reserved.has(name)) return false;\n        if (options.only_cache) {\n            return cache.has(name);\n        }\n        if (/^-?[0-9]+(\\.[0-9]+)?(e[+-][0-9]+)?$/.test(name)) return false;\n        return true;\n    }\n\n    function should_mangle(name) {\n        if (regex && !regex.test(name)) return false;\n        if (reserved.has(name)) return false;\n        return cache.has(name)\n            || names_to_mangle.has(name);\n    }\n\n    function add(name) {\n        if (can_mangle(name))\n            names_to_mangle.add(name);\n\n        if (!should_mangle(name)) {\n            unmangleable.add(name);\n        }\n    }\n\n    function mangle(name) {\n        if (!should_mangle(name)) {\n            return name;\n        }\n\n        var mangled = cache.get(name);\n        if (!mangled) {\n            if (debug) {\n                // debug mode: use a prefix and suffix to preserve readability, e.g. o.foo -> o._$foo$NNN_.\n                var debug_mangled = \"_$\" + name + \"$\" + debug_name_suffix + \"_\";\n\n                if (can_mangle(debug_mangled)) {\n                    mangled = debug_mangled;\n                }\n            }\n\n            // either debug mode is off, or it is on and we could not use the mangled name\n            if (!mangled) {\n                do {\n                    mangled = base54(++cname);\n                } while (!can_mangle(mangled));\n            }\n\n            cache.set(name, mangled);\n        }\n        return mangled;\n    }\n\n    function mangleStrings(node) {\n        return node.transform(new TreeTransformer(function(node) {\n            if (node instanceof AST_Sequence) {\n                var last = node.expressions.length - 1;\n                node.expressions[last] = mangleStrings(node.expressions[last]);\n            } else if (node instanceof AST_String) {\n                node.value = mangle(node.value);\n            } else if (node instanceof AST_Conditional) {\n                node.consequent = mangleStrings(node.consequent);\n                node.alternative = mangleStrings(node.alternative);\n            }\n            return node;\n        }));\n    }\n}\n\nexport {\n    reserve_quoted_keys,\n    mangle_properties,\n};\n","\"use strict\";\n/* eslint-env browser, es6, node */\n\nimport {\n    defaults,\n    map_from_object,\n    map_to_object,\n    HOP,\n} from \"./utils/index.js\";\nimport {\n    AST_Node,\n    AST_Toplevel,\n} from \"./ast.js\";\nimport { parse } from \"./parse.js\";\nimport { OutputStream } from \"./output.js\";\nimport { Compressor } from \"./compress/index.js\";\nimport { base54 } from \"./scope.js\";\nimport { SourceMap } from \"./sourcemap.js\";\nimport {\n    mangle_properties,\n    reserve_quoted_keys,\n} from \"./propmangle.js\";\n\nvar to_ascii = typeof atob == \"undefined\" ? function(b64) {\n    return Buffer.from(b64, \"base64\").toString();\n} : atob;\nvar to_base64 = typeof btoa == \"undefined\" ? function(str) {\n    return Buffer.from(str).toString(\"base64\");\n} : btoa;\n\nfunction read_source_map(code) {\n    var match = /(?:^|[^.])\\/\\/# sourceMappingURL=data:application\\/json(;[\\w=-]*)?;base64,([+/0-9A-Za-z]*=*)\\s*$/.exec(code);\n    if (!match) {\n        AST_Node.warn(\"inline source map not found\");\n        return null;\n    }\n    return to_ascii(match[2]);\n}\n\nfunction set_shorthand(name, options, keys) {\n    if (options[name]) {\n        keys.forEach(function(key) {\n            if (options[key]) {\n                if (typeof options[key] != \"object\") options[key] = {};\n                if (!(name in options[key])) options[key][name] = options[name];\n            }\n        });\n    }\n}\n\nfunction init_cache(cache) {\n    if (!cache) return;\n    if (!(\"props\" in cache)) {\n        cache.props = new Map();\n    } else if (!(cache.props instanceof Map)) {\n        cache.props = map_from_object(cache.props);\n    }\n}\n\nfunction cache_to_json(cache) {\n    return {\n        props: map_to_object(cache.props)\n    };\n}\n\nfunction minify(files, options) {\n    var warn_function = AST_Node.warn_function;\n    try {\n        options = defaults(options, {\n            compress: {},\n            ecma: undefined,\n            enclose: false,\n            ie8: false,\n            keep_classnames: undefined,\n            keep_fnames: false,\n            mangle: {},\n            module: false,\n            nameCache: null,\n            output: {},\n            parse: {},\n            rename: undefined,\n            safari10: false,\n            sourceMap: false,\n            timings: false,\n            toplevel: false,\n            warnings: false,\n            wrap: false,\n        }, true);\n        var timings = options.timings && {\n            start: Date.now()\n        };\n        if (options.keep_classnames === undefined) {\n            options.keep_classnames = options.keep_fnames;\n        }\n        if (options.rename === undefined) {\n            options.rename = options.compress && options.mangle;\n        }\n        set_shorthand(\"ecma\", options, [ \"parse\", \"compress\", \"output\" ]);\n        set_shorthand(\"ie8\", options, [ \"compress\", \"mangle\", \"output\" ]);\n        set_shorthand(\"keep_classnames\", options, [ \"compress\", \"mangle\" ]);\n        set_shorthand(\"keep_fnames\", options, [ \"compress\", \"mangle\" ]);\n        set_shorthand(\"module\", options, [ \"parse\", \"compress\", \"mangle\" ]);\n        set_shorthand(\"safari10\", options, [ \"mangle\", \"output\" ]);\n        set_shorthand(\"toplevel\", options, [ \"compress\", \"mangle\" ]);\n        set_shorthand(\"warnings\", options, [ \"compress\" ]);\n        var quoted_props;\n        if (options.mangle) {\n            options.mangle = defaults(options.mangle, {\n                cache: options.nameCache && (options.nameCache.vars || {}),\n                eval: false,\n                ie8: false,\n                keep_classnames: false,\n                keep_fnames: false,\n                module: false,\n                properties: false,\n                reserved: [],\n                safari10: false,\n                toplevel: false,\n            }, true);\n            if (options.mangle.properties) {\n                if (typeof options.mangle.properties != \"object\") {\n                    options.mangle.properties = {};\n                }\n                if (options.mangle.properties.keep_quoted) {\n                    quoted_props = options.mangle.properties.reserved;\n                    if (!Array.isArray(quoted_props)) quoted_props = [];\n                    options.mangle.properties.reserved = quoted_props;\n                }\n                if (options.nameCache && !(\"cache\" in options.mangle.properties)) {\n                    options.mangle.properties.cache = options.nameCache.props || {};\n                }\n            }\n            init_cache(options.mangle.cache);\n            init_cache(options.mangle.properties.cache);\n        }\n        if (options.sourceMap) {\n            options.sourceMap = defaults(options.sourceMap, {\n                asObject: false,\n                content: null,\n                filename: null,\n                includeSources: false,\n                root: null,\n                url: null,\n            }, true);\n        }\n        var warnings = [];\n        if (options.warnings && !AST_Node.warn_function) {\n            AST_Node.warn_function = function(warning) {\n                warnings.push(warning);\n            };\n        }\n        if (timings) timings.parse = Date.now();\n        var toplevel;\n        if (files instanceof AST_Toplevel) {\n            toplevel = files;\n        } else {\n            if (typeof files == \"string\") {\n                files = [ files ];\n            }\n            options.parse = options.parse || {};\n            options.parse.toplevel = null;\n            for (var name in files) if (HOP(files, name)) {\n                options.parse.filename = name;\n                options.parse.toplevel = parse(files[name], options.parse);\n                if (options.sourceMap && options.sourceMap.content == \"inline\") {\n                    if (Object.keys(files).length > 1)\n                        throw new Error(\"inline source map only works with singular input\");\n                    options.sourceMap.content = read_source_map(files[name]);\n                }\n            }\n            toplevel = options.parse.toplevel;\n        }\n        if (quoted_props && options.mangle.properties.keep_quoted !== \"strict\") {\n            reserve_quoted_keys(toplevel, quoted_props);\n        }\n        if (options.wrap) {\n            toplevel = toplevel.wrap_commonjs(options.wrap);\n        }\n        if (options.enclose) {\n            toplevel = toplevel.wrap_enclose(options.enclose);\n        }\n        if (timings) timings.rename = Date.now();\n        // disable rename on harmony due to expand_names bug in for-of loops\n        // https://github.com/mishoo/UglifyJS2/issues/2794\n        if (0 && options.rename) {\n            toplevel.figure_out_scope(options.mangle);\n            toplevel.expand_names(options.mangle);\n        }\n        if (timings) timings.compress = Date.now();\n        if (options.compress) toplevel = new Compressor(options.compress).compress(toplevel);\n        if (timings) timings.scope = Date.now();\n        if (options.mangle) toplevel.figure_out_scope(options.mangle);\n        if (timings) timings.mangle = Date.now();\n        if (options.mangle) {\n            base54.reset();\n            toplevel.compute_char_frequency(options.mangle);\n            toplevel.mangle_names(options.mangle);\n        }\n        if (timings) timings.properties = Date.now();\n        if (options.mangle && options.mangle.properties) {\n            toplevel = mangle_properties(toplevel, options.mangle.properties);\n        }\n        if (timings) timings.output = Date.now();\n        var result = {};\n        if (options.output.ast) {\n            result.ast = toplevel;\n        }\n        if (!HOP(options.output, \"code\") || options.output.code) {\n            if (options.sourceMap) {\n                if (typeof options.sourceMap.content == \"string\") {\n                    options.sourceMap.content = JSON.parse(options.sourceMap.content);\n                }\n                options.output.source_map = SourceMap({\n                    file: options.sourceMap.filename,\n                    orig: options.sourceMap.content,\n                    root: options.sourceMap.root\n                });\n                if (options.sourceMap.includeSources) {\n                    if (files instanceof AST_Toplevel) {\n                        throw new Error(\"original source content unavailable\");\n                    } else for (var name in files) if (HOP(files, name)) {\n                        options.output.source_map.get().setSourceContent(name, files[name]);\n                    }\n                }\n            }\n            delete options.output.ast;\n            delete options.output.code;\n            var stream = OutputStream(options.output);\n            toplevel.print(stream);\n            result.code = stream.get();\n            if (options.sourceMap) {\n                if(options.sourceMap.asObject) {\n                    result.map = options.output.source_map.get().toJSON();\n                } else {\n                    result.map = options.output.source_map.toString();\n                }\n                if (options.sourceMap.url == \"inline\") {\n                    var sourceMap = typeof result.map === \"object\" ? JSON.stringify(result.map) : result.map;\n                    result.code += \"\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,\" + to_base64(sourceMap);\n                } else if (options.sourceMap.url) {\n                    result.code += \"\\n//# sourceMappingURL=\" + options.sourceMap.url;\n                }\n            }\n        }\n        if (options.nameCache && options.mangle) {\n            if (options.mangle.cache) options.nameCache.vars = cache_to_json(options.mangle.cache);\n            if (options.mangle.properties && options.mangle.properties.cache) {\n                options.nameCache.props = cache_to_json(options.mangle.properties.cache);\n            }\n        }\n        if (timings) {\n            timings.end = Date.now();\n            result.timings = {\n                parse: 1e-3 * (timings.rename - timings.parse),\n                rename: 1e-3 * (timings.compress - timings.rename),\n                compress: 1e-3 * (timings.scope - timings.compress),\n                scope: 1e-3 * (timings.mangle - timings.scope),\n                mangle: 1e-3 * (timings.properties - timings.mangle),\n                properties: 1e-3 * (timings.output - timings.properties),\n                output: 1e-3 * (timings.end - timings.output),\n                total: 1e-3 * (timings.end - timings.start)\n            };\n        }\n        if (warnings.length) {\n            result.warnings = warnings;\n        }\n        return result;\n    } catch (ex) {\n        return { error: ex };\n    } finally {\n        AST_Node.warn_function = warn_function;\n    }\n}\n\nexport {\n  minify,\n  to_ascii,\n};\n","/***********************************************************************\n\n  A JavaScript tokenizer / parser / beautifier / compressor.\n  https://github.com/mishoo/UglifyJS2\n\n  -------------------------------- (C) ---------------------------------\n\n                           Author: Mihai Bazon\n                         <mihai.bazon@gmail.com>\n                       http://mihai.bazon.net/blog\n\n  Distributed under the BSD license:\n\n    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n        * Redistributions of source code must retain the above\n          copyright notice, this list of conditions and the following\n          disclaimer.\n\n        * Redistributions in binary form must reproduce the above\n          copyright notice, this list of conditions and the following\n          disclaimer in the documentation and/or other materials\n          provided with the distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n\n ***********************************************************************/\n\n\"use strict\";\n\nimport MOZ_SourceMap from \"source-map\";\nimport {\n    defaults,\n} from \"./utils/index.js\";\n\n// a small wrapper around fitzgen's source-map library\nfunction SourceMap(options) {\n    options = defaults(options, {\n        file : null,\n        root : null,\n        orig : null,\n\n        orig_line_diff : 0,\n        dest_line_diff : 0,\n    });\n    var generator = new MOZ_SourceMap.SourceMapGenerator({\n        file       : options.file,\n        sourceRoot : options.root\n    });\n    var orig_map = options.orig && new MOZ_SourceMap.SourceMapConsumer(options.orig);\n\n    if (orig_map) {\n        orig_map.sources.forEach(function(source) {\n            var sourceContent = orig_map.sourceContentFor(source, true);\n            if (sourceContent) {\n                generator.setSourceContent(source, sourceContent);\n            }\n        });\n    }\n\n    function add(source, gen_line, gen_col, orig_line, orig_col, name) {\n        if (orig_map) {\n            var info = orig_map.originalPositionFor({\n                line: orig_line,\n                column: orig_col\n            });\n            if (info.source === null) {\n                return;\n            }\n            source = info.source;\n            orig_line = info.line;\n            orig_col = info.column;\n            name = info.name || name;\n        }\n        generator.addMapping({\n            generated : { line: gen_line + options.dest_line_diff, column: gen_col },\n            original  : { line: orig_line + options.orig_line_diff, column: orig_col },\n            source    : source,\n            name      : name\n        });\n    }\n    return {\n        add        : add,\n        get        : function() { return generator; },\n        toString   : function() { return JSON.stringify(generator.toJSON()); }\n    };\n}\n\nexport {\n    SourceMap,\n};\n","/***********************************************************************\n\n  A JavaScript tokenizer / parser / beautifier / compressor.\n  https://github.com/mishoo/UglifyJS2\n\n  -------------------------------- (C) ---------------------------------\n\n                           Author: Mihai Bazon\n                         <mihai.bazon@gmail.com>\n                       http://mihai.bazon.net/blog\n\n  Distributed under the BSD license:\n\n    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>\n\n    Redistribution and use in source and binary forms, with or without\n    modification, are permitted provided that the following conditions\n    are met:\n\n        * Redistributions of source code must retain the above\n          copyright notice, this list of conditions and the following\n          disclaimer.\n\n        * Redistributions in binary form must reproduce the above\n          copyright notice, this list of conditions and the following\n          disclaimer in the documentation and/or other materials\n          provided with the distribution.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n    SUCH DAMAGE.\n\n ***********************************************************************/\n\nimport * as ast from \"./ast.js\";\nimport { make_node } from \"./utils/index.js\";\nimport {\n    AST_Accessor,\n    AST_Array,\n    AST_Arrow,\n    AST_Assign,\n    AST_Atom,\n    AST_Await,\n    AST_BigInt,\n    AST_Binary,\n    AST_Block,\n    AST_BlockStatement,\n    AST_Boolean,\n    AST_Break,\n    AST_Call,\n    AST_Case,\n    AST_Catch,\n    AST_Class,\n    AST_ClassExpression,\n    AST_ClassProperty,\n    AST_ConciseMethod,\n    AST_Conditional,\n    AST_Const,\n    AST_Constant,\n    AST_Continue,\n    AST_Debugger,\n    AST_Default,\n    AST_DefaultAssign,\n    AST_DefClass,\n    AST_Definitions,\n    AST_Defun,\n    AST_Destructuring,\n    AST_Directive,\n    AST_Do,\n    AST_Dot,\n    AST_EmptyStatement,\n    AST_Expansion,\n    AST_Export,\n    AST_False,\n    AST_Finally,\n    AST_For,\n    AST_ForIn,\n    AST_ForOf,\n    AST_Function,\n    AST_Hole,\n    AST_If,\n    AST_Import,\n    AST_Label,\n    AST_LabeledStatement,\n    AST_LabelRef,\n    AST_Lambda,\n    AST_Let,\n    AST_NameMapping,\n    AST_New,\n    AST_NewTarget,\n    AST_Node,\n    AST_Null,\n    AST_Number,\n    AST_Object,\n    AST_ObjectGetter,\n    AST_ObjectKeyVal,\n    AST_ObjectProperty,\n    AST_ObjectSetter,\n    AST_PrefixedTemplateString,\n    AST_PropAccess,\n    AST_RegExp,\n    AST_Return,\n    AST_Sequence,\n    AST_SimpleStatement,\n    AST_Statement,\n    AST_String,\n    AST_Sub,\n    AST_Super,\n    AST_Switch,\n    AST_SwitchBranch,\n    AST_Symbol,\n    AST_SymbolCatch,\n    AST_SymbolClass,\n    AST_SymbolClassProperty,\n    AST_SymbolConst,\n    AST_SymbolDefClass,\n    AST_SymbolDefun,\n    AST_SymbolExport,\n    AST_SymbolExportForeign,\n    AST_SymbolFunarg,\n    AST_SymbolImport,\n    AST_SymbolImportForeign,\n    AST_SymbolLambda,\n    AST_SymbolLet,\n    AST_SymbolMethod,\n    AST_SymbolRef,\n    AST_SymbolVar,\n    AST_TemplateSegment,\n    AST_TemplateString,\n    AST_This,\n    AST_Throw,\n    AST_Token,\n    AST_Toplevel,\n    AST_True,\n    AST_Try,\n    AST_Unary,\n    AST_UnaryPostfix,\n    AST_UnaryPrefix,\n    AST_Var,\n    AST_VarDef,\n    AST_While,\n    AST_With,\n    AST_Yield,\n} from \"./ast.js\";\n\n(function() {\n\n    var normalize_directives = function(body) {\n        var in_directive = true;\n\n        for (var i = 0; i < body.length; i++) {\n            if (in_directive && body[i] instanceof AST_Statement && body[i].body instanceof AST_String) {\n                body[i] = new AST_Directive({\n                    start: body[i].start,\n                    end: body[i].end,\n                    value: body[i].body.value\n                });\n            } else if (in_directive && !(body[i] instanceof AST_Statement && body[i].body instanceof AST_String)) {\n                in_directive = false;\n            }\n        }\n\n        return body;\n    };\n\n    var MOZ_TO_ME = {\n        Program: function(M) {\n            return new AST_Toplevel({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                body: normalize_directives(M.body.map(from_moz))\n            });\n        },\n        ArrayPattern: function(M) {\n            return new AST_Destructuring({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                names: M.elements.map(function(elm) {\n                    if (elm === null) {\n                        return new AST_Hole();\n                    }\n                    return from_moz(elm);\n                }),\n                is_array: true\n            });\n        },\n        ObjectPattern: function(M) {\n            return new AST_Destructuring({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                names: M.properties.map(from_moz),\n                is_array: false\n            });\n        },\n        AssignmentPattern: function(M) {\n            return new AST_DefaultAssign({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                left: from_moz(M.left),\n                operator: \"=\",\n                right: from_moz(M.right)\n            });\n        },\n        SpreadElement: function(M) {\n            return new AST_Expansion({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                expression: from_moz(M.argument)\n            });\n        },\n        RestElement: function(M) {\n            return new AST_Expansion({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                expression: from_moz(M.argument)\n            });\n        },\n        TemplateElement: function(M) {\n            return new AST_TemplateSegment({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                value: M.value.cooked,\n                raw: M.value.raw\n            });\n        },\n        TemplateLiteral: function(M) {\n            var segments = [];\n            for (var i = 0; i < M.quasis.length; i++) {\n                segments.push(from_moz(M.quasis[i]));\n                if (M.expressions[i]) {\n                    segments.push(from_moz(M.expressions[i]));\n                }\n            }\n            return new AST_TemplateString({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                segments: segments\n            });\n        },\n        TaggedTemplateExpression: function(M) {\n            return new AST_PrefixedTemplateString({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                template_string: from_moz(M.quasi),\n                prefix: from_moz(M.tag)\n            });\n        },\n        FunctionDeclaration: function(M) {\n            return new AST_Defun({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                name: from_moz(M.id),\n                argnames: M.params.map(from_moz),\n                is_generator: M.generator,\n                async: M.async,\n                body: normalize_directives(from_moz(M.body).body)\n            });\n        },\n        FunctionExpression: function(M) {\n            return new AST_Function({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                name: from_moz(M.id),\n                argnames: M.params.map(from_moz),\n                is_generator: M.generator,\n                async: M.async,\n                body: normalize_directives(from_moz(M.body).body)\n            });\n        },\n        ArrowFunctionExpression: function(M) {\n            const body = M.body.type === \"BlockStatement\"\n                ? from_moz(M.body).body\n                : [make_node(AST_Return, {}, { value: from_moz(M.body) })];\n            return new AST_Arrow({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                argnames: M.params.map(from_moz),\n                body,\n                async: M.async,\n            });\n        },\n        ExpressionStatement: function(M) {\n            return new AST_SimpleStatement({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                body: from_moz(M.expression)\n            });\n        },\n        TryStatement: function(M) {\n            var handlers = M.handlers || [M.handler];\n            if (handlers.length > 1 || M.guardedHandlers && M.guardedHandlers.length) {\n                throw new Error(\"Multiple catch clauses are not supported.\");\n            }\n            return new AST_Try({\n                start    : my_start_token(M),\n                end      : my_end_token(M),\n                body     : from_moz(M.block).body,\n                bcatch   : from_moz(handlers[0]),\n                bfinally : M.finalizer ? new AST_Finally(from_moz(M.finalizer)) : null\n            });\n        },\n        Property: function(M) {\n            var key = M.key;\n            var args = {\n                start    : my_start_token(key || M.value),\n                end      : my_end_token(M.value),\n                key      : key.type == \"Identifier\" ? key.name : key.value,\n                value    : from_moz(M.value)\n            };\n            if (M.computed) {\n                args.key = from_moz(M.key);\n            }\n            if (M.method) {\n                args.is_generator = M.value.generator;\n                args.async = M.value.async;\n                if (!M.computed) {\n                    args.key = new AST_SymbolMethod({ name: args.key });\n                } else {\n                    args.key = from_moz(M.key);\n                }\n                return new AST_ConciseMethod(args);\n            }\n            if (M.kind == \"init\") {\n                if (key.type != \"Identifier\" && key.type != \"Literal\") {\n                    args.key = from_moz(key);\n                }\n                return new AST_ObjectKeyVal(args);\n            }\n            if (typeof args.key === \"string\" || typeof args.key === \"number\") {\n                args.key = new AST_SymbolMethod({\n                    name: args.key\n                });\n            }\n            args.value = new AST_Accessor(args.value);\n            if (M.kind == \"get\") return new AST_ObjectGetter(args);\n            if (M.kind == \"set\") return new AST_ObjectSetter(args);\n            if (M.kind == \"method\") {\n                args.async = M.value.async;\n                args.is_generator = M.value.generator;\n                args.quote = M.computed ? \"\\\"\" : null;\n                return new AST_ConciseMethod(args);\n            }\n        },\n        MethodDefinition: function(M) {\n            var args = {\n                start    : my_start_token(M),\n                end      : my_end_token(M),\n                key      : M.computed ? from_moz(M.key) : new AST_SymbolMethod({ name: M.key.name || M.key.value }),\n                value    : from_moz(M.value),\n                static   : M.static,\n            };\n            if (M.kind == \"get\") {\n                return new AST_ObjectGetter(args);\n            }\n            if (M.kind == \"set\") {\n                return new AST_ObjectSetter(args);\n            }\n            args.is_generator = M.value.generator;\n            args.async = M.value.async;\n            return new AST_ConciseMethod(args);\n        },\n        FieldDefinition: function(M) {\n            let key;\n            if (M.computed) {\n                key = from_moz(M.key);\n            } else {\n                if (M.key.type !== \"Identifier\") throw new Error(\"Non-Identifier key in FieldDefinition\");\n                key = from_moz(M.key);\n            }\n            return new AST_ClassProperty({\n                start    : my_start_token(M),\n                end      : my_end_token(M),\n                key,\n                value    : from_moz(M.value),\n                static   : M.static,\n            });\n        },\n        ArrayExpression: function(M) {\n            return new AST_Array({\n                start    : my_start_token(M),\n                end      : my_end_token(M),\n                elements : M.elements.map(function(elem) {\n                    return elem === null ? new AST_Hole() : from_moz(elem);\n                })\n            });\n        },\n        ObjectExpression: function(M) {\n            return new AST_Object({\n                start      : my_start_token(M),\n                end        : my_end_token(M),\n                properties : M.properties.map(function(prop) {\n                    if (prop.type === \"SpreadElement\") {\n                        return from_moz(prop);\n                    }\n                    prop.type = \"Property\";\n                    return from_moz(prop);\n                })\n            });\n        },\n        SequenceExpression: function(M) {\n            return new AST_Sequence({\n                start      : my_start_token(M),\n                end        : my_end_token(M),\n                expressions: M.expressions.map(from_moz)\n            });\n        },\n        MemberExpression: function(M) {\n            return new (M.computed ? AST_Sub : AST_Dot)({\n                start      : my_start_token(M),\n                end        : my_end_token(M),\n                property   : M.computed ? from_moz(M.property) : M.property.name,\n                expression : from_moz(M.object)\n            });\n        },\n        SwitchCase: function(M) {\n            return new (M.test ? AST_Case : AST_Default)({\n                start      : my_start_token(M),\n                end        : my_end_token(M),\n                expression : from_moz(M.test),\n                body       : M.consequent.map(from_moz)\n            });\n        },\n        VariableDeclaration: function(M) {\n            return new (M.kind === \"const\" ? AST_Const :\n                        M.kind === \"let\" ? AST_Let : AST_Var)({\n                start       : my_start_token(M),\n                end         : my_end_token(M),\n                definitions : M.declarations.map(from_moz)\n            });\n        },\n\n        ImportDeclaration: function(M) {\n            var imported_name = null;\n            var imported_names = null;\n            M.specifiers.forEach(function (specifier) {\n                if (specifier.type === \"ImportSpecifier\") {\n                    if (!imported_names) { imported_names = []; }\n                    imported_names.push(new AST_NameMapping({\n                        start: my_start_token(specifier),\n                        end: my_end_token(specifier),\n                        foreign_name: from_moz(specifier.imported),\n                        name: from_moz(specifier.local)\n                    }));\n                } else if (specifier.type === \"ImportDefaultSpecifier\") {\n                    imported_name = from_moz(specifier.local);\n                } else if (specifier.type === \"ImportNamespaceSpecifier\") {\n                    if (!imported_names) { imported_names = []; }\n                    imported_names.push(new AST_NameMapping({\n                        start: my_start_token(specifier),\n                        end: my_end_token(specifier),\n                        foreign_name: new AST_SymbolImportForeign({ name: \"*\" }),\n                        name: from_moz(specifier.local)\n                    }));\n                }\n            });\n            return new AST_Import({\n                start       : my_start_token(M),\n                end         : my_end_token(M),\n                imported_name: imported_name,\n                imported_names : imported_names,\n                module_name : from_moz(M.source)\n            });\n        },\n        ExportAllDeclaration: function(M) {\n            return new AST_Export({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                exported_names: [\n                    new AST_NameMapping({\n                        name: new AST_SymbolExportForeign({ name: \"*\" }),\n                        foreign_name: new AST_SymbolExportForeign({ name: \"*\" })\n                    })\n                ],\n                module_name: from_moz(M.source)\n            });\n        },\n        ExportNamedDeclaration: function(M) {\n            return new AST_Export({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                exported_definition: from_moz(M.declaration),\n                exported_names: M.specifiers && M.specifiers.length ? M.specifiers.map(function (specifier) {\n                    return new AST_NameMapping({\n                        foreign_name: from_moz(specifier.exported),\n                        name: from_moz(specifier.local)\n                    });\n                }) : null,\n                module_name: from_moz(M.source)\n            });\n        },\n        ExportDefaultDeclaration: function(M) {\n            return new AST_Export({\n                start: my_start_token(M),\n                end: my_end_token(M),\n                exported_value: from_moz(M.declaration),\n                is_default: true\n            });\n        },\n        Literal: function(M) {\n            var val = M.value, args = {\n                start  : my_start_token(M),\n                end    : my_end_token(M)\n            };\n            var rx = M.regex;\n            if (rx && rx.pattern) {\n                // RegExpLiteral as per ESTree AST spec\n                args.value = {\n                    source: rx.pattern,\n                    flags: rx.flags\n                };\n                return new AST_RegExp(args);\n            } else if (rx) {\n                // support legacy RegExp\n                const rx_source = M.raw || val;\n                const match = rx_source.match(/^\\/(.*)\\/(\\w*)$/);\n                if (!match) throw new Error(\"Invalid regex source \" + rx_source);\n                const [_, source, flags] = match;\n                args.value = { source, flags };\n                return new AST_RegExp(args);\n            }\n            if (val === null) return new AST_Null(args);\n            switch (typeof val) {\n              case \"string\":\n                args.value = val;\n                return new AST_String(args);\n              case \"number\":\n                args.value = val;\n                return new AST_Number(args);\n              case \"boolean\":\n                return new (val ? AST_True : AST_False)(args);\n            }\n        },\n        MetaProperty: function(M) {\n            if (M.meta.name === \"new\" && M.property.name === \"target\") {\n                return new AST_NewTarget({\n                    start: my_start_token(M),\n                    end: my_end_token(M)\n                });\n            }\n        },\n        Identifier: function(M) {\n            var p = FROM_MOZ_STACK[FROM_MOZ_STACK.length - 2];\n            return new (  p.type == \"LabeledStatement\" ? AST_Label\n                        : p.type == \"VariableDeclarator\" && p.id === M ? (p.kind == \"const\" ? AST_SymbolConst : p.kind == \"let\" ? AST_SymbolLet : AST_SymbolVar)\n                        : /Import.*Specifier/.test(p.type) ? (p.local === M ? AST_SymbolImport : AST_SymbolImportForeign)\n                        : p.type == \"ExportSpecifier\" ? (p.local === M ? AST_SymbolExport : AST_SymbolExportForeign)\n                        : p.type == \"FunctionExpression\" ? (p.id === M ? AST_SymbolLambda : AST_SymbolFunarg)\n                        : p.type == \"FunctionDeclaration\" ? (p.id === M ? AST_SymbolDefun : AST_SymbolFunarg)\n                        : p.type == \"ArrowFunctionExpression\" ? (p.params.includes(M)) ? AST_SymbolFunarg : AST_SymbolRef\n                        : p.type == \"ClassExpression\" ? (p.id === M ? AST_SymbolClass : AST_SymbolRef)\n                        : p.type == \"Property\" ? (p.key === M && p.computed || p.value === M ? AST_SymbolRef : AST_SymbolMethod)\n                        : p.type == \"FieldDefinition\" ? (p.key === M && p.computed || p.value === M ? AST_SymbolRef : AST_SymbolClassProperty)\n                        : p.type == \"ClassDeclaration\" ? (p.id === M ? AST_SymbolDefClass : AST_SymbolRef)\n                        : p.type == \"MethodDefinition\" ? (p.computed ? AST_SymbolRef : AST_SymbolMethod)\n                        : p.type == \"CatchClause\" ? AST_SymbolCatch\n                        : p.type == \"BreakStatement\" || p.type == \"ContinueStatement\" ? AST_LabelRef\n                        : AST_SymbolRef)({\n                            start : my_start_token(M),\n                            end   : my_end_token(M),\n                            name  : M.name\n                        });\n        },\n        BigIntLiteral(M) {\n            return new AST_BigInt({\n                start : my_start_token(M),\n                end   : my_end_token(M),\n                value : M.value\n            });\n        }\n    };\n\n    MOZ_TO_ME.UpdateExpression =\n    MOZ_TO_ME.UnaryExpression = function To_Moz_Unary(M) {\n        var prefix = \"prefix\" in M ? M.prefix\n            : M.type == \"UnaryExpression\" ? true : false;\n        return new (prefix ? AST_UnaryPrefix : AST_UnaryPostfix)({\n            start      : my_start_token(M),\n            end        : my_end_token(M),\n            operator   : M.operator,\n            expression : from_moz(M.argument)\n        });\n    };\n\n    MOZ_TO_ME.ClassDeclaration =\n    MOZ_TO_ME.ClassExpression = function From_Moz_Class(M) {\n        return new (M.type === \"ClassDeclaration\" ? AST_DefClass : AST_ClassExpression)({\n            start    : my_start_token(M),\n            end      : my_end_token(M),\n            name     : from_moz(M.id),\n            extends  : from_moz(M.superClass),\n            properties: M.body.body.map(from_moz)\n        });\n    };\n\n    map(\"EmptyStatement\", AST_EmptyStatement);\n    map(\"BlockStatement\", AST_BlockStatement, \"body@body\");\n    map(\"IfStatement\", AST_If, \"test>condition, consequent>body, alternate>alternative\");\n    map(\"LabeledStatement\", AST_LabeledStatement, \"label>label, body>body\");\n    map(\"BreakStatement\", AST_Break, \"label>label\");\n    map(\"ContinueStatement\", AST_Continue, \"label>label\");\n    map(\"WithStatement\", AST_With, \"object>expression, body>body\");\n    map(\"SwitchStatement\", AST_Switch, \"discriminant>expression, cases@body\");\n    map(\"ReturnStatement\", AST_Return, \"argument>value\");\n    map(\"ThrowStatement\", AST_Throw, \"argument>value\");\n    map(\"WhileStatement\", AST_While, \"test>condition, body>body\");\n    map(\"DoWhileStatement\", AST_Do, \"test>condition, body>body\");\n    map(\"ForStatement\", AST_For, \"init>init, test>condition, update>step, body>body\");\n    map(\"ForInStatement\", AST_ForIn, \"left>init, right>object, body>body\");\n    map(\"ForOfStatement\", AST_ForOf, \"left>init, right>object, body>body, await=await\");\n    map(\"AwaitExpression\", AST_Await, \"argument>expression\");\n    map(\"YieldExpression\", AST_Yield, \"argument>expression, delegate=is_star\");\n    map(\"DebuggerStatement\", AST_Debugger);\n    map(\"VariableDeclarator\", AST_VarDef, \"id>name, init>value\");\n    map(\"CatchClause\", AST_Catch, \"param>argname, body%body\");\n\n    map(\"ThisExpression\", AST_This);\n    map(\"Super\", AST_Super);\n    map(\"BinaryExpression\", AST_Binary, \"operator=operator, left>left, right>right\");\n    map(\"LogicalExpression\", AST_Binary, \"operator=operator, left>left, right>right\");\n    map(\"AssignmentExpression\", AST_Assign, \"operator=operator, left>left, right>right\");\n    map(\"ConditionalExpression\", AST_Conditional, \"test>condition, consequent>consequent, alternate>alternative\");\n    map(\"NewExpression\", AST_New, \"callee>expression, arguments@args\");\n    map(\"CallExpression\", AST_Call, \"callee>expression, arguments@args\");\n\n    def_to_moz(AST_Toplevel, function To_Moz_Program(M) {\n        return to_moz_scope(\"Program\", M);\n    });\n\n    def_to_moz(AST_Expansion, function To_Moz_Spread(M) {\n        return {\n            type: to_moz_in_destructuring() ? \"RestElement\" : \"SpreadElement\",\n            argument: to_moz(M.expression)\n        };\n    });\n\n    def_to_moz(AST_PrefixedTemplateString, function To_Moz_TaggedTemplateExpression(M) {\n        return {\n            type: \"TaggedTemplateExpression\",\n            tag: to_moz(M.prefix),\n            quasi: to_moz(M.template_string)\n        };\n    });\n\n    def_to_moz(AST_TemplateString, function To_Moz_TemplateLiteral(M) {\n        var quasis = [];\n        var expressions = [];\n        for (var i = 0; i < M.segments.length; i++) {\n            if (i % 2 !== 0) {\n                expressions.push(to_moz(M.segments[i]));\n            } else {\n                quasis.push({\n                    type: \"TemplateElement\",\n                    value: {\n                        raw: M.segments[i].raw,\n                        cooked: M.segments[i].value\n                    },\n                    tail: i === M.segments.length - 1\n                });\n            }\n        }\n        return {\n            type: \"TemplateLiteral\",\n            quasis: quasis,\n            expressions: expressions\n        };\n    });\n\n    def_to_moz(AST_Defun, function To_Moz_FunctionDeclaration(M) {\n        return {\n            type: \"FunctionDeclaration\",\n            id: to_moz(M.name),\n            params: M.argnames.map(to_moz),\n            generator: M.is_generator,\n            async: M.async,\n            body: to_moz_scope(\"BlockStatement\", M)\n        };\n    });\n\n    def_to_moz(AST_Function, function To_Moz_FunctionExpression(M, parent) {\n        var is_generator = parent.is_generator !== undefined ?\n            parent.is_generator : M.is_generator;\n        return {\n            type: \"FunctionExpression\",\n            id: to_moz(M.name),\n            params: M.argnames.map(to_moz),\n            generator: is_generator,\n            async: M.async,\n            body: to_moz_scope(\"BlockStatement\", M)\n        };\n    });\n\n    def_to_moz(AST_Arrow, function To_Moz_ArrowFunctionExpression(M) {\n        var body = {\n            type: \"BlockStatement\",\n            body: M.body.map(to_moz)\n        };\n        return {\n            type: \"ArrowFunctionExpression\",\n            params: M.argnames.map(to_moz),\n            async: M.async,\n            body: body\n        };\n    });\n\n    def_to_moz(AST_Destructuring, function To_Moz_ObjectPattern(M) {\n        if (M.is_array) {\n            return {\n                type: \"ArrayPattern\",\n                elements: M.names.map(to_moz)\n            };\n        }\n        return {\n            type: \"ObjectPattern\",\n            properties: M.names.map(to_moz)\n        };\n    });\n\n    def_to_moz(AST_Directive, function To_Moz_Directive(M) {\n        return {\n            type: \"ExpressionStatement\",\n            expression: {\n                type: \"Literal\",\n                value: M.value,\n                raw: M.print_to_string()\n            },\n            directive: M.value\n        };\n    });\n\n    def_to_moz(AST_SimpleStatement, function To_Moz_ExpressionStatement(M) {\n        return {\n            type: \"ExpressionStatement\",\n            expression: to_moz(M.body)\n        };\n    });\n\n    def_to_moz(AST_SwitchBranch, function To_Moz_SwitchCase(M) {\n        return {\n            type: \"SwitchCase\",\n            test: to_moz(M.expression),\n            consequent: M.body.map(to_moz)\n        };\n    });\n\n    def_to_moz(AST_Try, function To_Moz_TryStatement(M) {\n        return {\n            type: \"TryStatement\",\n            block: to_moz_block(M),\n            handler: to_moz(M.bcatch),\n            guardedHandlers: [],\n            finalizer: to_moz(M.bfinally)\n        };\n    });\n\n    def_to_moz(AST_Catch, function To_Moz_CatchClause(M) {\n        return {\n            type: \"CatchClause\",\n            param: to_moz(M.argname),\n            guard: null,\n            body: to_moz_block(M)\n        };\n    });\n\n    def_to_moz(AST_Definitions, function To_Moz_VariableDeclaration(M) {\n        return {\n            type: \"VariableDeclaration\",\n            kind:\n                M instanceof AST_Const ? \"const\" :\n                M instanceof AST_Let ? \"let\" : \"var\",\n            declarations: M.definitions.map(to_moz)\n        };\n    });\n\n    def_to_moz(AST_Export, function To_Moz_ExportDeclaration(M) {\n        if (M.exported_names) {\n            if (M.exported_names[0].name.name === \"*\") {\n                return {\n                    type: \"ExportAllDeclaration\",\n                    source: to_moz(M.module_name)\n                };\n            }\n            return {\n                type: \"ExportNamedDeclaration\",\n                specifiers: M.exported_names.map(function (name_mapping) {\n                    return {\n                        type: \"ExportSpecifier\",\n                        exported: to_moz(name_mapping.foreign_name),\n                        local: to_moz(name_mapping.name)\n                    };\n                }),\n                declaration: to_moz(M.exported_definition),\n                source: to_moz(M.module_name)\n            };\n        }\n        return {\n            type: M.is_default ? \"ExportDefaultDeclaration\" : \"ExportNamedDeclaration\",\n            declaration: to_moz(M.exported_value || M.exported_definition)\n        };\n    });\n\n    def_to_moz(AST_Import, function To_Moz_ImportDeclaration(M) {\n        var specifiers = [];\n        if (M.imported_name) {\n            specifiers.push({\n                type: \"ImportDefaultSpecifier\",\n                local: to_moz(M.imported_name)\n            });\n        }\n        if (M.imported_names && M.imported_names[0].foreign_name.name === \"*\") {\n            specifiers.push({\n                type: \"ImportNamespaceSpecifier\",\n                local: to_moz(M.imported_names[0].name)\n            });\n        } else if (M.imported_names) {\n            M.imported_names.forEach(function(name_mapping) {\n                specifiers.push({\n                    type: \"ImportSpecifier\",\n                    local: to_moz(name_mapping.name),\n                    imported: to_moz(name_mapping.foreign_name)\n                });\n            });\n        }\n        return {\n            type: \"ImportDeclaration\",\n            specifiers: specifiers,\n            source: to_moz(M.module_name)\n        };\n    });\n\n    def_to_moz(AST_Sequence, function To_Moz_SequenceExpression(M) {\n        return {\n            type: \"SequenceExpression\",\n            expressions: M.expressions.map(to_moz)\n        };\n    });\n\n    def_to_moz(AST_PropAccess, function To_Moz_MemberExpression(M) {\n        var isComputed = M instanceof AST_Sub;\n        return {\n            type: \"MemberExpression\",\n            object: to_moz(M.expression),\n            computed: isComputed,\n            property: isComputed ? to_moz(M.property) : {type: \"Identifier\", name: M.property}\n        };\n    });\n\n    def_to_moz(AST_Unary, function To_Moz_Unary(M) {\n        return {\n            type: M.operator == \"++\" || M.operator == \"--\" ? \"UpdateExpression\" : \"UnaryExpression\",\n            operator: M.operator,\n            prefix: M instanceof AST_UnaryPrefix,\n            argument: to_moz(M.expression)\n        };\n    });\n\n    def_to_moz(AST_Binary, function To_Moz_BinaryExpression(M) {\n        if (M.operator == \"=\" && to_moz_in_destructuring()) {\n            return {\n                type: \"AssignmentPattern\",\n                left: to_moz(M.left),\n                right: to_moz(M.right)\n            };\n        }\n\n        const type = M.operator == \"&&\" || M.operator == \"||\" || M.operator === \"??\"\n            ? \"LogicalExpression\"\n            : \"BinaryExpression\";\n\n        return {\n            type,\n            left: to_moz(M.left),\n            operator: M.operator,\n            right: to_moz(M.right)\n        };\n    });\n\n    def_to_moz(AST_Array, function To_Moz_ArrayExpression(M) {\n        return {\n            type: \"ArrayExpression\",\n            elements: M.elements.map(to_moz)\n        };\n    });\n\n    def_to_moz(AST_Object, function To_Moz_ObjectExpression(M) {\n        return {\n            type: \"ObjectExpression\",\n            properties: M.properties.map(to_moz)\n        };\n    });\n\n    def_to_moz(AST_ObjectProperty, function To_Moz_Property(M, parent) {\n        var key = M.key instanceof AST_Node ? to_moz(M.key) : {\n            type: \"Identifier\",\n            value: M.key\n        };\n        if (typeof M.key === \"number\") {\n            key = {\n                type: \"Literal\",\n                value: Number(M.key)\n            };\n        }\n        if (typeof M.key === \"string\") {\n            key = {\n                type: \"Identifier\",\n                name: M.key\n            };\n        }\n        var kind;\n        var string_or_num = typeof M.key === \"string\" || typeof M.key === \"number\";\n        var computed = string_or_num ? false : !(M.key instanceof AST_Symbol) || M.key instanceof AST_SymbolRef;\n        if (M instanceof AST_ObjectKeyVal) {\n            kind = \"init\";\n            computed = !string_or_num;\n        } else\n        if (M instanceof AST_ObjectGetter) {\n            kind = \"get\";\n        } else\n        if (M instanceof AST_ObjectSetter) {\n            kind = \"set\";\n        }\n        if (M instanceof AST_ClassProperty) {\n            return {\n                type: \"FieldDefinition\",\n                computed,\n                key,\n                value: to_moz(M.value),\n                static: M.static\n            };\n        }\n        if (parent instanceof AST_Class) {\n            return {\n                type: \"MethodDefinition\",\n                computed: computed,\n                kind: kind,\n                static: M.static,\n                key: to_moz(M.key),\n                value: to_moz(M.value)\n            };\n        }\n        return {\n            type: \"Property\",\n            computed: computed,\n            kind: kind,\n            key: key,\n            value: to_moz(M.value)\n        };\n    });\n\n    def_to_moz(AST_ConciseMethod, function To_Moz_MethodDefinition(M, parent) {\n        if (parent instanceof AST_Object) {\n            return {\n                type: \"Property\",\n                computed: !(M.key instanceof AST_Symbol) || M.key instanceof AST_SymbolRef,\n                kind: \"init\",\n                method: true,\n                shorthand: false,\n                key: to_moz(M.key),\n                value: to_moz(M.value)\n            };\n        }\n        return {\n            type: \"MethodDefinition\",\n            computed: !(M.key instanceof AST_Symbol) || M.key instanceof AST_SymbolRef,\n            kind: M.key === \"constructor\" ? \"constructor\" : \"method\",\n            static: M.static,\n            key: to_moz(M.key),\n            value: to_moz(M.value)\n        };\n    });\n\n    def_to_moz(AST_Class, function To_Moz_Class(M) {\n        var type = M instanceof AST_ClassExpression ? \"ClassExpression\" : \"ClassDeclaration\";\n        return {\n            type: type,\n            superClass: to_moz(M.extends),\n            id: M.name ? to_moz(M.name) : null,\n            body: {\n                type: \"ClassBody\",\n                body: M.properties.map(to_moz)\n            }\n        };\n    });\n\n    def_to_moz(AST_NewTarget, function To_Moz_MetaProperty() {\n        return {\n            type: \"MetaProperty\",\n            meta: {\n                type: \"Identifier\",\n                name: \"new\"\n            },\n            property: {\n                type: \"Identifier\",\n                name: \"target\"\n            }\n        };\n    });\n\n    def_to_moz(AST_Symbol, function To_Moz_Identifier(M, parent) {\n        if (M instanceof AST_SymbolMethod && parent.quote) {\n            return {\n                type: \"Literal\",\n                value: M.name\n            };\n        }\n        var def = M.definition();\n        return {\n            type: \"Identifier\",\n            name: def ? def.mangled_name || def.name : M.name\n        };\n    });\n\n    def_to_moz(AST_RegExp, function To_Moz_RegExpLiteral(M) {\n        const pattern = M.value.source;\n        const flags = M.value.flags;\n        return {\n            type: \"Literal\",\n            value: null,\n            raw: M.print_to_string(),\n            regex: { pattern, flags }\n        };\n    });\n\n    def_to_moz(AST_Constant, function To_Moz_Literal(M) {\n        var value = M.value;\n        if (typeof value === \"number\" && (value < 0 || (value === 0 && 1 / value < 0))) {\n            return {\n                type: \"UnaryExpression\",\n                operator: \"-\",\n                prefix: true,\n                argument: {\n                    type: \"Literal\",\n                    value: -value,\n                    raw: M.start.raw\n                }\n            };\n        }\n        return {\n            type: \"Literal\",\n            value: value,\n            raw: M.start.raw\n        };\n    });\n\n    def_to_moz(AST_Atom, function To_Moz_Atom(M) {\n        return {\n            type: \"Identifier\",\n            name: String(M.value)\n        };\n    });\n\n    def_to_moz(AST_BigInt, M => ({\n        type: \"BigIntLiteral\",\n        value: M.value\n    }));\n\n    AST_Boolean.DEFMETHOD(\"to_mozilla_ast\", AST_Constant.prototype.to_mozilla_ast);\n    AST_Null.DEFMETHOD(\"to_mozilla_ast\", AST_Constant.prototype.to_mozilla_ast);\n    AST_Hole.DEFMETHOD(\"to_mozilla_ast\", function To_Moz_ArrayHole() { return null; });\n\n    AST_Block.DEFMETHOD(\"to_mozilla_ast\", AST_BlockStatement.prototype.to_mozilla_ast);\n    AST_Lambda.DEFMETHOD(\"to_mozilla_ast\", AST_Function.prototype.to_mozilla_ast);\n\n    /* -----[ tools ]----- */\n\n    function raw_token(moznode) {\n        if (moznode.type == \"Literal\") {\n            return moznode.raw != null ? moznode.raw : moznode.value + \"\";\n        }\n    }\n\n    function my_start_token(moznode) {\n        var loc = moznode.loc, start = loc && loc.start;\n        var range = moznode.range;\n        return new AST_Token({\n            file    : loc && loc.source,\n            line    : start && start.line,\n            col     : start && start.column,\n            pos     : range ? range[0] : moznode.start,\n            endline : start && start.line,\n            endcol  : start && start.column,\n            endpos  : range ? range[0] : moznode.start,\n            raw     : raw_token(moznode),\n        });\n    }\n\n    function my_end_token(moznode) {\n        var loc = moznode.loc, end = loc && loc.end;\n        var range = moznode.range;\n        return new AST_Token({\n            file    : loc && loc.source,\n            line    : end && end.line,\n            col     : end && end.column,\n            pos     : range ? range[1] : moznode.end,\n            endline : end && end.line,\n            endcol  : end && end.column,\n            endpos  : range ? range[1] : moznode.end,\n            raw     : raw_token(moznode),\n        });\n    }\n\n    function map(moztype, mytype, propmap) {\n        var moz_to_me = \"function From_Moz_\" + moztype + \"(M){\\n\";\n        moz_to_me += \"return new U2.\" + mytype.name + \"({\\n\" +\n            \"start: my_start_token(M),\\n\" +\n            \"end: my_end_token(M)\";\n\n        var me_to_moz = \"function To_Moz_\" + moztype + \"(M){\\n\";\n        me_to_moz += \"return {\\n\" +\n            \"type: \" + JSON.stringify(moztype);\n\n        if (propmap) propmap.split(/\\s*,\\s*/).forEach(function(prop) {\n            var m = /([a-z0-9$_]+)([=@>%])([a-z0-9$_]+)/i.exec(prop);\n            if (!m) throw new Error(\"Can't understand property map: \" + prop);\n            var moz = m[1], how = m[2], my = m[3];\n            moz_to_me += \",\\n\" + my + \": \";\n            me_to_moz += \",\\n\" + moz + \": \";\n            switch (how) {\n                case \"@\":\n                    moz_to_me += \"M.\" + moz + \".map(from_moz)\";\n                    me_to_moz += \"M.\" +  my + \".map(to_moz)\";\n                    break;\n                case \">\":\n                    moz_to_me += \"from_moz(M.\" + moz + \")\";\n                    me_to_moz += \"to_moz(M.\" + my + \")\";\n                    break;\n                case \"=\":\n                    moz_to_me += \"M.\" + moz;\n                    me_to_moz += \"M.\" + my;\n                    break;\n                case \"%\":\n                    moz_to_me += \"from_moz(M.\" + moz + \").body\";\n                    me_to_moz += \"to_moz_block(M)\";\n                    break;\n                default:\n                    throw new Error(\"Can't understand operator in propmap: \" + prop);\n            }\n        });\n\n        moz_to_me += \"\\n})\\n}\";\n        me_to_moz += \"\\n}\\n}\";\n\n        moz_to_me = new Function(\"U2\", \"my_start_token\", \"my_end_token\", \"from_moz\", \"return(\" + moz_to_me + \")\")(\n            ast, my_start_token, my_end_token, from_moz\n        );\n        me_to_moz = new Function(\"to_moz\", \"to_moz_block\", \"to_moz_scope\", \"return(\" + me_to_moz + \")\")(\n            to_moz, to_moz_block, to_moz_scope\n        );\n        MOZ_TO_ME[moztype] = moz_to_me;\n        def_to_moz(mytype, me_to_moz);\n    }\n\n    var FROM_MOZ_STACK = null;\n\n    function from_moz(node) {\n        FROM_MOZ_STACK.push(node);\n        var ret = node != null ? MOZ_TO_ME[node.type](node) : null;\n        FROM_MOZ_STACK.pop();\n        return ret;\n    }\n\n    AST_Node.from_mozilla_ast = function(node) {\n        var save_stack = FROM_MOZ_STACK;\n        FROM_MOZ_STACK = [];\n        var ast = from_moz(node);\n        FROM_MOZ_STACK = save_stack;\n        return ast;\n    };\n\n    function set_moz_loc(mynode, moznode) {\n        var start = mynode.start;\n        var end = mynode.end;\n        if (!(start && end)) {\n            return moznode;\n        }\n        if (start.pos != null && end.endpos != null) {\n            moznode.range = [start.pos, end.endpos];\n        }\n        if (start.line) {\n            moznode.loc = {\n                start: {line: start.line, column: start.col},\n                end: end.endline ? {line: end.endline, column: end.endcol} : null\n            };\n            if (start.file) {\n                moznode.loc.source = start.file;\n            }\n        }\n        return moznode;\n    }\n\n    function def_to_moz(mytype, handler) {\n        mytype.DEFMETHOD(\"to_mozilla_ast\", function(parent) {\n            return set_moz_loc(this, handler(this, parent));\n        });\n    }\n\n    var TO_MOZ_STACK = null;\n\n    function to_moz(node) {\n        if (TO_MOZ_STACK === null) { TO_MOZ_STACK = []; }\n        TO_MOZ_STACK.push(node);\n        var ast = node != null ? node.to_mozilla_ast(TO_MOZ_STACK[TO_MOZ_STACK.length - 2]) : null;\n        TO_MOZ_STACK.pop();\n        if (TO_MOZ_STACK.length === 0) { TO_MOZ_STACK = null; }\n        return ast;\n    }\n\n    function to_moz_in_destructuring() {\n        var i = TO_MOZ_STACK.length;\n        while (i--) {\n            if (TO_MOZ_STACK[i] instanceof AST_Destructuring) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    function to_moz_block(node) {\n        return {\n            type: \"BlockStatement\",\n            body: node.body.map(to_moz)\n        };\n    }\n\n    function to_moz_scope(type, node) {\n        var body = node.body.map(to_moz);\n        if (node.body[0] instanceof AST_SimpleStatement && node.body[0].body instanceof AST_String) {\n            body.unshift(to_moz(new AST_EmptyStatement(node.body[0])));\n        }\n        return {\n            type: type,\n            body: body\n        };\n    }\n})();\n"],"names":["characters","str","split","member","name","array","includes","DefaultsError","Error","[object Object]","msg","defs","super","this","message","defaults","args","croak","ret","i","HOP","ecma","noop","return_false","return_true","return_this","return_null","MAP","a","f","backwards","top","doit","val","is_last","Last","v","AtTop","Splice","push","apply","slice","reverse","skip","Array","isArray","length","concat","at_top","splice","last","make_node","ctor","orig","props","start","end","push_uniq","el","string_template","text","replace","p","remove","mergeSort","cmp","_ms","m","Math","floor","left","right","b","r","ai","bi","merge","makePredicate","words","Set","map_add","map","key","value","has","get","set","obj","prop","Object","prototype","hasOwnProperty","call","keep_name","keep_setting","RegExp","test","lineTerminatorEscape","\n","\r"," "," ","regexp_source_fix","source","match","offset","has_annotation","node","annotation","_annotations","set_annotation","KEYWORDS","KEYWORDS_ATOM","RESERVED_WORDS","KEYWORDS_BEFORE_EXPRESSION","OPERATOR_CHARS","RE_NUM_LITERAL","RE_HEX_NUMBER","RE_OCT_NUMBER","RE_ES6_OCT_NUMBER","RE_BIN_NUMBER","RE_DEC_NUMBER","RE_BIG_INT","OPERATORS","WHITESPACE_CHARS","NEWLINE_CHARS","PUNC_AFTER_EXPRESSION","PUNC_BEFORE_EXPRESSION","PUNC_CHARS","UNICODE","ID_Start","ID_Continue","get_full_char","pos","is_surrogate_pair_head","charCodeAt","is_surrogate_pair_tail","charAt","code","is_digit","is_identifier_start","ch","is_identifier_char","is_basic_identifier_string","is_identifier_string","allow_surrogates","exec","index","parse_js_number","num","allow_e","NaN","parseInt","substr","parseFloat","JS_Parse_Error","filename","line","col","js_error","is_token","token","type","EX_EOF","tokenizer","$TEXT","html5_comments","shebang","S","tokpos","tokline","tokcol","newline_before","regex_allowed","brace_counter","template_braces","comments_before","directives","directive_stack","peek","next","signal_eof","in_string","forward","looking_at","find","what","indexOf","start_token","prev_was_dot","previous_token","is_comment","UNARY_POSTFIX","endline","endcol","endpos","nlb","file","raw","substring","comments_after","AST_Token","skip_whitespace","parse_error","err","read_num","prefix","has_e","after_e","has_x","has_dot","is_big_int","numeric_separator","pred","read_while","next_token","has_directive","endsWith","without_n","valid","isNaN","is_octal","read_escaped_char","strict_hex","template_string","String","fromCharCode","hex_bytes","result","strict_octal","read_octal_escape_sequence","n","digit","read_string","with_eof_error","quote","tok","read_template_characters","begin","content","tmp","pop","skip_line_comment","find_eol","skip_multiline_comment","surrogates","get_full_char_length","read_name","escaped","read_escaped_identifier_char","read_regexp","prev_backslash","in_class","flags","read_operator","grow","op","bigger","handle_slash","eof_error","cont","x","ex","force_regexp","word","context","nc","add_directive","directive","undefined","push_directives_stack","pop_directives_stack","UNARY_PREFIX","ASSIGNMENT","PRECEDENCE","j","ATOMIC_START_TOKEN","parse","options","outer_comments_before_counts","Map","bare_returns","expression","module","strict","toplevel","input","prev","peeked","in_function","in_async","in_generator","in_directives","in_loop","labels","is","ctx","token_error","unexpected","expect_token","expect","punc","has_newline_before","every","comment","can_insert_semicolon","is_in_generator","is_in_async","semicolon","optional","parenthesised","exp","embed_tokens","parser","expr","handle_regexp","statement","is_export_default","is_for_body","is_if_body","dir","stat","simple_statement","body","AST_String","AST_Directive","function_","AST_Defun","imported_name","imported_names","as_symbol","AST_SymbolImport","map_names","mod_str","AST_Import","module_name","import_","label","AST_Label","some","l","AST_IterationStatement","references","forEach","ref","AST_Continue","AST_LabeledStatement","labeled_statement","AST_BlockStatement","block_","AST_EmptyStatement","break_cont","AST_Break","AST_Debugger","condition","AST_Do","AST_While","for_await_error","await_tok","init","var_","let_","const_","is_in","is_of","AST_Definitions","definitions","is_assignable","to_destructuring","AST_Destructuring","AST_ForIn","object","for_in","is_await","lhs","AST_ForOf","await","for_of","step","AST_For","regular_for","for_","class_","AST_DefClass","cond","belse","AST_If","alternative","if_","AST_Return","AST_Switch","switch_body_","AST_Throw","bcatch","bfinally","parameter","AST_SymbolCatch","AST_Catch","argname","AST_Finally","AST_Try","try_","AST_With","is_default","exported_names","exported_value","exported_definition","AST_Export","AST_Lambda","AST_SimpleStatement","export_","ldef","AST_LabelRef","thedef","TYPE","arrow_function","argnames","is_async","_function_body","AST_Arrow","async","is_generator_property","in_statement","is_generator","AST_SymbolDefun","AST_SymbolLambda","AST_Function","AST_Accessor","AST_SymbolDeclaration","track_used_binding_identifiers","is_parameter","parameters","duplicate","default_assignment","spread","strict_mode","tracker","add_parameter","check_strict","add","mark_default_assignment","mark_spread","mark_strict_mode","is_strict","used_parameters","symbol_type","param","expand","binding_element","AST_DefaultAssign","operator","AST_Expansion","expand_token","elements","first","is_expand","first_token","AST_SymbolFunarg","AST_Hole","names","is_array","AST_ObjectKeyVal","property_token","property","as_property_name","block","generator","loop","current_generator","current_async","params","_verify_symbol","cur","branch","AST_Case","AST_Default","vardefs","no_in","kind","def","sym_type","AST_SymbolVar","AST_SymbolConst","AST_SymbolLet","AST_VarDef","AST_Var","AST_Let","AST_Const","as_atom_node","_make_symbol","AST_SymbolRef","AST_Number","AST_BigInt","AST_RegExp","AST_False","AST_True","AST_Null","to_fun_args","_","__","default_seen_above","insert_default","default_value","AST_Object","properties","AST_Array","AST_Assign","expr_atom","allow_calls","allow_arrows","subscripts","AST_NewTarget","newexp","expr_list","AST_New","annotate","new_","exprs","maybe_sequence","spread_token","invalid_sequence","trailing_comma","params_or_seq_","AST_Call","AST_Sequence","expressions","outer_comments_before","unshift","array_","object_or_destructuring_","func","cls","AST_ClassExpression","segments","AST_TemplateSegment","AST_TemplateString","closing","allow_trailing_comma","allow_empty","create_accessor","concise","concise_method_or_getset","AST_Node","KindOfClass","method","class_name","extends_","AST_SymbolDefClass","AST_SymbolClass","extends","is_class","get_method_name_ast","AST_SymbolMethod","is_static","AST_ConciseMethod","static","setter_token","AST_ObjectGetter","AST_ObjectSetter","AST_SymbolClassProperty","get_class_property_key_ast","AST_ClassProperty","map_name","is_import","make_symbol","foreign_name","foreign_type","AST_SymbolImportForeign","AST_SymbolExportForeign","AST_SymbolExport","AST_NameMapping","map_nameAsterisk","AST_This","AST_Super","sym","noerror","comments","comments_outside_parens","_PURE","_INLINE","_NOINLINE","AST_Dot","AST_Sub","call_args","AST_PrefixedTemplateString","maybe_unary","AST_Await","make_unary","AST_UnaryPrefix","AST_UnaryPostfix","expr_op","min_prec","prec","AST_Binary","maybe_conditional","expr_ops","yes","AST_Conditional","consequent","AST_PropAccess","AST_ObjectProperty","maybe_assign","star","has_expression","AST_Yield","is_star","_yield_expression","commas","AST_Toplevel","DEFNODE","methods","base","self_props","PROPS","proto","create","initialize","Function","BASE","SUBCLASSES","CTOR","constructor","SELF_PROPS","DEFMETHOD","_clone","deep","self","clone","transform","TreeTransformer","$documentation","$propdoc","_walk","visitor","_visit","walk","_children_backwards","warn_function","warn","txt","AST_Statement","walk_body","len","clone_block_scope","block_scope","AST_Block","AST_StatementWithBody","TreeWalker","AST_LoopControl","AST_DWLoop","AST_Scope","variables","functions","uses_with","uses_eval","parent_scope","enclosed","cname","get_defun_scope","is_block_scope","_block_scope","pinned","globals","wrap_commonjs","wrapped_tl","wrap_enclose","args_values","join","uses_arguments","args_as_names","out","all_symbols","AST_Symbol","seg","AST_Jump","AST_Exit","AST_SwitchBranch","name_import","name_export","AST_Unary","AST_Class","scope","AST_SymbolBlockDeclaration","AST_Constant","getValue","literal","AST_Atom","AST_NaN","AST_Undefined","AST_Infinity","AST_Boolean","cb","to_visit","bind","walk_abort","walk_parent","initial_stack","stack","parent_pop_indices","current","info","parent","visit_length","Symbol","callback","visit","descend","getPrototypeOf","st","before","after","def_transform","tw","in_list","transformed","after_ret","do_list","list","first_in_statement","EXPECT_DIRECTIVE","r_annotation","is_some_comments","OutputStream","readonly","ascii_only","beautify","braces","ie8","indent_level","indent_start","inline_script","keep_numbers","keep_quoted_props","max_line_len","preamble","preserve_annotations","quote_keys","quote_style","safari10","semicolons","shorthand","source_map","webkit","width","wrap_iife","wrap_func_args","comment_filter","regex_pos","lastIndexOf","indentation","current_col","current_line","current_pos","OUTPUT","printed_comments","to_utf8","identifier","get_full_char_code","toString","lone","encode_string","dq","sq","quote_single","quote_double","s","make_string","mapping_token","mapping_name","has_parens","might_need_space","might_need_semicolon","might_add_newline","need_newline_indented","need_space","newline_insert","mappings","do_add_mapping","mapping","cline","ccol","ensure_line_len","delta","requireSemicolonChars","print","indent","space","half","back","repeat","with_indent","next_indent","save_indentation","newline","force_semicolon","has_nlb","filter_comment","in_directive","use_asm","active_scope","current_width","should_break","comma","colon","print_name","make_name","print_string","escape_directive","encoded","print_template_string_chars","with_block","with_parens","with_square","add_mapping","option","opt","prepend_comments","return_with_value","shift","filter","c","last_nlb","append_comments","tail","insert","push_node","pop_node","DEFPRINT","nodetype","PARENS","display_body","is_toplevel","output","allow_directives","stmt","print_braced_empty","print_braced","parenthesize_for_noin","noin","parens","print_property_name","make_num","force_parens","_codegen","add_source_map","needs_parens","po","so","pp","sp","p1","startsWith","force_statement","make_block","_do_print_body","nokeyword","arg","_do_print","tag","parenthesize_tag","is_tagged","first_statement","returned","left_is_object","e","make_then","definition","mangled_name","get_name","allowShortHand","_print_getter_setter","r_slash_script","slash_script_replace","$1","digits","candidates","toLowerCase","best","best_of","DEFMAP","existing_flags","flag","delete","size","sort_regexp_flags","shallow_cmp","node1","node2","mkshallow","comparisons","keys","pass_through","label.name","other","function_defs","unmangleable_names","SymbolDef","eliminated","assignments","replaced","global","export","undeclared","id","next_id","chained","direct_access","recursive_refs","should_replace","single_use","fixed","seal","keep_fnames","eval","keep_classnames","cache","unmangleable","redefinition","redefined_catch_def","next_mangled","ext","base54","reserved","defun","in_destructuring","for_scopes","save_scope","init_scope_vars","the_block_scope","save_destructuring","save_defun","save_labels","def_function","mark_export","def_variable","mark_enclosed","find_variable","reference","level","exported","def_global","refs","g","_var_name_cache","varNames","var_names","_added_var_names","add_var_name","new_scope_enclosed_set","scope_ancestry","ancestry","to_enclose","scope_topdown","values","arguments","symbol","mangled_names","tricky_def","tricky_name","_default_mangler_options","lname","to_mangle","collect","save_nesting","mangle","avoid","to_avoid","add_def","reset","sort","find_colliding_names","rename","next_name","stream","_print","consider","skip_string","tail_node","print_to_string","leading","chars","frequency","compare","default_options","infer_options","0","component","minify","error","mangle_options","compressor","_size","list_overhead","lambda_modifiers","args_and_arrow","def_size","key_size","static_size","log10","has_flag","set_flag","clear_flag","Compressor","false_by_default","arrows","booleans","booleans_as_integers","collapse_vars","computed_props","conditionals","dead_code","drop_console","drop_debugger","evaluate","global_defs","hoist_funs","hoist_props","hoist_vars","if_return","inline","join_vars","keep_fargs","keep_infinity","loops","negate_iife","passes","pure_getters","pure_funcs","reduce_funcs","reduce_vars","sequences","side_effects","switches","top_retain","typeofs","unsafe","unsafe_arrows","unsafe_comps","unsafe_Function","unsafe_math","unsafe_symbols","unsafe_methods","unsafe_proto","unsafe_regexp","unsafe_undefined","unused","warnings","funcs","vars","sequences_limit","warnings_produced","evaluated_regexps","resolve_defines","process_expression","min_count","stopping","pass","figure_out_scope","reset_opt_flags","count","was_scope","hoist_properties","hoist_declarations","optimize","drop_unused","def_optimize","optimizer","read_property","get_value","make_node_from_constant","fixed_value","is_modified","immutable","is_lhs","is_expr_pure","contains_this","is_func_expr","is_lhs_read_only","is_immutable","is_ref_of","find_scope","make_sequence","reduce","merge_sequence","isFinite","maintain_this_binding","as_statement_array","thing","is_empty","can_be_evicted_from_block","loop_body","is_iife_call","is_undeclared_ref","tree1","tree2","walk_1_state","walk_2_state","walk_1_push","walk_2_push","node_1","node_2","equivalent_to","tt","drop_side_effect_free","def_reduce_vars","reset_def","exposed","reset_variables","defs_to_safe_ids","safe_ids","mark","loop_ids","reset_block_variables","safe","safe_to_read","safe_to_assign","def_safe_ids","mark_escaped","d","depth","is_constant","is_constant_expression","lazy_op","suppress","eq","iife","arg_name","saved_loop","has_break_or_continue","recursive_ref","ref_once","preparation","SQUEEZED","global_names","def_is_string","identifier_atom","is_identifier_atom","tighten_body","statements","in_try","find_parent","find_loop_scope_try","CHANGED","max_iter","eliminate_spurious_blocks","eliminate_dead_code","handle_if_return","sequencesize","sequencesize_2","join_consecutive_vars","collapse","stat_index","scanner","abort","hit","hit_stack","hit_index","handle_custom_scan_order","stop_after","find_stop","write_only","lvalues","replace_all","is_declared","pure_prop_access_globals","stop_if_hit","lhs_local","can_replace","value_def","candidate","funarg","may_modify","may_throw_on_access","may_throw","has_side_effects","side_effects_external","multi_replacer","extract_args","extract_candidates","get_lhs","get_lvalues","is_lhs_local","value_has_side_effects","replace_all_symbols","remove_candidate","has_overlapping_symbol","fn","fn_strict","found","scan_this","cur_scope","redefined_within_scope","referenced","var_def","mangleable_var","get_rvalue","min","unary_side_effects","seen_dirs","multiple_if_returns","has_multiple_if_returns","in_lambda","next_index","ab","can_merge_flow","aborts","negate","as_statement_array_with_return","extract_functions","prev_index","lct","loopcontrol_target","is_return_void","declarations_only","has_quit","extract_declarations_from_unreachable_code","seq","push_seq","to_simple_statement","decls","cons_seq","alt","join_object_assignments","defn","trimmed","diff","extract_object_assignments","target","remove_initializers","is_undefined","def_may_throw_on_access","_dot_throw","def_is_boolean","unary_bool","binary_bool","is_boolean","def_is_number","unary","binary","is_number","is_string","best_of_expression","ast1","ast2","best_of_statement","convert_to_predicate","def_find_defs","_find_defs","child","suffix","defines","to_node","object_fns","native_fns","Boolean","Number","static_fns","def_eval","_eval","unaryPrefix","evaluated","element","non_converting_unary","non_converting_binary","pow","global_objs","static_values","aa","first_arg","static_value","static_fn","native_fn","def_negate","basic_negation","negated","global_pure_fns","def_has_side_effects","any","is_call_pure","computed_key","def_may_throw","def_is_constant_expression","all_refs_local","scope_def","def_aborts","block_aborts","opt_AST_Lambda","r_keep_assign","retain_top_func","drop_funcs","drop_vars","assign_as_unused","in_use_ids","fixed_ids","var_defs_by_id","initializations","node_def","in_export","scan_ref_scoped","in_use","trim","unreferenced","template","drop_block","head","is_destructure","var_defs","assign","redef","dirs","hoisted","vars_found","var_decl","to_assignments","is_lambda","defs_by_id","hoister","make_sym","new_var","make_var_name","def_drop_side_effect_free","nodes","changed","with_effects","trimmed_extends","trimmed_prop","if_break_in_loop","is_break","drop_it","rest","self_condition_length","negated_length","negated_is_best","default_branch","exact_match","decl","eliminate_branch","default_index","has_break","varDef","inline_array_like_spread","simple_args","is_func","rx","EXIT","separator","consts","ast","fun","comp","compute_char_frequency","mangle_names","is_regular_func","can_inline","returned_value","nearest_scope","return_value","can_flatten_body","block_scoped","variable","safe_to_inject","can_inject_vars","can_inject_args","arg_vals_outer_refs","value_walker","scope_outer_refs","can_inject_args_values","is_reachable","can_inject_symbols","scope_encloses_variables_in_this_scope","add_child_scope","append_var","flatten_args","lines","flatten_vars","flatten_fn","ev","trim_right_for_undefined","lift_sequences","in_boolean_context","commutativeOperators","pulled_scope","looked_up","is_atomic","find_ref","reversible","is_strict_comparison","combined","ll","rr","lr","is_nullish","associative","reversed","within_array_or_object_literal","defun_def","lambda_def","value_length","name_length","overhead","undef","ASSIGN_OPS","ASSIGN_OPS_COMMUTATIVE","safe_to_flatten","literals_in_boolean_context","lift_key","evaluateRight","arg_index","single_arg_diff","check","check_subject","nullish_side","null_cmp","undefined_cmp","find_comparison","defined_side","is_nullish_check","in_bool","is_true","is_false","booleanize","OPT_ARGUMENTS","sub","flatten_object","retValue","FLATTEN","flatten","k","optimized","segment","inners","arrow","ancestors","is_destructuring_export_decl","keep","elem","should_retain","domprops","reserve_quoted_keys","addStrings","mangle_properties","reserved_option","builtins","debug","keep_quoted","only_cache","regex","objects","global_ref","new_global","Date","ArrayBuffer","DataView","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","EvalError","Float32Array","Float64Array","Int8Array","Int16Array","Int32Array","JSON","Promise","Proxy","RangeError","ReferenceError","Reflect","SyntaxError","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","URIError","WeakMap","WeakSet","getOwnPropertyNames","find_builtins","debug_name_suffix","names_to_mangle","keep_quoted_strict","declared","root","mangleStrings","can_mangle","should_mangle","mangled","debug_mangled","to_ascii","atob","b64","Buffer","from","to_base64","btoa","set_shorthand","init_cache","map_from_object","cache_to_json","files","quoted_props","timings","compress","enclose","nameCache","sourceMap","wrap","now","asObject","includeSources","url","warning","orig_line_diff","dest_line_diff","MOZ_SourceMap","SourceMapGenerator","sourceRoot","orig_map","SourceMapConsumer","sources","sourceContent","sourceContentFor","setSourceContent","gen_line","gen_col","orig_line","orig_col","originalPositionFor","column","addMapping","generated","original","stringify","toJSON","SourceMap","total","normalize_directives","MOZ_TO_ME","Program","M","my_start_token","my_end_token","from_moz","ArrayPattern","elm","ObjectPattern","AssignmentPattern","SpreadElement","argument","RestElement","TemplateElement","cooked","TemplateLiteral","quasis","TaggedTemplateExpression","quasi","FunctionDeclaration","FunctionExpression","ArrowFunctionExpression","ExpressionStatement","TryStatement","handlers","handler","guardedHandlers","finalizer","Property","computed","MethodDefinition","FieldDefinition","ArrayExpression","ObjectExpression","SequenceExpression","MemberExpression","SwitchCase","VariableDeclaration","declarations","ImportDeclaration","specifiers","specifier","imported","local","ExportAllDeclaration","ExportNamedDeclaration","declaration","ExportDefaultDeclaration","Literal","pattern","rx_source","MetaProperty","meta","Identifier","FROM_MOZ_STACK","BigIntLiteral","raw_token","moznode","loc","range","moztype","mytype","propmap","moz_to_me","me_to_moz","moz","how","my","to_moz","to_moz_block","to_moz_scope","def_to_moz","UpdateExpression","UnaryExpression","ClassDeclaration","ClassExpression","superClass","to_moz_in_destructuring","guard","name_mapping","isComputed","string_or_num","to_mozilla_ast","mynode","from_mozilla_ast","save_stack","TO_MOZ_STACK"],"mappings":"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AAK0/B,EAAU53C,GAAGoE,KAAK6lB,EAAO/R,MAC1B,OAAO,EAEXlY,KAEJ,OAAO,EA5BH63C,CAA6B3b,GAAa,CAE9C,IADA,IAAI4b,EAAO,GACFv4C,EAAI,EAAGA,EAAI+lB,EAAKvK,MAAM7Z,OAAQ3B,IAAK,CACxC,IAAIw4C,EAAOzyB,EAAKvK,MAAMxb,GAChBw4C,aAAgB98B,IACI,iBAAZ88B,EAAKz0C,KACZy0C,EAAKx0C,iBAAiByV,KACrBg/B,EAAc9b,EAAY6b,EAAKx0C,MAAM+wB,eACzCwjB,EAAKn3C,KAAKo3C,GAGdD,EAAK52C,QAAUokB,EAAKvK,MAAM7Z,SAC1BokB,EAAKvK,MAAQ+8B,GAGrB,OAAOxyB,EAgBP,SAAS0yB,EAAc9b,EAAY/f,GAC/B,QAAIA,EAAIzI,WAAWxS,UACdib,EAAIqa,UACL0F,EAAWjsB,SAAS2vB,QACf1D,EAAW2C,YACJ3C,EAAW2C,WAAW1iB,QCr6OvC,IAAI87B,GAAW,CAClB,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,aACA,YACA,SACA,oBACA,iBACA,kBACA,WACA,2BACA,2BACA,uBACA,UACA,QACA,aACA,WACA,SACA,WACA,0BACA,eACA,uBACA,mBACA,iBACA,YACA,oBACA,eACA,iBACA,qBACA,mBACA,6BACA,QACA,cACA,OACA,QACA,cACA,wBACA,eACA,uBACA,gBACA,YACA,aACA,uBACA,mBACA,yBACA,OACA,yBACA,WACA,QACA,cACA,kBACA,gBACA,iBACA,uBACA,qBACA,kBACA,gBACA,YACA,OACA,OACA,eACA,YACA,YACA,YACA,OACA,wBACA,iBACA,cACA,eACA,OACA,oBACA,UACA,WACA,iBACA,kBACA,oBACA,mBACA,OACA,YACA,UACA,kBACA,MACA,eACA,qBACA,SACA,eACA,WACA,gBACA,QACA,SACA,UACA,oBACA,mBACA,oBACA,kBACA,eACA,iBACA,gCACA,gCACA,gCACA,+BACA,6BACA,aACA,iBACA,iBACA,iBACA,qBACA,eACA,qBACA,MACA,iBACA,iBACA,mBACA,sBACA,kBACA,2BACA,kBACA,gBACA,kBACA,mBACA,eACA,qBACA,mBACA,cACA,oBACA,UACA,cACA,sBACA,eACA,gBACA,kBACA,iBACA,WACA,eACA,0BACA,mBACA,kBACA,WACA,SACA,cACA,aACA,UACA,gBACA,UACA,UACA,kBACA,wBACA,sBACA,oBACA,yBACA,uBACA,wBACA,oBACA,qBACA,uBACA,sBACA,mBACA,WACA,SACA,YACA,SACA,cACA,UACA,aACA,eACA,SACA,SACA,aACA,SACA,iBACA,kBACA,sBACA,SACA,SACA,UACA,WACA,eACA,aACA,eACA,cACA,cACA,cACA,QACA,YACA,cACA,aACA,aACA,aACA,WACA,YACA,YACA,aACA,gBACA,kBACA,iBACA,iBACA,iBACA,cACA,UACA,iBACA,SACA,WACA,WACA,SACA,YACA,iBACA,kBACA,wBACA,SACA,KACA,iBACA,gBACA,2BACA,gBACA,oBACA,sBACA,gBACA,aACA,iBACA,YACA,iBACA,aACA,WACA,eACA,UACA,mBACA,UACA,cACA,gBACA,UACA,SACA,YACA,cACA,eACA,iBACA,WACA,WACA,OACA,YACA,gBACA,mBACA,aACA,mBACA,oBACA,kBACA,oBACA,aACA,cACA,gBACA,2BACA,aACA,kBACA,iBACA,iBACA,kBACA,eACA,WACA,uBACA,SACA,yBACA,gBACA,iCACA,6BACA,iCACA,8BACA,4CACA,8BACA,qBACA,YACA,WACA,eACA,oBACA,sBACA,YACA,oBACA,YACA,WACA,mBACA,UACA,UACA,cACA,kBACA,aACA,qBACA,uBACA,gBACA,eACA,eACA,sBACA,iBACA,iBACA,kBACA,wBACA,+BACA,uBACA,4BACA,8BACA,0BACA,yBACA,0BACA,2BACA,yBACA,4BACA,wBACA,0BACA,0BACA,yBACA,4BACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,gBACA,aACA,aACA,eACA,mBACA,kBACA,YACA,cACA,WACA,mBACA,oBACA,oBACA,oBACA,WACA,gBACA,mBACA,oBACA,eACA,uBACA,6BACA,qBACA,eACA,eACA,sBACA,iBACA,iBACA,eACA,cACA,WACA,iBACA,gBACA,gBACA,gBACA,sBACA,cACA,WACA,cACA,aACA,eACA,gBACA,eACA,gBACA,qBACA,iBACA,eACA,WACA,YACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,YACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,YACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,YACA,YACA,YACA,YACA,YACA,YACA,eACA,eACA,WACA,sBACA,WACA,gBACA,eACA,cACA,cACA,mBACA,cACA,sBACA,WACA,gBACA,WACA,eACA,WACA,cACA,eACA,WACA,cACA,kBACA,mBACA,WACA,cACA,oBACA,kBACA,WACA,oBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,kBACA,WACA,eACA,iBACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,mBACA,mBACA,oBACA,kBACA,sBACA,4BACA,oBACA,WACA,aACA,kBACA,gBACA,mBACA,iBACA,eACA,iBACA,gBACA,cACA,cACA,cACA,eACA,qBACA,oBACA,oBACA,WACA,uBACA,eACA,WACA,cACA,gBACA,eACA,WACA,qBACA,gBACA,mBACA,mBACA,eACA,eACA,eACA,eACA,kBACA,WACA,aACA,eACA,WACA,oBACA,cACA,iBACA,YACA,WACA,qBACA,qBACA,mBACA,WACA,aACA,gBACA,oBACA,uBACA,sBACA,sBACA,sBACA,yBACA,uBACA,sBACA,uBACA,sBACA,wBACA,0BACA,yBACA,4BACA,yBACA,4BACA,sBACA,qBACA,qBACA,qBACA,uBACA,wBACA,WACA,6BACA,iCACA,kCACA,kCACA,8BACA,mCACA,4BACA,2BACA,2BACA,4BACA,2BACA,2BACA,mCACA,kCACA,6BACA,6BACA,6BACA,2BACA,qBACA,qBACA,6BACA,wBACA,qBACA,0BACA,qBACA,kCACA,2BACA,yBACA,mBACA,sBACA,0BACA,gCACA,qBACA,oBACA,4BACA,wBACA,0BACA,oBACA,sBACA,sBACA,yBACA,0BACA,wBACA,wBACA,2BACA,8BACA,qBACA,mBACA,sBACA,0BACA,wBACA,0BACA,0BACA,wBACA,oCACA,kCACA,iCACA,wBACA,wBACA,wBACA,wBACA,wBACA,wBACA,wBACA,wBACA,wBACA,wBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,2BACA,wBACA,qBACA,6BACA,uBACA,wBACA,qBACA,wBACA,wBACA,0BACA,oCACA,kCACA,sBACA,4BACA,yBACA,oBACA,qBACA,4BACA,qBACA,yBACA,uBACA,sBACA,sBACA,yBACA,2BACA,0BACA,oBACA,wBACA,uBACA,sBACA,4BACA,6BACA,0BACA,+BACA,4BACA,4BACA,qBACA,6BACA,6BACA,4BACA,0BACA,uBACA,qBACA,qBACA,sBACA,6BACA,wBACA,sBACA,qBACA,yBACA,wBACA,wBACA,0BACA,yBACA,qBACA,sBACA,yBACA,2BACA,uBACA,wBACA,wBACA,wBACA,oBACA,4BACA,sBACA,qBACA,wBACA,wBACA,6BACA,qBACA,qBACA,oBACA,qBACA,uBACA,wBACA,yBACA,WACA,WACA,cACA,OACA,YACA,cACA,WACA,YACA,YACA,eACA,cACA,eACA,mBACA,uBACA,WACA,OACA,iBACA,YACA,sBACA,4BACA,mBACA,oBACA,yBACA,uBACA,gBACA,2BACA,WACA,mBACA,eACA,YACA,yBACA,IACA,uBACA,+BACA,eACA,QACA,eACA,QACA,aACA,eACA,cACA,wBACA,UACA,QACA,aACA,QACA,uBACA,UACA,eACA,SACA,kBACA,QACA,aACA,YACA,QACA,iBACA,cACA,cACA,WACA,UACA,UACA,gBACA,mBACA,gBACA,cACA,iBACA,0BACA,QACA,aACA,aACA,aACA,aACA,aACA,aACA,QACA,iBACA,2BACA,kBACA,sCACA,cACA,qCACA,qCACA,+CACA,uCACA,sBACA,uBACA,oCACA,oCACA,4CACA,0BACA,QACA,iBACA,aACA,WACA,wBACA,gBACA,OACA,YACA,OACA,YACA,WACA,aACA,aACA,eACA,eACA,aACA,WACA,WACA,WACA,uBACA,SACA,UACA,aACA,WACA,UACA,gBACA,eACA,eACA,oBACA,mBACA,mBACA,gBACA,eACA,mBACA,SACA,wBACA,WACA,YACA,aACA,WACA,aACA,kBACA,OACA,oBACA,oBACA,oBACA,kBACA,mBACA,gBACA,kBACA,sBACA,wBACA,kBACA,oBACA,oBACA,iBACA,qBACA,qBACA,mBACA,kBACA,sBACA,qBACA,oBACA,uBACA,iBACA,eACA,cACA,mBACA,sBACA,kBACA,6BACA,kBACA,mBACA,sBACA,gBACA,kBACA,qBACA,kBACA,oBACA,mBACA,mBACA,qBACA,oBACA,gBACA,mBACA,oBACA,kBACA,iBACA,qBACA,mBACA,kBACA,sBACA,kBACA,mBACA,iBACA,mBACA,oBACA,sBACA,oBACA,wBACA,oBACA,uBACA,mBACA,qBACA,iBACA,sBACA,2BACA,mBACA,oBACA,oBACA,oBACA,oBACA,kBACA,mBACA,0BACA,uBACA,sBACA,mBACA,sBACA,0BACA,sBACA,sBACA,kBACA,mBACA,mBACA,mBACA,qBACA,mBACA,kBACA,UACA,UACA,eACA,aACA,gBACA,gBACA,aACA,gBACA,cACA,YACA,qBACA,cACA,uBACA,aACA,gBACA,iBACA,WACA,cACA,iBACA,iBACA,mBACA,aACA,iBACA,wBACA,OACA,mCACA,iCACA,cACA,OACA,YACA,iBACA,MACA,WACA,WACA,WACA,sBACA,qBACA,wBACA,eACA,yBACA,gCACA,2BACA,wBACA,oBACA,oBACA,gBACA,mBACA,SACA,eACA,QACA,cACA,YACA,WACA,aACA,qBACA,iBACA,aACA,aACA,YACA,SACA,gBACA,OACA,4BACA,WACA,OACA,OACA,UACA,iBACA,gBACA,WACA,QACA,WACA,gBACA,uBACA,gCACA,uBACA,SACA,OACA,SACA,kBACA,uBACA,wBACA,QACA,YACA,aACA,aACA,cACA,OACA,OACA,MACA,SACA,UACA,SACA,QACA,UACA,WACA,YACA,UACA,cACA,iBACA,YACA,kBACA,mBACA,WACA,mCACA,4BACA,+BACA,wBACA,mBACA,0BACA,iCACA,mBACA,YACA,sBACA,qBACA,iCACA,6BACA,oBACA,oBACA,mBACA,sBACA,oBACA,8BACA,sBACA,sBACA,8BACA,sBACA,uBACA,uBACA,aACA,eACA,aACA,YACA,mBACA,YACA,kBACA,oBACA,mBACA,eACA,YACA,YACA,YACA,WACA,YACA,UACA,qBACA,oBACA,oBACA,oBACA,sBACA,mBACA,iBACA,mBACA,qBACA,uBACA,wBACA,qBACA,yBACA,sBACA,uBACA,qBACA,uBACA,2CACA,kCACA,qCACA,iCACA,gCACA,8BACA,2BACA,6BACA,+BACA,kCACA,kCACA,iCACA,gCACA,kCACA,kCACA,gCACA,yBACA,yBACA,yBACA,iCACA,yBACA,0BACA,0BACA,MACA,OACA,kBACA,eACA,8BACA,sBACA,aACA,gBACA,gBACA,uBACA,sBACA,kBACA,oBACA,uBACA,YACA,YACA,iBACA,sBACA,gBACA,cACA,cACA,kCACA,6BACA,mBACA,mBACA,wBACA,iBACA,eACA,cACA,UACA,WACA,gBACA,aACA,mBACA,eACA,oBACA,wBACA,uBACA,uBACA,6BACA,mBACA,wBACA,6BACA,gBACA,wBACA,aACA,wBACA,eACA,oBACA,oBACA,oBACA,iBACA,sBACA,uBACA,iBACA,sBACA,sBACA,sBACA,qBACA,cACA,kBACA,aACA,qBACA,eACA,aACA,eACA,qBACA,sBACA,iBACA,gBACA,eACA,gBACA,qBACA,qBACA,qBACA,iBACA,aACA,wBACA,eACA,yBACA,0BACA,0BACA,aACA,iBACA,eACA,iBACA,cACA,gBACA,yBACA,sBACA,YACA,mBACA,6BACA,8BACA,0BACA,2BACA,gBACA,kBACA,iBACA,uBACA,kBACA,mBACA,cACA,gBACA,iBACA,aACA,mBACA,yBACA,wBACA,yBACA,oBACA,eACA,qBACA,oBACA,gBACA,qBACA,wBACA,wBACA,8BACA,eACA,eACA,gBACA,gBACA,oBACA,kBACA,gBACA,mBACA,iBACA,gBACA,iBACA,UACA,wBACA,yBACA,oBACA,gBACA,cACA,eACA,iBACA,kBACA,oBACA,QACA,MACA,OACA,oBACA,SACA,aACA,cACA,wBACA,cACA,OACA,oBACA,gBACA,QACA,WACA,kBACA,gBACA,mBACA,oBACA,sBACA,SACA,WACA,8BACA,cACA,iCACA,MACA,eACA,YACA,cACA,qBACA,OACA,aACA,eACA,WACA,WACA,eACA,mBACA,SACA,eACA,WACA,MACA,2BACA,2BACA,sBACA,sBACA,sBACA,sBACA,OACA,SACA,UACA,6BACA,6BACA,gBACA,SACA,8BACA,sBACA,sBACA,SACA,iBACA,gBACA,iBACA,YACA,YACA,kBACA,kBACA,oBACA,4BACA,4BACA,mCACA,mCACA,gCACA,gCACA,uCACA,uCACA,qBACA,gCACA,gCACA,qBACA,8BACA,8BACA,qBACA,qBACA,kBACA,kBACA,UACA,oBACA,aACA,KACA,gBACA,SACA,wBACA,sBACA,uBACA,uBACA,oBACA,OACA,oBACA,8BACA,kBACA,sBACA,eACA,mBACA,aACA,SACA,cACA,mBACA,kBACA,qBACA,wBACA,4BACA,oBACA,eACA,SACA,cACA,gBACA,oBACA,wBACA,gBACA,UACA,mBACA,QACA,cACA,mBACA,IACA,YACA,qBACA,iBACA,YACA,gBACA,aACA,WACA,UACA,eACA,0BACA,uBACA,yBACA,0BACA,0BACA,sBACA,+BACA,wBACA,4BACA,qBACA,WACA,yCACA,wBACA,8BACA,yCACA,8BACA,2BACA,SACA,UACA,MACA,SACA,UACA,OACA,QACA,WACA,qBACA,4BACA,sBACA,kBACA,4BACA,iBACA,eACA,wBACA,iBACA,gBACA,QACA,aACA,iBACA,mBACA,OACA,iBACA,SACA,UACA,WACA,aACA,eACA,UACA,2BACA,iBACA,kBACA,yBACA,wBACA,WACA,kBACA,cACA,eACA,mBACA,iBACA,aACA,YACA,eACA,eACA,SACA,gBACA,iBACA,uBACA,mBACA,kBACA,cACA,2BACA,aACA,QACA,UACA,WACA,iBACA,qBACA,eACA,gBACA,yBACA,qBACA,eACA,cACA,wBACA,gBACA,8BACA,YACA,OACA,aACA,eACA,UACA,QACA,SACA,YACA,qBACA,YACA,eACA,iBACA,cACA,qBACA,oBACA,oBACA,+BACA,+BACA,mBACA,0BACA,yBACA,eACA,qBACA,sBACA,eACA,eACA,gBACA,iBACA,0BACA,0BACA,cACA,eACA,qBACA,oBACA,cACA,cACA,aACA,gBACA,gBACA,cACA,wBACA,qBACA,yBACA,WACA,yBACA,oBACA,0BACA,6BACA,mBACA,qBACA,yBACA,qBACA,oBACA,wBACA,oBACA,wBACA,iCACA,kBACA,oBACA,2BACA,sBACA,mBACA,qBACA,WACA,sCACA,mBACA,iBACA,iBACA,oBACA,cACA,aACA,qBACA,yBACA,oBACA,eACA,oBACA,0BACA,gCACA,wBACA,6BACA,8BACA,8BACA,2BACA,yBACA,oBACA,oBACA,oBACA,oBACA,oBACA,2BACA,oBACA,oBACA,wBACA,yBACA,qBACA,yBACA,+BACA,wBACA,mBACA,yBACA,mBACA,iBACA,qBACA,2BACA,yBACA,wBACA,wBACA,0BACA,cACA,qBACA,kBACA,qBACA,qBACA,qBACA,kBACA,kBACA,YACA,gBACA,iBACA,2BACA,kBACA,mBACA,iBACA,YACA,qBACA,yBACA,YACA,gBACA,WACA,iBACA,aACA,mBACA,mBACA,sBACA,4BACA,4BACA,kCACA,kCACA,gCACA,gCACA,sCACA,sCACA,sBACA,gCACA,gCACA,sBACA,8BACA,8BACA,iBACA,sBACA,sBACA,oBACA,WACA,eACA,oBACA,qBACA,yBACA,2BACA,UACA,iBACA,qBACA,gBACA,mBACA,gBACA,iBACA,gBACA,kBACA,mBACA,mBACA,iBACA,kBACA,wBACA,iBACA,qBACA,4BACA,kBACA,eACA,mBACA,eACA,gBACA,kBACA,iBACA,cACA,gBACA,eACA,oBACA,qBACA,oBACA,wBACA,4BACA,gBACA,gBACA,gBACA,gBACA,sBACA,6BACA,yBACA,kCACA,wBACA,yBACA,oBACA,uBACA,oBACA,yBACA,8BACA,+BACA,0BACA,8BACA,6BACA,8BACA,uBACA,2BACA,8BACA,4BACA,0BACA,2BACA,8BACA,0BACA,8BACA,2BACA,mCACA,0CACA,gCACA,kCACA,iCACA,wCACA,qCACA,wCACA,sCACA,qCACA,uCACA,sCACA,gCACA,8BACA,+BACA,gCACA,mCACA,+BACA,wBACA,oBACA,qBACA,qBACA,oBACA,oBACA,wBACA,oBACA,4BACA,oBACA,oBACA,yBACA,8BACA,0BACA,iCACA,0BACA,yBACA,4BACA,qBACA,yBACA,4BACA,uBACA,wBACA,0BACA,iCACA,gCACA,kCACA,6BACA,qBACA,yBACA,kCACA,wBACA,oBACA,iCACA,yBACA,6BACA,sCACA,+BACA,kCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,uBACA,2BACA,0BACA,2BACA,0BACA,wBACA,yBACA,uBACA,uBACA,sBACA,sBACA,sBACA,0BACA,wBACA,mCACA,iCACA,8BACA,kCACA,wBACA,+BACA,qBACA,yBACA,yBACA,yBACA,aACA,aACA,SACA,oBACA,SACA,sBACA,kBACA,+BACA,YACA,gBACA,yBACA,4BACA,qBACA,MACA,aACA,eACA,qBACA,uBACA,2BACA,gBACA,UACA,eACA,SACA,aACA,iBACA,eACA,SACA,cACA,YACA,4BACA,8BACA,8BACA,4BACA,6BACA,+BACA,UACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,YACA,YACA,WACA,WACA,WACA,WACA,WACA,WACA,aACA,qBACA,2BACA,mBACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,qBACA,6BACA,qBACA,iBACA,iBACA,YACA,UACA,cACA,gBACA,2BACA,WACA,YACA,eACA,iBACA,oBACA,WACA,oBACA,gBACA,cACA,gBACA,OACA,cACA,cACA,YACA,cACA,YACA,eACA,mBACA,gBACA,YACA,aACA,QACA,aACA,YACA,aACA,kBACA,aACA,YACA,UACA,WACA,cACA,eACA,0BACA,wBACA,+BACA,+BACA,mBACA,qCACA,sBACA,iCACA,oBACA,SACA,gBACA,eACA,iBACA,yBACA,yBACA,uBACA,6BACA,cACA,WACA,MACA,kBACA,eACA,mBACA,MACA,cACA,cACA,aACA,oBACA,qBACA,+BACA,qBACA,kBACA,iBACA,iBACA,SACA,UACA,iBACA,cACA,qCACA,oCACA,8BACA,iCACA,8BACA,2BACA,6BACA,2BACA,gBACA,WACA,gBACA,UACA,WACA,gBACA,SACA,YACA,gBACA,mBACA,qBACA,wBACA,uBACA,qBACA,qBACA,iBACA,UACA,UACA,kBACA,cACA,oBACA,mBACA,eACA,oBACA,wBACA,cACA,6BACA,eACA,uBACA,mBACA,uBACA,oBACA,sBACA,uBACA,wBACA,yBACA,kBACA,sBACA,0BACA,gBACA,gBACA,sBACA,6BACA,wBACA,kBACA,oBACA,yBACA,kBACA,wCACA,cACA,mBACA,qBACA,yBACA,wBACA,YACA,aACA,SACA,SACA,cACA,iBACA,4BACA,0BACA,8BACA,uBACA,gBACA,qCACA,iBACA,iBACA,kBACA,kBACA,cACA,gBACA,OACA,SACA,SACA,mBACA,mBACA,mBACA,mBACA,UACA,YACA,gBACA,IACA,QACA,OACA,QACA,MACA,WACA,eACA,+BACA,cACA,SACA,gBACA,aACA,YACA,iBACA,WACA,OACA,QACA,SACA,YACA,SACA,aACA,gBACA,sBACA,oBACA,gBACA,MACA,cACA,eACA,eACA,SACA,aACA,mBACA,YACA,gBACA,aACA,kBACA,YACA,cACA,WACA,cACA,UACA,aACA,WACA,YACA,UACA,kBACA,kBACA,YACA,eACA,WACA,sBACA,aACA,iBACA,kBACA,SACA,YACA,MACA,UACA,QACA,YACA,QACA,gBACA,cACA,aACA,eACA,aACA,YACA,oBACA,aACA,MACA,aACA,kBACA,oBACA,QACA,MACA,cACA,UACA,SACA,UACA,WACA,mBACA,YACA,kBACA,SACA,aACA,eACA,UACA,QACA,UACA,UACA,uBACA,gCACA,sBACA,iBACA,YACA,kBACA,sBACA,qBACA,sBACA,4BACA,iBACA,uBACA,4BACA,iBACA,qBACA,oBACA,oBACA,0BACA,gBACA,qBACA,qBACA,0BACA,mBACA,cACA,MACA,MACA,cACA,kBACA,UACA,mBACA,aACA,SACA,eACA,cACA,aACA,aACA,eACA,cACA,aACA,eACA,kBACA,oBACA,UACA,mBACA,QACA,eACA,MACA,QACA,UACA,QACA,YACA,cACA,OACA,QACA,SACA,SACA,QACA,QACA,OACA,QACA,QACA,OACA,cACA,eACA,eACA,cACA,SACA,aACA,WACA,kBACA,gBACA,qBACA,oBACA,aACA,cACA,gBACA,aACA,iBACA,eACA,cACA,YACA,WACA,cACA,YACA,WACA,aACA,eACA,YACA,WACA,OACA,OACA,UACA,IACA,OACA,sBACA,qBACA,aACA,wBACA,wBACA,kBACA,mBACA,mBACA,oBACA,sBACA,oBACA,kBACA,uBACA,sBACA,iBACA,kBACA,kBACA,mBACA,qBACA,sBACA,sBACA,mBACA,iBACA,WACA,UACA,iBACA,iBACA,WACA,aACA,UACA,UACA,gBACA,UACA,OACA,eACA,iBACA,YACA,WACA,iBACA,eACA,eACA,OACA,gBACA,UACA,eACA,OACA,MACA,aACA,OACA,qBACA,aACA,kBACA,mBACA,cACA,aACA,gBACA,wBACA,YACA,oBACA,QACA,OACA,iBACA,OACA,OACA,OACA,WACA,OACA,YACA,eACA,SACA,gBACA,sBACA,4BACA,6BACA,sBACA,sBACA,kBACA,eACA,eACA,sBACA,sBACA,qBACA,sBACA,qBACA,cACA,oBACA,oBACA,oBACA,gBACA,eACA,qBACA,qBACA,qBACA,iBACA,eACA,aACA,mBACA,yBACA,0BACA,mBACA,mBACA,eACA,eACA,oBACA,yBACA,0BACA,oBACA,oBACA,iBACA,cACA,kBACA,mBACA,cACA,oBACA,oBACA,mBACA,oBACA,mBACA,aACA,kBACA,kBACA,kBACA,eACA,cACA,mBACA,mBACA,mBACA,gBACA,cACA,YACA,iBACA,sBACA,uBACA,iBACA,iBACA,cACA,SACA,eACA,QACA,gBACA,qBACA,iBACA,eACA,cACA,gBACA,SACA,uBACA,aACA,aACA,qBACA,YACA,YACA,aACA,cACA,cACA,kBACA,OACA,UACA,SACA,aACA,cACA,aACA,gBACA,WACA,iBACA,UACA,cACA,SACA,WACA,UACA,aACA,aACA,IACA,OACA,SACA,iBACA,eACA,cACA,kBACA,cACA,cACA,SACA,uBACA,eACA,wBACA,aACA,YACA,SACA,UACA,eACA,cACA,UACA,gBACA,oBACA,yBACA,sBACA,OACA,QACA,WACA,OACA,KACA,OACA,YACA,cACA,cACA,QACA,KACA,QACA,QACA,YACA,iBACA,UACA,eACA,mBACA,wBACA,OACA,SACA,WACA,aACA,YACA,gBACA,wBACA,eACA,WACA,eACA,UACA,iBACA,yBACA,oBACA,gBACA,UACA,oBACA,YACA,aACA,WACA,SACA,aACA,OACA,YACA,YACA,UACA,QACA,kBACA,aACA,YACA,aACA,iBACA,gBACA,aACA,gBACA,kBACA,YACA,uBACA,cACA,eACA,eACA,aACA,QACA,aACA,eACA,oBACA,aACA,aACA,cACA,YACA,cACA,UACA,UACA,OACA,YACA,YACA,aACA,WACA,WACA,gBACA,YACA,WACA,UACA,gBACA,QACA,gBACA,YACA,aACA,QACA,YACA,SACA,UACA,MACA,QACA,MACA,OACA,WACA,cACA,WACA,UACA,WACA,gBACA,kBACA,YACA,UACA,QACA,QACA,sBACA,8BACA,aACA,qBACA,4BACA,YACA,YACA,OACA,cACA,aACA,YACA,eACA,aACA,kBACA,kBACA,kBACA,aACA,cACA,UACA,UACA,oBACA,0BACA,UACA,wBACA,0BACA,mBACA,cACA,eACA,aACA,aACA,UACA,gBACA,WACA,qBACA,uBACA,yBACA,uBACA,0BACA,SACA,gBACA,iBACA,iBACA,gBACA,UACA,qBACA,uCACA,kCACA,UACA,aACA,eACA,YACA,aACA,kBACA,UACA,cACA,qBACA,cACA,YACA,WACA,eACA,UACA,kBACA,kBACA,kBACA,oBACA,mBACA,cACA,gBACA,UACA,cACA,cACA,WACA,aACA,UACA,aACA,WACA,0BACA,SACA,gBACA,SACA,kBACA,iBACA,oBACA,gBACA,aACA,uBACA,0BACA,MACA,OACA,QACA,oBACA,gBACA,mBACA,eACA,WACA,kBACA,SACA,iBACA,eACA,kBACA,oBACA,qBACA,eACA,qBACA,qBACA,sBACA,gBACA,sBACA,wBACA,gBACA,2BACA,qBACA,kBACA,mBACA,oBACA,cACA,kBACA,iBACA,yBACA,qBACA,2BACA,gBACA,kBACA,wBACA,cACA,oBACA,mBACA,oBACA,iBACA,aACA,iBACA,qBACA,oBACA,kBACA,cACA,uBACA,uBACA,2BACA,kBACA,+BACA,0BACA,oBACA,mBACA,qBACA,qBACA,oBACA,kBACA,cACA,mBACA,eACA,gBACA,qBACA,cACA,8BACA,gBACA,uBACA,cACA,wBACA,qBACA,iBACA,kBACA,kBACA,kBACA,yBACA,yBACA,4BACA,kCACA,kCACA,wCACA,wCACA,sCACA,sCACA,4CACA,4CACA,4BACA,sCACA,sCACA,4BACA,oCACA,oCACA,4BACA,4BACA,iBACA,gBACA,qBACA,+BACA,wBACA,gBACA,eACA,mBACA,qBACA,mBACA,cACA,cACA,cACA,iBACA,kBACA,gBACA,cACA,kBACA,mBACA,mBACA,eACA,cACA,SACA,MACA,WACA,WACA,UACA,eACA,UACA,WACA,OACA,WACA,cACA,cACA,eACA,gBACA,aACA,eACA,eACA,gBACA,cACA,mBACA,cACA,SACA,QACA,cACA,KACA,KACA,IACA,OACA,UACA,eACA,eACA,UACA,eACA,WACA,UACA,WACA,KACA,QACA,kBACA,UACA,SACA,kBACA,YACA,qBACA,eACA,UACA,UACA,iBACA,iBACA,eACA,sBACA,mBACA,kBACA,gBACA,aACA,eACA,cACA,gBACA,QACA,sBACA,sBACA,mBACA,iBACA,YACA,SACA,eACA,gBACA,aACA,iBACA,aACA,iBACA,oBACA,qBACA,cACA,eACA,oBACA,gBACA,qBACA,YACA,aACA,eACA,cACA,cACA,gBACA,uBACA,WACA,eACA,iBACA,oBACA,QACA,YACA,SACA,SACA,SACA,YACA,YACA,aACA,aACA,YACA,cACA,cACA,aACA,cACA,iBACA,SACA,cACA,eACA,SACA,SACA,mBACA,aACA,aACA,kBACA,SACA,aACA,MACA,UACA,YACA,SACA,UACA,2BACA,WACA,kBACA,aACA,gBACA,UACA,gBACA,UACA,SACA,WACA,WACA,aACA,WACA,UACA,WACA,kBACA,eACA,cACA,UACA,oBACA,cACA,cACA,cACA,2BACA,6BACA,iBACA,aACA,SACA,kBACA,oBACA,oBACA,mBACA,OACA,gBACA,WACA,WACA,YACA,aACA,2BACA,sBACA,eACA,6BACA,oBACA,YACA,oBACA,sBACA,sBACA,qBACA,aACA,qBACA,WACA,OACA,YACA,WACA,SACA,QACA,KACA,KACA,SACA,IACA,WACA,gBACA,cACA,mBACA,WACA,YACA,UACA,QACA,SACA,QACA,cACA,aACA,SACA,mBACA,0BACA,0BACA,UACA,gBACA,SACA,YACA,qBACA,WACA,UACA,UACA,MACA,eACA,aACA,eACA,cACA,YACA,UACA,QACA,WACA,WACA,UACA,YACA,YACA,oBACA,QACA,YACA,SACA,OACA,WACA,QACA,aACA,QACA,YACA,OACA,cACA,sBACA,aACA,iBACA,kBACA,MACA,SACA,yBACA,UACA,YACA,aACA,yBACA,QACA,WACA,+BACA,YACA,SACA,aACA,aACA,eACA,WACA,4BACA,kBACA,cACA,IACA,OACA,eACA,WACA,aACA,0BACA,WACA,QACA,QACA,aACA,UACA,UACA,kBACA,aACA,mBACA,WACA,WACA,kBACA,WACA,QACA,OACA,eACA,YACA,cACA,WACA,WACA,YACA,WACA,SACA,aACA,aACA,cACA,UACA,UACA,OACA,YACA,WACA,WACA,SACA,YACA,aACA,oBACA,YACA,QACA,OACA,aACA,iBACA,YACA,YACA,cACA,YACA,YACA,gBACA,WACA,WACA,aACA,WACA,QACA,QACA,QACA,cACA,gBACA,aACA,eACA,QACA,QACA,QACA,YACA,cACA,OACA,cACA,wBACA,eACA,yBACA,YACA,mBACA,eACA,aACA,iBACA,eACA,0BACA,oBACA,0BACA,yBACA,uBACA,wBACA,cACA,aACA,sBACA,cACA,uBACA,WACA,iBACA,uBACA,cACA,YACA,gBACA,cACA,wBACA,kBACA,uBACA,uBACA,qBACA,sBACA,aACA,YACA,QACA,WACA,MACA,UACA,cACA,OACA,aACA,cACA,aACA,iBACA,aACA,SACA,gBACA,QACA,UACA,KACA,QACA,cACA,eACA,eACA,0BACA,uBACA,SACA,YACA,SACA,YACA,oBACA,OACA,eACA,gBACA,cACA,YACA,SACA,aACA,oBACA,oBACA,KACA,KACA,OACA,UACA,QACA,iBACA,cACA,iBACA,kBACA,cACA,gBACA,MACA,kBACA,mBACA,kBACA,SACA,wBACA,YACA,cACA,qBACA,oBACA,eACA,iBACA,mBACA,qBACA,iBACA,UACA,aACA,UACA,cACA,wBACA,qBACA,uBACA,wBACA,sBACA,SACA,+BACA,iBACA,uBACA,gBACA,iBACA,6BACA,mBACA,wBACA,mBACA,aACA,uBACA,kBACA,eACA,aACA,qBACA,iBACA,UACA,mBACA,UACA,SACA,0BACA,gCACA,sBACA,cACA,iBACA,yBACA,oBACA,uBACA,yBACA,mBACA,uBACA,aACA,mBACA,mBACA,WACA,eACA,kBACA,aACA,UACA,aACA,aACA,wBACA,yBACA,gBACA,oCACA,uBACA,cACA,cACA,WACA,eACA,WACA,WACA,UACA,sBACA,UACA,WACA,SACA,cACA,kBACA,WACA,qBACA,cACA,cACA,kBACA,aACA,mBACA,WACA,eACA,iBACA,cACA,mBACA,mCACA,mBACA,2BACA,sBACA,wBACA,eACA,qBACA,mBACA,gBACA,uBACA,2BACA,oBACA,oBACA,sBACA,sBACA,sBACA,uBACA,mBACA,iBACA,mBACA,kBACA,aACA,eACA,eACA,kBACA,mBACA,2BACA,oBACA,UACA,oBACA,iBACA,eACA,aACA,eACA,aACA,mBACA,qBACA,2BACA,kBACA,oBACA,eACA,aACA,2BACA,yBACA,eACA,WACA,oBACA,gBACA,iBACA,qBACA,kBACA,yBACA,kBACA,UACA,oBACA,iBACA,eACA,YACA,wBACA,aACA,YACA,iBACA,cACA,qBACA,gBACA,cACA,gBACA,YACA,YACA,WACA,aACA,qBACA,eACA,YACA,aACA,mBACA,kBACA,wBACA,0BACA,iBACA,mBACA,UACA,YACA,SACA,cACA,2BACA,6BACA,2BACA,WACA,KACA,oBACA,gBACA,WACA,QACA,QACA,iBACA,WACA,sBACA,MACA,eACA,iBACA,gBACA,gBACA,iBACA,eACA,aACA,WACA,YACA,iBACA,OACA,OACA,UACA,UACA,SACA,SACA,OACA,YACA,OACA,OACA,UACA,kBACA,kBACA,qBACA,OACA,WACA,OACA,WACA,SACA,wBACA,UACA,WACA,YACA,cACA,QACA,QACA,qBACA,oBACA,OACA,KACA,aACA,WACA,YACA,aACA,oBACA,kBACA,mBACA,iBACA,SACA,WACA,UACA,iBACA,YACA,aACA,mBACA,UACA,OACA,OACA,MACA,MACA,kCACA,UACA,WACA,cACA,gBACA,QACA,aACA,UACA,YACA,sBACA,sBACA,OACA,OACA,qBACA,sBACA,qBACA,iBACA,mBACA,uBACA,kBACA,WACA,wBACA,6BACA,gBACA,iBACA,YACA,iBACA,mBACA,sBACA,eACA,oBACA,0BACA,mBACA,iBACA,uBACA,sBACA,oBACA,mBACA,oBACA,gBACA,0BACA,mBACA,oBACA,oBACA,sBACA,yBACA,mBACA,gBACA,gBACA,iBACA,sBACA,cACA,2BACA,4BACA,uBACA,iBACA,cACA,aACA,gBACA,QACA,YACA,cACA,YACA,aACA,QACA,cACA,gBACA,cACA,wBACA,qBACA,qBACA,eACA,aACA,aACA,mBACA,aACA,YACA,aACA,eACA,YACA,iBACA,iBACA,iBACA,WACA,uBACA,UACA,aACA,KACA,OACA,cACA,UACA,6BACA,WACA,2BACA,SACA,cACA,cACA,oBACA,6BACA,gBACA,qBACA,aACA,YACA,UACA,cACA,eACA,WACA,gBACA,WACA,cACA,OACA,aACA,YACA,QACA,cACA,QACA,SACA,gBACA,gBACA,iBACA,kBACA,kBACA,YACA,YACA,qBACA,8BACA,gBACA,iBACA,gBACA,aACA,WACA,WACA,cACA,aACA,YACA,YACA,kBACA,SACA,YACA,UACA,OACA,SACA,WACA,UACA,YACA,WACA,YACA,cACA,WACA,cACA,WACA,OACA,OACA,kBACA,iBACA,KACA,KACA,KACA,KACA,eACA,oBACA,oBACA,UACA,MACA,UACA,SACA,gBACA,kBACA,cACA,UACA,YACA,UACA,WACA,OACA,UACA,OACA,OACA,QACA,SACA,OACA,WACA,YACA,eACA,YACA,mBACA,cACA,YACA,cACA,YACA,qBACA,kBACA,eACA,mBACA,WACA,YACA,YACA,oBACA,WACA,SACA,SACA,aACA,aACA,iBACA,iBACA,iBACA,iBACA,SACA,OACA,cACA,aACA,SACA,eACA,mBACA,iBACA,gBACA,QACA,iBACA,gBACA,oBACA,OACA,cACA,YACA,YACA,UACA,iBACA,aACA,WACA,aACA,SACA,YACA,0BACA,SACA,OACA,YACA,cACA,QACA,OACA,aACA,mBACA,sBACA,kBACA,YACA,iBACA,oBACA,gBACA,WACA,OACA,eACA,iBACA,YACA,SACA,mBACA,YACA,eACA,SACA,gBACA,WACA,cACA,OACA,aACA,MACA,QACA,QACA,OACA,cACA,cACA,WACA,YACA,qBACA,eACA,OACA,UACA,YACA,UACA,MACA,QACA,aACA,YACA,SACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,WACA,MACA,UACA,SACA,gBACA,cACA,eACA,aACA,eACA,eACA,aACA,cACA,YACA,cACA,OACA,SACA,aACA,aACA,gBACA,eACA,YACA,eACA,YACA,eACA,cACA,cACA,cACA,QACA,OACA,YACA,mBACA,WACA,YACA,QACA,aACA,cACA,UACA,SACA,kBACA,MACA,aACA,YACA,kBACA,kBACA,0BACA,cACA,cACA,YACA,YACA,iBACA,WACA,WACA,UACA,cACA,QACA,oBACA,eACA,eACA,aACA,YACA,YACA,cACA,SACA,UACA,kBACA,UACA,eACA,kBACA,UACA,SACA,WACA,YACA,MACA,aACA,YACA,cACA,YACA,WACA,WACA,aACA,iBACA,eACA,OACA,SACA,QACA,OACA,SACA,UACA,YACA,gBACA,gBACA,iBACA,cACA,WACA,UACA,YACA,SACA,iBACA,oBACA,cACA,SACA,wBACA,UACA,UACA,mBACA,sBACA,qBACA,0BACA,sBACA,iCACA,mBACA,6BACA,iBACA,aACA,cACA,sBACA,sBACA,6BACA,YACA,UACA,gBACA,mBACA,qBACA,cACA,iBACA,gBACA,gBACA,uBACA,uBACA,YACA,gBACA,eACA,eACA,iBACA,kBACA,cACA,aACA,YACA,2BACA,eACA,kBACA,kBACA,iBACA,iBACA,UACA,eACA,WACA,YACA,qBACA,qBACA,eACA,eACA,YACA,iBACA,gBACA,mBACA,kBACA,SACA,wBACA,qBACA,oBACA,cACA,mBACA,qBACA,uBACA,2BACA,YACA,2BACA,uBACA,wBACA,eACA,qBACA,gBACA,eACA,YACA,eACA,eACA,aACA,uBACA,mBACA,qBACA,cACA,mBACA,uBACA,sBACA,sBACA,4BACA,kBACA,uBACA,uBACA,4BACA,uBACA,qBACA,6BACA,YACA,mBACA,gCACA,uBACA,mBACA,UACA,wBACA,sBACA,qBACA,wBACA,wBACA,oBACA,0BACA,wBACA,mBACA,eACA,WACA,eACA,sBACA,qBACA,mBACA,iBACA,aACA,eACA,SACA,cACA,kBACA,aACA,kBACA,iBACA,iBACA,cACA,aACA,iBACA,sBACA,aACA,aACA,aACA,wBACA,sBACA,sBACA,oBACA,qBACA,2BACA,wBACA,eACA,oBACA,mBACA,gBACA,YACA,iBACA,gBACA,aACA,WACA,uBACA,wBACA,wBACA,uBACA,YACA,0BACA,aACA,cACA,sBACA,iBACA,cACA,SACA,cACA,oBACA,6BACA,eACA,oBACA,mBACA,gBACA,kBACA,gBACA,sBACA,mBACA,6BACA,kBACA,mBACA,mBACA,0BACA,0BACA,sBACA,aACA,mBACA,mBACA,gBACA,oBACA,oBACA,oBACA,oBACA,gBACA,sBACA,sBACA,mBACA,gBACA,gBACA,sBACA,iBACA,iBACA,sBACA,0BACA,mBACA,WACA,gBACA,gBACA,gCACA,+BACA,iCACA,gCACA,cACA,oBACA,mBACA,eACA,oBACA,uBACA,uBACA,6BACA,sBACA,gCACA,eACA,oBACA,aACA,eACA,gBACA,sBACA,SACA,WACA,KACA,aACA,oBACA,YACA,WACA,WACA,eACA,cACA,QACA,IACA,OACA,WACA,YACA,iBACA,QACA,eACA,aACA,gBACA,eACA,WACA,aACA,iBACA,kBACA,YACA,OACA,yBACA,WACA,WACA,eACA,WACA,eACA,SACA,WACA,yBACA,aACA,UACA,OACA,qBACA,WACA,WACA,cACA,WACA,SACA,WACA,UACA,aACA,SACA,WACA,WACA,YACA,YACA,wBACA,eACA,YACA,OACA,cACA,UACA,SACA,MACA,aACA,SACA,mBACA,iBACA,gBACA,kBACA,cACA,mBACA,SACA,aACA,kBACA,YACA,iBACA,cACA,mBACA,UACA,KACA,qBACA,SACA,eACA,aACA,aACA,eACA,YACA,cACA,UACA,UACA,KACA,SACA,WACA,aACA,kBACA,SACA,UACA,aACA,WACA,cACA,aACA,eACA,uBACA,gBACA,aACA,iBACA,eACA,iBACA,sBACA,mBACA,eACA,cACA,qBACA,oBACA,gBACA,gBACA,wBACA,iBACA,iBACA,YACA,SACA,WACA,aACA,WACA,WACA,wBACA,wBACA,0BACA,YACA,mBACA,OACA,eACA,WACA,mBACA,uBACA,aACA,UACA,UACA,4BACA,aACA,gBACA,kBACA,SACA,cACA,QACA,kBACA,gBACA,mBACA,oBACA,aACA,eACA,gBACA,iBACA,sBACA,oBACA,0BACA,YACA,gBACA,SACA,YACA,cACA,cACA,aACA,cACA,SACA,mBACA,YACA,cACA,QACA,UACA,UACA,UACA,gBACA,SACA,iBACA,WACA,UACA,YACA,aACA,qBACA,oBACA,kBACA,eACA,iBACA,sBACA,eACA,SACA,iBACA,6BACA,aACA,UACA,YACA,YACA,aACA,UACA,mBACA,mBACA,gBACA,SACA,eACA,mBACA,YACA,cACA,gBACA,uBACA,OACA,SACA,YACA,cACA,eACA,eACA,cACA,aACA,cACA,YACA,eACA,SACA,YACA,cACA,wBACA,uBACA,yBACA,yBACA,wBACA,kBACA,uBACA,sBACA,oBACA,uBACA,iBACA,kBACA,mBACA,iBACA,wBACA,mBACA,yBACA,+BACA,cACA,wBACA,oBACA,kBACA,mBACA,mBACA,mBACA,kBACA,iBACA,kBACA,gBACA,kCACA,qBACA,sBACA,YACA,aACA,aACA,YACA,WACA,SACA,sBACA,eACA,aACA,aACA,UACA,UACA,SACA,YACA,sBACA,kBACA,gBACA,iBACA,iBACA,sBACA,qBACA,gBACA,eACA,gBACA,cACA,aACA,aACA,mBACA,eACA,qBACA,iBACA,gBACA,UACA,WACA,cACA,gBACA,6BACA,WACA,WACA,aACA,YACA,eACA,iBACA,WACA,WACA,WACA,YACA,WACA,oBACA,gBACA,SACA,yBACA,aACA,eACA,cACA,gBACA,YACA,UACA,gBACA,SACA,YACA,kBACA,WACA,YACA,YACA,cACA,YACA,eACA,WACA,gBACA,aACA,cACA,eACA,kBACA,WACA,gBACA,kBACA,kBACA,kBACA,kBACA,iBACA,YACA,YACA,uBACA,6BACA,yBACA,iDACA,2BACA,0BACA,mBACA,mBACA,qBACA,kBACA,4BACA,4CACA,4BACA,2BACA,mCACA,wBACA,UACA,SACA,UACA,OACA,aACA,eACA,gBACA,SACA,QACA,gBACA,WACA,MACA,UACA,UACA,QACA,SACA,SACA,UACA,MACA,SACA,cACA,aACA,cACA,SACA,iBACA,UACA,QACA,YACA,cACA,YACA,aACA,UACA,gBACA,iBACA,gBACA,gBACA,eACA,gBACA,eACA,eACA,eACA,WACA,aACA,aACA,YACA,YACA,mBACA,aACA,gBACA,eACA,YACA,YACA,kBACA,gBACA,KACA,KACA,KACA,KACA,MACA,UACA,iBACA,eACA,gBACA,cACA,gBACA,cACA,eACA,aACA,OACA,mBACA,oBACA,oBACA,iBACA,kBACA,kBACA,YACA,QACA,cACA,QACA,cACA,QACA,cACA,aACA,gBACA,YACA,UACA,eACA,SACA,gBACA,aACA,aACA,mBACA,iBACA,eACA,QACA,aACA,kBACA,WACA,eACA,UACA,WACA,YACA,OACA,aACA,cACA,cACA,sBACA,WACA,UACA,sBACA,kBACA,mBACA,eACA,QACA,kBACA,cACA,SACA,UACA,cACA,aACA,YACA,cACA,cACA,qBACA,oBACA,qBACA,oBACA,QACA,OACA,QACA,cACA,aACA,cACA,YACA,aACA,cACA,WACA,yBACA,yBACA,aACA,cACA,WACA,OACA,eACA,gBACA,eACA,SACA,UACA,cACA,QACA,iBACA,6BACA,iBACA,gBACA,YACA,qBACA,cACA,SACA,YACA,YACA,YACA,gBACA,MACA,sBACA,kBACA,iBACA,OACA,QACA,QACA,QACA,YACA,YACA,UACA,WACA,SACA,WACA,WACA,gBACA,YACA,cACA,SACA,MACA,WACA,kBACA,YACA,yBACA,yBACA,SACA,UACA,UACA,gBACA,sBACA,4BACA,UACA,WACA,YACA,iBACA,oBACA,yBACA,eACA,eACA,gBACA,kBACA,oBACA,aACA,gBACA,iBACA,aACA,QACA,aACA,0BACA,UACA,oBACA,UACA,aACA,UACA,aACA,WACA,SACA,aACA,uBACA,eACA,WACA,eACA,YACA,cACA,gBACA,WACA,YACA,YACA,OACA,mBACA,YACA,MACA,eACA,mBACA,YACA,sBACA,uBACA,oBACA,wBACA,mBACA,oBACA,gBACA,mBACA,QACA,SACA,IACA,KACA,KACA,OACA,aACA,UACA,UACA,SACA,QACA,aACA,WACA,WACA,cACA,gBACA,cACA,iBACA,OACA,QACA,MACA,OACA,oBACA,qBACA,aACA,gBACA,aACA,WACA,aACA,sBACA,aACA,SACA,SACA,WACA,YACA,eACA,YACA,OACA,MACA,gBACA,cACA,gBACA,SACA,cACA,YACA,cACA,OACA,OACA,gBACA,WACA,UACA,SACA,gBACA,gBACA,WACA,UACA,WACA,yBACA,kBACA,0BACA,SACA,MACA,UACA,cACA,gBACA,UACA,iBACA,gBACA,wBACA,wBACA,WACA,SACA,iBACA,oBACA,SACA,kBACA,kBACA,oBACA,sBACA,iBACA,cACA,YACA,sBACA,eACA,eACA,aACA,iBACA,kBACA,oBACA,aACA,kBACA,iBACA,cACA,eACA,aACA,sCACA,qBACA,eACA,cACA,iBACA,yBACA,iCACA,eACA,sBACA,iBACA,gBACA,SACA,UACA,sBACA,eACA,cACA,YACA,cACA,cACA,eACA,eACA,mBACA,iBACA,wBACA,sBACA,cACA,oBACA,8BACA,oBACA,qBACA,eACA,mBACA,WACA,qBACA,mBACA,QACA,iBACA,SACA,WACA,WACA,UACA,WACA,eACA,cACA,gBACA,eACA,eACA,cACA,cACA,UACA,SACA,aACA,SACA,cACA,MACA,UACA,WACA,YACA,kBACA,WACA,QACA,eACA,cACA,gBACA,OACA,cACA,SACA,kBACA,sBACA,mBACA,uBACA,aACA,WACA,eACA,QACA,WACA,UACA,OACA,YACA,eACA,eACA,QACA,UACA,eACA,KACA,KACA,SACA,iBACA,aACA,UACA,OACA,QACA,UACA,cACA,kBACA,sBACA,YACA,SACA,UACA,QACA,YACA,SACA,SACA,mBACA,gBACA,aACA,2BACA,2BACA,YACA,UACA,UACA,UACA,SACA,kBACA,eACA,iBACA,WACA,gBACA,gBACA,cACA,eACA,iBACA,yBACA,aACA,gBACA,aACA,aACA,WACA,YACA,eACA,cACA,UACA,UACA,wBACA,sBACA,qBACA,2BACA,qBACA,0BACA,uBACA,sBACA,aACA,YACA,MACA,gBACA,SACA,OACA,SACA,YACA,uBACA,eACA,kBACA,wBACA,WACA,OACA,WACA,UACA,SACA,oBACA,aACA,qBACA,cACA,mBACA,kBACA,WACA,gBACA,kBACA,wBACA,wBACA,YACA,qBACA,eACA,iBACA,WACA,eACA,OACA,OACA,eACA,aACA,SACA,gBACA,YACA,oBACA,gBACA,YACA,iBACA,MACA,YACA,WACA,eACA,iBACA,mBACA,qBACA,mBACA,8BACA,aACA,WACA,wBACA,iBACA,oBACA,UACA,UACA,eACA,SACA,cACA,eACA,cACA,eACA,eACA,aACA,aACA,gBACA,cACA,WACA,eACA,WACA,WACA,UACA,cACA,UACA,aACA,cACA,cACA,eACA,sBACA,YACA,iBACA,eACA,kBACA,aACA,gBACA,WACA,eACA,iBACA,2BACA,mBACA,kBACA,iBACA,mCACA,WACA,eACA,kBACA,oBACA,cACA,gBACA,cACA,iBACA,cACA,sBACA,YACA,eACA,uBACA,mBACA,eACA,8BACA,YACA,WACA,aACA,oBACA,uBACA,YACA,WACA,WACA,WACA,gBACA,iBACA,kBACA,iBACA,iBACA,mBACA,kBACA,uBACA,UACA,aACA,eACA,eACA,aACA,iBACA,cACA,qBACA,gBACA,cACA,gBACA,YACA,YACA,WACA,SACA,iBACA,sBACA,cACA,cACA,aACA,UACA,cACA,eACA,MACA,eACA,aACA,cACA,gBACA,gBACA,aACA,QACA,kBACA,iBACA,QACA,QACA,WACA,YACA,OACA,WACA,YACA,kBACA,qBACA,mBACA,UACA,OACA,iBACA,MACA,kBACA,OACA,OACA,gBACA,QACA,QACA,YACA,QACA,YACA,QACA,QACA,QACA,OACA,SACA,wBACA,cACA,eACA,iBACA,OACA,OACA,SACA,eACA,gBACA,cACA,UACA,OACA,UACA,WACA,YACA,mBACA,mBACA,kBACA,QACA,eACA,aACA,SACA,QACA,YACA,eACA,OACA,MACA,aACA,YACA,SACA,SACA,UACA,SACA,QACA,kBACA,aACA,aACA,UACA,QACA,iBACA,WACA,cACA,iBACA,YACA,aACA,QACA,SACA,gBACA,aACA,YACA,gBACA,gBACA,cACA,sBACA,cACA,sBACA,YACA,oBACA,OACA,WACA,eACA,SACA,SACA,cACA,OACA,aACA,eACA,YACA,2BACA,cACA,kBACA,cACA,cACA,gBACA,qCACA,gCACA,aACA,SACA,SACA,cACA,YACA,SACA,mBACA,oBACA,iBACA,kBACA,oBACA,iBACA,eACA,kBACA,mBACA,gBACA,iBACA,mBACA,gBACA,aACA,cACA,aACA,cACA,QACA,aACA,aACA,aACA,iBACA,cACA,MACA,WACA,UACA,SACA,YACA,SACA,YACA,gBACA,SACA,UACA,SACA,WACA,UACA,MACA,WACA,eACA,mBACA,UACA,gBACA,YACA,WACA,YACA,UACA,SACA,aACA,WACA,iBACA,aACA,aACA,UACA,QACA,QACA,WACA,QACA,eACA,cACA,cACA,MACA,UACA,SACA,OACA,eACA,cACA,MACA,OACA,SACA,gBACA,gBACA,UACA,UACA,MACA,YACA,OACA,aACA,gBACA,gBACA,gBACA,OACA,aACA,cACA,kBACA,wBACA,uBACA,wBACA,cACA,gBACA,iBACA,cACA,iBACA,YACA,gBACA,aACA,gBACA,eACA,cACA,iBACA,sBACA,sBACA,qBACA,4BACA,qBACA,yBACA,sBACA,0BACA,aACA,cACA,kBACA,cACA,mBACA,aACA,eACA,gBACA,aACA,aACA,gBACA,wBACA,OACA,WACA,YACA,QACA,QACA,OACA,UACA,YACA,UACA,YACA,kBACA,SACA,QACA,UACA,SACA,YACA,eACA,YACA,gBACA,UACA,iBACA,iBACA,cACA,cACA,SACA,qBACA,iBACA,oBACA,iBACA,qBACA,oBACA,cACA,WACA,cACA,QACA,WACA,eACA,WACA,cACA,eACA,cACA,cACA,SACA,yBACA,UACA,UACA,MACA,YACA,QACA,kBACA,mBACA,cACA,UACA,QACA,QACA,cACA,eACA,YACA,mBACA,kBACA,kBACA,iBACA,kBACA,iBACA,sBACA,sBACA,aACA,mBACA,sBACA,sBACA,6BACA,kBACA,qBACA,qBACA,2BACA,YACA,gBACA,eACA,eACA,OACA,WACA,YACA,YACA,QACA,WACA,OACA,aACA,eACA,gBACA,QACA,SACA,YACA,WACA,SACA,eACA,cACA,YACA,aACA,YACA,aACA,YACA,aACA,YACA,aACA,YACA,aACA,YACA,aACA,YACA,aACA,YACA,aACA,mBACA,mBACA,mBACA,SACA,WACA,eACA,WACA,QACA,iBACA,mBACA,SACA,UACA,YACA,UACA,oBACA,cACA,aACA,2BACA,4BACA,cACA,eACA,UACA,cACA,kBACA,qBACA,UACA,YACA,SACA,iBACA,YACA,iBACA,iBACA,UACA,WACA,SACA,QACA,aACA,YACA,MACA,MACA,MACA,OACA,SACA,iBACA,SACA,aACA,YACA,YACA,eACA,WACA,kBACA,SACA,QACA,QACA,kBACA,oBACA,WACA,QACA,cACA,gBACA,gBACA,wBACA,eACA,UACA,YACA,YACA,SACA,gBACA,eACA,kBACA,oBACA,YACA,YACA,SACA,YACA,SACA,UACA,iBACA,kBACA,iBACA,kBACA,iBACA,kBACA,iBACA,kBACA,2BACA,sBACA,WACA,iBACA,gBACA,mBACA,UACA,cACA,cACA,aACA,OACA,UACA,gBACA,aACA,mBACA,WACA,kBACA,kBACA,kBACA,aACA,kBACA,UACA,aACA,QACA,SACA,OACA,SACA,IACA,OACA,OACA,WACA,QACA,gBACA,YACA,eACA,kBACA,uBACA,2BACA,0BACA,0BACA,gCACA,sBACA,2BACA,gCACA,mBACA,qBACA,8BACA,wBACA,2BACA,mBACA,6BACA,uBACA,wBACA,wBACA,yBACA,2BACA,4BACA,4BACA,yBACA,uBACA,+BACA,oBACA,0BACA,0BACA,yBACA,0BACA,yBACA,iBACA,qBACA,gBACA,wBACA,kBACA,gBACA,kBACA,6BACA,yBACA,yBACA,oCACA,6BACA,8BACA,mCACA,mCACA,yBACA,iCACA,wCACA,oCACA,6BACA,wBACA,wBACA,uBACA,uBACA,wBACA,uCACA,0BACA,0BACA,2BACA,mBACA,yBACA,mBACA,yBACA,yBACA,sBACA,oBACA,uBACA,sBACA,4BACA,qBACA,0BACA,eACA,kBACA,oBACA,yBACA,6BACA,mBACA,iBACA,oBACA,uBACA,mBACA,uBACA,8BACA,kBACA,yBACA,qBACA,aACA,uBACA,wBACA,wBACA,oBACA,sBACA,4BACA,oBACA,yBACA,0BACA,2BACA,oBACA,uBACA,uBACA,0BACA,sBACA,8BACA,0BACA,0BACA,0BACA,2BACA,kCACA,qBACA,oCACA,mBACA,iCACA,cACA,sBACA,0BACA,0BACA,+BACA,+BACA,oBACA,2BACA,yBACA,uBACA,kBACA,wBACA,mBACA,wBACA,2BACA,2BACA,iCACA,YACA,0BACA,mBACA,8BACA,wBACA,sCACA,iBACA,WACA,SACA,aACA,aACA,cACA,cACA,QACA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"}
\ No newline at end of file
diff --git a/node_modules/terser/node_modules/source-map/CHANGELOG.md b/node_modules/terser/node_modules/source-map/CHANGELOG.md
new file mode 100644
index 0000000..3a8c066
--- /dev/null
+++ b/node_modules/terser/node_modules/source-map/CHANGELOG.md
@@ -0,0 +1,301 @@
+# Change Log
+
+## 0.5.6
+
+* Fix for regression when people were using numbers as names in source maps. See
+  #236.
+
+## 0.5.5
+
+* Fix "regression" of unsupported, implementation behavior that half the world
+  happens to have come to depend on. See #235.
+
+* Fix regression involving function hoisting in SpiderMonkey. See #233.
+
+## 0.5.4
+
+* Large performance improvements to source-map serialization. See #228 and #229.
+
+## 0.5.3
+
+* Do not include unnecessary distribution files. See
+  commit ef7006f8d1647e0a83fdc60f04f5a7ca54886f86.
+
+## 0.5.2
+
+* Include browser distributions of the library in package.json's `files`. See
+  issue #212.
+
+## 0.5.1
+
+* Fix latent bugs in IndexedSourceMapConsumer.prototype._parseMappings. See
+  ff05274becc9e6e1295ed60f3ea090d31d843379.
+
+## 0.5.0
+
+* Node 0.8 is no longer supported.
+
+* Use webpack instead of dryice for bundling.
+
+* Big speedups serializing source maps. See pull request #203.
+
+* Fix a bug with `SourceMapConsumer.prototype.sourceContentFor` and sources that
+  explicitly start with the source root. See issue #199.
+
+## 0.4.4
+
+* Fix an issue where using a `SourceMapGenerator` after having created a
+  `SourceMapConsumer` from it via `SourceMapConsumer.fromSourceMap` failed. See
+  issue #191.
+
+* Fix an issue with where `SourceMapGenerator` would mistakenly consider
+  different mappings as duplicates of each other and avoid generating them. See
+  issue #192.
+
+## 0.4.3
+
+* A very large number of performance improvements, particularly when parsing
+  source maps. Collectively about 75% of time shaved off of the source map
+  parsing benchmark!
+
+* Fix a bug in `SourceMapConsumer.prototype.allGeneratedPositionsFor` and fuzzy
+  searching in the presence of a column option. See issue #177.
+
+* Fix a bug with joining a source and its source root when the source is above
+  the root. See issue #182.
+
+* Add the `SourceMapConsumer.prototype.hasContentsOfAllSources` method to
+  determine when all sources' contents are inlined into the source map. See
+  issue #190.
+
+## 0.4.2
+
+* Add an `.npmignore` file so that the benchmarks aren't pulled down by
+  dependent projects. Issue #169.
+
+* Add an optional `column` argument to
+  `SourceMapConsumer.prototype.allGeneratedPositionsFor` and better handle lines
+  with no mappings. Issues #172 and #173.
+
+## 0.4.1
+
+* Fix accidentally defining a global variable. #170.
+
+## 0.4.0
+
+* The default direction for fuzzy searching was changed back to its original
+  direction. See #164.
+
+* There is now a `bias` option you can supply to `SourceMapConsumer` to control
+  the fuzzy searching direction. See #167.
+
+* About an 8% speed up in parsing source maps. See #159.
+
+* Added a benchmark for parsing and generating source maps.
+
+## 0.3.0
+
+* Change the default direction that searching for positions fuzzes when there is
+  not an exact match. See #154.
+
+* Support for environments using json2.js for JSON serialization. See #156.
+
+## 0.2.0
+
+* Support for consuming "indexed" source maps which do not have any remote
+  sections. See pull request #127. This introduces a minor backwards
+  incompatibility if you are monkey patching `SourceMapConsumer.prototype`
+  methods.
+
+## 0.1.43
+
+* Performance improvements for `SourceMapGenerator` and `SourceNode`. See issue
+  #148 for some discussion and issues #150, #151, and #152 for implementations.
+
+## 0.1.42
+
+* Fix an issue where `SourceNode`s from different versions of the source-map
+  library couldn't be used in conjunction with each other. See issue #142.
+
+## 0.1.41
+
+* Fix a bug with getting the source content of relative sources with a "./"
+  prefix. See issue #145 and [Bug 1090768](bugzil.la/1090768).
+
+* Add the `SourceMapConsumer.prototype.computeColumnSpans` method to compute the
+  column span of each mapping.
+
+* Add the `SourceMapConsumer.prototype.allGeneratedPositionsFor` method to find
+  all generated positions associated with a given original source and line.
+
+## 0.1.40
+
+* Performance improvements for parsing source maps in SourceMapConsumer.
+
+## 0.1.39
+
+* Fix a bug where setting a source's contents to null before any source content
+  had been set before threw a TypeError. See issue #131.
+
+## 0.1.38
+
+* Fix a bug where finding relative paths from an empty path were creating
+  absolute paths. See issue #129.
+
+## 0.1.37
+
+* Fix a bug where if the source root was an empty string, relative source paths
+  would turn into absolute source paths. Issue #124.
+
+## 0.1.36
+
+* Allow the `names` mapping property to be an empty string. Issue #121.
+
+## 0.1.35
+
+* A third optional parameter was added to `SourceNode.fromStringWithSourceMap`
+  to specify a path that relative sources in the second parameter should be
+  relative to. Issue #105.
+
+* If no file property is given to a `SourceMapGenerator`, then the resulting
+  source map will no longer have a `null` file property. The property will
+  simply not exist. Issue #104.
+
+* Fixed a bug where consecutive newlines were ignored in `SourceNode`s.
+  Issue #116.
+
+## 0.1.34
+
+* Make `SourceNode` work with windows style ("\r\n") newlines. Issue #103.
+
+* Fix bug involving source contents and the
+  `SourceMapGenerator.prototype.applySourceMap`. Issue #100.
+
+## 0.1.33
+
+* Fix some edge cases surrounding path joining and URL resolution.
+
+* Add a third parameter for relative path to
+  `SourceMapGenerator.prototype.applySourceMap`.
+
+* Fix issues with mappings and EOLs.
+
+## 0.1.32
+
+* Fixed a bug where SourceMapConsumer couldn't handle negative relative columns
+  (issue 92).
+
+* Fixed test runner to actually report number of failed tests as its process
+  exit code.
+
+* Fixed a typo when reporting bad mappings (issue 87).
+
+## 0.1.31
+
+* Delay parsing the mappings in SourceMapConsumer until queried for a source
+  location.
+
+* Support Sass source maps (which at the time of writing deviate from the spec
+  in small ways) in SourceMapConsumer.
+
+## 0.1.30
+
+* Do not join source root with a source, when the source is a data URI.
+
+* Extend the test runner to allow running single specific test files at a time.
+
+* Performance improvements in `SourceNode.prototype.walk` and
+  `SourceMapConsumer.prototype.eachMapping`.
+
+* Source map browser builds will now work inside Workers.
+
+* Better error messages when attempting to add an invalid mapping to a
+  `SourceMapGenerator`.
+
+## 0.1.29
+
+* Allow duplicate entries in the `names` and `sources` arrays of source maps
+  (usually from TypeScript) we are parsing. Fixes github issue 72.
+
+## 0.1.28
+
+* Skip duplicate mappings when creating source maps from SourceNode; github
+  issue 75.
+
+## 0.1.27
+
+* Don't throw an error when the `file` property is missing in SourceMapConsumer,
+  we don't use it anyway.
+
+## 0.1.26
+
+* Fix SourceNode.fromStringWithSourceMap for empty maps. Fixes github issue 70.
+
+## 0.1.25
+
+* Make compatible with browserify
+
+## 0.1.24
+
+* Fix issue with absolute paths and `file://` URIs. See
+  https://bugzilla.mozilla.org/show_bug.cgi?id=885597
+
+## 0.1.23
+
+* Fix issue with absolute paths and sourcesContent, github issue 64.
+
+## 0.1.22
+
+* Ignore duplicate mappings in SourceMapGenerator. Fixes github issue 21.
+
+## 0.1.21
+
+* Fixed handling of sources that start with a slash so that they are relative to
+  the source root's host.
+
+## 0.1.20
+
+* Fixed github issue #43: absolute URLs aren't joined with the source root
+  anymore.
+
+## 0.1.19
+
+* Using Travis CI to run tests.
+
+## 0.1.18
+
+* Fixed a bug in the handling of sourceRoot.
+
+## 0.1.17
+
+* Added SourceNode.fromStringWithSourceMap.
+
+## 0.1.16
+
+* Added missing documentation.
+
+* Fixed the generating of empty mappings in SourceNode.
+
+## 0.1.15
+
+* Added SourceMapGenerator.applySourceMap.
+
+## 0.1.14
+
+* The sourceRoot is now handled consistently.
+
+## 0.1.13
+
+* Added SourceMapGenerator.fromSourceMap.
+
+## 0.1.12
+
+* SourceNode now generates empty mappings too.
+
+## 0.1.11
+
+* Added name support to SourceNode.
+
+## 0.1.10
+
+* Added sourcesContent support to the customer and generator.
diff --git a/node_modules/terser/node_modules/source-map/LICENSE b/node_modules/terser/node_modules/source-map/LICENSE
new file mode 100644
index 0000000..ed1b7cf
--- /dev/null
+++ b/node_modules/terser/node_modules/source-map/LICENSE
@@ -0,0 +1,28 @@
+
+Copyright (c) 2009-2011, Mozilla Foundation and contributors
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+
+* Neither the names of the Mozilla Foundation nor the names of project
+  contributors may be used to endorse or promote products derived from this
+  software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/node_modules/terser/node_modules/source-map/README.md b/node_modules/terser/node_modules/source-map/README.md
new file mode 100644
index 0000000..fea4beb
--- /dev/null
+++ b/node_modules/terser/node_modules/source-map/README.md
@@ -0,0 +1,742 @@
+# Source Map
+
+[![Build Status](https://travis-ci.org/mozilla/source-map.png?branch=master)](https://travis-ci.org/mozilla/source-map)
+
+[![NPM](https://nodei.co/npm/source-map.png?downloads=true&downloadRank=true)](https://www.npmjs.com/package/source-map)
+
+This is a library to generate and consume the source map format
+[described here][format].
+
+[format]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit
+
+## Use with Node
+
+    $ npm install source-map
+
+## Use on the Web
+
+    <script src="https://raw.githubusercontent.com/mozilla/source-map/master/dist/source-map.min.js" defer></script>
+
+--------------------------------------------------------------------------------
+
+<!-- `npm run toc` to regenerate the Table of Contents -->
+
+<!-- START doctoc generated TOC please keep comment here to allow auto update -->
+<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
+## Table of Contents
+
+- [Examples](#examples)
+  - [Consuming a source map](#consuming-a-source-map)
+  - [Generating a source map](#generating-a-source-map)
+    - [With SourceNode (high level API)](#with-sourcenode-high-level-api)
+    - [With SourceMapGenerator (low level API)](#with-sourcemapgenerator-low-level-api)
+- [API](#api)
+  - [SourceMapConsumer](#sourcemapconsumer)
+    - [new SourceMapConsumer(rawSourceMap)](#new-sourcemapconsumerrawsourcemap)
+    - [SourceMapConsumer.prototype.computeColumnSpans()](#sourcemapconsumerprototypecomputecolumnspans)
+    - [SourceMapConsumer.prototype.originalPositionFor(generatedPosition)](#sourcemapconsumerprototypeoriginalpositionforgeneratedposition)
+    - [SourceMapConsumer.prototype.generatedPositionFor(originalPosition)](#sourcemapconsumerprototypegeneratedpositionfororiginalposition)
+    - [SourceMapConsumer.prototype.allGeneratedPositionsFor(originalPosition)](#sourcemapconsumerprototypeallgeneratedpositionsfororiginalposition)
+    - [SourceMapConsumer.prototype.hasContentsOfAllSources()](#sourcemapconsumerprototypehascontentsofallsources)
+    - [SourceMapConsumer.prototype.sourceContentFor(source[, returnNullOnMissing])](#sourcemapconsumerprototypesourcecontentforsource-returnnullonmissing)
+    - [SourceMapConsumer.prototype.eachMapping(callback, context, order)](#sourcemapconsumerprototypeeachmappingcallback-context-order)
+  - [SourceMapGenerator](#sourcemapgenerator)
+    - [new SourceMapGenerator([startOfSourceMap])](#new-sourcemapgeneratorstartofsourcemap)
+    - [SourceMapGenerator.fromSourceMap(sourceMapConsumer)](#sourcemapgeneratorfromsourcemapsourcemapconsumer)
+    - [SourceMapGenerator.prototype.addMapping(mapping)](#sourcemapgeneratorprototypeaddmappingmapping)
+    - [SourceMapGenerator.prototype.setSourceContent(sourceFile, sourceContent)](#sourcemapgeneratorprototypesetsourcecontentsourcefile-sourcecontent)
+    - [SourceMapGenerator.prototype.applySourceMap(sourceMapConsumer[, sourceFile[, sourceMapPath]])](#sourcemapgeneratorprototypeapplysourcemapsourcemapconsumer-sourcefile-sourcemappath)
+    - [SourceMapGenerator.prototype.toString()](#sourcemapgeneratorprototypetostring)
+  - [SourceNode](#sourcenode)
+    - [new SourceNode([line, column, source[, chunk[, name]]])](#new-sourcenodeline-column-source-chunk-name)
+    - [SourceNode.fromStringWithSourceMap(code, sourceMapConsumer[, relativePath])](#sourcenodefromstringwithsourcemapcode-sourcemapconsumer-relativepath)
+    - [SourceNode.prototype.add(chunk)](#sourcenodeprototypeaddchunk)
+    - [SourceNode.prototype.prepend(chunk)](#sourcenodeprototypeprependchunk)
+    - [SourceNode.prototype.setSourceContent(sourceFile, sourceContent)](#sourcenodeprototypesetsourcecontentsourcefile-sourcecontent)
+    - [SourceNode.prototype.walk(fn)](#sourcenodeprototypewalkfn)
+    - [SourceNode.prototype.walkSourceContents(fn)](#sourcenodeprototypewalksourcecontentsfn)
+    - [SourceNode.prototype.join(sep)](#sourcenodeprototypejoinsep)
+    - [SourceNode.prototype.replaceRight(pattern, replacement)](#sourcenodeprototypereplacerightpattern-replacement)
+    - [SourceNode.prototype.toString()](#sourcenodeprototypetostring)
+    - [SourceNode.prototype.toStringWithSourceMap([startOfSourceMap])](#sourcenodeprototypetostringwithsourcemapstartofsourcemap)
+
+<!-- END doctoc generated TOC please keep comment here to allow auto update -->
+
+## Examples
+
+### Consuming a source map
+
+```js
+var rawSourceMap = {
+  version: 3,
+  file: 'min.js',
+  names: ['bar', 'baz', 'n'],
+  sources: ['one.js', 'two.js'],
+  sourceRoot: 'http://example.com/www/js/',
+  mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
+};
+
+var smc = new SourceMapConsumer(rawSourceMap);
+
+console.log(smc.sources);
+// [ 'http://example.com/www/js/one.js',
+//   'http://example.com/www/js/two.js' ]
+
+console.log(smc.originalPositionFor({
+  line: 2,
+  column: 28
+}));
+// { source: 'http://example.com/www/js/two.js',
+//   line: 2,
+//   column: 10,
+//   name: 'n' }
+
+console.log(smc.generatedPositionFor({
+  source: 'http://example.com/www/js/two.js',
+  line: 2,
+  column: 10
+}));
+// { line: 2, column: 28 }
+
+smc.eachMapping(function (m) {
+  // ...
+});
+```
+
+### Generating a source map
+
+In depth guide:
+[**Compiling to JavaScript, and Debugging with Source Maps**](https://hacks.mozilla.org/2013/05/compiling-to-javascript-and-debugging-with-source-maps/)
+
+#### With SourceNode (high level API)
+
+```js
+function compile(ast) {
+  switch (ast.type) {
+  case 'BinaryExpression':
+    return new SourceNode(
+      ast.location.line,
+      ast.location.column,
+      ast.location.source,
+      [compile(ast.left), " + ", compile(ast.right)]
+    );
+  case 'Literal':
+    return new SourceNode(
+      ast.location.line,
+      ast.location.column,
+      ast.location.source,
+      String(ast.value)
+    );
+  // ...
+  default:
+    throw new Error("Bad AST");
+  }
+}
+
+var ast = parse("40 + 2", "add.js");
+console.log(compile(ast).toStringWithSourceMap({
+  file: 'add.js'
+}));
+// { code: '40 + 2',
+//   map: [object SourceMapGenerator] }
+```
+
+#### With SourceMapGenerator (low level API)
+
+```js
+var map = new SourceMapGenerator({
+  file: "source-mapped.js"
+});
+
+map.addMapping({
+  generated: {
+    line: 10,
+    column: 35
+  },
+  source: "foo.js",
+  original: {
+    line: 33,
+    column: 2
+  },
+  name: "christopher"
+});
+
+console.log(map.toString());
+// '{"version":3,"file":"source-mapped.js","sources":["foo.js"],"names":["christopher"],"mappings":";;;;;;;;;mCAgCEA"}'
+```
+
+## API
+
+Get a reference to the module:
+
+```js
+// Node.js
+var sourceMap = require('source-map');
+
+// Browser builds
+var sourceMap = window.sourceMap;
+
+// Inside Firefox
+const sourceMap = require("devtools/toolkit/sourcemap/source-map.js");
+```
+
+### SourceMapConsumer
+
+A SourceMapConsumer instance represents a parsed source map which we can query
+for information about the original file positions by giving it a file position
+in the generated source.
+
+#### new SourceMapConsumer(rawSourceMap)
+
+The only parameter is the raw source map (either as a string which can be
+`JSON.parse`'d, or an object). According to the spec, source maps have the
+following attributes:
+
+* `version`: Which version of the source map spec this map is following.
+
+* `sources`: An array of URLs to the original source files.
+
+* `names`: An array of identifiers which can be referenced by individual
+  mappings.
+
+* `sourceRoot`: Optional. The URL root from which all sources are relative.
+
+* `sourcesContent`: Optional. An array of contents of the original source files.
+
+* `mappings`: A string of base64 VLQs which contain the actual mappings.
+
+* `file`: Optional. The generated filename this source map is associated with.
+
+```js
+var consumer = new sourceMap.SourceMapConsumer(rawSourceMapJsonData);
+```
+
+#### SourceMapConsumer.prototype.computeColumnSpans()
+
+Compute the last column for each generated mapping. The last column is
+inclusive.
+
+```js
+// Before:
+consumer.allGeneratedPositionsFor({ line: 2, source: "foo.coffee" })
+// [ { line: 2,
+//     column: 1 },
+//   { line: 2,
+//     column: 10 },
+//   { line: 2,
+//     column: 20 } ]
+
+consumer.computeColumnSpans();
+
+// After:
+consumer.allGeneratedPositionsFor({ line: 2, source: "foo.coffee" })
+// [ { line: 2,
+//     column: 1,
+//     lastColumn: 9 },
+//   { line: 2,
+//     column: 10,
+//     lastColumn: 19 },
+//   { line: 2,
+//     column: 20,
+//     lastColumn: Infinity } ]
+
+```
+
+#### SourceMapConsumer.prototype.originalPositionFor(generatedPosition)
+
+Returns the original source, line, and column information for the generated
+source's line and column positions provided. The only argument is an object with
+the following properties:
+
+* `line`: The line number in the generated source.  Line numbers in
+  this library are 1-based (note that the underlying source map
+  specification uses 0-based line numbers -- this library handles the
+  translation).
+
+* `column`: The column number in the generated source.  Column numbers
+  in this library are 0-based.
+
+* `bias`: Either `SourceMapConsumer.GREATEST_LOWER_BOUND` or
+  `SourceMapConsumer.LEAST_UPPER_BOUND`. Specifies whether to return the closest
+  element that is smaller than or greater than the one we are searching for,
+  respectively, if the exact element cannot be found.  Defaults to
+  `SourceMapConsumer.GREATEST_LOWER_BOUND`.
+
+and an object is returned with the following properties:
+
+* `source`: The original source file, or null if this information is not
+  available.
+
+* `line`: The line number in the original source, or null if this information is
+  not available.  The line number is 1-based.
+
+* `column`: The column number in the original source, or null if this
+  information is not available.  The column number is 0-based.
+
+* `name`: The original identifier, or null if this information is not available.
+
+```js
+consumer.originalPositionFor({ line: 2, column: 10 })
+// { source: 'foo.coffee',
+//   line: 2,
+//   column: 2,
+//   name: null }
+
+consumer.originalPositionFor({ line: 99999999999999999, column: 999999999999999 })
+// { source: null,
+//   line: null,
+//   column: null,
+//   name: null }
+```
+
+#### SourceMapConsumer.prototype.generatedPositionFor(originalPosition)
+
+Returns the generated line and column information for the original source,
+line, and column positions provided. The only argument is an object with
+the following properties:
+
+* `source`: The filename of the original source.
+
+* `line`: The line number in the original source.  The line number is
+  1-based.
+
+* `column`: The column number in the original source.  The column
+  number is 0-based.
+
+and an object is returned with the following properties:
+
+* `line`: The line number in the generated source, or null.  The line
+  number is 1-based.
+
+* `column`: The column number in the generated source, or null.  The
+  column number is 0-based.
+
+```js
+consumer.generatedPositionFor({ source: "example.js", line: 2, column: 10 })
+// { line: 1,
+//   column: 56 }
+```
+
+#### SourceMapConsumer.prototype.allGeneratedPositionsFor(originalPosition)
+
+Returns all generated line and column information for the original source, line,
+and column provided. If no column is provided, returns all mappings
+corresponding to a either the line we are searching for or the next closest line
+that has any mappings. Otherwise, returns all mappings corresponding to the
+given line and either the column we are searching for or the next closest column
+that has any offsets.
+
+The only argument is an object with the following properties:
+
+* `source`: The filename of the original source.
+
+* `line`: The line number in the original source.  The line number is
+  1-based.
+
+* `column`: Optional. The column number in the original source.  The
+  column number is 0-based.
+
+and an array of objects is returned, each with the following properties:
+
+* `line`: The line number in the generated source, or null.  The line
+  number is 1-based.
+
+* `column`: The column number in the generated source, or null.  The
+  column number is 0-based.
+
+```js
+consumer.allGeneratedpositionsfor({ line: 2, source: "foo.coffee" })
+// [ { line: 2,
+//     column: 1 },
+//   { line: 2,
+//     column: 10 },
+//   { line: 2,
+//     column: 20 } ]
+```
+
+#### SourceMapConsumer.prototype.hasContentsOfAllSources()
+
+Return true if we have the embedded source content for every source listed in
+the source map, false otherwise.
+
+In other words, if this method returns `true`, then
+`consumer.sourceContentFor(s)` will succeed for every source `s` in
+`consumer.sources`.
+
+```js
+// ...
+if (consumer.hasContentsOfAllSources()) {
+  consumerReadyCallback(consumer);
+} else {
+  fetchSources(consumer, consumerReadyCallback);
+}
+// ...
+```
+
+#### SourceMapConsumer.prototype.sourceContentFor(source[, returnNullOnMissing])
+
+Returns the original source content for the source provided. The only
+argument is the URL of the original source file.
+
+If the source content for the given source is not found, then an error is
+thrown. Optionally, pass `true` as the second param to have `null` returned
+instead.
+
+```js
+consumer.sources
+// [ "my-cool-lib.clj" ]
+
+consumer.sourceContentFor("my-cool-lib.clj")
+// "..."
+
+consumer.sourceContentFor("this is not in the source map");
+// Error: "this is not in the source map" is not in the source map
+
+consumer.sourceContentFor("this is not in the source map", true);
+// null
+```
+
+#### SourceMapConsumer.prototype.eachMapping(callback, context, order)
+
+Iterate over each mapping between an original source/line/column and a
+generated line/column in this source map.
+
+* `callback`: The function that is called with each mapping. Mappings have the
+  form `{ source, generatedLine, generatedColumn, originalLine, originalColumn,
+  name }`
+
+* `context`: Optional. If specified, this object will be the value of `this`
+  every time that `callback` is called.
+
+* `order`: Either `SourceMapConsumer.GENERATED_ORDER` or
+  `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to iterate over
+  the mappings sorted by the generated file's line/column order or the
+  original's source/line/column order, respectively. Defaults to
+  `SourceMapConsumer.GENERATED_ORDER`.
+
+```js
+consumer.eachMapping(function (m) { console.log(m); })
+// ...
+// { source: 'illmatic.js',
+//   generatedLine: 1,
+//   generatedColumn: 0,
+//   originalLine: 1,
+//   originalColumn: 0,
+//   name: null }
+// { source: 'illmatic.js',
+//   generatedLine: 2,
+//   generatedColumn: 0,
+//   originalLine: 2,
+//   originalColumn: 0,
+//   name: null }
+// ...
+```
+### SourceMapGenerator
+
+An instance of the SourceMapGenerator represents a source map which is being
+built incrementally.
+
+#### new SourceMapGenerator([startOfSourceMap])
+
+You may pass an object with the following properties:
+
+* `file`: The filename of the generated source that this source map is
+  associated with.
+
+* `sourceRoot`: A root for all relative URLs in this source map.
+
+* `skipValidation`: Optional. When `true`, disables validation of mappings as
+  they are added. This can improve performance but should be used with
+  discretion, as a last resort. Even then, one should avoid using this flag when
+  running tests, if possible.
+
+```js
+var generator = new sourceMap.SourceMapGenerator({
+  file: "my-generated-javascript-file.js",
+  sourceRoot: "http://example.com/app/js/"
+});
+```
+
+#### SourceMapGenerator.fromSourceMap(sourceMapConsumer)
+
+Creates a new `SourceMapGenerator` from an existing `SourceMapConsumer` instance.
+
+* `sourceMapConsumer` The SourceMap.
+
+```js
+var generator = sourceMap.SourceMapGenerator.fromSourceMap(consumer);
+```
+
+#### SourceMapGenerator.prototype.addMapping(mapping)
+
+Add a single mapping from original source line and column to the generated
+source's line and column for this source map being created. The mapping object
+should have the following properties:
+
+* `generated`: An object with the generated line and column positions.
+
+* `original`: An object with the original line and column positions.
+
+* `source`: The original source file (relative to the sourceRoot).
+
+* `name`: An optional original token name for this mapping.
+
+```js
+generator.addMapping({
+  source: "module-one.scm",
+  original: { line: 128, column: 0 },
+  generated: { line: 3, column: 456 }
+})
+```
+
+#### SourceMapGenerator.prototype.setSourceContent(sourceFile, sourceContent)
+
+Set the source content for an original source file.
+
+* `sourceFile` the URL of the original source file.
+
+* `sourceContent` the content of the source file.
+
+```js
+generator.setSourceContent("module-one.scm",
+                           fs.readFileSync("path/to/module-one.scm"))
+```
+
+#### SourceMapGenerator.prototype.applySourceMap(sourceMapConsumer[, sourceFile[, sourceMapPath]])
+
+Applies a SourceMap for a source file to the SourceMap.
+Each mapping to the supplied source file is rewritten using the
+supplied SourceMap. Note: The resolution for the resulting mappings
+is the minimum of this map and the supplied map.
+
+* `sourceMapConsumer`: The SourceMap to be applied.
+
+* `sourceFile`: Optional. The filename of the source file.
+  If omitted, sourceMapConsumer.file will be used, if it exists.
+  Otherwise an error will be thrown.
+
+* `sourceMapPath`: Optional. The dirname of the path to the SourceMap
+  to be applied. If relative, it is relative to the SourceMap.
+
+  This parameter is needed when the two SourceMaps aren't in the same
+  directory, and the SourceMap to be applied contains relative source
+  paths. If so, those relative source paths need to be rewritten
+  relative to the SourceMap.
+
+  If omitted, it is assumed that both SourceMaps are in the same directory,
+  thus not needing any rewriting. (Supplying `'.'` has the same effect.)
+
+#### SourceMapGenerator.prototype.toString()
+
+Renders the source map being generated to a string.
+
+```js
+generator.toString()
+// '{"version":3,"sources":["module-one.scm"],"names":[],"mappings":"...snip...","file":"my-generated-javascript-file.js","sourceRoot":"http://example.com/app/js/"}'
+```
+
+### SourceNode
+
+SourceNodes provide a way to abstract over interpolating and/or concatenating
+snippets of generated JavaScript source code, while maintaining the line and
+column information associated between those snippets and the original source
+code. This is useful as the final intermediate representation a compiler might
+use before outputting the generated JS and source map.
+
+#### new SourceNode([line, column, source[, chunk[, name]]])
+
+* `line`: The original line number associated with this source node, or null if
+  it isn't associated with an original line.  The line number is 1-based.
+
+* `column`: The original column number associated with this source node, or null
+  if it isn't associated with an original column.  The column number
+  is 0-based.
+
+* `source`: The original source's filename; null if no filename is provided.
+
+* `chunk`: Optional. Is immediately passed to `SourceNode.prototype.add`, see
+  below.
+
+* `name`: Optional. The original identifier.
+
+```js
+var node = new SourceNode(1, 2, "a.cpp", [
+  new SourceNode(3, 4, "b.cpp", "extern int status;\n"),
+  new SourceNode(5, 6, "c.cpp", "std::string* make_string(size_t n);\n"),
+  new SourceNode(7, 8, "d.cpp", "int main(int argc, char** argv) {}\n"),
+]);
+```
+
+#### SourceNode.fromStringWithSourceMap(code, sourceMapConsumer[, relativePath])
+
+Creates a SourceNode from generated code and a SourceMapConsumer.
+
+* `code`: The generated code
+
+* `sourceMapConsumer` The SourceMap for the generated code
+
+* `relativePath` The optional path that relative sources in `sourceMapConsumer`
+  should be relative to.
+
+```js
+var consumer = new SourceMapConsumer(fs.readFileSync("path/to/my-file.js.map", "utf8"));
+var node = SourceNode.fromStringWithSourceMap(fs.readFileSync("path/to/my-file.js"),
+                                              consumer);
+```
+
+#### SourceNode.prototype.add(chunk)
+
+Add a chunk of generated JS to this source node.
+
+* `chunk`: A string snippet of generated JS code, another instance of
+   `SourceNode`, or an array where each member is one of those things.
+
+```js
+node.add(" + ");
+node.add(otherNode);
+node.add([leftHandOperandNode, " + ", rightHandOperandNode]);
+```
+
+#### SourceNode.prototype.prepend(chunk)
+
+Prepend a chunk of generated JS to this source node.
+
+* `chunk`: A string snippet of generated JS code, another instance of
+   `SourceNode`, or an array where each member is one of those things.
+
+```js
+node.prepend("/** Build Id: f783haef86324gf **/\n\n");
+```
+
+#### SourceNode.prototype.setSourceContent(sourceFile, sourceContent)
+
+Set the source content for a source file. This will be added to the
+`SourceMap` in the `sourcesContent` field.
+
+* `sourceFile`: The filename of the source file
+
+* `sourceContent`: The content of the source file
+
+```js
+node.setSourceContent("module-one.scm",
+                      fs.readFileSync("path/to/module-one.scm"))
+```
+
+#### SourceNode.prototype.walk(fn)
+
+Walk over the tree of JS snippets in this node and its children. The walking
+function is called once for each snippet of JS and is passed that snippet and
+the its original associated source's line/column location.
+
+* `fn`: The traversal function.
+
+```js
+var node = new SourceNode(1, 2, "a.js", [
+  new SourceNode(3, 4, "b.js", "uno"),
+  "dos",
+  [
+    "tres",
+    new SourceNode(5, 6, "c.js", "quatro")
+  ]
+]);
+
+node.walk(function (code, loc) { console.log("WALK:", code, loc); })
+// WALK: uno { source: 'b.js', line: 3, column: 4, name: null }
+// WALK: dos { source: 'a.js', line: 1, column: 2, name: null }
+// WALK: tres { source: 'a.js', line: 1, column: 2, name: null }
+// WALK: quatro { source: 'c.js', line: 5, column: 6, name: null }
+```
+
+#### SourceNode.prototype.walkSourceContents(fn)
+
+Walk over the tree of SourceNodes. The walking function is called for each
+source file content and is passed the filename and source content.
+
+* `fn`: The traversal function.
+
+```js
+var a = new SourceNode(1, 2, "a.js", "generated from a");
+a.setSourceContent("a.js", "original a");
+var b = new SourceNode(1, 2, "b.js", "generated from b");
+b.setSourceContent("b.js", "original b");
+var c = new SourceNode(1, 2, "c.js", "generated from c");
+c.setSourceContent("c.js", "original c");
+
+var node = new SourceNode(null, null, null, [a, b, c]);
+node.walkSourceContents(function (source, contents) { console.log("WALK:", source, ":", contents); })
+// WALK: a.js : original a
+// WALK: b.js : original b
+// WALK: c.js : original c
+```
+
+#### SourceNode.prototype.join(sep)
+
+Like `Array.prototype.join` except for SourceNodes. Inserts the separator
+between each of this source node's children.
+
+* `sep`: The separator.
+
+```js
+var lhs = new SourceNode(1, 2, "a.rs", "my_copy");
+var operand = new SourceNode(3, 4, "a.rs", "=");
+var rhs = new SourceNode(5, 6, "a.rs", "orig.clone()");
+
+var node = new SourceNode(null, null, null, [ lhs, operand, rhs ]);
+var joinedNode = node.join(" ");
+```
+
+#### SourceNode.prototype.replaceRight(pattern, replacement)
+
+Call `String.prototype.replace` on the very right-most source snippet. Useful
+for trimming white space from the end of a source node, etc.
+
+* `pattern`: The pattern to replace.
+
+* `replacement`: The thing to replace the pattern with.
+
+```js
+// Trim trailing white space.
+node.replaceRight(/\s*$/, "");
+```
+
+#### SourceNode.prototype.toString()
+
+Return the string representation of this source node. Walks over the tree and
+concatenates all the various snippets together to one string.
+
+```js
+var node = new SourceNode(1, 2, "a.js", [
+  new SourceNode(3, 4, "b.js", "uno"),
+  "dos",
+  [
+    "tres",
+    new SourceNode(5, 6, "c.js", "quatro")
+  ]
+]);
+
+node.toString()
+// 'unodostresquatro'
+```
+
+#### SourceNode.prototype.toStringWithSourceMap([startOfSourceMap])
+
+Returns the string representation of this tree of source nodes, plus a
+SourceMapGenerator which contains all the mappings between the generated and
+original sources.
+
+The arguments are the same as those to `new SourceMapGenerator`.
+
+```js
+var node = new SourceNode(1, 2, "a.js", [
+  new SourceNode(3, 4, "b.js", "uno"),
+  "dos",
+  [
+    "tres",
+    new SourceNode(5, 6, "c.js", "quatro")
+  ]
+]);
+
+node.toStringWithSourceMap({ file: "my-output-file.js" })
+// { code: 'unodostresquatro',
+//   map: [object SourceMapGenerator] }
+```
diff --git a/node_modules/terser/node_modules/source-map/dist/source-map.debug.js b/node_modules/terser/node_modules/source-map/dist/source-map.debug.js
new file mode 100644
index 0000000..aad0620
--- /dev/null
+++ b/node_modules/terser/node_modules/source-map/dist/source-map.debug.js
@@ -0,0 +1,3234 @@
+(function webpackUniversalModuleDefinition(root, factory) {
+	if(typeof exports === 'object' && typeof module === 'object')
+		module.exports = factory();
+	else if(typeof define === 'function' && define.amd)
+		define([], factory);
+	else if(typeof exports === 'object')
+		exports["sourceMap"] = factory();
+	else
+		root["sourceMap"] = factory();
+})(this, function() {
+return /******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+/******/
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports, __webpack_require__) {
+
+	/*
+	 * Copyright 2009-2011 Mozilla Foundation and contributors
+	 * Licensed under the New BSD license. See LICENSE.txt or:
+	 * http://opensource.org/licenses/BSD-3-Clause
+	 */
+	exports.SourceMapGenerator = __webpack_require__(1).SourceMapGenerator;
+	exports.SourceMapConsumer = __webpack_require__(7).SourceMapConsumer;
+	exports.SourceNode = __webpack_require__(10).SourceNode;
+
+
+/***/ }),
+/* 1 */
+/***/ (function(module, exports, __webpack_require__) {
+
+	/* -*- Mode: js; js-indent-level: 2; -*- */
+	/*
+	 * Copyright 2011 Mozilla Foundation and contributors
+	 * Licensed under the New BSD license. See LICENSE or:
+	 * http://opensource.org/licenses/BSD-3-Clause
+	 */
+	
+	var base64VLQ = __webpack_require__(2);
+	var util = __webpack_require__(4);
+	var ArraySet = __webpack_require__(5).ArraySet;
+	var MappingList = __webpack_require__(6).MappingList;
+	
+	/**
+	 * An instance of the SourceMapGenerator represents a source map which is
+	 * being built incrementally. You may pass an object with the following
+	 * properties:
+	 *
+	 *   - file: The filename of the generated source.
+	 *   - sourceRoot: A root for all relative URLs in this source map.
+	 */
+	function SourceMapGenerator(aArgs) {
+	  if (!aArgs) {
+	    aArgs = {};
+	  }
+	  this._file = util.getArg(aArgs, 'file', null);
+	  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
+	  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
+	  this._sources = new ArraySet();
+	  this._names = new ArraySet();
+	  this._mappings = new MappingList();
+	  this._sourcesContents = null;
+	}
+	
+	SourceMapGenerator.prototype._version = 3;
+	
+	/**
+	 * Creates a new SourceMapGenerator based on a SourceMapConsumer
+	 *
+	 * @param aSourceMapConsumer The SourceMap.
+	 */
+	SourceMapGenerator.fromSourceMap =
+	  function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
+	    var sourceRoot = aSourceMapConsumer.sourceRoot;
+	    var generator = new SourceMapGenerator({
+	      file: aSourceMapConsumer.file,
+	      sourceRoot: sourceRoot
+	    });
+	    aSourceMapConsumer.eachMapping(function (mapping) {
+	      var newMapping = {
+	        generated: {
+	          line: mapping.generatedLine,
+	          column: mapping.generatedColumn
+	        }
+	      };
+	
+	      if (mapping.source != null) {
+	        newMapping.source = mapping.source;
+	        if (sourceRoot != null) {
+	          newMapping.source = util.relative(sourceRoot, newMapping.source);
+	        }
+	
+	        newMapping.original = {
+	          line: mapping.originalLine,
+	          column: mapping.originalColumn
+	        };
+	
+	        if (mapping.name != null) {
+	          newMapping.name = mapping.name;
+	        }
+	      }
+	
+	      generator.addMapping(newMapping);
+	    });
+	    aSourceMapConsumer.sources.forEach(function (sourceFile) {
+	      var sourceRelative = sourceFile;
+	      if (sourceRoot !== null) {
+	        sourceRelative = util.relative(sourceRoot, sourceFile);
+	      }
+	
+	      if (!generator._sources.has(sourceRelative)) {
+	        generator._sources.add(sourceRelative);
+	      }
+	
+	      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+	      if (content != null) {
+	        generator.setSourceContent(sourceFile, content);
+	      }
+	    });
+	    return generator;
+	  };
+	
+	/**
+	 * Add a single mapping from original source line and column to the generated
+	 * source's line and column for this source map being created. The mapping
+	 * object should have the following properties:
+	 *
+	 *   - generated: An object with the generated line and column positions.
+	 *   - original: An object with the original line and column positions.
+	 *   - source: The original source file (relative to the sourceRoot).
+	 *   - name: An optional original token name for this mapping.
+	 */
+	SourceMapGenerator.prototype.addMapping =
+	  function SourceMapGenerator_addMapping(aArgs) {
+	    var generated = util.getArg(aArgs, 'generated');
+	    var original = util.getArg(aArgs, 'original', null);
+	    var source = util.getArg(aArgs, 'source', null);
+	    var name = util.getArg(aArgs, 'name', null);
+	
+	    if (!this._skipValidation) {
+	      this._validateMapping(generated, original, source, name);
+	    }
+	
+	    if (source != null) {
+	      source = String(source);
+	      if (!this._sources.has(source)) {
+	        this._sources.add(source);
+	      }
+	    }
+	
+	    if (name != null) {
+	      name = String(name);
+	      if (!this._names.has(name)) {
+	        this._names.add(name);
+	      }
+	    }
+	
+	    this._mappings.add({
+	      generatedLine: generated.line,
+	      generatedColumn: generated.column,
+	      originalLine: original != null && original.line,
+	      originalColumn: original != null && original.column,
+	      source: source,
+	      name: name
+	    });
+	  };
+	
+	/**
+	 * Set the source content for a source file.
+	 */
+	SourceMapGenerator.prototype.setSourceContent =
+	  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
+	    var source = aSourceFile;
+	    if (this._sourceRoot != null) {
+	      source = util.relative(this._sourceRoot, source);
+	    }
+	
+	    if (aSourceContent != null) {
+	      // Add the source content to the _sourcesContents map.
+	      // Create a new _sourcesContents map if the property is null.
+	      if (!this._sourcesContents) {
+	        this._sourcesContents = Object.create(null);
+	      }
+	      this._sourcesContents[util.toSetString(source)] = aSourceContent;
+	    } else if (this._sourcesContents) {
+	      // Remove the source file from the _sourcesContents map.
+	      // If the _sourcesContents map is empty, set the property to null.
+	      delete this._sourcesContents[util.toSetString(source)];
+	      if (Object.keys(this._sourcesContents).length === 0) {
+	        this._sourcesContents = null;
+	      }
+	    }
+	  };
+	
+	/**
+	 * Applies the mappings of a sub-source-map for a specific source file to the
+	 * source map being generated. Each mapping to the supplied source file is
+	 * rewritten using the supplied source map. Note: The resolution for the
+	 * resulting mappings is the minimium of this map and the supplied map.
+	 *
+	 * @param aSourceMapConsumer The source map to be applied.
+	 * @param aSourceFile Optional. The filename of the source file.
+	 *        If omitted, SourceMapConsumer's file property will be used.
+	 * @param aSourceMapPath Optional. The dirname of the path to the source map
+	 *        to be applied. If relative, it is relative to the SourceMapConsumer.
+	 *        This parameter is needed when the two source maps aren't in the same
+	 *        directory, and the source map to be applied contains relative source
+	 *        paths. If so, those relative source paths need to be rewritten
+	 *        relative to the SourceMapGenerator.
+	 */
+	SourceMapGenerator.prototype.applySourceMap =
+	  function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
+	    var sourceFile = aSourceFile;
+	    // If aSourceFile is omitted, we will use the file property of the SourceMap
+	    if (aSourceFile == null) {
+	      if (aSourceMapConsumer.file == null) {
+	        throw new Error(
+	          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
+	          'or the source map\'s "file" property. Both were omitted.'
+	        );
+	      }
+	      sourceFile = aSourceMapConsumer.file;
+	    }
+	    var sourceRoot = this._sourceRoot;
+	    // Make "sourceFile" relative if an absolute Url is passed.
+	    if (sourceRoot != null) {
+	      sourceFile = util.relative(sourceRoot, sourceFile);
+	    }
+	    // Applying the SourceMap can add and remove items from the sources and
+	    // the names array.
+	    var newSources = new ArraySet();
+	    var newNames = new ArraySet();
+	
+	    // Find mappings for the "sourceFile"
+	    this._mappings.unsortedForEach(function (mapping) {
+	      if (mapping.source === sourceFile && mapping.originalLine != null) {
+	        // Check if it can be mapped by the source map, then update the mapping.
+	        var original = aSourceMapConsumer.originalPositionFor({
+	          line: mapping.originalLine,
+	          column: mapping.originalColumn
+	        });
+	        if (original.source != null) {
+	          // Copy mapping
+	          mapping.source = original.source;
+	          if (aSourceMapPath != null) {
+	            mapping.source = util.join(aSourceMapPath, mapping.source)
+	          }
+	          if (sourceRoot != null) {
+	            mapping.source = util.relative(sourceRoot, mapping.source);
+	          }
+	          mapping.originalLine = original.line;
+	          mapping.originalColumn = original.column;
+	          if (original.name != null) {
+	            mapping.name = original.name;
+	          }
+	        }
+	      }
+	
+	      var source = mapping.source;
+	      if (source != null && !newSources.has(source)) {
+	        newSources.add(source);
+	      }
+	
+	      var name = mapping.name;
+	      if (name != null && !newNames.has(name)) {
+	        newNames.add(name);
+	      }
+	
+	    }, this);
+	    this._sources = newSources;
+	    this._names = newNames;
+	
+	    // Copy sourcesContents of applied map.
+	    aSourceMapConsumer.sources.forEach(function (sourceFile) {
+	      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+	      if (content != null) {
+	        if (aSourceMapPath != null) {
+	          sourceFile = util.join(aSourceMapPath, sourceFile);
+	        }
+	        if (sourceRoot != null) {
+	          sourceFile = util.relative(sourceRoot, sourceFile);
+	        }
+	        this.setSourceContent(sourceFile, content);
+	      }
+	    }, this);
+	  };
+	
+	/**
+	 * A mapping can have one of the three levels of data:
+	 *
+	 *   1. Just the generated position.
+	 *   2. The Generated position, original position, and original source.
+	 *   3. Generated and original position, original source, as well as a name
+	 *      token.
+	 *
+	 * To maintain consistency, we validate that any new mapping being added falls
+	 * in to one of these categories.
+	 */
+	SourceMapGenerator.prototype._validateMapping =
+	  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
+	                                              aName) {
+	    // When aOriginal is truthy but has empty values for .line and .column,
+	    // it is most likely a programmer error. In this case we throw a very
+	    // specific error message to try to guide them the right way.
+	    // For example: https://github.com/Polymer/polymer-bundler/pull/519
+	    if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {
+	        throw new Error(
+	            'original.line and original.column are not numbers -- you probably meant to omit ' +
+	            'the original mapping entirely and only map the generated position. If so, pass ' +
+	            'null for the original mapping instead of an object with empty or null values.'
+	        );
+	    }
+	
+	    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
+	        && aGenerated.line > 0 && aGenerated.column >= 0
+	        && !aOriginal && !aSource && !aName) {
+	      // Case 1.
+	      return;
+	    }
+	    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
+	             && aOriginal && 'line' in aOriginal && 'column' in aOriginal
+	             && aGenerated.line > 0 && aGenerated.column >= 0
+	             && aOriginal.line > 0 && aOriginal.column >= 0
+	             && aSource) {
+	      // Cases 2 and 3.
+	      return;
+	    }
+	    else {
+	      throw new Error('Invalid mapping: ' + JSON.stringify({
+	        generated: aGenerated,
+	        source: aSource,
+	        original: aOriginal,
+	        name: aName
+	      }));
+	    }
+	  };
+	
+	/**
+	 * Serialize the accumulated mappings in to the stream of base 64 VLQs
+	 * specified by the source map format.
+	 */
+	SourceMapGenerator.prototype._serializeMappings =
+	  function SourceMapGenerator_serializeMappings() {
+	    var previousGeneratedColumn = 0;
+	    var previousGeneratedLine = 1;
+	    var previousOriginalColumn = 0;
+	    var previousOriginalLine = 0;
+	    var previousName = 0;
+	    var previousSource = 0;
+	    var result = '';
+	    var next;
+	    var mapping;
+	    var nameIdx;
+	    var sourceIdx;
+	
+	    var mappings = this._mappings.toArray();
+	    for (var i = 0, len = mappings.length; i < len; i++) {
+	      mapping = mappings[i];
+	      next = ''
+	
+	      if (mapping.generatedLine !== previousGeneratedLine) {
+	        previousGeneratedColumn = 0;
+	        while (mapping.generatedLine !== previousGeneratedLine) {
+	          next += ';';
+	          previousGeneratedLine++;
+	        }
+	      }
+	      else {
+	        if (i > 0) {
+	          if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
+	            continue;
+	          }
+	          next += ',';
+	        }
+	      }
+	
+	      next += base64VLQ.encode(mapping.generatedColumn
+	                                 - previousGeneratedColumn);
+	      previousGeneratedColumn = mapping.generatedColumn;
+	
+	      if (mapping.source != null) {
+	        sourceIdx = this._sources.indexOf(mapping.source);
+	        next += base64VLQ.encode(sourceIdx - previousSource);
+	        previousSource = sourceIdx;
+	
+	        // lines are stored 0-based in SourceMap spec version 3
+	        next += base64VLQ.encode(mapping.originalLine - 1
+	                                   - previousOriginalLine);
+	        previousOriginalLine = mapping.originalLine - 1;
+	
+	        next += base64VLQ.encode(mapping.originalColumn
+	                                   - previousOriginalColumn);
+	        previousOriginalColumn = mapping.originalColumn;
+	
+	        if (mapping.name != null) {
+	          nameIdx = this._names.indexOf(mapping.name);
+	          next += base64VLQ.encode(nameIdx - previousName);
+	          previousName = nameIdx;
+	        }
+	      }
+	
+	      result += next;
+	    }
+	
+	    return result;
+	  };
+	
+	SourceMapGenerator.prototype._generateSourcesContent =
+	  function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
+	    return aSources.map(function (source) {
+	      if (!this._sourcesContents) {
+	        return null;
+	      }
+	      if (aSourceRoot != null) {
+	        source = util.relative(aSourceRoot, source);
+	      }
+	      var key = util.toSetString(source);
+	      return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)
+	        ? this._sourcesContents[key]
+	        : null;
+	    }, this);
+	  };
+	
+	/**
+	 * Externalize the source map.
+	 */
+	SourceMapGenerator.prototype.toJSON =
+	  function SourceMapGenerator_toJSON() {
+	    var map = {
+	      version: this._version,
+	      sources: this._sources.toArray(),
+	      names: this._names.toArray(),
+	      mappings: this._serializeMappings()
+	    };
+	    if (this._file != null) {
+	      map.file = this._file;
+	    }
+	    if (this._sourceRoot != null) {
+	      map.sourceRoot = this._sourceRoot;
+	    }
+	    if (this._sourcesContents) {
+	      map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
+	    }
+	
+	    return map;
+	  };
+	
+	/**
+	 * Render the source map being generated to a string.
+	 */
+	SourceMapGenerator.prototype.toString =
+	  function SourceMapGenerator_toString() {
+	    return JSON.stringify(this.toJSON());
+	  };
+	
+	exports.SourceMapGenerator = SourceMapGenerator;
+
+
+/***/ }),
+/* 2 */
+/***/ (function(module, exports, __webpack_require__) {
+
+	/* -*- Mode: js; js-indent-level: 2; -*- */
+	/*
+	 * Copyright 2011 Mozilla Foundation and contributors
+	 * Licensed under the New BSD license. See LICENSE or:
+	 * http://opensource.org/licenses/BSD-3-Clause
+	 *
+	 * Based on the Base 64 VLQ implementation in Closure Compiler:
+	 * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
+	 *
+	 * Copyright 2011 The Closure Compiler Authors. All rights reserved.
+	 * Redistribution and use in source and binary forms, with or without
+	 * modification, are permitted provided that the following conditions are
+	 * met:
+	 *
+	 *  * Redistributions of source code must retain the above copyright
+	 *    notice, this list of conditions and the following disclaimer.
+	 *  * Redistributions in binary form must reproduce the above
+	 *    copyright notice, this list of conditions and the following
+	 *    disclaimer in the documentation and/or other materials provided
+	 *    with the distribution.
+	 *  * Neither the name of Google Inc. nor the names of its
+	 *    contributors may be used to endorse or promote products derived
+	 *    from this software without specific prior written permission.
+	 *
+	 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+	 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+	 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+	 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+	 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+	 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+	 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+	 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+	 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+	 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+	 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+	 */
+	
+	var base64 = __webpack_require__(3);
+	
+	// A single base 64 digit can contain 6 bits of data. For the base 64 variable
+	// length quantities we use in the source map spec, the first bit is the sign,
+	// the next four bits are the actual value, and the 6th bit is the
+	// continuation bit. The continuation bit tells us whether there are more
+	// digits in this value following this digit.
+	//
+	//   Continuation
+	//   |    Sign
+	//   |    |
+	//   V    V
+	//   101011
+	
+	var VLQ_BASE_SHIFT = 5;
+	
+	// binary: 100000
+	var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
+	
+	// binary: 011111
+	var VLQ_BASE_MASK = VLQ_BASE - 1;
+	
+	// binary: 100000
+	var VLQ_CONTINUATION_BIT = VLQ_BASE;
+	
+	/**
+	 * Converts from a two-complement value to a value where the sign bit is
+	 * placed in the least significant bit.  For example, as decimals:
+	 *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
+	 *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
+	 */
+	function toVLQSigned(aValue) {
+	  return aValue < 0
+	    ? ((-aValue) << 1) + 1
+	    : (aValue << 1) + 0;
+	}
+	
+	/**
+	 * Converts to a two-complement value from a value where the sign bit is
+	 * placed in the least significant bit.  For example, as decimals:
+	 *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1
+	 *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2
+	 */
+	function fromVLQSigned(aValue) {
+	  var isNegative = (aValue & 1) === 1;
+	  var shifted = aValue >> 1;
+	  return isNegative
+	    ? -shifted
+	    : shifted;
+	}
+	
+	/**
+	 * Returns the base 64 VLQ encoded value.
+	 */
+	exports.encode = function base64VLQ_encode(aValue) {
+	  var encoded = "";
+	  var digit;
+	
+	  var vlq = toVLQSigned(aValue);
+	
+	  do {
+	    digit = vlq & VLQ_BASE_MASK;
+	    vlq >>>= VLQ_BASE_SHIFT;
+	    if (vlq > 0) {
+	      // There are still more digits in this value, so we must make sure the
+	      // continuation bit is marked.
+	      digit |= VLQ_CONTINUATION_BIT;
+	    }
+	    encoded += base64.encode(digit);
+	  } while (vlq > 0);
+	
+	  return encoded;
+	};
+	
+	/**
+	 * Decodes the next base 64 VLQ value from the given string and returns the
+	 * value and the rest of the string via the out parameter.
+	 */
+	exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
+	  var strLen = aStr.length;
+	  var result = 0;
+	  var shift = 0;
+	  var continuation, digit;
+	
+	  do {
+	    if (aIndex >= strLen) {
+	      throw new Error("Expected more digits in base 64 VLQ value.");
+	    }
+	
+	    digit = base64.decode(aStr.charCodeAt(aIndex++));
+	    if (digit === -1) {
+	      throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
+	    }
+	
+	    continuation = !!(digit & VLQ_CONTINUATION_BIT);
+	    digit &= VLQ_BASE_MASK;
+	    result = result + (digit << shift);
+	    shift += VLQ_BASE_SHIFT;
+	  } while (continuation);
+	
+	  aOutParam.value = fromVLQSigned(result);
+	  aOutParam.rest = aIndex;
+	};
+
+
+/***/ }),
+/* 3 */
+/***/ (function(module, exports) {
+
+	/* -*- Mode: js; js-indent-level: 2; -*- */
+	/*
+	 * Copyright 2011 Mozilla Foundation and contributors
+	 * Licensed under the New BSD license. See LICENSE or:
+	 * http://opensource.org/licenses/BSD-3-Clause
+	 */
+	
+	var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
+	
+	/**
+	 * Encode an integer in the range of 0 to 63 to a single base 64 digit.
+	 */
+	exports.encode = function (number) {
+	  if (0 <= number && number < intToCharMap.length) {
+	    return intToCharMap[number];
+	  }
+	  throw new TypeError("Must be between 0 and 63: " + number);
+	};
+	
+	/**
+	 * Decode a single base 64 character code digit to an integer. Returns -1 on
+	 * failure.
+	 */
+	exports.decode = function (charCode) {
+	  var bigA = 65;     // 'A'
+	  var bigZ = 90;     // 'Z'
+	
+	  var littleA = 97;  // 'a'
+	  var littleZ = 122; // 'z'
+	
+	  var zero = 48;     // '0'
+	  var nine = 57;     // '9'
+	
+	  var plus = 43;     // '+'
+	  var slash = 47;    // '/'
+	
+	  var littleOffset = 26;
+	  var numberOffset = 52;
+	
+	  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
+	  if (bigA <= charCode && charCode <= bigZ) {
+	    return (charCode - bigA);
+	  }
+	
+	  // 26 - 51: abcdefghijklmnopqrstuvwxyz
+	  if (littleA <= charCode && charCode <= littleZ) {
+	    return (charCode - littleA + littleOffset);
+	  }
+	
+	  // 52 - 61: 0123456789
+	  if (zero <= charCode && charCode <= nine) {
+	    return (charCode - zero + numberOffset);
+	  }
+	
+	  // 62: +
+	  if (charCode == plus) {
+	    return 62;
+	  }
+	
+	  // 63: /
+	  if (charCode == slash) {
+	    return 63;
+	  }
+	
+	  // Invalid base64 digit.
+	  return -1;
+	};
+
+
+/***/ }),
+/* 4 */
+/***/ (function(module, exports) {
+
+	/* -*- Mode: js; js-indent-level: 2; -*- */
+	/*
+	 * Copyright 2011 Mozilla Foundation and contributors
+	 * Licensed under the New BSD license. See LICENSE or:
+	 * http://opensource.org/licenses/BSD-3-Clause
+	 */
+	
+	/**
+	 * This is a helper function for getting values from parameter/options
+	 * objects.
+	 *
+	 * @param args The object we are extracting values from
+	 * @param name The name of the property we are getting.
+	 * @param defaultValue An optional value to return if the property is missing
+	 * from the object. If this is not specified and the property is missing, an
+	 * error will be thrown.
+	 */
+	function getArg(aArgs, aName, aDefaultValue) {
+	  if (aName in aArgs) {
+	    return aArgs[aName];
+	  } else if (arguments.length === 3) {
+	    return aDefaultValue;
+	  } else {
+	    throw new Error('"' + aName + '" is a required argument.');
+	  }
+	}
+	exports.getArg = getArg;
+	
+	var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/;
+	var dataUrlRegexp = /^data:.+\,.+$/;
+	
+	function urlParse(aUrl) {
+	  var match = aUrl.match(urlRegexp);
+	  if (!match) {
+	    return null;
+	  }
+	  return {
+	    scheme: match[1],
+	    auth: match[2],
+	    host: match[3],
+	    port: match[4],
+	    path: match[5]
+	  };
+	}
+	exports.urlParse = urlParse;
+	
+	function urlGenerate(aParsedUrl) {
+	  var url = '';
+	  if (aParsedUrl.scheme) {
+	    url += aParsedUrl.scheme + ':';
+	  }
+	  url += '//';
+	  if (aParsedUrl.auth) {
+	    url += aParsedUrl.auth + '@';
+	  }
+	  if (aParsedUrl.host) {
+	    url += aParsedUrl.host;
+	  }
+	  if (aParsedUrl.port) {
+	    url += ":" + aParsedUrl.port
+	  }
+	  if (aParsedUrl.path) {
+	    url += aParsedUrl.path;
+	  }
+	  return url;
+	}
+	exports.urlGenerate = urlGenerate;
+	
+	/**
+	 * Normalizes a path, or the path portion of a URL:
+	 *
+	 * - Replaces consecutive slashes with one slash.
+	 * - Removes unnecessary '.' parts.
+	 * - Removes unnecessary '<dir>/..' parts.
+	 *
+	 * Based on code in the Node.js 'path' core module.
+	 *
+	 * @param aPath The path or url to normalize.
+	 */
+	function normalize(aPath) {
+	  var path = aPath;
+	  var url = urlParse(aPath);
+	  if (url) {
+	    if (!url.path) {
+	      return aPath;
+	    }
+	    path = url.path;
+	  }
+	  var isAbsolute = exports.isAbsolute(path);
+	
+	  var parts = path.split(/\/+/);
+	  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
+	    part = parts[i];
+	    if (part === '.') {
+	      parts.splice(i, 1);
+	    } else if (part === '..') {
+	      up++;
+	    } else if (up > 0) {
+	      if (part === '') {
+	        // The first part is blank if the path is absolute. Trying to go
+	        // above the root is a no-op. Therefore we can remove all '..' parts
+	        // directly after the root.
+	        parts.splice(i + 1, up);
+	        up = 0;
+	      } else {
+	        parts.splice(i, 2);
+	        up--;
+	      }
+	    }
+	  }
+	  path = parts.join('/');
+	
+	  if (path === '') {
+	    path = isAbsolute ? '/' : '.';
+	  }
+	
+	  if (url) {
+	    url.path = path;
+	    return urlGenerate(url);
+	  }
+	  return path;
+	}
+	exports.normalize = normalize;
+	
+	/**
+	 * Joins two paths/URLs.
+	 *
+	 * @param aRoot The root path or URL.
+	 * @param aPath The path or URL to be joined with the root.
+	 *
+	 * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
+	 *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended
+	 *   first.
+	 * - Otherwise aPath is a path. If aRoot is a URL, then its path portion
+	 *   is updated with the result and aRoot is returned. Otherwise the result
+	 *   is returned.
+	 *   - If aPath is absolute, the result is aPath.
+	 *   - Otherwise the two paths are joined with a slash.
+	 * - Joining for example 'http://' and 'www.example.com' is also supported.
+	 */
+	function join(aRoot, aPath) {
+	  if (aRoot === "") {
+	    aRoot = ".";
+	  }
+	  if (aPath === "") {
+	    aPath = ".";
+	  }
+	  var aPathUrl = urlParse(aPath);
+	  var aRootUrl = urlParse(aRoot);
+	  if (aRootUrl) {
+	    aRoot = aRootUrl.path || '/';
+	  }
+	
+	  // `join(foo, '//www.example.org')`
+	  if (aPathUrl && !aPathUrl.scheme) {
+	    if (aRootUrl) {
+	      aPathUrl.scheme = aRootUrl.scheme;
+	    }
+	    return urlGenerate(aPathUrl);
+	  }
+	
+	  if (aPathUrl || aPath.match(dataUrlRegexp)) {
+	    return aPath;
+	  }
+	
+	  // `join('http://', 'www.example.com')`
+	  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
+	    aRootUrl.host = aPath;
+	    return urlGenerate(aRootUrl);
+	  }
+	
+	  var joined = aPath.charAt(0) === '/'
+	    ? aPath
+	    : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);
+	
+	  if (aRootUrl) {
+	    aRootUrl.path = joined;
+	    return urlGenerate(aRootUrl);
+	  }
+	  return joined;
+	}
+	exports.join = join;
+	
+	exports.isAbsolute = function (aPath) {
+	  return aPath.charAt(0) === '/' || urlRegexp.test(aPath);
+	};
+	
+	/**
+	 * Make a path relative to a URL or another path.
+	 *
+	 * @param aRoot The root path or URL.
+	 * @param aPath The path or URL to be made relative to aRoot.
+	 */
+	function relative(aRoot, aPath) {
+	  if (aRoot === "") {
+	    aRoot = ".";
+	  }
+	
+	  aRoot = aRoot.replace(/\/$/, '');
+	
+	  // It is possible for the path to be above the root. In this case, simply
+	  // checking whether the root is a prefix of the path won't work. Instead, we
+	  // need to remove components from the root one by one, until either we find
+	  // a prefix that fits, or we run out of components to remove.
+	  var level = 0;
+	  while (aPath.indexOf(aRoot + '/') !== 0) {
+	    var index = aRoot.lastIndexOf("/");
+	    if (index < 0) {
+	      return aPath;
+	    }
+	
+	    // If the only part of the root that is left is the scheme (i.e. http://,
+	    // file:///, etc.), one or more slashes (/), or simply nothing at all, we
+	    // have exhausted all components, so the path is not relative to the root.
+	    aRoot = aRoot.slice(0, index);
+	    if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
+	      return aPath;
+	    }
+	
+	    ++level;
+	  }
+	
+	  // Make sure we add a "../" for each component we removed from the root.
+	  return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
+	}
+	exports.relative = relative;
+	
+	var supportsNullProto = (function () {
+	  var obj = Object.create(null);
+	  return !('__proto__' in obj);
+	}());
+	
+	function identity (s) {
+	  return s;
+	}
+	
+	/**
+	 * Because behavior goes wacky when you set `__proto__` on objects, we
+	 * have to prefix all the strings in our set with an arbitrary character.
+	 *
+	 * See https://github.com/mozilla/source-map/pull/31 and
+	 * https://github.com/mozilla/source-map/issues/30
+	 *
+	 * @param String aStr
+	 */
+	function toSetString(aStr) {
+	  if (isProtoString(aStr)) {
+	    return '$' + aStr;
+	  }
+	
+	  return aStr;
+	}
+	exports.toSetString = supportsNullProto ? identity : toSetString;
+	
+	function fromSetString(aStr) {
+	  if (isProtoString(aStr)) {
+	    return aStr.slice(1);
+	  }
+	
+	  return aStr;
+	}
+	exports.fromSetString = supportsNullProto ? identity : fromSetString;
+	
+	function isProtoString(s) {
+	  if (!s) {
+	    return false;
+	  }
+	
+	  var length = s.length;
+	
+	  if (length < 9 /* "__proto__".length */) {
+	    return false;
+	  }
+	
+	  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||
+	      s.charCodeAt(length - 2) !== 95  /* '_' */ ||
+	      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||
+	      s.charCodeAt(length - 4) !== 116 /* 't' */ ||
+	      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||
+	      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||
+	      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||
+	      s.charCodeAt(length - 8) !== 95  /* '_' */ ||
+	      s.charCodeAt(length - 9) !== 95  /* '_' */) {
+	    return false;
+	  }
+	
+	  for (var i = length - 10; i >= 0; i--) {
+	    if (s.charCodeAt(i) !== 36 /* '$' */) {
+	      return false;
+	    }
+	  }
+	
+	  return true;
+	}
+	
+	/**
+	 * Comparator between two mappings where the original positions are compared.
+	 *
+	 * Optionally pass in `true` as `onlyCompareGenerated` to consider two
+	 * mappings with the same original source/line/column, but different generated
+	 * line and column the same. Useful when searching for a mapping with a
+	 * stubbed out mapping.
+	 */
+	function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
+	  var cmp = strcmp(mappingA.source, mappingB.source);
+	  if (cmp !== 0) {
+	    return cmp;
+	  }
+	
+	  cmp = mappingA.originalLine - mappingB.originalLine;
+	  if (cmp !== 0) {
+	    return cmp;
+	  }
+	
+	  cmp = mappingA.originalColumn - mappingB.originalColumn;
+	  if (cmp !== 0 || onlyCompareOriginal) {
+	    return cmp;
+	  }
+	
+	  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
+	  if (cmp !== 0) {
+	    return cmp;
+	  }
+	
+	  cmp = mappingA.generatedLine - mappingB.generatedLine;
+	  if (cmp !== 0) {
+	    return cmp;
+	  }
+	
+	  return strcmp(mappingA.name, mappingB.name);
+	}
+	exports.compareByOriginalPositions = compareByOriginalPositions;
+	
+	/**
+	 * Comparator between two mappings with deflated source and name indices where
+	 * the generated positions are compared.
+	 *
+	 * Optionally pass in `true` as `onlyCompareGenerated` to consider two
+	 * mappings with the same generated line and column, but different
+	 * source/name/original line and column the same. Useful when searching for a
+	 * mapping with a stubbed out mapping.
+	 */
+	function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
+	  var cmp = mappingA.generatedLine - mappingB.generatedLine;
+	  if (cmp !== 0) {
+	    return cmp;
+	  }
+	
+	  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
+	  if (cmp !== 0 || onlyCompareGenerated) {
+	    return cmp;
+	  }
+	
+	  cmp = strcmp(mappingA.source, mappingB.source);
+	  if (cmp !== 0) {
+	    return cmp;
+	  }
+	
+	  cmp = mappingA.originalLine - mappingB.originalLine;
+	  if (cmp !== 0) {
+	    return cmp;
+	  }
+	
+	  cmp = mappingA.originalColumn - mappingB.originalColumn;
+	  if (cmp !== 0) {
+	    return cmp;
+	  }
+	
+	  return strcmp(mappingA.name, mappingB.name);
+	}
+	exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;
+	
+	function strcmp(aStr1, aStr2) {
+	  if (aStr1 === aStr2) {
+	    return 0;
+	  }
+	
+	  if (aStr1 === null) {
+	    return 1; // aStr2 !== null
+	  }
+	
+	  if (aStr2 === null) {
+	    return -1; // aStr1 !== null
+	  }
+	
+	  if (aStr1 > aStr2) {
+	    return 1;
+	  }
+	
+	  return -1;
+	}
+	
+	/**
+	 * Comparator between two mappings with inflated source and name strings where
+	 * the generated positions are compared.
+	 */
+	function compareByGeneratedPositionsInflated(mappingA, mappingB) {
+	  var cmp = mappingA.generatedLine - mappingB.generatedLine;
+	  if (cmp !== 0) {
+	    return cmp;
+	  }
+	
+	  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
+	  if (cmp !== 0) {
+	    return cmp;
+	  }
+	
+	  cmp = strcmp(mappingA.source, mappingB.source);
+	  if (cmp !== 0) {
+	    return cmp;
+	  }
+	
+	  cmp = mappingA.originalLine - mappingB.originalLine;
+	  if (cmp !== 0) {
+	    return cmp;
+	  }
+	
+	  cmp = mappingA.originalColumn - mappingB.originalColumn;
+	  if (cmp !== 0) {
+	    return cmp;
+	  }
+	
+	  return strcmp(mappingA.name, mappingB.name);
+	}
+	exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
+	
+	/**
+	 * Strip any JSON XSSI avoidance prefix from the string (as documented
+	 * in the source maps specification), and then parse the string as
+	 * JSON.
+	 */
+	function parseSourceMapInput(str) {
+	  return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, ''));
+	}
+	exports.parseSourceMapInput = parseSourceMapInput;
+	
+	/**
+	 * Compute the URL of a source given the the source root, the source's
+	 * URL, and the source map's URL.
+	 */
+	function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {
+	  sourceURL = sourceURL || '';
+	
+	  if (sourceRoot) {
+	    // This follows what Chrome does.
+	    if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {
+	      sourceRoot += '/';
+	    }
+	    // The spec says:
+	    //   Line 4: An optional source root, useful for relocating source
+	    //   files on a server or removing repeated values in the
+	    //   “sources” entry.  This value is prepended to the individual
+	    //   entries in the “source” field.
+	    sourceURL = sourceRoot + sourceURL;
+	  }
+	
+	  // Historically, SourceMapConsumer did not take the sourceMapURL as
+	  // a parameter.  This mode is still somewhat supported, which is why
+	  // this code block is conditional.  However, it's preferable to pass
+	  // the source map URL to SourceMapConsumer, so that this function
+	  // can implement the source URL resolution algorithm as outlined in
+	  // the spec.  This block is basically the equivalent of:
+	  //    new URL(sourceURL, sourceMapURL).toString()
+	  // ... except it avoids using URL, which wasn't available in the
+	  // older releases of node still supported by this library.
+	  //
+	  // The spec says:
+	  //   If the sources are not absolute URLs after prepending of the
+	  //   “sourceRoot”, the sources are resolved relative to the
+	  //   SourceMap (like resolving script src in a html document).
+	  if (sourceMapURL) {
+	    var parsed = urlParse(sourceMapURL);
+	    if (!parsed) {
+	      throw new Error("sourceMapURL could not be parsed");
+	    }
+	    if (parsed.path) {
+	      // Strip the last path component, but keep the "/".
+	      var index = parsed.path.lastIndexOf('/');
+	      if (index >= 0) {
+	        parsed.path = parsed.path.substring(0, index + 1);
+	      }
+	    }
+	    sourceURL = join(urlGenerate(parsed), sourceURL);
+	  }
+	
+	  return normalize(sourceURL);
+	}
+	exports.computeSourceURL = computeSourceURL;
+
+
+/***/ }),
+/* 5 */
+/***/ (function(module, exports, __webpack_require__) {
+
+	/* -*- Mode: js; js-indent-level: 2; -*- */
+	/*
+	 * Copyright 2011 Mozilla Foundation and contributors
+	 * Licensed under the New BSD license. See LICENSE or:
+	 * http://opensource.org/licenses/BSD-3-Clause
+	 */
+	
+	var util = __webpack_require__(4);
+	var has = Object.prototype.hasOwnProperty;
+	var hasNativeMap = typeof Map !== "undefined";
+	
+	/**
+	 * A data structure which is a combination of an array and a set. Adding a new
+	 * member is O(1), testing for membership is O(1), and finding the index of an
+	 * element is O(1). Removing elements from the set is not supported. Only
+	 * strings are supported for membership.
+	 */
+	function ArraySet() {
+	  this._array = [];
+	  this._set = hasNativeMap ? new Map() : Object.create(null);
+	}
+	
+	/**
+	 * Static method for creating ArraySet instances from an existing array.
+	 */
+	ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
+	  var set = new ArraySet();
+	  for (var i = 0, len = aArray.length; i < len; i++) {
+	    set.add(aArray[i], aAllowDuplicates);
+	  }
+	  return set;
+	};
+	
+	/**
+	 * Return how many unique items are in this ArraySet. If duplicates have been
+	 * added, than those do not count towards the size.
+	 *
+	 * @returns Number
+	 */
+	ArraySet.prototype.size = function ArraySet_size() {
+	  return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;
+	};
+	
+	/**
+	 * Add the given string to this set.
+	 *
+	 * @param String aStr
+	 */
+	ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
+	  var sStr = hasNativeMap ? aStr : util.toSetString(aStr);
+	  var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);
+	  var idx = this._array.length;
+	  if (!isDuplicate || aAllowDuplicates) {
+	    this._array.push(aStr);
+	  }
+	  if (!isDuplicate) {
+	    if (hasNativeMap) {
+	      this._set.set(aStr, idx);
+	    } else {
+	      this._set[sStr] = idx;
+	    }
+	  }
+	};
+	
+	/**
+	 * Is the given string a member of this set?
+	 *
+	 * @param String aStr
+	 */
+	ArraySet.prototype.has = function ArraySet_has(aStr) {
+	  if (hasNativeMap) {
+	    return this._set.has(aStr);
+	  } else {
+	    var sStr = util.toSetString(aStr);
+	    return has.call(this._set, sStr);
+	  }
+	};
+	
+	/**
+	 * What is the index of the given string in the array?
+	 *
+	 * @param String aStr
+	 */
+	ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
+	  if (hasNativeMap) {
+	    var idx = this._set.get(aStr);
+	    if (idx >= 0) {
+	        return idx;
+	    }
+	  } else {
+	    var sStr = util.toSetString(aStr);
+	    if (has.call(this._set, sStr)) {
+	      return this._set[sStr];
+	    }
+	  }
+	
+	  throw new Error('"' + aStr + '" is not in the set.');
+	};
+	
+	/**
+	 * What is the element at the given index?
+	 *
+	 * @param Number aIdx
+	 */
+	ArraySet.prototype.at = function ArraySet_at(aIdx) {
+	  if (aIdx >= 0 && aIdx < this._array.length) {
+	    return this._array[aIdx];
+	  }
+	  throw new Error('No element indexed by ' + aIdx);
+	};
+	
+	/**
+	 * Returns the array representation of this set (which has the proper indices
+	 * indicated by indexOf). Note that this is a copy of the internal array used
+	 * for storing the members so that no one can mess with internal state.
+	 */
+	ArraySet.prototype.toArray = function ArraySet_toArray() {
+	  return this._array.slice();
+	};
+	
+	exports.ArraySet = ArraySet;
+
+
+/***/ }),
+/* 6 */
+/***/ (function(module, exports, __webpack_require__) {
+
+	/* -*- Mode: js; js-indent-level: 2; -*- */
+	/*
+	 * Copyright 2014 Mozilla Foundation and contributors
+	 * Licensed under the New BSD license. See LICENSE or:
+	 * http://opensource.org/licenses/BSD-3-Clause
+	 */
+	
+	var util = __webpack_require__(4);
+	
+	/**
+	 * Determine whether mappingB is after mappingA with respect to generated
+	 * position.
+	 */
+	function generatedPositionAfter(mappingA, mappingB) {
+	  // Optimized for most common case
+	  var lineA = mappingA.generatedLine;
+	  var lineB = mappingB.generatedLine;
+	  var columnA = mappingA.generatedColumn;
+	  var columnB = mappingB.generatedColumn;
+	  return lineB > lineA || lineB == lineA && columnB >= columnA ||
+	         util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
+	}
+	
+	/**
+	 * A data structure to provide a sorted view of accumulated mappings in a
+	 * performance conscious manner. It trades a neglibable overhead in general
+	 * case for a large speedup in case of mappings being added in order.
+	 */
+	function MappingList() {
+	  this._array = [];
+	  this._sorted = true;
+	  // Serves as infimum
+	  this._last = {generatedLine: -1, generatedColumn: 0};
+	}
+	
+	/**
+	 * Iterate through internal items. This method takes the same arguments that
+	 * `Array.prototype.forEach` takes.
+	 *
+	 * NOTE: The order of the mappings is NOT guaranteed.
+	 */
+	MappingList.prototype.unsortedForEach =
+	  function MappingList_forEach(aCallback, aThisArg) {
+	    this._array.forEach(aCallback, aThisArg);
+	  };
+	
+	/**
+	 * Add the given source mapping.
+	 *
+	 * @param Object aMapping
+	 */
+	MappingList.prototype.add = function MappingList_add(aMapping) {
+	  if (generatedPositionAfter(this._last, aMapping)) {
+	    this._last = aMapping;
+	    this._array.push(aMapping);
+	  } else {
+	    this._sorted = false;
+	    this._array.push(aMapping);
+	  }
+	};
+	
+	/**
+	 * Returns the flat, sorted array of mappings. The mappings are sorted by
+	 * generated position.
+	 *
+	 * WARNING: This method returns internal data without copying, for
+	 * performance. The return value must NOT be mutated, and should be treated as
+	 * an immutable borrow. If you want to take ownership, you must make your own
+	 * copy.
+	 */
+	MappingList.prototype.toArray = function MappingList_toArray() {
+	  if (!this._sorted) {
+	    this._array.sort(util.compareByGeneratedPositionsInflated);
+	    this._sorted = true;
+	  }
+	  return this._array;
+	};
+	
+	exports.MappingList = MappingList;
+
+
+/***/ }),
+/* 7 */
+/***/ (function(module, exports, __webpack_require__) {
+
+	/* -*- Mode: js; js-indent-level: 2; -*- */
+	/*
+	 * Copyright 2011 Mozilla Foundation and contributors
+	 * Licensed under the New BSD license. See LICENSE or:
+	 * http://opensource.org/licenses/BSD-3-Clause
+	 */
+	
+	var util = __webpack_require__(4);
+	var binarySearch = __webpack_require__(8);
+	var ArraySet = __webpack_require__(5).ArraySet;
+	var base64VLQ = __webpack_require__(2);
+	var quickSort = __webpack_require__(9).quickSort;
+	
+	function SourceMapConsumer(aSourceMap, aSourceMapURL) {
+	  var sourceMap = aSourceMap;
+	  if (typeof aSourceMap === 'string') {
+	    sourceMap = util.parseSourceMapInput(aSourceMap);
+	  }
+	
+	  return sourceMap.sections != null
+	    ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)
+	    : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);
+	}
+	
+	SourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {
+	  return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);
+	}
+	
+	/**
+	 * The version of the source mapping spec that we are consuming.
+	 */
+	SourceMapConsumer.prototype._version = 3;
+	
+	// `__generatedMappings` and `__originalMappings` are arrays that hold the
+	// parsed mapping coordinates from the source map's "mappings" attribute. They
+	// are lazily instantiated, accessed via the `_generatedMappings` and
+	// `_originalMappings` getters respectively, and we only parse the mappings
+	// and create these arrays once queried for a source location. We jump through
+	// these hoops because there can be many thousands of mappings, and parsing
+	// them is expensive, so we only want to do it if we must.
+	//
+	// Each object in the arrays is of the form:
+	//
+	//     {
+	//       generatedLine: The line number in the generated code,
+	//       generatedColumn: The column number in the generated code,
+	//       source: The path to the original source file that generated this
+	//               chunk of code,
+	//       originalLine: The line number in the original source that
+	//                     corresponds to this chunk of generated code,
+	//       originalColumn: The column number in the original source that
+	//                       corresponds to this chunk of generated code,
+	//       name: The name of the original symbol which generated this chunk of
+	//             code.
+	//     }
+	//
+	// All properties except for `generatedLine` and `generatedColumn` can be
+	// `null`.
+	//
+	// `_generatedMappings` is ordered by the generated positions.
+	//
+	// `_originalMappings` is ordered by the original positions.
+	
+	SourceMapConsumer.prototype.__generatedMappings = null;
+	Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {
+	  configurable: true,
+	  enumerable: true,
+	  get: function () {
+	    if (!this.__generatedMappings) {
+	      this._parseMappings(this._mappings, this.sourceRoot);
+	    }
+	
+	    return this.__generatedMappings;
+	  }
+	});
+	
+	SourceMapConsumer.prototype.__originalMappings = null;
+	Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {
+	  configurable: true,
+	  enumerable: true,
+	  get: function () {
+	    if (!this.__originalMappings) {
+	      this._parseMappings(this._mappings, this.sourceRoot);
+	    }
+	
+	    return this.__originalMappings;
+	  }
+	});
+	
+	SourceMapConsumer.prototype._charIsMappingSeparator =
+	  function SourceMapConsumer_charIsMappingSeparator(aStr, index) {
+	    var c = aStr.charAt(index);
+	    return c === ";" || c === ",";
+	  };
+	
+	/**
+	 * Parse the mappings in a string in to a data structure which we can easily
+	 * query (the ordered arrays in the `this.__generatedMappings` and
+	 * `this.__originalMappings` properties).
+	 */
+	SourceMapConsumer.prototype._parseMappings =
+	  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+	    throw new Error("Subclasses must implement _parseMappings");
+	  };
+	
+	SourceMapConsumer.GENERATED_ORDER = 1;
+	SourceMapConsumer.ORIGINAL_ORDER = 2;
+	
+	SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
+	SourceMapConsumer.LEAST_UPPER_BOUND = 2;
+	
+	/**
+	 * Iterate over each mapping between an original source/line/column and a
+	 * generated line/column in this source map.
+	 *
+	 * @param Function aCallback
+	 *        The function that is called with each mapping.
+	 * @param Object aContext
+	 *        Optional. If specified, this object will be the value of `this` every
+	 *        time that `aCallback` is called.
+	 * @param aOrder
+	 *        Either `SourceMapConsumer.GENERATED_ORDER` or
+	 *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
+	 *        iterate over the mappings sorted by the generated file's line/column
+	 *        order or the original's source/line/column order, respectively. Defaults to
+	 *        `SourceMapConsumer.GENERATED_ORDER`.
+	 */
+	SourceMapConsumer.prototype.eachMapping =
+	  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
+	    var context = aContext || null;
+	    var order = aOrder || SourceMapConsumer.GENERATED_ORDER;
+	
+	    var mappings;
+	    switch (order) {
+	    case SourceMapConsumer.GENERATED_ORDER:
+	      mappings = this._generatedMappings;
+	      break;
+	    case SourceMapConsumer.ORIGINAL_ORDER:
+	      mappings = this._originalMappings;
+	      break;
+	    default:
+	      throw new Error("Unknown order of iteration.");
+	    }
+	
+	    var sourceRoot = this.sourceRoot;
+	    mappings.map(function (mapping) {
+	      var source = mapping.source === null ? null : this._sources.at(mapping.source);
+	      source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);
+	      return {
+	        source: source,
+	        generatedLine: mapping.generatedLine,
+	        generatedColumn: mapping.generatedColumn,
+	        originalLine: mapping.originalLine,
+	        originalColumn: mapping.originalColumn,
+	        name: mapping.name === null ? null : this._names.at(mapping.name)
+	      };
+	    }, this).forEach(aCallback, context);
+	  };
+	
+	/**
+	 * Returns all generated line and column information for the original source,
+	 * line, and column provided. If no column is provided, returns all mappings
+	 * corresponding to a either the line we are searching for or the next
+	 * closest line that has any mappings. Otherwise, returns all mappings
+	 * corresponding to the given line and either the column we are searching for
+	 * or the next closest column that has any offsets.
+	 *
+	 * The only argument is an object with the following properties:
+	 *
+	 *   - source: The filename of the original source.
+	 *   - line: The line number in the original source.  The line number is 1-based.
+	 *   - column: Optional. the column number in the original source.
+	 *    The column number is 0-based.
+	 *
+	 * and an array of objects is returned, each with the following properties:
+	 *
+	 *   - line: The line number in the generated source, or null.  The
+	 *    line number is 1-based.
+	 *   - column: The column number in the generated source, or null.
+	 *    The column number is 0-based.
+	 */
+	SourceMapConsumer.prototype.allGeneratedPositionsFor =
+	  function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
+	    var line = util.getArg(aArgs, 'line');
+	
+	    // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping
+	    // returns the index of the closest mapping less than the needle. By
+	    // setting needle.originalColumn to 0, we thus find the last mapping for
+	    // the given line, provided such a mapping exists.
+	    var needle = {
+	      source: util.getArg(aArgs, 'source'),
+	      originalLine: line,
+	      originalColumn: util.getArg(aArgs, 'column', 0)
+	    };
+	
+	    needle.source = this._findSourceIndex(needle.source);
+	    if (needle.source < 0) {
+	      return [];
+	    }
+	
+	    var mappings = [];
+	
+	    var index = this._findMapping(needle,
+	                                  this._originalMappings,
+	                                  "originalLine",
+	                                  "originalColumn",
+	                                  util.compareByOriginalPositions,
+	                                  binarySearch.LEAST_UPPER_BOUND);
+	    if (index >= 0) {
+	      var mapping = this._originalMappings[index];
+	
+	      if (aArgs.column === undefined) {
+	        var originalLine = mapping.originalLine;
+	
+	        // Iterate until either we run out of mappings, or we run into
+	        // a mapping for a different line than the one we found. Since
+	        // mappings are sorted, this is guaranteed to find all mappings for
+	        // the line we found.
+	        while (mapping && mapping.originalLine === originalLine) {
+	          mappings.push({
+	            line: util.getArg(mapping, 'generatedLine', null),
+	            column: util.getArg(mapping, 'generatedColumn', null),
+	            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
+	          });
+	
+	          mapping = this._originalMappings[++index];
+	        }
+	      } else {
+	        var originalColumn = mapping.originalColumn;
+	
+	        // Iterate until either we run out of mappings, or we run into
+	        // a mapping for a different line than the one we were searching for.
+	        // Since mappings are sorted, this is guaranteed to find all mappings for
+	        // the line we are searching for.
+	        while (mapping &&
+	               mapping.originalLine === line &&
+	               mapping.originalColumn == originalColumn) {
+	          mappings.push({
+	            line: util.getArg(mapping, 'generatedLine', null),
+	            column: util.getArg(mapping, 'generatedColumn', null),
+	            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
+	          });
+	
+	          mapping = this._originalMappings[++index];
+	        }
+	      }
+	    }
+	
+	    return mappings;
+	  };
+	
+	exports.SourceMapConsumer = SourceMapConsumer;
+	
+	/**
+	 * A BasicSourceMapConsumer instance represents a parsed source map which we can
+	 * query for information about the original file positions by giving it a file
+	 * position in the generated source.
+	 *
+	 * The first parameter is the raw source map (either as a JSON string, or
+	 * already parsed to an object). According to the spec, source maps have the
+	 * following attributes:
+	 *
+	 *   - version: Which version of the source map spec this map is following.
+	 *   - sources: An array of URLs to the original source files.
+	 *   - names: An array of identifiers which can be referrenced by individual mappings.
+	 *   - sourceRoot: Optional. The URL root from which all sources are relative.
+	 *   - sourcesContent: Optional. An array of contents of the original source files.
+	 *   - mappings: A string of base64 VLQs which contain the actual mappings.
+	 *   - file: Optional. The generated file this source map is associated with.
+	 *
+	 * Here is an example source map, taken from the source map spec[0]:
+	 *
+	 *     {
+	 *       version : 3,
+	 *       file: "out.js",
+	 *       sourceRoot : "",
+	 *       sources: ["foo.js", "bar.js"],
+	 *       names: ["src", "maps", "are", "fun"],
+	 *       mappings: "AA,AB;;ABCDE;"
+	 *     }
+	 *
+	 * The second parameter, if given, is a string whose value is the URL
+	 * at which the source map was found.  This URL is used to compute the
+	 * sources array.
+	 *
+	 * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
+	 */
+	function BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {
+	  var sourceMap = aSourceMap;
+	  if (typeof aSourceMap === 'string') {
+	    sourceMap = util.parseSourceMapInput(aSourceMap);
+	  }
+	
+	  var version = util.getArg(sourceMap, 'version');
+	  var sources = util.getArg(sourceMap, 'sources');
+	  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
+	  // requires the array) to play nice here.
+	  var names = util.getArg(sourceMap, 'names', []);
+	  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);
+	  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);
+	  var mappings = util.getArg(sourceMap, 'mappings');
+	  var file = util.getArg(sourceMap, 'file', null);
+	
+	  // Once again, Sass deviates from the spec and supplies the version as a
+	  // string rather than a number, so we use loose equality checking here.
+	  if (version != this._version) {
+	    throw new Error('Unsupported version: ' + version);
+	  }
+	
+	  if (sourceRoot) {
+	    sourceRoot = util.normalize(sourceRoot);
+	  }
+	
+	  sources = sources
+	    .map(String)
+	    // Some source maps produce relative source paths like "./foo.js" instead of
+	    // "foo.js".  Normalize these first so that future comparisons will succeed.
+	    // See bugzil.la/1090768.
+	    .map(util.normalize)
+	    // Always ensure that absolute sources are internally stored relative to
+	    // the source root, if the source root is absolute. Not doing this would
+	    // be particularly problematic when the source root is a prefix of the
+	    // source (valid, but why??). See github issue #199 and bugzil.la/1188982.
+	    .map(function (source) {
+	      return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)
+	        ? util.relative(sourceRoot, source)
+	        : source;
+	    });
+	
+	  // Pass `true` below to allow duplicate names and sources. While source maps
+	  // are intended to be compressed and deduplicated, the TypeScript compiler
+	  // sometimes generates source maps with duplicates in them. See Github issue
+	  // #72 and bugzil.la/889492.
+	  this._names = ArraySet.fromArray(names.map(String), true);
+	  this._sources = ArraySet.fromArray(sources, true);
+	
+	  this._absoluteSources = this._sources.toArray().map(function (s) {
+	    return util.computeSourceURL(sourceRoot, s, aSourceMapURL);
+	  });
+	
+	  this.sourceRoot = sourceRoot;
+	  this.sourcesContent = sourcesContent;
+	  this._mappings = mappings;
+	  this._sourceMapURL = aSourceMapURL;
+	  this.file = file;
+	}
+	
+	BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
+	BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;
+	
+	/**
+	 * Utility function to find the index of a source.  Returns -1 if not
+	 * found.
+	 */
+	BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {
+	  var relativeSource = aSource;
+	  if (this.sourceRoot != null) {
+	    relativeSource = util.relative(this.sourceRoot, relativeSource);
+	  }
+	
+	  if (this._sources.has(relativeSource)) {
+	    return this._sources.indexOf(relativeSource);
+	  }
+	
+	  // Maybe aSource is an absolute URL as returned by |sources|.  In
+	  // this case we can't simply undo the transform.
+	  var i;
+	  for (i = 0; i < this._absoluteSources.length; ++i) {
+	    if (this._absoluteSources[i] == aSource) {
+	      return i;
+	    }
+	  }
+	
+	  return -1;
+	};
+	
+	/**
+	 * Create a BasicSourceMapConsumer from a SourceMapGenerator.
+	 *
+	 * @param SourceMapGenerator aSourceMap
+	 *        The source map that will be consumed.
+	 * @param String aSourceMapURL
+	 *        The URL at which the source map can be found (optional)
+	 * @returns BasicSourceMapConsumer
+	 */
+	BasicSourceMapConsumer.fromSourceMap =
+	  function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {
+	    var smc = Object.create(BasicSourceMapConsumer.prototype);
+	
+	    var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
+	    var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
+	    smc.sourceRoot = aSourceMap._sourceRoot;
+	    smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),
+	                                                            smc.sourceRoot);
+	    smc.file = aSourceMap._file;
+	    smc._sourceMapURL = aSourceMapURL;
+	    smc._absoluteSources = smc._sources.toArray().map(function (s) {
+	      return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);
+	    });
+	
+	    // Because we are modifying the entries (by converting string sources and
+	    // names to indices into the sources and names ArraySets), we have to make
+	    // a copy of the entry or else bad things happen. Shared mutable state
+	    // strikes again! See github issue #191.
+	
+	    var generatedMappings = aSourceMap._mappings.toArray().slice();
+	    var destGeneratedMappings = smc.__generatedMappings = [];
+	    var destOriginalMappings = smc.__originalMappings = [];
+	
+	    for (var i = 0, length = generatedMappings.length; i < length; i++) {
+	      var srcMapping = generatedMappings[i];
+	      var destMapping = new Mapping;
+	      destMapping.generatedLine = srcMapping.generatedLine;
+	      destMapping.generatedColumn = srcMapping.generatedColumn;
+	
+	      if (srcMapping.source) {
+	        destMapping.source = sources.indexOf(srcMapping.source);
+	        destMapping.originalLine = srcMapping.originalLine;
+	        destMapping.originalColumn = srcMapping.originalColumn;
+	
+	        if (srcMapping.name) {
+	          destMapping.name = names.indexOf(srcMapping.name);
+	        }
+	
+	        destOriginalMappings.push(destMapping);
+	      }
+	
+	      destGeneratedMappings.push(destMapping);
+	    }
+	
+	    quickSort(smc.__originalMappings, util.compareByOriginalPositions);
+	
+	    return smc;
+	  };
+	
+	/**
+	 * The version of the source mapping spec that we are consuming.
+	 */
+	BasicSourceMapConsumer.prototype._version = 3;
+	
+	/**
+	 * The list of original sources.
+	 */
+	Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {
+	  get: function () {
+	    return this._absoluteSources.slice();
+	  }
+	});
+	
+	/**
+	 * Provide the JIT with a nice shape / hidden class.
+	 */
+	function Mapping() {
+	  this.generatedLine = 0;
+	  this.generatedColumn = 0;
+	  this.source = null;
+	  this.originalLine = null;
+	  this.originalColumn = null;
+	  this.name = null;
+	}
+	
+	/**
+	 * Parse the mappings in a string in to a data structure which we can easily
+	 * query (the ordered arrays in the `this.__generatedMappings` and
+	 * `this.__originalMappings` properties).
+	 */
+	BasicSourceMapConsumer.prototype._parseMappings =
+	  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+	    var generatedLine = 1;
+	    var previousGeneratedColumn = 0;
+	    var previousOriginalLine = 0;
+	    var previousOriginalColumn = 0;
+	    var previousSource = 0;
+	    var previousName = 0;
+	    var length = aStr.length;
+	    var index = 0;
+	    var cachedSegments = {};
+	    var temp = {};
+	    var originalMappings = [];
+	    var generatedMappings = [];
+	    var mapping, str, segment, end, value;
+	
+	    while (index < length) {
+	      if (aStr.charAt(index) === ';') {
+	        generatedLine++;
+	        index++;
+	        previousGeneratedColumn = 0;
+	      }
+	      else if (aStr.charAt(index) === ',') {
+	        index++;
+	      }
+	      else {
+	        mapping = new Mapping();
+	        mapping.generatedLine = generatedLine;
+	
+	        // Because each offset is encoded relative to the previous one,
+	        // many segments often have the same encoding. We can exploit this
+	        // fact by caching the parsed variable length fields of each segment,
+	        // allowing us to avoid a second parse if we encounter the same
+	        // segment again.
+	        for (end = index; end < length; end++) {
+	          if (this._charIsMappingSeparator(aStr, end)) {
+	            break;
+	          }
+	        }
+	        str = aStr.slice(index, end);
+	
+	        segment = cachedSegments[str];
+	        if (segment) {
+	          index += str.length;
+	        } else {
+	          segment = [];
+	          while (index < end) {
+	            base64VLQ.decode(aStr, index, temp);
+	            value = temp.value;
+	            index = temp.rest;
+	            segment.push(value);
+	          }
+	
+	          if (segment.length === 2) {
+	            throw new Error('Found a source, but no line and column');
+	          }
+	
+	          if (segment.length === 3) {
+	            throw new Error('Found a source and line, but no column');
+	          }
+	
+	          cachedSegments[str] = segment;
+	        }
+	
+	        // Generated column.
+	        mapping.generatedColumn = previousGeneratedColumn + segment[0];
+	        previousGeneratedColumn = mapping.generatedColumn;
+	
+	        if (segment.length > 1) {
+	          // Original source.
+	          mapping.source = previousSource + segment[1];
+	          previousSource += segment[1];
+	
+	          // Original line.
+	          mapping.originalLine = previousOriginalLine + segment[2];
+	          previousOriginalLine = mapping.originalLine;
+	          // Lines are stored 0-based
+	          mapping.originalLine += 1;
+	
+	          // Original column.
+	          mapping.originalColumn = previousOriginalColumn + segment[3];
+	          previousOriginalColumn = mapping.originalColumn;
+	
+	          if (segment.length > 4) {
+	            // Original name.
+	            mapping.name = previousName + segment[4];
+	            previousName += segment[4];
+	          }
+	        }
+	
+	        generatedMappings.push(mapping);
+	        if (typeof mapping.originalLine === 'number') {
+	          originalMappings.push(mapping);
+	        }
+	      }
+	    }
+	
+	    quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);
+	    this.__generatedMappings = generatedMappings;
+	
+	    quickSort(originalMappings, util.compareByOriginalPositions);
+	    this.__originalMappings = originalMappings;
+	  };
+	
+	/**
+	 * Find the mapping that best matches the hypothetical "needle" mapping that
+	 * we are searching for in the given "haystack" of mappings.
+	 */
+	BasicSourceMapConsumer.prototype._findMapping =
+	  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,
+	                                         aColumnName, aComparator, aBias) {
+	    // To return the position we are searching for, we must first find the
+	    // mapping for the given position and then return the opposite position it
+	    // points to. Because the mappings are sorted, we can use binary search to
+	    // find the best mapping.
+	
+	    if (aNeedle[aLineName] <= 0) {
+	      throw new TypeError('Line must be greater than or equal to 1, got '
+	                          + aNeedle[aLineName]);
+	    }
+	    if (aNeedle[aColumnName] < 0) {
+	      throw new TypeError('Column must be greater than or equal to 0, got '
+	                          + aNeedle[aColumnName]);
+	    }
+	
+	    return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
+	  };
+	
+	/**
+	 * Compute the last column for each generated mapping. The last column is
+	 * inclusive.
+	 */
+	BasicSourceMapConsumer.prototype.computeColumnSpans =
+	  function SourceMapConsumer_computeColumnSpans() {
+	    for (var index = 0; index < this._generatedMappings.length; ++index) {
+	      var mapping = this._generatedMappings[index];
+	
+	      // Mappings do not contain a field for the last generated columnt. We
+	      // can come up with an optimistic estimate, however, by assuming that
+	      // mappings are contiguous (i.e. given two consecutive mappings, the
+	      // first mapping ends where the second one starts).
+	      if (index + 1 < this._generatedMappings.length) {
+	        var nextMapping = this._generatedMappings[index + 1];
+	
+	        if (mapping.generatedLine === nextMapping.generatedLine) {
+	          mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
+	          continue;
+	        }
+	      }
+	
+	      // The last mapping for each line spans the entire line.
+	      mapping.lastGeneratedColumn = Infinity;
+	    }
+	  };
+	
+	/**
+	 * Returns the original source, line, and column information for the generated
+	 * source's line and column positions provided. The only argument is an object
+	 * with the following properties:
+	 *
+	 *   - line: The line number in the generated source.  The line number
+	 *     is 1-based.
+	 *   - column: The column number in the generated source.  The column
+	 *     number is 0-based.
+	 *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
+	 *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
+	 *     closest element that is smaller than or greater than the one we are
+	 *     searching for, respectively, if the exact element cannot be found.
+	 *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
+	 *
+	 * and an object is returned with the following properties:
+	 *
+	 *   - source: The original source file, or null.
+	 *   - line: The line number in the original source, or null.  The
+	 *     line number is 1-based.
+	 *   - column: The column number in the original source, or null.  The
+	 *     column number is 0-based.
+	 *   - name: The original identifier, or null.
+	 */
+	BasicSourceMapConsumer.prototype.originalPositionFor =
+	  function SourceMapConsumer_originalPositionFor(aArgs) {
+	    var needle = {
+	      generatedLine: util.getArg(aArgs, 'line'),
+	      generatedColumn: util.getArg(aArgs, 'column')
+	    };
+	
+	    var index = this._findMapping(
+	      needle,
+	      this._generatedMappings,
+	      "generatedLine",
+	      "generatedColumn",
+	      util.compareByGeneratedPositionsDeflated,
+	      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
+	    );
+	
+	    if (index >= 0) {
+	      var mapping = this._generatedMappings[index];
+	
+	      if (mapping.generatedLine === needle.generatedLine) {
+	        var source = util.getArg(mapping, 'source', null);
+	        if (source !== null) {
+	          source = this._sources.at(source);
+	          source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);
+	        }
+	        var name = util.getArg(mapping, 'name', null);
+	        if (name !== null) {
+	          name = this._names.at(name);
+	        }
+	        return {
+	          source: source,
+	          line: util.getArg(mapping, 'originalLine', null),
+	          column: util.getArg(mapping, 'originalColumn', null),
+	          name: name
+	        };
+	      }
+	    }
+	
+	    return {
+	      source: null,
+	      line: null,
+	      column: null,
+	      name: null
+	    };
+	  };
+	
+	/**
+	 * Return true if we have the source content for every source in the source
+	 * map, false otherwise.
+	 */
+	BasicSourceMapConsumer.prototype.hasContentsOfAllSources =
+	  function BasicSourceMapConsumer_hasContentsOfAllSources() {
+	    if (!this.sourcesContent) {
+	      return false;
+	    }
+	    return this.sourcesContent.length >= this._sources.size() &&
+	      !this.sourcesContent.some(function (sc) { return sc == null; });
+	  };
+	
+	/**
+	 * Returns the original source content. The only argument is the url of the
+	 * original source file. Returns null if no original source content is
+	 * available.
+	 */
+	BasicSourceMapConsumer.prototype.sourceContentFor =
+	  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
+	    if (!this.sourcesContent) {
+	      return null;
+	    }
+	
+	    var index = this._findSourceIndex(aSource);
+	    if (index >= 0) {
+	      return this.sourcesContent[index];
+	    }
+	
+	    var relativeSource = aSource;
+	    if (this.sourceRoot != null) {
+	      relativeSource = util.relative(this.sourceRoot, relativeSource);
+	    }
+	
+	    var url;
+	    if (this.sourceRoot != null
+	        && (url = util.urlParse(this.sourceRoot))) {
+	      // XXX: file:// URIs and absolute paths lead to unexpected behavior for
+	      // many users. We can help them out when they expect file:// URIs to
+	      // behave like it would if they were running a local HTTP server. See
+	      // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
+	      var fileUriAbsPath = relativeSource.replace(/^file:\/\//, "");
+	      if (url.scheme == "file"
+	          && this._sources.has(fileUriAbsPath)) {
+	        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]
+	      }
+	
+	      if ((!url.path || url.path == "/")
+	          && this._sources.has("/" + relativeSource)) {
+	        return this.sourcesContent[this._sources.indexOf("/" + relativeSource)];
+	      }
+	    }
+	
+	    // This function is used recursively from
+	    // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
+	    // don't want to throw if we can't find the source - we just want to
+	    // return null, so we provide a flag to exit gracefully.
+	    if (nullOnMissing) {
+	      return null;
+	    }
+	    else {
+	      throw new Error('"' + relativeSource + '" is not in the SourceMap.');
+	    }
+	  };
+	
+	/**
+	 * Returns the generated line and column information for the original source,
+	 * line, and column positions provided. The only argument is an object with
+	 * the following properties:
+	 *
+	 *   - source: The filename of the original source.
+	 *   - line: The line number in the original source.  The line number
+	 *     is 1-based.
+	 *   - column: The column number in the original source.  The column
+	 *     number is 0-based.
+	 *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
+	 *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
+	 *     closest element that is smaller than or greater than the one we are
+	 *     searching for, respectively, if the exact element cannot be found.
+	 *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
+	 *
+	 * and an object is returned with the following properties:
+	 *
+	 *   - line: The line number in the generated source, or null.  The
+	 *     line number is 1-based.
+	 *   - column: The column number in the generated source, or null.
+	 *     The column number is 0-based.
+	 */
+	BasicSourceMapConsumer.prototype.generatedPositionFor =
+	  function SourceMapConsumer_generatedPositionFor(aArgs) {
+	    var source = util.getArg(aArgs, 'source');
+	    source = this._findSourceIndex(source);
+	    if (source < 0) {
+	      return {
+	        line: null,
+	        column: null,
+	        lastColumn: null
+	      };
+	    }
+	
+	    var needle = {
+	      source: source,
+	      originalLine: util.getArg(aArgs, 'line'),
+	      originalColumn: util.getArg(aArgs, 'column')
+	    };
+	
+	    var index = this._findMapping(
+	      needle,
+	      this._originalMappings,
+	      "originalLine",
+	      "originalColumn",
+	      util.compareByOriginalPositions,
+	      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
+	    );
+	
+	    if (index >= 0) {
+	      var mapping = this._originalMappings[index];
+	
+	      if (mapping.source === needle.source) {
+	        return {
+	          line: util.getArg(mapping, 'generatedLine', null),
+	          column: util.getArg(mapping, 'generatedColumn', null),
+	          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
+	        };
+	      }
+	    }
+	
+	    return {
+	      line: null,
+	      column: null,
+	      lastColumn: null
+	    };
+	  };
+	
+	exports.BasicSourceMapConsumer = BasicSourceMapConsumer;
+	
+	/**
+	 * An IndexedSourceMapConsumer instance represents a parsed source map which
+	 * we can query for information. It differs from BasicSourceMapConsumer in
+	 * that it takes "indexed" source maps (i.e. ones with a "sections" field) as
+	 * input.
+	 *
+	 * The first parameter is a raw source map (either as a JSON string, or already
+	 * parsed to an object). According to the spec for indexed source maps, they
+	 * have the following attributes:
+	 *
+	 *   - version: Which version of the source map spec this map is following.
+	 *   - file: Optional. The generated file this source map is associated with.
+	 *   - sections: A list of section definitions.
+	 *
+	 * Each value under the "sections" field has two fields:
+	 *   - offset: The offset into the original specified at which this section
+	 *       begins to apply, defined as an object with a "line" and "column"
+	 *       field.
+	 *   - map: A source map definition. This source map could also be indexed,
+	 *       but doesn't have to be.
+	 *
+	 * Instead of the "map" field, it's also possible to have a "url" field
+	 * specifying a URL to retrieve a source map from, but that's currently
+	 * unsupported.
+	 *
+	 * Here's an example source map, taken from the source map spec[0], but
+	 * modified to omit a section which uses the "url" field.
+	 *
+	 *  {
+	 *    version : 3,
+	 *    file: "app.js",
+	 *    sections: [{
+	 *      offset: {line:100, column:10},
+	 *      map: {
+	 *        version : 3,
+	 *        file: "section.js",
+	 *        sources: ["foo.js", "bar.js"],
+	 *        names: ["src", "maps", "are", "fun"],
+	 *        mappings: "AAAA,E;;ABCDE;"
+	 *      }
+	 *    }],
+	 *  }
+	 *
+	 * The second parameter, if given, is a string whose value is the URL
+	 * at which the source map was found.  This URL is used to compute the
+	 * sources array.
+	 *
+	 * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
+	 */
+	function IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {
+	  var sourceMap = aSourceMap;
+	  if (typeof aSourceMap === 'string') {
+	    sourceMap = util.parseSourceMapInput(aSourceMap);
+	  }
+	
+	  var version = util.getArg(sourceMap, 'version');
+	  var sections = util.getArg(sourceMap, 'sections');
+	
+	  if (version != this._version) {
+	    throw new Error('Unsupported version: ' + version);
+	  }
+	
+	  this._sources = new ArraySet();
+	  this._names = new ArraySet();
+	
+	  var lastOffset = {
+	    line: -1,
+	    column: 0
+	  };
+	  this._sections = sections.map(function (s) {
+	    if (s.url) {
+	      // The url field will require support for asynchronicity.
+	      // See https://github.com/mozilla/source-map/issues/16
+	      throw new Error('Support for url field in sections not implemented.');
+	    }
+	    var offset = util.getArg(s, 'offset');
+	    var offsetLine = util.getArg(offset, 'line');
+	    var offsetColumn = util.getArg(offset, 'column');
+	
+	    if (offsetLine < lastOffset.line ||
+	        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
+	      throw new Error('Section offsets must be ordered and non-overlapping.');
+	    }
+	    lastOffset = offset;
+	
+	    return {
+	      generatedOffset: {
+	        // The offset fields are 0-based, but we use 1-based indices when
+	        // encoding/decoding from VLQ.
+	        generatedLine: offsetLine + 1,
+	        generatedColumn: offsetColumn + 1
+	      },
+	      consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)
+	    }
+	  });
+	}
+	
+	IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
+	IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;
+	
+	/**
+	 * The version of the source mapping spec that we are consuming.
+	 */
+	IndexedSourceMapConsumer.prototype._version = 3;
+	
+	/**
+	 * The list of original sources.
+	 */
+	Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {
+	  get: function () {
+	    var sources = [];
+	    for (var i = 0; i < this._sections.length; i++) {
+	      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
+	        sources.push(this._sections[i].consumer.sources[j]);
+	      }
+	    }
+	    return sources;
+	  }
+	});
+	
+	/**
+	 * Returns the original source, line, and column information for the generated
+	 * source's line and column positions provided. The only argument is an object
+	 * with the following properties:
+	 *
+	 *   - line: The line number in the generated source.  The line number
+	 *     is 1-based.
+	 *   - column: The column number in the generated source.  The column
+	 *     number is 0-based.
+	 *
+	 * and an object is returned with the following properties:
+	 *
+	 *   - source: The original source file, or null.
+	 *   - line: The line number in the original source, or null.  The
+	 *     line number is 1-based.
+	 *   - column: The column number in the original source, or null.  The
+	 *     column number is 0-based.
+	 *   - name: The original identifier, or null.
+	 */
+	IndexedSourceMapConsumer.prototype.originalPositionFor =
+	  function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
+	    var needle = {
+	      generatedLine: util.getArg(aArgs, 'line'),
+	      generatedColumn: util.getArg(aArgs, 'column')
+	    };
+	
+	    // Find the section containing the generated position we're trying to map
+	    // to an original position.
+	    var sectionIndex = binarySearch.search(needle, this._sections,
+	      function(needle, section) {
+	        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;
+	        if (cmp) {
+	          return cmp;
+	        }
+	
+	        return (needle.generatedColumn -
+	                section.generatedOffset.generatedColumn);
+	      });
+	    var section = this._sections[sectionIndex];
+	
+	    if (!section) {
+	      return {
+	        source: null,
+	        line: null,
+	        column: null,
+	        name: null
+	      };
+	    }
+	
+	    return section.consumer.originalPositionFor({
+	      line: needle.generatedLine -
+	        (section.generatedOffset.generatedLine - 1),
+	      column: needle.generatedColumn -
+	        (section.generatedOffset.generatedLine === needle.generatedLine
+	         ? section.generatedOffset.generatedColumn - 1
+	         : 0),
+	      bias: aArgs.bias
+	    });
+	  };
+	
+	/**
+	 * Return true if we have the source content for every source in the source
+	 * map, false otherwise.
+	 */
+	IndexedSourceMapConsumer.prototype.hasContentsOfAllSources =
+	  function IndexedSourceMapConsumer_hasContentsOfAllSources() {
+	    return this._sections.every(function (s) {
+	      return s.consumer.hasContentsOfAllSources();
+	    });
+	  };
+	
+	/**
+	 * Returns the original source content. The only argument is the url of the
+	 * original source file. Returns null if no original source content is
+	 * available.
+	 */
+	IndexedSourceMapConsumer.prototype.sourceContentFor =
+	  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
+	    for (var i = 0; i < this._sections.length; i++) {
+	      var section = this._sections[i];
+	
+	      var content = section.consumer.sourceContentFor(aSource, true);
+	      if (content) {
+	        return content;
+	      }
+	    }
+	    if (nullOnMissing) {
+	      return null;
+	    }
+	    else {
+	      throw new Error('"' + aSource + '" is not in the SourceMap.');
+	    }
+	  };
+	
+	/**
+	 * Returns the generated line and column information for the original source,
+	 * line, and column positions provided. The only argument is an object with
+	 * the following properties:
+	 *
+	 *   - source: The filename of the original source.
+	 *   - line: The line number in the original source.  The line number
+	 *     is 1-based.
+	 *   - column: The column number in the original source.  The column
+	 *     number is 0-based.
+	 *
+	 * and an object is returned with the following properties:
+	 *
+	 *   - line: The line number in the generated source, or null.  The
+	 *     line number is 1-based. 
+	 *   - column: The column number in the generated source, or null.
+	 *     The column number is 0-based.
+	 */
+	IndexedSourceMapConsumer.prototype.generatedPositionFor =
+	  function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
+	    for (var i = 0; i < this._sections.length; i++) {
+	      var section = this._sections[i];
+	
+	      // Only consider this section if the requested source is in the list of
+	      // sources of the consumer.
+	      if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {
+	        continue;
+	      }
+	      var generatedPosition = section.consumer.generatedPositionFor(aArgs);
+	      if (generatedPosition) {
+	        var ret = {
+	          line: generatedPosition.line +
+	            (section.generatedOffset.generatedLine - 1),
+	          column: generatedPosition.column +
+	            (section.generatedOffset.generatedLine === generatedPosition.line
+	             ? section.generatedOffset.generatedColumn - 1
+	             : 0)
+	        };
+	        return ret;
+	      }
+	    }
+	
+	    return {
+	      line: null,
+	      column: null
+	    };
+	  };
+	
+	/**
+	 * Parse the mappings in a string in to a data structure which we can easily
+	 * query (the ordered arrays in the `this.__generatedMappings` and
+	 * `this.__originalMappings` properties).
+	 */
+	IndexedSourceMapConsumer.prototype._parseMappings =
+	  function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+	    this.__generatedMappings = [];
+	    this.__originalMappings = [];
+	    for (var i = 0; i < this._sections.length; i++) {
+	      var section = this._sections[i];
+	      var sectionMappings = section.consumer._generatedMappings;
+	      for (var j = 0; j < sectionMappings.length; j++) {
+	        var mapping = sectionMappings[j];
+	
+	        var source = section.consumer._sources.at(mapping.source);
+	        source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);
+	        this._sources.add(source);
+	        source = this._sources.indexOf(source);
+	
+	        var name = null;
+	        if (mapping.name) {
+	          name = section.consumer._names.at(mapping.name);
+	          this._names.add(name);
+	          name = this._names.indexOf(name);
+	        }
+	
+	        // The mappings coming from the consumer for the section have
+	        // generated positions relative to the start of the section, so we
+	        // need to offset them to be relative to the start of the concatenated
+	        // generated file.
+	        var adjustedMapping = {
+	          source: source,
+	          generatedLine: mapping.generatedLine +
+	            (section.generatedOffset.generatedLine - 1),
+	          generatedColumn: mapping.generatedColumn +
+	            (section.generatedOffset.generatedLine === mapping.generatedLine
+	            ? section.generatedOffset.generatedColumn - 1
+	            : 0),
+	          originalLine: mapping.originalLine,
+	          originalColumn: mapping.originalColumn,
+	          name: name
+	        };
+	
+	        this.__generatedMappings.push(adjustedMapping);
+	        if (typeof adjustedMapping.originalLine === 'number') {
+	          this.__originalMappings.push(adjustedMapping);
+	        }
+	      }
+	    }
+	
+	    quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);
+	    quickSort(this.__originalMappings, util.compareByOriginalPositions);
+	  };
+	
+	exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
+
+
+/***/ }),
+/* 8 */
+/***/ (function(module, exports) {
+
+	/* -*- Mode: js; js-indent-level: 2; -*- */
+	/*
+	 * Copyright 2011 Mozilla Foundation and contributors
+	 * Licensed under the New BSD license. See LICENSE or:
+	 * http://opensource.org/licenses/BSD-3-Clause
+	 */
+	
+	exports.GREATEST_LOWER_BOUND = 1;
+	exports.LEAST_UPPER_BOUND = 2;
+	
+	/**
+	 * Recursive implementation of binary search.
+	 *
+	 * @param aLow Indices here and lower do not contain the needle.
+	 * @param aHigh Indices here and higher do not contain the needle.
+	 * @param aNeedle The element being searched for.
+	 * @param aHaystack The non-empty array being searched.
+	 * @param aCompare Function which takes two elements and returns -1, 0, or 1.
+	 * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
+	 *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
+	 *     closest element that is smaller than or greater than the one we are
+	 *     searching for, respectively, if the exact element cannot be found.
+	 */
+	function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
+	  // This function terminates when one of the following is true:
+	  //
+	  //   1. We find the exact element we are looking for.
+	  //
+	  //   2. We did not find the exact element, but we can return the index of
+	  //      the next-closest element.
+	  //
+	  //   3. We did not find the exact element, and there is no next-closest
+	  //      element than the one we are searching for, so we return -1.
+	  var mid = Math.floor((aHigh - aLow) / 2) + aLow;
+	  var cmp = aCompare(aNeedle, aHaystack[mid], true);
+	  if (cmp === 0) {
+	    // Found the element we are looking for.
+	    return mid;
+	  }
+	  else if (cmp > 0) {
+	    // Our needle is greater than aHaystack[mid].
+	    if (aHigh - mid > 1) {
+	      // The element is in the upper half.
+	      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
+	    }
+	
+	    // The exact needle element was not found in this haystack. Determine if
+	    // we are in termination case (3) or (2) and return the appropriate thing.
+	    if (aBias == exports.LEAST_UPPER_BOUND) {
+	      return aHigh < aHaystack.length ? aHigh : -1;
+	    } else {
+	      return mid;
+	    }
+	  }
+	  else {
+	    // Our needle is less than aHaystack[mid].
+	    if (mid - aLow > 1) {
+	      // The element is in the lower half.
+	      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
+	    }
+	
+	    // we are in termination case (3) or (2) and return the appropriate thing.
+	    if (aBias == exports.LEAST_UPPER_BOUND) {
+	      return mid;
+	    } else {
+	      return aLow < 0 ? -1 : aLow;
+	    }
+	  }
+	}
+	
+	/**
+	 * This is an implementation of binary search which will always try and return
+	 * the index of the closest element if there is no exact hit. This is because
+	 * mappings between original and generated line/col pairs are single points,
+	 * and there is an implicit region between each of them, so a miss just means
+	 * that you aren't on the very start of a region.
+	 *
+	 * @param aNeedle The element you are looking for.
+	 * @param aHaystack The array that is being searched.
+	 * @param aCompare A function which takes the needle and an element in the
+	 *     array and returns -1, 0, or 1 depending on whether the needle is less
+	 *     than, equal to, or greater than the element, respectively.
+	 * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
+	 *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
+	 *     closest element that is smaller than or greater than the one we are
+	 *     searching for, respectively, if the exact element cannot be found.
+	 *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
+	 */
+	exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
+	  if (aHaystack.length === 0) {
+	    return -1;
+	  }
+	
+	  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
+	                              aCompare, aBias || exports.GREATEST_LOWER_BOUND);
+	  if (index < 0) {
+	    return -1;
+	  }
+	
+	  // We have found either the exact element, or the next-closest element than
+	  // the one we are searching for. However, there may be more than one such
+	  // element. Make sure we always return the smallest of these.
+	  while (index - 1 >= 0) {
+	    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
+	      break;
+	    }
+	    --index;
+	  }
+	
+	  return index;
+	};
+
+
+/***/ }),
+/* 9 */
+/***/ (function(module, exports) {
+
+	/* -*- Mode: js; js-indent-level: 2; -*- */
+	/*
+	 * Copyright 2011 Mozilla Foundation and contributors
+	 * Licensed under the New BSD license. See LICENSE or:
+	 * http://opensource.org/licenses/BSD-3-Clause
+	 */
+	
+	// It turns out that some (most?) JavaScript engines don't self-host
+	// `Array.prototype.sort`. This makes sense because C++ will likely remain
+	// faster than JS when doing raw CPU-intensive sorting. However, when using a
+	// custom comparator function, calling back and forth between the VM's C++ and
+	// JIT'd JS is rather slow *and* loses JIT type information, resulting in
+	// worse generated code for the comparator function than would be optimal. In
+	// fact, when sorting with a comparator, these costs outweigh the benefits of
+	// sorting in C++. By using our own JS-implemented Quick Sort (below), we get
+	// a ~3500ms mean speed-up in `bench/bench.html`.
+	
+	/**
+	 * Swap the elements indexed by `x` and `y` in the array `ary`.
+	 *
+	 * @param {Array} ary
+	 *        The array.
+	 * @param {Number} x
+	 *        The index of the first item.
+	 * @param {Number} y
+	 *        The index of the second item.
+	 */
+	function swap(ary, x, y) {
+	  var temp = ary[x];
+	  ary[x] = ary[y];
+	  ary[y] = temp;
+	}
+	
+	/**
+	 * Returns a random integer within the range `low .. high` inclusive.
+	 *
+	 * @param {Number} low
+	 *        The lower bound on the range.
+	 * @param {Number} high
+	 *        The upper bound on the range.
+	 */
+	function randomIntInRange(low, high) {
+	  return Math.round(low + (Math.random() * (high - low)));
+	}
+	
+	/**
+	 * The Quick Sort algorithm.
+	 *
+	 * @param {Array} ary
+	 *        An array to sort.
+	 * @param {function} comparator
+	 *        Function to use to compare two items.
+	 * @param {Number} p
+	 *        Start index of the array
+	 * @param {Number} r
+	 *        End index of the array
+	 */
+	function doQuickSort(ary, comparator, p, r) {
+	  // If our lower bound is less than our upper bound, we (1) partition the
+	  // array into two pieces and (2) recurse on each half. If it is not, this is
+	  // the empty array and our base case.
+	
+	  if (p < r) {
+	    // (1) Partitioning.
+	    //
+	    // The partitioning chooses a pivot between `p` and `r` and moves all
+	    // elements that are less than or equal to the pivot to the before it, and
+	    // all the elements that are greater than it after it. The effect is that
+	    // once partition is done, the pivot is in the exact place it will be when
+	    // the array is put in sorted order, and it will not need to be moved
+	    // again. This runs in O(n) time.
+	
+	    // Always choose a random pivot so that an input array which is reverse
+	    // sorted does not cause O(n^2) running time.
+	    var pivotIndex = randomIntInRange(p, r);
+	    var i = p - 1;
+	
+	    swap(ary, pivotIndex, r);
+	    var pivot = ary[r];
+	
+	    // Immediately after `j` is incremented in this loop, the following hold
+	    // true:
+	    //
+	    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.
+	    //
+	    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.
+	    for (var j = p; j < r; j++) {
+	      if (comparator(ary[j], pivot) <= 0) {
+	        i += 1;
+	        swap(ary, i, j);
+	      }
+	    }
+	
+	    swap(ary, i + 1, j);
+	    var q = i + 1;
+	
+	    // (2) Recurse on each half.
+	
+	    doQuickSort(ary, comparator, p, q - 1);
+	    doQuickSort(ary, comparator, q + 1, r);
+	  }
+	}
+	
+	/**
+	 * Sort the given array in-place with the given comparator function.
+	 *
+	 * @param {Array} ary
+	 *        An array to sort.
+	 * @param {function} comparator
+	 *        Function to use to compare two items.
+	 */
+	exports.quickSort = function (ary, comparator) {
+	  doQuickSort(ary, comparator, 0, ary.length - 1);
+	};
+
+
+/***/ }),
+/* 10 */
+/***/ (function(module, exports, __webpack_require__) {
+
+	/* -*- Mode: js; js-indent-level: 2; -*- */
+	/*
+	 * Copyright 2011 Mozilla Foundation and contributors
+	 * Licensed under the New BSD license. See LICENSE or:
+	 * http://opensource.org/licenses/BSD-3-Clause
+	 */
+	
+	var SourceMapGenerator = __webpack_require__(1).SourceMapGenerator;
+	var util = __webpack_require__(4);
+	
+	// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
+	// operating systems these days (capturing the result).
+	var REGEX_NEWLINE = /(\r?\n)/;
+	
+	// Newline character code for charCodeAt() comparisons
+	var NEWLINE_CODE = 10;
+	
+	// Private symbol for identifying `SourceNode`s when multiple versions of
+	// the source-map library are loaded. This MUST NOT CHANGE across
+	// versions!
+	var isSourceNode = "$$$isSourceNode$$$";
+	
+	/**
+	 * SourceNodes provide a way to abstract over interpolating/concatenating
+	 * snippets of generated JavaScript source code while maintaining the line and
+	 * column information associated with the original source code.
+	 *
+	 * @param aLine The original line number.
+	 * @param aColumn The original column number.
+	 * @param aSource The original source's filename.
+	 * @param aChunks Optional. An array of strings which are snippets of
+	 *        generated JS, or other SourceNodes.
+	 * @param aName The original identifier.
+	 */
+	function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
+	  this.children = [];
+	  this.sourceContents = {};
+	  this.line = aLine == null ? null : aLine;
+	  this.column = aColumn == null ? null : aColumn;
+	  this.source = aSource == null ? null : aSource;
+	  this.name = aName == null ? null : aName;
+	  this[isSourceNode] = true;
+	  if (aChunks != null) this.add(aChunks);
+	}
+	
+	/**
+	 * Creates a SourceNode from generated code and a SourceMapConsumer.
+	 *
+	 * @param aGeneratedCode The generated code
+	 * @param aSourceMapConsumer The SourceMap for the generated code
+	 * @param aRelativePath Optional. The path that relative sources in the
+	 *        SourceMapConsumer should be relative to.
+	 */
+	SourceNode.fromStringWithSourceMap =
+	  function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
+	    // The SourceNode we want to fill with the generated code
+	    // and the SourceMap
+	    var node = new SourceNode();
+	
+	    // All even indices of this array are one line of the generated code,
+	    // while all odd indices are the newlines between two adjacent lines
+	    // (since `REGEX_NEWLINE` captures its match).
+	    // Processed fragments are accessed by calling `shiftNextLine`.
+	    var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
+	    var remainingLinesIndex = 0;
+	    var shiftNextLine = function() {
+	      var lineContents = getNextLine();
+	      // The last line of a file might not have a newline.
+	      var newLine = getNextLine() || "";
+	      return lineContents + newLine;
+	
+	      function getNextLine() {
+	        return remainingLinesIndex < remainingLines.length ?
+	            remainingLines[remainingLinesIndex++] : undefined;
+	      }
+	    };
+	
+	    // We need to remember the position of "remainingLines"
+	    var lastGeneratedLine = 1, lastGeneratedColumn = 0;
+	
+	    // The generate SourceNodes we need a code range.
+	    // To extract it current and last mapping is used.
+	    // Here we store the last mapping.
+	    var lastMapping = null;
+	
+	    aSourceMapConsumer.eachMapping(function (mapping) {
+	      if (lastMapping !== null) {
+	        // We add the code from "lastMapping" to "mapping":
+	        // First check if there is a new line in between.
+	        if (lastGeneratedLine < mapping.generatedLine) {
+	          // Associate first line with "lastMapping"
+	          addMappingWithCode(lastMapping, shiftNextLine());
+	          lastGeneratedLine++;
+	          lastGeneratedColumn = 0;
+	          // The remaining code is added without mapping
+	        } else {
+	          // There is no new line in between.
+	          // Associate the code between "lastGeneratedColumn" and
+	          // "mapping.generatedColumn" with "lastMapping"
+	          var nextLine = remainingLines[remainingLinesIndex] || '';
+	          var code = nextLine.substr(0, mapping.generatedColumn -
+	                                        lastGeneratedColumn);
+	          remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -
+	                                              lastGeneratedColumn);
+	          lastGeneratedColumn = mapping.generatedColumn;
+	          addMappingWithCode(lastMapping, code);
+	          // No more remaining code, continue
+	          lastMapping = mapping;
+	          return;
+	        }
+	      }
+	      // We add the generated code until the first mapping
+	      // to the SourceNode without any mapping.
+	      // Each line is added as separate string.
+	      while (lastGeneratedLine < mapping.generatedLine) {
+	        node.add(shiftNextLine());
+	        lastGeneratedLine++;
+	      }
+	      if (lastGeneratedColumn < mapping.generatedColumn) {
+	        var nextLine = remainingLines[remainingLinesIndex] || '';
+	        node.add(nextLine.substr(0, mapping.generatedColumn));
+	        remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);
+	        lastGeneratedColumn = mapping.generatedColumn;
+	      }
+	      lastMapping = mapping;
+	    }, this);
+	    // We have processed all mappings.
+	    if (remainingLinesIndex < remainingLines.length) {
+	      if (lastMapping) {
+	        // Associate the remaining code in the current line with "lastMapping"
+	        addMappingWithCode(lastMapping, shiftNextLine());
+	      }
+	      // and add the remaining lines without any mapping
+	      node.add(remainingLines.splice(remainingLinesIndex).join(""));
+	    }
+	
+	    // Copy sourcesContent into SourceNode
+	    aSourceMapConsumer.sources.forEach(function (sourceFile) {
+	      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+	      if (content != null) {
+	        if (aRelativePath != null) {
+	          sourceFile = util.join(aRelativePath, sourceFile);
+	        }
+	        node.setSourceContent(sourceFile, content);
+	      }
+	    });
+	
+	    return node;
+	
+	    function addMappingWithCode(mapping, code) {
+	      if (mapping === null || mapping.source === undefined) {
+	        node.add(code);
+	      } else {
+	        var source = aRelativePath
+	          ? util.join(aRelativePath, mapping.source)
+	          : mapping.source;
+	        node.add(new SourceNode(mapping.originalLine,
+	                                mapping.originalColumn,
+	                                source,
+	                                code,
+	                                mapping.name));
+	      }
+	    }
+	  };
+	
+	/**
+	 * Add a chunk of generated JS to this source node.
+	 *
+	 * @param aChunk A string snippet of generated JS code, another instance of
+	 *        SourceNode, or an array where each member is one of those things.
+	 */
+	SourceNode.prototype.add = function SourceNode_add(aChunk) {
+	  if (Array.isArray(aChunk)) {
+	    aChunk.forEach(function (chunk) {
+	      this.add(chunk);
+	    }, this);
+	  }
+	  else if (aChunk[isSourceNode] || typeof aChunk === "string") {
+	    if (aChunk) {
+	      this.children.push(aChunk);
+	    }
+	  }
+	  else {
+	    throw new TypeError(
+	      "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
+	    );
+	  }
+	  return this;
+	};
+	
+	/**
+	 * Add a chunk of generated JS to the beginning of this source node.
+	 *
+	 * @param aChunk A string snippet of generated JS code, another instance of
+	 *        SourceNode, or an array where each member is one of those things.
+	 */
+	SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
+	  if (Array.isArray(aChunk)) {
+	    for (var i = aChunk.length-1; i >= 0; i--) {
+	      this.prepend(aChunk[i]);
+	    }
+	  }
+	  else if (aChunk[isSourceNode] || typeof aChunk === "string") {
+	    this.children.unshift(aChunk);
+	  }
+	  else {
+	    throw new TypeError(
+	      "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
+	    );
+	  }
+	  return this;
+	};
+	
+	/**
+	 * Walk over the tree of JS snippets in this node and its children. The
+	 * walking function is called once for each snippet of JS and is passed that
+	 * snippet and the its original associated source's line/column location.
+	 *
+	 * @param aFn The traversal function.
+	 */
+	SourceNode.prototype.walk = function SourceNode_walk(aFn) {
+	  var chunk;
+	  for (var i = 0, len = this.children.length; i < len; i++) {
+	    chunk = this.children[i];
+	    if (chunk[isSourceNode]) {
+	      chunk.walk(aFn);
+	    }
+	    else {
+	      if (chunk !== '') {
+	        aFn(chunk, { source: this.source,
+	                     line: this.line,
+	                     column: this.column,
+	                     name: this.name });
+	      }
+	    }
+	  }
+	};
+	
+	/**
+	 * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
+	 * each of `this.children`.
+	 *
+	 * @param aSep The separator.
+	 */
+	SourceNode.prototype.join = function SourceNode_join(aSep) {
+	  var newChildren;
+	  var i;
+	  var len = this.children.length;
+	  if (len > 0) {
+	    newChildren = [];
+	    for (i = 0; i < len-1; i++) {
+	      newChildren.push(this.children[i]);
+	      newChildren.push(aSep);
+	    }
+	    newChildren.push(this.children[i]);
+	    this.children = newChildren;
+	  }
+	  return this;
+	};
+	
+	/**
+	 * Call String.prototype.replace on the very right-most source snippet. Useful
+	 * for trimming whitespace from the end of a source node, etc.
+	 *
+	 * @param aPattern The pattern to replace.
+	 * @param aReplacement The thing to replace the pattern with.
+	 */
+	SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
+	  var lastChild = this.children[this.children.length - 1];
+	  if (lastChild[isSourceNode]) {
+	    lastChild.replaceRight(aPattern, aReplacement);
+	  }
+	  else if (typeof lastChild === 'string') {
+	    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
+	  }
+	  else {
+	    this.children.push(''.replace(aPattern, aReplacement));
+	  }
+	  return this;
+	};
+	
+	/**
+	 * Set the source content for a source file. This will be added to the SourceMapGenerator
+	 * in the sourcesContent field.
+	 *
+	 * @param aSourceFile The filename of the source file
+	 * @param aSourceContent The content of the source file
+	 */
+	SourceNode.prototype.setSourceContent =
+	  function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
+	    this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
+	  };
+	
+	/**
+	 * Walk over the tree of SourceNodes. The walking function is called for each
+	 * source file content and is passed the filename and source content.
+	 *
+	 * @param aFn The traversal function.
+	 */
+	SourceNode.prototype.walkSourceContents =
+	  function SourceNode_walkSourceContents(aFn) {
+	    for (var i = 0, len = this.children.length; i < len; i++) {
+	      if (this.children[i][isSourceNode]) {
+	        this.children[i].walkSourceContents(aFn);
+	      }
+	    }
+	
+	    var sources = Object.keys(this.sourceContents);
+	    for (var i = 0, len = sources.length; i < len; i++) {
+	      aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
+	    }
+	  };
+	
+	/**
+	 * Return the string representation of this source node. Walks over the tree
+	 * and concatenates all the various snippets together to one string.
+	 */
+	SourceNode.prototype.toString = function SourceNode_toString() {
+	  var str = "";
+	  this.walk(function (chunk) {
+	    str += chunk;
+	  });
+	  return str;
+	};
+	
+	/**
+	 * Returns the string representation of this source node along with a source
+	 * map.
+	 */
+	SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
+	  var generated = {
+	    code: "",
+	    line: 1,
+	    column: 0
+	  };
+	  var map = new SourceMapGenerator(aArgs);
+	  var sourceMappingActive = false;
+	  var lastOriginalSource = null;
+	  var lastOriginalLine = null;
+	  var lastOriginalColumn = null;
+	  var lastOriginalName = null;
+	  this.walk(function (chunk, original) {
+	    generated.code += chunk;
+	    if (original.source !== null
+	        && original.line !== null
+	        && original.column !== null) {
+	      if(lastOriginalSource !== original.source
+	         || lastOriginalLine !== original.line
+	         || lastOriginalColumn !== original.column
+	         || lastOriginalName !== original.name) {
+	        map.addMapping({
+	          source: original.source,
+	          original: {
+	            line: original.line,
+	            column: original.column
+	          },
+	          generated: {
+	            line: generated.line,
+	            column: generated.column
+	          },
+	          name: original.name
+	        });
+	      }
+	      lastOriginalSource = original.source;
+	      lastOriginalLine = original.line;
+	      lastOriginalColumn = original.column;
+	      lastOriginalName = original.name;
+	      sourceMappingActive = true;
+	    } else if (sourceMappingActive) {
+	      map.addMapping({
+	        generated: {
+	          line: generated.line,
+	          column: generated.column
+	        }
+	      });
+	      lastOriginalSource = null;
+	      sourceMappingActive = false;
+	    }
+	    for (var idx = 0, length = chunk.length; idx < length; idx++) {
+	      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
+	        generated.line++;
+	        generated.column = 0;
+	        // Mappings end at eol
+	        if (idx + 1 === length) {
+	          lastOriginalSource = null;
+	          sourceMappingActive = false;
+	        } else if (sourceMappingActive) {
+	          map.addMapping({
+	            source: original.source,
+	            original: {
+	              line: original.line,
+	              column: original.column
+	            },
+	            generated: {
+	              line: generated.line,
+	              column: generated.column
+	            },
+	            name: original.name
+	          });
+	        }
+	      } else {
+	        generated.column++;
+	      }
+	    }
+	  });
+	  this.walkSourceContents(function (sourceFile, sourceContent) {
+	    map.setSourceContent(sourceFile, sourceContent);
+	  });
+	
+	  return { code: generated.code, map: map };
+	};
+	
+	exports.SourceNode = SourceNode;
+
+
+/***/ })
+/******/ ])
+});
+;
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCAxNjI0YzcyOTliODg3ZjdiZGY2NCIsIndlYnBhY2s6Ly8vLi9zb3VyY2UtbWFwLmpzIiwid2VicGFjazovLy8uL2xpYi9zb3VyY2UtbWFwLWdlbmVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmFzZTY0LXZscS5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmFzZTY0LmpzIiwid2VicGFjazovLy8uL2xpYi91dGlsLmpzIiwid2VicGFjazovLy8uL2xpYi9hcnJheS1zZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbGliL21hcHBpbmctbGlzdC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvc291cmNlLW1hcC1jb25zdW1lci5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmluYXJ5LXNlYXJjaC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvcXVpY2stc29ydC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvc291cmNlLW5vZGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87QUNWQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBZTtBQUNmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNQQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJDQUEwQyxTQUFTO0FBQ25EO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUJBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7OztBQ3hhQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBMkQ7QUFDM0QscUJBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUc7O0FBRUg7QUFDQTtBQUNBOzs7Ozs7O0FDM0lBLGlCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFnQjtBQUNoQixpQkFBZ0I7O0FBRWhCLG9CQUFtQjtBQUNuQixxQkFBb0I7O0FBRXBCLGlCQUFnQjtBQUNoQixpQkFBZ0I7O0FBRWhCLGlCQUFnQjtBQUNoQixrQkFBaUI7O0FBRWpCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7Ozs7O0FDbEVBLGlCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLCtDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0QkFBMkIsUUFBUTtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGNBQWE7QUFDYjs7QUFFQTtBQUNBLGVBQWM7QUFDZDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUFzQztBQUN0QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7Ozs7O0FDdmVBLGlCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUFzQyxTQUFTO0FBQy9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7Ozs7QUN4SEEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFnQjtBQUNoQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7Ozs7QUM5RUEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0Esb0JBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVc7O0FBRVg7QUFDQTtBQUNBLFFBQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTJCLE1BQU07QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWEsa0NBQWtDO0FBQy9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVEQUFzRCxZQUFZO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBeUIsY0FBYztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXVCLHdDQUF3QztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUErQyxtQkFBbUIsRUFBRTtBQUNwRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBNkIsTUFBTTtBQUNuQztBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBbUIsMkJBQTJC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Q0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBVyxNQUFNO0FBQ2pCO0FBQ0EsWUFBVyxTQUFTO0FBQ3BCO0FBQ0EsWUFBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBbUIsT0FBTztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBVyxNQUFNO0FBQ2pCO0FBQ0EsWUFBVyxTQUFTO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNqSEEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWlDLFFBQVE7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQTZDLFNBQVM7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQW9CO0FBQ3BCO0FBQ0E7QUFDQSx1Q0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWUsV0FBVztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQStDLFNBQVM7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBeUMsU0FBUztBQUNsRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxZQUFXO0FBQ1g7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsNkNBQTRDLGNBQWM7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxjQUFhO0FBQ2I7QUFDQSxZQUFXO0FBQ1g7QUFDQSxRQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQSxJQUFHOztBQUVILFdBQVU7QUFDVjs7QUFFQSIsImZpbGUiOiJzb3VyY2UtbWFwLmRlYnVnLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wic291cmNlTWFwXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInNvdXJjZU1hcFwiXSA9IGZhY3RvcnkoKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKCkge1xucmV0dXJuIFxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcblxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0ZXhwb3J0czoge30sXG4gXHRcdFx0aWQ6IG1vZHVsZUlkLFxuIFx0XHRcdGxvYWRlZDogZmFsc2VcbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCAxNjI0YzcyOTliODg3ZjdiZGY2NCIsIi8qXG4gKiBDb3B5cmlnaHQgMjAwOS0yMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRS50eHQgb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cbmV4cG9ydHMuU291cmNlTWFwR2VuZXJhdG9yID0gcmVxdWlyZSgnLi9saWIvc291cmNlLW1hcC1nZW5lcmF0b3InKS5Tb3VyY2VNYXBHZW5lcmF0b3I7XG5leHBvcnRzLlNvdXJjZU1hcENvbnN1bWVyID0gcmVxdWlyZSgnLi9saWIvc291cmNlLW1hcC1jb25zdW1lcicpLlNvdXJjZU1hcENvbnN1bWVyO1xuZXhwb3J0cy5Tb3VyY2VOb2RlID0gcmVxdWlyZSgnLi9saWIvc291cmNlLW5vZGUnKS5Tb3VyY2VOb2RlO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zb3VyY2UtbWFwLmpzXG4vLyBtb2R1bGUgaWQgPSAwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxudmFyIGJhc2U2NFZMUSA9IHJlcXVpcmUoJy4vYmFzZTY0LXZscScpO1xudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcbnZhciBBcnJheVNldCA9IHJlcXVpcmUoJy4vYXJyYXktc2V0JykuQXJyYXlTZXQ7XG52YXIgTWFwcGluZ0xpc3QgPSByZXF1aXJlKCcuL21hcHBpbmctbGlzdCcpLk1hcHBpbmdMaXN0O1xuXG4vKipcbiAqIEFuIGluc3RhbmNlIG9mIHRoZSBTb3VyY2VNYXBHZW5lcmF0b3IgcmVwcmVzZW50cyBhIHNvdXJjZSBtYXAgd2hpY2ggaXNcbiAqIGJlaW5nIGJ1aWx0IGluY3JlbWVudGFsbHkuIFlvdSBtYXkgcGFzcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nXG4gKiBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBmaWxlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gc291cmNlUm9vdDogQSByb290IGZvciBhbGwgcmVsYXRpdmUgVVJMcyBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gKi9cbmZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcihhQXJncykge1xuICBpZiAoIWFBcmdzKSB7XG4gICAgYUFyZ3MgPSB7fTtcbiAgfVxuICB0aGlzLl9maWxlID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdmaWxlJywgbnVsbCk7XG4gIHRoaXMuX3NvdXJjZVJvb3QgPSB1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZVJvb3QnLCBudWxsKTtcbiAgdGhpcy5fc2tpcFZhbGlkYXRpb24gPSB1dGlsLmdldEFyZyhhQXJncywgJ3NraXBWYWxpZGF0aW9uJywgZmFsc2UpO1xuICB0aGlzLl9zb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gIHRoaXMuX25hbWVzID0gbmV3IEFycmF5U2V0KCk7XG4gIHRoaXMuX21hcHBpbmdzID0gbmV3IE1hcHBpbmdMaXN0KCk7XG4gIHRoaXMuX3NvdXJjZXNDb250ZW50cyA9IG51bGw7XG59XG5cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgU291cmNlTWFwR2VuZXJhdG9yIGJhc2VkIG9uIGEgU291cmNlTWFwQ29uc3VtZXJcbiAqXG4gKiBAcGFyYW0gYVNvdXJjZU1hcENvbnN1bWVyIFRoZSBTb3VyY2VNYXAuXG4gKi9cblNvdXJjZU1hcEdlbmVyYXRvci5mcm9tU291cmNlTWFwID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX2Zyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcENvbnN1bWVyKSB7XG4gICAgdmFyIHNvdXJjZVJvb3QgPSBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlUm9vdDtcbiAgICB2YXIgZ2VuZXJhdG9yID0gbmV3IFNvdXJjZU1hcEdlbmVyYXRvcih7XG4gICAgICBmaWxlOiBhU291cmNlTWFwQ29uc3VtZXIuZmlsZSxcbiAgICAgIHNvdXJjZVJvb3Q6IHNvdXJjZVJvb3RcbiAgICB9KTtcbiAgICBhU291cmNlTWFwQ29uc3VtZXIuZWFjaE1hcHBpbmcoZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICAgIHZhciBuZXdNYXBwaW5nID0ge1xuICAgICAgICBnZW5lcmF0ZWQ6IHtcbiAgICAgICAgICBsaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUsXG4gICAgICAgICAgY29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtblxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgIT0gbnVsbCkge1xuICAgICAgICBuZXdNYXBwaW5nLnNvdXJjZSA9IG1hcHBpbmcuc291cmNlO1xuICAgICAgICBpZiAoc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgbmV3TWFwcGluZy5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIG5ld01hcHBpbmcuc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5ld01hcHBpbmcub3JpZ2luYWwgPSB7XG4gICAgICAgICAgbGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgICAgY29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG1hcHBpbmcubmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgbmV3TWFwcGluZy5uYW1lID0gbWFwcGluZy5uYW1lO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGdlbmVyYXRvci5hZGRNYXBwaW5nKG5ld01hcHBpbmcpO1xuICAgIH0pO1xuICAgIGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZUZpbGUpIHtcbiAgICAgIHZhciBzb3VyY2VSZWxhdGl2ZSA9IHNvdXJjZUZpbGU7XG4gICAgICBpZiAoc291cmNlUm9vdCAhPT0gbnVsbCkge1xuICAgICAgICBzb3VyY2VSZWxhdGl2ZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlRmlsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghZ2VuZXJhdG9yLl9zb3VyY2VzLmhhcyhzb3VyY2VSZWxhdGl2ZSkpIHtcbiAgICAgICAgZ2VuZXJhdG9yLl9zb3VyY2VzLmFkZChzb3VyY2VSZWxhdGl2ZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZW50ID0gYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3Ioc291cmNlRmlsZSk7XG4gICAgICBpZiAoY29udGVudCAhPSBudWxsKSB7XG4gICAgICAgIGdlbmVyYXRvci5zZXRTb3VyY2VDb250ZW50KHNvdXJjZUZpbGUsIGNvbnRlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH07XG5cbi8qKlxuICogQWRkIGEgc2luZ2xlIG1hcHBpbmcgZnJvbSBvcmlnaW5hbCBzb3VyY2UgbGluZSBhbmQgY29sdW1uIHRvIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBmb3IgdGhpcyBzb3VyY2UgbWFwIGJlaW5nIGNyZWF0ZWQuIFRoZSBtYXBwaW5nXG4gKiBvYmplY3Qgc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBnZW5lcmF0ZWQ6IEFuIG9iamVjdCB3aXRoIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucy5cbiAqICAgLSBvcmlnaW5hbDogQW4gb2JqZWN0IHdpdGggdGhlIG9yaWdpbmFsIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMuXG4gKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUgKHJlbGF0aXZlIHRvIHRoZSBzb3VyY2VSb290KS5cbiAqICAgLSBuYW1lOiBBbiBvcHRpb25hbCBvcmlnaW5hbCB0b2tlbiBuYW1lIGZvciB0aGlzIG1hcHBpbmcuXG4gKi9cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuYWRkTWFwcGluZyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9hZGRNYXBwaW5nKGFBcmdzKSB7XG4gICAgdmFyIGdlbmVyYXRlZCA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnZ2VuZXJhdGVkJyk7XG4gICAgdmFyIG9yaWdpbmFsID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdvcmlnaW5hbCcsIG51bGwpO1xuICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScsIG51bGwpO1xuICAgIHZhciBuYW1lID0gdXRpbC5nZXRBcmcoYUFyZ3MsICduYW1lJywgbnVsbCk7XG5cbiAgICBpZiAoIXRoaXMuX3NraXBWYWxpZGF0aW9uKSB7XG4gICAgICB0aGlzLl92YWxpZGF0ZU1hcHBpbmcoZ2VuZXJhdGVkLCBvcmlnaW5hbCwgc291cmNlLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoc291cmNlICE9IG51bGwpIHtcbiAgICAgIHNvdXJjZSA9IFN0cmluZyhzb3VyY2UpO1xuICAgICAgaWYgKCF0aGlzLl9zb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICAgIHRoaXMuX3NvdXJjZXMuYWRkKHNvdXJjZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5hbWUgIT0gbnVsbCkge1xuICAgICAgbmFtZSA9IFN0cmluZyhuYW1lKTtcbiAgICAgIGlmICghdGhpcy5fbmFtZXMuaGFzKG5hbWUpKSB7XG4gICAgICAgIHRoaXMuX25hbWVzLmFkZChuYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9tYXBwaW5ncy5hZGQoe1xuICAgICAgZ2VuZXJhdGVkTGluZTogZ2VuZXJhdGVkLmxpbmUsXG4gICAgICBnZW5lcmF0ZWRDb2x1bW46IGdlbmVyYXRlZC5jb2x1bW4sXG4gICAgICBvcmlnaW5hbExpbmU6IG9yaWdpbmFsICE9IG51bGwgJiYgb3JpZ2luYWwubGluZSxcbiAgICAgIG9yaWdpbmFsQ29sdW1uOiBvcmlnaW5hbCAhPSBudWxsICYmIG9yaWdpbmFsLmNvbHVtbixcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgbmFtZTogbmFtZVxuICAgIH0pO1xuICB9O1xuXG4vKipcbiAqIFNldCB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGEgc291cmNlIGZpbGUuXG4gKi9cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuc2V0U291cmNlQ29udGVudCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9zZXRTb3VyY2VDb250ZW50KGFTb3VyY2VGaWxlLCBhU291cmNlQ29udGVudCkge1xuICAgIHZhciBzb3VyY2UgPSBhU291cmNlRmlsZTtcbiAgICBpZiAodGhpcy5fc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuX3NvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgfVxuXG4gICAgaWYgKGFTb3VyY2VDb250ZW50ICE9IG51bGwpIHtcbiAgICAgIC8vIEFkZCB0aGUgc291cmNlIGNvbnRlbnQgdG8gdGhlIF9zb3VyY2VzQ29udGVudHMgbWFwLlxuICAgICAgLy8gQ3JlYXRlIGEgbmV3IF9zb3VyY2VzQ29udGVudHMgbWFwIGlmIHRoZSBwcm9wZXJ0eSBpcyBudWxsLlxuICAgICAgaWYgKCF0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgICAgdGhpcy5fc291cmNlc0NvbnRlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3NvdXJjZXNDb250ZW50c1t1dGlsLnRvU2V0U3RyaW5nKHNvdXJjZSldID0gYVNvdXJjZUNvbnRlbnQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgIC8vIFJlbW92ZSB0aGUgc291cmNlIGZpbGUgZnJvbSB0aGUgX3NvdXJjZXNDb250ZW50cyBtYXAuXG4gICAgICAvLyBJZiB0aGUgX3NvdXJjZXNDb250ZW50cyBtYXAgaXMgZW1wdHksIHNldCB0aGUgcHJvcGVydHkgdG8gbnVsbC5cbiAgICAgIGRlbGV0ZSB0aGlzLl9zb3VyY2VzQ29udGVudHNbdXRpbC50b1NldFN0cmluZyhzb3VyY2UpXTtcbiAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLl9zb3VyY2VzQ29udGVudHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLl9zb3VyY2VzQ29udGVudHMgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBtYXBwaW5ncyBvZiBhIHN1Yi1zb3VyY2UtbWFwIGZvciBhIHNwZWNpZmljIHNvdXJjZSBmaWxlIHRvIHRoZVxuICogc291cmNlIG1hcCBiZWluZyBnZW5lcmF0ZWQuIEVhY2ggbWFwcGluZyB0byB0aGUgc3VwcGxpZWQgc291cmNlIGZpbGUgaXNcbiAqIHJld3JpdHRlbiB1c2luZyB0aGUgc3VwcGxpZWQgc291cmNlIG1hcC4gTm90ZTogVGhlIHJlc29sdXRpb24gZm9yIHRoZVxuICogcmVzdWx0aW5nIG1hcHBpbmdzIGlzIHRoZSBtaW5pbWl1bSBvZiB0aGlzIG1hcCBhbmQgdGhlIHN1cHBsaWVkIG1hcC5cbiAqXG4gKiBAcGFyYW0gYVNvdXJjZU1hcENvbnN1bWVyIFRoZSBzb3VyY2UgbWFwIHRvIGJlIGFwcGxpZWQuXG4gKiBAcGFyYW0gYVNvdXJjZUZpbGUgT3B0aW9uYWwuIFRoZSBmaWxlbmFtZSBvZiB0aGUgc291cmNlIGZpbGUuXG4gKiAgICAgICAgSWYgb21pdHRlZCwgU291cmNlTWFwQ29uc3VtZXIncyBmaWxlIHByb3BlcnR5IHdpbGwgYmUgdXNlZC5cbiAqIEBwYXJhbSBhU291cmNlTWFwUGF0aCBPcHRpb25hbC4gVGhlIGRpcm5hbWUgb2YgdGhlIHBhdGggdG8gdGhlIHNvdXJjZSBtYXBcbiAqICAgICAgICB0byBiZSBhcHBsaWVkLiBJZiByZWxhdGl2ZSwgaXQgaXMgcmVsYXRpdmUgdG8gdGhlIFNvdXJjZU1hcENvbnN1bWVyLlxuICogICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIG5lZWRlZCB3aGVuIHRoZSB0d28gc291cmNlIG1hcHMgYXJlbid0IGluIHRoZSBzYW1lXG4gKiAgICAgICAgZGlyZWN0b3J5LCBhbmQgdGhlIHNvdXJjZSBtYXAgdG8gYmUgYXBwbGllZCBjb250YWlucyByZWxhdGl2ZSBzb3VyY2VcbiAqICAgICAgICBwYXRocy4gSWYgc28sIHRob3NlIHJlbGF0aXZlIHNvdXJjZSBwYXRocyBuZWVkIHRvIGJlIHJld3JpdHRlblxuICogICAgICAgIHJlbGF0aXZlIHRvIHRoZSBTb3VyY2VNYXBHZW5lcmF0b3IuXG4gKi9cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuYXBwbHlTb3VyY2VNYXAgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfYXBwbHlTb3VyY2VNYXAoYVNvdXJjZU1hcENvbnN1bWVyLCBhU291cmNlRmlsZSwgYVNvdXJjZU1hcFBhdGgpIHtcbiAgICB2YXIgc291cmNlRmlsZSA9IGFTb3VyY2VGaWxlO1xuICAgIC8vIElmIGFTb3VyY2VGaWxlIGlzIG9taXR0ZWQsIHdlIHdpbGwgdXNlIHRoZSBmaWxlIHByb3BlcnR5IG9mIHRoZSBTb3VyY2VNYXBcbiAgICBpZiAoYVNvdXJjZUZpbGUgPT0gbnVsbCkge1xuICAgICAgaWYgKGFTb3VyY2VNYXBDb25zdW1lci5maWxlID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdTb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLmFwcGx5U291cmNlTWFwIHJlcXVpcmVzIGVpdGhlciBhbiBleHBsaWNpdCBzb3VyY2UgZmlsZSwgJyArXG4gICAgICAgICAgJ29yIHRoZSBzb3VyY2UgbWFwXFwncyBcImZpbGVcIiBwcm9wZXJ0eS4gQm90aCB3ZXJlIG9taXR0ZWQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgc291cmNlRmlsZSA9IGFTb3VyY2VNYXBDb25zdW1lci5maWxlO1xuICAgIH1cbiAgICB2YXIgc291cmNlUm9vdCA9IHRoaXMuX3NvdXJjZVJvb3Q7XG4gICAgLy8gTWFrZSBcInNvdXJjZUZpbGVcIiByZWxhdGl2ZSBpZiBhbiBhYnNvbHV0ZSBVcmwgaXMgcGFzc2VkLlxuICAgIGlmIChzb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIHNvdXJjZUZpbGUgPSB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIHNvdXJjZUZpbGUpO1xuICAgIH1cbiAgICAvLyBBcHBseWluZyB0aGUgU291cmNlTWFwIGNhbiBhZGQgYW5kIHJlbW92ZSBpdGVtcyBmcm9tIHRoZSBzb3VyY2VzIGFuZFxuICAgIC8vIHRoZSBuYW1lcyBhcnJheS5cbiAgICB2YXIgbmV3U291cmNlcyA9IG5ldyBBcnJheVNldCgpO1xuICAgIHZhciBuZXdOYW1lcyA9IG5ldyBBcnJheVNldCgpO1xuXG4gICAgLy8gRmluZCBtYXBwaW5ncyBmb3IgdGhlIFwic291cmNlRmlsZVwiXG4gICAgdGhpcy5fbWFwcGluZ3MudW5zb3J0ZWRGb3JFYWNoKGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgPT09IHNvdXJjZUZpbGUgJiYgbWFwcGluZy5vcmlnaW5hbExpbmUgIT0gbnVsbCkge1xuICAgICAgICAvLyBDaGVjayBpZiBpdCBjYW4gYmUgbWFwcGVkIGJ5IHRoZSBzb3VyY2UgbWFwLCB0aGVuIHVwZGF0ZSB0aGUgbWFwcGluZy5cbiAgICAgICAgdmFyIG9yaWdpbmFsID0gYVNvdXJjZU1hcENvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgICAgIGxpbmU6IG1hcHBpbmcub3JpZ2luYWxMaW5lLFxuICAgICAgICAgIGNvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtblxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG9yaWdpbmFsLnNvdXJjZSAhPSBudWxsKSB7XG4gICAgICAgICAgLy8gQ29weSBtYXBwaW5nXG4gICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSBvcmlnaW5hbC5zb3VyY2U7XG4gICAgICAgICAgaWYgKGFTb3VyY2VNYXBQYXRoICE9IG51bGwpIHtcbiAgICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gdXRpbC5qb2luKGFTb3VyY2VNYXBQYXRoLCBtYXBwaW5nLnNvdXJjZSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIG1hcHBpbmcuc291cmNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPSBvcmlnaW5hbC5saW5lO1xuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPSBvcmlnaW5hbC5jb2x1bW47XG4gICAgICAgICAgaWYgKG9yaWdpbmFsLm5hbWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgbWFwcGluZy5uYW1lID0gb3JpZ2luYWwubmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHNvdXJjZSA9IG1hcHBpbmcuc291cmNlO1xuICAgICAgaWYgKHNvdXJjZSAhPSBudWxsICYmICFuZXdTb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICAgIG5ld1NvdXJjZXMuYWRkKHNvdXJjZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBuYW1lID0gbWFwcGluZy5uYW1lO1xuICAgICAgaWYgKG5hbWUgIT0gbnVsbCAmJiAhbmV3TmFtZXMuaGFzKG5hbWUpKSB7XG4gICAgICAgIG5ld05hbWVzLmFkZChuYW1lKTtcbiAgICAgIH1cblxuICAgIH0sIHRoaXMpO1xuICAgIHRoaXMuX3NvdXJjZXMgPSBuZXdTb3VyY2VzO1xuICAgIHRoaXMuX25hbWVzID0gbmV3TmFtZXM7XG5cbiAgICAvLyBDb3B5IHNvdXJjZXNDb250ZW50cyBvZiBhcHBsaWVkIG1hcC5cbiAgICBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2VGaWxlKSB7XG4gICAgICB2YXIgY29udGVudCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKHNvdXJjZUZpbGUpO1xuICAgICAgaWYgKGNvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoYVNvdXJjZU1hcFBhdGggIT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZUZpbGUgPSB1dGlsLmpvaW4oYVNvdXJjZU1hcFBhdGgsIHNvdXJjZUZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2VGaWxlID0gdXRpbC5yZWxhdGl2ZShzb3VyY2VSb290LCBzb3VyY2VGaWxlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgY29udGVudCk7XG4gICAgICB9XG4gICAgfSwgdGhpcyk7XG4gIH07XG5cbi8qKlxuICogQSBtYXBwaW5nIGNhbiBoYXZlIG9uZSBvZiB0aGUgdGhyZWUgbGV2ZWxzIG9mIGRhdGE6XG4gKlxuICogICAxLiBKdXN0IHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24uXG4gKiAgIDIuIFRoZSBHZW5lcmF0ZWQgcG9zaXRpb24sIG9yaWdpbmFsIHBvc2l0aW9uLCBhbmQgb3JpZ2luYWwgc291cmNlLlxuICogICAzLiBHZW5lcmF0ZWQgYW5kIG9yaWdpbmFsIHBvc2l0aW9uLCBvcmlnaW5hbCBzb3VyY2UsIGFzIHdlbGwgYXMgYSBuYW1lXG4gKiAgICAgIHRva2VuLlxuICpcbiAqIFRvIG1haW50YWluIGNvbnNpc3RlbmN5LCB3ZSB2YWxpZGF0ZSB0aGF0IGFueSBuZXcgbWFwcGluZyBiZWluZyBhZGRlZCBmYWxsc1xuICogaW4gdG8gb25lIG9mIHRoZXNlIGNhdGVnb3JpZXMuXG4gKi9cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuX3ZhbGlkYXRlTWFwcGluZyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl92YWxpZGF0ZU1hcHBpbmcoYUdlbmVyYXRlZCwgYU9yaWdpbmFsLCBhU291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFOYW1lKSB7XG4gICAgLy8gV2hlbiBhT3JpZ2luYWwgaXMgdHJ1dGh5IGJ1dCBoYXMgZW1wdHkgdmFsdWVzIGZvciAubGluZSBhbmQgLmNvbHVtbixcbiAgICAvLyBpdCBpcyBtb3N0IGxpa2VseSBhIHByb2dyYW1tZXIgZXJyb3IuIEluIHRoaXMgY2FzZSB3ZSB0aHJvdyBhIHZlcnlcbiAgICAvLyBzcGVjaWZpYyBlcnJvciBtZXNzYWdlIHRvIHRyeSB0byBndWlkZSB0aGVtIHRoZSByaWdodCB3YXkuXG4gICAgLy8gRm9yIGV4YW1wbGU6IGh0dHBzOi8vZ2l0aHViLmNvbS9Qb2x5bWVyL3BvbHltZXItYnVuZGxlci9wdWxsLzUxOVxuICAgIGlmIChhT3JpZ2luYWwgJiYgdHlwZW9mIGFPcmlnaW5hbC5saW5lICE9PSAnbnVtYmVyJyAmJiB0eXBlb2YgYU9yaWdpbmFsLmNvbHVtbiAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ29yaWdpbmFsLmxpbmUgYW5kIG9yaWdpbmFsLmNvbHVtbiBhcmUgbm90IG51bWJlcnMgLS0geW91IHByb2JhYmx5IG1lYW50IHRvIG9taXQgJyArXG4gICAgICAgICAgICAndGhlIG9yaWdpbmFsIG1hcHBpbmcgZW50aXJlbHkgYW5kIG9ubHkgbWFwIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24uIElmIHNvLCBwYXNzICcgK1xuICAgICAgICAgICAgJ251bGwgZm9yIHRoZSBvcmlnaW5hbCBtYXBwaW5nIGluc3RlYWQgb2YgYW4gb2JqZWN0IHdpdGggZW1wdHkgb3IgbnVsbCB2YWx1ZXMuJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChhR2VuZXJhdGVkICYmICdsaW5lJyBpbiBhR2VuZXJhdGVkICYmICdjb2x1bW4nIGluIGFHZW5lcmF0ZWRcbiAgICAgICAgJiYgYUdlbmVyYXRlZC5saW5lID4gMCAmJiBhR2VuZXJhdGVkLmNvbHVtbiA+PSAwXG4gICAgICAgICYmICFhT3JpZ2luYWwgJiYgIWFTb3VyY2UgJiYgIWFOYW1lKSB7XG4gICAgICAvLyBDYXNlIDEuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2UgaWYgKGFHZW5lcmF0ZWQgJiYgJ2xpbmUnIGluIGFHZW5lcmF0ZWQgJiYgJ2NvbHVtbicgaW4gYUdlbmVyYXRlZFxuICAgICAgICAgICAgICYmIGFPcmlnaW5hbCAmJiAnbGluZScgaW4gYU9yaWdpbmFsICYmICdjb2x1bW4nIGluIGFPcmlnaW5hbFxuICAgICAgICAgICAgICYmIGFHZW5lcmF0ZWQubGluZSA+IDAgJiYgYUdlbmVyYXRlZC5jb2x1bW4gPj0gMFxuICAgICAgICAgICAgICYmIGFPcmlnaW5hbC5saW5lID4gMCAmJiBhT3JpZ2luYWwuY29sdW1uID49IDBcbiAgICAgICAgICAgICAmJiBhU291cmNlKSB7XG4gICAgICAvLyBDYXNlcyAyIGFuZCAzLlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtYXBwaW5nOiAnICsgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBnZW5lcmF0ZWQ6IGFHZW5lcmF0ZWQsXG4gICAgICAgIHNvdXJjZTogYVNvdXJjZSxcbiAgICAgICAgb3JpZ2luYWw6IGFPcmlnaW5hbCxcbiAgICAgICAgbmFtZTogYU5hbWVcbiAgICAgIH0pKTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogU2VyaWFsaXplIHRoZSBhY2N1bXVsYXRlZCBtYXBwaW5ncyBpbiB0byB0aGUgc3RyZWFtIG9mIGJhc2UgNjQgVkxRc1xuICogc3BlY2lmaWVkIGJ5IHRoZSBzb3VyY2UgbWFwIGZvcm1hdC5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fc2VyaWFsaXplTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3Jfc2VyaWFsaXplTWFwcGluZ3MoKSB7XG4gICAgdmFyIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICB2YXIgcHJldmlvdXNHZW5lcmF0ZWRMaW5lID0gMTtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gMDtcbiAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICB2YXIgcHJldmlvdXNTb3VyY2UgPSAwO1xuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICB2YXIgbmV4dDtcbiAgICB2YXIgbWFwcGluZztcbiAgICB2YXIgbmFtZUlkeDtcbiAgICB2YXIgc291cmNlSWR4O1xuXG4gICAgdmFyIG1hcHBpbmdzID0gdGhpcy5fbWFwcGluZ3MudG9BcnJheSgpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBtYXBwaW5ncy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgbWFwcGluZyA9IG1hcHBpbmdzW2ldO1xuICAgICAgbmV4dCA9ICcnXG5cbiAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgIT09IHByZXZpb3VzR2VuZXJhdGVkTGluZSkge1xuICAgICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgICAgIHdoaWxlIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgIT09IHByZXZpb3VzR2VuZXJhdGVkTGluZSkge1xuICAgICAgICAgIG5leHQgKz0gJzsnO1xuICAgICAgICAgIHByZXZpb3VzR2VuZXJhdGVkTGluZSsrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgaWYgKCF1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKG1hcHBpbmcsIG1hcHBpbmdzW2kgLSAxXSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBuZXh0ICs9ICcsJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBuZXh0ICs9IGJhc2U2NFZMUS5lbmNvZGUobWFwcGluZy5nZW5lcmF0ZWRDb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgaWYgKG1hcHBpbmcuc291cmNlICE9IG51bGwpIHtcbiAgICAgICAgc291cmNlSWR4ID0gdGhpcy5fc291cmNlcy5pbmRleE9mKG1hcHBpbmcuc291cmNlKTtcbiAgICAgICAgbmV4dCArPSBiYXNlNjRWTFEuZW5jb2RlKHNvdXJjZUlkeCAtIHByZXZpb3VzU291cmNlKTtcbiAgICAgICAgcHJldmlvdXNTb3VyY2UgPSBzb3VyY2VJZHg7XG5cbiAgICAgICAgLy8gbGluZXMgYXJlIHN0b3JlZCAwLWJhc2VkIGluIFNvdXJjZU1hcCBzcGVjIHZlcnNpb24gM1xuICAgICAgICBuZXh0ICs9IGJhc2U2NFZMUS5lbmNvZGUobWFwcGluZy5vcmlnaW5hbExpbmUgLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcHJldmlvdXNPcmlnaW5hbExpbmUpO1xuICAgICAgICBwcmV2aW91c09yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lIC0gMTtcblxuICAgICAgICBuZXh0ICs9IGJhc2U2NFZMUS5lbmNvZGUobWFwcGluZy5vcmlnaW5hbENvbHVtblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4pO1xuICAgICAgICBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gbWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICBpZiAobWFwcGluZy5uYW1lICE9IG51bGwpIHtcbiAgICAgICAgICBuYW1lSWR4ID0gdGhpcy5fbmFtZXMuaW5kZXhPZihtYXBwaW5nLm5hbWUpO1xuICAgICAgICAgIG5leHQgKz0gYmFzZTY0VkxRLmVuY29kZShuYW1lSWR4IC0gcHJldmlvdXNOYW1lKTtcbiAgICAgICAgICBwcmV2aW91c05hbWUgPSBuYW1lSWR4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdCArPSBuZXh0O1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuX2dlbmVyYXRlU291cmNlc0NvbnRlbnQgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfZ2VuZXJhdGVTb3VyY2VzQ29udGVudChhU291cmNlcywgYVNvdXJjZVJvb3QpIHtcbiAgICByZXR1cm4gYVNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIGlmICghdGhpcy5fc291cmNlc0NvbnRlbnRzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKGFTb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgc291cmNlID0gdXRpbC5yZWxhdGl2ZShhU291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgIH1cbiAgICAgIHZhciBrZXkgPSB1dGlsLnRvU2V0U3RyaW5nKHNvdXJjZSk7XG4gICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX3NvdXJjZXNDb250ZW50cywga2V5KVxuICAgICAgICA/IHRoaXMuX3NvdXJjZXNDb250ZW50c1trZXldXG4gICAgICAgIDogbnVsbDtcbiAgICB9LCB0aGlzKTtcbiAgfTtcblxuLyoqXG4gKiBFeHRlcm5hbGl6ZSB0aGUgc291cmNlIG1hcC5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS50b0pTT04gPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfdG9KU09OKCkge1xuICAgIHZhciBtYXAgPSB7XG4gICAgICB2ZXJzaW9uOiB0aGlzLl92ZXJzaW9uLFxuICAgICAgc291cmNlczogdGhpcy5fc291cmNlcy50b0FycmF5KCksXG4gICAgICBuYW1lczogdGhpcy5fbmFtZXMudG9BcnJheSgpLFxuICAgICAgbWFwcGluZ3M6IHRoaXMuX3NlcmlhbGl6ZU1hcHBpbmdzKClcbiAgICB9O1xuICAgIGlmICh0aGlzLl9maWxlICE9IG51bGwpIHtcbiAgICAgIG1hcC5maWxlID0gdGhpcy5fZmlsZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3NvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgbWFwLnNvdXJjZVJvb3QgPSB0aGlzLl9zb3VyY2VSb290O1xuICAgIH1cbiAgICBpZiAodGhpcy5fc291cmNlc0NvbnRlbnRzKSB7XG4gICAgICBtYXAuc291cmNlc0NvbnRlbnQgPSB0aGlzLl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50KG1hcC5zb3VyY2VzLCBtYXAuc291cmNlUm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcDtcbiAgfTtcblxuLyoqXG4gKiBSZW5kZXIgdGhlIHNvdXJjZSBtYXAgYmVpbmcgZ2VuZXJhdGVkIHRvIGEgc3RyaW5nLlxuICovXG5Tb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLnRvU3RyaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3RvU3RyaW5nKCkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnRvSlNPTigpKTtcbiAgfTtcblxuZXhwb3J0cy5Tb3VyY2VNYXBHZW5lcmF0b3IgPSBTb3VyY2VNYXBHZW5lcmF0b3I7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL2xpYi9zb3VyY2UtbWFwLWdlbmVyYXRvci5qc1xuLy8gbW9kdWxlIGlkID0gMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICpcbiAqIEJhc2VkIG9uIHRoZSBCYXNlIDY0IFZMUSBpbXBsZW1lbnRhdGlvbiBpbiBDbG9zdXJlIENvbXBpbGVyOlxuICogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jbG9zdXJlLWNvbXBpbGVyL3NvdXJjZS9icm93c2UvdHJ1bmsvc3JjL2NvbS9nb29nbGUvZGVidWdnaW5nL3NvdXJjZW1hcC9CYXNlNjRWTFEuamF2YVxuICpcbiAqIENvcHlyaWdodCAyMDExIFRoZSBDbG9zdXJlIENvbXBpbGVyIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcbiAqIG1ldDpcbiAqXG4gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxuICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcbiAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZFxuICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICogICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkXG4gKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xuICogXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxuICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXG4gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVFxuICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXG4gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXG4gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSxcbiAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxuICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG4gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cbnZhciBiYXNlNjQgPSByZXF1aXJlKCcuL2Jhc2U2NCcpO1xuXG4vLyBBIHNpbmdsZSBiYXNlIDY0IGRpZ2l0IGNhbiBjb250YWluIDYgYml0cyBvZiBkYXRhLiBGb3IgdGhlIGJhc2UgNjQgdmFyaWFibGVcbi8vIGxlbmd0aCBxdWFudGl0aWVzIHdlIHVzZSBpbiB0aGUgc291cmNlIG1hcCBzcGVjLCB0aGUgZmlyc3QgYml0IGlzIHRoZSBzaWduLFxuLy8gdGhlIG5leHQgZm91ciBiaXRzIGFyZSB0aGUgYWN0dWFsIHZhbHVlLCBhbmQgdGhlIDZ0aCBiaXQgaXMgdGhlXG4vLyBjb250aW51YXRpb24gYml0LiBUaGUgY29udGludWF0aW9uIGJpdCB0ZWxscyB1cyB3aGV0aGVyIHRoZXJlIGFyZSBtb3JlXG4vLyBkaWdpdHMgaW4gdGhpcyB2YWx1ZSBmb2xsb3dpbmcgdGhpcyBkaWdpdC5cbi8vXG4vLyAgIENvbnRpbnVhdGlvblxuLy8gICB8ICAgIFNpZ25cbi8vICAgfCAgICB8XG4vLyAgIFYgICAgVlxuLy8gICAxMDEwMTFcblxudmFyIFZMUV9CQVNFX1NISUZUID0gNTtcblxuLy8gYmluYXJ5OiAxMDAwMDBcbnZhciBWTFFfQkFTRSA9IDEgPDwgVkxRX0JBU0VfU0hJRlQ7XG5cbi8vIGJpbmFyeTogMDExMTExXG52YXIgVkxRX0JBU0VfTUFTSyA9IFZMUV9CQVNFIC0gMTtcblxuLy8gYmluYXJ5OiAxMDAwMDBcbnZhciBWTFFfQ09OVElOVUFUSU9OX0JJVCA9IFZMUV9CQVNFO1xuXG4vKipcbiAqIENvbnZlcnRzIGZyb20gYSB0d28tY29tcGxlbWVudCB2YWx1ZSB0byBhIHZhbHVlIHdoZXJlIHRoZSBzaWduIGJpdCBpc1xuICogcGxhY2VkIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQuICBGb3IgZXhhbXBsZSwgYXMgZGVjaW1hbHM6XG4gKiAgIDEgYmVjb21lcyAyICgxMCBiaW5hcnkpLCAtMSBiZWNvbWVzIDMgKDExIGJpbmFyeSlcbiAqICAgMiBiZWNvbWVzIDQgKDEwMCBiaW5hcnkpLCAtMiBiZWNvbWVzIDUgKDEwMSBiaW5hcnkpXG4gKi9cbmZ1bmN0aW9uIHRvVkxRU2lnbmVkKGFWYWx1ZSkge1xuICByZXR1cm4gYVZhbHVlIDwgMFxuICAgID8gKCgtYVZhbHVlKSA8PCAxKSArIDFcbiAgICA6IChhVmFsdWUgPDwgMSkgKyAwO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIHRvIGEgdHdvLWNvbXBsZW1lbnQgdmFsdWUgZnJvbSBhIHZhbHVlIHdoZXJlIHRoZSBzaWduIGJpdCBpc1xuICogcGxhY2VkIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQuICBGb3IgZXhhbXBsZSwgYXMgZGVjaW1hbHM6XG4gKiAgIDIgKDEwIGJpbmFyeSkgYmVjb21lcyAxLCAzICgxMSBiaW5hcnkpIGJlY29tZXMgLTFcbiAqICAgNCAoMTAwIGJpbmFyeSkgYmVjb21lcyAyLCA1ICgxMDEgYmluYXJ5KSBiZWNvbWVzIC0yXG4gKi9cbmZ1bmN0aW9uIGZyb21WTFFTaWduZWQoYVZhbHVlKSB7XG4gIHZhciBpc05lZ2F0aXZlID0gKGFWYWx1ZSAmIDEpID09PSAxO1xuICB2YXIgc2hpZnRlZCA9IGFWYWx1ZSA+PiAxO1xuICByZXR1cm4gaXNOZWdhdGl2ZVxuICAgID8gLXNoaWZ0ZWRcbiAgICA6IHNoaWZ0ZWQ7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmFzZSA2NCBWTFEgZW5jb2RlZCB2YWx1ZS5cbiAqL1xuZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZW5jb2RlKGFWYWx1ZSkge1xuICB2YXIgZW5jb2RlZCA9IFwiXCI7XG4gIHZhciBkaWdpdDtcblxuICB2YXIgdmxxID0gdG9WTFFTaWduZWQoYVZhbHVlKTtcblxuICBkbyB7XG4gICAgZGlnaXQgPSB2bHEgJiBWTFFfQkFTRV9NQVNLO1xuICAgIHZscSA+Pj49IFZMUV9CQVNFX1NISUZUO1xuICAgIGlmICh2bHEgPiAwKSB7XG4gICAgICAvLyBUaGVyZSBhcmUgc3RpbGwgbW9yZSBkaWdpdHMgaW4gdGhpcyB2YWx1ZSwgc28gd2UgbXVzdCBtYWtlIHN1cmUgdGhlXG4gICAgICAvLyBjb250aW51YXRpb24gYml0IGlzIG1hcmtlZC5cbiAgICAgIGRpZ2l0IHw9IFZMUV9DT05USU5VQVRJT05fQklUO1xuICAgIH1cbiAgICBlbmNvZGVkICs9IGJhc2U2NC5lbmNvZGUoZGlnaXQpO1xuICB9IHdoaWxlICh2bHEgPiAwKTtcblxuICByZXR1cm4gZW5jb2RlZDtcbn07XG5cbi8qKlxuICogRGVjb2RlcyB0aGUgbmV4dCBiYXNlIDY0IFZMUSB2YWx1ZSBmcm9tIHRoZSBnaXZlbiBzdHJpbmcgYW5kIHJldHVybnMgdGhlXG4gKiB2YWx1ZSBhbmQgdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyB2aWEgdGhlIG91dCBwYXJhbWV0ZXIuXG4gKi9cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gYmFzZTY0VkxRX2RlY29kZShhU3RyLCBhSW5kZXgsIGFPdXRQYXJhbSkge1xuICB2YXIgc3RyTGVuID0gYVN0ci5sZW5ndGg7XG4gIHZhciByZXN1bHQgPSAwO1xuICB2YXIgc2hpZnQgPSAwO1xuICB2YXIgY29udGludWF0aW9uLCBkaWdpdDtcblxuICBkbyB7XG4gICAgaWYgKGFJbmRleCA+PSBzdHJMZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG1vcmUgZGlnaXRzIGluIGJhc2UgNjQgVkxRIHZhbHVlLlwiKTtcbiAgICB9XG5cbiAgICBkaWdpdCA9IGJhc2U2NC5kZWNvZGUoYVN0ci5jaGFyQ29kZUF0KGFJbmRleCsrKSk7XG4gICAgaWYgKGRpZ2l0ID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBiYXNlNjQgZGlnaXQ6IFwiICsgYVN0ci5jaGFyQXQoYUluZGV4IC0gMSkpO1xuICAgIH1cblxuICAgIGNvbnRpbnVhdGlvbiA9ICEhKGRpZ2l0ICYgVkxRX0NPTlRJTlVBVElPTl9CSVQpO1xuICAgIGRpZ2l0ICY9IFZMUV9CQVNFX01BU0s7XG4gICAgcmVzdWx0ID0gcmVzdWx0ICsgKGRpZ2l0IDw8IHNoaWZ0KTtcbiAgICBzaGlmdCArPSBWTFFfQkFTRV9TSElGVDtcbiAgfSB3aGlsZSAoY29udGludWF0aW9uKTtcblxuICBhT3V0UGFyYW0udmFsdWUgPSBmcm9tVkxRU2lnbmVkKHJlc3VsdCk7XG4gIGFPdXRQYXJhbS5yZXN0ID0gYUluZGV4O1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL2Jhc2U2NC12bHEuanNcbi8vIG1vZHVsZSBpZCA9IDJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgaW50VG9DaGFyTWFwID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nLnNwbGl0KCcnKTtcblxuLyoqXG4gKiBFbmNvZGUgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2Ugb2YgMCB0byA2MyB0byBhIHNpbmdsZSBiYXNlIDY0IGRpZ2l0LlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgaWYgKDAgPD0gbnVtYmVyICYmIG51bWJlciA8IGludFRvQ2hhck1hcC5sZW5ndGgpIHtcbiAgICByZXR1cm4gaW50VG9DaGFyTWFwW251bWJlcl07XG4gIH1cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk11c3QgYmUgYmV0d2VlbiAwIGFuZCA2MzogXCIgKyBudW1iZXIpO1xufTtcblxuLyoqXG4gKiBEZWNvZGUgYSBzaW5nbGUgYmFzZSA2NCBjaGFyYWN0ZXIgY29kZSBkaWdpdCB0byBhbiBpbnRlZ2VyLiBSZXR1cm5zIC0xIG9uXG4gKiBmYWlsdXJlLlxuICovXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIChjaGFyQ29kZSkge1xuICB2YXIgYmlnQSA9IDY1OyAgICAgLy8gJ0EnXG4gIHZhciBiaWdaID0gOTA7ICAgICAvLyAnWidcblxuICB2YXIgbGl0dGxlQSA9IDk3OyAgLy8gJ2EnXG4gIHZhciBsaXR0bGVaID0gMTIyOyAvLyAneidcblxuICB2YXIgemVybyA9IDQ4OyAgICAgLy8gJzAnXG4gIHZhciBuaW5lID0gNTc7ICAgICAvLyAnOSdcblxuICB2YXIgcGx1cyA9IDQzOyAgICAgLy8gJysnXG4gIHZhciBzbGFzaCA9IDQ3OyAgICAvLyAnLydcblxuICB2YXIgbGl0dGxlT2Zmc2V0ID0gMjY7XG4gIHZhciBudW1iZXJPZmZzZXQgPSA1MjtcblxuICAvLyAwIC0gMjU6IEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXG4gIGlmIChiaWdBIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IGJpZ1opIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gYmlnQSk7XG4gIH1cblxuICAvLyAyNiAtIDUxOiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elxuICBpZiAobGl0dGxlQSA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBsaXR0bGVaKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIGxpdHRsZUEgKyBsaXR0bGVPZmZzZXQpO1xuICB9XG5cbiAgLy8gNTIgLSA2MTogMDEyMzQ1Njc4OVxuICBpZiAoemVybyA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBuaW5lKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIHplcm8gKyBudW1iZXJPZmZzZXQpO1xuICB9XG5cbiAgLy8gNjI6ICtcbiAgaWYgKGNoYXJDb2RlID09IHBsdXMpIHtcbiAgICByZXR1cm4gNjI7XG4gIH1cblxuICAvLyA2MzogL1xuICBpZiAoY2hhckNvZGUgPT0gc2xhc2gpIHtcbiAgICByZXR1cm4gNjM7XG4gIH1cblxuICAvLyBJbnZhbGlkIGJhc2U2NCBkaWdpdC5cbiAgcmV0dXJuIC0xO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL2Jhc2U2NC5qc1xuLy8gbW9kdWxlIGlkID0gM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbi8qKlxuICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgZ2V0dGluZyB2YWx1ZXMgZnJvbSBwYXJhbWV0ZXIvb3B0aW9uc1xuICogb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0gYXJncyBUaGUgb2JqZWN0IHdlIGFyZSBleHRyYWN0aW5nIHZhbHVlcyBmcm9tXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgd2UgYXJlIGdldHRpbmcuXG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlIEFuIG9wdGlvbmFsIHZhbHVlIHRvIHJldHVybiBpZiB0aGUgcHJvcGVydHkgaXMgbWlzc2luZ1xuICogZnJvbSB0aGUgb2JqZWN0LiBJZiB0aGlzIGlzIG5vdCBzcGVjaWZpZWQgYW5kIHRoZSBwcm9wZXJ0eSBpcyBtaXNzaW5nLCBhblxuICogZXJyb3Igd2lsbCBiZSB0aHJvd24uXG4gKi9cbmZ1bmN0aW9uIGdldEFyZyhhQXJncywgYU5hbWUsIGFEZWZhdWx0VmFsdWUpIHtcbiAgaWYgKGFOYW1lIGluIGFBcmdzKSB7XG4gICAgcmV0dXJuIGFBcmdzW2FOYW1lXTtcbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgcmV0dXJuIGFEZWZhdWx0VmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhTmFtZSArICdcIiBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50LicpO1xuICB9XG59XG5leHBvcnRzLmdldEFyZyA9IGdldEFyZztcblxudmFyIHVybFJlZ2V4cCA9IC9eKD86KFtcXHcrXFwtLl0rKTopP1xcL1xcLyg/OihcXHcrOlxcdyspQCk/KFtcXHcuLV0qKSg/OjooXFxkKykpPyguKikkLztcbnZhciBkYXRhVXJsUmVnZXhwID0gL15kYXRhOi4rXFwsLiskLztcblxuZnVuY3Rpb24gdXJsUGFyc2UoYVVybCkge1xuICB2YXIgbWF0Y2ggPSBhVXJsLm1hdGNoKHVybFJlZ2V4cCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHNjaGVtZTogbWF0Y2hbMV0sXG4gICAgYXV0aDogbWF0Y2hbMl0sXG4gICAgaG9zdDogbWF0Y2hbM10sXG4gICAgcG9ydDogbWF0Y2hbNF0sXG4gICAgcGF0aDogbWF0Y2hbNV1cbiAgfTtcbn1cbmV4cG9ydHMudXJsUGFyc2UgPSB1cmxQYXJzZTtcblxuZnVuY3Rpb24gdXJsR2VuZXJhdGUoYVBhcnNlZFVybCkge1xuICB2YXIgdXJsID0gJyc7XG4gIGlmIChhUGFyc2VkVXJsLnNjaGVtZSkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLnNjaGVtZSArICc6JztcbiAgfVxuICB1cmwgKz0gJy8vJztcbiAgaWYgKGFQYXJzZWRVcmwuYXV0aCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmF1dGggKyAnQCc7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwuaG9zdCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmhvc3Q7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwucG9ydCkge1xuICAgIHVybCArPSBcIjpcIiArIGFQYXJzZWRVcmwucG9ydFxuICB9XG4gIGlmIChhUGFyc2VkVXJsLnBhdGgpIHtcbiAgICB1cmwgKz0gYVBhcnNlZFVybC5wYXRoO1xuICB9XG4gIHJldHVybiB1cmw7XG59XG5leHBvcnRzLnVybEdlbmVyYXRlID0gdXJsR2VuZXJhdGU7XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHBhdGgsIG9yIHRoZSBwYXRoIHBvcnRpb24gb2YgYSBVUkw6XG4gKlxuICogLSBSZXBsYWNlcyBjb25zZWN1dGl2ZSBzbGFzaGVzIHdpdGggb25lIHNsYXNoLlxuICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICcuJyBwYXJ0cy5cbiAqIC0gUmVtb3ZlcyB1bm5lY2Vzc2FyeSAnPGRpcj4vLi4nIHBhcnRzLlxuICpcbiAqIEJhc2VkIG9uIGNvZGUgaW4gdGhlIE5vZGUuanMgJ3BhdGgnIGNvcmUgbW9kdWxlLlxuICpcbiAqIEBwYXJhbSBhUGF0aCBUaGUgcGF0aCBvciB1cmwgdG8gbm9ybWFsaXplLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemUoYVBhdGgpIHtcbiAgdmFyIHBhdGggPSBhUGF0aDtcbiAgdmFyIHVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgaWYgKHVybCkge1xuICAgIGlmICghdXJsLnBhdGgpIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG4gICAgcGF0aCA9IHVybC5wYXRoO1xuICB9XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpO1xuXG4gIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoL1xcLysvKTtcbiAgZm9yICh2YXIgcGFydCwgdXAgPSAwLCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBwYXJ0ID0gcGFydHNbaV07XG4gICAgaWYgKHBhcnQgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykge1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwID4gMCkge1xuICAgICAgaWYgKHBhcnQgPT09ICcnKSB7XG4gICAgICAgIC8vIFRoZSBmaXJzdCBwYXJ0IGlzIGJsYW5rIGlmIHRoZSBwYXRoIGlzIGFic29sdXRlLiBUcnlpbmcgdG8gZ29cbiAgICAgICAgLy8gYWJvdmUgdGhlIHJvb3QgaXMgYSBuby1vcC4gVGhlcmVmb3JlIHdlIGNhbiByZW1vdmUgYWxsICcuLicgcGFydHNcbiAgICAgICAgLy8gZGlyZWN0bHkgYWZ0ZXIgdGhlIHJvb3QuXG4gICAgICAgIHBhcnRzLnNwbGljZShpICsgMSwgdXApO1xuICAgICAgICB1cCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoaSwgMik7XG4gICAgICAgIHVwLS07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHBhdGggPSBwYXJ0cy5qb2luKCcvJyk7XG5cbiAgaWYgKHBhdGggPT09ICcnKSB7XG4gICAgcGF0aCA9IGlzQWJzb2x1dGUgPyAnLycgOiAnLic7XG4gIH1cblxuICBpZiAodXJsKSB7XG4gICAgdXJsLnBhdGggPSBwYXRoO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZSh1cmwpO1xuICB9XG4gIHJldHVybiBwYXRoO1xufVxuZXhwb3J0cy5ub3JtYWxpemUgPSBub3JtYWxpemU7XG5cbi8qKlxuICogSm9pbnMgdHdvIHBhdGhzL1VSTHMuXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBqb2luZWQgd2l0aCB0aGUgcm9vdC5cbiAqXG4gKiAtIElmIGFQYXRoIGlzIGEgVVJMIG9yIGEgZGF0YSBVUkksIGFQYXRoIGlzIHJldHVybmVkLCB1bmxlc3MgYVBhdGggaXMgYVxuICogICBzY2hlbWUtcmVsYXRpdmUgVVJMOiBUaGVuIHRoZSBzY2hlbWUgb2YgYVJvb3QsIGlmIGFueSwgaXMgcHJlcGVuZGVkXG4gKiAgIGZpcnN0LlxuICogLSBPdGhlcndpc2UgYVBhdGggaXMgYSBwYXRoLiBJZiBhUm9vdCBpcyBhIFVSTCwgdGhlbiBpdHMgcGF0aCBwb3J0aW9uXG4gKiAgIGlzIHVwZGF0ZWQgd2l0aCB0aGUgcmVzdWx0IGFuZCBhUm9vdCBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlIHRoZSByZXN1bHRcbiAqICAgaXMgcmV0dXJuZWQuXG4gKiAgIC0gSWYgYVBhdGggaXMgYWJzb2x1dGUsIHRoZSByZXN1bHQgaXMgYVBhdGguXG4gKiAgIC0gT3RoZXJ3aXNlIHRoZSB0d28gcGF0aHMgYXJlIGpvaW5lZCB3aXRoIGEgc2xhc2guXG4gKiAtIEpvaW5pbmcgZm9yIGV4YW1wbGUgJ2h0dHA6Ly8nIGFuZCAnd3d3LmV4YW1wbGUuY29tJyBpcyBhbHNvIHN1cHBvcnRlZC5cbiAqL1xuZnVuY3Rpb24gam9pbihhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuICBpZiAoYVBhdGggPT09IFwiXCIpIHtcbiAgICBhUGF0aCA9IFwiLlwiO1xuICB9XG4gIHZhciBhUGF0aFVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgdmFyIGFSb290VXJsID0gdXJsUGFyc2UoYVJvb3QpO1xuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdCA9IGFSb290VXJsLnBhdGggfHwgJy8nO1xuICB9XG5cbiAgLy8gYGpvaW4oZm9vLCAnLy93d3cuZXhhbXBsZS5vcmcnKWBcbiAgaWYgKGFQYXRoVXJsICYmICFhUGF0aFVybC5zY2hlbWUpIHtcbiAgICBpZiAoYVJvb3RVcmwpIHtcbiAgICAgIGFQYXRoVXJsLnNjaGVtZSA9IGFSb290VXJsLnNjaGVtZTtcbiAgICB9XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFQYXRoVXJsKTtcbiAgfVxuXG4gIGlmIChhUGF0aFVybCB8fCBhUGF0aC5tYXRjaChkYXRhVXJsUmVnZXhwKSkge1xuICAgIHJldHVybiBhUGF0aDtcbiAgfVxuXG4gIC8vIGBqb2luKCdodHRwOi8vJywgJ3d3dy5leGFtcGxlLmNvbScpYFxuICBpZiAoYVJvb3RVcmwgJiYgIWFSb290VXJsLmhvc3QgJiYgIWFSb290VXJsLnBhdGgpIHtcbiAgICBhUm9vdFVybC5ob3N0ID0gYVBhdGg7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFSb290VXJsKTtcbiAgfVxuXG4gIHZhciBqb2luZWQgPSBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJ1xuICAgID8gYVBhdGhcbiAgICA6IG5vcm1hbGl6ZShhUm9vdC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIGFQYXRoKTtcblxuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdFVybC5wYXRoID0gam9pbmVkO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUm9vdFVybCk7XG4gIH1cbiAgcmV0dXJuIGpvaW5lZDtcbn1cbmV4cG9ydHMuam9pbiA9IGpvaW47XG5cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uIChhUGF0aCkge1xuICByZXR1cm4gYVBhdGguY2hhckF0KDApID09PSAnLycgfHwgdXJsUmVnZXhwLnRlc3QoYVBhdGgpO1xufTtcblxuLyoqXG4gKiBNYWtlIGEgcGF0aCByZWxhdGl2ZSB0byBhIFVSTCBvciBhbm90aGVyIHBhdGguXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBtYWRlIHJlbGF0aXZlIHRvIGFSb290LlxuICovXG5mdW5jdGlvbiByZWxhdGl2ZShhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuXG4gIGFSb290ID0gYVJvb3QucmVwbGFjZSgvXFwvJC8sICcnKTtcblxuICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIHBhdGggdG8gYmUgYWJvdmUgdGhlIHJvb3QuIEluIHRoaXMgY2FzZSwgc2ltcGx5XG4gIC8vIGNoZWNraW5nIHdoZXRoZXIgdGhlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlIHBhdGggd29uJ3Qgd29yay4gSW5zdGVhZCwgd2VcbiAgLy8gbmVlZCB0byByZW1vdmUgY29tcG9uZW50cyBmcm9tIHRoZSByb290IG9uZSBieSBvbmUsIHVudGlsIGVpdGhlciB3ZSBmaW5kXG4gIC8vIGEgcHJlZml4IHRoYXQgZml0cywgb3Igd2UgcnVuIG91dCBvZiBjb21wb25lbnRzIHRvIHJlbW92ZS5cbiAgdmFyIGxldmVsID0gMDtcbiAgd2hpbGUgKGFQYXRoLmluZGV4T2YoYVJvb3QgKyAnLycpICE9PSAwKSB7XG4gICAgdmFyIGluZGV4ID0gYVJvb3QubGFzdEluZGV4T2YoXCIvXCIpO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgb25seSBwYXJ0IG9mIHRoZSByb290IHRoYXQgaXMgbGVmdCBpcyB0aGUgc2NoZW1lIChpLmUuIGh0dHA6Ly8sXG4gICAgLy8gZmlsZTovLy8sIGV0Yy4pLCBvbmUgb3IgbW9yZSBzbGFzaGVzICgvKSwgb3Igc2ltcGx5IG5vdGhpbmcgYXQgYWxsLCB3ZVxuICAgIC8vIGhhdmUgZXhoYXVzdGVkIGFsbCBjb21wb25lbnRzLCBzbyB0aGUgcGF0aCBpcyBub3QgcmVsYXRpdmUgdG8gdGhlIHJvb3QuXG4gICAgYVJvb3QgPSBhUm9vdC5zbGljZSgwLCBpbmRleCk7XG4gICAgaWYgKGFSb290Lm1hdGNoKC9eKFteXFwvXSs6XFwvKT9cXC8qJC8pKSB7XG4gICAgICByZXR1cm4gYVBhdGg7XG4gICAgfVxuXG4gICAgKytsZXZlbDtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBhZGQgYSBcIi4uL1wiIGZvciBlYWNoIGNvbXBvbmVudCB3ZSByZW1vdmVkIGZyb20gdGhlIHJvb3QuXG4gIHJldHVybiBBcnJheShsZXZlbCArIDEpLmpvaW4oXCIuLi9cIikgKyBhUGF0aC5zdWJzdHIoYVJvb3QubGVuZ3RoICsgMSk7XG59XG5leHBvcnRzLnJlbGF0aXZlID0gcmVsYXRpdmU7XG5cbnZhciBzdXBwb3J0c051bGxQcm90byA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICByZXR1cm4gISgnX19wcm90b19fJyBpbiBvYmopO1xufSgpKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkgKHMpIHtcbiAgcmV0dXJuIHM7XG59XG5cbi8qKlxuICogQmVjYXVzZSBiZWhhdmlvciBnb2VzIHdhY2t5IHdoZW4geW91IHNldCBgX19wcm90b19fYCBvbiBvYmplY3RzLCB3ZVxuICogaGF2ZSB0byBwcmVmaXggYWxsIHRoZSBzdHJpbmdzIGluIG91ciBzZXQgd2l0aCBhbiBhcmJpdHJhcnkgY2hhcmFjdGVyLlxuICpcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL3B1bGwvMzEgYW5kXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8zMFxuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5mdW5jdGlvbiB0b1NldFN0cmluZyhhU3RyKSB7XG4gIGlmIChpc1Byb3RvU3RyaW5nKGFTdHIpKSB7XG4gICAgcmV0dXJuICckJyArIGFTdHI7XG4gIH1cblxuICByZXR1cm4gYVN0cjtcbn1cbmV4cG9ydHMudG9TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogdG9TZXRTdHJpbmc7XG5cbmZ1bmN0aW9uIGZyb21TZXRTdHJpbmcoYVN0cikge1xuICBpZiAoaXNQcm90b1N0cmluZyhhU3RyKSkge1xuICAgIHJldHVybiBhU3RyLnNsaWNlKDEpO1xuICB9XG5cbiAgcmV0dXJuIGFTdHI7XG59XG5leHBvcnRzLmZyb21TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogZnJvbVNldFN0cmluZztcblxuZnVuY3Rpb24gaXNQcm90b1N0cmluZyhzKSB7XG4gIGlmICghcykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBzLmxlbmd0aDtcblxuICBpZiAobGVuZ3RoIDwgOSAvKiBcIl9fcHJvdG9fX1wiLmxlbmd0aCAqLykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMSkgIT09IDk1ICAvKiAnXycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSAyKSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDMpICE9PSAxMTEgLyogJ28nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNCkgIT09IDExNiAvKiAndCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA1KSAhPT0gMTExIC8qICdvJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDYpICE9PSAxMTQgLyogJ3InICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNykgIT09IDExMiAvKiAncCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA4KSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDkpICE9PSA5NSAgLyogJ18nICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IGxlbmd0aCAtIDEwOyBpID49IDA7IGktLSkge1xuICAgIGlmIChzLmNoYXJDb2RlQXQoaSkgIT09IDM2IC8qICckJyAqLykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2hlcmUgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4sIGJ1dCBkaWZmZXJlbnQgZ2VuZXJhdGVkXG4gKiBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYSBtYXBwaW5nIHdpdGggYVxuICogc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZU9yaWdpbmFsKSB7XG4gIHZhciBjbXAgPSBzdHJjbXAobWFwcGluZ0Euc291cmNlLCBtYXBwaW5nQi5zb3VyY2UpO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsTGluZSAtIG1hcHBpbmdCLm9yaWdpbmFsTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbENvbHVtbiAtIG1hcHBpbmdCLm9yaWdpbmFsQ29sdW1uO1xuICBpZiAoY21wICE9PSAwIHx8IG9ubHlDb21wYXJlT3JpZ2luYWwpIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZExpbmUgLSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIHJldHVybiBzdHJjbXAobWFwcGluZ0EubmFtZSwgbWFwcGluZ0IubmFtZSk7XG59XG5leHBvcnRzLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zID0gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnM7XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGRlZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBpbmRpY2VzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uLCBidXQgZGlmZmVyZW50XG4gKiBzb3VyY2UvbmFtZS9vcmlnaW5hbCBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYVxuICogbWFwcGluZyB3aXRoIGEgc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwIHx8IG9ubHlDb21wYXJlR2VuZXJhdGVkKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IHN0cmNtcChtYXBwaW5nQS5zb3VyY2UsIG1hcHBpbmdCLnNvdXJjZSk7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIHN0cmNtcChtYXBwaW5nQS5uYW1lLCBtYXBwaW5nQi5uYW1lKTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQgPSBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZDtcblxuZnVuY3Rpb24gc3RyY21wKGFTdHIxLCBhU3RyMikge1xuICBpZiAoYVN0cjEgPT09IGFTdHIyKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBpZiAoYVN0cjEgPT09IG51bGwpIHtcbiAgICByZXR1cm4gMTsgLy8gYVN0cjIgIT09IG51bGxcbiAgfVxuXG4gIGlmIChhU3RyMiA9PT0gbnVsbCkge1xuICAgIHJldHVybiAtMTsgLy8gYVN0cjEgIT09IG51bGxcbiAgfVxuXG4gIGlmIChhU3RyMSA+IGFTdHIyKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGluZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBzdHJpbmdzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQikge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IHN0cmNtcChtYXBwaW5nQS5zb3VyY2UsIG1hcHBpbmdCLnNvdXJjZSk7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIHN0cmNtcChtYXBwaW5nQS5uYW1lLCBtYXBwaW5nQi5uYW1lKTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQgPSBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZDtcblxuLyoqXG4gKiBTdHJpcCBhbnkgSlNPTiBYU1NJIGF2b2lkYW5jZSBwcmVmaXggZnJvbSB0aGUgc3RyaW5nIChhcyBkb2N1bWVudGVkXG4gKiBpbiB0aGUgc291cmNlIG1hcHMgc3BlY2lmaWNhdGlvbiksIGFuZCB0aGVuIHBhcnNlIHRoZSBzdHJpbmcgYXNcbiAqIEpTT04uXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU291cmNlTWFwSW5wdXQoc3RyKSB7XG4gIHJldHVybiBKU09OLnBhcnNlKHN0ci5yZXBsYWNlKC9eXFwpXX0nW15cXG5dKlxcbi8sICcnKSk7XG59XG5leHBvcnRzLnBhcnNlU291cmNlTWFwSW5wdXQgPSBwYXJzZVNvdXJjZU1hcElucHV0O1xuXG4vKipcbiAqIENvbXB1dGUgdGhlIFVSTCBvZiBhIHNvdXJjZSBnaXZlbiB0aGUgdGhlIHNvdXJjZSByb290LCB0aGUgc291cmNlJ3NcbiAqIFVSTCwgYW5kIHRoZSBzb3VyY2UgbWFwJ3MgVVJMLlxuICovXG5mdW5jdGlvbiBjb21wdXRlU291cmNlVVJMKHNvdXJjZVJvb3QsIHNvdXJjZVVSTCwgc291cmNlTWFwVVJMKSB7XG4gIHNvdXJjZVVSTCA9IHNvdXJjZVVSTCB8fCAnJztcblxuICBpZiAoc291cmNlUm9vdCkge1xuICAgIC8vIFRoaXMgZm9sbG93cyB3aGF0IENocm9tZSBkb2VzLlxuICAgIGlmIChzb3VyY2VSb290W3NvdXJjZVJvb3QubGVuZ3RoIC0gMV0gIT09ICcvJyAmJiBzb3VyY2VVUkxbMF0gIT09ICcvJykge1xuICAgICAgc291cmNlUm9vdCArPSAnLyc7XG4gICAgfVxuICAgIC8vIFRoZSBzcGVjIHNheXM6XG4gICAgLy8gICBMaW5lIDQ6IEFuIG9wdGlvbmFsIHNvdXJjZSByb290LCB1c2VmdWwgZm9yIHJlbG9jYXRpbmcgc291cmNlXG4gICAgLy8gICBmaWxlcyBvbiBhIHNlcnZlciBvciByZW1vdmluZyByZXBlYXRlZCB2YWx1ZXMgaW4gdGhlXG4gICAgLy8gICDigJxzb3VyY2Vz4oCdIGVudHJ5LiAgVGhpcyB2YWx1ZSBpcyBwcmVwZW5kZWQgdG8gdGhlIGluZGl2aWR1YWxcbiAgICAvLyAgIGVudHJpZXMgaW4gdGhlIOKAnHNvdXJjZeKAnSBmaWVsZC5cbiAgICBzb3VyY2VVUkwgPSBzb3VyY2VSb290ICsgc291cmNlVVJMO1xuICB9XG5cbiAgLy8gSGlzdG9yaWNhbGx5LCBTb3VyY2VNYXBDb25zdW1lciBkaWQgbm90IHRha2UgdGhlIHNvdXJjZU1hcFVSTCBhc1xuICAvLyBhIHBhcmFtZXRlci4gIFRoaXMgbW9kZSBpcyBzdGlsbCBzb21ld2hhdCBzdXBwb3J0ZWQsIHdoaWNoIGlzIHdoeVxuICAvLyB0aGlzIGNvZGUgYmxvY2sgaXMgY29uZGl0aW9uYWwuICBIb3dldmVyLCBpdCdzIHByZWZlcmFibGUgdG8gcGFzc1xuICAvLyB0aGUgc291cmNlIG1hcCBVUkwgdG8gU291cmNlTWFwQ29uc3VtZXIsIHNvIHRoYXQgdGhpcyBmdW5jdGlvblxuICAvLyBjYW4gaW1wbGVtZW50IHRoZSBzb3VyY2UgVVJMIHJlc29sdXRpb24gYWxnb3JpdGhtIGFzIG91dGxpbmVkIGluXG4gIC8vIHRoZSBzcGVjLiAgVGhpcyBibG9jayBpcyBiYXNpY2FsbHkgdGhlIGVxdWl2YWxlbnQgb2Y6XG4gIC8vICAgIG5ldyBVUkwoc291cmNlVVJMLCBzb3VyY2VNYXBVUkwpLnRvU3RyaW5nKClcbiAgLy8gLi4uIGV4Y2VwdCBpdCBhdm9pZHMgdXNpbmcgVVJMLCB3aGljaCB3YXNuJ3QgYXZhaWxhYmxlIGluIHRoZVxuICAvLyBvbGRlciByZWxlYXNlcyBvZiBub2RlIHN0aWxsIHN1cHBvcnRlZCBieSB0aGlzIGxpYnJhcnkuXG4gIC8vXG4gIC8vIFRoZSBzcGVjIHNheXM6XG4gIC8vICAgSWYgdGhlIHNvdXJjZXMgYXJlIG5vdCBhYnNvbHV0ZSBVUkxzIGFmdGVyIHByZXBlbmRpbmcgb2YgdGhlXG4gIC8vICAg4oCcc291cmNlUm9vdOKAnSwgdGhlIHNvdXJjZXMgYXJlIHJlc29sdmVkIHJlbGF0aXZlIHRvIHRoZVxuICAvLyAgIFNvdXJjZU1hcCAobGlrZSByZXNvbHZpbmcgc2NyaXB0IHNyYyBpbiBhIGh0bWwgZG9jdW1lbnQpLlxuICBpZiAoc291cmNlTWFwVVJMKSB7XG4gICAgdmFyIHBhcnNlZCA9IHVybFBhcnNlKHNvdXJjZU1hcFVSTCk7XG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInNvdXJjZU1hcFVSTCBjb3VsZCBub3QgYmUgcGFyc2VkXCIpO1xuICAgIH1cbiAgICBpZiAocGFyc2VkLnBhdGgpIHtcbiAgICAgIC8vIFN0cmlwIHRoZSBsYXN0IHBhdGggY29tcG9uZW50LCBidXQga2VlcCB0aGUgXCIvXCIuXG4gICAgICB2YXIgaW5kZXggPSBwYXJzZWQucGF0aC5sYXN0SW5kZXhPZignLycpO1xuICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgcGFyc2VkLnBhdGggPSBwYXJzZWQucGF0aC5zdWJzdHJpbmcoMCwgaW5kZXggKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlVVJMID0gam9pbih1cmxHZW5lcmF0ZShwYXJzZWQpLCBzb3VyY2VVUkwpO1xuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZShzb3VyY2VVUkwpO1xufVxuZXhwb3J0cy5jb21wdXRlU291cmNlVVJMID0gY29tcHV0ZVNvdXJjZVVSTDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL3V0aWwuanNcbi8vIG1vZHVsZSBpZCA9IDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgaGFzTmF0aXZlTWFwID0gdHlwZW9mIE1hcCAhPT0gXCJ1bmRlZmluZWRcIjtcblxuLyoqXG4gKiBBIGRhdGEgc3RydWN0dXJlIHdoaWNoIGlzIGEgY29tYmluYXRpb24gb2YgYW4gYXJyYXkgYW5kIGEgc2V0LiBBZGRpbmcgYSBuZXdcbiAqIG1lbWJlciBpcyBPKDEpLCB0ZXN0aW5nIGZvciBtZW1iZXJzaGlwIGlzIE8oMSksIGFuZCBmaW5kaW5nIHRoZSBpbmRleCBvZiBhblxuICogZWxlbWVudCBpcyBPKDEpLiBSZW1vdmluZyBlbGVtZW50cyBmcm9tIHRoZSBzZXQgaXMgbm90IHN1cHBvcnRlZC4gT25seVxuICogc3RyaW5ncyBhcmUgc3VwcG9ydGVkIGZvciBtZW1iZXJzaGlwLlxuICovXG5mdW5jdGlvbiBBcnJheVNldCgpIHtcbiAgdGhpcy5fYXJyYXkgPSBbXTtcbiAgdGhpcy5fc2V0ID0gaGFzTmF0aXZlTWFwID8gbmV3IE1hcCgpIDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbn1cblxuLyoqXG4gKiBTdGF0aWMgbWV0aG9kIGZvciBjcmVhdGluZyBBcnJheVNldCBpbnN0YW5jZXMgZnJvbSBhbiBleGlzdGluZyBhcnJheS5cbiAqL1xuQXJyYXlTZXQuZnJvbUFycmF5ID0gZnVuY3Rpb24gQXJyYXlTZXRfZnJvbUFycmF5KGFBcnJheSwgYUFsbG93RHVwbGljYXRlcykge1xuICB2YXIgc2V0ID0gbmV3IEFycmF5U2V0KCk7XG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhQXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBzZXQuYWRkKGFBcnJheVtpXSwgYUFsbG93RHVwbGljYXRlcyk7XG4gIH1cbiAgcmV0dXJuIHNldDtcbn07XG5cbi8qKlxuICogUmV0dXJuIGhvdyBtYW55IHVuaXF1ZSBpdGVtcyBhcmUgaW4gdGhpcyBBcnJheVNldC4gSWYgZHVwbGljYXRlcyBoYXZlIGJlZW5cbiAqIGFkZGVkLCB0aGFuIHRob3NlIGRvIG5vdCBjb3VudCB0b3dhcmRzIHRoZSBzaXplLlxuICpcbiAqIEByZXR1cm5zIE51bWJlclxuICovXG5BcnJheVNldC5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uIEFycmF5U2V0X3NpemUoKSB7XG4gIHJldHVybiBoYXNOYXRpdmVNYXAgPyB0aGlzLl9zZXQuc2l6ZSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuX3NldCkubGVuZ3RoO1xufTtcblxuLyoqXG4gKiBBZGQgdGhlIGdpdmVuIHN0cmluZyB0byB0aGlzIHNldC5cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIEFycmF5U2V0X2FkZChhU3RyLCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gIHZhciBzU3RyID0gaGFzTmF0aXZlTWFwID8gYVN0ciA6IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIHZhciBpc0R1cGxpY2F0ZSA9IGhhc05hdGl2ZU1hcCA/IHRoaXMuaGFzKGFTdHIpIDogaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKTtcbiAgdmFyIGlkeCA9IHRoaXMuX2FycmF5Lmxlbmd0aDtcbiAgaWYgKCFpc0R1cGxpY2F0ZSB8fCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhU3RyKTtcbiAgfVxuICBpZiAoIWlzRHVwbGljYXRlKSB7XG4gICAgaWYgKGhhc05hdGl2ZU1hcCkge1xuICAgICAgdGhpcy5fc2V0LnNldChhU3RyLCBpZHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXRbc1N0cl0gPSBpZHg7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIElzIHRoZSBnaXZlbiBzdHJpbmcgYSBtZW1iZXIgb2YgdGhpcyBzZXQ/XG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBBcnJheVNldF9oYXMoYVN0cikge1xuICBpZiAoaGFzTmF0aXZlTWFwKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldC5oYXMoYVN0cik7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICAgIHJldHVybiBoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpO1xuICB9XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiBzdHJpbmcgaW4gdGhlIGFycmF5P1xuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIEFycmF5U2V0X2luZGV4T2YoYVN0cikge1xuICBpZiAoaGFzTmF0aXZlTWFwKSB7XG4gICAgdmFyIGlkeCA9IHRoaXMuX3NldC5nZXQoYVN0cik7XG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIHJldHVybiBpZHg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgICBpZiAoaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NldFtzU3RyXTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTdHIgKyAnXCIgaXMgbm90IGluIHRoZSBzZXQuJyk7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGVsZW1lbnQgYXQgdGhlIGdpdmVuIGluZGV4P1xuICpcbiAqIEBwYXJhbSBOdW1iZXIgYUlkeFxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiBBcnJheVNldF9hdChhSWR4KSB7XG4gIGlmIChhSWR4ID49IDAgJiYgYUlkeCA8IHRoaXMuX2FycmF5Lmxlbmd0aCkge1xuICAgIHJldHVybiB0aGlzLl9hcnJheVthSWR4XTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGVsZW1lbnQgaW5kZXhlZCBieSAnICsgYUlkeCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGFycmF5IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc2V0ICh3aGljaCBoYXMgdGhlIHByb3BlciBpbmRpY2VzXG4gKiBpbmRpY2F0ZWQgYnkgaW5kZXhPZikuIE5vdGUgdGhhdCB0aGlzIGlzIGEgY29weSBvZiB0aGUgaW50ZXJuYWwgYXJyYXkgdXNlZFxuICogZm9yIHN0b3JpbmcgdGhlIG1lbWJlcnMgc28gdGhhdCBubyBvbmUgY2FuIG1lc3Mgd2l0aCBpbnRlcm5hbCBzdGF0ZS5cbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF90b0FycmF5KCkge1xuICByZXR1cm4gdGhpcy5fYXJyYXkuc2xpY2UoKTtcbn07XG5cbmV4cG9ydHMuQXJyYXlTZXQgPSBBcnJheVNldDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL2FycmF5LXNldC5qc1xuLy8gbW9kdWxlIGlkID0gNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTQgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgbWFwcGluZ0IgaXMgYWZ0ZXIgbWFwcGluZ0Egd2l0aCByZXNwZWN0IHRvIGdlbmVyYXRlZFxuICogcG9zaXRpb24uXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlZFBvc2l0aW9uQWZ0ZXIobWFwcGluZ0EsIG1hcHBpbmdCKSB7XG4gIC8vIE9wdGltaXplZCBmb3IgbW9zdCBjb21tb24gY2FzZVxuICB2YXIgbGluZUEgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lO1xuICB2YXIgbGluZUIgPSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICB2YXIgY29sdW1uQSA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbjtcbiAgdmFyIGNvbHVtbkIgPSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIHJldHVybiBsaW5lQiA+IGxpbmVBIHx8IGxpbmVCID09IGxpbmVBICYmIGNvbHVtbkIgPj0gY29sdW1uQSB8fFxuICAgICAgICAgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZChtYXBwaW5nQSwgbWFwcGluZ0IpIDw9IDA7XG59XG5cbi8qKlxuICogQSBkYXRhIHN0cnVjdHVyZSB0byBwcm92aWRlIGEgc29ydGVkIHZpZXcgb2YgYWNjdW11bGF0ZWQgbWFwcGluZ3MgaW4gYVxuICogcGVyZm9ybWFuY2UgY29uc2Npb3VzIG1hbm5lci4gSXQgdHJhZGVzIGEgbmVnbGliYWJsZSBvdmVyaGVhZCBpbiBnZW5lcmFsXG4gKiBjYXNlIGZvciBhIGxhcmdlIHNwZWVkdXAgaW4gY2FzZSBvZiBtYXBwaW5ncyBiZWluZyBhZGRlZCBpbiBvcmRlci5cbiAqL1xuZnVuY3Rpb24gTWFwcGluZ0xpc3QoKSB7XG4gIHRoaXMuX2FycmF5ID0gW107XG4gIHRoaXMuX3NvcnRlZCA9IHRydWU7XG4gIC8vIFNlcnZlcyBhcyBpbmZpbXVtXG4gIHRoaXMuX2xhc3QgPSB7Z2VuZXJhdGVkTGluZTogLTEsIGdlbmVyYXRlZENvbHVtbjogMH07XG59XG5cbi8qKlxuICogSXRlcmF0ZSB0aHJvdWdoIGludGVybmFsIGl0ZW1zLiBUaGlzIG1ldGhvZCB0YWtlcyB0aGUgc2FtZSBhcmd1bWVudHMgdGhhdFxuICogYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCB0YWtlcy5cbiAqXG4gKiBOT1RFOiBUaGUgb3JkZXIgb2YgdGhlIG1hcHBpbmdzIGlzIE5PVCBndWFyYW50ZWVkLlxuICovXG5NYXBwaW5nTGlzdC5wcm90b3R5cGUudW5zb3J0ZWRGb3JFYWNoID1cbiAgZnVuY3Rpb24gTWFwcGluZ0xpc3RfZm9yRWFjaChhQ2FsbGJhY2ssIGFUaGlzQXJnKSB7XG4gICAgdGhpcy5fYXJyYXkuZm9yRWFjaChhQ2FsbGJhY2ssIGFUaGlzQXJnKTtcbiAgfTtcblxuLyoqXG4gKiBBZGQgdGhlIGdpdmVuIHNvdXJjZSBtYXBwaW5nLlxuICpcbiAqIEBwYXJhbSBPYmplY3QgYU1hcHBpbmdcbiAqL1xuTWFwcGluZ0xpc3QucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIE1hcHBpbmdMaXN0X2FkZChhTWFwcGluZykge1xuICBpZiAoZ2VuZXJhdGVkUG9zaXRpb25BZnRlcih0aGlzLl9sYXN0LCBhTWFwcGluZykpIHtcbiAgICB0aGlzLl9sYXN0ID0gYU1hcHBpbmc7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhTWFwcGluZyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fc29ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhTWFwcGluZyk7XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZmxhdCwgc29ydGVkIGFycmF5IG9mIG1hcHBpbmdzLiBUaGUgbWFwcGluZ3MgYXJlIHNvcnRlZCBieVxuICogZ2VuZXJhdGVkIHBvc2l0aW9uLlxuICpcbiAqIFdBUk5JTkc6IFRoaXMgbWV0aG9kIHJldHVybnMgaW50ZXJuYWwgZGF0YSB3aXRob3V0IGNvcHlpbmcsIGZvclxuICogcGVyZm9ybWFuY2UuIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBOT1QgYmUgbXV0YXRlZCwgYW5kIHNob3VsZCBiZSB0cmVhdGVkIGFzXG4gKiBhbiBpbW11dGFibGUgYm9ycm93LiBJZiB5b3Ugd2FudCB0byB0YWtlIG93bmVyc2hpcCwgeW91IG11c3QgbWFrZSB5b3VyIG93blxuICogY29weS5cbiAqL1xuTWFwcGluZ0xpc3QucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBNYXBwaW5nTGlzdF90b0FycmF5KCkge1xuICBpZiAoIXRoaXMuX3NvcnRlZCkge1xuICAgIHRoaXMuX2FycmF5LnNvcnQodXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZCk7XG4gICAgdGhpcy5fc29ydGVkID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gdGhpcy5fYXJyYXk7XG59O1xuXG5leHBvcnRzLk1hcHBpbmdMaXN0ID0gTWFwcGluZ0xpc3Q7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL2xpYi9tYXBwaW5nLWxpc3QuanNcbi8vIG1vZHVsZSBpZCA9IDZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGJpbmFyeVNlYXJjaCA9IHJlcXVpcmUoJy4vYmluYXJ5LXNlYXJjaCcpO1xudmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbnZhciBiYXNlNjRWTFEgPSByZXF1aXJlKCcuL2Jhc2U2NC12bHEnKTtcbnZhciBxdWlja1NvcnQgPSByZXF1aXJlKCcuL3F1aWNrLXNvcnQnKS5xdWlja1NvcnQ7XG5cbmZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXAsIGFTb3VyY2VNYXBVUkwpIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSB1dGlsLnBhcnNlU291cmNlTWFwSW5wdXQoYVNvdXJjZU1hcCk7XG4gIH1cblxuICByZXR1cm4gc291cmNlTWFwLnNlY3Rpb25zICE9IG51bGxcbiAgICA/IG5ldyBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwLCBhU291cmNlTWFwVVJMKVxuICAgIDogbmV3IEJhc2ljU291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwLCBhU291cmNlTWFwVVJMKTtcbn1cblxuU291cmNlTWFwQ29uc3VtZXIuZnJvbVNvdXJjZU1hcCA9IGZ1bmN0aW9uKGFTb3VyY2VNYXAsIGFTb3VyY2VNYXBVUkwpIHtcbiAgcmV0dXJuIEJhc2ljU291cmNlTWFwQ29uc3VtZXIuZnJvbVNvdXJjZU1hcChhU291cmNlTWFwLCBhU291cmNlTWFwVVJMKTtcbn1cblxuLyoqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcHBpbmcgc3BlYyB0aGF0IHdlIGFyZSBjb25zdW1pbmcuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8vIGBfX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmQgYF9fb3JpZ2luYWxNYXBwaW5nc2AgYXJlIGFycmF5cyB0aGF0IGhvbGQgdGhlXG4vLyBwYXJzZWQgbWFwcGluZyBjb29yZGluYXRlcyBmcm9tIHRoZSBzb3VyY2UgbWFwJ3MgXCJtYXBwaW5nc1wiIGF0dHJpYnV0ZS4gVGhleVxuLy8gYXJlIGxhemlseSBpbnN0YW50aWF0ZWQsIGFjY2Vzc2VkIHZpYSB0aGUgYF9nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4vLyBgX29yaWdpbmFsTWFwcGluZ3NgIGdldHRlcnMgcmVzcGVjdGl2ZWx5LCBhbmQgd2Ugb25seSBwYXJzZSB0aGUgbWFwcGluZ3Ncbi8vIGFuZCBjcmVhdGUgdGhlc2UgYXJyYXlzIG9uY2UgcXVlcmllZCBmb3IgYSBzb3VyY2UgbG9jYXRpb24uIFdlIGp1bXAgdGhyb3VnaFxuLy8gdGhlc2UgaG9vcHMgYmVjYXVzZSB0aGVyZSBjYW4gYmUgbWFueSB0aG91c2FuZHMgb2YgbWFwcGluZ3MsIGFuZCBwYXJzaW5nXG4vLyB0aGVtIGlzIGV4cGVuc2l2ZSwgc28gd2Ugb25seSB3YW50IHRvIGRvIGl0IGlmIHdlIG11c3QuXG4vL1xuLy8gRWFjaCBvYmplY3QgaW4gdGhlIGFycmF5cyBpcyBvZiB0aGUgZm9ybTpcbi8vXG4vLyAgICAge1xuLy8gICAgICAgZ2VuZXJhdGVkTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIGdlbmVyYXRlZENvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgc291cmNlOiBUaGUgcGF0aCB0byB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGUgdGhhdCBnZW5lcmF0ZWQgdGhpc1xuLy8gICAgICAgICAgICAgICBjaHVuayBvZiBjb2RlLFxuLy8gICAgICAgb3JpZ2luYWxMaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSB0aGF0XG4vLyAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoaXMgY2h1bmsgb2YgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBvcmlnaW5hbENvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSB0aGF0XG4vLyAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZHMgdG8gdGhpcyBjaHVuayBvZiBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbCBzeW1ib2wgd2hpY2ggZ2VuZXJhdGVkIHRoaXMgY2h1bmsgb2Zcbi8vICAgICAgICAgICAgIGNvZGUuXG4vLyAgICAgfVxuLy9cbi8vIEFsbCBwcm9wZXJ0aWVzIGV4Y2VwdCBmb3IgYGdlbmVyYXRlZExpbmVgIGFuZCBgZ2VuZXJhdGVkQ29sdW1uYCBjYW4gYmVcbi8vIGBudWxsYC5cbi8vXG4vLyBgX2dlbmVyYXRlZE1hcHBpbmdzYCBpcyBvcmRlcmVkIGJ5IHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zLlxuLy9cbi8vIGBfb3JpZ2luYWxNYXBwaW5nc2AgaXMgb3JkZXJlZCBieSB0aGUgb3JpZ2luYWwgcG9zaXRpb25zLlxuXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IG51bGw7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnX2dlbmVyYXRlZE1hcHBpbmdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3M7XG4gIH1cbn0pO1xuXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX19vcmlnaW5hbE1hcHBpbmdzID0gbnVsbDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdfb3JpZ2luYWxNYXBwaW5ncycsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX19vcmlnaW5hbE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fY2hhcklzTWFwcGluZ1NlcGFyYXRvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoYVN0ciwgaW5kZXgpIHtcbiAgICB2YXIgYyA9IGFTdHIuY2hhckF0KGluZGV4KTtcbiAgICByZXR1cm4gYyA9PT0gXCI7XCIgfHwgYyA9PT0gXCIsXCI7XG4gIH07XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCBfcGFyc2VNYXBwaW5nc1wiKTtcbiAgfTtcblxuU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSID0gMTtcblNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSID0gMjtcblxuU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQgPSAyO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBlYWNoIG1hcHBpbmcgYmV0d2VlbiBhbiBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4gYW5kIGFcbiAqIGdlbmVyYXRlZCBsaW5lL2NvbHVtbiBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gKlxuICogQHBhcmFtIEZ1bmN0aW9uIGFDYWxsYmFja1xuICogICAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGVhY2ggbWFwcGluZy5cbiAqIEBwYXJhbSBPYmplY3QgYUNvbnRleHRcbiAqICAgICAgICBPcHRpb25hbC4gSWYgc3BlY2lmaWVkLCB0aGlzIG9iamVjdCB3aWxsIGJlIHRoZSB2YWx1ZSBvZiBgdGhpc2AgZXZlcnlcbiAqICAgICAgICB0aW1lIHRoYXQgYGFDYWxsYmFja2AgaXMgY2FsbGVkLlxuICogQHBhcmFtIGFPcmRlclxuICogICAgICAgIEVpdGhlciBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYCBvclxuICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUmAuIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRvXG4gKiAgICAgICAgaXRlcmF0ZSBvdmVyIHRoZSBtYXBwaW5ncyBzb3J0ZWQgYnkgdGhlIGdlbmVyYXRlZCBmaWxlJ3MgbGluZS9jb2x1bW5cbiAqICAgICAgICBvcmRlciBvciB0aGUgb3JpZ2luYWwncyBzb3VyY2UvbGluZS9jb2x1bW4gb3JkZXIsIHJlc3BlY3RpdmVseS4gRGVmYXVsdHMgdG9cbiAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYC5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmVhY2hNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZWFjaE1hcHBpbmcoYUNhbGxiYWNrLCBhQ29udGV4dCwgYU9yZGVyKSB7XG4gICAgdmFyIGNvbnRleHQgPSBhQ29udGV4dCB8fCBudWxsO1xuICAgIHZhciBvcmRlciA9IGFPcmRlciB8fCBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVI7XG5cbiAgICB2YXIgbWFwcGluZ3M7XG4gICAgc3dpdGNoIChvcmRlcikge1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSOlxuICAgICAgbWFwcGluZ3MgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVI6XG4gICAgICBtYXBwaW5ncyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3M7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBvcmRlciBvZiBpdGVyYXRpb24uXCIpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5zb3VyY2VSb290O1xuICAgIG1hcHBpbmdzLm1hcChmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgdmFyIHNvdXJjZSA9IG1hcHBpbmcuc291cmNlID09PSBudWxsID8gbnVsbCA6IHRoaXMuX3NvdXJjZXMuYXQobWFwcGluZy5zb3VyY2UpO1xuICAgICAgc291cmNlID0gdXRpbC5jb21wdXRlU291cmNlVVJMKHNvdXJjZVJvb3QsIHNvdXJjZSwgdGhpcy5fc291cmNlTWFwVVJMKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUsXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4sXG4gICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgIG9yaWdpbmFsQ29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLFxuICAgICAgICBuYW1lOiBtYXBwaW5nLm5hbWUgPT09IG51bGwgPyBudWxsIDogdGhpcy5fbmFtZXMuYXQobWFwcGluZy5uYW1lKVxuICAgICAgfTtcbiAgICB9LCB0aGlzKS5mb3JFYWNoKGFDYWxsYmFjaywgY29udGV4dCk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcHJvdmlkZWQuIElmIG5vIGNvbHVtbiBpcyBwcm92aWRlZCwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gYSBlaXRoZXIgdGhlIGxpbmUgd2UgYXJlIHNlYXJjaGluZyBmb3Igb3IgdGhlIG5leHRcbiAqIGNsb3Nlc3QgbGluZSB0aGF0IGhhcyBhbnkgbWFwcGluZ3MuIE90aGVyd2lzZSwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGxpbmUgYW5kIGVpdGhlciB0aGUgY29sdW1uIHdlIGFyZSBzZWFyY2hpbmcgZm9yXG4gKiBvciB0aGUgbmV4dCBjbG9zZXN0IGNvbHVtbiB0aGF0IGhhcyBhbnkgb2Zmc2V0cy5cbiAqXG4gKiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuICBUaGUgbGluZSBudW1iZXIgaXMgMS1iYXNlZC5cbiAqICAgLSBjb2x1bW46IE9wdGlvbmFsLiB0aGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAgVGhlIGNvbHVtbiBudW1iZXIgaXMgMC1iYXNlZC5cbiAqXG4gKiBhbmQgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpcyByZXR1cm5lZCwgZWFjaCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLiAgVGhlXG4gKiAgICBsaW5lIG51bWJlciBpcyAxLWJhc2VkLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgICBUaGUgY29sdW1uIG51bWJlciBpcyAwLWJhc2VkLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuYWxsR2VuZXJhdGVkUG9zaXRpb25zRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfYWxsR2VuZXJhdGVkUG9zaXRpb25zRm9yKGFBcmdzKSB7XG4gICAgdmFyIGxpbmUgPSB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKTtcblxuICAgIC8vIFdoZW4gdGhlcmUgaXMgbm8gZXhhY3QgbWF0Y2gsIEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9maW5kTWFwcGluZ1xuICAgIC8vIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBjbG9zZXN0IG1hcHBpbmcgbGVzcyB0aGFuIHRoZSBuZWVkbGUuIEJ5XG4gICAgLy8gc2V0dGluZyBuZWVkbGUub3JpZ2luYWxDb2x1bW4gdG8gMCwgd2UgdGh1cyBmaW5kIHRoZSBsYXN0IG1hcHBpbmcgZm9yXG4gICAgLy8gdGhlIGdpdmVuIGxpbmUsIHByb3ZpZGVkIHN1Y2ggYSBtYXBwaW5nIGV4aXN0cy5cbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgc291cmNlOiB1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScpLFxuICAgICAgb3JpZ2luYWxMaW5lOiBsaW5lLFxuICAgICAgb3JpZ2luYWxDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJywgMClcbiAgICB9O1xuXG4gICAgbmVlZGxlLnNvdXJjZSA9IHRoaXMuX2ZpbmRTb3VyY2VJbmRleChuZWVkbGUuc291cmNlKTtcbiAgICBpZiAobmVlZGxlLnNvdXJjZSA8IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICB2YXIgbWFwcGluZ3MgPSBbXTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKG5lZWRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwib3JpZ2luYWxMaW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbENvbHVtblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EKTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgaWYgKGFBcmdzLmNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbExpbmUgPSBtYXBwaW5nLm9yaWdpbmFsTGluZTtcblxuICAgICAgICAvLyBJdGVyYXRlIHVudGlsIGVpdGhlciB3ZSBydW4gb3V0IG9mIG1hcHBpbmdzLCBvciB3ZSBydW4gaW50b1xuICAgICAgICAvLyBhIG1hcHBpbmcgZm9yIGEgZGlmZmVyZW50IGxpbmUgdGhhbiB0aGUgb25lIHdlIGZvdW5kLiBTaW5jZVxuICAgICAgICAvLyBtYXBwaW5ncyBhcmUgc29ydGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gZmluZCBhbGwgbWFwcGluZ3MgZm9yXG4gICAgICAgIC8vIHRoZSBsaW5lIHdlIGZvdW5kLlxuICAgICAgICB3aGlsZSAobWFwcGluZyAmJiBtYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gb3JpZ2luYWxMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZ3MucHVzaCh7XG4gICAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgICBsYXN0Q29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbGFzdEdlbmVyYXRlZENvbHVtbicsIG51bGwpXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsQ29sdW1uID0gbWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICAvLyBJdGVyYXRlIHVudGlsIGVpdGhlciB3ZSBydW4gb3V0IG9mIG1hcHBpbmdzLCBvciB3ZSBydW4gaW50b1xuICAgICAgICAvLyBhIG1hcHBpbmcgZm9yIGEgZGlmZmVyZW50IGxpbmUgdGhhbiB0aGUgb25lIHdlIHdlcmUgc2VhcmNoaW5nIGZvci5cbiAgICAgICAgLy8gU2luY2UgbWFwcGluZ3MgYXJlIHNvcnRlZCwgdGhpcyBpcyBndWFyYW50ZWVkIHRvIGZpbmQgYWxsIG1hcHBpbmdzIGZvclxuICAgICAgICAvLyB0aGUgbGluZSB3ZSBhcmUgc2VhcmNoaW5nIGZvci5cbiAgICAgICAgd2hpbGUgKG1hcHBpbmcgJiZcbiAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBsaW5lICYmXG4gICAgICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID09IG9yaWdpbmFsQ29sdW1uKSB7XG4gICAgICAgICAgbWFwcGluZ3MucHVzaCh7XG4gICAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgICBsYXN0Q29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbGFzdEdlbmVyYXRlZENvbHVtbicsIG51bGwpXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXBwaW5ncztcbiAgfTtcblxuZXhwb3J0cy5Tb3VyY2VNYXBDb25zdW1lciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIEEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2ggd2UgY2FuXG4gKiBxdWVyeSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbmFsIGZpbGUgcG9zaXRpb25zIGJ5IGdpdmluZyBpdCBhIGZpbGVcbiAqIHBvc2l0aW9uIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICpcbiAqIFRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgdGhlIHJhdyBzb3VyY2UgbWFwIChlaXRoZXIgYXMgYSBKU09OIHN0cmluZywgb3JcbiAqIGFscmVhZHkgcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYywgc291cmNlIG1hcHMgaGF2ZSB0aGVcbiAqIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICpcbiAqICAgLSB2ZXJzaW9uOiBXaGljaCB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwIHNwZWMgdGhpcyBtYXAgaXMgZm9sbG93aW5nLlxuICogICAtIHNvdXJjZXM6IEFuIGFycmF5IG9mIFVSTHMgdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlcy5cbiAqICAgLSBuYW1lczogQW4gYXJyYXkgb2YgaWRlbnRpZmllcnMgd2hpY2ggY2FuIGJlIHJlZmVycmVuY2VkIGJ5IGluZGl2aWR1YWwgbWFwcGluZ3MuXG4gKiAgIC0gc291cmNlUm9vdDogT3B0aW9uYWwuIFRoZSBVUkwgcm9vdCBmcm9tIHdoaWNoIGFsbCBzb3VyY2VzIGFyZSByZWxhdGl2ZS5cbiAqICAgLSBzb3VyY2VzQ29udGVudDogT3B0aW9uYWwuIEFuIGFycmF5IG9mIGNvbnRlbnRzIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuXG4gKiAgIC0gbWFwcGluZ3M6IEEgc3RyaW5nIG9mIGJhc2U2NCBWTFFzIHdoaWNoIGNvbnRhaW4gdGhlIGFjdHVhbCBtYXBwaW5ncy5cbiAqICAgLSBmaWxlOiBPcHRpb25hbC4gVGhlIGdlbmVyYXRlZCBmaWxlIHRoaXMgc291cmNlIG1hcCBpcyBhc3NvY2lhdGVkIHdpdGguXG4gKlxuICogSGVyZSBpcyBhbiBleGFtcGxlIHNvdXJjZSBtYXAsIHRha2VuIGZyb20gdGhlIHNvdXJjZSBtYXAgc3BlY1swXTpcbiAqXG4gKiAgICAge1xuICogICAgICAgdmVyc2lvbiA6IDMsXG4gKiAgICAgICBmaWxlOiBcIm91dC5qc1wiLFxuICogICAgICAgc291cmNlUm9vdCA6IFwiXCIsXG4gKiAgICAgICBzb3VyY2VzOiBbXCJmb28uanNcIiwgXCJiYXIuanNcIl0sXG4gKiAgICAgICBuYW1lczogW1wic3JjXCIsIFwibWFwc1wiLCBcImFyZVwiLCBcImZ1blwiXSxcbiAqICAgICAgIG1hcHBpbmdzOiBcIkFBLEFCOztBQkNERTtcIlxuICogICAgIH1cbiAqXG4gKiBUaGUgc2Vjb25kIHBhcmFtZXRlciwgaWYgZ2l2ZW4sIGlzIGEgc3RyaW5nIHdob3NlIHZhbHVlIGlzIHRoZSBVUkxcbiAqIGF0IHdoaWNoIHRoZSBzb3VyY2UgbWFwIHdhcyBmb3VuZC4gIFRoaXMgVVJMIGlzIHVzZWQgdG8gY29tcHV0ZSB0aGVcbiAqIHNvdXJjZXMgYXJyYXkuXG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQ/cGxpPTEjXG4gKi9cbmZ1bmN0aW9uIEJhc2ljU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCwgYVNvdXJjZU1hcFVSTCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IHV0aWwucGFyc2VTb3VyY2VNYXBJbnB1dChhU291cmNlTWFwKTtcbiAgfVxuXG4gIHZhciB2ZXJzaW9uID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAndmVyc2lvbicpO1xuICB2YXIgc291cmNlcyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZXMnKTtcbiAgLy8gU2FzcyAzLjMgbGVhdmVzIG91dCB0aGUgJ25hbWVzJyBhcnJheSwgc28gd2UgZGV2aWF0ZSBmcm9tIHRoZSBzcGVjICh3aGljaFxuICAvLyByZXF1aXJlcyB0aGUgYXJyYXkpIHRvIHBsYXkgbmljZSBoZXJlLlxuICB2YXIgbmFtZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICduYW1lcycsIFtdKTtcbiAgdmFyIHNvdXJjZVJvb3QgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VSb290JywgbnVsbCk7XG4gIHZhciBzb3VyY2VzQ29udGVudCA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZXNDb250ZW50JywgbnVsbCk7XG4gIHZhciBtYXBwaW5ncyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ21hcHBpbmdzJyk7XG4gIHZhciBmaWxlID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnZmlsZScsIG51bGwpO1xuXG4gIC8vIE9uY2UgYWdhaW4sIFNhc3MgZGV2aWF0ZXMgZnJvbSB0aGUgc3BlYyBhbmQgc3VwcGxpZXMgdGhlIHZlcnNpb24gYXMgYVxuICAvLyBzdHJpbmcgcmF0aGVyIHRoYW4gYSBudW1iZXIsIHNvIHdlIHVzZSBsb29zZSBlcXVhbGl0eSBjaGVja2luZyBoZXJlLlxuICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gIH1cblxuICBpZiAoc291cmNlUm9vdCkge1xuICAgIHNvdXJjZVJvb3QgPSB1dGlsLm5vcm1hbGl6ZShzb3VyY2VSb290KTtcbiAgfVxuXG4gIHNvdXJjZXMgPSBzb3VyY2VzXG4gICAgLm1hcChTdHJpbmcpXG4gICAgLy8gU29tZSBzb3VyY2UgbWFwcyBwcm9kdWNlIHJlbGF0aXZlIHNvdXJjZSBwYXRocyBsaWtlIFwiLi9mb28uanNcIiBpbnN0ZWFkIG9mXG4gICAgLy8gXCJmb28uanNcIi4gIE5vcm1hbGl6ZSB0aGVzZSBmaXJzdCBzbyB0aGF0IGZ1dHVyZSBjb21wYXJpc29ucyB3aWxsIHN1Y2NlZWQuXG4gICAgLy8gU2VlIGJ1Z3ppbC5sYS8xMDkwNzY4LlxuICAgIC5tYXAodXRpbC5ub3JtYWxpemUpXG4gICAgLy8gQWx3YXlzIGVuc3VyZSB0aGF0IGFic29sdXRlIHNvdXJjZXMgYXJlIGludGVybmFsbHkgc3RvcmVkIHJlbGF0aXZlIHRvXG4gICAgLy8gdGhlIHNvdXJjZSByb290LCBpZiB0aGUgc291cmNlIHJvb3QgaXMgYWJzb2x1dGUuIE5vdCBkb2luZyB0aGlzIHdvdWxkXG4gICAgLy8gYmUgcGFydGljdWxhcmx5IHByb2JsZW1hdGljIHdoZW4gdGhlIHNvdXJjZSByb290IGlzIGEgcHJlZml4IG9mIHRoZVxuICAgIC8vIHNvdXJjZSAodmFsaWQsIGJ1dCB3aHk/PykuIFNlZSBnaXRodWIgaXNzdWUgIzE5OSBhbmQgYnVnemlsLmxhLzExODg5ODIuXG4gICAgLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICByZXR1cm4gc291cmNlUm9vdCAmJiB1dGlsLmlzQWJzb2x1dGUoc291cmNlUm9vdCkgJiYgdXRpbC5pc0Fic29sdXRlKHNvdXJjZSlcbiAgICAgICAgPyB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIHNvdXJjZSlcbiAgICAgICAgOiBzb3VyY2U7XG4gICAgfSk7XG5cbiAgLy8gUGFzcyBgdHJ1ZWAgYmVsb3cgdG8gYWxsb3cgZHVwbGljYXRlIG5hbWVzIGFuZCBzb3VyY2VzLiBXaGlsZSBzb3VyY2UgbWFwc1xuICAvLyBhcmUgaW50ZW5kZWQgdG8gYmUgY29tcHJlc3NlZCBhbmQgZGVkdXBsaWNhdGVkLCB0aGUgVHlwZVNjcmlwdCBjb21waWxlclxuICAvLyBzb21ldGltZXMgZ2VuZXJhdGVzIHNvdXJjZSBtYXBzIHdpdGggZHVwbGljYXRlcyBpbiB0aGVtLiBTZWUgR2l0aHViIGlzc3VlXG4gIC8vICM3MiBhbmQgYnVnemlsLmxhLzg4OTQ5Mi5cbiAgdGhpcy5fbmFtZXMgPSBBcnJheVNldC5mcm9tQXJyYXkobmFtZXMubWFwKFN0cmluZyksIHRydWUpO1xuICB0aGlzLl9zb3VyY2VzID0gQXJyYXlTZXQuZnJvbUFycmF5KHNvdXJjZXMsIHRydWUpO1xuXG4gIHRoaXMuX2Fic29sdXRlU291cmNlcyA9IHRoaXMuX3NvdXJjZXMudG9BcnJheSgpLm1hcChmdW5jdGlvbiAocykge1xuICAgIHJldHVybiB1dGlsLmNvbXB1dGVTb3VyY2VVUkwoc291cmNlUm9vdCwgcywgYVNvdXJjZU1hcFVSTCk7XG4gIH0pO1xuXG4gIHRoaXMuc291cmNlUm9vdCA9IHNvdXJjZVJvb3Q7XG4gIHRoaXMuc291cmNlc0NvbnRlbnQgPSBzb3VyY2VzQ29udGVudDtcbiAgdGhpcy5fbWFwcGluZ3MgPSBtYXBwaW5ncztcbiAgdGhpcy5fc291cmNlTWFwVVJMID0gYVNvdXJjZU1hcFVSTDtcbiAgdGhpcy5maWxlID0gZmlsZTtcbn1cblxuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSk7XG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdW1lciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gZmluZCB0aGUgaW5kZXggb2YgYSBzb3VyY2UuICBSZXR1cm5zIC0xIGlmIG5vdFxuICogZm91bmQuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9maW5kU291cmNlSW5kZXggPSBmdW5jdGlvbihhU291cmNlKSB7XG4gIHZhciByZWxhdGl2ZVNvdXJjZSA9IGFTb3VyY2U7XG4gIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgIHJlbGF0aXZlU291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIHJlbGF0aXZlU291cmNlKTtcbiAgfVxuXG4gIGlmICh0aGlzLl9zb3VyY2VzLmhhcyhyZWxhdGl2ZVNvdXJjZSkpIHtcbiAgICByZXR1cm4gdGhpcy5fc291cmNlcy5pbmRleE9mKHJlbGF0aXZlU291cmNlKTtcbiAgfVxuXG4gIC8vIE1heWJlIGFTb3VyY2UgaXMgYW4gYWJzb2x1dGUgVVJMIGFzIHJldHVybmVkIGJ5IHxzb3VyY2VzfC4gIEluXG4gIC8vIHRoaXMgY2FzZSB3ZSBjYW4ndCBzaW1wbHkgdW5kbyB0aGUgdHJhbnNmb3JtLlxuICB2YXIgaTtcbiAgZm9yIChpID0gMDsgaSA8IHRoaXMuX2Fic29sdXRlU291cmNlcy5sZW5ndGg7ICsraSkge1xuICAgIGlmICh0aGlzLl9hYnNvbHV0ZVNvdXJjZXNbaV0gPT0gYVNvdXJjZSkge1xuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGZyb20gYSBTb3VyY2VNYXBHZW5lcmF0b3IuXG4gKlxuICogQHBhcmFtIFNvdXJjZU1hcEdlbmVyYXRvciBhU291cmNlTWFwXG4gKiAgICAgICAgVGhlIHNvdXJjZSBtYXAgdGhhdCB3aWxsIGJlIGNvbnN1bWVkLlxuICogQHBhcmFtIFN0cmluZyBhU291cmNlTWFwVVJMXG4gKiAgICAgICAgVGhlIFVSTCBhdCB3aGljaCB0aGUgc291cmNlIG1hcCBjYW4gYmUgZm91bmQgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQmFzaWNTb3VyY2VNYXBDb25zdW1lclxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9mcm9tU291cmNlTWFwKGFTb3VyY2VNYXAsIGFTb3VyY2VNYXBVUkwpIHtcbiAgICB2YXIgc21jID0gT2JqZWN0LmNyZWF0ZShCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSk7XG5cbiAgICB2YXIgbmFtZXMgPSBzbWMuX25hbWVzID0gQXJyYXlTZXQuZnJvbUFycmF5KGFTb3VyY2VNYXAuX25hbWVzLnRvQXJyYXkoKSwgdHJ1ZSk7XG4gICAgdmFyIHNvdXJjZXMgPSBzbWMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoYVNvdXJjZU1hcC5fc291cmNlcy50b0FycmF5KCksIHRydWUpO1xuICAgIHNtYy5zb3VyY2VSb290ID0gYVNvdXJjZU1hcC5fc291cmNlUm9vdDtcbiAgICBzbWMuc291cmNlc0NvbnRlbnQgPSBhU291cmNlTWFwLl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50KHNtYy5fc291cmNlcy50b0FycmF5KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWMuc291cmNlUm9vdCk7XG4gICAgc21jLmZpbGUgPSBhU291cmNlTWFwLl9maWxlO1xuICAgIHNtYy5fc291cmNlTWFwVVJMID0gYVNvdXJjZU1hcFVSTDtcbiAgICBzbWMuX2Fic29sdXRlU291cmNlcyA9IHNtYy5fc291cmNlcy50b0FycmF5KCkubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgICByZXR1cm4gdXRpbC5jb21wdXRlU291cmNlVVJMKHNtYy5zb3VyY2VSb290LCBzLCBhU291cmNlTWFwVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIEJlY2F1c2Ugd2UgYXJlIG1vZGlmeWluZyB0aGUgZW50cmllcyAoYnkgY29udmVydGluZyBzdHJpbmcgc291cmNlcyBhbmRcbiAgICAvLyBuYW1lcyB0byBpbmRpY2VzIGludG8gdGhlIHNvdXJjZXMgYW5kIG5hbWVzIEFycmF5U2V0cyksIHdlIGhhdmUgdG8gbWFrZVxuICAgIC8vIGEgY29weSBvZiB0aGUgZW50cnkgb3IgZWxzZSBiYWQgdGhpbmdzIGhhcHBlbi4gU2hhcmVkIG11dGFibGUgc3RhdGVcbiAgICAvLyBzdHJpa2VzIGFnYWluISBTZWUgZ2l0aHViIGlzc3VlICMxOTEuXG5cbiAgICB2YXIgZ2VuZXJhdGVkTWFwcGluZ3MgPSBhU291cmNlTWFwLl9tYXBwaW5ncy50b0FycmF5KCkuc2xpY2UoKTtcbiAgICB2YXIgZGVzdEdlbmVyYXRlZE1hcHBpbmdzID0gc21jLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgZGVzdE9yaWdpbmFsTWFwcGluZ3MgPSBzbWMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzcmNNYXBwaW5nID0gZ2VuZXJhdGVkTWFwcGluZ3NbaV07XG4gICAgICB2YXIgZGVzdE1hcHBpbmcgPSBuZXcgTWFwcGluZztcbiAgICAgIGRlc3RNYXBwaW5nLmdlbmVyYXRlZExpbmUgPSBzcmNNYXBwaW5nLmdlbmVyYXRlZExpbmU7XG4gICAgICBkZXN0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gPSBzcmNNYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgaWYgKHNyY01hcHBpbmcuc291cmNlKSB7XG4gICAgICAgIGRlc3RNYXBwaW5nLnNvdXJjZSA9IHNvdXJjZXMuaW5kZXhPZihzcmNNYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIGRlc3RNYXBwaW5nLm9yaWdpbmFsTGluZSA9IHNyY01hcHBpbmcub3JpZ2luYWxMaW5lO1xuICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHNyY01hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgaWYgKHNyY01hcHBpbmcubmFtZSkge1xuICAgICAgICAgIGRlc3RNYXBwaW5nLm5hbWUgPSBuYW1lcy5pbmRleE9mKHNyY01hcHBpbmcubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBkZXN0T3JpZ2luYWxNYXBwaW5ncy5wdXNoKGRlc3RNYXBwaW5nKTtcbiAgICAgIH1cblxuICAgICAgZGVzdEdlbmVyYXRlZE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgIH1cblxuICAgIHF1aWNrU29ydChzbWMuX19vcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcblxuICAgIHJldHVybiBzbWM7XG4gIH07XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Fic29sdXRlU291cmNlcy5zbGljZSgpO1xuICB9XG59KTtcblxuLyoqXG4gKiBQcm92aWRlIHRoZSBKSVQgd2l0aCBhIG5pY2Ugc2hhcGUgLyBoaWRkZW4gY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIE1hcHBpbmcoKSB7XG4gIHRoaXMuZ2VuZXJhdGVkTGluZSA9IDA7XG4gIHRoaXMuZ2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgdGhpcy5zb3VyY2UgPSBudWxsO1xuICB0aGlzLm9yaWdpbmFsTGluZSA9IG51bGw7XG4gIHRoaXMub3JpZ2luYWxDb2x1bW4gPSBudWxsO1xuICB0aGlzLm5hbWUgPSBudWxsO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdmFyIGdlbmVyYXRlZExpbmUgPSAxO1xuICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzU291cmNlID0gMDtcbiAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYVN0ci5sZW5ndGg7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY2FjaGVkU2VnbWVudHMgPSB7fTtcbiAgICB2YXIgdGVtcCA9IHt9O1xuICAgIHZhciBvcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgdmFyIGdlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdmFyIG1hcHBpbmcsIHN0ciwgc2VnbWVudCwgZW5kLCB2YWx1ZTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJzsnKSB7XG4gICAgICAgIGdlbmVyYXRlZExpbmUrKztcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoYVN0ci5jaGFyQXQoaW5kZXgpID09PSAnLCcpIHtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBtYXBwaW5nID0gbmV3IE1hcHBpbmcoKTtcbiAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRMaW5lID0gZ2VuZXJhdGVkTGluZTtcblxuICAgICAgICAvLyBCZWNhdXNlIGVhY2ggb2Zmc2V0IGlzIGVuY29kZWQgcmVsYXRpdmUgdG8gdGhlIHByZXZpb3VzIG9uZSxcbiAgICAgICAgLy8gbWFueSBzZWdtZW50cyBvZnRlbiBoYXZlIHRoZSBzYW1lIGVuY29kaW5nLiBXZSBjYW4gZXhwbG9pdCB0aGlzXG4gICAgICAgIC8vIGZhY3QgYnkgY2FjaGluZyB0aGUgcGFyc2VkIHZhcmlhYmxlIGxlbmd0aCBmaWVsZHMgb2YgZWFjaCBzZWdtZW50LFxuICAgICAgICAvLyBhbGxvd2luZyB1cyB0byBhdm9pZCBhIHNlY29uZCBwYXJzZSBpZiB3ZSBlbmNvdW50ZXIgdGhlIHNhbWVcbiAgICAgICAgLy8gc2VnbWVudCBhZ2Fpbi5cbiAgICAgICAgZm9yIChlbmQgPSBpbmRleDsgZW5kIDwgbGVuZ3RoOyBlbmQrKykge1xuICAgICAgICAgIGlmICh0aGlzLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yKGFTdHIsIGVuZCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdHIgPSBhU3RyLnNsaWNlKGluZGV4LCBlbmQpO1xuXG4gICAgICAgIHNlZ21lbnQgPSBjYWNoZWRTZWdtZW50c1tzdHJdO1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgIGluZGV4ICs9IHN0ci5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VnbWVudCA9IFtdO1xuICAgICAgICAgIHdoaWxlIChpbmRleCA8IGVuZCkge1xuICAgICAgICAgICAgYmFzZTY0VkxRLmRlY29kZShhU3RyLCBpbmRleCwgdGVtcCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHRlbXAudmFsdWU7XG4gICAgICAgICAgICBpbmRleCA9IHRlbXAucmVzdDtcbiAgICAgICAgICAgIHNlZ21lbnQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlLCBidXQgbm8gbGluZSBhbmQgY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlIGFuZCBsaW5lLCBidXQgbm8gY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FjaGVkU2VnbWVudHNbc3RyXSA9IHNlZ21lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZW5lcmF0ZWQgY29sdW1uLlxuICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiA9IHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uICsgc2VnbWVudFswXTtcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgLy8gT3JpZ2luYWwgc291cmNlLlxuICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gcHJldmlvdXNTb3VyY2UgKyBzZWdtZW50WzFdO1xuICAgICAgICAgIHByZXZpb3VzU291cmNlICs9IHNlZ21lbnRbMV07XG5cbiAgICAgICAgICAvLyBPcmlnaW5hbCBsaW5lLlxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID0gcHJldmlvdXNPcmlnaW5hbExpbmUgKyBzZWdtZW50WzJdO1xuICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmU7XG4gICAgICAgICAgLy8gTGluZXMgYXJlIHN0b3JlZCAwLWJhc2VkXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgKz0gMTtcblxuICAgICAgICAgIC8vIE9yaWdpbmFsIGNvbHVtbi5cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gcHJldmlvdXNPcmlnaW5hbENvbHVtbiArIHNlZ21lbnRbM107XG4gICAgICAgICAgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IG1hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiA0KSB7XG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBuYW1lLlxuICAgICAgICAgICAgbWFwcGluZy5uYW1lID0gcHJldmlvdXNOYW1lICsgc2VnbWVudFs0XTtcbiAgICAgICAgICAgIHByZXZpb3VzTmFtZSArPSBzZWdtZW50WzRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdlbmVyYXRlZE1hcHBpbmdzLnB1c2gobWFwcGluZyk7XG4gICAgICAgIGlmICh0eXBlb2YgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3JpZ2luYWxNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KGdlbmVyYXRlZE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKTtcbiAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBnZW5lcmF0ZWRNYXBwaW5ncztcblxuICAgIHF1aWNrU29ydChvcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcbiAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IG9yaWdpbmFsTWFwcGluZ3M7XG4gIH07XG5cbi8qKlxuICogRmluZCB0aGUgbWFwcGluZyB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgaHlwb3RoZXRpY2FsIFwibmVlZGxlXCIgbWFwcGluZyB0aGF0XG4gKiB3ZSBhcmUgc2VhcmNoaW5nIGZvciBpbiB0aGUgZ2l2ZW4gXCJoYXlzdGFja1wiIG9mIG1hcHBpbmdzLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fZmluZE1hcHBpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9maW5kTWFwcGluZyhhTmVlZGxlLCBhTWFwcGluZ3MsIGFMaW5lTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbHVtbk5hbWUsIGFDb21wYXJhdG9yLCBhQmlhcykge1xuICAgIC8vIFRvIHJldHVybiB0aGUgcG9zaXRpb24gd2UgYXJlIHNlYXJjaGluZyBmb3IsIHdlIG11c3QgZmlyc3QgZmluZCB0aGVcbiAgICAvLyBtYXBwaW5nIGZvciB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHRoZW4gcmV0dXJuIHRoZSBvcHBvc2l0ZSBwb3NpdGlvbiBpdFxuICAgIC8vIHBvaW50cyB0by4gQmVjYXVzZSB0aGUgbWFwcGluZ3MgYXJlIHNvcnRlZCwgd2UgY2FuIHVzZSBiaW5hcnkgc2VhcmNoIHRvXG4gICAgLy8gZmluZCB0aGUgYmVzdCBtYXBwaW5nLlxuXG4gICAgaWYgKGFOZWVkbGVbYUxpbmVOYW1lXSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdMaW5lIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthTGluZU5hbWVdKTtcbiAgICB9XG4gICAgaWYgKGFOZWVkbGVbYUNvbHVtbk5hbWVdIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29sdW1uIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthQ29sdW1uTmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBiaW5hcnlTZWFyY2guc2VhcmNoKGFOZWVkbGUsIGFNYXBwaW5ncywgYUNvbXBhcmF0b3IsIGFCaWFzKTtcbiAgfTtcblxuLyoqXG4gKiBDb21wdXRlIHRoZSBsYXN0IGNvbHVtbiBmb3IgZWFjaCBnZW5lcmF0ZWQgbWFwcGluZy4gVGhlIGxhc3QgY29sdW1uIGlzXG4gKiBpbmNsdXNpdmUuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbXB1dGVDb2x1bW5TcGFucyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NvbXB1dGVDb2x1bW5TcGFucygpIHtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyArK2luZGV4KSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgLy8gTWFwcGluZ3MgZG8gbm90IGNvbnRhaW4gYSBmaWVsZCBmb3IgdGhlIGxhc3QgZ2VuZXJhdGVkIGNvbHVtbnQuIFdlXG4gICAgICAvLyBjYW4gY29tZSB1cCB3aXRoIGFuIG9wdGltaXN0aWMgZXN0aW1hdGUsIGhvd2V2ZXIsIGJ5IGFzc3VtaW5nIHRoYXRcbiAgICAgIC8vIG1hcHBpbmdzIGFyZSBjb250aWd1b3VzIChpLmUuIGdpdmVuIHR3byBjb25zZWN1dGl2ZSBtYXBwaW5ncywgdGhlXG4gICAgICAvLyBmaXJzdCBtYXBwaW5nIGVuZHMgd2hlcmUgdGhlIHNlY29uZCBvbmUgc3RhcnRzKS5cbiAgICAgIGlmIChpbmRleCArIDEgPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIG5leHRNYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXggKyAxXTtcblxuICAgICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gbmV4dE1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC0gMTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgbGFzdCBtYXBwaW5nIGZvciBlYWNoIGxpbmUgc3BhbnMgdGhlIGVudGlyZSBsaW5lLlxuICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gSW5maW5pdHk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLiAgVGhlIGxpbmUgbnVtYmVyXG4gKiAgICAgaXMgMS1iYXNlZC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLiAgVGhlIGNvbHVtblxuICogICAgIG51bWJlciBpcyAwLWJhc2VkLlxuICogICAtIGJpYXM6IEVpdGhlciAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLCBvciBudWxsLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLiAgVGhlXG4gKiAgICAgbGluZSBudW1iZXIgaXMgMS1iYXNlZC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuICBUaGVcbiAqICAgICBjb2x1bW4gbnVtYmVyIGlzIDAtYmFzZWQuXG4gKiAgIC0gbmFtZTogVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIsIG9yIG51bGwuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLm9yaWdpbmFsUG9zaXRpb25Gb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9vcmlnaW5hbFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIGdlbmVyYXRlZExpbmU6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpLFxuICAgICAgZ2VuZXJhdGVkQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKFxuICAgICAgbmVlZGxlLFxuICAgICAgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MsXG4gICAgICBcImdlbmVyYXRlZExpbmVcIixcbiAgICAgIFwiZ2VuZXJhdGVkQ29sdW1uXCIsXG4gICAgICB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkLFxuICAgICAgdXRpbC5nZXRBcmcoYUFyZ3MsICdiaWFzJywgU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQpXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgaWYgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSA9PT0gbmVlZGxlLmdlbmVyYXRlZExpbmUpIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdzb3VyY2UnLCBudWxsKTtcbiAgICAgICAgaWYgKHNvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuYXQoc291cmNlKTtcbiAgICAgICAgICBzb3VyY2UgPSB1dGlsLmNvbXB1dGVTb3VyY2VVUkwodGhpcy5zb3VyY2VSb290LCBzb3VyY2UsIHRoaXMuX3NvdXJjZU1hcFVSTCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5hbWUgPSB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbmFtZScsIG51bGwpO1xuICAgICAgICBpZiAobmFtZSAhPT0gbnVsbCkge1xuICAgICAgICAgIG5hbWUgPSB0aGlzLl9uYW1lcy5hdChuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdvcmlnaW5hbExpbmUnLCBudWxsKSxcbiAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdvcmlnaW5hbENvbHVtbicsIG51bGwpLFxuICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc291cmNlOiBudWxsLFxuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgIG5hbWU6IG51bGxcbiAgICB9O1xuICB9O1xuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHdlIGhhdmUgdGhlIHNvdXJjZSBjb250ZW50IGZvciBldmVyeSBzb3VyY2UgaW4gdGhlIHNvdXJjZVxuICogbWFwLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzID1cbiAgZnVuY3Rpb24gQmFzaWNTb3VyY2VNYXBDb25zdW1lcl9oYXNDb250ZW50c09mQWxsU291cmNlcygpIHtcbiAgICBpZiAoIXRoaXMuc291cmNlc0NvbnRlbnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnQubGVuZ3RoID49IHRoaXMuX3NvdXJjZXMuc2l6ZSgpICYmXG4gICAgICAhdGhpcy5zb3VyY2VzQ29udGVudC5zb21lKGZ1bmN0aW9uIChzYykgeyByZXR1cm4gc2MgPT0gbnVsbDsgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlIGNvbnRlbnQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIHRoZSB1cmwgb2YgdGhlXG4gKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gKiBhdmFpbGFibGUuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIG51bGxPbk1pc3NpbmcpIHtcbiAgICBpZiAoIXRoaXMuc291cmNlc0NvbnRlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRTb3VyY2VJbmRleChhU291cmNlKTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbaW5kZXhdO1xuICAgIH1cblxuICAgIHZhciByZWxhdGl2ZVNvdXJjZSA9IGFTb3VyY2U7XG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICByZWxhdGl2ZVNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5zb3VyY2VSb290LCByZWxhdGl2ZVNvdXJjZSk7XG4gICAgfVxuXG4gICAgdmFyIHVybDtcbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGxcbiAgICAgICAgJiYgKHVybCA9IHV0aWwudXJsUGFyc2UodGhpcy5zb3VyY2VSb290KSkpIHtcbiAgICAgIC8vIFhYWDogZmlsZTovLyBVUklzIGFuZCBhYnNvbHV0ZSBwYXRocyBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZm9yXG4gICAgICAvLyBtYW55IHVzZXJzLiBXZSBjYW4gaGVscCB0aGVtIG91dCB3aGVuIHRoZXkgZXhwZWN0IGZpbGU6Ly8gVVJJcyB0b1xuICAgICAgLy8gYmVoYXZlIGxpa2UgaXQgd291bGQgaWYgdGhleSB3ZXJlIHJ1bm5pbmcgYSBsb2NhbCBIVFRQIHNlcnZlci4gU2VlXG4gICAgICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD04ODU1OTcuXG4gICAgICB2YXIgZmlsZVVyaUFic1BhdGggPSByZWxhdGl2ZVNvdXJjZS5yZXBsYWNlKC9eZmlsZTpcXC9cXC8vLCBcIlwiKTtcbiAgICAgIGlmICh1cmwuc2NoZW1lID09IFwiZmlsZVwiXG4gICAgICAgICAgJiYgdGhpcy5fc291cmNlcy5oYXMoZmlsZVVyaUFic1BhdGgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihmaWxlVXJpQWJzUGF0aCldXG4gICAgICB9XG5cbiAgICAgIGlmICgoIXVybC5wYXRoIHx8IHVybC5wYXRoID09IFwiL1wiKVxuICAgICAgICAgICYmIHRoaXMuX3NvdXJjZXMuaGFzKFwiL1wiICsgcmVsYXRpdmVTb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihcIi9cIiArIHJlbGF0aXZlU291cmNlKV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHJlY3Vyc2l2ZWx5IGZyb21cbiAgICAvLyBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3IuIEluIHRoYXQgY2FzZSwgd2VcbiAgICAvLyBkb24ndCB3YW50IHRvIHRocm93IGlmIHdlIGNhbid0IGZpbmQgdGhlIHNvdXJjZSAtIHdlIGp1c3Qgd2FudCB0b1xuICAgIC8vIHJldHVybiBudWxsLCBzbyB3ZSBwcm92aWRlIGEgZmxhZyB0byBleGl0IGdyYWNlZnVsbHkuXG4gICAgaWYgKG51bGxPbk1pc3NpbmcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignXCInICsgcmVsYXRpdmVTb3VyY2UgKyAnXCIgaXMgbm90IGluIHRoZSBTb3VyY2VNYXAuJyk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBvcmlnaW5hbCBzb3VyY2UsXG4gKiBsaW5lLCBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0IHdpdGhcbiAqIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS4gIFRoZSBsaW5lIG51bWJlclxuICogICAgIGlzIDEtYmFzZWQuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLiAgVGhlIGNvbHVtblxuICogICAgIG51bWJlciBpcyAwLWJhc2VkLlxuICogICAtIGJpYXM6IEVpdGhlciAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC4gIFRoZVxuICogICAgIGxpbmUgbnVtYmVyIGlzIDEtYmFzZWQuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgICBUaGUgY29sdW1uIG51bWJlciBpcyAwLWJhc2VkLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyk7XG4gICAgc291cmNlID0gdGhpcy5fZmluZFNvdXJjZUluZGV4KHNvdXJjZSk7XG4gICAgaWYgKHNvdXJjZSA8IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxpbmU6IG51bGwsXG4gICAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgICAgbGFzdENvbHVtbjogbnVsbFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICBvcmlnaW5hbExpbmU6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpLFxuICAgICAgb3JpZ2luYWxDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcoXG4gICAgICBuZWVkbGUsXG4gICAgICB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzLFxuICAgICAgXCJvcmlnaW5hbExpbmVcIixcbiAgICAgIFwib3JpZ2luYWxDb2x1bW5cIixcbiAgICAgIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMsXG4gICAgICB1dGlsLmdldEFyZyhhQXJncywgJ2JpYXMnLCBTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORClcbiAgICApO1xuXG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSA9PT0gbmVlZGxlLnNvdXJjZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgbGFzdENvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2xhc3RHZW5lcmF0ZWRDb2x1bW4nLCBudWxsKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgbGFzdENvbHVtbjogbnVsbFxuICAgIH07XG4gIH07XG5cbmV4cG9ydHMuQmFzaWNTb3VyY2VNYXBDb25zdW1lciA9IEJhc2ljU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQW4gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwYXJzZWQgc291cmNlIG1hcCB3aGljaFxuICogd2UgY2FuIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbi4gSXQgZGlmZmVycyBmcm9tIEJhc2ljU291cmNlTWFwQ29uc3VtZXIgaW5cbiAqIHRoYXQgaXQgdGFrZXMgXCJpbmRleGVkXCIgc291cmNlIG1hcHMgKGkuZS4gb25lcyB3aXRoIGEgXCJzZWN0aW9uc1wiIGZpZWxkKSBhc1xuICogaW5wdXQuXG4gKlxuICogVGhlIGZpcnN0IHBhcmFtZXRlciBpcyBhIHJhdyBzb3VyY2UgbWFwIChlaXRoZXIgYXMgYSBKU09OIHN0cmluZywgb3IgYWxyZWFkeVxuICogcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYyBmb3IgaW5kZXhlZCBzb3VyY2UgbWFwcywgdGhleVxuICogaGF2ZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKlxuICogICAtIHZlcnNpb246IFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICogICAtIHNlY3Rpb25zOiBBIGxpc3Qgb2Ygc2VjdGlvbiBkZWZpbml0aW9ucy5cbiAqXG4gKiBFYWNoIHZhbHVlIHVuZGVyIHRoZSBcInNlY3Rpb25zXCIgZmllbGQgaGFzIHR3byBmaWVsZHM6XG4gKiAgIC0gb2Zmc2V0OiBUaGUgb2Zmc2V0IGludG8gdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBhdCB3aGljaCB0aGlzIHNlY3Rpb25cbiAqICAgICAgIGJlZ2lucyB0byBhcHBseSwgZGVmaW5lZCBhcyBhbiBvYmplY3Qgd2l0aCBhIFwibGluZVwiIGFuZCBcImNvbHVtblwiXG4gKiAgICAgICBmaWVsZC5cbiAqICAgLSBtYXA6IEEgc291cmNlIG1hcCBkZWZpbml0aW9uLiBUaGlzIHNvdXJjZSBtYXAgY291bGQgYWxzbyBiZSBpbmRleGVkLFxuICogICAgICAgYnV0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbiAqXG4gKiBJbnN0ZWFkIG9mIHRoZSBcIm1hcFwiIGZpZWxkLCBpdCdzIGFsc28gcG9zc2libGUgdG8gaGF2ZSBhIFwidXJsXCIgZmllbGRcbiAqIHNwZWNpZnlpbmcgYSBVUkwgdG8gcmV0cmlldmUgYSBzb3VyY2UgbWFwIGZyb20sIGJ1dCB0aGF0J3MgY3VycmVudGx5XG4gKiB1bnN1cHBvcnRlZC5cbiAqXG4gKiBIZXJlJ3MgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF0sIGJ1dFxuICogbW9kaWZpZWQgdG8gb21pdCBhIHNlY3Rpb24gd2hpY2ggdXNlcyB0aGUgXCJ1cmxcIiBmaWVsZC5cbiAqXG4gKiAge1xuICogICAgdmVyc2lvbiA6IDMsXG4gKiAgICBmaWxlOiBcImFwcC5qc1wiLFxuICogICAgc2VjdGlvbnM6IFt7XG4gKiAgICAgIG9mZnNldDoge2xpbmU6MTAwLCBjb2x1bW46MTB9LFxuICogICAgICBtYXA6IHtcbiAqICAgICAgICB2ZXJzaW9uIDogMyxcbiAqICAgICAgICBmaWxlOiBcInNlY3Rpb24uanNcIixcbiAqICAgICAgICBzb3VyY2VzOiBbXCJmb28uanNcIiwgXCJiYXIuanNcIl0sXG4gKiAgICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICAgbWFwcGluZ3M6IFwiQUFBQSxFOztBQkNERTtcIlxuICogICAgICB9XG4gKiAgICB9XSxcbiAqICB9XG4gKlxuICogVGhlIHNlY29uZCBwYXJhbWV0ZXIsIGlmIGdpdmVuLCBpcyBhIHN0cmluZyB3aG9zZSB2YWx1ZSBpcyB0aGUgVVJMXG4gKiBhdCB3aGljaCB0aGUgc291cmNlIG1hcCB3YXMgZm91bmQuICBUaGlzIFVSTCBpcyB1c2VkIHRvIGNvbXB1dGUgdGhlXG4gKiBzb3VyY2VzIGFycmF5LlxuICpcbiAqIFswXTogaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZG9jdW1lbnQvZC8xVTFSR0FlaFF3UnlwVVRvdkYxS1JscGlPRnplMGItXzJnYzZmQUgwS1kway9lZGl0I2hlYWRpbmc9aC41MzVlczN4ZXByZ3RcbiAqL1xuZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXAsIGFTb3VyY2VNYXBVUkwpIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSB1dGlsLnBhcnNlU291cmNlTWFwSW5wdXQoYVNvdXJjZU1hcCk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNlY3Rpb25zID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc2VjdGlvbnMnKTtcblxuICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gIH1cblxuICB0aGlzLl9zb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gIHRoaXMuX25hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgdmFyIGxhc3RPZmZzZXQgPSB7XG4gICAgbGluZTogLTEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHRoaXMuX3NlY3Rpb25zID0gc2VjdGlvbnMubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgaWYgKHMudXJsKSB7XG4gICAgICAvLyBUaGUgdXJsIGZpZWxkIHdpbGwgcmVxdWlyZSBzdXBwb3J0IGZvciBhc3luY2hyb25pY2l0eS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8xNlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciB1cmwgZmllbGQgaW4gc2VjdGlvbnMgbm90IGltcGxlbWVudGVkLicpO1xuICAgIH1cbiAgICB2YXIgb2Zmc2V0ID0gdXRpbC5nZXRBcmcocywgJ29mZnNldCcpO1xuICAgIHZhciBvZmZzZXRMaW5lID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnbGluZScpO1xuICAgIHZhciBvZmZzZXRDb2x1bW4gPSB1dGlsLmdldEFyZyhvZmZzZXQsICdjb2x1bW4nKTtcblxuICAgIGlmIChvZmZzZXRMaW5lIDwgbGFzdE9mZnNldC5saW5lIHx8XG4gICAgICAgIChvZmZzZXRMaW5lID09PSBsYXN0T2Zmc2V0LmxpbmUgJiYgb2Zmc2V0Q29sdW1uIDwgbGFzdE9mZnNldC5jb2x1bW4pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlY3Rpb24gb2Zmc2V0cyBtdXN0IGJlIG9yZGVyZWQgYW5kIG5vbi1vdmVybGFwcGluZy4nKTtcbiAgICB9XG4gICAgbGFzdE9mZnNldCA9IG9mZnNldDtcblxuICAgIHJldHVybiB7XG4gICAgICBnZW5lcmF0ZWRPZmZzZXQ6IHtcbiAgICAgICAgLy8gVGhlIG9mZnNldCBmaWVsZHMgYXJlIDAtYmFzZWQsIGJ1dCB3ZSB1c2UgMS1iYXNlZCBpbmRpY2VzIHdoZW5cbiAgICAgICAgLy8gZW5jb2RpbmcvZGVjb2RpbmcgZnJvbSBWTFEuXG4gICAgICAgIGdlbmVyYXRlZExpbmU6IG9mZnNldExpbmUgKyAxLFxuICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG9mZnNldENvbHVtbiArIDFcbiAgICAgIH0sXG4gICAgICBjb25zdW1lcjogbmV3IFNvdXJjZU1hcENvbnN1bWVyKHV0aWwuZ2V0QXJnKHMsICdtYXAnKSwgYVNvdXJjZU1hcFVSTClcbiAgICB9XG4gIH0pO1xufVxuXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdzb3VyY2VzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBzb3VyY2VzLnB1c2godGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlc1tqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2VzO1xuICB9XG59KTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UsIGxpbmUsIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS4gIFRoZSBsaW5lIG51bWJlclxuICogICAgIGlzIDEtYmFzZWQuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS4gIFRoZSBjb2x1bW5cbiAqICAgICBudW1iZXIgaXMgMC1iYXNlZC5cbiAqXG4gKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSwgb3IgbnVsbC5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC4gIFRoZVxuICogICAgIGxpbmUgbnVtYmVyIGlzIDEtYmFzZWQuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLiAgVGhlXG4gKiAgICAgY29sdW1uIG51bWJlciBpcyAwLWJhc2VkLlxuICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLm9yaWdpbmFsUG9zaXRpb25Gb3IgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICAvLyBGaW5kIHRoZSBzZWN0aW9uIGNvbnRhaW5pbmcgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbiB3ZSdyZSB0cnlpbmcgdG8gbWFwXG4gICAgLy8gdG8gYW4gb3JpZ2luYWwgcG9zaXRpb24uXG4gICAgdmFyIHNlY3Rpb25JbmRleCA9IGJpbmFyeVNlYXJjaC5zZWFyY2gobmVlZGxlLCB0aGlzLl9zZWN0aW9ucyxcbiAgICAgIGZ1bmN0aW9uKG5lZWRsZSwgc2VjdGlvbikge1xuICAgICAgICB2YXIgY21wID0gbmVlZGxlLmdlbmVyYXRlZExpbmUgLSBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lO1xuICAgICAgICBpZiAoY21wKSB7XG4gICAgICAgICAgcmV0dXJuIGNtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAobmVlZGxlLmdlbmVyYXRlZENvbHVtbiAtXG4gICAgICAgICAgICAgICAgc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uKTtcbiAgICAgIH0pO1xuICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbc2VjdGlvbkluZGV4XTtcblxuICAgIGlmICghc2VjdGlvbikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc291cmNlOiBudWxsLFxuICAgICAgICBsaW5lOiBudWxsLFxuICAgICAgICBjb2x1bW46IG51bGwsXG4gICAgICAgIG5hbWU6IG51bGxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlY3Rpb24uY29uc3VtZXIub3JpZ2luYWxQb3NpdGlvbkZvcih7XG4gICAgICBsaW5lOiBuZWVkbGUuZ2VuZXJhdGVkTGluZSAtXG4gICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICBjb2x1bW46IG5lZWRsZS5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gbmVlZGxlLmdlbmVyYXRlZExpbmVcbiAgICAgICAgID8gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uIC0gMVxuICAgICAgICAgOiAwKSxcbiAgICAgIGJpYXM6IGFBcmdzLmJpYXNcbiAgICB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB3ZSBoYXZlIHRoZSBzb3VyY2UgY29udGVudCBmb3IgZXZlcnkgc291cmNlIGluIHRoZSBzb3VyY2VcbiAqIG1hcCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX2hhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWN0aW9ucy5ldmVyeShmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHMuY29uc3VtZXIuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMoKTtcbiAgICB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29udGVudC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIHVybCBvZiB0aGVcbiAqIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBSZXR1cm5zIG51bGwgaWYgbm8gb3JpZ2luYWwgc291cmNlIGNvbnRlbnQgaXNcbiAqIGF2YWlsYWJsZS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5zb3VyY2VDb250ZW50Rm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbaV07XG5cbiAgICAgIHZhciBjb250ZW50ID0gc2VjdGlvbi5jb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIHRydWUpO1xuICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChudWxsT25NaXNzaW5nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTb3VyY2UgKyAnXCIgaXMgbm90IGluIHRoZSBTb3VyY2VNYXAuJyk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBvcmlnaW5hbCBzb3VyY2UsXG4gKiBsaW5lLCBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0IHdpdGhcbiAqIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS4gIFRoZSBsaW5lIG51bWJlclxuICogICAgIGlzIDEtYmFzZWQuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLiAgVGhlIGNvbHVtblxuICogICAgIG51bWJlciBpcyAwLWJhc2VkLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC4gIFRoZVxuICogICAgIGxpbmUgbnVtYmVyIGlzIDEtYmFzZWQuIFxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgICAgVGhlIGNvbHVtbiBudW1iZXIgaXMgMC1iYXNlZC5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9nZW5lcmF0ZWRQb3NpdGlvbkZvcihhQXJncykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbaV07XG5cbiAgICAgIC8vIE9ubHkgY29uc2lkZXIgdGhpcyBzZWN0aW9uIGlmIHRoZSByZXF1ZXN0ZWQgc291cmNlIGlzIGluIHRoZSBsaXN0IG9mXG4gICAgICAvLyBzb3VyY2VzIG9mIHRoZSBjb25zdW1lci5cbiAgICAgIGlmIChzZWN0aW9uLmNvbnN1bWVyLl9maW5kU291cmNlSW5kZXgodXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2UnKSkgPT09IC0xKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIGdlbmVyYXRlZFBvc2l0aW9uID0gc2VjdGlvbi5jb25zdW1lci5nZW5lcmF0ZWRQb3NpdGlvbkZvcihhQXJncyk7XG4gICAgICBpZiAoZ2VuZXJhdGVkUG9zaXRpb24pIHtcbiAgICAgICAgdmFyIHJldCA9IHtcbiAgICAgICAgICBsaW5lOiBnZW5lcmF0ZWRQb3NpdGlvbi5saW5lICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgY29sdW1uOiBnZW5lcmF0ZWRQb3NpdGlvbi5jb2x1bW4gK1xuICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IGdlbmVyYXRlZFBvc2l0aW9uLmxpbmVcbiAgICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgICA6IDApXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxpbmU6IG51bGwsXG4gICAgICBjb2x1bW46IG51bGxcbiAgICB9O1xuICB9O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncyA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuICAgICAgdmFyIHNlY3Rpb25NYXBwaW5ncyA9IHNlY3Rpb24uY29uc3VtZXIuX2dlbmVyYXRlZE1hcHBpbmdzO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzZWN0aW9uTWFwcGluZ3MubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIG1hcHBpbmcgPSBzZWN0aW9uTWFwcGluZ3Nbal07XG5cbiAgICAgICAgdmFyIHNvdXJjZSA9IHNlY3Rpb24uY29uc3VtZXIuX3NvdXJjZXMuYXQobWFwcGluZy5zb3VyY2UpO1xuICAgICAgICBzb3VyY2UgPSB1dGlsLmNvbXB1dGVTb3VyY2VVUkwoc2VjdGlvbi5jb25zdW1lci5zb3VyY2VSb290LCBzb3VyY2UsIHRoaXMuX3NvdXJjZU1hcFVSTCk7XG4gICAgICAgIHRoaXMuX3NvdXJjZXMuYWRkKHNvdXJjZSk7XG4gICAgICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXG4gICAgICAgIHZhciBuYW1lID0gbnVsbDtcbiAgICAgICAgaWYgKG1hcHBpbmcubmFtZSkge1xuICAgICAgICAgIG5hbWUgPSBzZWN0aW9uLmNvbnN1bWVyLl9uYW1lcy5hdChtYXBwaW5nLm5hbWUpO1xuICAgICAgICAgIHRoaXMuX25hbWVzLmFkZChuYW1lKTtcbiAgICAgICAgICBuYW1lID0gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBtYXBwaW5ncyBjb21pbmcgZnJvbSB0aGUgY29uc3VtZXIgZm9yIHRoZSBzZWN0aW9uIGhhdmVcbiAgICAgICAgLy8gZ2VuZXJhdGVkIHBvc2l0aW9ucyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlY3Rpb24sIHNvIHdlXG4gICAgICAgIC8vIG5lZWQgdG8gb2Zmc2V0IHRoZW0gdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb25jYXRlbmF0ZWRcbiAgICAgICAgLy8gZ2VuZXJhdGVkIGZpbGUuXG4gICAgICAgIHZhciBhZGp1c3RlZE1hcHBpbmcgPSB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgZ2VuZXJhdGVkTGluZTogbWFwcGluZy5nZW5lcmF0ZWRMaW5lICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gbWFwcGluZy5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgIDogMCksXG4gICAgICAgICAgb3JpZ2luYWxMaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhZGp1c3RlZE1hcHBpbmcub3JpZ2luYWxMaW5lID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHF1aWNrU29ydCh0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpO1xuICAgIHF1aWNrU29ydCh0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG4gIH07XG5cbmV4cG9ydHMuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyID0gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvc291cmNlLW1hcC1jb25zdW1lci5qc1xuLy8gbW9kdWxlIGlkID0gN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbmV4cG9ydHMuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCA9IDI7XG5cbi8qKlxuICogUmVjdXJzaXZlIGltcGxlbWVudGF0aW9uIG9mIGJpbmFyeSBzZWFyY2guXG4gKlxuICogQHBhcmFtIGFMb3cgSW5kaWNlcyBoZXJlIGFuZCBsb3dlciBkbyBub3QgY29udGFpbiB0aGUgbmVlZGxlLlxuICogQHBhcmFtIGFIaWdoIEluZGljZXMgaGVyZSBhbmQgaGlnaGVyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuXG4gKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCBiZWluZyBzZWFyY2hlZCBmb3IuXG4gKiBAcGFyYW0gYUhheXN0YWNrIFRoZSBub24tZW1wdHkgYXJyYXkgYmVpbmcgc2VhcmNoZWQuXG4gKiBAcGFyYW0gYUNvbXBhcmUgRnVuY3Rpb24gd2hpY2ggdGFrZXMgdHdvIGVsZW1lbnRzIGFuZCByZXR1cm5zIC0xLCAwLCBvciAxLlxuICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICovXG5mdW5jdGlvbiByZWN1cnNpdmVTZWFyY2goYUxvdywgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gdGVybWluYXRlcyB3aGVuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gIC8vXG4gIC8vICAgMS4gV2UgZmluZCB0aGUgZXhhY3QgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gIC8vXG4gIC8vICAgMi4gV2UgZGlkIG5vdCBmaW5kIHRoZSBleGFjdCBlbGVtZW50LCBidXQgd2UgY2FuIHJldHVybiB0aGUgaW5kZXggb2ZcbiAgLy8gICAgICB0aGUgbmV4dC1jbG9zZXN0IGVsZW1lbnQuXG4gIC8vXG4gIC8vICAgMy4gV2UgZGlkIG5vdCBmaW5kIHRoZSBleGFjdCBlbGVtZW50LCBhbmQgdGhlcmUgaXMgbm8gbmV4dC1jbG9zZXN0XG4gIC8vICAgICAgZWxlbWVudCB0aGFuIHRoZSBvbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IsIHNvIHdlIHJldHVybiAtMS5cbiAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGFIaWdoIC0gYUxvdykgLyAyKSArIGFMb3c7XG4gIHZhciBjbXAgPSBhQ29tcGFyZShhTmVlZGxlLCBhSGF5c3RhY2tbbWlkXSwgdHJ1ZSk7XG4gIGlmIChjbXAgPT09IDApIHtcbiAgICAvLyBGb3VuZCB0aGUgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gICAgcmV0dXJuIG1pZDtcbiAgfVxuICBlbHNlIGlmIChjbXAgPiAwKSB7XG4gICAgLy8gT3VyIG5lZWRsZSBpcyBncmVhdGVyIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgaWYgKGFIaWdoIC0gbWlkID4gMSkge1xuICAgICAgLy8gVGhlIGVsZW1lbnQgaXMgaW4gdGhlIHVwcGVyIGhhbGYuXG4gICAgICByZXR1cm4gcmVjdXJzaXZlU2VhcmNoKG1pZCwgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgZXhhY3QgbmVlZGxlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZCBpbiB0aGlzIGhheXN0YWNrLiBEZXRlcm1pbmUgaWZcbiAgICAvLyB3ZSBhcmUgaW4gdGVybWluYXRpb24gY2FzZSAoMykgb3IgKDIpIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHRoaW5nLlxuICAgIGlmIChhQmlhcyA9PSBleHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EKSB7XG4gICAgICByZXR1cm4gYUhpZ2ggPCBhSGF5c3RhY2subGVuZ3RoID8gYUhpZ2ggOiAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gT3VyIG5lZWRsZSBpcyBsZXNzIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgaWYgKG1pZCAtIGFMb3cgPiAxKSB7XG4gICAgICAvLyBUaGUgZWxlbWVudCBpcyBpbiB0aGUgbG93ZXIgaGFsZi5cbiAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2goYUxvdywgbWlkLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcyk7XG4gICAgfVxuXG4gICAgLy8gd2UgYXJlIGluIHRlcm1pbmF0aW9uIGNhc2UgKDMpIG9yICgyKSBhbmQgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSB0aGluZy5cbiAgICBpZiAoYUJpYXMgPT0gZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCkge1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFMb3cgPCAwID8gLTEgOiBhTG93O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaCB3aGljaCB3aWxsIGFsd2F5cyB0cnkgYW5kIHJldHVyblxuICogdGhlIGluZGV4IG9mIHRoZSBjbG9zZXN0IGVsZW1lbnQgaWYgdGhlcmUgaXMgbm8gZXhhY3QgaGl0LiBUaGlzIGlzIGJlY2F1c2VcbiAqIG1hcHBpbmdzIGJldHdlZW4gb3JpZ2luYWwgYW5kIGdlbmVyYXRlZCBsaW5lL2NvbCBwYWlycyBhcmUgc2luZ2xlIHBvaW50cyxcbiAqIGFuZCB0aGVyZSBpcyBhbiBpbXBsaWNpdCByZWdpb24gYmV0d2VlbiBlYWNoIG9mIHRoZW0sIHNvIGEgbWlzcyBqdXN0IG1lYW5zXG4gKiB0aGF0IHlvdSBhcmVuJ3Qgb24gdGhlIHZlcnkgc3RhcnQgb2YgYSByZWdpb24uXG4gKlxuICogQHBhcmFtIGFOZWVkbGUgVGhlIGVsZW1lbnQgeW91IGFyZSBsb29raW5nIGZvci5cbiAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIGFycmF5IHRoYXQgaXMgYmVpbmcgc2VhcmNoZWQuXG4gKiBAcGFyYW0gYUNvbXBhcmUgQSBmdW5jdGlvbiB3aGljaCB0YWtlcyB0aGUgbmVlZGxlIGFuZCBhbiBlbGVtZW50IGluIHRoZVxuICogICAgIGFycmF5IGFuZCByZXR1cm5zIC0xLCAwLCBvciAxIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBuZWVkbGUgaXMgbGVzc1xuICogICAgIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4gdGhlIGVsZW1lbnQsIHJlc3BlY3RpdmVseS5cbiAqIEBwYXJhbSBhQmlhcyBFaXRoZXIgJ2JpbmFyeVNlYXJjaC5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJy5cbiAqL1xuZXhwb3J0cy5zZWFyY2ggPSBmdW5jdGlvbiBzZWFyY2goYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpIHtcbiAgaWYgKGFIYXlzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICB2YXIgaW5kZXggPSByZWN1cnNpdmVTZWFyY2goLTEsIGFIYXlzdGFjay5sZW5ndGgsIGFOZWVkbGUsIGFIYXlzdGFjayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb21wYXJlLCBhQmlhcyB8fCBleHBvcnRzLkdSRUFURVNUX0xPV0VSX0JPVU5EKTtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIC8vIFdlIGhhdmUgZm91bmQgZWl0aGVyIHRoZSBleGFjdCBlbGVtZW50LCBvciB0aGUgbmV4dC1jbG9zZXN0IGVsZW1lbnQgdGhhblxuICAvLyB0aGUgb25lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLiBIb3dldmVyLCB0aGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBzdWNoXG4gIC8vIGVsZW1lbnQuIE1ha2Ugc3VyZSB3ZSBhbHdheXMgcmV0dXJuIHRoZSBzbWFsbGVzdCBvZiB0aGVzZS5cbiAgd2hpbGUgKGluZGV4IC0gMSA+PSAwKSB7XG4gICAgaWYgKGFDb21wYXJlKGFIYXlzdGFja1tpbmRleF0sIGFIYXlzdGFja1tpbmRleCAtIDFdLCB0cnVlKSAhPT0gMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC0taW5kZXg7XG4gIH1cblxuICByZXR1cm4gaW5kZXg7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvYmluYXJ5LXNlYXJjaC5qc1xuLy8gbW9kdWxlIGlkID0gOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbi8vIEl0IHR1cm5zIG91dCB0aGF0IHNvbWUgKG1vc3Q/KSBKYXZhU2NyaXB0IGVuZ2luZXMgZG9uJ3Qgc2VsZi1ob3N0XG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgLiBUaGlzIG1ha2VzIHNlbnNlIGJlY2F1c2UgQysrIHdpbGwgbGlrZWx5IHJlbWFpblxuLy8gZmFzdGVyIHRoYW4gSlMgd2hlbiBkb2luZyByYXcgQ1BVLWludGVuc2l2ZSBzb3J0aW5nLiBIb3dldmVyLCB3aGVuIHVzaW5nIGFcbi8vIGN1c3RvbSBjb21wYXJhdG9yIGZ1bmN0aW9uLCBjYWxsaW5nIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlIFZNJ3MgQysrIGFuZFxuLy8gSklUJ2QgSlMgaXMgcmF0aGVyIHNsb3cgKmFuZCogbG9zZXMgSklUIHR5cGUgaW5mb3JtYXRpb24sIHJlc3VsdGluZyBpblxuLy8gd29yc2UgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRoYW4gd291bGQgYmUgb3B0aW1hbC4gSW5cbi8vIGZhY3QsIHdoZW4gc29ydGluZyB3aXRoIGEgY29tcGFyYXRvciwgdGhlc2UgY29zdHMgb3V0d2VpZ2ggdGhlIGJlbmVmaXRzIG9mXG4vLyBzb3J0aW5nIGluIEMrKy4gQnkgdXNpbmcgb3VyIG93biBKUy1pbXBsZW1lbnRlZCBRdWljayBTb3J0IChiZWxvdyksIHdlIGdldFxuLy8gYSB+MzUwMG1zIG1lYW4gc3BlZWQtdXAgaW4gYGJlbmNoL2JlbmNoLmh0bWxgLlxuXG4vKipcbiAqIFN3YXAgdGhlIGVsZW1lbnRzIGluZGV4ZWQgYnkgYHhgIGFuZCBgeWAgaW4gdGhlIGFycmF5IGBhcnlgLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIFRoZSBhcnJheS5cbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBpdGVtLlxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIHNlY29uZCBpdGVtLlxuICovXG5mdW5jdGlvbiBzd2FwKGFyeSwgeCwgeSkge1xuICB2YXIgdGVtcCA9IGFyeVt4XTtcbiAgYXJ5W3hdID0gYXJ5W3ldO1xuICBhcnlbeV0gPSB0ZW1wO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSByYW5kb20gaW50ZWdlciB3aXRoaW4gdGhlIHJhbmdlIGBsb3cgLi4gaGlnaGAgaW5jbHVzaXZlLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBsb3dcbiAqICAgICAgICBUaGUgbG93ZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICogQHBhcmFtIHtOdW1iZXJ9IGhpZ2hcbiAqICAgICAgICBUaGUgdXBwZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICovXG5mdW5jdGlvbiByYW5kb21JbnRJblJhbmdlKGxvdywgaGlnaCkge1xuICByZXR1cm4gTWF0aC5yb3VuZChsb3cgKyAoTWF0aC5yYW5kb20oKSAqIChoaWdoIC0gbG93KSkpO1xufVxuXG4vKipcbiAqIFRoZSBRdWljayBTb3J0IGFsZ29yaXRobS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBBbiBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcGFyYXRvclxuICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBwXG4gKiAgICAgICAgU3RhcnQgaW5kZXggb2YgdGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gclxuICogICAgICAgIEVuZCBpbmRleCBvZiB0aGUgYXJyYXlcbiAqL1xuZnVuY3Rpb24gZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCByKSB7XG4gIC8vIElmIG91ciBsb3dlciBib3VuZCBpcyBsZXNzIHRoYW4gb3VyIHVwcGVyIGJvdW5kLCB3ZSAoMSkgcGFydGl0aW9uIHRoZVxuICAvLyBhcnJheSBpbnRvIHR3byBwaWVjZXMgYW5kICgyKSByZWN1cnNlIG9uIGVhY2ggaGFsZi4gSWYgaXQgaXMgbm90LCB0aGlzIGlzXG4gIC8vIHRoZSBlbXB0eSBhcnJheSBhbmQgb3VyIGJhc2UgY2FzZS5cblxuICBpZiAocCA8IHIpIHtcbiAgICAvLyAoMSkgUGFydGl0aW9uaW5nLlxuICAgIC8vXG4gICAgLy8gVGhlIHBhcnRpdGlvbmluZyBjaG9vc2VzIGEgcGl2b3QgYmV0d2VlbiBgcGAgYW5kIGByYCBhbmQgbW92ZXMgYWxsXG4gICAgLy8gZWxlbWVudHMgdGhhdCBhcmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdCB0byB0aGUgYmVmb3JlIGl0LCBhbmRcbiAgICAvLyBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbiBpdCBhZnRlciBpdC4gVGhlIGVmZmVjdCBpcyB0aGF0XG4gICAgLy8gb25jZSBwYXJ0aXRpb24gaXMgZG9uZSwgdGhlIHBpdm90IGlzIGluIHRoZSBleGFjdCBwbGFjZSBpdCB3aWxsIGJlIHdoZW5cbiAgICAvLyB0aGUgYXJyYXkgaXMgcHV0IGluIHNvcnRlZCBvcmRlciwgYW5kIGl0IHdpbGwgbm90IG5lZWQgdG8gYmUgbW92ZWRcbiAgICAvLyBhZ2Fpbi4gVGhpcyBydW5zIGluIE8obikgdGltZS5cblxuICAgIC8vIEFsd2F5cyBjaG9vc2UgYSByYW5kb20gcGl2b3Qgc28gdGhhdCBhbiBpbnB1dCBhcnJheSB3aGljaCBpcyByZXZlcnNlXG4gICAgLy8gc29ydGVkIGRvZXMgbm90IGNhdXNlIE8obl4yKSBydW5uaW5nIHRpbWUuXG4gICAgdmFyIHBpdm90SW5kZXggPSByYW5kb21JbnRJblJhbmdlKHAsIHIpO1xuICAgIHZhciBpID0gcCAtIDE7XG5cbiAgICBzd2FwKGFyeSwgcGl2b3RJbmRleCwgcik7XG4gICAgdmFyIHBpdm90ID0gYXJ5W3JdO1xuXG4gICAgLy8gSW1tZWRpYXRlbHkgYWZ0ZXIgYGpgIGlzIGluY3JlbWVudGVkIGluIHRoaXMgbG9vcCwgdGhlIGZvbGxvd2luZyBob2xkXG4gICAgLy8gdHJ1ZTpcbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbcCAuLiBpXWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdC5cbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbaSsxIC4uIGotMV1gIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcGl2b3QuXG4gICAgZm9yICh2YXIgaiA9IHA7IGogPCByOyBqKyspIHtcbiAgICAgIGlmIChjb21wYXJhdG9yKGFyeVtqXSwgcGl2b3QpIDw9IDApIHtcbiAgICAgICAgaSArPSAxO1xuICAgICAgICBzd2FwKGFyeSwgaSwgaik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dhcChhcnksIGkgKyAxLCBqKTtcbiAgICB2YXIgcSA9IGkgKyAxO1xuXG4gICAgLy8gKDIpIFJlY3Vyc2Ugb24gZWFjaCBoYWxmLlxuXG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCBxIC0gMSk7XG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBxICsgMSwgcik7XG4gIH1cbn1cblxuLyoqXG4gKiBTb3J0IHRoZSBnaXZlbiBhcnJheSBpbi1wbGFjZSB3aXRoIHRoZSBnaXZlbiBjb21wYXJhdG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wYXJhdG9yXG4gKiAgICAgICAgRnVuY3Rpb24gdG8gdXNlIHRvIGNvbXBhcmUgdHdvIGl0ZW1zLlxuICovXG5leHBvcnRzLnF1aWNrU29ydCA9IGZ1bmN0aW9uIChhcnksIGNvbXBhcmF0b3IpIHtcbiAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCAwLCBhcnkubGVuZ3RoIC0gMSk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvcXVpY2stc29ydC5qc1xuLy8gbW9kdWxlIGlkID0gOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciBTb3VyY2VNYXBHZW5lcmF0b3IgPSByZXF1aXJlKCcuL3NvdXJjZS1tYXAtZ2VuZXJhdG9yJykuU291cmNlTWFwR2VuZXJhdG9yO1xudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuLy8gTWF0Y2hlcyBhIFdpbmRvd3Mtc3R5bGUgYFxcclxcbmAgbmV3bGluZSBvciBhIGBcXG5gIG5ld2xpbmUgdXNlZCBieSBhbGwgb3RoZXJcbi8vIG9wZXJhdGluZyBzeXN0ZW1zIHRoZXNlIGRheXMgKGNhcHR1cmluZyB0aGUgcmVzdWx0KS5cbnZhciBSRUdFWF9ORVdMSU5FID0gLyhcXHI/XFxuKS87XG5cbi8vIE5ld2xpbmUgY2hhcmFjdGVyIGNvZGUgZm9yIGNoYXJDb2RlQXQoKSBjb21wYXJpc29uc1xudmFyIE5FV0xJTkVfQ09ERSA9IDEwO1xuXG4vLyBQcml2YXRlIHN5bWJvbCBmb3IgaWRlbnRpZnlpbmcgYFNvdXJjZU5vZGVgcyB3aGVuIG11bHRpcGxlIHZlcnNpb25zIG9mXG4vLyB0aGUgc291cmNlLW1hcCBsaWJyYXJ5IGFyZSBsb2FkZWQuIFRoaXMgTVVTVCBOT1QgQ0hBTkdFIGFjcm9zc1xuLy8gdmVyc2lvbnMhXG52YXIgaXNTb3VyY2VOb2RlID0gXCIkJCRpc1NvdXJjZU5vZGUkJCRcIjtcblxuLyoqXG4gKiBTb3VyY2VOb2RlcyBwcm92aWRlIGEgd2F5IHRvIGFic3RyYWN0IG92ZXIgaW50ZXJwb2xhdGluZy9jb25jYXRlbmF0aW5nXG4gKiBzbmlwcGV0cyBvZiBnZW5lcmF0ZWQgSmF2YVNjcmlwdCBzb3VyY2UgY29kZSB3aGlsZSBtYWludGFpbmluZyB0aGUgbGluZSBhbmRcbiAqIGNvbHVtbiBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIG9yaWdpbmFsIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwYXJhbSBhTGluZSBUaGUgb3JpZ2luYWwgbGluZSBudW1iZXIuXG4gKiBAcGFyYW0gYUNvbHVtbiBUaGUgb3JpZ2luYWwgY29sdW1uIG51bWJlci5cbiAqIEBwYXJhbSBhU291cmNlIFRoZSBvcmlnaW5hbCBzb3VyY2UncyBmaWxlbmFtZS5cbiAqIEBwYXJhbSBhQ2h1bmtzIE9wdGlvbmFsLiBBbiBhcnJheSBvZiBzdHJpbmdzIHdoaWNoIGFyZSBzbmlwcGV0cyBvZlxuICogICAgICAgIGdlbmVyYXRlZCBKUywgb3Igb3RoZXIgU291cmNlTm9kZXMuXG4gKiBAcGFyYW0gYU5hbWUgVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIuXG4gKi9cbmZ1bmN0aW9uIFNvdXJjZU5vZGUoYUxpbmUsIGFDb2x1bW4sIGFTb3VyY2UsIGFDaHVua3MsIGFOYW1lKSB7XG4gIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgdGhpcy5zb3VyY2VDb250ZW50cyA9IHt9O1xuICB0aGlzLmxpbmUgPSBhTGluZSA9PSBudWxsID8gbnVsbCA6IGFMaW5lO1xuICB0aGlzLmNvbHVtbiA9IGFDb2x1bW4gPT0gbnVsbCA/IG51bGwgOiBhQ29sdW1uO1xuICB0aGlzLnNvdXJjZSA9IGFTb3VyY2UgPT0gbnVsbCA/IG51bGwgOiBhU291cmNlO1xuICB0aGlzLm5hbWUgPSBhTmFtZSA9PSBudWxsID8gbnVsbCA6IGFOYW1lO1xuICB0aGlzW2lzU291cmNlTm9kZV0gPSB0cnVlO1xuICBpZiAoYUNodW5rcyAhPSBudWxsKSB0aGlzLmFkZChhQ2h1bmtzKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgU291cmNlTm9kZSBmcm9tIGdlbmVyYXRlZCBjb2RlIGFuZCBhIFNvdXJjZU1hcENvbnN1bWVyLlxuICpcbiAqIEBwYXJhbSBhR2VuZXJhdGVkQ29kZSBUaGUgZ2VuZXJhdGVkIGNvZGVcbiAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIFNvdXJjZU1hcCBmb3IgdGhlIGdlbmVyYXRlZCBjb2RlXG4gKiBAcGFyYW0gYVJlbGF0aXZlUGF0aCBPcHRpb25hbC4gVGhlIHBhdGggdGhhdCByZWxhdGl2ZSBzb3VyY2VzIGluIHRoZVxuICogICAgICAgIFNvdXJjZU1hcENvbnN1bWVyIHNob3VsZCBiZSByZWxhdGl2ZSB0by5cbiAqL1xuU291cmNlTm9kZS5mcm9tU3RyaW5nV2l0aFNvdXJjZU1hcCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU5vZGVfZnJvbVN0cmluZ1dpdGhTb3VyY2VNYXAoYUdlbmVyYXRlZENvZGUsIGFTb3VyY2VNYXBDb25zdW1lciwgYVJlbGF0aXZlUGF0aCkge1xuICAgIC8vIFRoZSBTb3VyY2VOb2RlIHdlIHdhbnQgdG8gZmlsbCB3aXRoIHRoZSBnZW5lcmF0ZWQgY29kZVxuICAgIC8vIGFuZCB0aGUgU291cmNlTWFwXG4gICAgdmFyIG5vZGUgPSBuZXcgU291cmNlTm9kZSgpO1xuXG4gICAgLy8gQWxsIGV2ZW4gaW5kaWNlcyBvZiB0aGlzIGFycmF5IGFyZSBvbmUgbGluZSBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4gICAgLy8gd2hpbGUgYWxsIG9kZCBpbmRpY2VzIGFyZSB0aGUgbmV3bGluZXMgYmV0d2VlbiB0d28gYWRqYWNlbnQgbGluZXNcbiAgICAvLyAoc2luY2UgYFJFR0VYX05FV0xJTkVgIGNhcHR1cmVzIGl0cyBtYXRjaCkuXG4gICAgLy8gUHJvY2Vzc2VkIGZyYWdtZW50cyBhcmUgYWNjZXNzZWQgYnkgY2FsbGluZyBgc2hpZnROZXh0TGluZWAuXG4gICAgdmFyIHJlbWFpbmluZ0xpbmVzID0gYUdlbmVyYXRlZENvZGUuc3BsaXQoUkVHRVhfTkVXTElORSk7XG4gICAgdmFyIHJlbWFpbmluZ0xpbmVzSW5kZXggPSAwO1xuICAgIHZhciBzaGlmdE5leHRMaW5lID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbGluZUNvbnRlbnRzID0gZ2V0TmV4dExpbmUoKTtcbiAgICAgIC8vIFRoZSBsYXN0IGxpbmUgb2YgYSBmaWxlIG1pZ2h0IG5vdCBoYXZlIGEgbmV3bGluZS5cbiAgICAgIHZhciBuZXdMaW5lID0gZ2V0TmV4dExpbmUoKSB8fCBcIlwiO1xuICAgICAgcmV0dXJuIGxpbmVDb250ZW50cyArIG5ld0xpbmU7XG5cbiAgICAgIGZ1bmN0aW9uIGdldE5leHRMaW5lKCkge1xuICAgICAgICByZXR1cm4gcmVtYWluaW5nTGluZXNJbmRleCA8IHJlbWFpbmluZ0xpbmVzLmxlbmd0aCA/XG4gICAgICAgICAgICByZW1haW5pbmdMaW5lc1tyZW1haW5pbmdMaW5lc0luZGV4KytdIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBXZSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBwb3NpdGlvbiBvZiBcInJlbWFpbmluZ0xpbmVzXCJcbiAgICB2YXIgbGFzdEdlbmVyYXRlZExpbmUgPSAxLCBsYXN0R2VuZXJhdGVkQ29sdW1uID0gMDtcblxuICAgIC8vIFRoZSBnZW5lcmF0ZSBTb3VyY2VOb2RlcyB3ZSBuZWVkIGEgY29kZSByYW5nZS5cbiAgICAvLyBUbyBleHRyYWN0IGl0IGN1cnJlbnQgYW5kIGxhc3QgbWFwcGluZyBpcyB1c2VkLlxuICAgIC8vIEhlcmUgd2Ugc3RvcmUgdGhlIGxhc3QgbWFwcGluZy5cbiAgICB2YXIgbGFzdE1hcHBpbmcgPSBudWxsO1xuXG4gICAgYVNvdXJjZU1hcENvbnN1bWVyLmVhY2hNYXBwaW5nKGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgICBpZiAobGFzdE1hcHBpbmcgIT09IG51bGwpIHtcbiAgICAgICAgLy8gV2UgYWRkIHRoZSBjb2RlIGZyb20gXCJsYXN0TWFwcGluZ1wiIHRvIFwibWFwcGluZ1wiOlxuICAgICAgICAvLyBGaXJzdCBjaGVjayBpZiB0aGVyZSBpcyBhIG5ldyBsaW5lIGluIGJldHdlZW4uXG4gICAgICAgIGlmIChsYXN0R2VuZXJhdGVkTGluZSA8IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSkge1xuICAgICAgICAgIC8vIEFzc29jaWF0ZSBmaXJzdCBsaW5lIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgICAgYWRkTWFwcGluZ1dpdGhDb2RlKGxhc3RNYXBwaW5nLCBzaGlmdE5leHRMaW5lKCkpO1xuICAgICAgICAgIGxhc3RHZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgICAgbGFzdEdlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgICAgICAgLy8gVGhlIHJlbWFpbmluZyBjb2RlIGlzIGFkZGVkIHdpdGhvdXQgbWFwcGluZ1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIG5ldyBsaW5lIGluIGJldHdlZW4uXG4gICAgICAgICAgLy8gQXNzb2NpYXRlIHRoZSBjb2RlIGJldHdlZW4gXCJsYXN0R2VuZXJhdGVkQ29sdW1uXCIgYW5kXG4gICAgICAgICAgLy8gXCJtYXBwaW5nLmdlbmVyYXRlZENvbHVtblwiIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgICAgdmFyIG5leHRMaW5lID0gcmVtYWluaW5nTGluZXNbcmVtYWluaW5nTGluZXNJbmRleF0gfHwgJyc7XG4gICAgICAgICAgdmFyIGNvZGUgPSBuZXh0TGluZS5zdWJzdHIoMCwgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RHZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICAgIHJlbWFpbmluZ0xpbmVzW3JlbWFpbmluZ0xpbmVzSW5kZXhdID0gbmV4dExpbmUuc3Vic3RyKG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uKTtcbiAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG4gICAgICAgICAgYWRkTWFwcGluZ1dpdGhDb2RlKGxhc3RNYXBwaW5nLCBjb2RlKTtcbiAgICAgICAgICAvLyBObyBtb3JlIHJlbWFpbmluZyBjb2RlLCBjb250aW51ZVxuICAgICAgICAgIGxhc3RNYXBwaW5nID0gbWFwcGluZztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFdlIGFkZCB0aGUgZ2VuZXJhdGVkIGNvZGUgdW50aWwgdGhlIGZpcnN0IG1hcHBpbmdcbiAgICAgIC8vIHRvIHRoZSBTb3VyY2VOb2RlIHdpdGhvdXQgYW55IG1hcHBpbmcuXG4gICAgICAvLyBFYWNoIGxpbmUgaXMgYWRkZWQgYXMgc2VwYXJhdGUgc3RyaW5nLlxuICAgICAgd2hpbGUgKGxhc3RHZW5lcmF0ZWRMaW5lIDwgbWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIG5vZGUuYWRkKHNoaWZ0TmV4dExpbmUoKSk7XG4gICAgICAgIGxhc3RHZW5lcmF0ZWRMaW5lKys7XG4gICAgICB9XG4gICAgICBpZiAobGFzdEdlbmVyYXRlZENvbHVtbiA8IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uKSB7XG4gICAgICAgIHZhciBuZXh0TGluZSA9IHJlbWFpbmluZ0xpbmVzW3JlbWFpbmluZ0xpbmVzSW5kZXhdIHx8ICcnO1xuICAgICAgICBub2RlLmFkZChuZXh0TGluZS5zdWJzdHIoMCwgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4pKTtcbiAgICAgICAgcmVtYWluaW5nTGluZXNbcmVtYWluaW5nTGluZXNJbmRleF0gPSBuZXh0TGluZS5zdWJzdHIobWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG4gICAgICB9XG4gICAgICBsYXN0TWFwcGluZyA9IG1hcHBpbmc7XG4gICAgfSwgdGhpcyk7XG4gICAgLy8gV2UgaGF2ZSBwcm9jZXNzZWQgYWxsIG1hcHBpbmdzLlxuICAgIGlmIChyZW1haW5pbmdMaW5lc0luZGV4IDwgcmVtYWluaW5nTGluZXMubGVuZ3RoKSB7XG4gICAgICBpZiAobGFzdE1hcHBpbmcpIHtcbiAgICAgICAgLy8gQXNzb2NpYXRlIHRoZSByZW1haW5pbmcgY29kZSBpbiB0aGUgY3VycmVudCBsaW5lIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgIGFkZE1hcHBpbmdXaXRoQ29kZShsYXN0TWFwcGluZywgc2hpZnROZXh0TGluZSgpKTtcbiAgICAgIH1cbiAgICAgIC8vIGFuZCBhZGQgdGhlIHJlbWFpbmluZyBsaW5lcyB3aXRob3V0IGFueSBtYXBwaW5nXG4gICAgICBub2RlLmFkZChyZW1haW5pbmdMaW5lcy5zcGxpY2UocmVtYWluaW5nTGluZXNJbmRleCkuam9pbihcIlwiKSk7XG4gICAgfVxuXG4gICAgLy8gQ29weSBzb3VyY2VzQ29udGVudCBpbnRvIFNvdXJjZU5vZGVcbiAgICBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2VGaWxlKSB7XG4gICAgICB2YXIgY29udGVudCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKHNvdXJjZUZpbGUpO1xuICAgICAgaWYgKGNvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoYVJlbGF0aXZlUGF0aCAhPSBudWxsKSB7XG4gICAgICAgICAgc291cmNlRmlsZSA9IHV0aWwuam9pbihhUmVsYXRpdmVQYXRoLCBzb3VyY2VGaWxlKTtcbiAgICAgICAgfVxuICAgICAgICBub2RlLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgY29udGVudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbm9kZTtcblxuICAgIGZ1bmN0aW9uIGFkZE1hcHBpbmdXaXRoQ29kZShtYXBwaW5nLCBjb2RlKSB7XG4gICAgICBpZiAobWFwcGluZyA9PT0gbnVsbCB8fCBtYXBwaW5nLnNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5vZGUuYWRkKGNvZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFSZWxhdGl2ZVBhdGhcbiAgICAgICAgICA/IHV0aWwuam9pbihhUmVsYXRpdmVQYXRoLCBtYXBwaW5nLnNvdXJjZSlcbiAgICAgICAgICA6IG1hcHBpbmcuc291cmNlO1xuICAgICAgICBub2RlLmFkZChuZXcgU291cmNlTm9kZShtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm5hbWUpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbi8qKlxuICogQWRkIGEgY2h1bmsgb2YgZ2VuZXJhdGVkIEpTIHRvIHRoaXMgc291cmNlIG5vZGUuXG4gKlxuICogQHBhcmFtIGFDaHVuayBBIHN0cmluZyBzbmlwcGV0IG9mIGdlbmVyYXRlZCBKUyBjb2RlLCBhbm90aGVyIGluc3RhbmNlIG9mXG4gKiAgICAgICAgU291cmNlTm9kZSwgb3IgYW4gYXJyYXkgd2hlcmUgZWFjaCBtZW1iZXIgaXMgb25lIG9mIHRob3NlIHRoaW5ncy5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gU291cmNlTm9kZV9hZGQoYUNodW5rKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFDaHVuaykpIHtcbiAgICBhQ2h1bmsuZm9yRWFjaChmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgIHRoaXMuYWRkKGNodW5rKTtcbiAgICB9LCB0aGlzKTtcbiAgfVxuICBlbHNlIGlmIChhQ2h1bmtbaXNTb3VyY2VOb2RlXSB8fCB0eXBlb2YgYUNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgaWYgKGFDaHVuaykge1xuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGFDaHVuayk7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICBcIkV4cGVjdGVkIGEgU291cmNlTm9kZSwgc3RyaW5nLCBvciBhbiBhcnJheSBvZiBTb3VyY2VOb2RlcyBhbmQgc3RyaW5ncy4gR290IFwiICsgYUNodW5rXG4gICAgKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGEgY2h1bmsgb2YgZ2VuZXJhdGVkIEpTIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBzb3VyY2Ugbm9kZS5cbiAqXG4gKiBAcGFyYW0gYUNodW5rIEEgc3RyaW5nIHNuaXBwZXQgb2YgZ2VuZXJhdGVkIEpTIGNvZGUsIGFub3RoZXIgaW5zdGFuY2Ugb2ZcbiAqICAgICAgICBTb3VyY2VOb2RlLCBvciBhbiBhcnJheSB3aGVyZSBlYWNoIG1lbWJlciBpcyBvbmUgb2YgdGhvc2UgdGhpbmdzLlxuICovXG5Tb3VyY2VOb2RlLnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24gU291cmNlTm9kZV9wcmVwZW5kKGFDaHVuaykge1xuICBpZiAoQXJyYXkuaXNBcnJheShhQ2h1bmspKSB7XG4gICAgZm9yICh2YXIgaSA9IGFDaHVuay5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHRoaXMucHJlcGVuZChhQ2h1bmtbaV0pO1xuICAgIH1cbiAgfVxuICBlbHNlIGlmIChhQ2h1bmtbaXNTb3VyY2VOb2RlXSB8fCB0eXBlb2YgYUNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgdGhpcy5jaGlsZHJlbi51bnNoaWZ0KGFDaHVuayk7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIFwiRXhwZWN0ZWQgYSBTb3VyY2VOb2RlLCBzdHJpbmcsIG9yIGFuIGFycmF5IG9mIFNvdXJjZU5vZGVzIGFuZCBzdHJpbmdzLiBHb3QgXCIgKyBhQ2h1bmtcbiAgICApO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBXYWxrIG92ZXIgdGhlIHRyZWUgb2YgSlMgc25pcHBldHMgaW4gdGhpcyBub2RlIGFuZCBpdHMgY2hpbGRyZW4uIFRoZVxuICogd2Fsa2luZyBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCBzbmlwcGV0IG9mIEpTIGFuZCBpcyBwYXNzZWQgdGhhdFxuICogc25pcHBldCBhbmQgdGhlIGl0cyBvcmlnaW5hbCBhc3NvY2lhdGVkIHNvdXJjZSdzIGxpbmUvY29sdW1uIGxvY2F0aW9uLlxuICpcbiAqIEBwYXJhbSBhRm4gVGhlIHRyYXZlcnNhbCBmdW5jdGlvbi5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUud2FsayA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfd2FsayhhRm4pIHtcbiAgdmFyIGNodW5rO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGNodW5rID0gdGhpcy5jaGlsZHJlbltpXTtcbiAgICBpZiAoY2h1bmtbaXNTb3VyY2VOb2RlXSkge1xuICAgICAgY2h1bmsud2FsayhhRm4pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmIChjaHVuayAhPT0gJycpIHtcbiAgICAgICAgYUZuKGNodW5rLCB7IHNvdXJjZTogdGhpcy5zb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLmxpbmUsXG4gICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBMaWtlIGBTdHJpbmcucHJvdG90eXBlLmpvaW5gIGV4Y2VwdCBmb3IgU291cmNlTm9kZXMuIEluc2VydHMgYGFTdHJgIGJldHdlZW5cbiAqIGVhY2ggb2YgYHRoaXMuY2hpbGRyZW5gLlxuICpcbiAqIEBwYXJhbSBhU2VwIFRoZSBzZXBhcmF0b3IuXG4gKi9cblNvdXJjZU5vZGUucHJvdG90eXBlLmpvaW4gPSBmdW5jdGlvbiBTb3VyY2VOb2RlX2pvaW4oYVNlcCkge1xuICB2YXIgbmV3Q2hpbGRyZW47XG4gIHZhciBpO1xuICB2YXIgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gIGlmIChsZW4gPiAwKSB7XG4gICAgbmV3Q2hpbGRyZW4gPSBbXTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuLTE7IGkrKykge1xuICAgICAgbmV3Q2hpbGRyZW4ucHVzaCh0aGlzLmNoaWxkcmVuW2ldKTtcbiAgICAgIG5ld0NoaWxkcmVuLnB1c2goYVNlcCk7XG4gICAgfVxuICAgIG5ld0NoaWxkcmVuLnB1c2godGhpcy5jaGlsZHJlbltpXSk7XG4gICAgdGhpcy5jaGlsZHJlbiA9IG5ld0NoaWxkcmVuO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxsIFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSBvbiB0aGUgdmVyeSByaWdodC1tb3N0IHNvdXJjZSBzbmlwcGV0LiBVc2VmdWxcbiAqIGZvciB0cmltbWluZyB3aGl0ZXNwYWNlIGZyb20gdGhlIGVuZCBvZiBhIHNvdXJjZSBub2RlLCBldGMuXG4gKlxuICogQHBhcmFtIGFQYXR0ZXJuIFRoZSBwYXR0ZXJuIHRvIHJlcGxhY2UuXG4gKiBAcGFyYW0gYVJlcGxhY2VtZW50IFRoZSB0aGluZyB0byByZXBsYWNlIHRoZSBwYXR0ZXJuIHdpdGguXG4gKi9cblNvdXJjZU5vZGUucHJvdG90eXBlLnJlcGxhY2VSaWdodCA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfcmVwbGFjZVJpZ2h0KGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpIHtcbiAgdmFyIGxhc3RDaGlsZCA9IHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxXTtcbiAgaWYgKGxhc3RDaGlsZFtpc1NvdXJjZU5vZGVdKSB7XG4gICAgbGFzdENoaWxkLnJlcGxhY2VSaWdodChhUGF0dGVybiwgYVJlcGxhY2VtZW50KTtcbiAgfVxuICBlbHNlIGlmICh0eXBlb2YgbGFzdENoaWxkID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxXSA9IGxhc3RDaGlsZC5yZXBsYWNlKGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpO1xuICB9XG4gIGVsc2Uge1xuICAgIHRoaXMuY2hpbGRyZW4ucHVzaCgnJy5yZXBsYWNlKGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IHRoZSBzb3VyY2UgY29udGVudCBmb3IgYSBzb3VyY2UgZmlsZS4gVGhpcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBTb3VyY2VNYXBHZW5lcmF0b3JcbiAqIGluIHRoZSBzb3VyY2VzQ29udGVudCBmaWVsZC5cbiAqXG4gKiBAcGFyYW0gYVNvdXJjZUZpbGUgVGhlIGZpbGVuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZVxuICogQHBhcmFtIGFTb3VyY2VDb250ZW50IFRoZSBjb250ZW50IG9mIHRoZSBzb3VyY2UgZmlsZVxuICovXG5Tb3VyY2VOb2RlLnByb3RvdHlwZS5zZXRTb3VyY2VDb250ZW50ID1cbiAgZnVuY3Rpb24gU291cmNlTm9kZV9zZXRTb3VyY2VDb250ZW50KGFTb3VyY2VGaWxlLCBhU291cmNlQ29udGVudCkge1xuICAgIHRoaXMuc291cmNlQ29udGVudHNbdXRpbC50b1NldFN0cmluZyhhU291cmNlRmlsZSldID0gYVNvdXJjZUNvbnRlbnQ7XG4gIH07XG5cbi8qKlxuICogV2FsayBvdmVyIHRoZSB0cmVlIG9mIFNvdXJjZU5vZGVzLiBUaGUgd2Fsa2luZyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGVhY2hcbiAqIHNvdXJjZSBmaWxlIGNvbnRlbnQgYW5kIGlzIHBhc3NlZCB0aGUgZmlsZW5hbWUgYW5kIHNvdXJjZSBjb250ZW50LlxuICpcbiAqIEBwYXJhbSBhRm4gVGhlIHRyYXZlcnNhbCBmdW5jdGlvbi5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUud2Fsa1NvdXJjZUNvbnRlbnRzID1cbiAgZnVuY3Rpb24gU291cmNlTm9kZV93YWxrU291cmNlQ29udGVudHMoYUZuKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldW2lzU291cmNlTm9kZV0pIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS53YWxrU291cmNlQ29udGVudHMoYUZuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc291cmNlcyA9IE9iamVjdC5rZXlzKHRoaXMuc291cmNlQ29udGVudHMpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzb3VyY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhRm4odXRpbC5mcm9tU2V0U3RyaW5nKHNvdXJjZXNbaV0pLCB0aGlzLnNvdXJjZUNvbnRlbnRzW3NvdXJjZXNbaV1dKTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzb3VyY2Ugbm9kZS4gV2Fsa3Mgb3ZlciB0aGUgdHJlZVxuICogYW5kIGNvbmNhdGVuYXRlcyBhbGwgdGhlIHZhcmlvdXMgc25pcHBldHMgdG9nZXRoZXIgdG8gb25lIHN0cmluZy5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiBTb3VyY2VOb2RlX3RvU3RyaW5nKCkge1xuICB2YXIgc3RyID0gXCJcIjtcbiAgdGhpcy53YWxrKGZ1bmN0aW9uIChjaHVuaykge1xuICAgIHN0ciArPSBjaHVuaztcbiAgfSk7XG4gIHJldHVybiBzdHI7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNvdXJjZSBub2RlIGFsb25nIHdpdGggYSBzb3VyY2VcbiAqIG1hcC5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUudG9TdHJpbmdXaXRoU291cmNlTWFwID0gZnVuY3Rpb24gU291cmNlTm9kZV90b1N0cmluZ1dpdGhTb3VyY2VNYXAoYUFyZ3MpIHtcbiAgdmFyIGdlbmVyYXRlZCA9IHtcbiAgICBjb2RlOiBcIlwiLFxuICAgIGxpbmU6IDEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHZhciBtYXAgPSBuZXcgU291cmNlTWFwR2VuZXJhdG9yKGFBcmdzKTtcbiAgdmFyIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSBmYWxzZTtcbiAgdmFyIGxhc3RPcmlnaW5hbFNvdXJjZSA9IG51bGw7XG4gIHZhciBsYXN0T3JpZ2luYWxMaW5lID0gbnVsbDtcbiAgdmFyIGxhc3RPcmlnaW5hbENvbHVtbiA9IG51bGw7XG4gIHZhciBsYXN0T3JpZ2luYWxOYW1lID0gbnVsbDtcbiAgdGhpcy53YWxrKGZ1bmN0aW9uIChjaHVuaywgb3JpZ2luYWwpIHtcbiAgICBnZW5lcmF0ZWQuY29kZSArPSBjaHVuaztcbiAgICBpZiAob3JpZ2luYWwuc291cmNlICE9PSBudWxsXG4gICAgICAgICYmIG9yaWdpbmFsLmxpbmUgIT09IG51bGxcbiAgICAgICAgJiYgb3JpZ2luYWwuY29sdW1uICE9PSBudWxsKSB7XG4gICAgICBpZihsYXN0T3JpZ2luYWxTb3VyY2UgIT09IG9yaWdpbmFsLnNvdXJjZVxuICAgICAgICAgfHwgbGFzdE9yaWdpbmFsTGluZSAhPT0gb3JpZ2luYWwubGluZVxuICAgICAgICAgfHwgbGFzdE9yaWdpbmFsQ29sdW1uICE9PSBvcmlnaW5hbC5jb2x1bW5cbiAgICAgICAgIHx8IGxhc3RPcmlnaW5hbE5hbWUgIT09IG9yaWdpbmFsLm5hbWUpIHtcbiAgICAgICAgbWFwLmFkZE1hcHBpbmcoe1xuICAgICAgICAgIHNvdXJjZTogb3JpZ2luYWwuc291cmNlLFxuICAgICAgICAgIG9yaWdpbmFsOiB7XG4gICAgICAgICAgICBsaW5lOiBvcmlnaW5hbC5saW5lLFxuICAgICAgICAgICAgY29sdW1uOiBvcmlnaW5hbC5jb2x1bW5cbiAgICAgICAgICB9LFxuICAgICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgICAgbGluZTogZ2VuZXJhdGVkLmxpbmUsXG4gICAgICAgICAgICBjb2x1bW46IGdlbmVyYXRlZC5jb2x1bW5cbiAgICAgICAgICB9LFxuICAgICAgICAgIG5hbWU6IG9yaWdpbmFsLm5hbWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBsYXN0T3JpZ2luYWxTb3VyY2UgPSBvcmlnaW5hbC5zb3VyY2U7XG4gICAgICBsYXN0T3JpZ2luYWxMaW5lID0gb3JpZ2luYWwubGluZTtcbiAgICAgIGxhc3RPcmlnaW5hbENvbHVtbiA9IG9yaWdpbmFsLmNvbHVtbjtcbiAgICAgIGxhc3RPcmlnaW5hbE5hbWUgPSBvcmlnaW5hbC5uYW1lO1xuICAgICAgc291cmNlTWFwcGluZ0FjdGl2ZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChzb3VyY2VNYXBwaW5nQWN0aXZlKSB7XG4gICAgICBtYXAuYWRkTWFwcGluZyh7XG4gICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgIGxpbmU6IGdlbmVyYXRlZC5saW5lLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkLmNvbHVtblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxhc3RPcmlnaW5hbFNvdXJjZSA9IG51bGw7XG4gICAgICBzb3VyY2VNYXBwaW5nQWN0aXZlID0gZmFsc2U7XG4gICAgfVxuICAgIGZvciAodmFyIGlkeCA9IDAsIGxlbmd0aCA9IGNodW5rLmxlbmd0aDsgaWR4IDwgbGVuZ3RoOyBpZHgrKykge1xuICAgICAgaWYgKGNodW5rLmNoYXJDb2RlQXQoaWR4KSA9PT0gTkVXTElORV9DT0RFKSB7XG4gICAgICAgIGdlbmVyYXRlZC5saW5lKys7XG4gICAgICAgIGdlbmVyYXRlZC5jb2x1bW4gPSAwO1xuICAgICAgICAvLyBNYXBwaW5ncyBlbmQgYXQgZW9sXG4gICAgICAgIGlmIChpZHggKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICBsYXN0T3JpZ2luYWxTb3VyY2UgPSBudWxsO1xuICAgICAgICAgIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChzb3VyY2VNYXBwaW5nQWN0aXZlKSB7XG4gICAgICAgICAgbWFwLmFkZE1hcHBpbmcoe1xuICAgICAgICAgICAgc291cmNlOiBvcmlnaW5hbC5zb3VyY2UsXG4gICAgICAgICAgICBvcmlnaW5hbDoge1xuICAgICAgICAgICAgICBsaW5lOiBvcmlnaW5hbC5saW5lLFxuICAgICAgICAgICAgICBjb2x1bW46IG9yaWdpbmFsLmNvbHVtblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgICAgICBsaW5lOiBnZW5lcmF0ZWQubGluZSxcbiAgICAgICAgICAgICAgY29sdW1uOiBnZW5lcmF0ZWQuY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZTogb3JpZ2luYWwubmFtZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZW5lcmF0ZWQuY29sdW1uKys7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgdGhpcy53YWxrU291cmNlQ29udGVudHMoZnVuY3Rpb24gKHNvdXJjZUZpbGUsIHNvdXJjZUNvbnRlbnQpIHtcbiAgICBtYXAuc2V0U291cmNlQ29udGVudChzb3VyY2VGaWxlLCBzb3VyY2VDb250ZW50KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHsgY29kZTogZ2VuZXJhdGVkLmNvZGUsIG1hcDogbWFwIH07XG59O1xuXG5leHBvcnRzLlNvdXJjZU5vZGUgPSBTb3VyY2VOb2RlO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvc291cmNlLW5vZGUuanNcbi8vIG1vZHVsZSBpZCA9IDEwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=
\ No newline at end of file
diff --git a/node_modules/terser/node_modules/source-map/dist/source-map.js b/node_modules/terser/node_modules/source-map/dist/source-map.js
new file mode 100644
index 0000000..b4eb087
--- /dev/null
+++ b/node_modules/terser/node_modules/source-map/dist/source-map.js
@@ -0,0 +1,3233 @@
+(function webpackUniversalModuleDefinition(root, factory) {
+	if(typeof exports === 'object' && typeof module === 'object')
+		module.exports = factory();
+	else if(typeof define === 'function' && define.amd)
+		define([], factory);
+	else if(typeof exports === 'object')
+		exports["sourceMap"] = factory();
+	else
+		root["sourceMap"] = factory();
+})(this, function() {
+return /******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports, __webpack_require__) {
+
+	/*
+	 * Copyright 2009-2011 Mozilla Foundation and contributors
+	 * Licensed under the New BSD license. See LICENSE.txt or:
+	 * http://opensource.org/licenses/BSD-3-Clause
+	 */
+	exports.SourceMapGenerator = __webpack_require__(1).SourceMapGenerator;
+	exports.SourceMapConsumer = __webpack_require__(7).SourceMapConsumer;
+	exports.SourceNode = __webpack_require__(10).SourceNode;
+
+
+/***/ }),
+/* 1 */
+/***/ (function(module, exports, __webpack_require__) {
+
+	/* -*- Mode: js; js-indent-level: 2; -*- */
+	/*
+	 * Copyright 2011 Mozilla Foundation and contributors
+	 * Licensed under the New BSD license. See LICENSE or:
+	 * http://opensource.org/licenses/BSD-3-Clause
+	 */
+
+	var base64VLQ = __webpack_require__(2);
+	var util = __webpack_require__(4);
+	var ArraySet = __webpack_require__(5).ArraySet;
+	var MappingList = __webpack_require__(6).MappingList;
+
+	/**
+	 * An instance of the SourceMapGenerator represents a source map which is
+	 * being built incrementally. You may pass an object with the following
+	 * properties:
+	 *
+	 *   - file: The filename of the generated source.
+	 *   - sourceRoot: A root for all relative URLs in this source map.
+	 */
+	function SourceMapGenerator(aArgs) {
+	  if (!aArgs) {
+	    aArgs = {};
+	  }
+	  this._file = util.getArg(aArgs, 'file', null);
+	  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
+	  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
+	  this._sources = new ArraySet();
+	  this._names = new ArraySet();
+	  this._mappings = new MappingList();
+	  this._sourcesContents = null;
+	}
+
+	SourceMapGenerator.prototype._version = 3;
+
+	/**
+	 * Creates a new SourceMapGenerator based on a SourceMapConsumer
+	 *
+	 * @param aSourceMapConsumer The SourceMap.
+	 */
+	SourceMapGenerator.fromSourceMap =
+	  function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
+	    var sourceRoot = aSourceMapConsumer.sourceRoot;
+	    var generator = new SourceMapGenerator({
+	      file: aSourceMapConsumer.file,
+	      sourceRoot: sourceRoot
+	    });
+	    aSourceMapConsumer.eachMapping(function (mapping) {
+	      var newMapping = {
+	        generated: {
+	          line: mapping.generatedLine,
+	          column: mapping.generatedColumn
+	        }
+	      };
+
+	      if (mapping.source != null) {
+	        newMapping.source = mapping.source;
+	        if (sourceRoot != null) {
+	          newMapping.source = util.relative(sourceRoot, newMapping.source);
+	        }
+
+	        newMapping.original = {
+	          line: mapping.originalLine,
+	          column: mapping.originalColumn
+	        };
+
+	        if (mapping.name != null) {
+	          newMapping.name = mapping.name;
+	        }
+	      }
+
+	      generator.addMapping(newMapping);
+	    });
+	    aSourceMapConsumer.sources.forEach(function (sourceFile) {
+	      var sourceRelative = sourceFile;
+	      if (sourceRoot !== null) {
+	        sourceRelative = util.relative(sourceRoot, sourceFile);
+	      }
+
+	      if (!generator._sources.has(sourceRelative)) {
+	        generator._sources.add(sourceRelative);
+	      }
+
+	      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+	      if (content != null) {
+	        generator.setSourceContent(sourceFile, content);
+	      }
+	    });
+	    return generator;
+	  };
+
+	/**
+	 * Add a single mapping from original source line and column to the generated
+	 * source's line and column for this source map being created. The mapping
+	 * object should have the following properties:
+	 *
+	 *   - generated: An object with the generated line and column positions.
+	 *   - original: An object with the original line and column positions.
+	 *   - source: The original source file (relative to the sourceRoot).
+	 *   - name: An optional original token name for this mapping.
+	 */
+	SourceMapGenerator.prototype.addMapping =
+	  function SourceMapGenerator_addMapping(aArgs) {
+	    var generated = util.getArg(aArgs, 'generated');
+	    var original = util.getArg(aArgs, 'original', null);
+	    var source = util.getArg(aArgs, 'source', null);
+	    var name = util.getArg(aArgs, 'name', null);
+
+	    if (!this._skipValidation) {
+	      this._validateMapping(generated, original, source, name);
+	    }
+
+	    if (source != null) {
+	      source = String(source);
+	      if (!this._sources.has(source)) {
+	        this._sources.add(source);
+	      }
+	    }
+
+	    if (name != null) {
+	      name = String(name);
+	      if (!this._names.has(name)) {
+	        this._names.add(name);
+	      }
+	    }
+
+	    this._mappings.add({
+	      generatedLine: generated.line,
+	      generatedColumn: generated.column,
+	      originalLine: original != null && original.line,
+	      originalColumn: original != null && original.column,
+	      source: source,
+	      name: name
+	    });
+	  };
+
+	/**
+	 * Set the source content for a source file.
+	 */
+	SourceMapGenerator.prototype.setSourceContent =
+	  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
+	    var source = aSourceFile;
+	    if (this._sourceRoot != null) {
+	      source = util.relative(this._sourceRoot, source);
+	    }
+
+	    if (aSourceContent != null) {
+	      // Add the source content to the _sourcesContents map.
+	      // Create a new _sourcesContents map if the property is null.
+	      if (!this._sourcesContents) {
+	        this._sourcesContents = Object.create(null);
+	      }
+	      this._sourcesContents[util.toSetString(source)] = aSourceContent;
+	    } else if (this._sourcesContents) {
+	      // Remove the source file from the _sourcesContents map.
+	      // If the _sourcesContents map is empty, set the property to null.
+	      delete this._sourcesContents[util.toSetString(source)];
+	      if (Object.keys(this._sourcesContents).length === 0) {
+	        this._sourcesContents = null;
+	      }
+	    }
+	  };
+
+	/**
+	 * Applies the mappings of a sub-source-map for a specific source file to the
+	 * source map being generated. Each mapping to the supplied source file is
+	 * rewritten using the supplied source map. Note: The resolution for the
+	 * resulting mappings is the minimium of this map and the supplied map.
+	 *
+	 * @param aSourceMapConsumer The source map to be applied.
+	 * @param aSourceFile Optional. The filename of the source file.
+	 *        If omitted, SourceMapConsumer's file property will be used.
+	 * @param aSourceMapPath Optional. The dirname of the path to the source map
+	 *        to be applied. If relative, it is relative to the SourceMapConsumer.
+	 *        This parameter is needed when the two source maps aren't in the same
+	 *        directory, and the source map to be applied contains relative source
+	 *        paths. If so, those relative source paths need to be rewritten
+	 *        relative to the SourceMapGenerator.
+	 */
+	SourceMapGenerator.prototype.applySourceMap =
+	  function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
+	    var sourceFile = aSourceFile;
+	    // If aSourceFile is omitted, we will use the file property of the SourceMap
+	    if (aSourceFile == null) {
+	      if (aSourceMapConsumer.file == null) {
+	        throw new Error(
+	          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
+	          'or the source map\'s "file" property. Both were omitted.'
+	        );
+	      }
+	      sourceFile = aSourceMapConsumer.file;
+	    }
+	    var sourceRoot = this._sourceRoot;
+	    // Make "sourceFile" relative if an absolute Url is passed.
+	    if (sourceRoot != null) {
+	      sourceFile = util.relative(sourceRoot, sourceFile);
+	    }
+	    // Applying the SourceMap can add and remove items from the sources and
+	    // the names array.
+	    var newSources = new ArraySet();
+	    var newNames = new ArraySet();
+
+	    // Find mappings for the "sourceFile"
+	    this._mappings.unsortedForEach(function (mapping) {
+	      if (mapping.source === sourceFile && mapping.originalLine != null) {
+	        // Check if it can be mapped by the source map, then update the mapping.
+	        var original = aSourceMapConsumer.originalPositionFor({
+	          line: mapping.originalLine,
+	          column: mapping.originalColumn
+	        });
+	        if (original.source != null) {
+	          // Copy mapping
+	          mapping.source = original.source;
+	          if (aSourceMapPath != null) {
+	            mapping.source = util.join(aSourceMapPath, mapping.source)
+	          }
+	          if (sourceRoot != null) {
+	            mapping.source = util.relative(sourceRoot, mapping.source);
+	          }
+	          mapping.originalLine = original.line;
+	          mapping.originalColumn = original.column;
+	          if (original.name != null) {
+	            mapping.name = original.name;
+	          }
+	        }
+	      }
+
+	      var source = mapping.source;
+	      if (source != null && !newSources.has(source)) {
+	        newSources.add(source);
+	      }
+
+	      var name = mapping.name;
+	      if (name != null && !newNames.has(name)) {
+	        newNames.add(name);
+	      }
+
+	    }, this);
+	    this._sources = newSources;
+	    this._names = newNames;
+
+	    // Copy sourcesContents of applied map.
+	    aSourceMapConsumer.sources.forEach(function (sourceFile) {
+	      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+	      if (content != null) {
+	        if (aSourceMapPath != null) {
+	          sourceFile = util.join(aSourceMapPath, sourceFile);
+	        }
+	        if (sourceRoot != null) {
+	          sourceFile = util.relative(sourceRoot, sourceFile);
+	        }
+	        this.setSourceContent(sourceFile, content);
+	      }
+	    }, this);
+	  };
+
+	/**
+	 * A mapping can have one of the three levels of data:
+	 *
+	 *   1. Just the generated position.
+	 *   2. The Generated position, original position, and original source.
+	 *   3. Generated and original position, original source, as well as a name
+	 *      token.
+	 *
+	 * To maintain consistency, we validate that any new mapping being added falls
+	 * in to one of these categories.
+	 */
+	SourceMapGenerator.prototype._validateMapping =
+	  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
+	                                              aName) {
+	    // When aOriginal is truthy but has empty values for .line and .column,
+	    // it is most likely a programmer error. In this case we throw a very
+	    // specific error message to try to guide them the right way.
+	    // For example: https://github.com/Polymer/polymer-bundler/pull/519
+	    if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {
+	        throw new Error(
+	            'original.line and original.column are not numbers -- you probably meant to omit ' +
+	            'the original mapping entirely and only map the generated position. If so, pass ' +
+	            'null for the original mapping instead of an object with empty or null values.'
+	        );
+	    }
+
+	    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
+	        && aGenerated.line > 0 && aGenerated.column >= 0
+	        && !aOriginal && !aSource && !aName) {
+	      // Case 1.
+	      return;
+	    }
+	    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
+	             && aOriginal && 'line' in aOriginal && 'column' in aOriginal
+	             && aGenerated.line > 0 && aGenerated.column >= 0
+	             && aOriginal.line > 0 && aOriginal.column >= 0
+	             && aSource) {
+	      // Cases 2 and 3.
+	      return;
+	    }
+	    else {
+	      throw new Error('Invalid mapping: ' + JSON.stringify({
+	        generated: aGenerated,
+	        source: aSource,
+	        original: aOriginal,
+	        name: aName
+	      }));
+	    }
+	  };
+
+	/**
+	 * Serialize the accumulated mappings in to the stream of base 64 VLQs
+	 * specified by the source map format.
+	 */
+	SourceMapGenerator.prototype._serializeMappings =
+	  function SourceMapGenerator_serializeMappings() {
+	    var previousGeneratedColumn = 0;
+	    var previousGeneratedLine = 1;
+	    var previousOriginalColumn = 0;
+	    var previousOriginalLine = 0;
+	    var previousName = 0;
+	    var previousSource = 0;
+	    var result = '';
+	    var next;
+	    var mapping;
+	    var nameIdx;
+	    var sourceIdx;
+
+	    var mappings = this._mappings.toArray();
+	    for (var i = 0, len = mappings.length; i < len; i++) {
+	      mapping = mappings[i];
+	      next = ''
+
+	      if (mapping.generatedLine !== previousGeneratedLine) {
+	        previousGeneratedColumn = 0;
+	        while (mapping.generatedLine !== previousGeneratedLine) {
+	          next += ';';
+	          previousGeneratedLine++;
+	        }
+	      }
+	      else {
+	        if (i > 0) {
+	          if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
+	            continue;
+	          }
+	          next += ',';
+	        }
+	      }
+
+	      next += base64VLQ.encode(mapping.generatedColumn
+	                                 - previousGeneratedColumn);
+	      previousGeneratedColumn = mapping.generatedColumn;
+
+	      if (mapping.source != null) {
+	        sourceIdx = this._sources.indexOf(mapping.source);
+	        next += base64VLQ.encode(sourceIdx - previousSource);
+	        previousSource = sourceIdx;
+
+	        // lines are stored 0-based in SourceMap spec version 3
+	        next += base64VLQ.encode(mapping.originalLine - 1
+	                                   - previousOriginalLine);
+	        previousOriginalLine = mapping.originalLine - 1;
+
+	        next += base64VLQ.encode(mapping.originalColumn
+	                                   - previousOriginalColumn);
+	        previousOriginalColumn = mapping.originalColumn;
+
+	        if (mapping.name != null) {
+	          nameIdx = this._names.indexOf(mapping.name);
+	          next += base64VLQ.encode(nameIdx - previousName);
+	          previousName = nameIdx;
+	        }
+	      }
+
+	      result += next;
+	    }
+
+	    return result;
+	  };
+
+	SourceMapGenerator.prototype._generateSourcesContent =
+	  function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
+	    return aSources.map(function (source) {
+	      if (!this._sourcesContents) {
+	        return null;
+	      }
+	      if (aSourceRoot != null) {
+	        source = util.relative(aSourceRoot, source);
+	      }
+	      var key = util.toSetString(source);
+	      return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)
+	        ? this._sourcesContents[key]
+	        : null;
+	    }, this);
+	  };
+
+	/**
+	 * Externalize the source map.
+	 */
+	SourceMapGenerator.prototype.toJSON =
+	  function SourceMapGenerator_toJSON() {
+	    var map = {
+	      version: this._version,
+	      sources: this._sources.toArray(),
+	      names: this._names.toArray(),
+	      mappings: this._serializeMappings()
+	    };
+	    if (this._file != null) {
+	      map.file = this._file;
+	    }
+	    if (this._sourceRoot != null) {
+	      map.sourceRoot = this._sourceRoot;
+	    }
+	    if (this._sourcesContents) {
+	      map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
+	    }
+
+	    return map;
+	  };
+
+	/**
+	 * Render the source map being generated to a string.
+	 */
+	SourceMapGenerator.prototype.toString =
+	  function SourceMapGenerator_toString() {
+	    return JSON.stringify(this.toJSON());
+	  };
+
+	exports.SourceMapGenerator = SourceMapGenerator;
+
+
+/***/ }),
+/* 2 */
+/***/ (function(module, exports, __webpack_require__) {
+
+	/* -*- Mode: js; js-indent-level: 2; -*- */
+	/*
+	 * Copyright 2011 Mozilla Foundation and contributors
+	 * Licensed under the New BSD license. See LICENSE or:
+	 * http://opensource.org/licenses/BSD-3-Clause
+	 *
+	 * Based on the Base 64 VLQ implementation in Closure Compiler:
+	 * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
+	 *
+	 * Copyright 2011 The Closure Compiler Authors. All rights reserved.
+	 * Redistribution and use in source and binary forms, with or without
+	 * modification, are permitted provided that the following conditions are
+	 * met:
+	 *
+	 *  * Redistributions of source code must retain the above copyright
+	 *    notice, this list of conditions and the following disclaimer.
+	 *  * Redistributions in binary form must reproduce the above
+	 *    copyright notice, this list of conditions and the following
+	 *    disclaimer in the documentation and/or other materials provided
+	 *    with the distribution.
+	 *  * Neither the name of Google Inc. nor the names of its
+	 *    contributors may be used to endorse or promote products derived
+	 *    from this software without specific prior written permission.
+	 *
+	 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+	 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+	 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+	 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+	 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+	 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+	 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+	 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+	 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+	 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+	 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+	 */
+
+	var base64 = __webpack_require__(3);
+
+	// A single base 64 digit can contain 6 bits of data. For the base 64 variable
+	// length quantities we use in the source map spec, the first bit is the sign,
+	// the next four bits are the actual value, and the 6th bit is the
+	// continuation bit. The continuation bit tells us whether there are more
+	// digits in this value following this digit.
+	//
+	//   Continuation
+	//   |    Sign
+	//   |    |
+	//   V    V
+	//   101011
+
+	var VLQ_BASE_SHIFT = 5;
+
+	// binary: 100000
+	var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
+
+	// binary: 011111
+	var VLQ_BASE_MASK = VLQ_BASE - 1;
+
+	// binary: 100000
+	var VLQ_CONTINUATION_BIT = VLQ_BASE;
+
+	/**
+	 * Converts from a two-complement value to a value where the sign bit is
+	 * placed in the least significant bit.  For example, as decimals:
+	 *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
+	 *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
+	 */
+	function toVLQSigned(aValue) {
+	  return aValue < 0
+	    ? ((-aValue) << 1) + 1
+	    : (aValue << 1) + 0;
+	}
+
+	/**
+	 * Converts to a two-complement value from a value where the sign bit is
+	 * placed in the least significant bit.  For example, as decimals:
+	 *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1
+	 *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2
+	 */
+	function fromVLQSigned(aValue) {
+	  var isNegative = (aValue & 1) === 1;
+	  var shifted = aValue >> 1;
+	  return isNegative
+	    ? -shifted
+	    : shifted;
+	}
+
+	/**
+	 * Returns the base 64 VLQ encoded value.
+	 */
+	exports.encode = function base64VLQ_encode(aValue) {
+	  var encoded = "";
+	  var digit;
+
+	  var vlq = toVLQSigned(aValue);
+
+	  do {
+	    digit = vlq & VLQ_BASE_MASK;
+	    vlq >>>= VLQ_BASE_SHIFT;
+	    if (vlq > 0) {
+	      // There are still more digits in this value, so we must make sure the
+	      // continuation bit is marked.
+	      digit |= VLQ_CONTINUATION_BIT;
+	    }
+	    encoded += base64.encode(digit);
+	  } while (vlq > 0);
+
+	  return encoded;
+	};
+
+	/**
+	 * Decodes the next base 64 VLQ value from the given string and returns the
+	 * value and the rest of the string via the out parameter.
+	 */
+	exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
+	  var strLen = aStr.length;
+	  var result = 0;
+	  var shift = 0;
+	  var continuation, digit;
+
+	  do {
+	    if (aIndex >= strLen) {
+	      throw new Error("Expected more digits in base 64 VLQ value.");
+	    }
+
+	    digit = base64.decode(aStr.charCodeAt(aIndex++));
+	    if (digit === -1) {
+	      throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
+	    }
+
+	    continuation = !!(digit & VLQ_CONTINUATION_BIT);
+	    digit &= VLQ_BASE_MASK;
+	    result = result + (digit << shift);
+	    shift += VLQ_BASE_SHIFT;
+	  } while (continuation);
+
+	  aOutParam.value = fromVLQSigned(result);
+	  aOutParam.rest = aIndex;
+	};
+
+
+/***/ }),
+/* 3 */
+/***/ (function(module, exports) {
+
+	/* -*- Mode: js; js-indent-level: 2; -*- */
+	/*
+	 * Copyright 2011 Mozilla Foundation and contributors
+	 * Licensed under the New BSD license. See LICENSE or:
+	 * http://opensource.org/licenses/BSD-3-Clause
+	 */
+
+	var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
+
+	/**
+	 * Encode an integer in the range of 0 to 63 to a single base 64 digit.
+	 */
+	exports.encode = function (number) {
+	  if (0 <= number && number < intToCharMap.length) {
+	    return intToCharMap[number];
+	  }
+	  throw new TypeError("Must be between 0 and 63: " + number);
+	};
+
+	/**
+	 * Decode a single base 64 character code digit to an integer. Returns -1 on
+	 * failure.
+	 */
+	exports.decode = function (charCode) {
+	  var bigA = 65;     // 'A'
+	  var bigZ = 90;     // 'Z'
+
+	  var littleA = 97;  // 'a'
+	  var littleZ = 122; // 'z'
+
+	  var zero = 48;     // '0'
+	  var nine = 57;     // '9'
+
+	  var plus = 43;     // '+'
+	  var slash = 47;    // '/'
+
+	  var littleOffset = 26;
+	  var numberOffset = 52;
+
+	  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
+	  if (bigA <= charCode && charCode <= bigZ) {
+	    return (charCode - bigA);
+	  }
+
+	  // 26 - 51: abcdefghijklmnopqrstuvwxyz
+	  if (littleA <= charCode && charCode <= littleZ) {
+	    return (charCode - littleA + littleOffset);
+	  }
+
+	  // 52 - 61: 0123456789
+	  if (zero <= charCode && charCode <= nine) {
+	    return (charCode - zero + numberOffset);
+	  }
+
+	  // 62: +
+	  if (charCode == plus) {
+	    return 62;
+	  }
+
+	  // 63: /
+	  if (charCode == slash) {
+	    return 63;
+	  }
+
+	  // Invalid base64 digit.
+	  return -1;
+	};
+
+
+/***/ }),
+/* 4 */
+/***/ (function(module, exports) {
+
+	/* -*- Mode: js; js-indent-level: 2; -*- */
+	/*
+	 * Copyright 2011 Mozilla Foundation and contributors
+	 * Licensed under the New BSD license. See LICENSE or:
+	 * http://opensource.org/licenses/BSD-3-Clause
+	 */
+
+	/**
+	 * This is a helper function for getting values from parameter/options
+	 * objects.
+	 *
+	 * @param args The object we are extracting values from
+	 * @param name The name of the property we are getting.
+	 * @param defaultValue An optional value to return if the property is missing
+	 * from the object. If this is not specified and the property is missing, an
+	 * error will be thrown.
+	 */
+	function getArg(aArgs, aName, aDefaultValue) {
+	  if (aName in aArgs) {
+	    return aArgs[aName];
+	  } else if (arguments.length === 3) {
+	    return aDefaultValue;
+	  } else {
+	    throw new Error('"' + aName + '" is a required argument.');
+	  }
+	}
+	exports.getArg = getArg;
+
+	var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/;
+	var dataUrlRegexp = /^data:.+\,.+$/;
+
+	function urlParse(aUrl) {
+	  var match = aUrl.match(urlRegexp);
+	  if (!match) {
+	    return null;
+	  }
+	  return {
+	    scheme: match[1],
+	    auth: match[2],
+	    host: match[3],
+	    port: match[4],
+	    path: match[5]
+	  };
+	}
+	exports.urlParse = urlParse;
+
+	function urlGenerate(aParsedUrl) {
+	  var url = '';
+	  if (aParsedUrl.scheme) {
+	    url += aParsedUrl.scheme + ':';
+	  }
+	  url += '//';
+	  if (aParsedUrl.auth) {
+	    url += aParsedUrl.auth + '@';
+	  }
+	  if (aParsedUrl.host) {
+	    url += aParsedUrl.host;
+	  }
+	  if (aParsedUrl.port) {
+	    url += ":" + aParsedUrl.port
+	  }
+	  if (aParsedUrl.path) {
+	    url += aParsedUrl.path;
+	  }
+	  return url;
+	}
+	exports.urlGenerate = urlGenerate;
+
+	/**
+	 * Normalizes a path, or the path portion of a URL:
+	 *
+	 * - Replaces consecutive slashes with one slash.
+	 * - Removes unnecessary '.' parts.
+	 * - Removes unnecessary '<dir>/..' parts.
+	 *
+	 * Based on code in the Node.js 'path' core module.
+	 *
+	 * @param aPath The path or url to normalize.
+	 */
+	function normalize(aPath) {
+	  var path = aPath;
+	  var url = urlParse(aPath);
+	  if (url) {
+	    if (!url.path) {
+	      return aPath;
+	    }
+	    path = url.path;
+	  }
+	  var isAbsolute = exports.isAbsolute(path);
+
+	  var parts = path.split(/\/+/);
+	  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
+	    part = parts[i];
+	    if (part === '.') {
+	      parts.splice(i, 1);
+	    } else if (part === '..') {
+	      up++;
+	    } else if (up > 0) {
+	      if (part === '') {
+	        // The first part is blank if the path is absolute. Trying to go
+	        // above the root is a no-op. Therefore we can remove all '..' parts
+	        // directly after the root.
+	        parts.splice(i + 1, up);
+	        up = 0;
+	      } else {
+	        parts.splice(i, 2);
+	        up--;
+	      }
+	    }
+	  }
+	  path = parts.join('/');
+
+	  if (path === '') {
+	    path = isAbsolute ? '/' : '.';
+	  }
+
+	  if (url) {
+	    url.path = path;
+	    return urlGenerate(url);
+	  }
+	  return path;
+	}
+	exports.normalize = normalize;
+
+	/**
+	 * Joins two paths/URLs.
+	 *
+	 * @param aRoot The root path or URL.
+	 * @param aPath The path or URL to be joined with the root.
+	 *
+	 * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
+	 *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended
+	 *   first.
+	 * - Otherwise aPath is a path. If aRoot is a URL, then its path portion
+	 *   is updated with the result and aRoot is returned. Otherwise the result
+	 *   is returned.
+	 *   - If aPath is absolute, the result is aPath.
+	 *   - Otherwise the two paths are joined with a slash.
+	 * - Joining for example 'http://' and 'www.example.com' is also supported.
+	 */
+	function join(aRoot, aPath) {
+	  if (aRoot === "") {
+	    aRoot = ".";
+	  }
+	  if (aPath === "") {
+	    aPath = ".";
+	  }
+	  var aPathUrl = urlParse(aPath);
+	  var aRootUrl = urlParse(aRoot);
+	  if (aRootUrl) {
+	    aRoot = aRootUrl.path || '/';
+	  }
+
+	  // `join(foo, '//www.example.org')`
+	  if (aPathUrl && !aPathUrl.scheme) {
+	    if (aRootUrl) {
+	      aPathUrl.scheme = aRootUrl.scheme;
+	    }
+	    return urlGenerate(aPathUrl);
+	  }
+
+	  if (aPathUrl || aPath.match(dataUrlRegexp)) {
+	    return aPath;
+	  }
+
+	  // `join('http://', 'www.example.com')`
+	  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
+	    aRootUrl.host = aPath;
+	    return urlGenerate(aRootUrl);
+	  }
+
+	  var joined = aPath.charAt(0) === '/'
+	    ? aPath
+	    : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);
+
+	  if (aRootUrl) {
+	    aRootUrl.path = joined;
+	    return urlGenerate(aRootUrl);
+	  }
+	  return joined;
+	}
+	exports.join = join;
+
+	exports.isAbsolute = function (aPath) {
+	  return aPath.charAt(0) === '/' || urlRegexp.test(aPath);
+	};
+
+	/**
+	 * Make a path relative to a URL or another path.
+	 *
+	 * @param aRoot The root path or URL.
+	 * @param aPath The path or URL to be made relative to aRoot.
+	 */
+	function relative(aRoot, aPath) {
+	  if (aRoot === "") {
+	    aRoot = ".";
+	  }
+
+	  aRoot = aRoot.replace(/\/$/, '');
+
+	  // It is possible for the path to be above the root. In this case, simply
+	  // checking whether the root is a prefix of the path won't work. Instead, we
+	  // need to remove components from the root one by one, until either we find
+	  // a prefix that fits, or we run out of components to remove.
+	  var level = 0;
+	  while (aPath.indexOf(aRoot + '/') !== 0) {
+	    var index = aRoot.lastIndexOf("/");
+	    if (index < 0) {
+	      return aPath;
+	    }
+
+	    // If the only part of the root that is left is the scheme (i.e. http://,
+	    // file:///, etc.), one or more slashes (/), or simply nothing at all, we
+	    // have exhausted all components, so the path is not relative to the root.
+	    aRoot = aRoot.slice(0, index);
+	    if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
+	      return aPath;
+	    }
+
+	    ++level;
+	  }
+
+	  // Make sure we add a "../" for each component we removed from the root.
+	  return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
+	}
+	exports.relative = relative;
+
+	var supportsNullProto = (function () {
+	  var obj = Object.create(null);
+	  return !('__proto__' in obj);
+	}());
+
+	function identity (s) {
+	  return s;
+	}
+
+	/**
+	 * Because behavior goes wacky when you set `__proto__` on objects, we
+	 * have to prefix all the strings in our set with an arbitrary character.
+	 *
+	 * See https://github.com/mozilla/source-map/pull/31 and
+	 * https://github.com/mozilla/source-map/issues/30
+	 *
+	 * @param String aStr
+	 */
+	function toSetString(aStr) {
+	  if (isProtoString(aStr)) {
+	    return '$' + aStr;
+	  }
+
+	  return aStr;
+	}
+	exports.toSetString = supportsNullProto ? identity : toSetString;
+
+	function fromSetString(aStr) {
+	  if (isProtoString(aStr)) {
+	    return aStr.slice(1);
+	  }
+
+	  return aStr;
+	}
+	exports.fromSetString = supportsNullProto ? identity : fromSetString;
+
+	function isProtoString(s) {
+	  if (!s) {
+	    return false;
+	  }
+
+	  var length = s.length;
+
+	  if (length < 9 /* "__proto__".length */) {
+	    return false;
+	  }
+
+	  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||
+	      s.charCodeAt(length - 2) !== 95  /* '_' */ ||
+	      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||
+	      s.charCodeAt(length - 4) !== 116 /* 't' */ ||
+	      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||
+	      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||
+	      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||
+	      s.charCodeAt(length - 8) !== 95  /* '_' */ ||
+	      s.charCodeAt(length - 9) !== 95  /* '_' */) {
+	    return false;
+	  }
+
+	  for (var i = length - 10; i >= 0; i--) {
+	    if (s.charCodeAt(i) !== 36 /* '$' */) {
+	      return false;
+	    }
+	  }
+
+	  return true;
+	}
+
+	/**
+	 * Comparator between two mappings where the original positions are compared.
+	 *
+	 * Optionally pass in `true` as `onlyCompareGenerated` to consider two
+	 * mappings with the same original source/line/column, but different generated
+	 * line and column the same. Useful when searching for a mapping with a
+	 * stubbed out mapping.
+	 */
+	function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
+	  var cmp = strcmp(mappingA.source, mappingB.source);
+	  if (cmp !== 0) {
+	    return cmp;
+	  }
+
+	  cmp = mappingA.originalLine - mappingB.originalLine;
+	  if (cmp !== 0) {
+	    return cmp;
+	  }
+
+	  cmp = mappingA.originalColumn - mappingB.originalColumn;
+	  if (cmp !== 0 || onlyCompareOriginal) {
+	    return cmp;
+	  }
+
+	  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
+	  if (cmp !== 0) {
+	    return cmp;
+	  }
+
+	  cmp = mappingA.generatedLine - mappingB.generatedLine;
+	  if (cmp !== 0) {
+	    return cmp;
+	  }
+
+	  return strcmp(mappingA.name, mappingB.name);
+	}
+	exports.compareByOriginalPositions = compareByOriginalPositions;
+
+	/**
+	 * Comparator between two mappings with deflated source and name indices where
+	 * the generated positions are compared.
+	 *
+	 * Optionally pass in `true` as `onlyCompareGenerated` to consider two
+	 * mappings with the same generated line and column, but different
+	 * source/name/original line and column the same. Useful when searching for a
+	 * mapping with a stubbed out mapping.
+	 */
+	function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
+	  var cmp = mappingA.generatedLine - mappingB.generatedLine;
+	  if (cmp !== 0) {
+	    return cmp;
+	  }
+
+	  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
+	  if (cmp !== 0 || onlyCompareGenerated) {
+	    return cmp;
+	  }
+
+	  cmp = strcmp(mappingA.source, mappingB.source);
+	  if (cmp !== 0) {
+	    return cmp;
+	  }
+
+	  cmp = mappingA.originalLine - mappingB.originalLine;
+	  if (cmp !== 0) {
+	    return cmp;
+	  }
+
+	  cmp = mappingA.originalColumn - mappingB.originalColumn;
+	  if (cmp !== 0) {
+	    return cmp;
+	  }
+
+	  return strcmp(mappingA.name, mappingB.name);
+	}
+	exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;
+
+	function strcmp(aStr1, aStr2) {
+	  if (aStr1 === aStr2) {
+	    return 0;
+	  }
+
+	  if (aStr1 === null) {
+	    return 1; // aStr2 !== null
+	  }
+
+	  if (aStr2 === null) {
+	    return -1; // aStr1 !== null
+	  }
+
+	  if (aStr1 > aStr2) {
+	    return 1;
+	  }
+
+	  return -1;
+	}
+
+	/**
+	 * Comparator between two mappings with inflated source and name strings where
+	 * the generated positions are compared.
+	 */
+	function compareByGeneratedPositionsInflated(mappingA, mappingB) {
+	  var cmp = mappingA.generatedLine - mappingB.generatedLine;
+	  if (cmp !== 0) {
+	    return cmp;
+	  }
+
+	  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
+	  if (cmp !== 0) {
+	    return cmp;
+	  }
+
+	  cmp = strcmp(mappingA.source, mappingB.source);
+	  if (cmp !== 0) {
+	    return cmp;
+	  }
+
+	  cmp = mappingA.originalLine - mappingB.originalLine;
+	  if (cmp !== 0) {
+	    return cmp;
+	  }
+
+	  cmp = mappingA.originalColumn - mappingB.originalColumn;
+	  if (cmp !== 0) {
+	    return cmp;
+	  }
+
+	  return strcmp(mappingA.name, mappingB.name);
+	}
+	exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
+
+	/**
+	 * Strip any JSON XSSI avoidance prefix from the string (as documented
+	 * in the source maps specification), and then parse the string as
+	 * JSON.
+	 */
+	function parseSourceMapInput(str) {
+	  return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, ''));
+	}
+	exports.parseSourceMapInput = parseSourceMapInput;
+
+	/**
+	 * Compute the URL of a source given the the source root, the source's
+	 * URL, and the source map's URL.
+	 */
+	function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {
+	  sourceURL = sourceURL || '';
+
+	  if (sourceRoot) {
+	    // This follows what Chrome does.
+	    if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {
+	      sourceRoot += '/';
+	    }
+	    // The spec says:
+	    //   Line 4: An optional source root, useful for relocating source
+	    //   files on a server or removing repeated values in the
+	    //   “sources” entry.  This value is prepended to the individual
+	    //   entries in the “source” field.
+	    sourceURL = sourceRoot + sourceURL;
+	  }
+
+	  // Historically, SourceMapConsumer did not take the sourceMapURL as
+	  // a parameter.  This mode is still somewhat supported, which is why
+	  // this code block is conditional.  However, it's preferable to pass
+	  // the source map URL to SourceMapConsumer, so that this function
+	  // can implement the source URL resolution algorithm as outlined in
+	  // the spec.  This block is basically the equivalent of:
+	  //    new URL(sourceURL, sourceMapURL).toString()
+	  // ... except it avoids using URL, which wasn't available in the
+	  // older releases of node still supported by this library.
+	  //
+	  // The spec says:
+	  //   If the sources are not absolute URLs after prepending of the
+	  //   “sourceRoot”, the sources are resolved relative to the
+	  //   SourceMap (like resolving script src in a html document).
+	  if (sourceMapURL) {
+	    var parsed = urlParse(sourceMapURL);
+	    if (!parsed) {
+	      throw new Error("sourceMapURL could not be parsed");
+	    }
+	    if (parsed.path) {
+	      // Strip the last path component, but keep the "/".
+	      var index = parsed.path.lastIndexOf('/');
+	      if (index >= 0) {
+	        parsed.path = parsed.path.substring(0, index + 1);
+	      }
+	    }
+	    sourceURL = join(urlGenerate(parsed), sourceURL);
+	  }
+
+	  return normalize(sourceURL);
+	}
+	exports.computeSourceURL = computeSourceURL;
+
+
+/***/ }),
+/* 5 */
+/***/ (function(module, exports, __webpack_require__) {
+
+	/* -*- Mode: js; js-indent-level: 2; -*- */
+	/*
+	 * Copyright 2011 Mozilla Foundation and contributors
+	 * Licensed under the New BSD license. See LICENSE or:
+	 * http://opensource.org/licenses/BSD-3-Clause
+	 */
+
+	var util = __webpack_require__(4);
+	var has = Object.prototype.hasOwnProperty;
+	var hasNativeMap = typeof Map !== "undefined";
+
+	/**
+	 * A data structure which is a combination of an array and a set. Adding a new
+	 * member is O(1), testing for membership is O(1), and finding the index of an
+	 * element is O(1). Removing elements from the set is not supported. Only
+	 * strings are supported for membership.
+	 */
+	function ArraySet() {
+	  this._array = [];
+	  this._set = hasNativeMap ? new Map() : Object.create(null);
+	}
+
+	/**
+	 * Static method for creating ArraySet instances from an existing array.
+	 */
+	ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
+	  var set = new ArraySet();
+	  for (var i = 0, len = aArray.length; i < len; i++) {
+	    set.add(aArray[i], aAllowDuplicates);
+	  }
+	  return set;
+	};
+
+	/**
+	 * Return how many unique items are in this ArraySet. If duplicates have been
+	 * added, than those do not count towards the size.
+	 *
+	 * @returns Number
+	 */
+	ArraySet.prototype.size = function ArraySet_size() {
+	  return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;
+	};
+
+	/**
+	 * Add the given string to this set.
+	 *
+	 * @param String aStr
+	 */
+	ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
+	  var sStr = hasNativeMap ? aStr : util.toSetString(aStr);
+	  var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);
+	  var idx = this._array.length;
+	  if (!isDuplicate || aAllowDuplicates) {
+	    this._array.push(aStr);
+	  }
+	  if (!isDuplicate) {
+	    if (hasNativeMap) {
+	      this._set.set(aStr, idx);
+	    } else {
+	      this._set[sStr] = idx;
+	    }
+	  }
+	};
+
+	/**
+	 * Is the given string a member of this set?
+	 *
+	 * @param String aStr
+	 */
+	ArraySet.prototype.has = function ArraySet_has(aStr) {
+	  if (hasNativeMap) {
+	    return this._set.has(aStr);
+	  } else {
+	    var sStr = util.toSetString(aStr);
+	    return has.call(this._set, sStr);
+	  }
+	};
+
+	/**
+	 * What is the index of the given string in the array?
+	 *
+	 * @param String aStr
+	 */
+	ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
+	  if (hasNativeMap) {
+	    var idx = this._set.get(aStr);
+	    if (idx >= 0) {
+	        return idx;
+	    }
+	  } else {
+	    var sStr = util.toSetString(aStr);
+	    if (has.call(this._set, sStr)) {
+	      return this._set[sStr];
+	    }
+	  }
+
+	  throw new Error('"' + aStr + '" is not in the set.');
+	};
+
+	/**
+	 * What is the element at the given index?
+	 *
+	 * @param Number aIdx
+	 */
+	ArraySet.prototype.at = function ArraySet_at(aIdx) {
+	  if (aIdx >= 0 && aIdx < this._array.length) {
+	    return this._array[aIdx];
+	  }
+	  throw new Error('No element indexed by ' + aIdx);
+	};
+
+	/**
+	 * Returns the array representation of this set (which has the proper indices
+	 * indicated by indexOf). Note that this is a copy of the internal array used
+	 * for storing the members so that no one can mess with internal state.
+	 */
+	ArraySet.prototype.toArray = function ArraySet_toArray() {
+	  return this._array.slice();
+	};
+
+	exports.ArraySet = ArraySet;
+
+
+/***/ }),
+/* 6 */
+/***/ (function(module, exports, __webpack_require__) {
+
+	/* -*- Mode: js; js-indent-level: 2; -*- */
+	/*
+	 * Copyright 2014 Mozilla Foundation and contributors
+	 * Licensed under the New BSD license. See LICENSE or:
+	 * http://opensource.org/licenses/BSD-3-Clause
+	 */
+
+	var util = __webpack_require__(4);
+
+	/**
+	 * Determine whether mappingB is after mappingA with respect to generated
+	 * position.
+	 */
+	function generatedPositionAfter(mappingA, mappingB) {
+	  // Optimized for most common case
+	  var lineA = mappingA.generatedLine;
+	  var lineB = mappingB.generatedLine;
+	  var columnA = mappingA.generatedColumn;
+	  var columnB = mappingB.generatedColumn;
+	  return lineB > lineA || lineB == lineA && columnB >= columnA ||
+	         util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
+	}
+
+	/**
+	 * A data structure to provide a sorted view of accumulated mappings in a
+	 * performance conscious manner. It trades a neglibable overhead in general
+	 * case for a large speedup in case of mappings being added in order.
+	 */
+	function MappingList() {
+	  this._array = [];
+	  this._sorted = true;
+	  // Serves as infimum
+	  this._last = {generatedLine: -1, generatedColumn: 0};
+	}
+
+	/**
+	 * Iterate through internal items. This method takes the same arguments that
+	 * `Array.prototype.forEach` takes.
+	 *
+	 * NOTE: The order of the mappings is NOT guaranteed.
+	 */
+	MappingList.prototype.unsortedForEach =
+	  function MappingList_forEach(aCallback, aThisArg) {
+	    this._array.forEach(aCallback, aThisArg);
+	  };
+
+	/**
+	 * Add the given source mapping.
+	 *
+	 * @param Object aMapping
+	 */
+	MappingList.prototype.add = function MappingList_add(aMapping) {
+	  if (generatedPositionAfter(this._last, aMapping)) {
+	    this._last = aMapping;
+	    this._array.push(aMapping);
+	  } else {
+	    this._sorted = false;
+	    this._array.push(aMapping);
+	  }
+	};
+
+	/**
+	 * Returns the flat, sorted array of mappings. The mappings are sorted by
+	 * generated position.
+	 *
+	 * WARNING: This method returns internal data without copying, for
+	 * performance. The return value must NOT be mutated, and should be treated as
+	 * an immutable borrow. If you want to take ownership, you must make your own
+	 * copy.
+	 */
+	MappingList.prototype.toArray = function MappingList_toArray() {
+	  if (!this._sorted) {
+	    this._array.sort(util.compareByGeneratedPositionsInflated);
+	    this._sorted = true;
+	  }
+	  return this._array;
+	};
+
+	exports.MappingList = MappingList;
+
+
+/***/ }),
+/* 7 */
+/***/ (function(module, exports, __webpack_require__) {
+
+	/* -*- Mode: js; js-indent-level: 2; -*- */
+	/*
+	 * Copyright 2011 Mozilla Foundation and contributors
+	 * Licensed under the New BSD license. See LICENSE or:
+	 * http://opensource.org/licenses/BSD-3-Clause
+	 */
+
+	var util = __webpack_require__(4);
+	var binarySearch = __webpack_require__(8);
+	var ArraySet = __webpack_require__(5).ArraySet;
+	var base64VLQ = __webpack_require__(2);
+	var quickSort = __webpack_require__(9).quickSort;
+
+	function SourceMapConsumer(aSourceMap, aSourceMapURL) {
+	  var sourceMap = aSourceMap;
+	  if (typeof aSourceMap === 'string') {
+	    sourceMap = util.parseSourceMapInput(aSourceMap);
+	  }
+
+	  return sourceMap.sections != null
+	    ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)
+	    : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);
+	}
+
+	SourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {
+	  return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);
+	}
+
+	/**
+	 * The version of the source mapping spec that we are consuming.
+	 */
+	SourceMapConsumer.prototype._version = 3;
+
+	// `__generatedMappings` and `__originalMappings` are arrays that hold the
+	// parsed mapping coordinates from the source map's "mappings" attribute. They
+	// are lazily instantiated, accessed via the `_generatedMappings` and
+	// `_originalMappings` getters respectively, and we only parse the mappings
+	// and create these arrays once queried for a source location. We jump through
+	// these hoops because there can be many thousands of mappings, and parsing
+	// them is expensive, so we only want to do it if we must.
+	//
+	// Each object in the arrays is of the form:
+	//
+	//     {
+	//       generatedLine: The line number in the generated code,
+	//       generatedColumn: The column number in the generated code,
+	//       source: The path to the original source file that generated this
+	//               chunk of code,
+	//       originalLine: The line number in the original source that
+	//                     corresponds to this chunk of generated code,
+	//       originalColumn: The column number in the original source that
+	//                       corresponds to this chunk of generated code,
+	//       name: The name of the original symbol which generated this chunk of
+	//             code.
+	//     }
+	//
+	// All properties except for `generatedLine` and `generatedColumn` can be
+	// `null`.
+	//
+	// `_generatedMappings` is ordered by the generated positions.
+	//
+	// `_originalMappings` is ordered by the original positions.
+
+	SourceMapConsumer.prototype.__generatedMappings = null;
+	Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {
+	  configurable: true,
+	  enumerable: true,
+	  get: function () {
+	    if (!this.__generatedMappings) {
+	      this._parseMappings(this._mappings, this.sourceRoot);
+	    }
+
+	    return this.__generatedMappings;
+	  }
+	});
+
+	SourceMapConsumer.prototype.__originalMappings = null;
+	Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {
+	  configurable: true,
+	  enumerable: true,
+	  get: function () {
+	    if (!this.__originalMappings) {
+	      this._parseMappings(this._mappings, this.sourceRoot);
+	    }
+
+	    return this.__originalMappings;
+	  }
+	});
+
+	SourceMapConsumer.prototype._charIsMappingSeparator =
+	  function SourceMapConsumer_charIsMappingSeparator(aStr, index) {
+	    var c = aStr.charAt(index);
+	    return c === ";" || c === ",";
+	  };
+
+	/**
+	 * Parse the mappings in a string in to a data structure which we can easily
+	 * query (the ordered arrays in the `this.__generatedMappings` and
+	 * `this.__originalMappings` properties).
+	 */
+	SourceMapConsumer.prototype._parseMappings =
+	  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+	    throw new Error("Subclasses must implement _parseMappings");
+	  };
+
+	SourceMapConsumer.GENERATED_ORDER = 1;
+	SourceMapConsumer.ORIGINAL_ORDER = 2;
+
+	SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
+	SourceMapConsumer.LEAST_UPPER_BOUND = 2;
+
+	/**
+	 * Iterate over each mapping between an original source/line/column and a
+	 * generated line/column in this source map.
+	 *
+	 * @param Function aCallback
+	 *        The function that is called with each mapping.
+	 * @param Object aContext
+	 *        Optional. If specified, this object will be the value of `this` every
+	 *        time that `aCallback` is called.
+	 * @param aOrder
+	 *        Either `SourceMapConsumer.GENERATED_ORDER` or
+	 *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
+	 *        iterate over the mappings sorted by the generated file's line/column
+	 *        order or the original's source/line/column order, respectively. Defaults to
+	 *        `SourceMapConsumer.GENERATED_ORDER`.
+	 */
+	SourceMapConsumer.prototype.eachMapping =
+	  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
+	    var context = aContext || null;
+	    var order = aOrder || SourceMapConsumer.GENERATED_ORDER;
+
+	    var mappings;
+	    switch (order) {
+	    case SourceMapConsumer.GENERATED_ORDER:
+	      mappings = this._generatedMappings;
+	      break;
+	    case SourceMapConsumer.ORIGINAL_ORDER:
+	      mappings = this._originalMappings;
+	      break;
+	    default:
+	      throw new Error("Unknown order of iteration.");
+	    }
+
+	    var sourceRoot = this.sourceRoot;
+	    mappings.map(function (mapping) {
+	      var source = mapping.source === null ? null : this._sources.at(mapping.source);
+	      source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);
+	      return {
+	        source: source,
+	        generatedLine: mapping.generatedLine,
+	        generatedColumn: mapping.generatedColumn,
+	        originalLine: mapping.originalLine,
+	        originalColumn: mapping.originalColumn,
+	        name: mapping.name === null ? null : this._names.at(mapping.name)
+	      };
+	    }, this).forEach(aCallback, context);
+	  };
+
+	/**
+	 * Returns all generated line and column information for the original source,
+	 * line, and column provided. If no column is provided, returns all mappings
+	 * corresponding to a either the line we are searching for or the next
+	 * closest line that has any mappings. Otherwise, returns all mappings
+	 * corresponding to the given line and either the column we are searching for
+	 * or the next closest column that has any offsets.
+	 *
+	 * The only argument is an object with the following properties:
+	 *
+	 *   - source: The filename of the original source.
+	 *   - line: The line number in the original source.  The line number is 1-based.
+	 *   - column: Optional. the column number in the original source.
+	 *    The column number is 0-based.
+	 *
+	 * and an array of objects is returned, each with the following properties:
+	 *
+	 *   - line: The line number in the generated source, or null.  The
+	 *    line number is 1-based.
+	 *   - column: The column number in the generated source, or null.
+	 *    The column number is 0-based.
+	 */
+	SourceMapConsumer.prototype.allGeneratedPositionsFor =
+	  function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
+	    var line = util.getArg(aArgs, 'line');
+
+	    // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping
+	    // returns the index of the closest mapping less than the needle. By
+	    // setting needle.originalColumn to 0, we thus find the last mapping for
+	    // the given line, provided such a mapping exists.
+	    var needle = {
+	      source: util.getArg(aArgs, 'source'),
+	      originalLine: line,
+	      originalColumn: util.getArg(aArgs, 'column', 0)
+	    };
+
+	    needle.source = this._findSourceIndex(needle.source);
+	    if (needle.source < 0) {
+	      return [];
+	    }
+
+	    var mappings = [];
+
+	    var index = this._findMapping(needle,
+	                                  this._originalMappings,
+	                                  "originalLine",
+	                                  "originalColumn",
+	                                  util.compareByOriginalPositions,
+	                                  binarySearch.LEAST_UPPER_BOUND);
+	    if (index >= 0) {
+	      var mapping = this._originalMappings[index];
+
+	      if (aArgs.column === undefined) {
+	        var originalLine = mapping.originalLine;
+
+	        // Iterate until either we run out of mappings, or we run into
+	        // a mapping for a different line than the one we found. Since
+	        // mappings are sorted, this is guaranteed to find all mappings for
+	        // the line we found.
+	        while (mapping && mapping.originalLine === originalLine) {
+	          mappings.push({
+	            line: util.getArg(mapping, 'generatedLine', null),
+	            column: util.getArg(mapping, 'generatedColumn', null),
+	            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
+	          });
+
+	          mapping = this._originalMappings[++index];
+	        }
+	      } else {
+	        var originalColumn = mapping.originalColumn;
+
+	        // Iterate until either we run out of mappings, or we run into
+	        // a mapping for a different line than the one we were searching for.
+	        // Since mappings are sorted, this is guaranteed to find all mappings for
+	        // the line we are searching for.
+	        while (mapping &&
+	               mapping.originalLine === line &&
+	               mapping.originalColumn == originalColumn) {
+	          mappings.push({
+	            line: util.getArg(mapping, 'generatedLine', null),
+	            column: util.getArg(mapping, 'generatedColumn', null),
+	            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
+	          });
+
+	          mapping = this._originalMappings[++index];
+	        }
+	      }
+	    }
+
+	    return mappings;
+	  };
+
+	exports.SourceMapConsumer = SourceMapConsumer;
+
+	/**
+	 * A BasicSourceMapConsumer instance represents a parsed source map which we can
+	 * query for information about the original file positions by giving it a file
+	 * position in the generated source.
+	 *
+	 * The first parameter is the raw source map (either as a JSON string, or
+	 * already parsed to an object). According to the spec, source maps have the
+	 * following attributes:
+	 *
+	 *   - version: Which version of the source map spec this map is following.
+	 *   - sources: An array of URLs to the original source files.
+	 *   - names: An array of identifiers which can be referrenced by individual mappings.
+	 *   - sourceRoot: Optional. The URL root from which all sources are relative.
+	 *   - sourcesContent: Optional. An array of contents of the original source files.
+	 *   - mappings: A string of base64 VLQs which contain the actual mappings.
+	 *   - file: Optional. The generated file this source map is associated with.
+	 *
+	 * Here is an example source map, taken from the source map spec[0]:
+	 *
+	 *     {
+	 *       version : 3,
+	 *       file: "out.js",
+	 *       sourceRoot : "",
+	 *       sources: ["foo.js", "bar.js"],
+	 *       names: ["src", "maps", "are", "fun"],
+	 *       mappings: "AA,AB;;ABCDE;"
+	 *     }
+	 *
+	 * The second parameter, if given, is a string whose value is the URL
+	 * at which the source map was found.  This URL is used to compute the
+	 * sources array.
+	 *
+	 * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
+	 */
+	function BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {
+	  var sourceMap = aSourceMap;
+	  if (typeof aSourceMap === 'string') {
+	    sourceMap = util.parseSourceMapInput(aSourceMap);
+	  }
+
+	  var version = util.getArg(sourceMap, 'version');
+	  var sources = util.getArg(sourceMap, 'sources');
+	  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
+	  // requires the array) to play nice here.
+	  var names = util.getArg(sourceMap, 'names', []);
+	  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);
+	  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);
+	  var mappings = util.getArg(sourceMap, 'mappings');
+	  var file = util.getArg(sourceMap, 'file', null);
+
+	  // Once again, Sass deviates from the spec and supplies the version as a
+	  // string rather than a number, so we use loose equality checking here.
+	  if (version != this._version) {
+	    throw new Error('Unsupported version: ' + version);
+	  }
+
+	  if (sourceRoot) {
+	    sourceRoot = util.normalize(sourceRoot);
+	  }
+
+	  sources = sources
+	    .map(String)
+	    // Some source maps produce relative source paths like "./foo.js" instead of
+	    // "foo.js".  Normalize these first so that future comparisons will succeed.
+	    // See bugzil.la/1090768.
+	    .map(util.normalize)
+	    // Always ensure that absolute sources are internally stored relative to
+	    // the source root, if the source root is absolute. Not doing this would
+	    // be particularly problematic when the source root is a prefix of the
+	    // source (valid, but why??). See github issue #199 and bugzil.la/1188982.
+	    .map(function (source) {
+	      return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)
+	        ? util.relative(sourceRoot, source)
+	        : source;
+	    });
+
+	  // Pass `true` below to allow duplicate names and sources. While source maps
+	  // are intended to be compressed and deduplicated, the TypeScript compiler
+	  // sometimes generates source maps with duplicates in them. See Github issue
+	  // #72 and bugzil.la/889492.
+	  this._names = ArraySet.fromArray(names.map(String), true);
+	  this._sources = ArraySet.fromArray(sources, true);
+
+	  this._absoluteSources = this._sources.toArray().map(function (s) {
+	    return util.computeSourceURL(sourceRoot, s, aSourceMapURL);
+	  });
+
+	  this.sourceRoot = sourceRoot;
+	  this.sourcesContent = sourcesContent;
+	  this._mappings = mappings;
+	  this._sourceMapURL = aSourceMapURL;
+	  this.file = file;
+	}
+
+	BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
+	BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;
+
+	/**
+	 * Utility function to find the index of a source.  Returns -1 if not
+	 * found.
+	 */
+	BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {
+	  var relativeSource = aSource;
+	  if (this.sourceRoot != null) {
+	    relativeSource = util.relative(this.sourceRoot, relativeSource);
+	  }
+
+	  if (this._sources.has(relativeSource)) {
+	    return this._sources.indexOf(relativeSource);
+	  }
+
+	  // Maybe aSource is an absolute URL as returned by |sources|.  In
+	  // this case we can't simply undo the transform.
+	  var i;
+	  for (i = 0; i < this._absoluteSources.length; ++i) {
+	    if (this._absoluteSources[i] == aSource) {
+	      return i;
+	    }
+	  }
+
+	  return -1;
+	};
+
+	/**
+	 * Create a BasicSourceMapConsumer from a SourceMapGenerator.
+	 *
+	 * @param SourceMapGenerator aSourceMap
+	 *        The source map that will be consumed.
+	 * @param String aSourceMapURL
+	 *        The URL at which the source map can be found (optional)
+	 * @returns BasicSourceMapConsumer
+	 */
+	BasicSourceMapConsumer.fromSourceMap =
+	  function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {
+	    var smc = Object.create(BasicSourceMapConsumer.prototype);
+
+	    var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
+	    var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
+	    smc.sourceRoot = aSourceMap._sourceRoot;
+	    smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),
+	                                                            smc.sourceRoot);
+	    smc.file = aSourceMap._file;
+	    smc._sourceMapURL = aSourceMapURL;
+	    smc._absoluteSources = smc._sources.toArray().map(function (s) {
+	      return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);
+	    });
+
+	    // Because we are modifying the entries (by converting string sources and
+	    // names to indices into the sources and names ArraySets), we have to make
+	    // a copy of the entry or else bad things happen. Shared mutable state
+	    // strikes again! See github issue #191.
+
+	    var generatedMappings = aSourceMap._mappings.toArray().slice();
+	    var destGeneratedMappings = smc.__generatedMappings = [];
+	    var destOriginalMappings = smc.__originalMappings = [];
+
+	    for (var i = 0, length = generatedMappings.length; i < length; i++) {
+	      var srcMapping = generatedMappings[i];
+	      var destMapping = new Mapping;
+	      destMapping.generatedLine = srcMapping.generatedLine;
+	      destMapping.generatedColumn = srcMapping.generatedColumn;
+
+	      if (srcMapping.source) {
+	        destMapping.source = sources.indexOf(srcMapping.source);
+	        destMapping.originalLine = srcMapping.originalLine;
+	        destMapping.originalColumn = srcMapping.originalColumn;
+
+	        if (srcMapping.name) {
+	          destMapping.name = names.indexOf(srcMapping.name);
+	        }
+
+	        destOriginalMappings.push(destMapping);
+	      }
+
+	      destGeneratedMappings.push(destMapping);
+	    }
+
+	    quickSort(smc.__originalMappings, util.compareByOriginalPositions);
+
+	    return smc;
+	  };
+
+	/**
+	 * The version of the source mapping spec that we are consuming.
+	 */
+	BasicSourceMapConsumer.prototype._version = 3;
+
+	/**
+	 * The list of original sources.
+	 */
+	Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {
+	  get: function () {
+	    return this._absoluteSources.slice();
+	  }
+	});
+
+	/**
+	 * Provide the JIT with a nice shape / hidden class.
+	 */
+	function Mapping() {
+	  this.generatedLine = 0;
+	  this.generatedColumn = 0;
+	  this.source = null;
+	  this.originalLine = null;
+	  this.originalColumn = null;
+	  this.name = null;
+	}
+
+	/**
+	 * Parse the mappings in a string in to a data structure which we can easily
+	 * query (the ordered arrays in the `this.__generatedMappings` and
+	 * `this.__originalMappings` properties).
+	 */
+	BasicSourceMapConsumer.prototype._parseMappings =
+	  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+	    var generatedLine = 1;
+	    var previousGeneratedColumn = 0;
+	    var previousOriginalLine = 0;
+	    var previousOriginalColumn = 0;
+	    var previousSource = 0;
+	    var previousName = 0;
+	    var length = aStr.length;
+	    var index = 0;
+	    var cachedSegments = {};
+	    var temp = {};
+	    var originalMappings = [];
+	    var generatedMappings = [];
+	    var mapping, str, segment, end, value;
+
+	    while (index < length) {
+	      if (aStr.charAt(index) === ';') {
+	        generatedLine++;
+	        index++;
+	        previousGeneratedColumn = 0;
+	      }
+	      else if (aStr.charAt(index) === ',') {
+	        index++;
+	      }
+	      else {
+	        mapping = new Mapping();
+	        mapping.generatedLine = generatedLine;
+
+	        // Because each offset is encoded relative to the previous one,
+	        // many segments often have the same encoding. We can exploit this
+	        // fact by caching the parsed variable length fields of each segment,
+	        // allowing us to avoid a second parse if we encounter the same
+	        // segment again.
+	        for (end = index; end < length; end++) {
+	          if (this._charIsMappingSeparator(aStr, end)) {
+	            break;
+	          }
+	        }
+	        str = aStr.slice(index, end);
+
+	        segment = cachedSegments[str];
+	        if (segment) {
+	          index += str.length;
+	        } else {
+	          segment = [];
+	          while (index < end) {
+	            base64VLQ.decode(aStr, index, temp);
+	            value = temp.value;
+	            index = temp.rest;
+	            segment.push(value);
+	          }
+
+	          if (segment.length === 2) {
+	            throw new Error('Found a source, but no line and column');
+	          }
+
+	          if (segment.length === 3) {
+	            throw new Error('Found a source and line, but no column');
+	          }
+
+	          cachedSegments[str] = segment;
+	        }
+
+	        // Generated column.
+	        mapping.generatedColumn = previousGeneratedColumn + segment[0];
+	        previousGeneratedColumn = mapping.generatedColumn;
+
+	        if (segment.length > 1) {
+	          // Original source.
+	          mapping.source = previousSource + segment[1];
+	          previousSource += segment[1];
+
+	          // Original line.
+	          mapping.originalLine = previousOriginalLine + segment[2];
+	          previousOriginalLine = mapping.originalLine;
+	          // Lines are stored 0-based
+	          mapping.originalLine += 1;
+
+	          // Original column.
+	          mapping.originalColumn = previousOriginalColumn + segment[3];
+	          previousOriginalColumn = mapping.originalColumn;
+
+	          if (segment.length > 4) {
+	            // Original name.
+	            mapping.name = previousName + segment[4];
+	            previousName += segment[4];
+	          }
+	        }
+
+	        generatedMappings.push(mapping);
+	        if (typeof mapping.originalLine === 'number') {
+	          originalMappings.push(mapping);
+	        }
+	      }
+	    }
+
+	    quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);
+	    this.__generatedMappings = generatedMappings;
+
+	    quickSort(originalMappings, util.compareByOriginalPositions);
+	    this.__originalMappings = originalMappings;
+	  };
+
+	/**
+	 * Find the mapping that best matches the hypothetical "needle" mapping that
+	 * we are searching for in the given "haystack" of mappings.
+	 */
+	BasicSourceMapConsumer.prototype._findMapping =
+	  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,
+	                                         aColumnName, aComparator, aBias) {
+	    // To return the position we are searching for, we must first find the
+	    // mapping for the given position and then return the opposite position it
+	    // points to. Because the mappings are sorted, we can use binary search to
+	    // find the best mapping.
+
+	    if (aNeedle[aLineName] <= 0) {
+	      throw new TypeError('Line must be greater than or equal to 1, got '
+	                          + aNeedle[aLineName]);
+	    }
+	    if (aNeedle[aColumnName] < 0) {
+	      throw new TypeError('Column must be greater than or equal to 0, got '
+	                          + aNeedle[aColumnName]);
+	    }
+
+	    return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
+	  };
+
+	/**
+	 * Compute the last column for each generated mapping. The last column is
+	 * inclusive.
+	 */
+	BasicSourceMapConsumer.prototype.computeColumnSpans =
+	  function SourceMapConsumer_computeColumnSpans() {
+	    for (var index = 0; index < this._generatedMappings.length; ++index) {
+	      var mapping = this._generatedMappings[index];
+
+	      // Mappings do not contain a field for the last generated columnt. We
+	      // can come up with an optimistic estimate, however, by assuming that
+	      // mappings are contiguous (i.e. given two consecutive mappings, the
+	      // first mapping ends where the second one starts).
+	      if (index + 1 < this._generatedMappings.length) {
+	        var nextMapping = this._generatedMappings[index + 1];
+
+	        if (mapping.generatedLine === nextMapping.generatedLine) {
+	          mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
+	          continue;
+	        }
+	      }
+
+	      // The last mapping for each line spans the entire line.
+	      mapping.lastGeneratedColumn = Infinity;
+	    }
+	  };
+
+	/**
+	 * Returns the original source, line, and column information for the generated
+	 * source's line and column positions provided. The only argument is an object
+	 * with the following properties:
+	 *
+	 *   - line: The line number in the generated source.  The line number
+	 *     is 1-based.
+	 *   - column: The column number in the generated source.  The column
+	 *     number is 0-based.
+	 *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
+	 *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
+	 *     closest element that is smaller than or greater than the one we are
+	 *     searching for, respectively, if the exact element cannot be found.
+	 *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
+	 *
+	 * and an object is returned with the following properties:
+	 *
+	 *   - source: The original source file, or null.
+	 *   - line: The line number in the original source, or null.  The
+	 *     line number is 1-based.
+	 *   - column: The column number in the original source, or null.  The
+	 *     column number is 0-based.
+	 *   - name: The original identifier, or null.
+	 */
+	BasicSourceMapConsumer.prototype.originalPositionFor =
+	  function SourceMapConsumer_originalPositionFor(aArgs) {
+	    var needle = {
+	      generatedLine: util.getArg(aArgs, 'line'),
+	      generatedColumn: util.getArg(aArgs, 'column')
+	    };
+
+	    var index = this._findMapping(
+	      needle,
+	      this._generatedMappings,
+	      "generatedLine",
+	      "generatedColumn",
+	      util.compareByGeneratedPositionsDeflated,
+	      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
+	    );
+
+	    if (index >= 0) {
+	      var mapping = this._generatedMappings[index];
+
+	      if (mapping.generatedLine === needle.generatedLine) {
+	        var source = util.getArg(mapping, 'source', null);
+	        if (source !== null) {
+	          source = this._sources.at(source);
+	          source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);
+	        }
+	        var name = util.getArg(mapping, 'name', null);
+	        if (name !== null) {
+	          name = this._names.at(name);
+	        }
+	        return {
+	          source: source,
+	          line: util.getArg(mapping, 'originalLine', null),
+	          column: util.getArg(mapping, 'originalColumn', null),
+	          name: name
+	        };
+	      }
+	    }
+
+	    return {
+	      source: null,
+	      line: null,
+	      column: null,
+	      name: null
+	    };
+	  };
+
+	/**
+	 * Return true if we have the source content for every source in the source
+	 * map, false otherwise.
+	 */
+	BasicSourceMapConsumer.prototype.hasContentsOfAllSources =
+	  function BasicSourceMapConsumer_hasContentsOfAllSources() {
+	    if (!this.sourcesContent) {
+	      return false;
+	    }
+	    return this.sourcesContent.length >= this._sources.size() &&
+	      !this.sourcesContent.some(function (sc) { return sc == null; });
+	  };
+
+	/**
+	 * Returns the original source content. The only argument is the url of the
+	 * original source file. Returns null if no original source content is
+	 * available.
+	 */
+	BasicSourceMapConsumer.prototype.sourceContentFor =
+	  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
+	    if (!this.sourcesContent) {
+	      return null;
+	    }
+
+	    var index = this._findSourceIndex(aSource);
+	    if (index >= 0) {
+	      return this.sourcesContent[index];
+	    }
+
+	    var relativeSource = aSource;
+	    if (this.sourceRoot != null) {
+	      relativeSource = util.relative(this.sourceRoot, relativeSource);
+	    }
+
+	    var url;
+	    if (this.sourceRoot != null
+	        && (url = util.urlParse(this.sourceRoot))) {
+	      // XXX: file:// URIs and absolute paths lead to unexpected behavior for
+	      // many users. We can help them out when they expect file:// URIs to
+	      // behave like it would if they were running a local HTTP server. See
+	      // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
+	      var fileUriAbsPath = relativeSource.replace(/^file:\/\//, "");
+	      if (url.scheme == "file"
+	          && this._sources.has(fileUriAbsPath)) {
+	        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]
+	      }
+
+	      if ((!url.path || url.path == "/")
+	          && this._sources.has("/" + relativeSource)) {
+	        return this.sourcesContent[this._sources.indexOf("/" + relativeSource)];
+	      }
+	    }
+
+	    // This function is used recursively from
+	    // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
+	    // don't want to throw if we can't find the source - we just want to
+	    // return null, so we provide a flag to exit gracefully.
+	    if (nullOnMissing) {
+	      return null;
+	    }
+	    else {
+	      throw new Error('"' + relativeSource + '" is not in the SourceMap.');
+	    }
+	  };
+
+	/**
+	 * Returns the generated line and column information for the original source,
+	 * line, and column positions provided. The only argument is an object with
+	 * the following properties:
+	 *
+	 *   - source: The filename of the original source.
+	 *   - line: The line number in the original source.  The line number
+	 *     is 1-based.
+	 *   - column: The column number in the original source.  The column
+	 *     number is 0-based.
+	 *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
+	 *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
+	 *     closest element that is smaller than or greater than the one we are
+	 *     searching for, respectively, if the exact element cannot be found.
+	 *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
+	 *
+	 * and an object is returned with the following properties:
+	 *
+	 *   - line: The line number in the generated source, or null.  The
+	 *     line number is 1-based.
+	 *   - column: The column number in the generated source, or null.
+	 *     The column number is 0-based.
+	 */
+	BasicSourceMapConsumer.prototype.generatedPositionFor =
+	  function SourceMapConsumer_generatedPositionFor(aArgs) {
+	    var source = util.getArg(aArgs, 'source');
+	    source = this._findSourceIndex(source);
+	    if (source < 0) {
+	      return {
+	        line: null,
+	        column: null,
+	        lastColumn: null
+	      };
+	    }
+
+	    var needle = {
+	      source: source,
+	      originalLine: util.getArg(aArgs, 'line'),
+	      originalColumn: util.getArg(aArgs, 'column')
+	    };
+
+	    var index = this._findMapping(
+	      needle,
+	      this._originalMappings,
+	      "originalLine",
+	      "originalColumn",
+	      util.compareByOriginalPositions,
+	      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
+	    );
+
+	    if (index >= 0) {
+	      var mapping = this._originalMappings[index];
+
+	      if (mapping.source === needle.source) {
+	        return {
+	          line: util.getArg(mapping, 'generatedLine', null),
+	          column: util.getArg(mapping, 'generatedColumn', null),
+	          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
+	        };
+	      }
+	    }
+
+	    return {
+	      line: null,
+	      column: null,
+	      lastColumn: null
+	    };
+	  };
+
+	exports.BasicSourceMapConsumer = BasicSourceMapConsumer;
+
+	/**
+	 * An IndexedSourceMapConsumer instance represents a parsed source map which
+	 * we can query for information. It differs from BasicSourceMapConsumer in
+	 * that it takes "indexed" source maps (i.e. ones with a "sections" field) as
+	 * input.
+	 *
+	 * The first parameter is a raw source map (either as a JSON string, or already
+	 * parsed to an object). According to the spec for indexed source maps, they
+	 * have the following attributes:
+	 *
+	 *   - version: Which version of the source map spec this map is following.
+	 *   - file: Optional. The generated file this source map is associated with.
+	 *   - sections: A list of section definitions.
+	 *
+	 * Each value under the "sections" field has two fields:
+	 *   - offset: The offset into the original specified at which this section
+	 *       begins to apply, defined as an object with a "line" and "column"
+	 *       field.
+	 *   - map: A source map definition. This source map could also be indexed,
+	 *       but doesn't have to be.
+	 *
+	 * Instead of the "map" field, it's also possible to have a "url" field
+	 * specifying a URL to retrieve a source map from, but that's currently
+	 * unsupported.
+	 *
+	 * Here's an example source map, taken from the source map spec[0], but
+	 * modified to omit a section which uses the "url" field.
+	 *
+	 *  {
+	 *    version : 3,
+	 *    file: "app.js",
+	 *    sections: [{
+	 *      offset: {line:100, column:10},
+	 *      map: {
+	 *        version : 3,
+	 *        file: "section.js",
+	 *        sources: ["foo.js", "bar.js"],
+	 *        names: ["src", "maps", "are", "fun"],
+	 *        mappings: "AAAA,E;;ABCDE;"
+	 *      }
+	 *    }],
+	 *  }
+	 *
+	 * The second parameter, if given, is a string whose value is the URL
+	 * at which the source map was found.  This URL is used to compute the
+	 * sources array.
+	 *
+	 * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
+	 */
+	function IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {
+	  var sourceMap = aSourceMap;
+	  if (typeof aSourceMap === 'string') {
+	    sourceMap = util.parseSourceMapInput(aSourceMap);
+	  }
+
+	  var version = util.getArg(sourceMap, 'version');
+	  var sections = util.getArg(sourceMap, 'sections');
+
+	  if (version != this._version) {
+	    throw new Error('Unsupported version: ' + version);
+	  }
+
+	  this._sources = new ArraySet();
+	  this._names = new ArraySet();
+
+	  var lastOffset = {
+	    line: -1,
+	    column: 0
+	  };
+	  this._sections = sections.map(function (s) {
+	    if (s.url) {
+	      // The url field will require support for asynchronicity.
+	      // See https://github.com/mozilla/source-map/issues/16
+	      throw new Error('Support for url field in sections not implemented.');
+	    }
+	    var offset = util.getArg(s, 'offset');
+	    var offsetLine = util.getArg(offset, 'line');
+	    var offsetColumn = util.getArg(offset, 'column');
+
+	    if (offsetLine < lastOffset.line ||
+	        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
+	      throw new Error('Section offsets must be ordered and non-overlapping.');
+	    }
+	    lastOffset = offset;
+
+	    return {
+	      generatedOffset: {
+	        // The offset fields are 0-based, but we use 1-based indices when
+	        // encoding/decoding from VLQ.
+	        generatedLine: offsetLine + 1,
+	        generatedColumn: offsetColumn + 1
+	      },
+	      consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)
+	    }
+	  });
+	}
+
+	IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
+	IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;
+
+	/**
+	 * The version of the source mapping spec that we are consuming.
+	 */
+	IndexedSourceMapConsumer.prototype._version = 3;
+
+	/**
+	 * The list of original sources.
+	 */
+	Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {
+	  get: function () {
+	    var sources = [];
+	    for (var i = 0; i < this._sections.length; i++) {
+	      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
+	        sources.push(this._sections[i].consumer.sources[j]);
+	      }
+	    }
+	    return sources;
+	  }
+	});
+
+	/**
+	 * Returns the original source, line, and column information for the generated
+	 * source's line and column positions provided. The only argument is an object
+	 * with the following properties:
+	 *
+	 *   - line: The line number in the generated source.  The line number
+	 *     is 1-based.
+	 *   - column: The column number in the generated source.  The column
+	 *     number is 0-based.
+	 *
+	 * and an object is returned with the following properties:
+	 *
+	 *   - source: The original source file, or null.
+	 *   - line: The line number in the original source, or null.  The
+	 *     line number is 1-based.
+	 *   - column: The column number in the original source, or null.  The
+	 *     column number is 0-based.
+	 *   - name: The original identifier, or null.
+	 */
+	IndexedSourceMapConsumer.prototype.originalPositionFor =
+	  function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
+	    var needle = {
+	      generatedLine: util.getArg(aArgs, 'line'),
+	      generatedColumn: util.getArg(aArgs, 'column')
+	    };
+
+	    // Find the section containing the generated position we're trying to map
+	    // to an original position.
+	    var sectionIndex = binarySearch.search(needle, this._sections,
+	      function(needle, section) {
+	        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;
+	        if (cmp) {
+	          return cmp;
+	        }
+
+	        return (needle.generatedColumn -
+	                section.generatedOffset.generatedColumn);
+	      });
+	    var section = this._sections[sectionIndex];
+
+	    if (!section) {
+	      return {
+	        source: null,
+	        line: null,
+	        column: null,
+	        name: null
+	      };
+	    }
+
+	    return section.consumer.originalPositionFor({
+	      line: needle.generatedLine -
+	        (section.generatedOffset.generatedLine - 1),
+	      column: needle.generatedColumn -
+	        (section.generatedOffset.generatedLine === needle.generatedLine
+	         ? section.generatedOffset.generatedColumn - 1
+	         : 0),
+	      bias: aArgs.bias
+	    });
+	  };
+
+	/**
+	 * Return true if we have the source content for every source in the source
+	 * map, false otherwise.
+	 */
+	IndexedSourceMapConsumer.prototype.hasContentsOfAllSources =
+	  function IndexedSourceMapConsumer_hasContentsOfAllSources() {
+	    return this._sections.every(function (s) {
+	      return s.consumer.hasContentsOfAllSources();
+	    });
+	  };
+
+	/**
+	 * Returns the original source content. The only argument is the url of the
+	 * original source file. Returns null if no original source content is
+	 * available.
+	 */
+	IndexedSourceMapConsumer.prototype.sourceContentFor =
+	  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
+	    for (var i = 0; i < this._sections.length; i++) {
+	      var section = this._sections[i];
+
+	      var content = section.consumer.sourceContentFor(aSource, true);
+	      if (content) {
+	        return content;
+	      }
+	    }
+	    if (nullOnMissing) {
+	      return null;
+	    }
+	    else {
+	      throw new Error('"' + aSource + '" is not in the SourceMap.');
+	    }
+	  };
+
+	/**
+	 * Returns the generated line and column information for the original source,
+	 * line, and column positions provided. The only argument is an object with
+	 * the following properties:
+	 *
+	 *   - source: The filename of the original source.
+	 *   - line: The line number in the original source.  The line number
+	 *     is 1-based.
+	 *   - column: The column number in the original source.  The column
+	 *     number is 0-based.
+	 *
+	 * and an object is returned with the following properties:
+	 *
+	 *   - line: The line number in the generated source, or null.  The
+	 *     line number is 1-based. 
+	 *   - column: The column number in the generated source, or null.
+	 *     The column number is 0-based.
+	 */
+	IndexedSourceMapConsumer.prototype.generatedPositionFor =
+	  function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
+	    for (var i = 0; i < this._sections.length; i++) {
+	      var section = this._sections[i];
+
+	      // Only consider this section if the requested source is in the list of
+	      // sources of the consumer.
+	      if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {
+	        continue;
+	      }
+	      var generatedPosition = section.consumer.generatedPositionFor(aArgs);
+	      if (generatedPosition) {
+	        var ret = {
+	          line: generatedPosition.line +
+	            (section.generatedOffset.generatedLine - 1),
+	          column: generatedPosition.column +
+	            (section.generatedOffset.generatedLine === generatedPosition.line
+	             ? section.generatedOffset.generatedColumn - 1
+	             : 0)
+	        };
+	        return ret;
+	      }
+	    }
+
+	    return {
+	      line: null,
+	      column: null
+	    };
+	  };
+
+	/**
+	 * Parse the mappings in a string in to a data structure which we can easily
+	 * query (the ordered arrays in the `this.__generatedMappings` and
+	 * `this.__originalMappings` properties).
+	 */
+	IndexedSourceMapConsumer.prototype._parseMappings =
+	  function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+	    this.__generatedMappings = [];
+	    this.__originalMappings = [];
+	    for (var i = 0; i < this._sections.length; i++) {
+	      var section = this._sections[i];
+	      var sectionMappings = section.consumer._generatedMappings;
+	      for (var j = 0; j < sectionMappings.length; j++) {
+	        var mapping = sectionMappings[j];
+
+	        var source = section.consumer._sources.at(mapping.source);
+	        source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);
+	        this._sources.add(source);
+	        source = this._sources.indexOf(source);
+
+	        var name = null;
+	        if (mapping.name) {
+	          name = section.consumer._names.at(mapping.name);
+	          this._names.add(name);
+	          name = this._names.indexOf(name);
+	        }
+
+	        // The mappings coming from the consumer for the section have
+	        // generated positions relative to the start of the section, so we
+	        // need to offset them to be relative to the start of the concatenated
+	        // generated file.
+	        var adjustedMapping = {
+	          source: source,
+	          generatedLine: mapping.generatedLine +
+	            (section.generatedOffset.generatedLine - 1),
+	          generatedColumn: mapping.generatedColumn +
+	            (section.generatedOffset.generatedLine === mapping.generatedLine
+	            ? section.generatedOffset.generatedColumn - 1
+	            : 0),
+	          originalLine: mapping.originalLine,
+	          originalColumn: mapping.originalColumn,
+	          name: name
+	        };
+
+	        this.__generatedMappings.push(adjustedMapping);
+	        if (typeof adjustedMapping.originalLine === 'number') {
+	          this.__originalMappings.push(adjustedMapping);
+	        }
+	      }
+	    }
+
+	    quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);
+	    quickSort(this.__originalMappings, util.compareByOriginalPositions);
+	  };
+
+	exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
+
+
+/***/ }),
+/* 8 */
+/***/ (function(module, exports) {
+
+	/* -*- Mode: js; js-indent-level: 2; -*- */
+	/*
+	 * Copyright 2011 Mozilla Foundation and contributors
+	 * Licensed under the New BSD license. See LICENSE or:
+	 * http://opensource.org/licenses/BSD-3-Clause
+	 */
+
+	exports.GREATEST_LOWER_BOUND = 1;
+	exports.LEAST_UPPER_BOUND = 2;
+
+	/**
+	 * Recursive implementation of binary search.
+	 *
+	 * @param aLow Indices here and lower do not contain the needle.
+	 * @param aHigh Indices here and higher do not contain the needle.
+	 * @param aNeedle The element being searched for.
+	 * @param aHaystack The non-empty array being searched.
+	 * @param aCompare Function which takes two elements and returns -1, 0, or 1.
+	 * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
+	 *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
+	 *     closest element that is smaller than or greater than the one we are
+	 *     searching for, respectively, if the exact element cannot be found.
+	 */
+	function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
+	  // This function terminates when one of the following is true:
+	  //
+	  //   1. We find the exact element we are looking for.
+	  //
+	  //   2. We did not find the exact element, but we can return the index of
+	  //      the next-closest element.
+	  //
+	  //   3. We did not find the exact element, and there is no next-closest
+	  //      element than the one we are searching for, so we return -1.
+	  var mid = Math.floor((aHigh - aLow) / 2) + aLow;
+	  var cmp = aCompare(aNeedle, aHaystack[mid], true);
+	  if (cmp === 0) {
+	    // Found the element we are looking for.
+	    return mid;
+	  }
+	  else if (cmp > 0) {
+	    // Our needle is greater than aHaystack[mid].
+	    if (aHigh - mid > 1) {
+	      // The element is in the upper half.
+	      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
+	    }
+
+	    // The exact needle element was not found in this haystack. Determine if
+	    // we are in termination case (3) or (2) and return the appropriate thing.
+	    if (aBias == exports.LEAST_UPPER_BOUND) {
+	      return aHigh < aHaystack.length ? aHigh : -1;
+	    } else {
+	      return mid;
+	    }
+	  }
+	  else {
+	    // Our needle is less than aHaystack[mid].
+	    if (mid - aLow > 1) {
+	      // The element is in the lower half.
+	      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
+	    }
+
+	    // we are in termination case (3) or (2) and return the appropriate thing.
+	    if (aBias == exports.LEAST_UPPER_BOUND) {
+	      return mid;
+	    } else {
+	      return aLow < 0 ? -1 : aLow;
+	    }
+	  }
+	}
+
+	/**
+	 * This is an implementation of binary search which will always try and return
+	 * the index of the closest element if there is no exact hit. This is because
+	 * mappings between original and generated line/col pairs are single points,
+	 * and there is an implicit region between each of them, so a miss just means
+	 * that you aren't on the very start of a region.
+	 *
+	 * @param aNeedle The element you are looking for.
+	 * @param aHaystack The array that is being searched.
+	 * @param aCompare A function which takes the needle and an element in the
+	 *     array and returns -1, 0, or 1 depending on whether the needle is less
+	 *     than, equal to, or greater than the element, respectively.
+	 * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
+	 *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
+	 *     closest element that is smaller than or greater than the one we are
+	 *     searching for, respectively, if the exact element cannot be found.
+	 *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
+	 */
+	exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
+	  if (aHaystack.length === 0) {
+	    return -1;
+	  }
+
+	  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
+	                              aCompare, aBias || exports.GREATEST_LOWER_BOUND);
+	  if (index < 0) {
+	    return -1;
+	  }
+
+	  // We have found either the exact element, or the next-closest element than
+	  // the one we are searching for. However, there may be more than one such
+	  // element. Make sure we always return the smallest of these.
+	  while (index - 1 >= 0) {
+	    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
+	      break;
+	    }
+	    --index;
+	  }
+
+	  return index;
+	};
+
+
+/***/ }),
+/* 9 */
+/***/ (function(module, exports) {
+
+	/* -*- Mode: js; js-indent-level: 2; -*- */
+	/*
+	 * Copyright 2011 Mozilla Foundation and contributors
+	 * Licensed under the New BSD license. See LICENSE or:
+	 * http://opensource.org/licenses/BSD-3-Clause
+	 */
+
+	// It turns out that some (most?) JavaScript engines don't self-host
+	// `Array.prototype.sort`. This makes sense because C++ will likely remain
+	// faster than JS when doing raw CPU-intensive sorting. However, when using a
+	// custom comparator function, calling back and forth between the VM's C++ and
+	// JIT'd JS is rather slow *and* loses JIT type information, resulting in
+	// worse generated code for the comparator function than would be optimal. In
+	// fact, when sorting with a comparator, these costs outweigh the benefits of
+	// sorting in C++. By using our own JS-implemented Quick Sort (below), we get
+	// a ~3500ms mean speed-up in `bench/bench.html`.
+
+	/**
+	 * Swap the elements indexed by `x` and `y` in the array `ary`.
+	 *
+	 * @param {Array} ary
+	 *        The array.
+	 * @param {Number} x
+	 *        The index of the first item.
+	 * @param {Number} y
+	 *        The index of the second item.
+	 */
+	function swap(ary, x, y) {
+	  var temp = ary[x];
+	  ary[x] = ary[y];
+	  ary[y] = temp;
+	}
+
+	/**
+	 * Returns a random integer within the range `low .. high` inclusive.
+	 *
+	 * @param {Number} low
+	 *        The lower bound on the range.
+	 * @param {Number} high
+	 *        The upper bound on the range.
+	 */
+	function randomIntInRange(low, high) {
+	  return Math.round(low + (Math.random() * (high - low)));
+	}
+
+	/**
+	 * The Quick Sort algorithm.
+	 *
+	 * @param {Array} ary
+	 *        An array to sort.
+	 * @param {function} comparator
+	 *        Function to use to compare two items.
+	 * @param {Number} p
+	 *        Start index of the array
+	 * @param {Number} r
+	 *        End index of the array
+	 */
+	function doQuickSort(ary, comparator, p, r) {
+	  // If our lower bound is less than our upper bound, we (1) partition the
+	  // array into two pieces and (2) recurse on each half. If it is not, this is
+	  // the empty array and our base case.
+
+	  if (p < r) {
+	    // (1) Partitioning.
+	    //
+	    // The partitioning chooses a pivot between `p` and `r` and moves all
+	    // elements that are less than or equal to the pivot to the before it, and
+	    // all the elements that are greater than it after it. The effect is that
+	    // once partition is done, the pivot is in the exact place it will be when
+	    // the array is put in sorted order, and it will not need to be moved
+	    // again. This runs in O(n) time.
+
+	    // Always choose a random pivot so that an input array which is reverse
+	    // sorted does not cause O(n^2) running time.
+	    var pivotIndex = randomIntInRange(p, r);
+	    var i = p - 1;
+
+	    swap(ary, pivotIndex, r);
+	    var pivot = ary[r];
+
+	    // Immediately after `j` is incremented in this loop, the following hold
+	    // true:
+	    //
+	    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.
+	    //
+	    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.
+	    for (var j = p; j < r; j++) {
+	      if (comparator(ary[j], pivot) <= 0) {
+	        i += 1;
+	        swap(ary, i, j);
+	      }
+	    }
+
+	    swap(ary, i + 1, j);
+	    var q = i + 1;
+
+	    // (2) Recurse on each half.
+
+	    doQuickSort(ary, comparator, p, q - 1);
+	    doQuickSort(ary, comparator, q + 1, r);
+	  }
+	}
+
+	/**
+	 * Sort the given array in-place with the given comparator function.
+	 *
+	 * @param {Array} ary
+	 *        An array to sort.
+	 * @param {function} comparator
+	 *        Function to use to compare two items.
+	 */
+	exports.quickSort = function (ary, comparator) {
+	  doQuickSort(ary, comparator, 0, ary.length - 1);
+	};
+
+
+/***/ }),
+/* 10 */
+/***/ (function(module, exports, __webpack_require__) {
+
+	/* -*- Mode: js; js-indent-level: 2; -*- */
+	/*
+	 * Copyright 2011 Mozilla Foundation and contributors
+	 * Licensed under the New BSD license. See LICENSE or:
+	 * http://opensource.org/licenses/BSD-3-Clause
+	 */
+
+	var SourceMapGenerator = __webpack_require__(1).SourceMapGenerator;
+	var util = __webpack_require__(4);
+
+	// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
+	// operating systems these days (capturing the result).
+	var REGEX_NEWLINE = /(\r?\n)/;
+
+	// Newline character code for charCodeAt() comparisons
+	var NEWLINE_CODE = 10;
+
+	// Private symbol for identifying `SourceNode`s when multiple versions of
+	// the source-map library are loaded. This MUST NOT CHANGE across
+	// versions!
+	var isSourceNode = "$$$isSourceNode$$$";
+
+	/**
+	 * SourceNodes provide a way to abstract over interpolating/concatenating
+	 * snippets of generated JavaScript source code while maintaining the line and
+	 * column information associated with the original source code.
+	 *
+	 * @param aLine The original line number.
+	 * @param aColumn The original column number.
+	 * @param aSource The original source's filename.
+	 * @param aChunks Optional. An array of strings which are snippets of
+	 *        generated JS, or other SourceNodes.
+	 * @param aName The original identifier.
+	 */
+	function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
+	  this.children = [];
+	  this.sourceContents = {};
+	  this.line = aLine == null ? null : aLine;
+	  this.column = aColumn == null ? null : aColumn;
+	  this.source = aSource == null ? null : aSource;
+	  this.name = aName == null ? null : aName;
+	  this[isSourceNode] = true;
+	  if (aChunks != null) this.add(aChunks);
+	}
+
+	/**
+	 * Creates a SourceNode from generated code and a SourceMapConsumer.
+	 *
+	 * @param aGeneratedCode The generated code
+	 * @param aSourceMapConsumer The SourceMap for the generated code
+	 * @param aRelativePath Optional. The path that relative sources in the
+	 *        SourceMapConsumer should be relative to.
+	 */
+	SourceNode.fromStringWithSourceMap =
+	  function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
+	    // The SourceNode we want to fill with the generated code
+	    // and the SourceMap
+	    var node = new SourceNode();
+
+	    // All even indices of this array are one line of the generated code,
+	    // while all odd indices are the newlines between two adjacent lines
+	    // (since `REGEX_NEWLINE` captures its match).
+	    // Processed fragments are accessed by calling `shiftNextLine`.
+	    var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
+	    var remainingLinesIndex = 0;
+	    var shiftNextLine = function() {
+	      var lineContents = getNextLine();
+	      // The last line of a file might not have a newline.
+	      var newLine = getNextLine() || "";
+	      return lineContents + newLine;
+
+	      function getNextLine() {
+	        return remainingLinesIndex < remainingLines.length ?
+	            remainingLines[remainingLinesIndex++] : undefined;
+	      }
+	    };
+
+	    // We need to remember the position of "remainingLines"
+	    var lastGeneratedLine = 1, lastGeneratedColumn = 0;
+
+	    // The generate SourceNodes we need a code range.
+	    // To extract it current and last mapping is used.
+	    // Here we store the last mapping.
+	    var lastMapping = null;
+
+	    aSourceMapConsumer.eachMapping(function (mapping) {
+	      if (lastMapping !== null) {
+	        // We add the code from "lastMapping" to "mapping":
+	        // First check if there is a new line in between.
+	        if (lastGeneratedLine < mapping.generatedLine) {
+	          // Associate first line with "lastMapping"
+	          addMappingWithCode(lastMapping, shiftNextLine());
+	          lastGeneratedLine++;
+	          lastGeneratedColumn = 0;
+	          // The remaining code is added without mapping
+	        } else {
+	          // There is no new line in between.
+	          // Associate the code between "lastGeneratedColumn" and
+	          // "mapping.generatedColumn" with "lastMapping"
+	          var nextLine = remainingLines[remainingLinesIndex] || '';
+	          var code = nextLine.substr(0, mapping.generatedColumn -
+	                                        lastGeneratedColumn);
+	          remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -
+	                                              lastGeneratedColumn);
+	          lastGeneratedColumn = mapping.generatedColumn;
+	          addMappingWithCode(lastMapping, code);
+	          // No more remaining code, continue
+	          lastMapping = mapping;
+	          return;
+	        }
+	      }
+	      // We add the generated code until the first mapping
+	      // to the SourceNode without any mapping.
+	      // Each line is added as separate string.
+	      while (lastGeneratedLine < mapping.generatedLine) {
+	        node.add(shiftNextLine());
+	        lastGeneratedLine++;
+	      }
+	      if (lastGeneratedColumn < mapping.generatedColumn) {
+	        var nextLine = remainingLines[remainingLinesIndex] || '';
+	        node.add(nextLine.substr(0, mapping.generatedColumn));
+	        remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);
+	        lastGeneratedColumn = mapping.generatedColumn;
+	      }
+	      lastMapping = mapping;
+	    }, this);
+	    // We have processed all mappings.
+	    if (remainingLinesIndex < remainingLines.length) {
+	      if (lastMapping) {
+	        // Associate the remaining code in the current line with "lastMapping"
+	        addMappingWithCode(lastMapping, shiftNextLine());
+	      }
+	      // and add the remaining lines without any mapping
+	      node.add(remainingLines.splice(remainingLinesIndex).join(""));
+	    }
+
+	    // Copy sourcesContent into SourceNode
+	    aSourceMapConsumer.sources.forEach(function (sourceFile) {
+	      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+	      if (content != null) {
+	        if (aRelativePath != null) {
+	          sourceFile = util.join(aRelativePath, sourceFile);
+	        }
+	        node.setSourceContent(sourceFile, content);
+	      }
+	    });
+
+	    return node;
+
+	    function addMappingWithCode(mapping, code) {
+	      if (mapping === null || mapping.source === undefined) {
+	        node.add(code);
+	      } else {
+	        var source = aRelativePath
+	          ? util.join(aRelativePath, mapping.source)
+	          : mapping.source;
+	        node.add(new SourceNode(mapping.originalLine,
+	                                mapping.originalColumn,
+	                                source,
+	                                code,
+	                                mapping.name));
+	      }
+	    }
+	  };
+
+	/**
+	 * Add a chunk of generated JS to this source node.
+	 *
+	 * @param aChunk A string snippet of generated JS code, another instance of
+	 *        SourceNode, or an array where each member is one of those things.
+	 */
+	SourceNode.prototype.add = function SourceNode_add(aChunk) {
+	  if (Array.isArray(aChunk)) {
+	    aChunk.forEach(function (chunk) {
+	      this.add(chunk);
+	    }, this);
+	  }
+	  else if (aChunk[isSourceNode] || typeof aChunk === "string") {
+	    if (aChunk) {
+	      this.children.push(aChunk);
+	    }
+	  }
+	  else {
+	    throw new TypeError(
+	      "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
+	    );
+	  }
+	  return this;
+	};
+
+	/**
+	 * Add a chunk of generated JS to the beginning of this source node.
+	 *
+	 * @param aChunk A string snippet of generated JS code, another instance of
+	 *        SourceNode, or an array where each member is one of those things.
+	 */
+	SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
+	  if (Array.isArray(aChunk)) {
+	    for (var i = aChunk.length-1; i >= 0; i--) {
+	      this.prepend(aChunk[i]);
+	    }
+	  }
+	  else if (aChunk[isSourceNode] || typeof aChunk === "string") {
+	    this.children.unshift(aChunk);
+	  }
+	  else {
+	    throw new TypeError(
+	      "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
+	    );
+	  }
+	  return this;
+	};
+
+	/**
+	 * Walk over the tree of JS snippets in this node and its children. The
+	 * walking function is called once for each snippet of JS and is passed that
+	 * snippet and the its original associated source's line/column location.
+	 *
+	 * @param aFn The traversal function.
+	 */
+	SourceNode.prototype.walk = function SourceNode_walk(aFn) {
+	  var chunk;
+	  for (var i = 0, len = this.children.length; i < len; i++) {
+	    chunk = this.children[i];
+	    if (chunk[isSourceNode]) {
+	      chunk.walk(aFn);
+	    }
+	    else {
+	      if (chunk !== '') {
+	        aFn(chunk, { source: this.source,
+	                     line: this.line,
+	                     column: this.column,
+	                     name: this.name });
+	      }
+	    }
+	  }
+	};
+
+	/**
+	 * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
+	 * each of `this.children`.
+	 *
+	 * @param aSep The separator.
+	 */
+	SourceNode.prototype.join = function SourceNode_join(aSep) {
+	  var newChildren;
+	  var i;
+	  var len = this.children.length;
+	  if (len > 0) {
+	    newChildren = [];
+	    for (i = 0; i < len-1; i++) {
+	      newChildren.push(this.children[i]);
+	      newChildren.push(aSep);
+	    }
+	    newChildren.push(this.children[i]);
+	    this.children = newChildren;
+	  }
+	  return this;
+	};
+
+	/**
+	 * Call String.prototype.replace on the very right-most source snippet. Useful
+	 * for trimming whitespace from the end of a source node, etc.
+	 *
+	 * @param aPattern The pattern to replace.
+	 * @param aReplacement The thing to replace the pattern with.
+	 */
+	SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
+	  var lastChild = this.children[this.children.length - 1];
+	  if (lastChild[isSourceNode]) {
+	    lastChild.replaceRight(aPattern, aReplacement);
+	  }
+	  else if (typeof lastChild === 'string') {
+	    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
+	  }
+	  else {
+	    this.children.push(''.replace(aPattern, aReplacement));
+	  }
+	  return this;
+	};
+
+	/**
+	 * Set the source content for a source file. This will be added to the SourceMapGenerator
+	 * in the sourcesContent field.
+	 *
+	 * @param aSourceFile The filename of the source file
+	 * @param aSourceContent The content of the source file
+	 */
+	SourceNode.prototype.setSourceContent =
+	  function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
+	    this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
+	  };
+
+	/**
+	 * Walk over the tree of SourceNodes. The walking function is called for each
+	 * source file content and is passed the filename and source content.
+	 *
+	 * @param aFn The traversal function.
+	 */
+	SourceNode.prototype.walkSourceContents =
+	  function SourceNode_walkSourceContents(aFn) {
+	    for (var i = 0, len = this.children.length; i < len; i++) {
+	      if (this.children[i][isSourceNode]) {
+	        this.children[i].walkSourceContents(aFn);
+	      }
+	    }
+
+	    var sources = Object.keys(this.sourceContents);
+	    for (var i = 0, len = sources.length; i < len; i++) {
+	      aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
+	    }
+	  };
+
+	/**
+	 * Return the string representation of this source node. Walks over the tree
+	 * and concatenates all the various snippets together to one string.
+	 */
+	SourceNode.prototype.toString = function SourceNode_toString() {
+	  var str = "";
+	  this.walk(function (chunk) {
+	    str += chunk;
+	  });
+	  return str;
+	};
+
+	/**
+	 * Returns the string representation of this source node along with a source
+	 * map.
+	 */
+	SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
+	  var generated = {
+	    code: "",
+	    line: 1,
+	    column: 0
+	  };
+	  var map = new SourceMapGenerator(aArgs);
+	  var sourceMappingActive = false;
+	  var lastOriginalSource = null;
+	  var lastOriginalLine = null;
+	  var lastOriginalColumn = null;
+	  var lastOriginalName = null;
+	  this.walk(function (chunk, original) {
+	    generated.code += chunk;
+	    if (original.source !== null
+	        && original.line !== null
+	        && original.column !== null) {
+	      if(lastOriginalSource !== original.source
+	         || lastOriginalLine !== original.line
+	         || lastOriginalColumn !== original.column
+	         || lastOriginalName !== original.name) {
+	        map.addMapping({
+	          source: original.source,
+	          original: {
+	            line: original.line,
+	            column: original.column
+	          },
+	          generated: {
+	            line: generated.line,
+	            column: generated.column
+	          },
+	          name: original.name
+	        });
+	      }
+	      lastOriginalSource = original.source;
+	      lastOriginalLine = original.line;
+	      lastOriginalColumn = original.column;
+	      lastOriginalName = original.name;
+	      sourceMappingActive = true;
+	    } else if (sourceMappingActive) {
+	      map.addMapping({
+	        generated: {
+	          line: generated.line,
+	          column: generated.column
+	        }
+	      });
+	      lastOriginalSource = null;
+	      sourceMappingActive = false;
+	    }
+	    for (var idx = 0, length = chunk.length; idx < length; idx++) {
+	      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
+	        generated.line++;
+	        generated.column = 0;
+	        // Mappings end at eol
+	        if (idx + 1 === length) {
+	          lastOriginalSource = null;
+	          sourceMappingActive = false;
+	        } else if (sourceMappingActive) {
+	          map.addMapping({
+	            source: original.source,
+	            original: {
+	              line: original.line,
+	              column: original.column
+	            },
+	            generated: {
+	              line: generated.line,
+	              column: generated.column
+	            },
+	            name: original.name
+	          });
+	        }
+	      } else {
+	        generated.column++;
+	      }
+	    }
+	  });
+	  this.walkSourceContents(function (sourceFile, sourceContent) {
+	    map.setSourceContent(sourceFile, sourceContent);
+	  });
+
+	  return { code: generated.code, map: map };
+	};
+
+	exports.SourceNode = SourceNode;
+
+
+/***/ })
+/******/ ])
+});
+;
\ No newline at end of file
diff --git a/node_modules/terser/node_modules/source-map/dist/source-map.min.js b/node_modules/terser/node_modules/source-map/dist/source-map.min.js
new file mode 100644
index 0000000..c7c72da
--- /dev/null
+++ b/node_modules/terser/node_modules/source-map/dist/source-map.min.js
@@ -0,0 +1,2 @@
+!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.sourceMap=n():e.sourceMap=n()}(this,function(){return function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p="",n(0)}([function(e,n,r){n.SourceMapGenerator=r(1).SourceMapGenerator,n.SourceMapConsumer=r(7).SourceMapConsumer,n.SourceNode=r(10).SourceNode},function(e,n,r){function t(e){e||(e={}),this._file=i.getArg(e,"file",null),this._sourceRoot=i.getArg(e,"sourceRoot",null),this._skipValidation=i.getArg(e,"skipValidation",!1),this._sources=new s,this._names=new s,this._mappings=new a,this._sourcesContents=null}var o=r(2),i=r(4),s=r(5).ArraySet,a=r(6).MappingList;t.prototype._version=3,t.fromSourceMap=function(e){var n=e.sourceRoot,r=new t({file:e.file,sourceRoot:n});return e.eachMapping(function(e){var t={generated:{line:e.generatedLine,column:e.generatedColumn}};null!=e.source&&(t.source=e.source,null!=n&&(t.source=i.relative(n,t.source)),t.original={line:e.originalLine,column:e.originalColumn},null!=e.name&&(t.name=e.name)),r.addMapping(t)}),e.sources.forEach(function(t){var o=t;null!==n&&(o=i.relative(n,t)),r._sources.has(o)||r._sources.add(o);var s=e.sourceContentFor(t);null!=s&&r.setSourceContent(t,s)}),r},t.prototype.addMapping=function(e){var n=i.getArg(e,"generated"),r=i.getArg(e,"original",null),t=i.getArg(e,"source",null),o=i.getArg(e,"name",null);this._skipValidation||this._validateMapping(n,r,t,o),null!=t&&(t=String(t),this._sources.has(t)||this._sources.add(t)),null!=o&&(o=String(o),this._names.has(o)||this._names.add(o)),this._mappings.add({generatedLine:n.line,generatedColumn:n.column,originalLine:null!=r&&r.line,originalColumn:null!=r&&r.column,source:t,name:o})},t.prototype.setSourceContent=function(e,n){var r=e;null!=this._sourceRoot&&(r=i.relative(this._sourceRoot,r)),null!=n?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[i.toSetString(r)]=n):this._sourcesContents&&(delete this._sourcesContents[i.toSetString(r)],0===Object.keys(this._sourcesContents).length&&(this._sourcesContents=null))},t.prototype.applySourceMap=function(e,n,r){var t=n;if(null==n){if(null==e.file)throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map\'s "file" property. Both were omitted.');t=e.file}var o=this._sourceRoot;null!=o&&(t=i.relative(o,t));var a=new s,u=new s;this._mappings.unsortedForEach(function(n){if(n.source===t&&null!=n.originalLine){var s=e.originalPositionFor({line:n.originalLine,column:n.originalColumn});null!=s.source&&(n.source=s.source,null!=r&&(n.source=i.join(r,n.source)),null!=o&&(n.source=i.relative(o,n.source)),n.originalLine=s.line,n.originalColumn=s.column,null!=s.name&&(n.name=s.name))}var l=n.source;null==l||a.has(l)||a.add(l);var c=n.name;null==c||u.has(c)||u.add(c)},this),this._sources=a,this._names=u,e.sources.forEach(function(n){var t=e.sourceContentFor(n);null!=t&&(null!=r&&(n=i.join(r,n)),null!=o&&(n=i.relative(o,n)),this.setSourceContent(n,t))},this)},t.prototype._validateMapping=function(e,n,r,t){if(n&&"number"!=typeof n.line&&"number"!=typeof n.column)throw new Error("original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.");if((!(e&&"line"in e&&"column"in e&&e.line>0&&e.column>=0)||n||r||t)&&!(e&&"line"in e&&"column"in e&&n&&"line"in n&&"column"in n&&e.line>0&&e.column>=0&&n.line>0&&n.column>=0&&r))throw new Error("Invalid mapping: "+JSON.stringify({generated:e,source:r,original:n,name:t}))},t.prototype._serializeMappings=function(){for(var e,n,r,t,s=0,a=1,u=0,l=0,c=0,g=0,p="",h=this._mappings.toArray(),f=0,d=h.length;f<d;f++){if(n=h[f],e="",n.generatedLine!==a)for(s=0;n.generatedLine!==a;)e+=";",a++;else if(f>0){if(!i.compareByGeneratedPositionsInflated(n,h[f-1]))continue;e+=","}e+=o.encode(n.generatedColumn-s),s=n.generatedColumn,null!=n.source&&(t=this._sources.indexOf(n.source),e+=o.encode(t-g),g=t,e+=o.encode(n.originalLine-1-l),l=n.originalLine-1,e+=o.encode(n.originalColumn-u),u=n.originalColumn,null!=n.name&&(r=this._names.indexOf(n.name),e+=o.encode(r-c),c=r)),p+=e}return p},t.prototype._generateSourcesContent=function(e,n){return e.map(function(e){if(!this._sourcesContents)return null;null!=n&&(e=i.relative(n,e));var r=i.toSetString(e);return Object.prototype.hasOwnProperty.call(this._sourcesContents,r)?this._sourcesContents[r]:null},this)},t.prototype.toJSON=function(){var e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return null!=this._file&&(e.file=this._file),null!=this._sourceRoot&&(e.sourceRoot=this._sourceRoot),this._sourcesContents&&(e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)),e},t.prototype.toString=function(){return JSON.stringify(this.toJSON())},n.SourceMapGenerator=t},function(e,n,r){function t(e){return e<0?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(3),s=5,a=1<<s,u=a-1,l=a;n.encode=function(e){var n,r="",o=t(e);do n=o&u,o>>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(n++)),a===-1)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<<p,p+=s}while(t);r.value=o(g),r.rest=n}},function(e,n){var r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");n.encode=function(e){if(0<=e&&e<r.length)return r[e];throw new TypeError("Must be between 0 and 63: "+e)},n.decode=function(e){var n=65,r=90,t=97,o=122,i=48,s=57,a=43,u=47,l=26,c=52;return n<=e&&e<=r?e-n:t<=e&&e<=o?e-t+l:i<=e&&e<=s?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){if(n in e)return e[n];if(3===arguments.length)return r;throw new Error('"'+n+'" is a required argument.')}function t(e){var n=e.match(v);return n?{scheme:n[1],auth:n[2],host:n[3],port:n[4],path:n[5]}:null}function o(e){var n="";return e.scheme&&(n+=e.scheme+":"),n+="//",e.auth&&(n+=e.auth+"@"),e.host&&(n+=e.host),e.port&&(n+=":"+e.port),e.path&&(n+=e.path),n}function i(e){var r=e,i=t(e);if(i){if(!i.path)return e;r=i.path}for(var s,a=n.isAbsolute(r),u=r.split(/\/+/),l=0,c=u.length-1;c>=0;c--)s=u[c],"."===s?u.splice(c,1):".."===s?l++:l>0&&(""===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join("/"),""===r&&(r=a?"/":"."),i?(i.path=r,o(i)):r}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=t(n),s=t(e);if(s&&(e=s.path||"/"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(y))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,o(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(t<0)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?"$"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(n<9)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=f(e.source,n.source);return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:f(e.name,n.name)))))}function h(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=f(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:f(e.name,n.name)))))}function f(e,n){return e===n?0:null===e?1:null===n?-1:e>n?1:-1}function d(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=f(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:f(e.name,n.name)))))}function m(e){return JSON.parse(e.replace(/^\)]}'[^\n]*\n/,""))}function _(e,n,r){if(n=n||"",e&&("/"!==e[e.length-1]&&"/"!==n[0]&&(e+="/"),n=e+n),r){var a=t(r);if(!a)throw new Error("sourceMapURL could not be parsed");if(a.path){var u=a.path.lastIndexOf("/");u>=0&&(a.path=a.path.substring(0,u+1))}n=s(o(a),n)}return i(n)}n.getArg=r;var v=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/,y=/^data:.+\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||v.test(e)},n.relative=a;var C=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=C?u:l,n.fromSetString=C?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=h,n.compareByGeneratedPositionsInflated=d,n.parseSourceMapInput=m,n.computeSourceURL=_},function(e,n,r){function t(){this._array=[],this._set=s?new Map:Object.create(null)}var o=r(4),i=Object.prototype.hasOwnProperty,s="undefined"!=typeof Map;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;o<i;o++)r.add(e[o],n);return r},t.prototype.size=function(){return s?this._set.size:Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=s?e:o.toSetString(e),t=s?this.has(e):i.call(this._set,r),a=this._array.length;t&&!n||this._array.push(e),t||(s?this._set.set(e,a):this._set[r]=a)},t.prototype.has=function(e){if(s)return this._set.has(e);var n=o.toSetString(e);return i.call(this._set,n)},t.prototype.indexOf=function(e){if(s){var n=this._set.get(e);if(n>=0)return n}else{var r=o.toSetString(e);if(i.call(this._set,r))return this._set[r]}throw new Error('"'+e+'" is not in the set.')},t.prototype.at=function(e){if(e>=0&&e<this._array.length)return this._array[e];throw new Error("No element indexed by "+e)},t.prototype.toArray=function(){return this._array.slice()},n.ArraySet=t},function(e,n,r){function t(e,n){var r=e.generatedLine,t=n.generatedLine,o=e.generatedColumn,s=n.generatedColumn;return t>r||t==r&&s>=o||i.compareByGeneratedPositionsInflated(e,n)<=0}function o(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}var i=r(4);o.prototype.unsortedForEach=function(e,n){this._array.forEach(e,n)},o.prototype.add=function(e){t(this._last,e)?(this._last=e,this._array.push(e)):(this._sorted=!1,this._array.push(e))},o.prototype.toArray=function(){return this._sorted||(this._array.sort(i.compareByGeneratedPositionsInflated),this._sorted=!0),this._array},n.MappingList=o},function(e,n,r){function t(e,n){var r=e;return"string"==typeof e&&(r=a.parseSourceMapInput(e)),null!=r.sections?new s(r,n):new o(r,n)}function o(e,n){var r=e;"string"==typeof e&&(r=a.parseSourceMapInput(e));var t=a.getArg(r,"version"),o=a.getArg(r,"sources"),i=a.getArg(r,"names",[]),s=a.getArg(r,"sourceRoot",null),u=a.getArg(r,"sourcesContent",null),c=a.getArg(r,"mappings"),g=a.getArg(r,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);s&&(s=a.normalize(s)),o=o.map(String).map(a.normalize).map(function(e){return s&&a.isAbsolute(s)&&a.isAbsolute(e)?a.relative(s,e):e}),this._names=l.fromArray(i.map(String),!0),this._sources=l.fromArray(o,!0),this._absoluteSources=this._sources.toArray().map(function(e){return a.computeSourceURL(s,e,n)}),this.sourceRoot=s,this.sourcesContent=u,this._mappings=c,this._sourceMapURL=n,this.file=g}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e,n){var r=e;"string"==typeof e&&(r=a.parseSourceMapInput(e));var o=a.getArg(r,"version"),i=a.getArg(r,"sections");if(o!=this._version)throw new Error("Unsupported version: "+o);this._sources=new l,this._names=new l;var s={line:-1,column:0};this._sections=i.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var r=a.getArg(e,"offset"),o=a.getArg(r,"line"),i=a.getArg(r,"column");if(o<s.line||o===s.line&&i<s.column)throw new Error("Section offsets must be ordered and non-overlapping.");return s=r,{generatedOffset:{generatedLine:o+1,generatedColumn:i+1},consumer:new t(a.getArg(e,"map"),n)}})}var a=r(4),u=r(8),l=r(5).ArraySet,c=r(2),g=r(9).quickSort;t.fromSourceMap=function(e,n){return o.fromSourceMap(e,n)},t.prototype._version=3,t.prototype.__generatedMappings=null,Object.defineProperty(t.prototype,"_generatedMappings",{configurable:!0,enumerable:!0,get:function(){return this.__generatedMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__generatedMappings}}),t.prototype.__originalMappings=null,Object.defineProperty(t.prototype,"_originalMappings",{configurable:!0,enumerable:!0,get:function(){return this.__originalMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__originalMappings}}),t.prototype._charIsMappingSeparator=function(e,n){var r=e.charAt(n);return";"===r||","===r},t.prototype._parseMappings=function(e,n){throw new Error("Subclasses must implement _parseMappings")},t.GENERATED_ORDER=1,t.ORIGINAL_ORDER=2,t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.prototype.eachMapping=function(e,n,r){var o,i=n||null,s=r||t.GENERATED_ORDER;switch(s){case t.GENERATED_ORDER:o=this._generatedMappings;break;case t.ORIGINAL_ORDER:o=this._originalMappings;break;default:throw new Error("Unknown order of iteration.")}var u=this.sourceRoot;o.map(function(e){var n=null===e.source?null:this._sources.at(e.source);return n=a.computeSourceURL(u,n,this._sourceMapURL),{source:n,generatedLine:e.generatedLine,generatedColumn:e.generatedColumn,originalLine:e.originalLine,originalColumn:e.originalColumn,name:null===e.name?null:this._names.at(e.name)}},this).forEach(e,i)},t.prototype.allGeneratedPositionsFor=function(e){var n=a.getArg(e,"line"),r={source:a.getArg(e,"source"),originalLine:n,originalColumn:a.getArg(e,"column",0)};if(r.source=this._findSourceIndex(r.source),r.source<0)return[];var t=[],o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,u.LEAST_UPPER_BOUND);if(o>=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.prototype._findSourceIndex=function(e){var n=e;if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),this._sources.has(n))return this._sources.indexOf(n);var r;for(r=0;r<this._absoluteSources.length;++r)if(this._absoluteSources[r]==e)return r;return-1},o.fromSourceMap=function(e,n){var r=Object.create(o.prototype),t=r._names=l.fromArray(e._names.toArray(),!0),s=r._sources=l.fromArray(e._sources.toArray(),!0);r.sourceRoot=e._sourceRoot,r.sourcesContent=e._generateSourcesContent(r._sources.toArray(),r.sourceRoot),r.file=e._file,r._sourceMapURL=n,r._absoluteSources=r._sources.toArray().map(function(e){return a.computeSourceURL(r.sourceRoot,e,n)});for(var u=e._mappings.toArray().slice(),c=r.__generatedMappings=[],p=r.__originalMappings=[],h=0,f=u.length;h<f;h++){var d=u[h],m=new i;m.generatedLine=d.generatedLine,m.generatedColumn=d.generatedColumn,d.source&&(m.source=s.indexOf(d.source),m.originalLine=d.originalLine,m.originalColumn=d.originalColumn,d.name&&(m.name=t.indexOf(d.name)),p.push(m)),c.push(m)}return g(r.__originalMappings,a.compareByOriginalPositions),r},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._absoluteSources.slice()}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,h=0,f=0,d=0,m=0,_=e.length,v=0,y={},C={},S=[],A=[];v<_;)if(";"===e.charAt(v))l++,v++,p=0;else if(","===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;s<_&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];v<s;)c.decode(e,v,C),u=C.value,v=C.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=d+o[1],d+=o[1],r.originalLine=h+o[2],h=r.originalLine,r.originalLine+=1,r.originalColumn=f+o[3],f=r.originalColumn,o.length>4&&(r.name=m+o[4],m+=o[4])),A.push(r),"number"==typeof r.originalLine&&S.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(S,a.compareByOriginalPositions),this.__originalMappings=S},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e<this._generatedMappings.length;++e){var n=this._generatedMappings[e];if(e+1<this._generatedMappings.length){var r=this._generatedMappings[e+1];if(n.generatedLine===r.generatedLine){n.lastGeneratedColumn=r.generatedColumn-1;continue}}n.lastGeneratedColumn=1/0}},o.prototype.originalPositionFor=function(e){var n={generatedLine:a.getArg(e,"line"),generatedColumn:a.getArg(e,"column")},r=this._findMapping(n,this._generatedMappings,"generatedLine","generatedColumn",a.compareByGeneratedPositionsDeflated,a.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(r>=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),i=a.computeSourceURL(this.sourceRoot,i,this._sourceMapURL));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;var r=this._findSourceIndex(e);if(r>=0)return this.sourcesContent[r];var t=e;null!=this.sourceRoot&&(t=a.relative(this.sourceRoot,t));var o;if(null!=this.sourceRoot&&(o=a.urlParse(this.sourceRoot))){var i=t.replace(/^file:\/\//,"");if("file"==o.scheme&&this._sources.has(i))return this.sourcesContent[this._sources.indexOf(i)];if((!o.path||"/"==o.path)&&this._sources.has("/"+t))return this.sourcesContent[this._sources.indexOf("/"+t)]}if(n)return null;throw new Error('"'+t+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(n=this._findSourceIndex(n),n<0)return{line:null,column:null,lastColumn:null};var r={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n<this._sections.length;n++)for(var r=0;r<this._sections[n].consumer.sources.length;r++)e.push(this._sections[n].consumer.sources[r]);return e}}),s.prototype.originalPositionFor=function(e){var n={generatedLine:a.getArg(e,"line"),generatedColumn:a.getArg(e,"column")},r=u.search(n,this._sections,function(e,n){var r=e.generatedLine-n.generatedOffset.generatedLine;return r?r:e.generatedColumn-n.generatedOffset.generatedColumn}),t=this._sections[r];return t?t.consumer.originalPositionFor({line:n.generatedLine-(t.generatedOffset.generatedLine-1),column:n.generatedColumn-(t.generatedOffset.generatedLine===n.generatedLine?t.generatedOffset.generatedColumn-1:0),bias:e.bias}):{source:null,line:null,column:null,name:null}},s.prototype.hasContentsOfAllSources=function(){return this._sections.every(function(e){return e.consumer.hasContentsOfAllSources()})},s.prototype.sourceContentFor=function(e,n){for(var r=0;r<this._sections.length;r++){var t=this._sections[r],o=t.consumer.sourceContentFor(e,!0);if(o)return o}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},s.prototype.generatedPositionFor=function(e){for(var n=0;n<this._sections.length;n++){var r=this._sections[n];if(r.consumer._findSourceIndex(a.getArg(e,"source"))!==-1){var t=r.consumer.generatedPositionFor(e);if(t){var o={line:t.line+(r.generatedOffset.generatedLine-1),column:t.column+(r.generatedOffset.generatedLine===t.line?r.generatedOffset.generatedColumn-1:0)};return o}}}return{line:null,column:null}},s.prototype._parseMappings=function(e,n){this.__generatedMappings=[],this.__originalMappings=[];for(var r=0;r<this._sections.length;r++)for(var t=this._sections[r],o=t.consumer._generatedMappings,i=0;i<o.length;i++){var s=o[i],u=t.consumer._sources.at(s.source);u=a.computeSourceURL(t.consumer.sourceRoot,u,this._sourceMapURL),this._sources.add(u),u=this._sources.indexOf(u);var l=null;s.name&&(l=t.consumer._names.at(s.name),this._names.add(l),l=this._names.indexOf(l));var c={source:u,generatedLine:s.generatedLine+(t.generatedOffset.generatedLine-1),generatedColumn:s.generatedColumn+(t.generatedOffset.generatedLine===s.generatedLine?t.generatedOffset.generatedColumn-1:0),originalLine:s.originalLine,originalColumn:s.originalColumn,name:l};this.__generatedMappings.push(c),"number"==typeof c.originalLine&&this.__originalMappings.push(c)}g(this.__generatedMappings,a.compareByGeneratedPositionsDeflated),g(this.__originalMappings,a.compareByOriginalPositions)},n.IndexedSourceMapConsumer=s},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t<i.length?t:-1:u:u-e>1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:e<0?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(s<0)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(i<s){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;c<s;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}},function(e,n,r){function t(e,n,r,t,o){this.children=[],this.sourceContents={},this.line=null==e?null:e,this.column=null==n?null:n,this.source=null==r?null:r,this.name=null==o?null:o,this[u]=!0,null!=t&&this.add(t)}var o=r(1).SourceMapGenerator,i=r(4),s=/(\r?\n)/,a=10,u="$$$isSourceNode$$$";t.fromStringWithSourceMap=function(e,n,r){function o(e,n){if(null===e||void 0===e.source)a.add(n);else{var o=r?i.join(r,e.source):e.source;a.add(new t(e.originalLine,e.originalColumn,o,n,e.name))}}var a=new t,u=e.split(s),l=0,c=function(){function e(){return l<u.length?u[l++]:void 0}var n=e(),r=e()||"";return n+r},g=1,p=0,h=null;return n.eachMapping(function(e){if(null!==h){if(!(g<e.generatedLine)){var n=u[l]||"",r=n.substr(0,e.generatedColumn-p);return u[l]=n.substr(e.generatedColumn-p),p=e.generatedColumn,o(h,r),void(h=e)}o(h,c()),g++,p=0}for(;g<e.generatedLine;)a.add(c()),g++;if(p<e.generatedColumn){var n=u[l]||"";a.add(n.substr(0,e.generatedColumn)),u[l]=n.substr(e.generatedColumn),p=e.generatedColumn}h=e},this),l<u.length&&(h&&o(h,c()),a.add(u.splice(l).join(""))),n.sources.forEach(function(e){var t=n.sourceContentFor(e);null!=t&&(null!=r&&(e=i.join(r,e)),a.setSourceContent(e,t))}),a},t.prototype.add=function(e){if(Array.isArray(e))e.forEach(function(e){this.add(e)},this);else{if(!e[u]&&"string"!=typeof e)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);e&&this.children.push(e)}return this},t.prototype.prepend=function(e){if(Array.isArray(e))for(var n=e.length-1;n>=0;n--)this.prepend(e[n]);else{if(!e[u]&&"string"!=typeof e)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);this.children.unshift(e)}return this},t.prototype.walk=function(e){for(var n,r=0,t=this.children.length;r<t;r++)n=this.children[r],n[u]?n.walk(e):""!==n&&e(n,{source:this.source,line:this.line,column:this.column,name:this.name})},t.prototype.join=function(e){var n,r,t=this.children.length;if(t>0){for(n=[],r=0;r<t-1;r++)n.push(this.children[r]),n.push(e);n.push(this.children[r]),this.children=n}return this},t.prototype.replaceRight=function(e,n){var r=this.children[this.children.length-1];return r[u]?r.replaceRight(e,n):"string"==typeof r?this.children[this.children.length-1]=r.replace(e,n):this.children.push("".replace(e,n)),this},t.prototype.setSourceContent=function(e,n){this.sourceContents[i.toSetString(e)]=n},t.prototype.walkSourceContents=function(e){for(var n=0,r=this.children.length;n<r;n++)this.children[n][u]&&this.children[n].walkSourceContents(e);for(var t=Object.keys(this.sourceContents),n=0,r=t.length;n<r;n++)e(i.fromSetString(t[n]),this.sourceContents[t[n]])},t.prototype.toString=function(){var e="";return this.walk(function(n){e+=n}),e},t.prototype.toStringWithSourceMap=function(e){var n={code:"",line:1,column:0},r=new o(e),t=!1,i=null,s=null,u=null,l=null;return this.walk(function(e,o){n.code+=e,null!==o.source&&null!==o.line&&null!==o.column?(i===o.source&&s===o.line&&u===o.column&&l===o.name||r.addMapping({source:o.source,original:{line:o.line,column:o.column},generated:{line:n.line,column:n.column},name:o.name}),i=o.source,s=o.line,u=o.column,l=o.name,t=!0):t&&(r.addMapping({generated:{line:n.line,column:n.column}}),i=null,t=!1);for(var c=0,g=e.length;c<g;c++)e.charCodeAt(c)===a?(n.line++,n.column=0,c+1===g?(i=null,t=!1):t&&r.addMapping({source:o.source,original:{line:o.line,column:o.column},generated:{line:n.line,column:n.column},name:o.name})):n.column++}),this.walkSourceContents(function(e,n){r.setSourceContent(e,n)}),{code:n.code,map:r}},n.SourceNode=t}])});
+//# sourceMappingURL=source-map.min.js.map
\ No newline at end of file
diff --git a/node_modules/terser/node_modules/source-map/dist/source-map.min.js.map b/node_modules/terser/node_modules/source-map/dist/source-map.min.js.map
new file mode 100644
index 0000000..d2cc86e
--- /dev/null
+++ b/node_modules/terser/node_modules/source-map/dist/source-map.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///source-map.min.js","webpack:///webpack/bootstrap 0fd5815da764db5fb9fe","webpack:///./source-map.js","webpack:///./lib/source-map-generator.js","webpack:///./lib/base64-vlq.js","webpack:///./lib/base64.js","webpack:///./lib/util.js","webpack:///./lib/array-set.js","webpack:///./lib/mapping-list.js","webpack:///./lib/source-map-consumer.js","webpack:///./lib/binary-search.js","webpack:///./lib/quick-sort.js","webpack:///./lib/source-node.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","SourceMapGenerator","SourceMapConsumer","SourceNode","aArgs","_file","util","getArg","_sourceRoot","_skipValidation","_sources","ArraySet","_names","_mappings","MappingList","_sourcesContents","base64VLQ","prototype","_version","fromSourceMap","aSourceMapConsumer","sourceRoot","generator","file","eachMapping","mapping","newMapping","generated","line","generatedLine","column","generatedColumn","source","relative","original","originalLine","originalColumn","name","addMapping","sources","forEach","sourceFile","sourceRelative","has","add","content","sourceContentFor","setSourceContent","_validateMapping","String","aSourceFile","aSourceContent","Object","create","toSetString","keys","length","applySourceMap","aSourceMapPath","Error","newSources","newNames","unsortedForEach","originalPositionFor","join","aGenerated","aOriginal","aSource","aName","JSON","stringify","_serializeMappings","next","nameIdx","sourceIdx","previousGeneratedColumn","previousGeneratedLine","previousOriginalColumn","previousOriginalLine","previousName","previousSource","result","mappings","toArray","i","len","compareByGeneratedPositionsInflated","encode","indexOf","_generateSourcesContent","aSources","aSourceRoot","map","key","hasOwnProperty","toJSON","version","names","sourcesContent","toString","toVLQSigned","aValue","fromVLQSigned","isNegative","shifted","base64","VLQ_BASE_SHIFT","VLQ_BASE","VLQ_BASE_MASK","VLQ_CONTINUATION_BIT","digit","encoded","vlq","decode","aStr","aIndex","aOutParam","continuation","strLen","shift","charCodeAt","charAt","value","rest","intToCharMap","split","number","TypeError","charCode","bigA","bigZ","littleA","littleZ","zero","nine","plus","slash","littleOffset","numberOffset","aDefaultValue","arguments","urlParse","aUrl","match","urlRegexp","scheme","auth","host","port","path","urlGenerate","aParsedUrl","url","normalize","aPath","part","isAbsolute","parts","up","splice","aRoot","aPathUrl","aRootUrl","dataUrlRegexp","joined","replace","level","index","lastIndexOf","slice","Array","substr","identity","s","isProtoString","fromSetString","compareByOriginalPositions","mappingA","mappingB","onlyCompareOriginal","cmp","strcmp","compareByGeneratedPositionsDeflated","onlyCompareGenerated","aStr1","aStr2","parseSourceMapInput","str","parse","computeSourceURL","sourceURL","sourceMapURL","parsed","substring","test","supportsNullProto","obj","_array","_set","hasNativeMap","Map","fromArray","aArray","aAllowDuplicates","set","size","getOwnPropertyNames","sStr","isDuplicate","idx","push","get","at","aIdx","generatedPositionAfter","lineA","lineB","columnA","columnB","_sorted","_last","aCallback","aThisArg","aMapping","sort","aSourceMap","aSourceMapURL","sourceMap","sections","IndexedSourceMapConsumer","BasicSourceMapConsumer","_absoluteSources","_sourceMapURL","Mapping","lastOffset","_sections","offset","offsetLine","offsetColumn","generatedOffset","consumer","binarySearch","quickSort","__generatedMappings","defineProperty","configurable","enumerable","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","aContext","aOrder","context","order","_generatedMappings","_originalMappings","allGeneratedPositionsFor","needle","_findSourceIndex","_findMapping","undefined","lastColumn","relativeSource","smc","generatedMappings","destGeneratedMappings","destOriginalMappings","srcMapping","destMapping","segment","end","cachedSegments","temp","originalMappings","aNeedle","aMappings","aLineName","aColumnName","aComparator","aBias","search","computeColumnSpans","nextMapping","lastGeneratedColumn","Infinity","hasContentsOfAllSources","some","sc","nullOnMissing","fileUriAbsPath","generatedPositionFor","constructor","j","sectionIndex","section","bias","every","generatedPosition","ret","sectionMappings","adjustedMapping","recursiveSearch","aLow","aHigh","aHaystack","aCompare","mid","Math","floor","swap","ary","x","y","randomIntInRange","low","high","round","random","doQuickSort","comparator","r","pivotIndex","pivot","q","aLine","aColumn","aChunks","children","sourceContents","isSourceNode","REGEX_NEWLINE","NEWLINE_CODE","fromStringWithSourceMap","aGeneratedCode","aRelativePath","addMappingWithCode","code","node","remainingLines","remainingLinesIndex","shiftNextLine","getNextLine","lineContents","newLine","lastGeneratedLine","lastMapping","nextLine","aChunk","isArray","chunk","prepend","unshift","walk","aFn","aSep","newChildren","replaceRight","aPattern","aReplacement","lastChild","walkSourceContents","toStringWithSourceMap","sourceMappingActive","lastOriginalSource","lastOriginalLine","lastOriginalColumn","lastOriginalName","sourceContent"],"mappings":"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","file":"source-map.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"sourceMap\"] = factory();\n\telse\n\t\troot[\"sourceMap\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"sourceMap\"] = factory();\n\telse\n\t\troot[\"sourceMap\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t * Copyright 2009-2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE.txt or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\texports.SourceMapGenerator = __webpack_require__(1).SourceMapGenerator;\n\texports.SourceMapConsumer = __webpack_require__(7).SourceMapConsumer;\n\texports.SourceNode = __webpack_require__(10).SourceNode;\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar base64VLQ = __webpack_require__(2);\n\tvar util = __webpack_require__(4);\n\tvar ArraySet = __webpack_require__(5).ArraySet;\n\tvar MappingList = __webpack_require__(6).MappingList;\n\t\n\t/**\n\t * An instance of the SourceMapGenerator represents a source map which is\n\t * being built incrementally. You may pass an object with the following\n\t * properties:\n\t *\n\t *   - file: The filename of the generated source.\n\t *   - sourceRoot: A root for all relative URLs in this source map.\n\t */\n\tfunction SourceMapGenerator(aArgs) {\n\t  if (!aArgs) {\n\t    aArgs = {};\n\t  }\n\t  this._file = util.getArg(aArgs, 'file', null);\n\t  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n\t  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n\t  this._sources = new ArraySet();\n\t  this._names = new ArraySet();\n\t  this._mappings = new MappingList();\n\t  this._sourcesContents = null;\n\t}\n\t\n\tSourceMapGenerator.prototype._version = 3;\n\t\n\t/**\n\t * Creates a new SourceMapGenerator based on a SourceMapConsumer\n\t *\n\t * @param aSourceMapConsumer The SourceMap.\n\t */\n\tSourceMapGenerator.fromSourceMap =\n\t  function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n\t    var sourceRoot = aSourceMapConsumer.sourceRoot;\n\t    var generator = new SourceMapGenerator({\n\t      file: aSourceMapConsumer.file,\n\t      sourceRoot: sourceRoot\n\t    });\n\t    aSourceMapConsumer.eachMapping(function (mapping) {\n\t      var newMapping = {\n\t        generated: {\n\t          line: mapping.generatedLine,\n\t          column: mapping.generatedColumn\n\t        }\n\t      };\n\t\n\t      if (mapping.source != null) {\n\t        newMapping.source = mapping.source;\n\t        if (sourceRoot != null) {\n\t          newMapping.source = util.relative(sourceRoot, newMapping.source);\n\t        }\n\t\n\t        newMapping.original = {\n\t          line: mapping.originalLine,\n\t          column: mapping.originalColumn\n\t        };\n\t\n\t        if (mapping.name != null) {\n\t          newMapping.name = mapping.name;\n\t        }\n\t      }\n\t\n\t      generator.addMapping(newMapping);\n\t    });\n\t    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n\t      var sourceRelative = sourceFile;\n\t      if (sourceRoot !== null) {\n\t        sourceRelative = util.relative(sourceRoot, sourceFile);\n\t      }\n\t\n\t      if (!generator._sources.has(sourceRelative)) {\n\t        generator._sources.add(sourceRelative);\n\t      }\n\t\n\t      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n\t      if (content != null) {\n\t        generator.setSourceContent(sourceFile, content);\n\t      }\n\t    });\n\t    return generator;\n\t  };\n\t\n\t/**\n\t * Add a single mapping from original source line and column to the generated\n\t * source's line and column for this source map being created. The mapping\n\t * object should have the following properties:\n\t *\n\t *   - generated: An object with the generated line and column positions.\n\t *   - original: An object with the original line and column positions.\n\t *   - source: The original source file (relative to the sourceRoot).\n\t *   - name: An optional original token name for this mapping.\n\t */\n\tSourceMapGenerator.prototype.addMapping =\n\t  function SourceMapGenerator_addMapping(aArgs) {\n\t    var generated = util.getArg(aArgs, 'generated');\n\t    var original = util.getArg(aArgs, 'original', null);\n\t    var source = util.getArg(aArgs, 'source', null);\n\t    var name = util.getArg(aArgs, 'name', null);\n\t\n\t    if (!this._skipValidation) {\n\t      this._validateMapping(generated, original, source, name);\n\t    }\n\t\n\t    if (source != null) {\n\t      source = String(source);\n\t      if (!this._sources.has(source)) {\n\t        this._sources.add(source);\n\t      }\n\t    }\n\t\n\t    if (name != null) {\n\t      name = String(name);\n\t      if (!this._names.has(name)) {\n\t        this._names.add(name);\n\t      }\n\t    }\n\t\n\t    this._mappings.add({\n\t      generatedLine: generated.line,\n\t      generatedColumn: generated.column,\n\t      originalLine: original != null && original.line,\n\t      originalColumn: original != null && original.column,\n\t      source: source,\n\t      name: name\n\t    });\n\t  };\n\t\n\t/**\n\t * Set the source content for a source file.\n\t */\n\tSourceMapGenerator.prototype.setSourceContent =\n\t  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n\t    var source = aSourceFile;\n\t    if (this._sourceRoot != null) {\n\t      source = util.relative(this._sourceRoot, source);\n\t    }\n\t\n\t    if (aSourceContent != null) {\n\t      // Add the source content to the _sourcesContents map.\n\t      // Create a new _sourcesContents map if the property is null.\n\t      if (!this._sourcesContents) {\n\t        this._sourcesContents = Object.create(null);\n\t      }\n\t      this._sourcesContents[util.toSetString(source)] = aSourceContent;\n\t    } else if (this._sourcesContents) {\n\t      // Remove the source file from the _sourcesContents map.\n\t      // If the _sourcesContents map is empty, set the property to null.\n\t      delete this._sourcesContents[util.toSetString(source)];\n\t      if (Object.keys(this._sourcesContents).length === 0) {\n\t        this._sourcesContents = null;\n\t      }\n\t    }\n\t  };\n\t\n\t/**\n\t * Applies the mappings of a sub-source-map for a specific source file to the\n\t * source map being generated. Each mapping to the supplied source file is\n\t * rewritten using the supplied source map. Note: The resolution for the\n\t * resulting mappings is the minimium of this map and the supplied map.\n\t *\n\t * @param aSourceMapConsumer The source map to be applied.\n\t * @param aSourceFile Optional. The filename of the source file.\n\t *        If omitted, SourceMapConsumer's file property will be used.\n\t * @param aSourceMapPath Optional. The dirname of the path to the source map\n\t *        to be applied. If relative, it is relative to the SourceMapConsumer.\n\t *        This parameter is needed when the two source maps aren't in the same\n\t *        directory, and the source map to be applied contains relative source\n\t *        paths. If so, those relative source paths need to be rewritten\n\t *        relative to the SourceMapGenerator.\n\t */\n\tSourceMapGenerator.prototype.applySourceMap =\n\t  function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n\t    var sourceFile = aSourceFile;\n\t    // If aSourceFile is omitted, we will use the file property of the SourceMap\n\t    if (aSourceFile == null) {\n\t      if (aSourceMapConsumer.file == null) {\n\t        throw new Error(\n\t          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n\t          'or the source map\\'s \"file\" property. Both were omitted.'\n\t        );\n\t      }\n\t      sourceFile = aSourceMapConsumer.file;\n\t    }\n\t    var sourceRoot = this._sourceRoot;\n\t    // Make \"sourceFile\" relative if an absolute Url is passed.\n\t    if (sourceRoot != null) {\n\t      sourceFile = util.relative(sourceRoot, sourceFile);\n\t    }\n\t    // Applying the SourceMap can add and remove items from the sources and\n\t    // the names array.\n\t    var newSources = new ArraySet();\n\t    var newNames = new ArraySet();\n\t\n\t    // Find mappings for the \"sourceFile\"\n\t    this._mappings.unsortedForEach(function (mapping) {\n\t      if (mapping.source === sourceFile && mapping.originalLine != null) {\n\t        // Check if it can be mapped by the source map, then update the mapping.\n\t        var original = aSourceMapConsumer.originalPositionFor({\n\t          line: mapping.originalLine,\n\t          column: mapping.originalColumn\n\t        });\n\t        if (original.source != null) {\n\t          // Copy mapping\n\t          mapping.source = original.source;\n\t          if (aSourceMapPath != null) {\n\t            mapping.source = util.join(aSourceMapPath, mapping.source)\n\t          }\n\t          if (sourceRoot != null) {\n\t            mapping.source = util.relative(sourceRoot, mapping.source);\n\t          }\n\t          mapping.originalLine = original.line;\n\t          mapping.originalColumn = original.column;\n\t          if (original.name != null) {\n\t            mapping.name = original.name;\n\t          }\n\t        }\n\t      }\n\t\n\t      var source = mapping.source;\n\t      if (source != null && !newSources.has(source)) {\n\t        newSources.add(source);\n\t      }\n\t\n\t      var name = mapping.name;\n\t      if (name != null && !newNames.has(name)) {\n\t        newNames.add(name);\n\t      }\n\t\n\t    }, this);\n\t    this._sources = newSources;\n\t    this._names = newNames;\n\t\n\t    // Copy sourcesContents of applied map.\n\t    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n\t      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n\t      if (content != null) {\n\t        if (aSourceMapPath != null) {\n\t          sourceFile = util.join(aSourceMapPath, sourceFile);\n\t        }\n\t        if (sourceRoot != null) {\n\t          sourceFile = util.relative(sourceRoot, sourceFile);\n\t        }\n\t        this.setSourceContent(sourceFile, content);\n\t      }\n\t    }, this);\n\t  };\n\t\n\t/**\n\t * A mapping can have one of the three levels of data:\n\t *\n\t *   1. Just the generated position.\n\t *   2. The Generated position, original position, and original source.\n\t *   3. Generated and original position, original source, as well as a name\n\t *      token.\n\t *\n\t * To maintain consistency, we validate that any new mapping being added falls\n\t * in to one of these categories.\n\t */\n\tSourceMapGenerator.prototype._validateMapping =\n\t  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n\t                                              aName) {\n\t    // When aOriginal is truthy but has empty values for .line and .column,\n\t    // it is most likely a programmer error. In this case we throw a very\n\t    // specific error message to try to guide them the right way.\n\t    // For example: https://github.com/Polymer/polymer-bundler/pull/519\n\t    if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n\t        throw new Error(\n\t            'original.line and original.column are not numbers -- you probably meant to omit ' +\n\t            'the original mapping entirely and only map the generated position. If so, pass ' +\n\t            'null for the original mapping instead of an object with empty or null values.'\n\t        );\n\t    }\n\t\n\t    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n\t        && aGenerated.line > 0 && aGenerated.column >= 0\n\t        && !aOriginal && !aSource && !aName) {\n\t      // Case 1.\n\t      return;\n\t    }\n\t    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n\t             && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n\t             && aGenerated.line > 0 && aGenerated.column >= 0\n\t             && aOriginal.line > 0 && aOriginal.column >= 0\n\t             && aSource) {\n\t      // Cases 2 and 3.\n\t      return;\n\t    }\n\t    else {\n\t      throw new Error('Invalid mapping: ' + JSON.stringify({\n\t        generated: aGenerated,\n\t        source: aSource,\n\t        original: aOriginal,\n\t        name: aName\n\t      }));\n\t    }\n\t  };\n\t\n\t/**\n\t * Serialize the accumulated mappings in to the stream of base 64 VLQs\n\t * specified by the source map format.\n\t */\n\tSourceMapGenerator.prototype._serializeMappings =\n\t  function SourceMapGenerator_serializeMappings() {\n\t    var previousGeneratedColumn = 0;\n\t    var previousGeneratedLine = 1;\n\t    var previousOriginalColumn = 0;\n\t    var previousOriginalLine = 0;\n\t    var previousName = 0;\n\t    var previousSource = 0;\n\t    var result = '';\n\t    var next;\n\t    var mapping;\n\t    var nameIdx;\n\t    var sourceIdx;\n\t\n\t    var mappings = this._mappings.toArray();\n\t    for (var i = 0, len = mappings.length; i < len; i++) {\n\t      mapping = mappings[i];\n\t      next = ''\n\t\n\t      if (mapping.generatedLine !== previousGeneratedLine) {\n\t        previousGeneratedColumn = 0;\n\t        while (mapping.generatedLine !== previousGeneratedLine) {\n\t          next += ';';\n\t          previousGeneratedLine++;\n\t        }\n\t      }\n\t      else {\n\t        if (i > 0) {\n\t          if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n\t            continue;\n\t          }\n\t          next += ',';\n\t        }\n\t      }\n\t\n\t      next += base64VLQ.encode(mapping.generatedColumn\n\t                                 - previousGeneratedColumn);\n\t      previousGeneratedColumn = mapping.generatedColumn;\n\t\n\t      if (mapping.source != null) {\n\t        sourceIdx = this._sources.indexOf(mapping.source);\n\t        next += base64VLQ.encode(sourceIdx - previousSource);\n\t        previousSource = sourceIdx;\n\t\n\t        // lines are stored 0-based in SourceMap spec version 3\n\t        next += base64VLQ.encode(mapping.originalLine - 1\n\t                                   - previousOriginalLine);\n\t        previousOriginalLine = mapping.originalLine - 1;\n\t\n\t        next += base64VLQ.encode(mapping.originalColumn\n\t                                   - previousOriginalColumn);\n\t        previousOriginalColumn = mapping.originalColumn;\n\t\n\t        if (mapping.name != null) {\n\t          nameIdx = this._names.indexOf(mapping.name);\n\t          next += base64VLQ.encode(nameIdx - previousName);\n\t          previousName = nameIdx;\n\t        }\n\t      }\n\t\n\t      result += next;\n\t    }\n\t\n\t    return result;\n\t  };\n\t\n\tSourceMapGenerator.prototype._generateSourcesContent =\n\t  function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n\t    return aSources.map(function (source) {\n\t      if (!this._sourcesContents) {\n\t        return null;\n\t      }\n\t      if (aSourceRoot != null) {\n\t        source = util.relative(aSourceRoot, source);\n\t      }\n\t      var key = util.toSetString(source);\n\t      return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n\t        ? this._sourcesContents[key]\n\t        : null;\n\t    }, this);\n\t  };\n\t\n\t/**\n\t * Externalize the source map.\n\t */\n\tSourceMapGenerator.prototype.toJSON =\n\t  function SourceMapGenerator_toJSON() {\n\t    var map = {\n\t      version: this._version,\n\t      sources: this._sources.toArray(),\n\t      names: this._names.toArray(),\n\t      mappings: this._serializeMappings()\n\t    };\n\t    if (this._file != null) {\n\t      map.file = this._file;\n\t    }\n\t    if (this._sourceRoot != null) {\n\t      map.sourceRoot = this._sourceRoot;\n\t    }\n\t    if (this._sourcesContents) {\n\t      map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n\t    }\n\t\n\t    return map;\n\t  };\n\t\n\t/**\n\t * Render the source map being generated to a string.\n\t */\n\tSourceMapGenerator.prototype.toString =\n\t  function SourceMapGenerator_toString() {\n\t    return JSON.stringify(this.toJSON());\n\t  };\n\t\n\texports.SourceMapGenerator = SourceMapGenerator;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t *\n\t * Based on the Base 64 VLQ implementation in Closure Compiler:\n\t * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n\t *\n\t * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n\t * Redistribution and use in source and binary forms, with or without\n\t * modification, are permitted provided that the following conditions are\n\t * met:\n\t *\n\t *  * Redistributions of source code must retain the above copyright\n\t *    notice, this list of conditions and the following disclaimer.\n\t *  * Redistributions in binary form must reproduce the above\n\t *    copyright notice, this list of conditions and the following\n\t *    disclaimer in the documentation and/or other materials provided\n\t *    with the distribution.\n\t *  * Neither the name of Google Inc. nor the names of its\n\t *    contributors may be used to endorse or promote products derived\n\t *    from this software without specific prior written permission.\n\t *\n\t * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\t * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n\t * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n\t * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n\t * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n\t * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n\t * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n\t * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n\t * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\t * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t */\n\t\n\tvar base64 = __webpack_require__(3);\n\t\n\t// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n\t// length quantities we use in the source map spec, the first bit is the sign,\n\t// the next four bits are the actual value, and the 6th bit is the\n\t// continuation bit. The continuation bit tells us whether there are more\n\t// digits in this value following this digit.\n\t//\n\t//   Continuation\n\t//   |    Sign\n\t//   |    |\n\t//   V    V\n\t//   101011\n\t\n\tvar VLQ_BASE_SHIFT = 5;\n\t\n\t// binary: 100000\n\tvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\t\n\t// binary: 011111\n\tvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\t\n\t// binary: 100000\n\tvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\t\n\t/**\n\t * Converts from a two-complement value to a value where the sign bit is\n\t * placed in the least significant bit.  For example, as decimals:\n\t *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n\t *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n\t */\n\tfunction toVLQSigned(aValue) {\n\t  return aValue < 0\n\t    ? ((-aValue) << 1) + 1\n\t    : (aValue << 1) + 0;\n\t}\n\t\n\t/**\n\t * Converts to a two-complement value from a value where the sign bit is\n\t * placed in the least significant bit.  For example, as decimals:\n\t *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n\t *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n\t */\n\tfunction fromVLQSigned(aValue) {\n\t  var isNegative = (aValue & 1) === 1;\n\t  var shifted = aValue >> 1;\n\t  return isNegative\n\t    ? -shifted\n\t    : shifted;\n\t}\n\t\n\t/**\n\t * Returns the base 64 VLQ encoded value.\n\t */\n\texports.encode = function base64VLQ_encode(aValue) {\n\t  var encoded = \"\";\n\t  var digit;\n\t\n\t  var vlq = toVLQSigned(aValue);\n\t\n\t  do {\n\t    digit = vlq & VLQ_BASE_MASK;\n\t    vlq >>>= VLQ_BASE_SHIFT;\n\t    if (vlq > 0) {\n\t      // There are still more digits in this value, so we must make sure the\n\t      // continuation bit is marked.\n\t      digit |= VLQ_CONTINUATION_BIT;\n\t    }\n\t    encoded += base64.encode(digit);\n\t  } while (vlq > 0);\n\t\n\t  return encoded;\n\t};\n\t\n\t/**\n\t * Decodes the next base 64 VLQ value from the given string and returns the\n\t * value and the rest of the string via the out parameter.\n\t */\n\texports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n\t  var strLen = aStr.length;\n\t  var result = 0;\n\t  var shift = 0;\n\t  var continuation, digit;\n\t\n\t  do {\n\t    if (aIndex >= strLen) {\n\t      throw new Error(\"Expected more digits in base 64 VLQ value.\");\n\t    }\n\t\n\t    digit = base64.decode(aStr.charCodeAt(aIndex++));\n\t    if (digit === -1) {\n\t      throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n\t    }\n\t\n\t    continuation = !!(digit & VLQ_CONTINUATION_BIT);\n\t    digit &= VLQ_BASE_MASK;\n\t    result = result + (digit << shift);\n\t    shift += VLQ_BASE_SHIFT;\n\t  } while (continuation);\n\t\n\t  aOutParam.value = fromVLQSigned(result);\n\t  aOutParam.rest = aIndex;\n\t};\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\t\n\t/**\n\t * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n\t */\n\texports.encode = function (number) {\n\t  if (0 <= number && number < intToCharMap.length) {\n\t    return intToCharMap[number];\n\t  }\n\t  throw new TypeError(\"Must be between 0 and 63: \" + number);\n\t};\n\t\n\t/**\n\t * Decode a single base 64 character code digit to an integer. Returns -1 on\n\t * failure.\n\t */\n\texports.decode = function (charCode) {\n\t  var bigA = 65;     // 'A'\n\t  var bigZ = 90;     // 'Z'\n\t\n\t  var littleA = 97;  // 'a'\n\t  var littleZ = 122; // 'z'\n\t\n\t  var zero = 48;     // '0'\n\t  var nine = 57;     // '9'\n\t\n\t  var plus = 43;     // '+'\n\t  var slash = 47;    // '/'\n\t\n\t  var littleOffset = 26;\n\t  var numberOffset = 52;\n\t\n\t  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n\t  if (bigA <= charCode && charCode <= bigZ) {\n\t    return (charCode - bigA);\n\t  }\n\t\n\t  // 26 - 51: abcdefghijklmnopqrstuvwxyz\n\t  if (littleA <= charCode && charCode <= littleZ) {\n\t    return (charCode - littleA + littleOffset);\n\t  }\n\t\n\t  // 52 - 61: 0123456789\n\t  if (zero <= charCode && charCode <= nine) {\n\t    return (charCode - zero + numberOffset);\n\t  }\n\t\n\t  // 62: +\n\t  if (charCode == plus) {\n\t    return 62;\n\t  }\n\t\n\t  // 63: /\n\t  if (charCode == slash) {\n\t    return 63;\n\t  }\n\t\n\t  // Invalid base64 digit.\n\t  return -1;\n\t};\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\t/**\n\t * This is a helper function for getting values from parameter/options\n\t * objects.\n\t *\n\t * @param args The object we are extracting values from\n\t * @param name The name of the property we are getting.\n\t * @param defaultValue An optional value to return if the property is missing\n\t * from the object. If this is not specified and the property is missing, an\n\t * error will be thrown.\n\t */\n\tfunction getArg(aArgs, aName, aDefaultValue) {\n\t  if (aName in aArgs) {\n\t    return aArgs[aName];\n\t  } else if (arguments.length === 3) {\n\t    return aDefaultValue;\n\t  } else {\n\t    throw new Error('\"' + aName + '\" is a required argument.');\n\t  }\n\t}\n\texports.getArg = getArg;\n\t\n\tvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/;\n\tvar dataUrlRegexp = /^data:.+\\,.+$/;\n\t\n\tfunction urlParse(aUrl) {\n\t  var match = aUrl.match(urlRegexp);\n\t  if (!match) {\n\t    return null;\n\t  }\n\t  return {\n\t    scheme: match[1],\n\t    auth: match[2],\n\t    host: match[3],\n\t    port: match[4],\n\t    path: match[5]\n\t  };\n\t}\n\texports.urlParse = urlParse;\n\t\n\tfunction urlGenerate(aParsedUrl) {\n\t  var url = '';\n\t  if (aParsedUrl.scheme) {\n\t    url += aParsedUrl.scheme + ':';\n\t  }\n\t  url += '//';\n\t  if (aParsedUrl.auth) {\n\t    url += aParsedUrl.auth + '@';\n\t  }\n\t  if (aParsedUrl.host) {\n\t    url += aParsedUrl.host;\n\t  }\n\t  if (aParsedUrl.port) {\n\t    url += \":\" + aParsedUrl.port\n\t  }\n\t  if (aParsedUrl.path) {\n\t    url += aParsedUrl.path;\n\t  }\n\t  return url;\n\t}\n\texports.urlGenerate = urlGenerate;\n\t\n\t/**\n\t * Normalizes a path, or the path portion of a URL:\n\t *\n\t * - Replaces consecutive slashes with one slash.\n\t * - Removes unnecessary '.' parts.\n\t * - Removes unnecessary '<dir>/..' parts.\n\t *\n\t * Based on code in the Node.js 'path' core module.\n\t *\n\t * @param aPath The path or url to normalize.\n\t */\n\tfunction normalize(aPath) {\n\t  var path = aPath;\n\t  var url = urlParse(aPath);\n\t  if (url) {\n\t    if (!url.path) {\n\t      return aPath;\n\t    }\n\t    path = url.path;\n\t  }\n\t  var isAbsolute = exports.isAbsolute(path);\n\t\n\t  var parts = path.split(/\\/+/);\n\t  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n\t    part = parts[i];\n\t    if (part === '.') {\n\t      parts.splice(i, 1);\n\t    } else if (part === '..') {\n\t      up++;\n\t    } else if (up > 0) {\n\t      if (part === '') {\n\t        // The first part is blank if the path is absolute. Trying to go\n\t        // above the root is a no-op. Therefore we can remove all '..' parts\n\t        // directly after the root.\n\t        parts.splice(i + 1, up);\n\t        up = 0;\n\t      } else {\n\t        parts.splice(i, 2);\n\t        up--;\n\t      }\n\t    }\n\t  }\n\t  path = parts.join('/');\n\t\n\t  if (path === '') {\n\t    path = isAbsolute ? '/' : '.';\n\t  }\n\t\n\t  if (url) {\n\t    url.path = path;\n\t    return urlGenerate(url);\n\t  }\n\t  return path;\n\t}\n\texports.normalize = normalize;\n\t\n\t/**\n\t * Joins two paths/URLs.\n\t *\n\t * @param aRoot The root path or URL.\n\t * @param aPath The path or URL to be joined with the root.\n\t *\n\t * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n\t *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n\t *   first.\n\t * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n\t *   is updated with the result and aRoot is returned. Otherwise the result\n\t *   is returned.\n\t *   - If aPath is absolute, the result is aPath.\n\t *   - Otherwise the two paths are joined with a slash.\n\t * - Joining for example 'http://' and 'www.example.com' is also supported.\n\t */\n\tfunction join(aRoot, aPath) {\n\t  if (aRoot === \"\") {\n\t    aRoot = \".\";\n\t  }\n\t  if (aPath === \"\") {\n\t    aPath = \".\";\n\t  }\n\t  var aPathUrl = urlParse(aPath);\n\t  var aRootUrl = urlParse(aRoot);\n\t  if (aRootUrl) {\n\t    aRoot = aRootUrl.path || '/';\n\t  }\n\t\n\t  // `join(foo, '//www.example.org')`\n\t  if (aPathUrl && !aPathUrl.scheme) {\n\t    if (aRootUrl) {\n\t      aPathUrl.scheme = aRootUrl.scheme;\n\t    }\n\t    return urlGenerate(aPathUrl);\n\t  }\n\t\n\t  if (aPathUrl || aPath.match(dataUrlRegexp)) {\n\t    return aPath;\n\t  }\n\t\n\t  // `join('http://', 'www.example.com')`\n\t  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n\t    aRootUrl.host = aPath;\n\t    return urlGenerate(aRootUrl);\n\t  }\n\t\n\t  var joined = aPath.charAt(0) === '/'\n\t    ? aPath\n\t    : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\t\n\t  if (aRootUrl) {\n\t    aRootUrl.path = joined;\n\t    return urlGenerate(aRootUrl);\n\t  }\n\t  return joined;\n\t}\n\texports.join = join;\n\t\n\texports.isAbsolute = function (aPath) {\n\t  return aPath.charAt(0) === '/' || urlRegexp.test(aPath);\n\t};\n\t\n\t/**\n\t * Make a path relative to a URL or another path.\n\t *\n\t * @param aRoot The root path or URL.\n\t * @param aPath The path or URL to be made relative to aRoot.\n\t */\n\tfunction relative(aRoot, aPath) {\n\t  if (aRoot === \"\") {\n\t    aRoot = \".\";\n\t  }\n\t\n\t  aRoot = aRoot.replace(/\\/$/, '');\n\t\n\t  // It is possible for the path to be above the root. In this case, simply\n\t  // checking whether the root is a prefix of the path won't work. Instead, we\n\t  // need to remove components from the root one by one, until either we find\n\t  // a prefix that fits, or we run out of components to remove.\n\t  var level = 0;\n\t  while (aPath.indexOf(aRoot + '/') !== 0) {\n\t    var index = aRoot.lastIndexOf(\"/\");\n\t    if (index < 0) {\n\t      return aPath;\n\t    }\n\t\n\t    // If the only part of the root that is left is the scheme (i.e. http://,\n\t    // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n\t    // have exhausted all components, so the path is not relative to the root.\n\t    aRoot = aRoot.slice(0, index);\n\t    if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n\t      return aPath;\n\t    }\n\t\n\t    ++level;\n\t  }\n\t\n\t  // Make sure we add a \"../\" for each component we removed from the root.\n\t  return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n\t}\n\texports.relative = relative;\n\t\n\tvar supportsNullProto = (function () {\n\t  var obj = Object.create(null);\n\t  return !('__proto__' in obj);\n\t}());\n\t\n\tfunction identity (s) {\n\t  return s;\n\t}\n\t\n\t/**\n\t * Because behavior goes wacky when you set `__proto__` on objects, we\n\t * have to prefix all the strings in our set with an arbitrary character.\n\t *\n\t * See https://github.com/mozilla/source-map/pull/31 and\n\t * https://github.com/mozilla/source-map/issues/30\n\t *\n\t * @param String aStr\n\t */\n\tfunction toSetString(aStr) {\n\t  if (isProtoString(aStr)) {\n\t    return '$' + aStr;\n\t  }\n\t\n\t  return aStr;\n\t}\n\texports.toSetString = supportsNullProto ? identity : toSetString;\n\t\n\tfunction fromSetString(aStr) {\n\t  if (isProtoString(aStr)) {\n\t    return aStr.slice(1);\n\t  }\n\t\n\t  return aStr;\n\t}\n\texports.fromSetString = supportsNullProto ? identity : fromSetString;\n\t\n\tfunction isProtoString(s) {\n\t  if (!s) {\n\t    return false;\n\t  }\n\t\n\t  var length = s.length;\n\t\n\t  if (length < 9 /* \"__proto__\".length */) {\n\t    return false;\n\t  }\n\t\n\t  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||\n\t      s.charCodeAt(length - 2) !== 95  /* '_' */ ||\n\t      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n\t      s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n\t      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n\t      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n\t      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n\t      s.charCodeAt(length - 8) !== 95  /* '_' */ ||\n\t      s.charCodeAt(length - 9) !== 95  /* '_' */) {\n\t    return false;\n\t  }\n\t\n\t  for (var i = length - 10; i >= 0; i--) {\n\t    if (s.charCodeAt(i) !== 36 /* '$' */) {\n\t      return false;\n\t    }\n\t  }\n\t\n\t  return true;\n\t}\n\t\n\t/**\n\t * Comparator between two mappings where the original positions are compared.\n\t *\n\t * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n\t * mappings with the same original source/line/column, but different generated\n\t * line and column the same. Useful when searching for a mapping with a\n\t * stubbed out mapping.\n\t */\n\tfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n\t  var cmp = strcmp(mappingA.source, mappingB.source);\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\t\n\t  cmp = mappingA.originalLine - mappingB.originalLine;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\t\n\t  cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t  if (cmp !== 0 || onlyCompareOriginal) {\n\t    return cmp;\n\t  }\n\t\n\t  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\t\n\t  cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\t\n\t  return strcmp(mappingA.name, mappingB.name);\n\t}\n\texports.compareByOriginalPositions = compareByOriginalPositions;\n\t\n\t/**\n\t * Comparator between two mappings with deflated source and name indices where\n\t * the generated positions are compared.\n\t *\n\t * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n\t * mappings with the same generated line and column, but different\n\t * source/name/original line and column the same. Useful when searching for a\n\t * mapping with a stubbed out mapping.\n\t */\n\tfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n\t  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\t\n\t  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t  if (cmp !== 0 || onlyCompareGenerated) {\n\t    return cmp;\n\t  }\n\t\n\t  cmp = strcmp(mappingA.source, mappingB.source);\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\t\n\t  cmp = mappingA.originalLine - mappingB.originalLine;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\t\n\t  cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\t\n\t  return strcmp(mappingA.name, mappingB.name);\n\t}\n\texports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\t\n\tfunction strcmp(aStr1, aStr2) {\n\t  if (aStr1 === aStr2) {\n\t    return 0;\n\t  }\n\t\n\t  if (aStr1 === null) {\n\t    return 1; // aStr2 !== null\n\t  }\n\t\n\t  if (aStr2 === null) {\n\t    return -1; // aStr1 !== null\n\t  }\n\t\n\t  if (aStr1 > aStr2) {\n\t    return 1;\n\t  }\n\t\n\t  return -1;\n\t}\n\t\n\t/**\n\t * Comparator between two mappings with inflated source and name strings where\n\t * the generated positions are compared.\n\t */\n\tfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n\t  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\t\n\t  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\t\n\t  cmp = strcmp(mappingA.source, mappingB.source);\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\t\n\t  cmp = mappingA.originalLine - mappingB.originalLine;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\t\n\t  cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\t\n\t  return strcmp(mappingA.name, mappingB.name);\n\t}\n\texports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\t\n\t/**\n\t * Strip any JSON XSSI avoidance prefix from the string (as documented\n\t * in the source maps specification), and then parse the string as\n\t * JSON.\n\t */\n\tfunction parseSourceMapInput(str) {\n\t  return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, ''));\n\t}\n\texports.parseSourceMapInput = parseSourceMapInput;\n\t\n\t/**\n\t * Compute the URL of a source given the the source root, the source's\n\t * URL, and the source map's URL.\n\t */\n\tfunction computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {\n\t  sourceURL = sourceURL || '';\n\t\n\t  if (sourceRoot) {\n\t    // This follows what Chrome does.\n\t    if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {\n\t      sourceRoot += '/';\n\t    }\n\t    // The spec says:\n\t    //   Line 4: An optional source root, useful for relocating source\n\t    //   files on a server or removing repeated values in the\n\t    //   “sources” entry.  This value is prepended to the individual\n\t    //   entries in the “source” field.\n\t    sourceURL = sourceRoot + sourceURL;\n\t  }\n\t\n\t  // Historically, SourceMapConsumer did not take the sourceMapURL as\n\t  // a parameter.  This mode is still somewhat supported, which is why\n\t  // this code block is conditional.  However, it's preferable to pass\n\t  // the source map URL to SourceMapConsumer, so that this function\n\t  // can implement the source URL resolution algorithm as outlined in\n\t  // the spec.  This block is basically the equivalent of:\n\t  //    new URL(sourceURL, sourceMapURL).toString()\n\t  // ... except it avoids using URL, which wasn't available in the\n\t  // older releases of node still supported by this library.\n\t  //\n\t  // The spec says:\n\t  //   If the sources are not absolute URLs after prepending of the\n\t  //   “sourceRoot”, the sources are resolved relative to the\n\t  //   SourceMap (like resolving script src in a html document).\n\t  if (sourceMapURL) {\n\t    var parsed = urlParse(sourceMapURL);\n\t    if (!parsed) {\n\t      throw new Error(\"sourceMapURL could not be parsed\");\n\t    }\n\t    if (parsed.path) {\n\t      // Strip the last path component, but keep the \"/\".\n\t      var index = parsed.path.lastIndexOf('/');\n\t      if (index >= 0) {\n\t        parsed.path = parsed.path.substring(0, index + 1);\n\t      }\n\t    }\n\t    sourceURL = join(urlGenerate(parsed), sourceURL);\n\t  }\n\t\n\t  return normalize(sourceURL);\n\t}\n\texports.computeSourceURL = computeSourceURL;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar util = __webpack_require__(4);\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar hasNativeMap = typeof Map !== \"undefined\";\n\t\n\t/**\n\t * A data structure which is a combination of an array and a set. Adding a new\n\t * member is O(1), testing for membership is O(1), and finding the index of an\n\t * element is O(1). Removing elements from the set is not supported. Only\n\t * strings are supported for membership.\n\t */\n\tfunction ArraySet() {\n\t  this._array = [];\n\t  this._set = hasNativeMap ? new Map() : Object.create(null);\n\t}\n\t\n\t/**\n\t * Static method for creating ArraySet instances from an existing array.\n\t */\n\tArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n\t  var set = new ArraySet();\n\t  for (var i = 0, len = aArray.length; i < len; i++) {\n\t    set.add(aArray[i], aAllowDuplicates);\n\t  }\n\t  return set;\n\t};\n\t\n\t/**\n\t * Return how many unique items are in this ArraySet. If duplicates have been\n\t * added, than those do not count towards the size.\n\t *\n\t * @returns Number\n\t */\n\tArraySet.prototype.size = function ArraySet_size() {\n\t  return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n\t};\n\t\n\t/**\n\t * Add the given string to this set.\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n\t  var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n\t  var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n\t  var idx = this._array.length;\n\t  if (!isDuplicate || aAllowDuplicates) {\n\t    this._array.push(aStr);\n\t  }\n\t  if (!isDuplicate) {\n\t    if (hasNativeMap) {\n\t      this._set.set(aStr, idx);\n\t    } else {\n\t      this._set[sStr] = idx;\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * Is the given string a member of this set?\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.has = function ArraySet_has(aStr) {\n\t  if (hasNativeMap) {\n\t    return this._set.has(aStr);\n\t  } else {\n\t    var sStr = util.toSetString(aStr);\n\t    return has.call(this._set, sStr);\n\t  }\n\t};\n\t\n\t/**\n\t * What is the index of the given string in the array?\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n\t  if (hasNativeMap) {\n\t    var idx = this._set.get(aStr);\n\t    if (idx >= 0) {\n\t        return idx;\n\t    }\n\t  } else {\n\t    var sStr = util.toSetString(aStr);\n\t    if (has.call(this._set, sStr)) {\n\t      return this._set[sStr];\n\t    }\n\t  }\n\t\n\t  throw new Error('\"' + aStr + '\" is not in the set.');\n\t};\n\t\n\t/**\n\t * What is the element at the given index?\n\t *\n\t * @param Number aIdx\n\t */\n\tArraySet.prototype.at = function ArraySet_at(aIdx) {\n\t  if (aIdx >= 0 && aIdx < this._array.length) {\n\t    return this._array[aIdx];\n\t  }\n\t  throw new Error('No element indexed by ' + aIdx);\n\t};\n\t\n\t/**\n\t * Returns the array representation of this set (which has the proper indices\n\t * indicated by indexOf). Note that this is a copy of the internal array used\n\t * for storing the members so that no one can mess with internal state.\n\t */\n\tArraySet.prototype.toArray = function ArraySet_toArray() {\n\t  return this._array.slice();\n\t};\n\t\n\texports.ArraySet = ArraySet;\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2014 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar util = __webpack_require__(4);\n\t\n\t/**\n\t * Determine whether mappingB is after mappingA with respect to generated\n\t * position.\n\t */\n\tfunction generatedPositionAfter(mappingA, mappingB) {\n\t  // Optimized for most common case\n\t  var lineA = mappingA.generatedLine;\n\t  var lineB = mappingB.generatedLine;\n\t  var columnA = mappingA.generatedColumn;\n\t  var columnB = mappingB.generatedColumn;\n\t  return lineB > lineA || lineB == lineA && columnB >= columnA ||\n\t         util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n\t}\n\t\n\t/**\n\t * A data structure to provide a sorted view of accumulated mappings in a\n\t * performance conscious manner. It trades a neglibable overhead in general\n\t * case for a large speedup in case of mappings being added in order.\n\t */\n\tfunction MappingList() {\n\t  this._array = [];\n\t  this._sorted = true;\n\t  // Serves as infimum\n\t  this._last = {generatedLine: -1, generatedColumn: 0};\n\t}\n\t\n\t/**\n\t * Iterate through internal items. This method takes the same arguments that\n\t * `Array.prototype.forEach` takes.\n\t *\n\t * NOTE: The order of the mappings is NOT guaranteed.\n\t */\n\tMappingList.prototype.unsortedForEach =\n\t  function MappingList_forEach(aCallback, aThisArg) {\n\t    this._array.forEach(aCallback, aThisArg);\n\t  };\n\t\n\t/**\n\t * Add the given source mapping.\n\t *\n\t * @param Object aMapping\n\t */\n\tMappingList.prototype.add = function MappingList_add(aMapping) {\n\t  if (generatedPositionAfter(this._last, aMapping)) {\n\t    this._last = aMapping;\n\t    this._array.push(aMapping);\n\t  } else {\n\t    this._sorted = false;\n\t    this._array.push(aMapping);\n\t  }\n\t};\n\t\n\t/**\n\t * Returns the flat, sorted array of mappings. The mappings are sorted by\n\t * generated position.\n\t *\n\t * WARNING: This method returns internal data without copying, for\n\t * performance. The return value must NOT be mutated, and should be treated as\n\t * an immutable borrow. If you want to take ownership, you must make your own\n\t * copy.\n\t */\n\tMappingList.prototype.toArray = function MappingList_toArray() {\n\t  if (!this._sorted) {\n\t    this._array.sort(util.compareByGeneratedPositionsInflated);\n\t    this._sorted = true;\n\t  }\n\t  return this._array;\n\t};\n\t\n\texports.MappingList = MappingList;\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar util = __webpack_require__(4);\n\tvar binarySearch = __webpack_require__(8);\n\tvar ArraySet = __webpack_require__(5).ArraySet;\n\tvar base64VLQ = __webpack_require__(2);\n\tvar quickSort = __webpack_require__(9).quickSort;\n\t\n\tfunction SourceMapConsumer(aSourceMap, aSourceMapURL) {\n\t  var sourceMap = aSourceMap;\n\t  if (typeof aSourceMap === 'string') {\n\t    sourceMap = util.parseSourceMapInput(aSourceMap);\n\t  }\n\t\n\t  return sourceMap.sections != null\n\t    ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)\n\t    : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);\n\t}\n\t\n\tSourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {\n\t  return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);\n\t}\n\t\n\t/**\n\t * The version of the source mapping spec that we are consuming.\n\t */\n\tSourceMapConsumer.prototype._version = 3;\n\t\n\t// `__generatedMappings` and `__originalMappings` are arrays that hold the\n\t// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n\t// are lazily instantiated, accessed via the `_generatedMappings` and\n\t// `_originalMappings` getters respectively, and we only parse the mappings\n\t// and create these arrays once queried for a source location. We jump through\n\t// these hoops because there can be many thousands of mappings, and parsing\n\t// them is expensive, so we only want to do it if we must.\n\t//\n\t// Each object in the arrays is of the form:\n\t//\n\t//     {\n\t//       generatedLine: The line number in the generated code,\n\t//       generatedColumn: The column number in the generated code,\n\t//       source: The path to the original source file that generated this\n\t//               chunk of code,\n\t//       originalLine: The line number in the original source that\n\t//                     corresponds to this chunk of generated code,\n\t//       originalColumn: The column number in the original source that\n\t//                       corresponds to this chunk of generated code,\n\t//       name: The name of the original symbol which generated this chunk of\n\t//             code.\n\t//     }\n\t//\n\t// All properties except for `generatedLine` and `generatedColumn` can be\n\t// `null`.\n\t//\n\t// `_generatedMappings` is ordered by the generated positions.\n\t//\n\t// `_originalMappings` is ordered by the original positions.\n\t\n\tSourceMapConsumer.prototype.__generatedMappings = null;\n\tObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n\t  configurable: true,\n\t  enumerable: true,\n\t  get: function () {\n\t    if (!this.__generatedMappings) {\n\t      this._parseMappings(this._mappings, this.sourceRoot);\n\t    }\n\t\n\t    return this.__generatedMappings;\n\t  }\n\t});\n\t\n\tSourceMapConsumer.prototype.__originalMappings = null;\n\tObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n\t  configurable: true,\n\t  enumerable: true,\n\t  get: function () {\n\t    if (!this.__originalMappings) {\n\t      this._parseMappings(this._mappings, this.sourceRoot);\n\t    }\n\t\n\t    return this.__originalMappings;\n\t  }\n\t});\n\t\n\tSourceMapConsumer.prototype._charIsMappingSeparator =\n\t  function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n\t    var c = aStr.charAt(index);\n\t    return c === \";\" || c === \",\";\n\t  };\n\t\n\t/**\n\t * Parse the mappings in a string in to a data structure which we can easily\n\t * query (the ordered arrays in the `this.__generatedMappings` and\n\t * `this.__originalMappings` properties).\n\t */\n\tSourceMapConsumer.prototype._parseMappings =\n\t  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n\t    throw new Error(\"Subclasses must implement _parseMappings\");\n\t  };\n\t\n\tSourceMapConsumer.GENERATED_ORDER = 1;\n\tSourceMapConsumer.ORIGINAL_ORDER = 2;\n\t\n\tSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\n\tSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\t\n\t/**\n\t * Iterate over each mapping between an original source/line/column and a\n\t * generated line/column in this source map.\n\t *\n\t * @param Function aCallback\n\t *        The function that is called with each mapping.\n\t * @param Object aContext\n\t *        Optional. If specified, this object will be the value of `this` every\n\t *        time that `aCallback` is called.\n\t * @param aOrder\n\t *        Either `SourceMapConsumer.GENERATED_ORDER` or\n\t *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n\t *        iterate over the mappings sorted by the generated file's line/column\n\t *        order or the original's source/line/column order, respectively. Defaults to\n\t *        `SourceMapConsumer.GENERATED_ORDER`.\n\t */\n\tSourceMapConsumer.prototype.eachMapping =\n\t  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n\t    var context = aContext || null;\n\t    var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\t\n\t    var mappings;\n\t    switch (order) {\n\t    case SourceMapConsumer.GENERATED_ORDER:\n\t      mappings = this._generatedMappings;\n\t      break;\n\t    case SourceMapConsumer.ORIGINAL_ORDER:\n\t      mappings = this._originalMappings;\n\t      break;\n\t    default:\n\t      throw new Error(\"Unknown order of iteration.\");\n\t    }\n\t\n\t    var sourceRoot = this.sourceRoot;\n\t    mappings.map(function (mapping) {\n\t      var source = mapping.source === null ? null : this._sources.at(mapping.source);\n\t      source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);\n\t      return {\n\t        source: source,\n\t        generatedLine: mapping.generatedLine,\n\t        generatedColumn: mapping.generatedColumn,\n\t        originalLine: mapping.originalLine,\n\t        originalColumn: mapping.originalColumn,\n\t        name: mapping.name === null ? null : this._names.at(mapping.name)\n\t      };\n\t    }, this).forEach(aCallback, context);\n\t  };\n\t\n\t/**\n\t * Returns all generated line and column information for the original source,\n\t * line, and column provided. If no column is provided, returns all mappings\n\t * corresponding to a either the line we are searching for or the next\n\t * closest line that has any mappings. Otherwise, returns all mappings\n\t * corresponding to the given line and either the column we are searching for\n\t * or the next closest column that has any offsets.\n\t *\n\t * The only argument is an object with the following properties:\n\t *\n\t *   - source: The filename of the original source.\n\t *   - line: The line number in the original source.  The line number is 1-based.\n\t *   - column: Optional. the column number in the original source.\n\t *    The column number is 0-based.\n\t *\n\t * and an array of objects is returned, each with the following properties:\n\t *\n\t *   - line: The line number in the generated source, or null.  The\n\t *    line number is 1-based.\n\t *   - column: The column number in the generated source, or null.\n\t *    The column number is 0-based.\n\t */\n\tSourceMapConsumer.prototype.allGeneratedPositionsFor =\n\t  function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n\t    var line = util.getArg(aArgs, 'line');\n\t\n\t    // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n\t    // returns the index of the closest mapping less than the needle. By\n\t    // setting needle.originalColumn to 0, we thus find the last mapping for\n\t    // the given line, provided such a mapping exists.\n\t    var needle = {\n\t      source: util.getArg(aArgs, 'source'),\n\t      originalLine: line,\n\t      originalColumn: util.getArg(aArgs, 'column', 0)\n\t    };\n\t\n\t    needle.source = this._findSourceIndex(needle.source);\n\t    if (needle.source < 0) {\n\t      return [];\n\t    }\n\t\n\t    var mappings = [];\n\t\n\t    var index = this._findMapping(needle,\n\t                                  this._originalMappings,\n\t                                  \"originalLine\",\n\t                                  \"originalColumn\",\n\t                                  util.compareByOriginalPositions,\n\t                                  binarySearch.LEAST_UPPER_BOUND);\n\t    if (index >= 0) {\n\t      var mapping = this._originalMappings[index];\n\t\n\t      if (aArgs.column === undefined) {\n\t        var originalLine = mapping.originalLine;\n\t\n\t        // Iterate until either we run out of mappings, or we run into\n\t        // a mapping for a different line than the one we found. Since\n\t        // mappings are sorted, this is guaranteed to find all mappings for\n\t        // the line we found.\n\t        while (mapping && mapping.originalLine === originalLine) {\n\t          mappings.push({\n\t            line: util.getArg(mapping, 'generatedLine', null),\n\t            column: util.getArg(mapping, 'generatedColumn', null),\n\t            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t          });\n\t\n\t          mapping = this._originalMappings[++index];\n\t        }\n\t      } else {\n\t        var originalColumn = mapping.originalColumn;\n\t\n\t        // Iterate until either we run out of mappings, or we run into\n\t        // a mapping for a different line than the one we were searching for.\n\t        // Since mappings are sorted, this is guaranteed to find all mappings for\n\t        // the line we are searching for.\n\t        while (mapping &&\n\t               mapping.originalLine === line &&\n\t               mapping.originalColumn == originalColumn) {\n\t          mappings.push({\n\t            line: util.getArg(mapping, 'generatedLine', null),\n\t            column: util.getArg(mapping, 'generatedColumn', null),\n\t            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t          });\n\t\n\t          mapping = this._originalMappings[++index];\n\t        }\n\t      }\n\t    }\n\t\n\t    return mappings;\n\t  };\n\t\n\texports.SourceMapConsumer = SourceMapConsumer;\n\t\n\t/**\n\t * A BasicSourceMapConsumer instance represents a parsed source map which we can\n\t * query for information about the original file positions by giving it a file\n\t * position in the generated source.\n\t *\n\t * The first parameter is the raw source map (either as a JSON string, or\n\t * already parsed to an object). According to the spec, source maps have the\n\t * following attributes:\n\t *\n\t *   - version: Which version of the source map spec this map is following.\n\t *   - sources: An array of URLs to the original source files.\n\t *   - names: An array of identifiers which can be referrenced by individual mappings.\n\t *   - sourceRoot: Optional. The URL root from which all sources are relative.\n\t *   - sourcesContent: Optional. An array of contents of the original source files.\n\t *   - mappings: A string of base64 VLQs which contain the actual mappings.\n\t *   - file: Optional. The generated file this source map is associated with.\n\t *\n\t * Here is an example source map, taken from the source map spec[0]:\n\t *\n\t *     {\n\t *       version : 3,\n\t *       file: \"out.js\",\n\t *       sourceRoot : \"\",\n\t *       sources: [\"foo.js\", \"bar.js\"],\n\t *       names: [\"src\", \"maps\", \"are\", \"fun\"],\n\t *       mappings: \"AA,AB;;ABCDE;\"\n\t *     }\n\t *\n\t * The second parameter, if given, is a string whose value is the URL\n\t * at which the source map was found.  This URL is used to compute the\n\t * sources array.\n\t *\n\t * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n\t */\n\tfunction BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {\n\t  var sourceMap = aSourceMap;\n\t  if (typeof aSourceMap === 'string') {\n\t    sourceMap = util.parseSourceMapInput(aSourceMap);\n\t  }\n\t\n\t  var version = util.getArg(sourceMap, 'version');\n\t  var sources = util.getArg(sourceMap, 'sources');\n\t  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n\t  // requires the array) to play nice here.\n\t  var names = util.getArg(sourceMap, 'names', []);\n\t  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n\t  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n\t  var mappings = util.getArg(sourceMap, 'mappings');\n\t  var file = util.getArg(sourceMap, 'file', null);\n\t\n\t  // Once again, Sass deviates from the spec and supplies the version as a\n\t  // string rather than a number, so we use loose equality checking here.\n\t  if (version != this._version) {\n\t    throw new Error('Unsupported version: ' + version);\n\t  }\n\t\n\t  if (sourceRoot) {\n\t    sourceRoot = util.normalize(sourceRoot);\n\t  }\n\t\n\t  sources = sources\n\t    .map(String)\n\t    // Some source maps produce relative source paths like \"./foo.js\" instead of\n\t    // \"foo.js\".  Normalize these first so that future comparisons will succeed.\n\t    // See bugzil.la/1090768.\n\t    .map(util.normalize)\n\t    // Always ensure that absolute sources are internally stored relative to\n\t    // the source root, if the source root is absolute. Not doing this would\n\t    // be particularly problematic when the source root is a prefix of the\n\t    // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n\t    .map(function (source) {\n\t      return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n\t        ? util.relative(sourceRoot, source)\n\t        : source;\n\t    });\n\t\n\t  // Pass `true` below to allow duplicate names and sources. While source maps\n\t  // are intended to be compressed and deduplicated, the TypeScript compiler\n\t  // sometimes generates source maps with duplicates in them. See Github issue\n\t  // #72 and bugzil.la/889492.\n\t  this._names = ArraySet.fromArray(names.map(String), true);\n\t  this._sources = ArraySet.fromArray(sources, true);\n\t\n\t  this._absoluteSources = this._sources.toArray().map(function (s) {\n\t    return util.computeSourceURL(sourceRoot, s, aSourceMapURL);\n\t  });\n\t\n\t  this.sourceRoot = sourceRoot;\n\t  this.sourcesContent = sourcesContent;\n\t  this._mappings = mappings;\n\t  this._sourceMapURL = aSourceMapURL;\n\t  this.file = file;\n\t}\n\t\n\tBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\n\tBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\t\n\t/**\n\t * Utility function to find the index of a source.  Returns -1 if not\n\t * found.\n\t */\n\tBasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {\n\t  var relativeSource = aSource;\n\t  if (this.sourceRoot != null) {\n\t    relativeSource = util.relative(this.sourceRoot, relativeSource);\n\t  }\n\t\n\t  if (this._sources.has(relativeSource)) {\n\t    return this._sources.indexOf(relativeSource);\n\t  }\n\t\n\t  // Maybe aSource is an absolute URL as returned by |sources|.  In\n\t  // this case we can't simply undo the transform.\n\t  var i;\n\t  for (i = 0; i < this._absoluteSources.length; ++i) {\n\t    if (this._absoluteSources[i] == aSource) {\n\t      return i;\n\t    }\n\t  }\n\t\n\t  return -1;\n\t};\n\t\n\t/**\n\t * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n\t *\n\t * @param SourceMapGenerator aSourceMap\n\t *        The source map that will be consumed.\n\t * @param String aSourceMapURL\n\t *        The URL at which the source map can be found (optional)\n\t * @returns BasicSourceMapConsumer\n\t */\n\tBasicSourceMapConsumer.fromSourceMap =\n\t  function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {\n\t    var smc = Object.create(BasicSourceMapConsumer.prototype);\n\t\n\t    var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n\t    var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n\t    smc.sourceRoot = aSourceMap._sourceRoot;\n\t    smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n\t                                                            smc.sourceRoot);\n\t    smc.file = aSourceMap._file;\n\t    smc._sourceMapURL = aSourceMapURL;\n\t    smc._absoluteSources = smc._sources.toArray().map(function (s) {\n\t      return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);\n\t    });\n\t\n\t    // Because we are modifying the entries (by converting string sources and\n\t    // names to indices into the sources and names ArraySets), we have to make\n\t    // a copy of the entry or else bad things happen. Shared mutable state\n\t    // strikes again! See github issue #191.\n\t\n\t    var generatedMappings = aSourceMap._mappings.toArray().slice();\n\t    var destGeneratedMappings = smc.__generatedMappings = [];\n\t    var destOriginalMappings = smc.__originalMappings = [];\n\t\n\t    for (var i = 0, length = generatedMappings.length; i < length; i++) {\n\t      var srcMapping = generatedMappings[i];\n\t      var destMapping = new Mapping;\n\t      destMapping.generatedLine = srcMapping.generatedLine;\n\t      destMapping.generatedColumn = srcMapping.generatedColumn;\n\t\n\t      if (srcMapping.source) {\n\t        destMapping.source = sources.indexOf(srcMapping.source);\n\t        destMapping.originalLine = srcMapping.originalLine;\n\t        destMapping.originalColumn = srcMapping.originalColumn;\n\t\n\t        if (srcMapping.name) {\n\t          destMapping.name = names.indexOf(srcMapping.name);\n\t        }\n\t\n\t        destOriginalMappings.push(destMapping);\n\t      }\n\t\n\t      destGeneratedMappings.push(destMapping);\n\t    }\n\t\n\t    quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\t\n\t    return smc;\n\t  };\n\t\n\t/**\n\t * The version of the source mapping spec that we are consuming.\n\t */\n\tBasicSourceMapConsumer.prototype._version = 3;\n\t\n\t/**\n\t * The list of original sources.\n\t */\n\tObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n\t  get: function () {\n\t    return this._absoluteSources.slice();\n\t  }\n\t});\n\t\n\t/**\n\t * Provide the JIT with a nice shape / hidden class.\n\t */\n\tfunction Mapping() {\n\t  this.generatedLine = 0;\n\t  this.generatedColumn = 0;\n\t  this.source = null;\n\t  this.originalLine = null;\n\t  this.originalColumn = null;\n\t  this.name = null;\n\t}\n\t\n\t/**\n\t * Parse the mappings in a string in to a data structure which we can easily\n\t * query (the ordered arrays in the `this.__generatedMappings` and\n\t * `this.__originalMappings` properties).\n\t */\n\tBasicSourceMapConsumer.prototype._parseMappings =\n\t  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n\t    var generatedLine = 1;\n\t    var previousGeneratedColumn = 0;\n\t    var previousOriginalLine = 0;\n\t    var previousOriginalColumn = 0;\n\t    var previousSource = 0;\n\t    var previousName = 0;\n\t    var length = aStr.length;\n\t    var index = 0;\n\t    var cachedSegments = {};\n\t    var temp = {};\n\t    var originalMappings = [];\n\t    var generatedMappings = [];\n\t    var mapping, str, segment, end, value;\n\t\n\t    while (index < length) {\n\t      if (aStr.charAt(index) === ';') {\n\t        generatedLine++;\n\t        index++;\n\t        previousGeneratedColumn = 0;\n\t      }\n\t      else if (aStr.charAt(index) === ',') {\n\t        index++;\n\t      }\n\t      else {\n\t        mapping = new Mapping();\n\t        mapping.generatedLine = generatedLine;\n\t\n\t        // Because each offset is encoded relative to the previous one,\n\t        // many segments often have the same encoding. We can exploit this\n\t        // fact by caching the parsed variable length fields of each segment,\n\t        // allowing us to avoid a second parse if we encounter the same\n\t        // segment again.\n\t        for (end = index; end < length; end++) {\n\t          if (this._charIsMappingSeparator(aStr, end)) {\n\t            break;\n\t          }\n\t        }\n\t        str = aStr.slice(index, end);\n\t\n\t        segment = cachedSegments[str];\n\t        if (segment) {\n\t          index += str.length;\n\t        } else {\n\t          segment = [];\n\t          while (index < end) {\n\t            base64VLQ.decode(aStr, index, temp);\n\t            value = temp.value;\n\t            index = temp.rest;\n\t            segment.push(value);\n\t          }\n\t\n\t          if (segment.length === 2) {\n\t            throw new Error('Found a source, but no line and column');\n\t          }\n\t\n\t          if (segment.length === 3) {\n\t            throw new Error('Found a source and line, but no column');\n\t          }\n\t\n\t          cachedSegments[str] = segment;\n\t        }\n\t\n\t        // Generated column.\n\t        mapping.generatedColumn = previousGeneratedColumn + segment[0];\n\t        previousGeneratedColumn = mapping.generatedColumn;\n\t\n\t        if (segment.length > 1) {\n\t          // Original source.\n\t          mapping.source = previousSource + segment[1];\n\t          previousSource += segment[1];\n\t\n\t          // Original line.\n\t          mapping.originalLine = previousOriginalLine + segment[2];\n\t          previousOriginalLine = mapping.originalLine;\n\t          // Lines are stored 0-based\n\t          mapping.originalLine += 1;\n\t\n\t          // Original column.\n\t          mapping.originalColumn = previousOriginalColumn + segment[3];\n\t          previousOriginalColumn = mapping.originalColumn;\n\t\n\t          if (segment.length > 4) {\n\t            // Original name.\n\t            mapping.name = previousName + segment[4];\n\t            previousName += segment[4];\n\t          }\n\t        }\n\t\n\t        generatedMappings.push(mapping);\n\t        if (typeof mapping.originalLine === 'number') {\n\t          originalMappings.push(mapping);\n\t        }\n\t      }\n\t    }\n\t\n\t    quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n\t    this.__generatedMappings = generatedMappings;\n\t\n\t    quickSort(originalMappings, util.compareByOriginalPositions);\n\t    this.__originalMappings = originalMappings;\n\t  };\n\t\n\t/**\n\t * Find the mapping that best matches the hypothetical \"needle\" mapping that\n\t * we are searching for in the given \"haystack\" of mappings.\n\t */\n\tBasicSourceMapConsumer.prototype._findMapping =\n\t  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n\t                                         aColumnName, aComparator, aBias) {\n\t    // To return the position we are searching for, we must first find the\n\t    // mapping for the given position and then return the opposite position it\n\t    // points to. Because the mappings are sorted, we can use binary search to\n\t    // find the best mapping.\n\t\n\t    if (aNeedle[aLineName] <= 0) {\n\t      throw new TypeError('Line must be greater than or equal to 1, got '\n\t                          + aNeedle[aLineName]);\n\t    }\n\t    if (aNeedle[aColumnName] < 0) {\n\t      throw new TypeError('Column must be greater than or equal to 0, got '\n\t                          + aNeedle[aColumnName]);\n\t    }\n\t\n\t    return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n\t  };\n\t\n\t/**\n\t * Compute the last column for each generated mapping. The last column is\n\t * inclusive.\n\t */\n\tBasicSourceMapConsumer.prototype.computeColumnSpans =\n\t  function SourceMapConsumer_computeColumnSpans() {\n\t    for (var index = 0; index < this._generatedMappings.length; ++index) {\n\t      var mapping = this._generatedMappings[index];\n\t\n\t      // Mappings do not contain a field for the last generated columnt. We\n\t      // can come up with an optimistic estimate, however, by assuming that\n\t      // mappings are contiguous (i.e. given two consecutive mappings, the\n\t      // first mapping ends where the second one starts).\n\t      if (index + 1 < this._generatedMappings.length) {\n\t        var nextMapping = this._generatedMappings[index + 1];\n\t\n\t        if (mapping.generatedLine === nextMapping.generatedLine) {\n\t          mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n\t          continue;\n\t        }\n\t      }\n\t\n\t      // The last mapping for each line spans the entire line.\n\t      mapping.lastGeneratedColumn = Infinity;\n\t    }\n\t  };\n\t\n\t/**\n\t * Returns the original source, line, and column information for the generated\n\t * source's line and column positions provided. The only argument is an object\n\t * with the following properties:\n\t *\n\t *   - line: The line number in the generated source.  The line number\n\t *     is 1-based.\n\t *   - column: The column number in the generated source.  The column\n\t *     number is 0-based.\n\t *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n\t *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t *     closest element that is smaller than or greater than the one we are\n\t *     searching for, respectively, if the exact element cannot be found.\n\t *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t *   - source: The original source file, or null.\n\t *   - line: The line number in the original source, or null.  The\n\t *     line number is 1-based.\n\t *   - column: The column number in the original source, or null.  The\n\t *     column number is 0-based.\n\t *   - name: The original identifier, or null.\n\t */\n\tBasicSourceMapConsumer.prototype.originalPositionFor =\n\t  function SourceMapConsumer_originalPositionFor(aArgs) {\n\t    var needle = {\n\t      generatedLine: util.getArg(aArgs, 'line'),\n\t      generatedColumn: util.getArg(aArgs, 'column')\n\t    };\n\t\n\t    var index = this._findMapping(\n\t      needle,\n\t      this._generatedMappings,\n\t      \"generatedLine\",\n\t      \"generatedColumn\",\n\t      util.compareByGeneratedPositionsDeflated,\n\t      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n\t    );\n\t\n\t    if (index >= 0) {\n\t      var mapping = this._generatedMappings[index];\n\t\n\t      if (mapping.generatedLine === needle.generatedLine) {\n\t        var source = util.getArg(mapping, 'source', null);\n\t        if (source !== null) {\n\t          source = this._sources.at(source);\n\t          source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);\n\t        }\n\t        var name = util.getArg(mapping, 'name', null);\n\t        if (name !== null) {\n\t          name = this._names.at(name);\n\t        }\n\t        return {\n\t          source: source,\n\t          line: util.getArg(mapping, 'originalLine', null),\n\t          column: util.getArg(mapping, 'originalColumn', null),\n\t          name: name\n\t        };\n\t      }\n\t    }\n\t\n\t    return {\n\t      source: null,\n\t      line: null,\n\t      column: null,\n\t      name: null\n\t    };\n\t  };\n\t\n\t/**\n\t * Return true if we have the source content for every source in the source\n\t * map, false otherwise.\n\t */\n\tBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n\t  function BasicSourceMapConsumer_hasContentsOfAllSources() {\n\t    if (!this.sourcesContent) {\n\t      return false;\n\t    }\n\t    return this.sourcesContent.length >= this._sources.size() &&\n\t      !this.sourcesContent.some(function (sc) { return sc == null; });\n\t  };\n\t\n\t/**\n\t * Returns the original source content. The only argument is the url of the\n\t * original source file. Returns null if no original source content is\n\t * available.\n\t */\n\tBasicSourceMapConsumer.prototype.sourceContentFor =\n\t  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n\t    if (!this.sourcesContent) {\n\t      return null;\n\t    }\n\t\n\t    var index = this._findSourceIndex(aSource);\n\t    if (index >= 0) {\n\t      return this.sourcesContent[index];\n\t    }\n\t\n\t    var relativeSource = aSource;\n\t    if (this.sourceRoot != null) {\n\t      relativeSource = util.relative(this.sourceRoot, relativeSource);\n\t    }\n\t\n\t    var url;\n\t    if (this.sourceRoot != null\n\t        && (url = util.urlParse(this.sourceRoot))) {\n\t      // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n\t      // many users. We can help them out when they expect file:// URIs to\n\t      // behave like it would if they were running a local HTTP server. See\n\t      // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n\t      var fileUriAbsPath = relativeSource.replace(/^file:\\/\\//, \"\");\n\t      if (url.scheme == \"file\"\n\t          && this._sources.has(fileUriAbsPath)) {\n\t        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n\t      }\n\t\n\t      if ((!url.path || url.path == \"/\")\n\t          && this._sources.has(\"/\" + relativeSource)) {\n\t        return this.sourcesContent[this._sources.indexOf(\"/\" + relativeSource)];\n\t      }\n\t    }\n\t\n\t    // This function is used recursively from\n\t    // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n\t    // don't want to throw if we can't find the source - we just want to\n\t    // return null, so we provide a flag to exit gracefully.\n\t    if (nullOnMissing) {\n\t      return null;\n\t    }\n\t    else {\n\t      throw new Error('\"' + relativeSource + '\" is not in the SourceMap.');\n\t    }\n\t  };\n\t\n\t/**\n\t * Returns the generated line and column information for the original source,\n\t * line, and column positions provided. The only argument is an object with\n\t * the following properties:\n\t *\n\t *   - source: The filename of the original source.\n\t *   - line: The line number in the original source.  The line number\n\t *     is 1-based.\n\t *   - column: The column number in the original source.  The column\n\t *     number is 0-based.\n\t *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n\t *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t *     closest element that is smaller than or greater than the one we are\n\t *     searching for, respectively, if the exact element cannot be found.\n\t *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t *   - line: The line number in the generated source, or null.  The\n\t *     line number is 1-based.\n\t *   - column: The column number in the generated source, or null.\n\t *     The column number is 0-based.\n\t */\n\tBasicSourceMapConsumer.prototype.generatedPositionFor =\n\t  function SourceMapConsumer_generatedPositionFor(aArgs) {\n\t    var source = util.getArg(aArgs, 'source');\n\t    source = this._findSourceIndex(source);\n\t    if (source < 0) {\n\t      return {\n\t        line: null,\n\t        column: null,\n\t        lastColumn: null\n\t      };\n\t    }\n\t\n\t    var needle = {\n\t      source: source,\n\t      originalLine: util.getArg(aArgs, 'line'),\n\t      originalColumn: util.getArg(aArgs, 'column')\n\t    };\n\t\n\t    var index = this._findMapping(\n\t      needle,\n\t      this._originalMappings,\n\t      \"originalLine\",\n\t      \"originalColumn\",\n\t      util.compareByOriginalPositions,\n\t      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n\t    );\n\t\n\t    if (index >= 0) {\n\t      var mapping = this._originalMappings[index];\n\t\n\t      if (mapping.source === needle.source) {\n\t        return {\n\t          line: util.getArg(mapping, 'generatedLine', null),\n\t          column: util.getArg(mapping, 'generatedColumn', null),\n\t          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t        };\n\t      }\n\t    }\n\t\n\t    return {\n\t      line: null,\n\t      column: null,\n\t      lastColumn: null\n\t    };\n\t  };\n\t\n\texports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\t\n\t/**\n\t * An IndexedSourceMapConsumer instance represents a parsed source map which\n\t * we can query for information. It differs from BasicSourceMapConsumer in\n\t * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n\t * input.\n\t *\n\t * The first parameter is a raw source map (either as a JSON string, or already\n\t * parsed to an object). According to the spec for indexed source maps, they\n\t * have the following attributes:\n\t *\n\t *   - version: Which version of the source map spec this map is following.\n\t *   - file: Optional. The generated file this source map is associated with.\n\t *   - sections: A list of section definitions.\n\t *\n\t * Each value under the \"sections\" field has two fields:\n\t *   - offset: The offset into the original specified at which this section\n\t *       begins to apply, defined as an object with a \"line\" and \"column\"\n\t *       field.\n\t *   - map: A source map definition. This source map could also be indexed,\n\t *       but doesn't have to be.\n\t *\n\t * Instead of the \"map\" field, it's also possible to have a \"url\" field\n\t * specifying a URL to retrieve a source map from, but that's currently\n\t * unsupported.\n\t *\n\t * Here's an example source map, taken from the source map spec[0], but\n\t * modified to omit a section which uses the \"url\" field.\n\t *\n\t *  {\n\t *    version : 3,\n\t *    file: \"app.js\",\n\t *    sections: [{\n\t *      offset: {line:100, column:10},\n\t *      map: {\n\t *        version : 3,\n\t *        file: \"section.js\",\n\t *        sources: [\"foo.js\", \"bar.js\"],\n\t *        names: [\"src\", \"maps\", \"are\", \"fun\"],\n\t *        mappings: \"AAAA,E;;ABCDE;\"\n\t *      }\n\t *    }],\n\t *  }\n\t *\n\t * The second parameter, if given, is a string whose value is the URL\n\t * at which the source map was found.  This URL is used to compute the\n\t * sources array.\n\t *\n\t * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n\t */\n\tfunction IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {\n\t  var sourceMap = aSourceMap;\n\t  if (typeof aSourceMap === 'string') {\n\t    sourceMap = util.parseSourceMapInput(aSourceMap);\n\t  }\n\t\n\t  var version = util.getArg(sourceMap, 'version');\n\t  var sections = util.getArg(sourceMap, 'sections');\n\t\n\t  if (version != this._version) {\n\t    throw new Error('Unsupported version: ' + version);\n\t  }\n\t\n\t  this._sources = new ArraySet();\n\t  this._names = new ArraySet();\n\t\n\t  var lastOffset = {\n\t    line: -1,\n\t    column: 0\n\t  };\n\t  this._sections = sections.map(function (s) {\n\t    if (s.url) {\n\t      // The url field will require support for asynchronicity.\n\t      // See https://github.com/mozilla/source-map/issues/16\n\t      throw new Error('Support for url field in sections not implemented.');\n\t    }\n\t    var offset = util.getArg(s, 'offset');\n\t    var offsetLine = util.getArg(offset, 'line');\n\t    var offsetColumn = util.getArg(offset, 'column');\n\t\n\t    if (offsetLine < lastOffset.line ||\n\t        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n\t      throw new Error('Section offsets must be ordered and non-overlapping.');\n\t    }\n\t    lastOffset = offset;\n\t\n\t    return {\n\t      generatedOffset: {\n\t        // The offset fields are 0-based, but we use 1-based indices when\n\t        // encoding/decoding from VLQ.\n\t        generatedLine: offsetLine + 1,\n\t        generatedColumn: offsetColumn + 1\n\t      },\n\t      consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)\n\t    }\n\t  });\n\t}\n\t\n\tIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\n\tIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\t\n\t/**\n\t * The version of the source mapping spec that we are consuming.\n\t */\n\tIndexedSourceMapConsumer.prototype._version = 3;\n\t\n\t/**\n\t * The list of original sources.\n\t */\n\tObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n\t  get: function () {\n\t    var sources = [];\n\t    for (var i = 0; i < this._sections.length; i++) {\n\t      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n\t        sources.push(this._sections[i].consumer.sources[j]);\n\t      }\n\t    }\n\t    return sources;\n\t  }\n\t});\n\t\n\t/**\n\t * Returns the original source, line, and column information for the generated\n\t * source's line and column positions provided. The only argument is an object\n\t * with the following properties:\n\t *\n\t *   - line: The line number in the generated source.  The line number\n\t *     is 1-based.\n\t *   - column: The column number in the generated source.  The column\n\t *     number is 0-based.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t *   - source: The original source file, or null.\n\t *   - line: The line number in the original source, or null.  The\n\t *     line number is 1-based.\n\t *   - column: The column number in the original source, or null.  The\n\t *     column number is 0-based.\n\t *   - name: The original identifier, or null.\n\t */\n\tIndexedSourceMapConsumer.prototype.originalPositionFor =\n\t  function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n\t    var needle = {\n\t      generatedLine: util.getArg(aArgs, 'line'),\n\t      generatedColumn: util.getArg(aArgs, 'column')\n\t    };\n\t\n\t    // Find the section containing the generated position we're trying to map\n\t    // to an original position.\n\t    var sectionIndex = binarySearch.search(needle, this._sections,\n\t      function(needle, section) {\n\t        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n\t        if (cmp) {\n\t          return cmp;\n\t        }\n\t\n\t        return (needle.generatedColumn -\n\t                section.generatedOffset.generatedColumn);\n\t      });\n\t    var section = this._sections[sectionIndex];\n\t\n\t    if (!section) {\n\t      return {\n\t        source: null,\n\t        line: null,\n\t        column: null,\n\t        name: null\n\t      };\n\t    }\n\t\n\t    return section.consumer.originalPositionFor({\n\t      line: needle.generatedLine -\n\t        (section.generatedOffset.generatedLine - 1),\n\t      column: needle.generatedColumn -\n\t        (section.generatedOffset.generatedLine === needle.generatedLine\n\t         ? section.generatedOffset.generatedColumn - 1\n\t         : 0),\n\t      bias: aArgs.bias\n\t    });\n\t  };\n\t\n\t/**\n\t * Return true if we have the source content for every source in the source\n\t * map, false otherwise.\n\t */\n\tIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n\t  function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n\t    return this._sections.every(function (s) {\n\t      return s.consumer.hasContentsOfAllSources();\n\t    });\n\t  };\n\t\n\t/**\n\t * Returns the original source content. The only argument is the url of the\n\t * original source file. Returns null if no original source content is\n\t * available.\n\t */\n\tIndexedSourceMapConsumer.prototype.sourceContentFor =\n\t  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n\t    for (var i = 0; i < this._sections.length; i++) {\n\t      var section = this._sections[i];\n\t\n\t      var content = section.consumer.sourceContentFor(aSource, true);\n\t      if (content) {\n\t        return content;\n\t      }\n\t    }\n\t    if (nullOnMissing) {\n\t      return null;\n\t    }\n\t    else {\n\t      throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n\t    }\n\t  };\n\t\n\t/**\n\t * Returns the generated line and column information for the original source,\n\t * line, and column positions provided. The only argument is an object with\n\t * the following properties:\n\t *\n\t *   - source: The filename of the original source.\n\t *   - line: The line number in the original source.  The line number\n\t *     is 1-based.\n\t *   - column: The column number in the original source.  The column\n\t *     number is 0-based.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t *   - line: The line number in the generated source, or null.  The\n\t *     line number is 1-based. \n\t *   - column: The column number in the generated source, or null.\n\t *     The column number is 0-based.\n\t */\n\tIndexedSourceMapConsumer.prototype.generatedPositionFor =\n\t  function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n\t    for (var i = 0; i < this._sections.length; i++) {\n\t      var section = this._sections[i];\n\t\n\t      // Only consider this section if the requested source is in the list of\n\t      // sources of the consumer.\n\t      if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {\n\t        continue;\n\t      }\n\t      var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n\t      if (generatedPosition) {\n\t        var ret = {\n\t          line: generatedPosition.line +\n\t            (section.generatedOffset.generatedLine - 1),\n\t          column: generatedPosition.column +\n\t            (section.generatedOffset.generatedLine === generatedPosition.line\n\t             ? section.generatedOffset.generatedColumn - 1\n\t             : 0)\n\t        };\n\t        return ret;\n\t      }\n\t    }\n\t\n\t    return {\n\t      line: null,\n\t      column: null\n\t    };\n\t  };\n\t\n\t/**\n\t * Parse the mappings in a string in to a data structure which we can easily\n\t * query (the ordered arrays in the `this.__generatedMappings` and\n\t * `this.__originalMappings` properties).\n\t */\n\tIndexedSourceMapConsumer.prototype._parseMappings =\n\t  function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n\t    this.__generatedMappings = [];\n\t    this.__originalMappings = [];\n\t    for (var i = 0; i < this._sections.length; i++) {\n\t      var section = this._sections[i];\n\t      var sectionMappings = section.consumer._generatedMappings;\n\t      for (var j = 0; j < sectionMappings.length; j++) {\n\t        var mapping = sectionMappings[j];\n\t\n\t        var source = section.consumer._sources.at(mapping.source);\n\t        source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);\n\t        this._sources.add(source);\n\t        source = this._sources.indexOf(source);\n\t\n\t        var name = null;\n\t        if (mapping.name) {\n\t          name = section.consumer._names.at(mapping.name);\n\t          this._names.add(name);\n\t          name = this._names.indexOf(name);\n\t        }\n\t\n\t        // The mappings coming from the consumer for the section have\n\t        // generated positions relative to the start of the section, so we\n\t        // need to offset them to be relative to the start of the concatenated\n\t        // generated file.\n\t        var adjustedMapping = {\n\t          source: source,\n\t          generatedLine: mapping.generatedLine +\n\t            (section.generatedOffset.generatedLine - 1),\n\t          generatedColumn: mapping.generatedColumn +\n\t            (section.generatedOffset.generatedLine === mapping.generatedLine\n\t            ? section.generatedOffset.generatedColumn - 1\n\t            : 0),\n\t          originalLine: mapping.originalLine,\n\t          originalColumn: mapping.originalColumn,\n\t          name: name\n\t        };\n\t\n\t        this.__generatedMappings.push(adjustedMapping);\n\t        if (typeof adjustedMapping.originalLine === 'number') {\n\t          this.__originalMappings.push(adjustedMapping);\n\t        }\n\t      }\n\t    }\n\t\n\t    quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n\t    quickSort(this.__originalMappings, util.compareByOriginalPositions);\n\t  };\n\t\n\texports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\texports.GREATEST_LOWER_BOUND = 1;\n\texports.LEAST_UPPER_BOUND = 2;\n\t\n\t/**\n\t * Recursive implementation of binary search.\n\t *\n\t * @param aLow Indices here and lower do not contain the needle.\n\t * @param aHigh Indices here and higher do not contain the needle.\n\t * @param aNeedle The element being searched for.\n\t * @param aHaystack The non-empty array being searched.\n\t * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n\t * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n\t *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t *     closest element that is smaller than or greater than the one we are\n\t *     searching for, respectively, if the exact element cannot be found.\n\t */\n\tfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n\t  // This function terminates when one of the following is true:\n\t  //\n\t  //   1. We find the exact element we are looking for.\n\t  //\n\t  //   2. We did not find the exact element, but we can return the index of\n\t  //      the next-closest element.\n\t  //\n\t  //   3. We did not find the exact element, and there is no next-closest\n\t  //      element than the one we are searching for, so we return -1.\n\t  var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n\t  var cmp = aCompare(aNeedle, aHaystack[mid], true);\n\t  if (cmp === 0) {\n\t    // Found the element we are looking for.\n\t    return mid;\n\t  }\n\t  else if (cmp > 0) {\n\t    // Our needle is greater than aHaystack[mid].\n\t    if (aHigh - mid > 1) {\n\t      // The element is in the upper half.\n\t      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n\t    }\n\t\n\t    // The exact needle element was not found in this haystack. Determine if\n\t    // we are in termination case (3) or (2) and return the appropriate thing.\n\t    if (aBias == exports.LEAST_UPPER_BOUND) {\n\t      return aHigh < aHaystack.length ? aHigh : -1;\n\t    } else {\n\t      return mid;\n\t    }\n\t  }\n\t  else {\n\t    // Our needle is less than aHaystack[mid].\n\t    if (mid - aLow > 1) {\n\t      // The element is in the lower half.\n\t      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n\t    }\n\t\n\t    // we are in termination case (3) or (2) and return the appropriate thing.\n\t    if (aBias == exports.LEAST_UPPER_BOUND) {\n\t      return mid;\n\t    } else {\n\t      return aLow < 0 ? -1 : aLow;\n\t    }\n\t  }\n\t}\n\t\n\t/**\n\t * This is an implementation of binary search which will always try and return\n\t * the index of the closest element if there is no exact hit. This is because\n\t * mappings between original and generated line/col pairs are single points,\n\t * and there is an implicit region between each of them, so a miss just means\n\t * that you aren't on the very start of a region.\n\t *\n\t * @param aNeedle The element you are looking for.\n\t * @param aHaystack The array that is being searched.\n\t * @param aCompare A function which takes the needle and an element in the\n\t *     array and returns -1, 0, or 1 depending on whether the needle is less\n\t *     than, equal to, or greater than the element, respectively.\n\t * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n\t *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t *     closest element that is smaller than or greater than the one we are\n\t *     searching for, respectively, if the exact element cannot be found.\n\t *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n\t */\n\texports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n\t  if (aHaystack.length === 0) {\n\t    return -1;\n\t  }\n\t\n\t  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n\t                              aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n\t  if (index < 0) {\n\t    return -1;\n\t  }\n\t\n\t  // We have found either the exact element, or the next-closest element than\n\t  // the one we are searching for. However, there may be more than one such\n\t  // element. Make sure we always return the smallest of these.\n\t  while (index - 1 >= 0) {\n\t    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n\t      break;\n\t    }\n\t    --index;\n\t  }\n\t\n\t  return index;\n\t};\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\t// It turns out that some (most?) JavaScript engines don't self-host\n\t// `Array.prototype.sort`. This makes sense because C++ will likely remain\n\t// faster than JS when doing raw CPU-intensive sorting. However, when using a\n\t// custom comparator function, calling back and forth between the VM's C++ and\n\t// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n\t// worse generated code for the comparator function than would be optimal. In\n\t// fact, when sorting with a comparator, these costs outweigh the benefits of\n\t// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n\t// a ~3500ms mean speed-up in `bench/bench.html`.\n\t\n\t/**\n\t * Swap the elements indexed by `x` and `y` in the array `ary`.\n\t *\n\t * @param {Array} ary\n\t *        The array.\n\t * @param {Number} x\n\t *        The index of the first item.\n\t * @param {Number} y\n\t *        The index of the second item.\n\t */\n\tfunction swap(ary, x, y) {\n\t  var temp = ary[x];\n\t  ary[x] = ary[y];\n\t  ary[y] = temp;\n\t}\n\t\n\t/**\n\t * Returns a random integer within the range `low .. high` inclusive.\n\t *\n\t * @param {Number} low\n\t *        The lower bound on the range.\n\t * @param {Number} high\n\t *        The upper bound on the range.\n\t */\n\tfunction randomIntInRange(low, high) {\n\t  return Math.round(low + (Math.random() * (high - low)));\n\t}\n\t\n\t/**\n\t * The Quick Sort algorithm.\n\t *\n\t * @param {Array} ary\n\t *        An array to sort.\n\t * @param {function} comparator\n\t *        Function to use to compare two items.\n\t * @param {Number} p\n\t *        Start index of the array\n\t * @param {Number} r\n\t *        End index of the array\n\t */\n\tfunction doQuickSort(ary, comparator, p, r) {\n\t  // If our lower bound is less than our upper bound, we (1) partition the\n\t  // array into two pieces and (2) recurse on each half. If it is not, this is\n\t  // the empty array and our base case.\n\t\n\t  if (p < r) {\n\t    // (1) Partitioning.\n\t    //\n\t    // The partitioning chooses a pivot between `p` and `r` and moves all\n\t    // elements that are less than or equal to the pivot to the before it, and\n\t    // all the elements that are greater than it after it. The effect is that\n\t    // once partition is done, the pivot is in the exact place it will be when\n\t    // the array is put in sorted order, and it will not need to be moved\n\t    // again. This runs in O(n) time.\n\t\n\t    // Always choose a random pivot so that an input array which is reverse\n\t    // sorted does not cause O(n^2) running time.\n\t    var pivotIndex = randomIntInRange(p, r);\n\t    var i = p - 1;\n\t\n\t    swap(ary, pivotIndex, r);\n\t    var pivot = ary[r];\n\t\n\t    // Immediately after `j` is incremented in this loop, the following hold\n\t    // true:\n\t    //\n\t    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.\n\t    //\n\t    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n\t    for (var j = p; j < r; j++) {\n\t      if (comparator(ary[j], pivot) <= 0) {\n\t        i += 1;\n\t        swap(ary, i, j);\n\t      }\n\t    }\n\t\n\t    swap(ary, i + 1, j);\n\t    var q = i + 1;\n\t\n\t    // (2) Recurse on each half.\n\t\n\t    doQuickSort(ary, comparator, p, q - 1);\n\t    doQuickSort(ary, comparator, q + 1, r);\n\t  }\n\t}\n\t\n\t/**\n\t * Sort the given array in-place with the given comparator function.\n\t *\n\t * @param {Array} ary\n\t *        An array to sort.\n\t * @param {function} comparator\n\t *        Function to use to compare two items.\n\t */\n\texports.quickSort = function (ary, comparator) {\n\t  doQuickSort(ary, comparator, 0, ary.length - 1);\n\t};\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar SourceMapGenerator = __webpack_require__(1).SourceMapGenerator;\n\tvar util = __webpack_require__(4);\n\t\n\t// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n\t// operating systems these days (capturing the result).\n\tvar REGEX_NEWLINE = /(\\r?\\n)/;\n\t\n\t// Newline character code for charCodeAt() comparisons\n\tvar NEWLINE_CODE = 10;\n\t\n\t// Private symbol for identifying `SourceNode`s when multiple versions of\n\t// the source-map library are loaded. This MUST NOT CHANGE across\n\t// versions!\n\tvar isSourceNode = \"$$$isSourceNode$$$\";\n\t\n\t/**\n\t * SourceNodes provide a way to abstract over interpolating/concatenating\n\t * snippets of generated JavaScript source code while maintaining the line and\n\t * column information associated with the original source code.\n\t *\n\t * @param aLine The original line number.\n\t * @param aColumn The original column number.\n\t * @param aSource The original source's filename.\n\t * @param aChunks Optional. An array of strings which are snippets of\n\t *        generated JS, or other SourceNodes.\n\t * @param aName The original identifier.\n\t */\n\tfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n\t  this.children = [];\n\t  this.sourceContents = {};\n\t  this.line = aLine == null ? null : aLine;\n\t  this.column = aColumn == null ? null : aColumn;\n\t  this.source = aSource == null ? null : aSource;\n\t  this.name = aName == null ? null : aName;\n\t  this[isSourceNode] = true;\n\t  if (aChunks != null) this.add(aChunks);\n\t}\n\t\n\t/**\n\t * Creates a SourceNode from generated code and a SourceMapConsumer.\n\t *\n\t * @param aGeneratedCode The generated code\n\t * @param aSourceMapConsumer The SourceMap for the generated code\n\t * @param aRelativePath Optional. The path that relative sources in the\n\t *        SourceMapConsumer should be relative to.\n\t */\n\tSourceNode.fromStringWithSourceMap =\n\t  function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n\t    // The SourceNode we want to fill with the generated code\n\t    // and the SourceMap\n\t    var node = new SourceNode();\n\t\n\t    // All even indices of this array are one line of the generated code,\n\t    // while all odd indices are the newlines between two adjacent lines\n\t    // (since `REGEX_NEWLINE` captures its match).\n\t    // Processed fragments are accessed by calling `shiftNextLine`.\n\t    var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n\t    var remainingLinesIndex = 0;\n\t    var shiftNextLine = function() {\n\t      var lineContents = getNextLine();\n\t      // The last line of a file might not have a newline.\n\t      var newLine = getNextLine() || \"\";\n\t      return lineContents + newLine;\n\t\n\t      function getNextLine() {\n\t        return remainingLinesIndex < remainingLines.length ?\n\t            remainingLines[remainingLinesIndex++] : undefined;\n\t      }\n\t    };\n\t\n\t    // We need to remember the position of \"remainingLines\"\n\t    var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\t\n\t    // The generate SourceNodes we need a code range.\n\t    // To extract it current and last mapping is used.\n\t    // Here we store the last mapping.\n\t    var lastMapping = null;\n\t\n\t    aSourceMapConsumer.eachMapping(function (mapping) {\n\t      if (lastMapping !== null) {\n\t        // We add the code from \"lastMapping\" to \"mapping\":\n\t        // First check if there is a new line in between.\n\t        if (lastGeneratedLine < mapping.generatedLine) {\n\t          // Associate first line with \"lastMapping\"\n\t          addMappingWithCode(lastMapping, shiftNextLine());\n\t          lastGeneratedLine++;\n\t          lastGeneratedColumn = 0;\n\t          // The remaining code is added without mapping\n\t        } else {\n\t          // There is no new line in between.\n\t          // Associate the code between \"lastGeneratedColumn\" and\n\t          // \"mapping.generatedColumn\" with \"lastMapping\"\n\t          var nextLine = remainingLines[remainingLinesIndex] || '';\n\t          var code = nextLine.substr(0, mapping.generatedColumn -\n\t                                        lastGeneratedColumn);\n\t          remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n\t                                              lastGeneratedColumn);\n\t          lastGeneratedColumn = mapping.generatedColumn;\n\t          addMappingWithCode(lastMapping, code);\n\t          // No more remaining code, continue\n\t          lastMapping = mapping;\n\t          return;\n\t        }\n\t      }\n\t      // We add the generated code until the first mapping\n\t      // to the SourceNode without any mapping.\n\t      // Each line is added as separate string.\n\t      while (lastGeneratedLine < mapping.generatedLine) {\n\t        node.add(shiftNextLine());\n\t        lastGeneratedLine++;\n\t      }\n\t      if (lastGeneratedColumn < mapping.generatedColumn) {\n\t        var nextLine = remainingLines[remainingLinesIndex] || '';\n\t        node.add(nextLine.substr(0, mapping.generatedColumn));\n\t        remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n\t        lastGeneratedColumn = mapping.generatedColumn;\n\t      }\n\t      lastMapping = mapping;\n\t    }, this);\n\t    // We have processed all mappings.\n\t    if (remainingLinesIndex < remainingLines.length) {\n\t      if (lastMapping) {\n\t        // Associate the remaining code in the current line with \"lastMapping\"\n\t        addMappingWithCode(lastMapping, shiftNextLine());\n\t      }\n\t      // and add the remaining lines without any mapping\n\t      node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n\t    }\n\t\n\t    // Copy sourcesContent into SourceNode\n\t    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n\t      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n\t      if (content != null) {\n\t        if (aRelativePath != null) {\n\t          sourceFile = util.join(aRelativePath, sourceFile);\n\t        }\n\t        node.setSourceContent(sourceFile, content);\n\t      }\n\t    });\n\t\n\t    return node;\n\t\n\t    function addMappingWithCode(mapping, code) {\n\t      if (mapping === null || mapping.source === undefined) {\n\t        node.add(code);\n\t      } else {\n\t        var source = aRelativePath\n\t          ? util.join(aRelativePath, mapping.source)\n\t          : mapping.source;\n\t        node.add(new SourceNode(mapping.originalLine,\n\t                                mapping.originalColumn,\n\t                                source,\n\t                                code,\n\t                                mapping.name));\n\t      }\n\t    }\n\t  };\n\t\n\t/**\n\t * Add a chunk of generated JS to this source node.\n\t *\n\t * @param aChunk A string snippet of generated JS code, another instance of\n\t *        SourceNode, or an array where each member is one of those things.\n\t */\n\tSourceNode.prototype.add = function SourceNode_add(aChunk) {\n\t  if (Array.isArray(aChunk)) {\n\t    aChunk.forEach(function (chunk) {\n\t      this.add(chunk);\n\t    }, this);\n\t  }\n\t  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n\t    if (aChunk) {\n\t      this.children.push(aChunk);\n\t    }\n\t  }\n\t  else {\n\t    throw new TypeError(\n\t      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n\t    );\n\t  }\n\t  return this;\n\t};\n\t\n\t/**\n\t * Add a chunk of generated JS to the beginning of this source node.\n\t *\n\t * @param aChunk A string snippet of generated JS code, another instance of\n\t *        SourceNode, or an array where each member is one of those things.\n\t */\n\tSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n\t  if (Array.isArray(aChunk)) {\n\t    for (var i = aChunk.length-1; i >= 0; i--) {\n\t      this.prepend(aChunk[i]);\n\t    }\n\t  }\n\t  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n\t    this.children.unshift(aChunk);\n\t  }\n\t  else {\n\t    throw new TypeError(\n\t      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n\t    );\n\t  }\n\t  return this;\n\t};\n\t\n\t/**\n\t * Walk over the tree of JS snippets in this node and its children. The\n\t * walking function is called once for each snippet of JS and is passed that\n\t * snippet and the its original associated source's line/column location.\n\t *\n\t * @param aFn The traversal function.\n\t */\n\tSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n\t  var chunk;\n\t  for (var i = 0, len = this.children.length; i < len; i++) {\n\t    chunk = this.children[i];\n\t    if (chunk[isSourceNode]) {\n\t      chunk.walk(aFn);\n\t    }\n\t    else {\n\t      if (chunk !== '') {\n\t        aFn(chunk, { source: this.source,\n\t                     line: this.line,\n\t                     column: this.column,\n\t                     name: this.name });\n\t      }\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n\t * each of `this.children`.\n\t *\n\t * @param aSep The separator.\n\t */\n\tSourceNode.prototype.join = function SourceNode_join(aSep) {\n\t  var newChildren;\n\t  var i;\n\t  var len = this.children.length;\n\t  if (len > 0) {\n\t    newChildren = [];\n\t    for (i = 0; i < len-1; i++) {\n\t      newChildren.push(this.children[i]);\n\t      newChildren.push(aSep);\n\t    }\n\t    newChildren.push(this.children[i]);\n\t    this.children = newChildren;\n\t  }\n\t  return this;\n\t};\n\t\n\t/**\n\t * Call String.prototype.replace on the very right-most source snippet. Useful\n\t * for trimming whitespace from the end of a source node, etc.\n\t *\n\t * @param aPattern The pattern to replace.\n\t * @param aReplacement The thing to replace the pattern with.\n\t */\n\tSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n\t  var lastChild = this.children[this.children.length - 1];\n\t  if (lastChild[isSourceNode]) {\n\t    lastChild.replaceRight(aPattern, aReplacement);\n\t  }\n\t  else if (typeof lastChild === 'string') {\n\t    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n\t  }\n\t  else {\n\t    this.children.push(''.replace(aPattern, aReplacement));\n\t  }\n\t  return this;\n\t};\n\t\n\t/**\n\t * Set the source content for a source file. This will be added to the SourceMapGenerator\n\t * in the sourcesContent field.\n\t *\n\t * @param aSourceFile The filename of the source file\n\t * @param aSourceContent The content of the source file\n\t */\n\tSourceNode.prototype.setSourceContent =\n\t  function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n\t    this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n\t  };\n\t\n\t/**\n\t * Walk over the tree of SourceNodes. The walking function is called for each\n\t * source file content and is passed the filename and source content.\n\t *\n\t * @param aFn The traversal function.\n\t */\n\tSourceNode.prototype.walkSourceContents =\n\t  function SourceNode_walkSourceContents(aFn) {\n\t    for (var i = 0, len = this.children.length; i < len; i++) {\n\t      if (this.children[i][isSourceNode]) {\n\t        this.children[i].walkSourceContents(aFn);\n\t      }\n\t    }\n\t\n\t    var sources = Object.keys(this.sourceContents);\n\t    for (var i = 0, len = sources.length; i < len; i++) {\n\t      aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n\t    }\n\t  };\n\t\n\t/**\n\t * Return the string representation of this source node. Walks over the tree\n\t * and concatenates all the various snippets together to one string.\n\t */\n\tSourceNode.prototype.toString = function SourceNode_toString() {\n\t  var str = \"\";\n\t  this.walk(function (chunk) {\n\t    str += chunk;\n\t  });\n\t  return str;\n\t};\n\t\n\t/**\n\t * Returns the string representation of this source node along with a source\n\t * map.\n\t */\n\tSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n\t  var generated = {\n\t    code: \"\",\n\t    line: 1,\n\t    column: 0\n\t  };\n\t  var map = new SourceMapGenerator(aArgs);\n\t  var sourceMappingActive = false;\n\t  var lastOriginalSource = null;\n\t  var lastOriginalLine = null;\n\t  var lastOriginalColumn = null;\n\t  var lastOriginalName = null;\n\t  this.walk(function (chunk, original) {\n\t    generated.code += chunk;\n\t    if (original.source !== null\n\t        && original.line !== null\n\t        && original.column !== null) {\n\t      if(lastOriginalSource !== original.source\n\t         || lastOriginalLine !== original.line\n\t         || lastOriginalColumn !== original.column\n\t         || lastOriginalName !== original.name) {\n\t        map.addMapping({\n\t          source: original.source,\n\t          original: {\n\t            line: original.line,\n\t            column: original.column\n\t          },\n\t          generated: {\n\t            line: generated.line,\n\t            column: generated.column\n\t          },\n\t          name: original.name\n\t        });\n\t      }\n\t      lastOriginalSource = original.source;\n\t      lastOriginalLine = original.line;\n\t      lastOriginalColumn = original.column;\n\t      lastOriginalName = original.name;\n\t      sourceMappingActive = true;\n\t    } else if (sourceMappingActive) {\n\t      map.addMapping({\n\t        generated: {\n\t          line: generated.line,\n\t          column: generated.column\n\t        }\n\t      });\n\t      lastOriginalSource = null;\n\t      sourceMappingActive = false;\n\t    }\n\t    for (var idx = 0, length = chunk.length; idx < length; idx++) {\n\t      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n\t        generated.line++;\n\t        generated.column = 0;\n\t        // Mappings end at eol\n\t        if (idx + 1 === length) {\n\t          lastOriginalSource = null;\n\t          sourceMappingActive = false;\n\t        } else if (sourceMappingActive) {\n\t          map.addMapping({\n\t            source: original.source,\n\t            original: {\n\t              line: original.line,\n\t              column: original.column\n\t            },\n\t            generated: {\n\t              line: generated.line,\n\t              column: generated.column\n\t            },\n\t            name: original.name\n\t          });\n\t        }\n\t      } else {\n\t        generated.column++;\n\t      }\n\t    }\n\t  });\n\t  this.walkSourceContents(function (sourceFile, sourceContent) {\n\t    map.setSourceContent(sourceFile, sourceContent);\n\t  });\n\t\n\t  return { code: generated.code, map: map };\n\t};\n\t\n\texports.SourceNode = SourceNode;\n\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// source-map.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 0fd5815da764db5fb9fe","/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;\nexports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;\nexports.SourceNode = require('./lib/source-node').SourceNode;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./source-map.js\n// module id = 0\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = require('./base64-vlq');\nvar util = require('./util');\nvar ArraySet = require('./array-set').ArraySet;\nvar MappingList = require('./mapping-list').MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n *   - file: The filename of the generated source.\n *   - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n  if (!aArgs) {\n    aArgs = {};\n  }\n  this._file = util.getArg(aArgs, 'file', null);\n  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n  this._mappings = new MappingList();\n  this._sourcesContents = null;\n}\n\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap =\n  function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n    var sourceRoot = aSourceMapConsumer.sourceRoot;\n    var generator = new SourceMapGenerator({\n      file: aSourceMapConsumer.file,\n      sourceRoot: sourceRoot\n    });\n    aSourceMapConsumer.eachMapping(function (mapping) {\n      var newMapping = {\n        generated: {\n          line: mapping.generatedLine,\n          column: mapping.generatedColumn\n        }\n      };\n\n      if (mapping.source != null) {\n        newMapping.source = mapping.source;\n        if (sourceRoot != null) {\n          newMapping.source = util.relative(sourceRoot, newMapping.source);\n        }\n\n        newMapping.original = {\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        };\n\n        if (mapping.name != null) {\n          newMapping.name = mapping.name;\n        }\n      }\n\n      generator.addMapping(newMapping);\n    });\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var sourceRelative = sourceFile;\n      if (sourceRoot !== null) {\n        sourceRelative = util.relative(sourceRoot, sourceFile);\n      }\n\n      if (!generator._sources.has(sourceRelative)) {\n        generator._sources.add(sourceRelative);\n      }\n\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        generator.setSourceContent(sourceFile, content);\n      }\n    });\n    return generator;\n  };\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n *   - generated: An object with the generated line and column positions.\n *   - original: An object with the original line and column positions.\n *   - source: The original source file (relative to the sourceRoot).\n *   - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping =\n  function SourceMapGenerator_addMapping(aArgs) {\n    var generated = util.getArg(aArgs, 'generated');\n    var original = util.getArg(aArgs, 'original', null);\n    var source = util.getArg(aArgs, 'source', null);\n    var name = util.getArg(aArgs, 'name', null);\n\n    if (!this._skipValidation) {\n      this._validateMapping(generated, original, source, name);\n    }\n\n    if (source != null) {\n      source = String(source);\n      if (!this._sources.has(source)) {\n        this._sources.add(source);\n      }\n    }\n\n    if (name != null) {\n      name = String(name);\n      if (!this._names.has(name)) {\n        this._names.add(name);\n      }\n    }\n\n    this._mappings.add({\n      generatedLine: generated.line,\n      generatedColumn: generated.column,\n      originalLine: original != null && original.line,\n      originalColumn: original != null && original.column,\n      source: source,\n      name: name\n    });\n  };\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent =\n  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n    var source = aSourceFile;\n    if (this._sourceRoot != null) {\n      source = util.relative(this._sourceRoot, source);\n    }\n\n    if (aSourceContent != null) {\n      // Add the source content to the _sourcesContents map.\n      // Create a new _sourcesContents map if the property is null.\n      if (!this._sourcesContents) {\n        this._sourcesContents = Object.create(null);\n      }\n      this._sourcesContents[util.toSetString(source)] = aSourceContent;\n    } else if (this._sourcesContents) {\n      // Remove the source file from the _sourcesContents map.\n      // If the _sourcesContents map is empty, set the property to null.\n      delete this._sourcesContents[util.toSetString(source)];\n      if (Object.keys(this._sourcesContents).length === 0) {\n        this._sourcesContents = null;\n      }\n    }\n  };\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n *        If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n *        to be applied. If relative, it is relative to the SourceMapConsumer.\n *        This parameter is needed when the two source maps aren't in the same\n *        directory, and the source map to be applied contains relative source\n *        paths. If so, those relative source paths need to be rewritten\n *        relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap =\n  function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n    var sourceFile = aSourceFile;\n    // If aSourceFile is omitted, we will use the file property of the SourceMap\n    if (aSourceFile == null) {\n      if (aSourceMapConsumer.file == null) {\n        throw new Error(\n          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n          'or the source map\\'s \"file\" property. Both were omitted.'\n        );\n      }\n      sourceFile = aSourceMapConsumer.file;\n    }\n    var sourceRoot = this._sourceRoot;\n    // Make \"sourceFile\" relative if an absolute Url is passed.\n    if (sourceRoot != null) {\n      sourceFile = util.relative(sourceRoot, sourceFile);\n    }\n    // Applying the SourceMap can add and remove items from the sources and\n    // the names array.\n    var newSources = new ArraySet();\n    var newNames = new ArraySet();\n\n    // Find mappings for the \"sourceFile\"\n    this._mappings.unsortedForEach(function (mapping) {\n      if (mapping.source === sourceFile && mapping.originalLine != null) {\n        // Check if it can be mapped by the source map, then update the mapping.\n        var original = aSourceMapConsumer.originalPositionFor({\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        });\n        if (original.source != null) {\n          // Copy mapping\n          mapping.source = original.source;\n          if (aSourceMapPath != null) {\n            mapping.source = util.join(aSourceMapPath, mapping.source)\n          }\n          if (sourceRoot != null) {\n            mapping.source = util.relative(sourceRoot, mapping.source);\n          }\n          mapping.originalLine = original.line;\n          mapping.originalColumn = original.column;\n          if (original.name != null) {\n            mapping.name = original.name;\n          }\n        }\n      }\n\n      var source = mapping.source;\n      if (source != null && !newSources.has(source)) {\n        newSources.add(source);\n      }\n\n      var name = mapping.name;\n      if (name != null && !newNames.has(name)) {\n        newNames.add(name);\n      }\n\n    }, this);\n    this._sources = newSources;\n    this._names = newNames;\n\n    // Copy sourcesContents of applied map.\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        if (aSourceMapPath != null) {\n          sourceFile = util.join(aSourceMapPath, sourceFile);\n        }\n        if (sourceRoot != null) {\n          sourceFile = util.relative(sourceRoot, sourceFile);\n        }\n        this.setSourceContent(sourceFile, content);\n      }\n    }, this);\n  };\n\n/**\n * A mapping can have one of the three levels of data:\n *\n *   1. Just the generated position.\n *   2. The Generated position, original position, and original source.\n *   3. Generated and original position, original source, as well as a name\n *      token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping =\n  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n                                              aName) {\n    // When aOriginal is truthy but has empty values for .line and .column,\n    // it is most likely a programmer error. In this case we throw a very\n    // specific error message to try to guide them the right way.\n    // For example: https://github.com/Polymer/polymer-bundler/pull/519\n    if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n        throw new Error(\n            'original.line and original.column are not numbers -- you probably meant to omit ' +\n            'the original mapping entirely and only map the generated position. If so, pass ' +\n            'null for the original mapping instead of an object with empty or null values.'\n        );\n    }\n\n    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n        && aGenerated.line > 0 && aGenerated.column >= 0\n        && !aOriginal && !aSource && !aName) {\n      // Case 1.\n      return;\n    }\n    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n             && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n             && aGenerated.line > 0 && aGenerated.column >= 0\n             && aOriginal.line > 0 && aOriginal.column >= 0\n             && aSource) {\n      // Cases 2 and 3.\n      return;\n    }\n    else {\n      throw new Error('Invalid mapping: ' + JSON.stringify({\n        generated: aGenerated,\n        source: aSource,\n        original: aOriginal,\n        name: aName\n      }));\n    }\n  };\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings =\n  function SourceMapGenerator_serializeMappings() {\n    var previousGeneratedColumn = 0;\n    var previousGeneratedLine = 1;\n    var previousOriginalColumn = 0;\n    var previousOriginalLine = 0;\n    var previousName = 0;\n    var previousSource = 0;\n    var result = '';\n    var next;\n    var mapping;\n    var nameIdx;\n    var sourceIdx;\n\n    var mappings = this._mappings.toArray();\n    for (var i = 0, len = mappings.length; i < len; i++) {\n      mapping = mappings[i];\n      next = ''\n\n      if (mapping.generatedLine !== previousGeneratedLine) {\n        previousGeneratedColumn = 0;\n        while (mapping.generatedLine !== previousGeneratedLine) {\n          next += ';';\n          previousGeneratedLine++;\n        }\n      }\n      else {\n        if (i > 0) {\n          if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n            continue;\n          }\n          next += ',';\n        }\n      }\n\n      next += base64VLQ.encode(mapping.generatedColumn\n                                 - previousGeneratedColumn);\n      previousGeneratedColumn = mapping.generatedColumn;\n\n      if (mapping.source != null) {\n        sourceIdx = this._sources.indexOf(mapping.source);\n        next += base64VLQ.encode(sourceIdx - previousSource);\n        previousSource = sourceIdx;\n\n        // lines are stored 0-based in SourceMap spec version 3\n        next += base64VLQ.encode(mapping.originalLine - 1\n                                   - previousOriginalLine);\n        previousOriginalLine = mapping.originalLine - 1;\n\n        next += base64VLQ.encode(mapping.originalColumn\n                                   - previousOriginalColumn);\n        previousOriginalColumn = mapping.originalColumn;\n\n        if (mapping.name != null) {\n          nameIdx = this._names.indexOf(mapping.name);\n          next += base64VLQ.encode(nameIdx - previousName);\n          previousName = nameIdx;\n        }\n      }\n\n      result += next;\n    }\n\n    return result;\n  };\n\nSourceMapGenerator.prototype._generateSourcesContent =\n  function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n    return aSources.map(function (source) {\n      if (!this._sourcesContents) {\n        return null;\n      }\n      if (aSourceRoot != null) {\n        source = util.relative(aSourceRoot, source);\n      }\n      var key = util.toSetString(source);\n      return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n        ? this._sourcesContents[key]\n        : null;\n    }, this);\n  };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON =\n  function SourceMapGenerator_toJSON() {\n    var map = {\n      version: this._version,\n      sources: this._sources.toArray(),\n      names: this._names.toArray(),\n      mappings: this._serializeMappings()\n    };\n    if (this._file != null) {\n      map.file = this._file;\n    }\n    if (this._sourceRoot != null) {\n      map.sourceRoot = this._sourceRoot;\n    }\n    if (this._sourcesContents) {\n      map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n    }\n\n    return map;\n  };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString =\n  function SourceMapGenerator_toString() {\n    return JSON.stringify(this.toJSON());\n  };\n\nexports.SourceMapGenerator = SourceMapGenerator;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-map-generator.js\n// module id = 1\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * 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\n *    copyright notice, this list of conditions and the following\n *    disclaimer in the documentation and/or other materials provided\n *    with the distribution.\n *  * Neither the name of Google Inc. nor the names of its\n *    contributors may be used to endorse or promote products derived\n *    from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n//   Continuation\n//   |    Sign\n//   |    |\n//   V    V\n//   101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n  return aValue < 0\n    ? ((-aValue) << 1) + 1\n    : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n  var isNegative = (aValue & 1) === 1;\n  var shifted = aValue >> 1;\n  return isNegative\n    ? -shifted\n    : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n  var encoded = \"\";\n  var digit;\n\n  var vlq = toVLQSigned(aValue);\n\n  do {\n    digit = vlq & VLQ_BASE_MASK;\n    vlq >>>= VLQ_BASE_SHIFT;\n    if (vlq > 0) {\n      // There are still more digits in this value, so we must make sure the\n      // continuation bit is marked.\n      digit |= VLQ_CONTINUATION_BIT;\n    }\n    encoded += base64.encode(digit);\n  } while (vlq > 0);\n\n  return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n  var strLen = aStr.length;\n  var result = 0;\n  var shift = 0;\n  var continuation, digit;\n\n  do {\n    if (aIndex >= strLen) {\n      throw new Error(\"Expected more digits in base 64 VLQ value.\");\n    }\n\n    digit = base64.decode(aStr.charCodeAt(aIndex++));\n    if (digit === -1) {\n      throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n    }\n\n    continuation = !!(digit & VLQ_CONTINUATION_BIT);\n    digit &= VLQ_BASE_MASK;\n    result = result + (digit << shift);\n    shift += VLQ_BASE_SHIFT;\n  } while (continuation);\n\n  aOutParam.value = fromVLQSigned(result);\n  aOutParam.rest = aIndex;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/base64-vlq.js\n// module id = 2\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n  if (0 <= number && number < intToCharMap.length) {\n    return intToCharMap[number];\n  }\n  throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n  var bigA = 65;     // 'A'\n  var bigZ = 90;     // 'Z'\n\n  var littleA = 97;  // 'a'\n  var littleZ = 122; // 'z'\n\n  var zero = 48;     // '0'\n  var nine = 57;     // '9'\n\n  var plus = 43;     // '+'\n  var slash = 47;    // '/'\n\n  var littleOffset = 26;\n  var numberOffset = 52;\n\n  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n  if (bigA <= charCode && charCode <= bigZ) {\n    return (charCode - bigA);\n  }\n\n  // 26 - 51: abcdefghijklmnopqrstuvwxyz\n  if (littleA <= charCode && charCode <= littleZ) {\n    return (charCode - littleA + littleOffset);\n  }\n\n  // 52 - 61: 0123456789\n  if (zero <= charCode && charCode <= nine) {\n    return (charCode - zero + numberOffset);\n  }\n\n  // 62: +\n  if (charCode == plus) {\n    return 62;\n  }\n\n  // 63: /\n  if (charCode == slash) {\n    return 63;\n  }\n\n  // Invalid base64 digit.\n  return -1;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/base64.js\n// module id = 3\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n  if (aName in aArgs) {\n    return aArgs[aName];\n  } else if (arguments.length === 3) {\n    return aDefaultValue;\n  } else {\n    throw new Error('\"' + aName + '\" is a required argument.');\n  }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n  var match = aUrl.match(urlRegexp);\n  if (!match) {\n    return null;\n  }\n  return {\n    scheme: match[1],\n    auth: match[2],\n    host: match[3],\n    port: match[4],\n    path: match[5]\n  };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n  var url = '';\n  if (aParsedUrl.scheme) {\n    url += aParsedUrl.scheme + ':';\n  }\n  url += '//';\n  if (aParsedUrl.auth) {\n    url += aParsedUrl.auth + '@';\n  }\n  if (aParsedUrl.host) {\n    url += aParsedUrl.host;\n  }\n  if (aParsedUrl.port) {\n    url += \":\" + aParsedUrl.port\n  }\n  if (aParsedUrl.path) {\n    url += aParsedUrl.path;\n  }\n  return url;\n}\nexports.urlGenerate = urlGenerate;\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '<dir>/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nfunction normalize(aPath) {\n  var path = aPath;\n  var url = urlParse(aPath);\n  if (url) {\n    if (!url.path) {\n      return aPath;\n    }\n    path = url.path;\n  }\n  var isAbsolute = exports.isAbsolute(path);\n\n  var parts = path.split(/\\/+/);\n  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n    part = parts[i];\n    if (part === '.') {\n      parts.splice(i, 1);\n    } else if (part === '..') {\n      up++;\n    } else if (up > 0) {\n      if (part === '') {\n        // The first part is blank if the path is absolute. Trying to go\n        // above the root is a no-op. Therefore we can remove all '..' parts\n        // directly after the root.\n        parts.splice(i + 1, up);\n        up = 0;\n      } else {\n        parts.splice(i, 2);\n        up--;\n      }\n    }\n  }\n  path = parts.join('/');\n\n  if (path === '') {\n    path = isAbsolute ? '/' : '.';\n  }\n\n  if (url) {\n    url.path = path;\n    return urlGenerate(url);\n  }\n  return path;\n}\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n *   first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n *   is updated with the result and aRoot is returned. Otherwise the result\n *   is returned.\n *   - If aPath is absolute, the result is aPath.\n *   - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n  if (aPath === \"\") {\n    aPath = \".\";\n  }\n  var aPathUrl = urlParse(aPath);\n  var aRootUrl = urlParse(aRoot);\n  if (aRootUrl) {\n    aRoot = aRootUrl.path || '/';\n  }\n\n  // `join(foo, '//www.example.org')`\n  if (aPathUrl && !aPathUrl.scheme) {\n    if (aRootUrl) {\n      aPathUrl.scheme = aRootUrl.scheme;\n    }\n    return urlGenerate(aPathUrl);\n  }\n\n  if (aPathUrl || aPath.match(dataUrlRegexp)) {\n    return aPath;\n  }\n\n  // `join('http://', 'www.example.com')`\n  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n    aRootUrl.host = aPath;\n    return urlGenerate(aRootUrl);\n  }\n\n  var joined = aPath.charAt(0) === '/'\n    ? aPath\n    : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n  if (aRootUrl) {\n    aRootUrl.path = joined;\n    return urlGenerate(aRootUrl);\n  }\n  return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n  return aPath.charAt(0) === '/' || urlRegexp.test(aPath);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n\n  aRoot = aRoot.replace(/\\/$/, '');\n\n  // It is possible for the path to be above the root. In this case, simply\n  // checking whether the root is a prefix of the path won't work. Instead, we\n  // need to remove components from the root one by one, until either we find\n  // a prefix that fits, or we run out of components to remove.\n  var level = 0;\n  while (aPath.indexOf(aRoot + '/') !== 0) {\n    var index = aRoot.lastIndexOf(\"/\");\n    if (index < 0) {\n      return aPath;\n    }\n\n    // If the only part of the root that is left is the scheme (i.e. http://,\n    // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n    // have exhausted all components, so the path is not relative to the root.\n    aRoot = aRoot.slice(0, index);\n    if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n      return aPath;\n    }\n\n    ++level;\n  }\n\n  // Make sure we add a \"../\" for each component we removed from the root.\n  return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n  var obj = Object.create(null);\n  return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n  return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return '$' + aStr;\n  }\n\n  return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return aStr.slice(1);\n  }\n\n  return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n  if (!s) {\n    return false;\n  }\n\n  var length = s.length;\n\n  if (length < 9 /* \"__proto__\".length */) {\n    return false;\n  }\n\n  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 2) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n      s.charCodeAt(length - 8) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 9) !== 95  /* '_' */) {\n    return false;\n  }\n\n  for (var i = length - 10; i >= 0; i--) {\n    if (s.charCodeAt(i) !== 36 /* '$' */) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n  var cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0 || onlyCompareOriginal) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0 || onlyCompareGenerated) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction strcmp(aStr1, aStr2) {\n  if (aStr1 === aStr2) {\n    return 0;\n  }\n\n  if (aStr1 === null) {\n    return 1; // aStr2 !== null\n  }\n\n  if (aStr2 === null) {\n    return -1; // aStr1 !== null\n  }\n\n  if (aStr1 > aStr2) {\n    return 1;\n  }\n\n  return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n/**\n * Strip any JSON XSSI avoidance prefix from the string (as documented\n * in the source maps specification), and then parse the string as\n * JSON.\n */\nfunction parseSourceMapInput(str) {\n  return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, ''));\n}\nexports.parseSourceMapInput = parseSourceMapInput;\n\n/**\n * Compute the URL of a source given the the source root, the source's\n * URL, and the source map's URL.\n */\nfunction computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {\n  sourceURL = sourceURL || '';\n\n  if (sourceRoot) {\n    // This follows what Chrome does.\n    if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {\n      sourceRoot += '/';\n    }\n    // The spec says:\n    //   Line 4: An optional source root, useful for relocating source\n    //   files on a server or removing repeated values in the\n    //   “sources” entry.  This value is prepended to the individual\n    //   entries in the “source” field.\n    sourceURL = sourceRoot + sourceURL;\n  }\n\n  // Historically, SourceMapConsumer did not take the sourceMapURL as\n  // a parameter.  This mode is still somewhat supported, which is why\n  // this code block is conditional.  However, it's preferable to pass\n  // the source map URL to SourceMapConsumer, so that this function\n  // can implement the source URL resolution algorithm as outlined in\n  // the spec.  This block is basically the equivalent of:\n  //    new URL(sourceURL, sourceMapURL).toString()\n  // ... except it avoids using URL, which wasn't available in the\n  // older releases of node still supported by this library.\n  //\n  // The spec says:\n  //   If the sources are not absolute URLs after prepending of the\n  //   “sourceRoot”, the sources are resolved relative to the\n  //   SourceMap (like resolving script src in a html document).\n  if (sourceMapURL) {\n    var parsed = urlParse(sourceMapURL);\n    if (!parsed) {\n      throw new Error(\"sourceMapURL could not be parsed\");\n    }\n    if (parsed.path) {\n      // Strip the last path component, but keep the \"/\".\n      var index = parsed.path.lastIndexOf('/');\n      if (index >= 0) {\n        parsed.path = parsed.path.substring(0, index + 1);\n      }\n    }\n    sourceURL = join(urlGenerate(parsed), sourceURL);\n  }\n\n  return normalize(sourceURL);\n}\nexports.computeSourceURL = computeSourceURL;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/util.js\n// module id = 4\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\nvar hasNativeMap = typeof Map !== \"undefined\";\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n  this._array = [];\n  this._set = hasNativeMap ? new Map() : Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n  var set = new ArraySet();\n  for (var i = 0, len = aArray.length; i < len; i++) {\n    set.add(aArray[i], aAllowDuplicates);\n  }\n  return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n  return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n  var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n  var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n  var idx = this._array.length;\n  if (!isDuplicate || aAllowDuplicates) {\n    this._array.push(aStr);\n  }\n  if (!isDuplicate) {\n    if (hasNativeMap) {\n      this._set.set(aStr, idx);\n    } else {\n      this._set[sStr] = idx;\n    }\n  }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n  if (hasNativeMap) {\n    return this._set.has(aStr);\n  } else {\n    var sStr = util.toSetString(aStr);\n    return has.call(this._set, sStr);\n  }\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n  if (hasNativeMap) {\n    var idx = this._set.get(aStr);\n    if (idx >= 0) {\n        return idx;\n    }\n  } else {\n    var sStr = util.toSetString(aStr);\n    if (has.call(this._set, sStr)) {\n      return this._set[sStr];\n    }\n  }\n\n  throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n  if (aIdx >= 0 && aIdx < this._array.length) {\n    return this._array[aIdx];\n  }\n  throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n  return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/array-set.js\n// module id = 5\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n  // Optimized for most common case\n  var lineA = mappingA.generatedLine;\n  var lineB = mappingB.generatedLine;\n  var columnA = mappingA.generatedColumn;\n  var columnB = mappingB.generatedColumn;\n  return lineB > lineA || lineB == lineA && columnB >= columnA ||\n         util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n  this._array = [];\n  this._sorted = true;\n  // Serves as infimum\n  this._last = {generatedLine: -1, generatedColumn: 0};\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach =\n  function MappingList_forEach(aCallback, aThisArg) {\n    this._array.forEach(aCallback, aThisArg);\n  };\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n  if (generatedPositionAfter(this._last, aMapping)) {\n    this._last = aMapping;\n    this._array.push(aMapping);\n  } else {\n    this._sorted = false;\n    this._array.push(aMapping);\n  }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n  if (!this._sorted) {\n    this._array.sort(util.compareByGeneratedPositionsInflated);\n    this._sorted = true;\n  }\n  return this._array;\n};\n\nexports.MappingList = MappingList;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/mapping-list.js\n// module id = 6\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\n\nfunction SourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  return sourceMap.sections != null\n    ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)\n    : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);\n}\n\nSourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {\n  return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);\n}\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n//     {\n//       generatedLine: The line number in the generated code,\n//       generatedColumn: The column number in the generated code,\n//       source: The path to the original source file that generated this\n//               chunk of code,\n//       originalLine: The line number in the original source that\n//                     corresponds to this chunk of generated code,\n//       originalColumn: The column number in the original source that\n//                       corresponds to this chunk of generated code,\n//       name: The name of the original symbol which generated this chunk of\n//             code.\n//     }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n  configurable: true,\n  enumerable: true,\n  get: function () {\n    if (!this.__generatedMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__generatedMappings;\n  }\n});\n\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n  configurable: true,\n  enumerable: true,\n  get: function () {\n    if (!this.__originalMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__originalMappings;\n  }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n  function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n    var c = aStr.charAt(index);\n    return c === \";\" || c === \",\";\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    throw new Error(\"Subclasses must implement _parseMappings\");\n  };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n *        The function that is called with each mapping.\n * @param Object aContext\n *        Optional. If specified, this object will be the value of `this` every\n *        time that `aCallback` is called.\n * @param aOrder\n *        Either `SourceMapConsumer.GENERATED_ORDER` or\n *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n *        iterate over the mappings sorted by the generated file's line/column\n *        order or the original's source/line/column order, respectively. Defaults to\n *        `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping =\n  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n    var context = aContext || null;\n    var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\n    var mappings;\n    switch (order) {\n    case SourceMapConsumer.GENERATED_ORDER:\n      mappings = this._generatedMappings;\n      break;\n    case SourceMapConsumer.ORIGINAL_ORDER:\n      mappings = this._originalMappings;\n      break;\n    default:\n      throw new Error(\"Unknown order of iteration.\");\n    }\n\n    var sourceRoot = this.sourceRoot;\n    mappings.map(function (mapping) {\n      var source = mapping.source === null ? null : this._sources.at(mapping.source);\n      source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);\n      return {\n        source: source,\n        generatedLine: mapping.generatedLine,\n        generatedColumn: mapping.generatedColumn,\n        originalLine: mapping.originalLine,\n        originalColumn: mapping.originalColumn,\n        name: mapping.name === null ? null : this._names.at(mapping.name)\n      };\n    }, this).forEach(aCallback, context);\n  };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number is 1-based.\n *   - column: Optional. the column number in the original source.\n *    The column number is 0-based.\n *\n * and an array of objects is returned, each with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *    line number is 1-based.\n *   - column: The column number in the generated source, or null.\n *    The column number is 0-based.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor =\n  function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n    var line = util.getArg(aArgs, 'line');\n\n    // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n    // returns the index of the closest mapping less than the needle. By\n    // setting needle.originalColumn to 0, we thus find the last mapping for\n    // the given line, provided such a mapping exists.\n    var needle = {\n      source: util.getArg(aArgs, 'source'),\n      originalLine: line,\n      originalColumn: util.getArg(aArgs, 'column', 0)\n    };\n\n    needle.source = this._findSourceIndex(needle.source);\n    if (needle.source < 0) {\n      return [];\n    }\n\n    var mappings = [];\n\n    var index = this._findMapping(needle,\n                                  this._originalMappings,\n                                  \"originalLine\",\n                                  \"originalColumn\",\n                                  util.compareByOriginalPositions,\n                                  binarySearch.LEAST_UPPER_BOUND);\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (aArgs.column === undefined) {\n        var originalLine = mapping.originalLine;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we found. Since\n        // mappings are sorted, this is guaranteed to find all mappings for\n        // the line we found.\n        while (mapping && mapping.originalLine === originalLine) {\n          mappings.push({\n            line: util.getArg(mapping, 'generatedLine', null),\n            column: util.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      } else {\n        var originalColumn = mapping.originalColumn;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we were searching for.\n        // Since mappings are sorted, this is guaranteed to find all mappings for\n        // the line we are searching for.\n        while (mapping &&\n               mapping.originalLine === line &&\n               mapping.originalColumn == originalColumn) {\n          mappings.push({\n            line: util.getArg(mapping, 'generatedLine', null),\n            column: util.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      }\n    }\n\n    return mappings;\n  };\n\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The first parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - sources: An array of URLs to the original source files.\n *   - names: An array of identifiers which can be referrenced by individual mappings.\n *   - sourceRoot: Optional. The URL root from which all sources are relative.\n *   - sourcesContent: Optional. An array of contents of the original source files.\n *   - mappings: A string of base64 VLQs which contain the actual mappings.\n *   - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n *     {\n *       version : 3,\n *       file: \"out.js\",\n *       sourceRoot : \"\",\n *       sources: [\"foo.js\", \"bar.js\"],\n *       names: [\"src\", \"maps\", \"are\", \"fun\"],\n *       mappings: \"AA,AB;;ABCDE;\"\n *     }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found.  This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  var version = util.getArg(sourceMap, 'version');\n  var sources = util.getArg(sourceMap, 'sources');\n  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n  // requires the array) to play nice here.\n  var names = util.getArg(sourceMap, 'names', []);\n  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n  var mappings = util.getArg(sourceMap, 'mappings');\n  var file = util.getArg(sourceMap, 'file', null);\n\n  // Once again, Sass deviates from the spec and supplies the version as a\n  // string rather than a number, so we use loose equality checking here.\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  if (sourceRoot) {\n    sourceRoot = util.normalize(sourceRoot);\n  }\n\n  sources = sources\n    .map(String)\n    // Some source maps produce relative source paths like \"./foo.js\" instead of\n    // \"foo.js\".  Normalize these first so that future comparisons will succeed.\n    // See bugzil.la/1090768.\n    .map(util.normalize)\n    // Always ensure that absolute sources are internally stored relative to\n    // the source root, if the source root is absolute. Not doing this would\n    // be particularly problematic when the source root is a prefix of the\n    // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n    .map(function (source) {\n      return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n        ? util.relative(sourceRoot, source)\n        : source;\n    });\n\n  // Pass `true` below to allow duplicate names and sources. While source maps\n  // are intended to be compressed and deduplicated, the TypeScript compiler\n  // sometimes generates source maps with duplicates in them. See Github issue\n  // #72 and bugzil.la/889492.\n  this._names = ArraySet.fromArray(names.map(String), true);\n  this._sources = ArraySet.fromArray(sources, true);\n\n  this._absoluteSources = this._sources.toArray().map(function (s) {\n    return util.computeSourceURL(sourceRoot, s, aSourceMapURL);\n  });\n\n  this.sourceRoot = sourceRoot;\n  this.sourcesContent = sourcesContent;\n  this._mappings = mappings;\n  this._sourceMapURL = aSourceMapURL;\n  this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Utility function to find the index of a source.  Returns -1 if not\n * found.\n */\nBasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {\n  var relativeSource = aSource;\n  if (this.sourceRoot != null) {\n    relativeSource = util.relative(this.sourceRoot, relativeSource);\n  }\n\n  if (this._sources.has(relativeSource)) {\n    return this._sources.indexOf(relativeSource);\n  }\n\n  // Maybe aSource is an absolute URL as returned by |sources|.  In\n  // this case we can't simply undo the transform.\n  var i;\n  for (i = 0; i < this._absoluteSources.length; ++i) {\n    if (this._absoluteSources[i] == aSource) {\n      return i;\n    }\n  }\n\n  return -1;\n};\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n *        The source map that will be consumed.\n * @param String aSourceMapURL\n *        The URL at which the source map can be found (optional)\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n  function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {\n    var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n    var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n    var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n    smc.sourceRoot = aSourceMap._sourceRoot;\n    smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n                                                            smc.sourceRoot);\n    smc.file = aSourceMap._file;\n    smc._sourceMapURL = aSourceMapURL;\n    smc._absoluteSources = smc._sources.toArray().map(function (s) {\n      return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);\n    });\n\n    // Because we are modifying the entries (by converting string sources and\n    // names to indices into the sources and names ArraySets), we have to make\n    // a copy of the entry or else bad things happen. Shared mutable state\n    // strikes again! See github issue #191.\n\n    var generatedMappings = aSourceMap._mappings.toArray().slice();\n    var destGeneratedMappings = smc.__generatedMappings = [];\n    var destOriginalMappings = smc.__originalMappings = [];\n\n    for (var i = 0, length = generatedMappings.length; i < length; i++) {\n      var srcMapping = generatedMappings[i];\n      var destMapping = new Mapping;\n      destMapping.generatedLine = srcMapping.generatedLine;\n      destMapping.generatedColumn = srcMapping.generatedColumn;\n\n      if (srcMapping.source) {\n        destMapping.source = sources.indexOf(srcMapping.source);\n        destMapping.originalLine = srcMapping.originalLine;\n        destMapping.originalColumn = srcMapping.originalColumn;\n\n        if (srcMapping.name) {\n          destMapping.name = names.indexOf(srcMapping.name);\n        }\n\n        destOriginalMappings.push(destMapping);\n      }\n\n      destGeneratedMappings.push(destMapping);\n    }\n\n    quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\n    return smc;\n  };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    return this._absoluteSources.slice();\n  }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n  this.generatedLine = 0;\n  this.generatedColumn = 0;\n  this.source = null;\n  this.originalLine = null;\n  this.originalColumn = null;\n  this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nBasicSourceMapConsumer.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    var generatedLine = 1;\n    var previousGeneratedColumn = 0;\n    var previousOriginalLine = 0;\n    var previousOriginalColumn = 0;\n    var previousSource = 0;\n    var previousName = 0;\n    var length = aStr.length;\n    var index = 0;\n    var cachedSegments = {};\n    var temp = {};\n    var originalMappings = [];\n    var generatedMappings = [];\n    var mapping, str, segment, end, value;\n\n    while (index < length) {\n      if (aStr.charAt(index) === ';') {\n        generatedLine++;\n        index++;\n        previousGeneratedColumn = 0;\n      }\n      else if (aStr.charAt(index) === ',') {\n        index++;\n      }\n      else {\n        mapping = new Mapping();\n        mapping.generatedLine = generatedLine;\n\n        // Because each offset is encoded relative to the previous one,\n        // many segments often have the same encoding. We can exploit this\n        // fact by caching the parsed variable length fields of each segment,\n        // allowing us to avoid a second parse if we encounter the same\n        // segment again.\n        for (end = index; end < length; end++) {\n          if (this._charIsMappingSeparator(aStr, end)) {\n            break;\n          }\n        }\n        str = aStr.slice(index, end);\n\n        segment = cachedSegments[str];\n        if (segment) {\n          index += str.length;\n        } else {\n          segment = [];\n          while (index < end) {\n            base64VLQ.decode(aStr, index, temp);\n            value = temp.value;\n            index = temp.rest;\n            segment.push(value);\n          }\n\n          if (segment.length === 2) {\n            throw new Error('Found a source, but no line and column');\n          }\n\n          if (segment.length === 3) {\n            throw new Error('Found a source and line, but no column');\n          }\n\n          cachedSegments[str] = segment;\n        }\n\n        // Generated column.\n        mapping.generatedColumn = previousGeneratedColumn + segment[0];\n        previousGeneratedColumn = mapping.generatedColumn;\n\n        if (segment.length > 1) {\n          // Original source.\n          mapping.source = previousSource + segment[1];\n          previousSource += segment[1];\n\n          // Original line.\n          mapping.originalLine = previousOriginalLine + segment[2];\n          previousOriginalLine = mapping.originalLine;\n          // Lines are stored 0-based\n          mapping.originalLine += 1;\n\n          // Original column.\n          mapping.originalColumn = previousOriginalColumn + segment[3];\n          previousOriginalColumn = mapping.originalColumn;\n\n          if (segment.length > 4) {\n            // Original name.\n            mapping.name = previousName + segment[4];\n            previousName += segment[4];\n          }\n        }\n\n        generatedMappings.push(mapping);\n        if (typeof mapping.originalLine === 'number') {\n          originalMappings.push(mapping);\n        }\n      }\n    }\n\n    quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n    this.__generatedMappings = generatedMappings;\n\n    quickSort(originalMappings, util.compareByOriginalPositions);\n    this.__originalMappings = originalMappings;\n  };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping =\n  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n                                         aColumnName, aComparator, aBias) {\n    // To return the position we are searching for, we must first find the\n    // mapping for the given position and then return the opposite position it\n    // points to. Because the mappings are sorted, we can use binary search to\n    // find the best mapping.\n\n    if (aNeedle[aLineName] <= 0) {\n      throw new TypeError('Line must be greater than or equal to 1, got '\n                          + aNeedle[aLineName]);\n    }\n    if (aNeedle[aColumnName] < 0) {\n      throw new TypeError('Column must be greater than or equal to 0, got '\n                          + aNeedle[aColumnName]);\n    }\n\n    return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n  };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans =\n  function SourceMapConsumer_computeColumnSpans() {\n    for (var index = 0; index < this._generatedMappings.length; ++index) {\n      var mapping = this._generatedMappings[index];\n\n      // Mappings do not contain a field for the last generated columnt. We\n      // can come up with an optimistic estimate, however, by assuming that\n      // mappings are contiguous (i.e. given two consecutive mappings, the\n      // first mapping ends where the second one starts).\n      if (index + 1 < this._generatedMappings.length) {\n        var nextMapping = this._generatedMappings[index + 1];\n\n        if (mapping.generatedLine === nextMapping.generatedLine) {\n          mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n          continue;\n        }\n      }\n\n      // The last mapping for each line spans the entire line.\n      mapping.lastGeneratedColumn = Infinity;\n    }\n  };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.  The line number\n *     is 1-based.\n *   - column: The column number in the generated source.  The column\n *     number is 0-based.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the original source, or null.  The\n *     column number is 0-based.\n *   - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n  function SourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util.getArg(aArgs, 'line'),\n      generatedColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._generatedMappings,\n      \"generatedLine\",\n      \"generatedColumn\",\n      util.compareByGeneratedPositionsDeflated,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._generatedMappings[index];\n\n      if (mapping.generatedLine === needle.generatedLine) {\n        var source = util.getArg(mapping, 'source', null);\n        if (source !== null) {\n          source = this._sources.at(source);\n          source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);\n        }\n        var name = util.getArg(mapping, 'name', null);\n        if (name !== null) {\n          name = this._names.at(name);\n        }\n        return {\n          source: source,\n          line: util.getArg(mapping, 'originalLine', null),\n          column: util.getArg(mapping, 'originalColumn', null),\n          name: name\n        };\n      }\n    }\n\n    return {\n      source: null,\n      line: null,\n      column: null,\n      name: null\n    };\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n  function BasicSourceMapConsumer_hasContentsOfAllSources() {\n    if (!this.sourcesContent) {\n      return false;\n    }\n    return this.sourcesContent.length >= this._sources.size() &&\n      !this.sourcesContent.some(function (sc) { return sc == null; });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor =\n  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    if (!this.sourcesContent) {\n      return null;\n    }\n\n    var index = this._findSourceIndex(aSource);\n    if (index >= 0) {\n      return this.sourcesContent[index];\n    }\n\n    var relativeSource = aSource;\n    if (this.sourceRoot != null) {\n      relativeSource = util.relative(this.sourceRoot, relativeSource);\n    }\n\n    var url;\n    if (this.sourceRoot != null\n        && (url = util.urlParse(this.sourceRoot))) {\n      // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n      // many users. We can help them out when they expect file:// URIs to\n      // behave like it would if they were running a local HTTP server. See\n      // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n      var fileUriAbsPath = relativeSource.replace(/^file:\\/\\//, \"\");\n      if (url.scheme == \"file\"\n          && this._sources.has(fileUriAbsPath)) {\n        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n      }\n\n      if ((!url.path || url.path == \"/\")\n          && this._sources.has(\"/\" + relativeSource)) {\n        return this.sourcesContent[this._sources.indexOf(\"/\" + relativeSource)];\n      }\n    }\n\n    // This function is used recursively from\n    // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n    // don't want to throw if we can't find the source - we just want to\n    // return null, so we provide a flag to exit gracefully.\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + relativeSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number\n *     is 1-based.\n *   - column: The column number in the original source.  The column\n *     number is 0-based.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the generated source, or null.\n *     The column number is 0-based.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n  function SourceMapConsumer_generatedPositionFor(aArgs) {\n    var source = util.getArg(aArgs, 'source');\n    source = this._findSourceIndex(source);\n    if (source < 0) {\n      return {\n        line: null,\n        column: null,\n        lastColumn: null\n      };\n    }\n\n    var needle = {\n      source: source,\n      originalLine: util.getArg(aArgs, 'line'),\n      originalColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._originalMappings,\n      \"originalLine\",\n      \"originalColumn\",\n      util.compareByOriginalPositions,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (mapping.source === needle.source) {\n        return {\n          line: util.getArg(mapping, 'generatedLine', null),\n          column: util.getArg(mapping, 'generatedColumn', null),\n          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n        };\n      }\n    }\n\n    return {\n      line: null,\n      column: null,\n      lastColumn: null\n    };\n  };\n\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The first parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - file: Optional. The generated file this source map is associated with.\n *   - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n *   - offset: The offset into the original specified at which this section\n *       begins to apply, defined as an object with a \"line\" and \"column\"\n *       field.\n *   - map: A source map definition. This source map could also be indexed,\n *       but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n *  {\n *    version : 3,\n *    file: \"app.js\",\n *    sections: [{\n *      offset: {line:100, column:10},\n *      map: {\n *        version : 3,\n *        file: \"section.js\",\n *        sources: [\"foo.js\", \"bar.js\"],\n *        names: [\"src\", \"maps\", \"are\", \"fun\"],\n *        mappings: \"AAAA,E;;ABCDE;\"\n *      }\n *    }],\n *  }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found.  This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  var version = util.getArg(sourceMap, 'version');\n  var sections = util.getArg(sourceMap, 'sections');\n\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n\n  var lastOffset = {\n    line: -1,\n    column: 0\n  };\n  this._sections = sections.map(function (s) {\n    if (s.url) {\n      // The url field will require support for asynchronicity.\n      // See https://github.com/mozilla/source-map/issues/16\n      throw new Error('Support for url field in sections not implemented.');\n    }\n    var offset = util.getArg(s, 'offset');\n    var offsetLine = util.getArg(offset, 'line');\n    var offsetColumn = util.getArg(offset, 'column');\n\n    if (offsetLine < lastOffset.line ||\n        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n      throw new Error('Section offsets must be ordered and non-overlapping.');\n    }\n    lastOffset = offset;\n\n    return {\n      generatedOffset: {\n        // The offset fields are 0-based, but we use 1-based indices when\n        // encoding/decoding from VLQ.\n        generatedLine: offsetLine + 1,\n        generatedColumn: offsetColumn + 1\n      },\n      consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)\n    }\n  });\n}\n\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    var sources = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n        sources.push(this._sections[i].consumer.sources[j]);\n      }\n    }\n    return sources;\n  }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.  The line number\n *     is 1-based.\n *   - column: The column number in the generated source.  The column\n *     number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the original source, or null.  The\n *     column number is 0-based.\n *   - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n  function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util.getArg(aArgs, 'line'),\n      generatedColumn: util.getArg(aArgs, 'column')\n    };\n\n    // Find the section containing the generated position we're trying to map\n    // to an original position.\n    var sectionIndex = binarySearch.search(needle, this._sections,\n      function(needle, section) {\n        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n        if (cmp) {\n          return cmp;\n        }\n\n        return (needle.generatedColumn -\n                section.generatedOffset.generatedColumn);\n      });\n    var section = this._sections[sectionIndex];\n\n    if (!section) {\n      return {\n        source: null,\n        line: null,\n        column: null,\n        name: null\n      };\n    }\n\n    return section.consumer.originalPositionFor({\n      line: needle.generatedLine -\n        (section.generatedOffset.generatedLine - 1),\n      column: needle.generatedColumn -\n        (section.generatedOffset.generatedLine === needle.generatedLine\n         ? section.generatedOffset.generatedColumn - 1\n         : 0),\n      bias: aArgs.bias\n    });\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n  function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n    return this._sections.every(function (s) {\n      return s.consumer.hasContentsOfAllSources();\n    });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor =\n  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      var content = section.consumer.sourceContentFor(aSource, true);\n      if (content) {\n        return content;\n      }\n    }\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number\n *     is 1-based.\n *   - column: The column number in the original source.  The column\n *     number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *     line number is 1-based. \n *   - column: The column number in the generated source, or null.\n *     The column number is 0-based.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n  function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      // Only consider this section if the requested source is in the list of\n      // sources of the consumer.\n      if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {\n        continue;\n      }\n      var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n      if (generatedPosition) {\n        var ret = {\n          line: generatedPosition.line +\n            (section.generatedOffset.generatedLine - 1),\n          column: generatedPosition.column +\n            (section.generatedOffset.generatedLine === generatedPosition.line\n             ? section.generatedOffset.generatedColumn - 1\n             : 0)\n        };\n        return ret;\n      }\n    }\n\n    return {\n      line: null,\n      column: null\n    };\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings =\n  function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    this.__generatedMappings = [];\n    this.__originalMappings = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n      var sectionMappings = section.consumer._generatedMappings;\n      for (var j = 0; j < sectionMappings.length; j++) {\n        var mapping = sectionMappings[j];\n\n        var source = section.consumer._sources.at(mapping.source);\n        source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);\n        this._sources.add(source);\n        source = this._sources.indexOf(source);\n\n        var name = null;\n        if (mapping.name) {\n          name = section.consumer._names.at(mapping.name);\n          this._names.add(name);\n          name = this._names.indexOf(name);\n        }\n\n        // The mappings coming from the consumer for the section have\n        // generated positions relative to the start of the section, so we\n        // need to offset them to be relative to the start of the concatenated\n        // generated file.\n        var adjustedMapping = {\n          source: source,\n          generatedLine: mapping.generatedLine +\n            (section.generatedOffset.generatedLine - 1),\n          generatedColumn: mapping.generatedColumn +\n            (section.generatedOffset.generatedLine === mapping.generatedLine\n            ? section.generatedOffset.generatedColumn - 1\n            : 0),\n          originalLine: mapping.originalLine,\n          originalColumn: mapping.originalColumn,\n          name: name\n        };\n\n        this.__generatedMappings.push(adjustedMapping);\n        if (typeof adjustedMapping.originalLine === 'number') {\n          this.__originalMappings.push(adjustedMapping);\n        }\n      }\n    }\n\n    quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n    quickSort(this.__originalMappings, util.compareByOriginalPositions);\n  };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-map-consumer.js\n// module id = 7\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n  // This function terminates when one of the following is true:\n  //\n  //   1. We find the exact element we are looking for.\n  //\n  //   2. We did not find the exact element, but we can return the index of\n  //      the next-closest element.\n  //\n  //   3. We did not find the exact element, and there is no next-closest\n  //      element than the one we are searching for, so we return -1.\n  var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n  var cmp = aCompare(aNeedle, aHaystack[mid], true);\n  if (cmp === 0) {\n    // Found the element we are looking for.\n    return mid;\n  }\n  else if (cmp > 0) {\n    // Our needle is greater than aHaystack[mid].\n    if (aHigh - mid > 1) {\n      // The element is in the upper half.\n      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // The exact needle element was not found in this haystack. Determine if\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return aHigh < aHaystack.length ? aHigh : -1;\n    } else {\n      return mid;\n    }\n  }\n  else {\n    // Our needle is less than aHaystack[mid].\n    if (mid - aLow > 1) {\n      // The element is in the lower half.\n      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return mid;\n    } else {\n      return aLow < 0 ? -1 : aLow;\n    }\n  }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n *     array and returns -1, 0, or 1 depending on whether the needle is less\n *     than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n  if (aHaystack.length === 0) {\n    return -1;\n  }\n\n  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n                              aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n  if (index < 0) {\n    return -1;\n  }\n\n  // We have found either the exact element, or the next-closest element than\n  // the one we are searching for. However, there may be more than one such\n  // element. Make sure we always return the smallest of these.\n  while (index - 1 >= 0) {\n    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n      break;\n    }\n    --index;\n  }\n\n  return index;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/binary-search.js\n// module id = 8\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n *        The array.\n * @param {Number} x\n *        The index of the first item.\n * @param {Number} y\n *        The index of the second item.\n */\nfunction swap(ary, x, y) {\n  var temp = ary[x];\n  ary[x] = ary[y];\n  ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n *        The lower bound on the range.\n * @param {Number} high\n *        The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n  return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n * @param {Number} p\n *        Start index of the array\n * @param {Number} r\n *        End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n  // If our lower bound is less than our upper bound, we (1) partition the\n  // array into two pieces and (2) recurse on each half. If it is not, this is\n  // the empty array and our base case.\n\n  if (p < r) {\n    // (1) Partitioning.\n    //\n    // The partitioning chooses a pivot between `p` and `r` and moves all\n    // elements that are less than or equal to the pivot to the before it, and\n    // all the elements that are greater than it after it. The effect is that\n    // once partition is done, the pivot is in the exact place it will be when\n    // the array is put in sorted order, and it will not need to be moved\n    // again. This runs in O(n) time.\n\n    // Always choose a random pivot so that an input array which is reverse\n    // sorted does not cause O(n^2) running time.\n    var pivotIndex = randomIntInRange(p, r);\n    var i = p - 1;\n\n    swap(ary, pivotIndex, r);\n    var pivot = ary[r];\n\n    // Immediately after `j` is incremented in this loop, the following hold\n    // true:\n    //\n    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.\n    //\n    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n    for (var j = p; j < r; j++) {\n      if (comparator(ary[j], pivot) <= 0) {\n        i += 1;\n        swap(ary, i, j);\n      }\n    }\n\n    swap(ary, i + 1, j);\n    var q = i + 1;\n\n    // (2) Recurse on each half.\n\n    doQuickSort(ary, comparator, p, q - 1);\n    doQuickSort(ary, comparator, q + 1, r);\n  }\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n */\nexports.quickSort = function (ary, comparator) {\n  doQuickSort(ary, comparator, 0, ary.length - 1);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/quick-sort.js\n// module id = 9\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;\nvar util = require('./util');\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n *        generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n  this.children = [];\n  this.sourceContents = {};\n  this.line = aLine == null ? null : aLine;\n  this.column = aColumn == null ? null : aColumn;\n  this.source = aSource == null ? null : aSource;\n  this.name = aName == null ? null : aName;\n  this[isSourceNode] = true;\n  if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n *        SourceMapConsumer should be relative to.\n */\nSourceNode.fromStringWithSourceMap =\n  function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n    // The SourceNode we want to fill with the generated code\n    // and the SourceMap\n    var node = new SourceNode();\n\n    // All even indices of this array are one line of the generated code,\n    // while all odd indices are the newlines between two adjacent lines\n    // (since `REGEX_NEWLINE` captures its match).\n    // Processed fragments are accessed by calling `shiftNextLine`.\n    var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n    var remainingLinesIndex = 0;\n    var shiftNextLine = function() {\n      var lineContents = getNextLine();\n      // The last line of a file might not have a newline.\n      var newLine = getNextLine() || \"\";\n      return lineContents + newLine;\n\n      function getNextLine() {\n        return remainingLinesIndex < remainingLines.length ?\n            remainingLines[remainingLinesIndex++] : undefined;\n      }\n    };\n\n    // We need to remember the position of \"remainingLines\"\n    var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\n    // The generate SourceNodes we need a code range.\n    // To extract it current and last mapping is used.\n    // Here we store the last mapping.\n    var lastMapping = null;\n\n    aSourceMapConsumer.eachMapping(function (mapping) {\n      if (lastMapping !== null) {\n        // We add the code from \"lastMapping\" to \"mapping\":\n        // First check if there is a new line in between.\n        if (lastGeneratedLine < mapping.generatedLine) {\n          // Associate first line with \"lastMapping\"\n          addMappingWithCode(lastMapping, shiftNextLine());\n          lastGeneratedLine++;\n          lastGeneratedColumn = 0;\n          // The remaining code is added without mapping\n        } else {\n          // There is no new line in between.\n          // Associate the code between \"lastGeneratedColumn\" and\n          // \"mapping.generatedColumn\" with \"lastMapping\"\n          var nextLine = remainingLines[remainingLinesIndex] || '';\n          var code = nextLine.substr(0, mapping.generatedColumn -\n                                        lastGeneratedColumn);\n          remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n                                              lastGeneratedColumn);\n          lastGeneratedColumn = mapping.generatedColumn;\n          addMappingWithCode(lastMapping, code);\n          // No more remaining code, continue\n          lastMapping = mapping;\n          return;\n        }\n      }\n      // We add the generated code until the first mapping\n      // to the SourceNode without any mapping.\n      // Each line is added as separate string.\n      while (lastGeneratedLine < mapping.generatedLine) {\n        node.add(shiftNextLine());\n        lastGeneratedLine++;\n      }\n      if (lastGeneratedColumn < mapping.generatedColumn) {\n        var nextLine = remainingLines[remainingLinesIndex] || '';\n        node.add(nextLine.substr(0, mapping.generatedColumn));\n        remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n        lastGeneratedColumn = mapping.generatedColumn;\n      }\n      lastMapping = mapping;\n    }, this);\n    // We have processed all mappings.\n    if (remainingLinesIndex < remainingLines.length) {\n      if (lastMapping) {\n        // Associate the remaining code in the current line with \"lastMapping\"\n        addMappingWithCode(lastMapping, shiftNextLine());\n      }\n      // and add the remaining lines without any mapping\n      node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n    }\n\n    // Copy sourcesContent into SourceNode\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        if (aRelativePath != null) {\n          sourceFile = util.join(aRelativePath, sourceFile);\n        }\n        node.setSourceContent(sourceFile, content);\n      }\n    });\n\n    return node;\n\n    function addMappingWithCode(mapping, code) {\n      if (mapping === null || mapping.source === undefined) {\n        node.add(code);\n      } else {\n        var source = aRelativePath\n          ? util.join(aRelativePath, mapping.source)\n          : mapping.source;\n        node.add(new SourceNode(mapping.originalLine,\n                                mapping.originalColumn,\n                                source,\n                                code,\n                                mapping.name));\n      }\n    }\n  };\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.add = function SourceNode_add(aChunk) {\n  if (Array.isArray(aChunk)) {\n    aChunk.forEach(function (chunk) {\n      this.add(chunk);\n    }, this);\n  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    if (aChunk) {\n      this.children.push(aChunk);\n    }\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\n  }\n  return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n  if (Array.isArray(aChunk)) {\n    for (var i = aChunk.length-1; i >= 0; i--) {\n      this.prepend(aChunk[i]);\n    }\n  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    this.children.unshift(aChunk);\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\n  }\n  return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n  var chunk;\n  for (var i = 0, len = this.children.length; i < len; i++) {\n    chunk = this.children[i];\n    if (chunk[isSourceNode]) {\n      chunk.walk(aFn);\n    }\n    else {\n      if (chunk !== '') {\n        aFn(chunk, { source: this.source,\n                     line: this.line,\n                     column: this.column,\n                     name: this.name });\n      }\n    }\n  }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode.prototype.join = function SourceNode_join(aSep) {\n  var newChildren;\n  var i;\n  var len = this.children.length;\n  if (len > 0) {\n    newChildren = [];\n    for (i = 0; i < len-1; i++) {\n      newChildren.push(this.children[i]);\n      newChildren.push(aSep);\n    }\n    newChildren.push(this.children[i]);\n    this.children = newChildren;\n  }\n  return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n  var lastChild = this.children[this.children.length - 1];\n  if (lastChild[isSourceNode]) {\n    lastChild.replaceRight(aPattern, aReplacement);\n  }\n  else if (typeof lastChild === 'string') {\n    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n  }\n  else {\n    this.children.push(''.replace(aPattern, aReplacement));\n  }\n  return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode.prototype.setSourceContent =\n  function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n    this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n  };\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walkSourceContents =\n  function SourceNode_walkSourceContents(aFn) {\n    for (var i = 0, len = this.children.length; i < len; i++) {\n      if (this.children[i][isSourceNode]) {\n        this.children[i].walkSourceContents(aFn);\n      }\n    }\n\n    var sources = Object.keys(this.sourceContents);\n    for (var i = 0, len = sources.length; i < len; i++) {\n      aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n    }\n  };\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode.prototype.toString = function SourceNode_toString() {\n  var str = \"\";\n  this.walk(function (chunk) {\n    str += chunk;\n  });\n  return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n  var generated = {\n    code: \"\",\n    line: 1,\n    column: 0\n  };\n  var map = new SourceMapGenerator(aArgs);\n  var sourceMappingActive = false;\n  var lastOriginalSource = null;\n  var lastOriginalLine = null;\n  var lastOriginalColumn = null;\n  var lastOriginalName = null;\n  this.walk(function (chunk, original) {\n    generated.code += chunk;\n    if (original.source !== null\n        && original.line !== null\n        && original.column !== null) {\n      if(lastOriginalSource !== original.source\n         || lastOriginalLine !== original.line\n         || lastOriginalColumn !== original.column\n         || lastOriginalName !== original.name) {\n        map.addMapping({\n          source: original.source,\n          original: {\n            line: original.line,\n            column: original.column\n          },\n          generated: {\n            line: generated.line,\n            column: generated.column\n          },\n          name: original.name\n        });\n      }\n      lastOriginalSource = original.source;\n      lastOriginalLine = original.line;\n      lastOriginalColumn = original.column;\n      lastOriginalName = original.name;\n      sourceMappingActive = true;\n    } else if (sourceMappingActive) {\n      map.addMapping({\n        generated: {\n          line: generated.line,\n          column: generated.column\n        }\n      });\n      lastOriginalSource = null;\n      sourceMappingActive = false;\n    }\n    for (var idx = 0, length = chunk.length; idx < length; idx++) {\n      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n        generated.line++;\n        generated.column = 0;\n        // Mappings end at eol\n        if (idx + 1 === length) {\n          lastOriginalSource = null;\n          sourceMappingActive = false;\n        } else if (sourceMappingActive) {\n          map.addMapping({\n            source: original.source,\n            original: {\n              line: original.line,\n              column: original.column\n            },\n            generated: {\n              line: generated.line,\n              column: generated.column\n            },\n            name: original.name\n          });\n        }\n      } else {\n        generated.column++;\n      }\n    }\n  });\n  this.walkSourceContents(function (sourceFile, sourceContent) {\n    map.setSourceContent(sourceFile, sourceContent);\n  });\n\n  return { code: generated.code, map: map };\n};\n\nexports.SourceNode = SourceNode;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-node.js\n// module id = 10\n// module chunks = 0"],"sourceRoot":""}
\ No newline at end of file
diff --git a/node_modules/terser/node_modules/source-map/lib/array-set.js b/node_modules/terser/node_modules/source-map/lib/array-set.js
new file mode 100644
index 0000000..fbd5c81
--- /dev/null
+++ b/node_modules/terser/node_modules/source-map/lib/array-set.js
@@ -0,0 +1,121 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+var util = require('./util');
+var has = Object.prototype.hasOwnProperty;
+var hasNativeMap = typeof Map !== "undefined";
+
+/**
+ * A data structure which is a combination of an array and a set. Adding a new
+ * member is O(1), testing for membership is O(1), and finding the index of an
+ * element is O(1). Removing elements from the set is not supported. Only
+ * strings are supported for membership.
+ */
+function ArraySet() {
+  this._array = [];
+  this._set = hasNativeMap ? new Map() : Object.create(null);
+}
+
+/**
+ * Static method for creating ArraySet instances from an existing array.
+ */
+ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
+  var set = new ArraySet();
+  for (var i = 0, len = aArray.length; i < len; i++) {
+    set.add(aArray[i], aAllowDuplicates);
+  }
+  return set;
+};
+
+/**
+ * Return how many unique items are in this ArraySet. If duplicates have been
+ * added, than those do not count towards the size.
+ *
+ * @returns Number
+ */
+ArraySet.prototype.size = function ArraySet_size() {
+  return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;
+};
+
+/**
+ * Add the given string to this set.
+ *
+ * @param String aStr
+ */
+ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
+  var sStr = hasNativeMap ? aStr : util.toSetString(aStr);
+  var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);
+  var idx = this._array.length;
+  if (!isDuplicate || aAllowDuplicates) {
+    this._array.push(aStr);
+  }
+  if (!isDuplicate) {
+    if (hasNativeMap) {
+      this._set.set(aStr, idx);
+    } else {
+      this._set[sStr] = idx;
+    }
+  }
+};
+
+/**
+ * Is the given string a member of this set?
+ *
+ * @param String aStr
+ */
+ArraySet.prototype.has = function ArraySet_has(aStr) {
+  if (hasNativeMap) {
+    return this._set.has(aStr);
+  } else {
+    var sStr = util.toSetString(aStr);
+    return has.call(this._set, sStr);
+  }
+};
+
+/**
+ * What is the index of the given string in the array?
+ *
+ * @param String aStr
+ */
+ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
+  if (hasNativeMap) {
+    var idx = this._set.get(aStr);
+    if (idx >= 0) {
+        return idx;
+    }
+  } else {
+    var sStr = util.toSetString(aStr);
+    if (has.call(this._set, sStr)) {
+      return this._set[sStr];
+    }
+  }
+
+  throw new Error('"' + aStr + '" is not in the set.');
+};
+
+/**
+ * What is the element at the given index?
+ *
+ * @param Number aIdx
+ */
+ArraySet.prototype.at = function ArraySet_at(aIdx) {
+  if (aIdx >= 0 && aIdx < this._array.length) {
+    return this._array[aIdx];
+  }
+  throw new Error('No element indexed by ' + aIdx);
+};
+
+/**
+ * Returns the array representation of this set (which has the proper indices
+ * indicated by indexOf). Note that this is a copy of the internal array used
+ * for storing the members so that no one can mess with internal state.
+ */
+ArraySet.prototype.toArray = function ArraySet_toArray() {
+  return this._array.slice();
+};
+
+exports.ArraySet = ArraySet;
diff --git a/node_modules/terser/node_modules/source-map/lib/base64-vlq.js b/node_modules/terser/node_modules/source-map/lib/base64-vlq.js
new file mode 100644
index 0000000..612b404
--- /dev/null
+++ b/node_modules/terser/node_modules/source-map/lib/base64-vlq.js
@@ -0,0 +1,140 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ *
+ * Based on the Base 64 VLQ implementation in Closure Compiler:
+ * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
+ *
+ * Copyright 2011 The Closure Compiler Authors. All rights reserved.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * Redistributions in binary form must reproduce the above
+ *    copyright notice, this list of conditions and the following
+ *    disclaimer in the documentation and/or other materials provided
+ *    with the distribution.
+ *  * Neither the name of Google Inc. nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+var base64 = require('./base64');
+
+// A single base 64 digit can contain 6 bits of data. For the base 64 variable
+// length quantities we use in the source map spec, the first bit is the sign,
+// the next four bits are the actual value, and the 6th bit is the
+// continuation bit. The continuation bit tells us whether there are more
+// digits in this value following this digit.
+//
+//   Continuation
+//   |    Sign
+//   |    |
+//   V    V
+//   101011
+
+var VLQ_BASE_SHIFT = 5;
+
+// binary: 100000
+var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
+
+// binary: 011111
+var VLQ_BASE_MASK = VLQ_BASE - 1;
+
+// binary: 100000
+var VLQ_CONTINUATION_BIT = VLQ_BASE;
+
+/**
+ * Converts from a two-complement value to a value where the sign bit is
+ * placed in the least significant bit.  For example, as decimals:
+ *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
+ *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
+ */
+function toVLQSigned(aValue) {
+  return aValue < 0
+    ? ((-aValue) << 1) + 1
+    : (aValue << 1) + 0;
+}
+
+/**
+ * Converts to a two-complement value from a value where the sign bit is
+ * placed in the least significant bit.  For example, as decimals:
+ *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1
+ *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2
+ */
+function fromVLQSigned(aValue) {
+  var isNegative = (aValue & 1) === 1;
+  var shifted = aValue >> 1;
+  return isNegative
+    ? -shifted
+    : shifted;
+}
+
+/**
+ * Returns the base 64 VLQ encoded value.
+ */
+exports.encode = function base64VLQ_encode(aValue) {
+  var encoded = "";
+  var digit;
+
+  var vlq = toVLQSigned(aValue);
+
+  do {
+    digit = vlq & VLQ_BASE_MASK;
+    vlq >>>= VLQ_BASE_SHIFT;
+    if (vlq > 0) {
+      // There are still more digits in this value, so we must make sure the
+      // continuation bit is marked.
+      digit |= VLQ_CONTINUATION_BIT;
+    }
+    encoded += base64.encode(digit);
+  } while (vlq > 0);
+
+  return encoded;
+};
+
+/**
+ * Decodes the next base 64 VLQ value from the given string and returns the
+ * value and the rest of the string via the out parameter.
+ */
+exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
+  var strLen = aStr.length;
+  var result = 0;
+  var shift = 0;
+  var continuation, digit;
+
+  do {
+    if (aIndex >= strLen) {
+      throw new Error("Expected more digits in base 64 VLQ value.");
+    }
+
+    digit = base64.decode(aStr.charCodeAt(aIndex++));
+    if (digit === -1) {
+      throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
+    }
+
+    continuation = !!(digit & VLQ_CONTINUATION_BIT);
+    digit &= VLQ_BASE_MASK;
+    result = result + (digit << shift);
+    shift += VLQ_BASE_SHIFT;
+  } while (continuation);
+
+  aOutParam.value = fromVLQSigned(result);
+  aOutParam.rest = aIndex;
+};
diff --git a/node_modules/terser/node_modules/source-map/lib/base64.js b/node_modules/terser/node_modules/source-map/lib/base64.js
new file mode 100644
index 0000000..8aa86b3
--- /dev/null
+++ b/node_modules/terser/node_modules/source-map/lib/base64.js
@@ -0,0 +1,67 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
+
+/**
+ * Encode an integer in the range of 0 to 63 to a single base 64 digit.
+ */
+exports.encode = function (number) {
+  if (0 <= number && number < intToCharMap.length) {
+    return intToCharMap[number];
+  }
+  throw new TypeError("Must be between 0 and 63: " + number);
+};
+
+/**
+ * Decode a single base 64 character code digit to an integer. Returns -1 on
+ * failure.
+ */
+exports.decode = function (charCode) {
+  var bigA = 65;     // 'A'
+  var bigZ = 90;     // 'Z'
+
+  var littleA = 97;  // 'a'
+  var littleZ = 122; // 'z'
+
+  var zero = 48;     // '0'
+  var nine = 57;     // '9'
+
+  var plus = 43;     // '+'
+  var slash = 47;    // '/'
+
+  var littleOffset = 26;
+  var numberOffset = 52;
+
+  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
+  if (bigA <= charCode && charCode <= bigZ) {
+    return (charCode - bigA);
+  }
+
+  // 26 - 51: abcdefghijklmnopqrstuvwxyz
+  if (littleA <= charCode && charCode <= littleZ) {
+    return (charCode - littleA + littleOffset);
+  }
+
+  // 52 - 61: 0123456789
+  if (zero <= charCode && charCode <= nine) {
+    return (charCode - zero + numberOffset);
+  }
+
+  // 62: +
+  if (charCode == plus) {
+    return 62;
+  }
+
+  // 63: /
+  if (charCode == slash) {
+    return 63;
+  }
+
+  // Invalid base64 digit.
+  return -1;
+};
diff --git a/node_modules/terser/node_modules/source-map/lib/binary-search.js b/node_modules/terser/node_modules/source-map/lib/binary-search.js
new file mode 100644
index 0000000..010ac94
--- /dev/null
+++ b/node_modules/terser/node_modules/source-map/lib/binary-search.js
@@ -0,0 +1,111 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+exports.GREATEST_LOWER_BOUND = 1;
+exports.LEAST_UPPER_BOUND = 2;
+
+/**
+ * Recursive implementation of binary search.
+ *
+ * @param aLow Indices here and lower do not contain the needle.
+ * @param aHigh Indices here and higher do not contain the needle.
+ * @param aNeedle The element being searched for.
+ * @param aHaystack The non-empty array being searched.
+ * @param aCompare Function which takes two elements and returns -1, 0, or 1.
+ * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
+ *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
+ *     closest element that is smaller than or greater than the one we are
+ *     searching for, respectively, if the exact element cannot be found.
+ */
+function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
+  // This function terminates when one of the following is true:
+  //
+  //   1. We find the exact element we are looking for.
+  //
+  //   2. We did not find the exact element, but we can return the index of
+  //      the next-closest element.
+  //
+  //   3. We did not find the exact element, and there is no next-closest
+  //      element than the one we are searching for, so we return -1.
+  var mid = Math.floor((aHigh - aLow) / 2) + aLow;
+  var cmp = aCompare(aNeedle, aHaystack[mid], true);
+  if (cmp === 0) {
+    // Found the element we are looking for.
+    return mid;
+  }
+  else if (cmp > 0) {
+    // Our needle is greater than aHaystack[mid].
+    if (aHigh - mid > 1) {
+      // The element is in the upper half.
+      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
+    }
+
+    // The exact needle element was not found in this haystack. Determine if
+    // we are in termination case (3) or (2) and return the appropriate thing.
+    if (aBias == exports.LEAST_UPPER_BOUND) {
+      return aHigh < aHaystack.length ? aHigh : -1;
+    } else {
+      return mid;
+    }
+  }
+  else {
+    // Our needle is less than aHaystack[mid].
+    if (mid - aLow > 1) {
+      // The element is in the lower half.
+      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
+    }
+
+    // we are in termination case (3) or (2) and return the appropriate thing.
+    if (aBias == exports.LEAST_UPPER_BOUND) {
+      return mid;
+    } else {
+      return aLow < 0 ? -1 : aLow;
+    }
+  }
+}
+
+/**
+ * This is an implementation of binary search which will always try and return
+ * the index of the closest element if there is no exact hit. This is because
+ * mappings between original and generated line/col pairs are single points,
+ * and there is an implicit region between each of them, so a miss just means
+ * that you aren't on the very start of a region.
+ *
+ * @param aNeedle The element you are looking for.
+ * @param aHaystack The array that is being searched.
+ * @param aCompare A function which takes the needle and an element in the
+ *     array and returns -1, 0, or 1 depending on whether the needle is less
+ *     than, equal to, or greater than the element, respectively.
+ * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
+ *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
+ *     closest element that is smaller than or greater than the one we are
+ *     searching for, respectively, if the exact element cannot be found.
+ *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
+ */
+exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
+  if (aHaystack.length === 0) {
+    return -1;
+  }
+
+  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
+                              aCompare, aBias || exports.GREATEST_LOWER_BOUND);
+  if (index < 0) {
+    return -1;
+  }
+
+  // We have found either the exact element, or the next-closest element than
+  // the one we are searching for. However, there may be more than one such
+  // element. Make sure we always return the smallest of these.
+  while (index - 1 >= 0) {
+    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
+      break;
+    }
+    --index;
+  }
+
+  return index;
+};
diff --git a/node_modules/terser/node_modules/source-map/lib/mapping-list.js b/node_modules/terser/node_modules/source-map/lib/mapping-list.js
new file mode 100644
index 0000000..06d1274
--- /dev/null
+++ b/node_modules/terser/node_modules/source-map/lib/mapping-list.js
@@ -0,0 +1,79 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2014 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+var util = require('./util');
+
+/**
+ * Determine whether mappingB is after mappingA with respect to generated
+ * position.
+ */
+function generatedPositionAfter(mappingA, mappingB) {
+  // Optimized for most common case
+  var lineA = mappingA.generatedLine;
+  var lineB = mappingB.generatedLine;
+  var columnA = mappingA.generatedColumn;
+  var columnB = mappingB.generatedColumn;
+  return lineB > lineA || lineB == lineA && columnB >= columnA ||
+         util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
+}
+
+/**
+ * A data structure to provide a sorted view of accumulated mappings in a
+ * performance conscious manner. It trades a neglibable overhead in general
+ * case for a large speedup in case of mappings being added in order.
+ */
+function MappingList() {
+  this._array = [];
+  this._sorted = true;
+  // Serves as infimum
+  this._last = {generatedLine: -1, generatedColumn: 0};
+}
+
+/**
+ * Iterate through internal items. This method takes the same arguments that
+ * `Array.prototype.forEach` takes.
+ *
+ * NOTE: The order of the mappings is NOT guaranteed.
+ */
+MappingList.prototype.unsortedForEach =
+  function MappingList_forEach(aCallback, aThisArg) {
+    this._array.forEach(aCallback, aThisArg);
+  };
+
+/**
+ * Add the given source mapping.
+ *
+ * @param Object aMapping
+ */
+MappingList.prototype.add = function MappingList_add(aMapping) {
+  if (generatedPositionAfter(this._last, aMapping)) {
+    this._last = aMapping;
+    this._array.push(aMapping);
+  } else {
+    this._sorted = false;
+    this._array.push(aMapping);
+  }
+};
+
+/**
+ * Returns the flat, sorted array of mappings. The mappings are sorted by
+ * generated position.
+ *
+ * WARNING: This method returns internal data without copying, for
+ * performance. The return value must NOT be mutated, and should be treated as
+ * an immutable borrow. If you want to take ownership, you must make your own
+ * copy.
+ */
+MappingList.prototype.toArray = function MappingList_toArray() {
+  if (!this._sorted) {
+    this._array.sort(util.compareByGeneratedPositionsInflated);
+    this._sorted = true;
+  }
+  return this._array;
+};
+
+exports.MappingList = MappingList;
diff --git a/node_modules/terser/node_modules/source-map/lib/quick-sort.js b/node_modules/terser/node_modules/source-map/lib/quick-sort.js
new file mode 100644
index 0000000..6a7caad
--- /dev/null
+++ b/node_modules/terser/node_modules/source-map/lib/quick-sort.js
@@ -0,0 +1,114 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+// It turns out that some (most?) JavaScript engines don't self-host
+// `Array.prototype.sort`. This makes sense because C++ will likely remain
+// faster than JS when doing raw CPU-intensive sorting. However, when using a
+// custom comparator function, calling back and forth between the VM's C++ and
+// JIT'd JS is rather slow *and* loses JIT type information, resulting in
+// worse generated code for the comparator function than would be optimal. In
+// fact, when sorting with a comparator, these costs outweigh the benefits of
+// sorting in C++. By using our own JS-implemented Quick Sort (below), we get
+// a ~3500ms mean speed-up in `bench/bench.html`.
+
+/**
+ * Swap the elements indexed by `x` and `y` in the array `ary`.
+ *
+ * @param {Array} ary
+ *        The array.
+ * @param {Number} x
+ *        The index of the first item.
+ * @param {Number} y
+ *        The index of the second item.
+ */
+function swap(ary, x, y) {
+  var temp = ary[x];
+  ary[x] = ary[y];
+  ary[y] = temp;
+}
+
+/**
+ * Returns a random integer within the range `low .. high` inclusive.
+ *
+ * @param {Number} low
+ *        The lower bound on the range.
+ * @param {Number} high
+ *        The upper bound on the range.
+ */
+function randomIntInRange(low, high) {
+  return Math.round(low + (Math.random() * (high - low)));
+}
+
+/**
+ * The Quick Sort algorithm.
+ *
+ * @param {Array} ary
+ *        An array to sort.
+ * @param {function} comparator
+ *        Function to use to compare two items.
+ * @param {Number} p
+ *        Start index of the array
+ * @param {Number} r
+ *        End index of the array
+ */
+function doQuickSort(ary, comparator, p, r) {
+  // If our lower bound is less than our upper bound, we (1) partition the
+  // array into two pieces and (2) recurse on each half. If it is not, this is
+  // the empty array and our base case.
+
+  if (p < r) {
+    // (1) Partitioning.
+    //
+    // The partitioning chooses a pivot between `p` and `r` and moves all
+    // elements that are less than or equal to the pivot to the before it, and
+    // all the elements that are greater than it after it. The effect is that
+    // once partition is done, the pivot is in the exact place it will be when
+    // the array is put in sorted order, and it will not need to be moved
+    // again. This runs in O(n) time.
+
+    // Always choose a random pivot so that an input array which is reverse
+    // sorted does not cause O(n^2) running time.
+    var pivotIndex = randomIntInRange(p, r);
+    var i = p - 1;
+
+    swap(ary, pivotIndex, r);
+    var pivot = ary[r];
+
+    // Immediately after `j` is incremented in this loop, the following hold
+    // true:
+    //
+    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.
+    //
+    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.
+    for (var j = p; j < r; j++) {
+      if (comparator(ary[j], pivot) <= 0) {
+        i += 1;
+        swap(ary, i, j);
+      }
+    }
+
+    swap(ary, i + 1, j);
+    var q = i + 1;
+
+    // (2) Recurse on each half.
+
+    doQuickSort(ary, comparator, p, q - 1);
+    doQuickSort(ary, comparator, q + 1, r);
+  }
+}
+
+/**
+ * Sort the given array in-place with the given comparator function.
+ *
+ * @param {Array} ary
+ *        An array to sort.
+ * @param {function} comparator
+ *        Function to use to compare two items.
+ */
+exports.quickSort = function (ary, comparator) {
+  doQuickSort(ary, comparator, 0, ary.length - 1);
+};
diff --git a/node_modules/terser/node_modules/source-map/lib/source-map-consumer.js b/node_modules/terser/node_modules/source-map/lib/source-map-consumer.js
new file mode 100644
index 0000000..7b99d1d
--- /dev/null
+++ b/node_modules/terser/node_modules/source-map/lib/source-map-consumer.js
@@ -0,0 +1,1145 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+var util = require('./util');
+var binarySearch = require('./binary-search');
+var ArraySet = require('./array-set').ArraySet;
+var base64VLQ = require('./base64-vlq');
+var quickSort = require('./quick-sort').quickSort;
+
+function SourceMapConsumer(aSourceMap, aSourceMapURL) {
+  var sourceMap = aSourceMap;
+  if (typeof aSourceMap === 'string') {
+    sourceMap = util.parseSourceMapInput(aSourceMap);
+  }
+
+  return sourceMap.sections != null
+    ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)
+    : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);
+}
+
+SourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {
+  return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);
+}
+
+/**
+ * The version of the source mapping spec that we are consuming.
+ */
+SourceMapConsumer.prototype._version = 3;
+
+// `__generatedMappings` and `__originalMappings` are arrays that hold the
+// parsed mapping coordinates from the source map's "mappings" attribute. They
+// are lazily instantiated, accessed via the `_generatedMappings` and
+// `_originalMappings` getters respectively, and we only parse the mappings
+// and create these arrays once queried for a source location. We jump through
+// these hoops because there can be many thousands of mappings, and parsing
+// them is expensive, so we only want to do it if we must.
+//
+// Each object in the arrays is of the form:
+//
+//     {
+//       generatedLine: The line number in the generated code,
+//       generatedColumn: The column number in the generated code,
+//       source: The path to the original source file that generated this
+//               chunk of code,
+//       originalLine: The line number in the original source that
+//                     corresponds to this chunk of generated code,
+//       originalColumn: The column number in the original source that
+//                       corresponds to this chunk of generated code,
+//       name: The name of the original symbol which generated this chunk of
+//             code.
+//     }
+//
+// All properties except for `generatedLine` and `generatedColumn` can be
+// `null`.
+//
+// `_generatedMappings` is ordered by the generated positions.
+//
+// `_originalMappings` is ordered by the original positions.
+
+SourceMapConsumer.prototype.__generatedMappings = null;
+Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {
+  configurable: true,
+  enumerable: true,
+  get: function () {
+    if (!this.__generatedMappings) {
+      this._parseMappings(this._mappings, this.sourceRoot);
+    }
+
+    return this.__generatedMappings;
+  }
+});
+
+SourceMapConsumer.prototype.__originalMappings = null;
+Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {
+  configurable: true,
+  enumerable: true,
+  get: function () {
+    if (!this.__originalMappings) {
+      this._parseMappings(this._mappings, this.sourceRoot);
+    }
+
+    return this.__originalMappings;
+  }
+});
+
+SourceMapConsumer.prototype._charIsMappingSeparator =
+  function SourceMapConsumer_charIsMappingSeparator(aStr, index) {
+    var c = aStr.charAt(index);
+    return c === ";" || c === ",";
+  };
+
+/**
+ * Parse the mappings in a string in to a data structure which we can easily
+ * query (the ordered arrays in the `this.__generatedMappings` and
+ * `this.__originalMappings` properties).
+ */
+SourceMapConsumer.prototype._parseMappings =
+  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+    throw new Error("Subclasses must implement _parseMappings");
+  };
+
+SourceMapConsumer.GENERATED_ORDER = 1;
+SourceMapConsumer.ORIGINAL_ORDER = 2;
+
+SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
+SourceMapConsumer.LEAST_UPPER_BOUND = 2;
+
+/**
+ * Iterate over each mapping between an original source/line/column and a
+ * generated line/column in this source map.
+ *
+ * @param Function aCallback
+ *        The function that is called with each mapping.
+ * @param Object aContext
+ *        Optional. If specified, this object will be the value of `this` every
+ *        time that `aCallback` is called.
+ * @param aOrder
+ *        Either `SourceMapConsumer.GENERATED_ORDER` or
+ *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
+ *        iterate over the mappings sorted by the generated file's line/column
+ *        order or the original's source/line/column order, respectively. Defaults to
+ *        `SourceMapConsumer.GENERATED_ORDER`.
+ */
+SourceMapConsumer.prototype.eachMapping =
+  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
+    var context = aContext || null;
+    var order = aOrder || SourceMapConsumer.GENERATED_ORDER;
+
+    var mappings;
+    switch (order) {
+    case SourceMapConsumer.GENERATED_ORDER:
+      mappings = this._generatedMappings;
+      break;
+    case SourceMapConsumer.ORIGINAL_ORDER:
+      mappings = this._originalMappings;
+      break;
+    default:
+      throw new Error("Unknown order of iteration.");
+    }
+
+    var sourceRoot = this.sourceRoot;
+    mappings.map(function (mapping) {
+      var source = mapping.source === null ? null : this._sources.at(mapping.source);
+      source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);
+      return {
+        source: source,
+        generatedLine: mapping.generatedLine,
+        generatedColumn: mapping.generatedColumn,
+        originalLine: mapping.originalLine,
+        originalColumn: mapping.originalColumn,
+        name: mapping.name === null ? null : this._names.at(mapping.name)
+      };
+    }, this).forEach(aCallback, context);
+  };
+
+/**
+ * Returns all generated line and column information for the original source,
+ * line, and column provided. If no column is provided, returns all mappings
+ * corresponding to a either the line we are searching for or the next
+ * closest line that has any mappings. Otherwise, returns all mappings
+ * corresponding to the given line and either the column we are searching for
+ * or the next closest column that has any offsets.
+ *
+ * The only argument is an object with the following properties:
+ *
+ *   - source: The filename of the original source.
+ *   - line: The line number in the original source.  The line number is 1-based.
+ *   - column: Optional. the column number in the original source.
+ *    The column number is 0-based.
+ *
+ * and an array of objects is returned, each with the following properties:
+ *
+ *   - line: The line number in the generated source, or null.  The
+ *    line number is 1-based.
+ *   - column: The column number in the generated source, or null.
+ *    The column number is 0-based.
+ */
+SourceMapConsumer.prototype.allGeneratedPositionsFor =
+  function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
+    var line = util.getArg(aArgs, 'line');
+
+    // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping
+    // returns the index of the closest mapping less than the needle. By
+    // setting needle.originalColumn to 0, we thus find the last mapping for
+    // the given line, provided such a mapping exists.
+    var needle = {
+      source: util.getArg(aArgs, 'source'),
+      originalLine: line,
+      originalColumn: util.getArg(aArgs, 'column', 0)
+    };
+
+    needle.source = this._findSourceIndex(needle.source);
+    if (needle.source < 0) {
+      return [];
+    }
+
+    var mappings = [];
+
+    var index = this._findMapping(needle,
+                                  this._originalMappings,
+                                  "originalLine",
+                                  "originalColumn",
+                                  util.compareByOriginalPositions,
+                                  binarySearch.LEAST_UPPER_BOUND);
+    if (index >= 0) {
+      var mapping = this._originalMappings[index];
+
+      if (aArgs.column === undefined) {
+        var originalLine = mapping.originalLine;
+
+        // Iterate until either we run out of mappings, or we run into
+        // a mapping for a different line than the one we found. Since
+        // mappings are sorted, this is guaranteed to find all mappings for
+        // the line we found.
+        while (mapping && mapping.originalLine === originalLine) {
+          mappings.push({
+            line: util.getArg(mapping, 'generatedLine', null),
+            column: util.getArg(mapping, 'generatedColumn', null),
+            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
+          });
+
+          mapping = this._originalMappings[++index];
+        }
+      } else {
+        var originalColumn = mapping.originalColumn;
+
+        // Iterate until either we run out of mappings, or we run into
+        // a mapping for a different line than the one we were searching for.
+        // Since mappings are sorted, this is guaranteed to find all mappings for
+        // the line we are searching for.
+        while (mapping &&
+               mapping.originalLine === line &&
+               mapping.originalColumn == originalColumn) {
+          mappings.push({
+            line: util.getArg(mapping, 'generatedLine', null),
+            column: util.getArg(mapping, 'generatedColumn', null),
+            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
+          });
+
+          mapping = this._originalMappings[++index];
+        }
+      }
+    }
+
+    return mappings;
+  };
+
+exports.SourceMapConsumer = SourceMapConsumer;
+
+/**
+ * A BasicSourceMapConsumer instance represents a parsed source map which we can
+ * query for information about the original file positions by giving it a file
+ * position in the generated source.
+ *
+ * The first parameter is the raw source map (either as a JSON string, or
+ * already parsed to an object). According to the spec, source maps have the
+ * following attributes:
+ *
+ *   - version: Which version of the source map spec this map is following.
+ *   - sources: An array of URLs to the original source files.
+ *   - names: An array of identifiers which can be referrenced by individual mappings.
+ *   - sourceRoot: Optional. The URL root from which all sources are relative.
+ *   - sourcesContent: Optional. An array of contents of the original source files.
+ *   - mappings: A string of base64 VLQs which contain the actual mappings.
+ *   - file: Optional. The generated file this source map is associated with.
+ *
+ * Here is an example source map, taken from the source map spec[0]:
+ *
+ *     {
+ *       version : 3,
+ *       file: "out.js",
+ *       sourceRoot : "",
+ *       sources: ["foo.js", "bar.js"],
+ *       names: ["src", "maps", "are", "fun"],
+ *       mappings: "AA,AB;;ABCDE;"
+ *     }
+ *
+ * The second parameter, if given, is a string whose value is the URL
+ * at which the source map was found.  This URL is used to compute the
+ * sources array.
+ *
+ * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
+ */
+function BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {
+  var sourceMap = aSourceMap;
+  if (typeof aSourceMap === 'string') {
+    sourceMap = util.parseSourceMapInput(aSourceMap);
+  }
+
+  var version = util.getArg(sourceMap, 'version');
+  var sources = util.getArg(sourceMap, 'sources');
+  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
+  // requires the array) to play nice here.
+  var names = util.getArg(sourceMap, 'names', []);
+  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);
+  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);
+  var mappings = util.getArg(sourceMap, 'mappings');
+  var file = util.getArg(sourceMap, 'file', null);
+
+  // Once again, Sass deviates from the spec and supplies the version as a
+  // string rather than a number, so we use loose equality checking here.
+  if (version != this._version) {
+    throw new Error('Unsupported version: ' + version);
+  }
+
+  if (sourceRoot) {
+    sourceRoot = util.normalize(sourceRoot);
+  }
+
+  sources = sources
+    .map(String)
+    // Some source maps produce relative source paths like "./foo.js" instead of
+    // "foo.js".  Normalize these first so that future comparisons will succeed.
+    // See bugzil.la/1090768.
+    .map(util.normalize)
+    // Always ensure that absolute sources are internally stored relative to
+    // the source root, if the source root is absolute. Not doing this would
+    // be particularly problematic when the source root is a prefix of the
+    // source (valid, but why??). See github issue #199 and bugzil.la/1188982.
+    .map(function (source) {
+      return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)
+        ? util.relative(sourceRoot, source)
+        : source;
+    });
+
+  // Pass `true` below to allow duplicate names and sources. While source maps
+  // are intended to be compressed and deduplicated, the TypeScript compiler
+  // sometimes generates source maps with duplicates in them. See Github issue
+  // #72 and bugzil.la/889492.
+  this._names = ArraySet.fromArray(names.map(String), true);
+  this._sources = ArraySet.fromArray(sources, true);
+
+  this._absoluteSources = this._sources.toArray().map(function (s) {
+    return util.computeSourceURL(sourceRoot, s, aSourceMapURL);
+  });
+
+  this.sourceRoot = sourceRoot;
+  this.sourcesContent = sourcesContent;
+  this._mappings = mappings;
+  this._sourceMapURL = aSourceMapURL;
+  this.file = file;
+}
+
+BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
+BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;
+
+/**
+ * Utility function to find the index of a source.  Returns -1 if not
+ * found.
+ */
+BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {
+  var relativeSource = aSource;
+  if (this.sourceRoot != null) {
+    relativeSource = util.relative(this.sourceRoot, relativeSource);
+  }
+
+  if (this._sources.has(relativeSource)) {
+    return this._sources.indexOf(relativeSource);
+  }
+
+  // Maybe aSource is an absolute URL as returned by |sources|.  In
+  // this case we can't simply undo the transform.
+  var i;
+  for (i = 0; i < this._absoluteSources.length; ++i) {
+    if (this._absoluteSources[i] == aSource) {
+      return i;
+    }
+  }
+
+  return -1;
+};
+
+/**
+ * Create a BasicSourceMapConsumer from a SourceMapGenerator.
+ *
+ * @param SourceMapGenerator aSourceMap
+ *        The source map that will be consumed.
+ * @param String aSourceMapURL
+ *        The URL at which the source map can be found (optional)
+ * @returns BasicSourceMapConsumer
+ */
+BasicSourceMapConsumer.fromSourceMap =
+  function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {
+    var smc = Object.create(BasicSourceMapConsumer.prototype);
+
+    var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
+    var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
+    smc.sourceRoot = aSourceMap._sourceRoot;
+    smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),
+                                                            smc.sourceRoot);
+    smc.file = aSourceMap._file;
+    smc._sourceMapURL = aSourceMapURL;
+    smc._absoluteSources = smc._sources.toArray().map(function (s) {
+      return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);
+    });
+
+    // Because we are modifying the entries (by converting string sources and
+    // names to indices into the sources and names ArraySets), we have to make
+    // a copy of the entry or else bad things happen. Shared mutable state
+    // strikes again! See github issue #191.
+
+    var generatedMappings = aSourceMap._mappings.toArray().slice();
+    var destGeneratedMappings = smc.__generatedMappings = [];
+    var destOriginalMappings = smc.__originalMappings = [];
+
+    for (var i = 0, length = generatedMappings.length; i < length; i++) {
+      var srcMapping = generatedMappings[i];
+      var destMapping = new Mapping;
+      destMapping.generatedLine = srcMapping.generatedLine;
+      destMapping.generatedColumn = srcMapping.generatedColumn;
+
+      if (srcMapping.source) {
+        destMapping.source = sources.indexOf(srcMapping.source);
+        destMapping.originalLine = srcMapping.originalLine;
+        destMapping.originalColumn = srcMapping.originalColumn;
+
+        if (srcMapping.name) {
+          destMapping.name = names.indexOf(srcMapping.name);
+        }
+
+        destOriginalMappings.push(destMapping);
+      }
+
+      destGeneratedMappings.push(destMapping);
+    }
+
+    quickSort(smc.__originalMappings, util.compareByOriginalPositions);
+
+    return smc;
+  };
+
+/**
+ * The version of the source mapping spec that we are consuming.
+ */
+BasicSourceMapConsumer.prototype._version = 3;
+
+/**
+ * The list of original sources.
+ */
+Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {
+  get: function () {
+    return this._absoluteSources.slice();
+  }
+});
+
+/**
+ * Provide the JIT with a nice shape / hidden class.
+ */
+function Mapping() {
+  this.generatedLine = 0;
+  this.generatedColumn = 0;
+  this.source = null;
+  this.originalLine = null;
+  this.originalColumn = null;
+  this.name = null;
+}
+
+/**
+ * Parse the mappings in a string in to a data structure which we can easily
+ * query (the ordered arrays in the `this.__generatedMappings` and
+ * `this.__originalMappings` properties).
+ */
+BasicSourceMapConsumer.prototype._parseMappings =
+  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+    var generatedLine = 1;
+    var previousGeneratedColumn = 0;
+    var previousOriginalLine = 0;
+    var previousOriginalColumn = 0;
+    var previousSource = 0;
+    var previousName = 0;
+    var length = aStr.length;
+    var index = 0;
+    var cachedSegments = {};
+    var temp = {};
+    var originalMappings = [];
+    var generatedMappings = [];
+    var mapping, str, segment, end, value;
+
+    while (index < length) {
+      if (aStr.charAt(index) === ';') {
+        generatedLine++;
+        index++;
+        previousGeneratedColumn = 0;
+      }
+      else if (aStr.charAt(index) === ',') {
+        index++;
+      }
+      else {
+        mapping = new Mapping();
+        mapping.generatedLine = generatedLine;
+
+        // Because each offset is encoded relative to the previous one,
+        // many segments often have the same encoding. We can exploit this
+        // fact by caching the parsed variable length fields of each segment,
+        // allowing us to avoid a second parse if we encounter the same
+        // segment again.
+        for (end = index; end < length; end++) {
+          if (this._charIsMappingSeparator(aStr, end)) {
+            break;
+          }
+        }
+        str = aStr.slice(index, end);
+
+        segment = cachedSegments[str];
+        if (segment) {
+          index += str.length;
+        } else {
+          segment = [];
+          while (index < end) {
+            base64VLQ.decode(aStr, index, temp);
+            value = temp.value;
+            index = temp.rest;
+            segment.push(value);
+          }
+
+          if (segment.length === 2) {
+            throw new Error('Found a source, but no line and column');
+          }
+
+          if (segment.length === 3) {
+            throw new Error('Found a source and line, but no column');
+          }
+
+          cachedSegments[str] = segment;
+        }
+
+        // Generated column.
+        mapping.generatedColumn = previousGeneratedColumn + segment[0];
+        previousGeneratedColumn = mapping.generatedColumn;
+
+        if (segment.length > 1) {
+          // Original source.
+          mapping.source = previousSource + segment[1];
+          previousSource += segment[1];
+
+          // Original line.
+          mapping.originalLine = previousOriginalLine + segment[2];
+          previousOriginalLine = mapping.originalLine;
+          // Lines are stored 0-based
+          mapping.originalLine += 1;
+
+          // Original column.
+          mapping.originalColumn = previousOriginalColumn + segment[3];
+          previousOriginalColumn = mapping.originalColumn;
+
+          if (segment.length > 4) {
+            // Original name.
+            mapping.name = previousName + segment[4];
+            previousName += segment[4];
+          }
+        }
+
+        generatedMappings.push(mapping);
+        if (typeof mapping.originalLine === 'number') {
+          originalMappings.push(mapping);
+        }
+      }
+    }
+
+    quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);
+    this.__generatedMappings = generatedMappings;
+
+    quickSort(originalMappings, util.compareByOriginalPositions);
+    this.__originalMappings = originalMappings;
+  };
+
+/**
+ * Find the mapping that best matches the hypothetical "needle" mapping that
+ * we are searching for in the given "haystack" of mappings.
+ */
+BasicSourceMapConsumer.prototype._findMapping =
+  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,
+                                         aColumnName, aComparator, aBias) {
+    // To return the position we are searching for, we must first find the
+    // mapping for the given position and then return the opposite position it
+    // points to. Because the mappings are sorted, we can use binary search to
+    // find the best mapping.
+
+    if (aNeedle[aLineName] <= 0) {
+      throw new TypeError('Line must be greater than or equal to 1, got '
+                          + aNeedle[aLineName]);
+    }
+    if (aNeedle[aColumnName] < 0) {
+      throw new TypeError('Column must be greater than or equal to 0, got '
+                          + aNeedle[aColumnName]);
+    }
+
+    return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
+  };
+
+/**
+ * Compute the last column for each generated mapping. The last column is
+ * inclusive.
+ */
+BasicSourceMapConsumer.prototype.computeColumnSpans =
+  function SourceMapConsumer_computeColumnSpans() {
+    for (var index = 0; index < this._generatedMappings.length; ++index) {
+      var mapping = this._generatedMappings[index];
+
+      // Mappings do not contain a field for the last generated columnt. We
+      // can come up with an optimistic estimate, however, by assuming that
+      // mappings are contiguous (i.e. given two consecutive mappings, the
+      // first mapping ends where the second one starts).
+      if (index + 1 < this._generatedMappings.length) {
+        var nextMapping = this._generatedMappings[index + 1];
+
+        if (mapping.generatedLine === nextMapping.generatedLine) {
+          mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
+          continue;
+        }
+      }
+
+      // The last mapping for each line spans the entire line.
+      mapping.lastGeneratedColumn = Infinity;
+    }
+  };
+
+/**
+ * Returns the original source, line, and column information for the generated
+ * source's line and column positions provided. The only argument is an object
+ * with the following properties:
+ *
+ *   - line: The line number in the generated source.  The line number
+ *     is 1-based.
+ *   - column: The column number in the generated source.  The column
+ *     number is 0-based.
+ *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
+ *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
+ *     closest element that is smaller than or greater than the one we are
+ *     searching for, respectively, if the exact element cannot be found.
+ *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
+ *
+ * and an object is returned with the following properties:
+ *
+ *   - source: The original source file, or null.
+ *   - line: The line number in the original source, or null.  The
+ *     line number is 1-based.
+ *   - column: The column number in the original source, or null.  The
+ *     column number is 0-based.
+ *   - name: The original identifier, or null.
+ */
+BasicSourceMapConsumer.prototype.originalPositionFor =
+  function SourceMapConsumer_originalPositionFor(aArgs) {
+    var needle = {
+      generatedLine: util.getArg(aArgs, 'line'),
+      generatedColumn: util.getArg(aArgs, 'column')
+    };
+
+    var index = this._findMapping(
+      needle,
+      this._generatedMappings,
+      "generatedLine",
+      "generatedColumn",
+      util.compareByGeneratedPositionsDeflated,
+      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
+    );
+
+    if (index >= 0) {
+      var mapping = this._generatedMappings[index];
+
+      if (mapping.generatedLine === needle.generatedLine) {
+        var source = util.getArg(mapping, 'source', null);
+        if (source !== null) {
+          source = this._sources.at(source);
+          source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);
+        }
+        var name = util.getArg(mapping, 'name', null);
+        if (name !== null) {
+          name = this._names.at(name);
+        }
+        return {
+          source: source,
+          line: util.getArg(mapping, 'originalLine', null),
+          column: util.getArg(mapping, 'originalColumn', null),
+          name: name
+        };
+      }
+    }
+
+    return {
+      source: null,
+      line: null,
+      column: null,
+      name: null
+    };
+  };
+
+/**
+ * Return true if we have the source content for every source in the source
+ * map, false otherwise.
+ */
+BasicSourceMapConsumer.prototype.hasContentsOfAllSources =
+  function BasicSourceMapConsumer_hasContentsOfAllSources() {
+    if (!this.sourcesContent) {
+      return false;
+    }
+    return this.sourcesContent.length >= this._sources.size() &&
+      !this.sourcesContent.some(function (sc) { return sc == null; });
+  };
+
+/**
+ * Returns the original source content. The only argument is the url of the
+ * original source file. Returns null if no original source content is
+ * available.
+ */
+BasicSourceMapConsumer.prototype.sourceContentFor =
+  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
+    if (!this.sourcesContent) {
+      return null;
+    }
+
+    var index = this._findSourceIndex(aSource);
+    if (index >= 0) {
+      return this.sourcesContent[index];
+    }
+
+    var relativeSource = aSource;
+    if (this.sourceRoot != null) {
+      relativeSource = util.relative(this.sourceRoot, relativeSource);
+    }
+
+    var url;
+    if (this.sourceRoot != null
+        && (url = util.urlParse(this.sourceRoot))) {
+      // XXX: file:// URIs and absolute paths lead to unexpected behavior for
+      // many users. We can help them out when they expect file:// URIs to
+      // behave like it would if they were running a local HTTP server. See
+      // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
+      var fileUriAbsPath = relativeSource.replace(/^file:\/\//, "");
+      if (url.scheme == "file"
+          && this._sources.has(fileUriAbsPath)) {
+        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]
+      }
+
+      if ((!url.path || url.path == "/")
+          && this._sources.has("/" + relativeSource)) {
+        return this.sourcesContent[this._sources.indexOf("/" + relativeSource)];
+      }
+    }
+
+    // This function is used recursively from
+    // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
+    // don't want to throw if we can't find the source - we just want to
+    // return null, so we provide a flag to exit gracefully.
+    if (nullOnMissing) {
+      return null;
+    }
+    else {
+      throw new Error('"' + relativeSource + '" is not in the SourceMap.');
+    }
+  };
+
+/**
+ * Returns the generated line and column information for the original source,
+ * line, and column positions provided. The only argument is an object with
+ * the following properties:
+ *
+ *   - source: The filename of the original source.
+ *   - line: The line number in the original source.  The line number
+ *     is 1-based.
+ *   - column: The column number in the original source.  The column
+ *     number is 0-based.
+ *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
+ *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
+ *     closest element that is smaller than or greater than the one we are
+ *     searching for, respectively, if the exact element cannot be found.
+ *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
+ *
+ * and an object is returned with the following properties:
+ *
+ *   - line: The line number in the generated source, or null.  The
+ *     line number is 1-based.
+ *   - column: The column number in the generated source, or null.
+ *     The column number is 0-based.
+ */
+BasicSourceMapConsumer.prototype.generatedPositionFor =
+  function SourceMapConsumer_generatedPositionFor(aArgs) {
+    var source = util.getArg(aArgs, 'source');
+    source = this._findSourceIndex(source);
+    if (source < 0) {
+      return {
+        line: null,
+        column: null,
+        lastColumn: null
+      };
+    }
+
+    var needle = {
+      source: source,
+      originalLine: util.getArg(aArgs, 'line'),
+      originalColumn: util.getArg(aArgs, 'column')
+    };
+
+    var index = this._findMapping(
+      needle,
+      this._originalMappings,
+      "originalLine",
+      "originalColumn",
+      util.compareByOriginalPositions,
+      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
+    );
+
+    if (index >= 0) {
+      var mapping = this._originalMappings[index];
+
+      if (mapping.source === needle.source) {
+        return {
+          line: util.getArg(mapping, 'generatedLine', null),
+          column: util.getArg(mapping, 'generatedColumn', null),
+          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
+        };
+      }
+    }
+
+    return {
+      line: null,
+      column: null,
+      lastColumn: null
+    };
+  };
+
+exports.BasicSourceMapConsumer = BasicSourceMapConsumer;
+
+/**
+ * An IndexedSourceMapConsumer instance represents a parsed source map which
+ * we can query for information. It differs from BasicSourceMapConsumer in
+ * that it takes "indexed" source maps (i.e. ones with a "sections" field) as
+ * input.
+ *
+ * The first parameter is a raw source map (either as a JSON string, or already
+ * parsed to an object). According to the spec for indexed source maps, they
+ * have the following attributes:
+ *
+ *   - version: Which version of the source map spec this map is following.
+ *   - file: Optional. The generated file this source map is associated with.
+ *   - sections: A list of section definitions.
+ *
+ * Each value under the "sections" field has two fields:
+ *   - offset: The offset into the original specified at which this section
+ *       begins to apply, defined as an object with a "line" and "column"
+ *       field.
+ *   - map: A source map definition. This source map could also be indexed,
+ *       but doesn't have to be.
+ *
+ * Instead of the "map" field, it's also possible to have a "url" field
+ * specifying a URL to retrieve a source map from, but that's currently
+ * unsupported.
+ *
+ * Here's an example source map, taken from the source map spec[0], but
+ * modified to omit a section which uses the "url" field.
+ *
+ *  {
+ *    version : 3,
+ *    file: "app.js",
+ *    sections: [{
+ *      offset: {line:100, column:10},
+ *      map: {
+ *        version : 3,
+ *        file: "section.js",
+ *        sources: ["foo.js", "bar.js"],
+ *        names: ["src", "maps", "are", "fun"],
+ *        mappings: "AAAA,E;;ABCDE;"
+ *      }
+ *    }],
+ *  }
+ *
+ * The second parameter, if given, is a string whose value is the URL
+ * at which the source map was found.  This URL is used to compute the
+ * sources array.
+ *
+ * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
+ */
+function IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {
+  var sourceMap = aSourceMap;
+  if (typeof aSourceMap === 'string') {
+    sourceMap = util.parseSourceMapInput(aSourceMap);
+  }
+
+  var version = util.getArg(sourceMap, 'version');
+  var sections = util.getArg(sourceMap, 'sections');
+
+  if (version != this._version) {
+    throw new Error('Unsupported version: ' + version);
+  }
+
+  this._sources = new ArraySet();
+  this._names = new ArraySet();
+
+  var lastOffset = {
+    line: -1,
+    column: 0
+  };
+  this._sections = sections.map(function (s) {
+    if (s.url) {
+      // The url field will require support for asynchronicity.
+      // See https://github.com/mozilla/source-map/issues/16
+      throw new Error('Support for url field in sections not implemented.');
+    }
+    var offset = util.getArg(s, 'offset');
+    var offsetLine = util.getArg(offset, 'line');
+    var offsetColumn = util.getArg(offset, 'column');
+
+    if (offsetLine < lastOffset.line ||
+        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
+      throw new Error('Section offsets must be ordered and non-overlapping.');
+    }
+    lastOffset = offset;
+
+    return {
+      generatedOffset: {
+        // The offset fields are 0-based, but we use 1-based indices when
+        // encoding/decoding from VLQ.
+        generatedLine: offsetLine + 1,
+        generatedColumn: offsetColumn + 1
+      },
+      consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)
+    }
+  });
+}
+
+IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
+IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;
+
+/**
+ * The version of the source mapping spec that we are consuming.
+ */
+IndexedSourceMapConsumer.prototype._version = 3;
+
+/**
+ * The list of original sources.
+ */
+Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {
+  get: function () {
+    var sources = [];
+    for (var i = 0; i < this._sections.length; i++) {
+      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
+        sources.push(this._sections[i].consumer.sources[j]);
+      }
+    }
+    return sources;
+  }
+});
+
+/**
+ * Returns the original source, line, and column information for the generated
+ * source's line and column positions provided. The only argument is an object
+ * with the following properties:
+ *
+ *   - line: The line number in the generated source.  The line number
+ *     is 1-based.
+ *   - column: The column number in the generated source.  The column
+ *     number is 0-based.
+ *
+ * and an object is returned with the following properties:
+ *
+ *   - source: The original source file, or null.
+ *   - line: The line number in the original source, or null.  The
+ *     line number is 1-based.
+ *   - column: The column number in the original source, or null.  The
+ *     column number is 0-based.
+ *   - name: The original identifier, or null.
+ */
+IndexedSourceMapConsumer.prototype.originalPositionFor =
+  function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
+    var needle = {
+      generatedLine: util.getArg(aArgs, 'line'),
+      generatedColumn: util.getArg(aArgs, 'column')
+    };
+
+    // Find the section containing the generated position we're trying to map
+    // to an original position.
+    var sectionIndex = binarySearch.search(needle, this._sections,
+      function(needle, section) {
+        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;
+        if (cmp) {
+          return cmp;
+        }
+
+        return (needle.generatedColumn -
+                section.generatedOffset.generatedColumn);
+      });
+    var section = this._sections[sectionIndex];
+
+    if (!section) {
+      return {
+        source: null,
+        line: null,
+        column: null,
+        name: null
+      };
+    }
+
+    return section.consumer.originalPositionFor({
+      line: needle.generatedLine -
+        (section.generatedOffset.generatedLine - 1),
+      column: needle.generatedColumn -
+        (section.generatedOffset.generatedLine === needle.generatedLine
+         ? section.generatedOffset.generatedColumn - 1
+         : 0),
+      bias: aArgs.bias
+    });
+  };
+
+/**
+ * Return true if we have the source content for every source in the source
+ * map, false otherwise.
+ */
+IndexedSourceMapConsumer.prototype.hasContentsOfAllSources =
+  function IndexedSourceMapConsumer_hasContentsOfAllSources() {
+    return this._sections.every(function (s) {
+      return s.consumer.hasContentsOfAllSources();
+    });
+  };
+
+/**
+ * Returns the original source content. The only argument is the url of the
+ * original source file. Returns null if no original source content is
+ * available.
+ */
+IndexedSourceMapConsumer.prototype.sourceContentFor =
+  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
+    for (var i = 0; i < this._sections.length; i++) {
+      var section = this._sections[i];
+
+      var content = section.consumer.sourceContentFor(aSource, true);
+      if (content) {
+        return content;
+      }
+    }
+    if (nullOnMissing) {
+      return null;
+    }
+    else {
+      throw new Error('"' + aSource + '" is not in the SourceMap.');
+    }
+  };
+
+/**
+ * Returns the generated line and column information for the original source,
+ * line, and column positions provided. The only argument is an object with
+ * the following properties:
+ *
+ *   - source: The filename of the original source.
+ *   - line: The line number in the original source.  The line number
+ *     is 1-based.
+ *   - column: The column number in the original source.  The column
+ *     number is 0-based.
+ *
+ * and an object is returned with the following properties:
+ *
+ *   - line: The line number in the generated source, or null.  The
+ *     line number is 1-based. 
+ *   - column: The column number in the generated source, or null.
+ *     The column number is 0-based.
+ */
+IndexedSourceMapConsumer.prototype.generatedPositionFor =
+  function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
+    for (var i = 0; i < this._sections.length; i++) {
+      var section = this._sections[i];
+
+      // Only consider this section if the requested source is in the list of
+      // sources of the consumer.
+      if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {
+        continue;
+      }
+      var generatedPosition = section.consumer.generatedPositionFor(aArgs);
+      if (generatedPosition) {
+        var ret = {
+          line: generatedPosition.line +
+            (section.generatedOffset.generatedLine - 1),
+          column: generatedPosition.column +
+            (section.generatedOffset.generatedLine === generatedPosition.line
+             ? section.generatedOffset.generatedColumn - 1
+             : 0)
+        };
+        return ret;
+      }
+    }
+
+    return {
+      line: null,
+      column: null
+    };
+  };
+
+/**
+ * Parse the mappings in a string in to a data structure which we can easily
+ * query (the ordered arrays in the `this.__generatedMappings` and
+ * `this.__originalMappings` properties).
+ */
+IndexedSourceMapConsumer.prototype._parseMappings =
+  function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+    this.__generatedMappings = [];
+    this.__originalMappings = [];
+    for (var i = 0; i < this._sections.length; i++) {
+      var section = this._sections[i];
+      var sectionMappings = section.consumer._generatedMappings;
+      for (var j = 0; j < sectionMappings.length; j++) {
+        var mapping = sectionMappings[j];
+
+        var source = section.consumer._sources.at(mapping.source);
+        source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);
+        this._sources.add(source);
+        source = this._sources.indexOf(source);
+
+        var name = null;
+        if (mapping.name) {
+          name = section.consumer._names.at(mapping.name);
+          this._names.add(name);
+          name = this._names.indexOf(name);
+        }
+
+        // The mappings coming from the consumer for the section have
+        // generated positions relative to the start of the section, so we
+        // need to offset them to be relative to the start of the concatenated
+        // generated file.
+        var adjustedMapping = {
+          source: source,
+          generatedLine: mapping.generatedLine +
+            (section.generatedOffset.generatedLine - 1),
+          generatedColumn: mapping.generatedColumn +
+            (section.generatedOffset.generatedLine === mapping.generatedLine
+            ? section.generatedOffset.generatedColumn - 1
+            : 0),
+          originalLine: mapping.originalLine,
+          originalColumn: mapping.originalColumn,
+          name: name
+        };
+
+        this.__generatedMappings.push(adjustedMapping);
+        if (typeof adjustedMapping.originalLine === 'number') {
+          this.__originalMappings.push(adjustedMapping);
+        }
+      }
+    }
+
+    quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);
+    quickSort(this.__originalMappings, util.compareByOriginalPositions);
+  };
+
+exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
diff --git a/node_modules/terser/node_modules/source-map/lib/source-map-generator.js b/node_modules/terser/node_modules/source-map/lib/source-map-generator.js
new file mode 100644
index 0000000..508bcfb
--- /dev/null
+++ b/node_modules/terser/node_modules/source-map/lib/source-map-generator.js
@@ -0,0 +1,425 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+var base64VLQ = require('./base64-vlq');
+var util = require('./util');
+var ArraySet = require('./array-set').ArraySet;
+var MappingList = require('./mapping-list').MappingList;
+
+/**
+ * An instance of the SourceMapGenerator represents a source map which is
+ * being built incrementally. You may pass an object with the following
+ * properties:
+ *
+ *   - file: The filename of the generated source.
+ *   - sourceRoot: A root for all relative URLs in this source map.
+ */
+function SourceMapGenerator(aArgs) {
+  if (!aArgs) {
+    aArgs = {};
+  }
+  this._file = util.getArg(aArgs, 'file', null);
+  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
+  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
+  this._sources = new ArraySet();
+  this._names = new ArraySet();
+  this._mappings = new MappingList();
+  this._sourcesContents = null;
+}
+
+SourceMapGenerator.prototype._version = 3;
+
+/**
+ * Creates a new SourceMapGenerator based on a SourceMapConsumer
+ *
+ * @param aSourceMapConsumer The SourceMap.
+ */
+SourceMapGenerator.fromSourceMap =
+  function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
+    var sourceRoot = aSourceMapConsumer.sourceRoot;
+    var generator = new SourceMapGenerator({
+      file: aSourceMapConsumer.file,
+      sourceRoot: sourceRoot
+    });
+    aSourceMapConsumer.eachMapping(function (mapping) {
+      var newMapping = {
+        generated: {
+          line: mapping.generatedLine,
+          column: mapping.generatedColumn
+        }
+      };
+
+      if (mapping.source != null) {
+        newMapping.source = mapping.source;
+        if (sourceRoot != null) {
+          newMapping.source = util.relative(sourceRoot, newMapping.source);
+        }
+
+        newMapping.original = {
+          line: mapping.originalLine,
+          column: mapping.originalColumn
+        };
+
+        if (mapping.name != null) {
+          newMapping.name = mapping.name;
+        }
+      }
+
+      generator.addMapping(newMapping);
+    });
+    aSourceMapConsumer.sources.forEach(function (sourceFile) {
+      var sourceRelative = sourceFile;
+      if (sourceRoot !== null) {
+        sourceRelative = util.relative(sourceRoot, sourceFile);
+      }
+
+      if (!generator._sources.has(sourceRelative)) {
+        generator._sources.add(sourceRelative);
+      }
+
+      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+      if (content != null) {
+        generator.setSourceContent(sourceFile, content);
+      }
+    });
+    return generator;
+  };
+
+/**
+ * Add a single mapping from original source line and column to the generated
+ * source's line and column for this source map being created. The mapping
+ * object should have the following properties:
+ *
+ *   - generated: An object with the generated line and column positions.
+ *   - original: An object with the original line and column positions.
+ *   - source: The original source file (relative to the sourceRoot).
+ *   - name: An optional original token name for this mapping.
+ */
+SourceMapGenerator.prototype.addMapping =
+  function SourceMapGenerator_addMapping(aArgs) {
+    var generated = util.getArg(aArgs, 'generated');
+    var original = util.getArg(aArgs, 'original', null);
+    var source = util.getArg(aArgs, 'source', null);
+    var name = util.getArg(aArgs, 'name', null);
+
+    if (!this._skipValidation) {
+      this._validateMapping(generated, original, source, name);
+    }
+
+    if (source != null) {
+      source = String(source);
+      if (!this._sources.has(source)) {
+        this._sources.add(source);
+      }
+    }
+
+    if (name != null) {
+      name = String(name);
+      if (!this._names.has(name)) {
+        this._names.add(name);
+      }
+    }
+
+    this._mappings.add({
+      generatedLine: generated.line,
+      generatedColumn: generated.column,
+      originalLine: original != null && original.line,
+      originalColumn: original != null && original.column,
+      source: source,
+      name: name
+    });
+  };
+
+/**
+ * Set the source content for a source file.
+ */
+SourceMapGenerator.prototype.setSourceContent =
+  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
+    var source = aSourceFile;
+    if (this._sourceRoot != null) {
+      source = util.relative(this._sourceRoot, source);
+    }
+
+    if (aSourceContent != null) {
+      // Add the source content to the _sourcesContents map.
+      // Create a new _sourcesContents map if the property is null.
+      if (!this._sourcesContents) {
+        this._sourcesContents = Object.create(null);
+      }
+      this._sourcesContents[util.toSetString(source)] = aSourceContent;
+    } else if (this._sourcesContents) {
+      // Remove the source file from the _sourcesContents map.
+      // If the _sourcesContents map is empty, set the property to null.
+      delete this._sourcesContents[util.toSetString(source)];
+      if (Object.keys(this._sourcesContents).length === 0) {
+        this._sourcesContents = null;
+      }
+    }
+  };
+
+/**
+ * Applies the mappings of a sub-source-map for a specific source file to the
+ * source map being generated. Each mapping to the supplied source file is
+ * rewritten using the supplied source map. Note: The resolution for the
+ * resulting mappings is the minimium of this map and the supplied map.
+ *
+ * @param aSourceMapConsumer The source map to be applied.
+ * @param aSourceFile Optional. The filename of the source file.
+ *        If omitted, SourceMapConsumer's file property will be used.
+ * @param aSourceMapPath Optional. The dirname of the path to the source map
+ *        to be applied. If relative, it is relative to the SourceMapConsumer.
+ *        This parameter is needed when the two source maps aren't in the same
+ *        directory, and the source map to be applied contains relative source
+ *        paths. If so, those relative source paths need to be rewritten
+ *        relative to the SourceMapGenerator.
+ */
+SourceMapGenerator.prototype.applySourceMap =
+  function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
+    var sourceFile = aSourceFile;
+    // If aSourceFile is omitted, we will use the file property of the SourceMap
+    if (aSourceFile == null) {
+      if (aSourceMapConsumer.file == null) {
+        throw new Error(
+          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
+          'or the source map\'s "file" property. Both were omitted.'
+        );
+      }
+      sourceFile = aSourceMapConsumer.file;
+    }
+    var sourceRoot = this._sourceRoot;
+    // Make "sourceFile" relative if an absolute Url is passed.
+    if (sourceRoot != null) {
+      sourceFile = util.relative(sourceRoot, sourceFile);
+    }
+    // Applying the SourceMap can add and remove items from the sources and
+    // the names array.
+    var newSources = new ArraySet();
+    var newNames = new ArraySet();
+
+    // Find mappings for the "sourceFile"
+    this._mappings.unsortedForEach(function (mapping) {
+      if (mapping.source === sourceFile && mapping.originalLine != null) {
+        // Check if it can be mapped by the source map, then update the mapping.
+        var original = aSourceMapConsumer.originalPositionFor({
+          line: mapping.originalLine,
+          column: mapping.originalColumn
+        });
+        if (original.source != null) {
+          // Copy mapping
+          mapping.source = original.source;
+          if (aSourceMapPath != null) {
+            mapping.source = util.join(aSourceMapPath, mapping.source)
+          }
+          if (sourceRoot != null) {
+            mapping.source = util.relative(sourceRoot, mapping.source);
+          }
+          mapping.originalLine = original.line;
+          mapping.originalColumn = original.column;
+          if (original.name != null) {
+            mapping.name = original.name;
+          }
+        }
+      }
+
+      var source = mapping.source;
+      if (source != null && !newSources.has(source)) {
+        newSources.add(source);
+      }
+
+      var name = mapping.name;
+      if (name != null && !newNames.has(name)) {
+        newNames.add(name);
+      }
+
+    }, this);
+    this._sources = newSources;
+    this._names = newNames;
+
+    // Copy sourcesContents of applied map.
+    aSourceMapConsumer.sources.forEach(function (sourceFile) {
+      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+      if (content != null) {
+        if (aSourceMapPath != null) {
+          sourceFile = util.join(aSourceMapPath, sourceFile);
+        }
+        if (sourceRoot != null) {
+          sourceFile = util.relative(sourceRoot, sourceFile);
+        }
+        this.setSourceContent(sourceFile, content);
+      }
+    }, this);
+  };
+
+/**
+ * A mapping can have one of the three levels of data:
+ *
+ *   1. Just the generated position.
+ *   2. The Generated position, original position, and original source.
+ *   3. Generated and original position, original source, as well as a name
+ *      token.
+ *
+ * To maintain consistency, we validate that any new mapping being added falls
+ * in to one of these categories.
+ */
+SourceMapGenerator.prototype._validateMapping =
+  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
+                                              aName) {
+    // When aOriginal is truthy but has empty values for .line and .column,
+    // it is most likely a programmer error. In this case we throw a very
+    // specific error message to try to guide them the right way.
+    // For example: https://github.com/Polymer/polymer-bundler/pull/519
+    if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {
+        throw new Error(
+            'original.line and original.column are not numbers -- you probably meant to omit ' +
+            'the original mapping entirely and only map the generated position. If so, pass ' +
+            'null for the original mapping instead of an object with empty or null values.'
+        );
+    }
+
+    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
+        && aGenerated.line > 0 && aGenerated.column >= 0
+        && !aOriginal && !aSource && !aName) {
+      // Case 1.
+      return;
+    }
+    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
+             && aOriginal && 'line' in aOriginal && 'column' in aOriginal
+             && aGenerated.line > 0 && aGenerated.column >= 0
+             && aOriginal.line > 0 && aOriginal.column >= 0
+             && aSource) {
+      // Cases 2 and 3.
+      return;
+    }
+    else {
+      throw new Error('Invalid mapping: ' + JSON.stringify({
+        generated: aGenerated,
+        source: aSource,
+        original: aOriginal,
+        name: aName
+      }));
+    }
+  };
+
+/**
+ * Serialize the accumulated mappings in to the stream of base 64 VLQs
+ * specified by the source map format.
+ */
+SourceMapGenerator.prototype._serializeMappings =
+  function SourceMapGenerator_serializeMappings() {
+    var previousGeneratedColumn = 0;
+    var previousGeneratedLine = 1;
+    var previousOriginalColumn = 0;
+    var previousOriginalLine = 0;
+    var previousName = 0;
+    var previousSource = 0;
+    var result = '';
+    var next;
+    var mapping;
+    var nameIdx;
+    var sourceIdx;
+
+    var mappings = this._mappings.toArray();
+    for (var i = 0, len = mappings.length; i < len; i++) {
+      mapping = mappings[i];
+      next = ''
+
+      if (mapping.generatedLine !== previousGeneratedLine) {
+        previousGeneratedColumn = 0;
+        while (mapping.generatedLine !== previousGeneratedLine) {
+          next += ';';
+          previousGeneratedLine++;
+        }
+      }
+      else {
+        if (i > 0) {
+          if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
+            continue;
+          }
+          next += ',';
+        }
+      }
+
+      next += base64VLQ.encode(mapping.generatedColumn
+                                 - previousGeneratedColumn);
+      previousGeneratedColumn = mapping.generatedColumn;
+
+      if (mapping.source != null) {
+        sourceIdx = this._sources.indexOf(mapping.source);
+        next += base64VLQ.encode(sourceIdx - previousSource);
+        previousSource = sourceIdx;
+
+        // lines are stored 0-based in SourceMap spec version 3
+        next += base64VLQ.encode(mapping.originalLine - 1
+                                   - previousOriginalLine);
+        previousOriginalLine = mapping.originalLine - 1;
+
+        next += base64VLQ.encode(mapping.originalColumn
+                                   - previousOriginalColumn);
+        previousOriginalColumn = mapping.originalColumn;
+
+        if (mapping.name != null) {
+          nameIdx = this._names.indexOf(mapping.name);
+          next += base64VLQ.encode(nameIdx - previousName);
+          previousName = nameIdx;
+        }
+      }
+
+      result += next;
+    }
+
+    return result;
+  };
+
+SourceMapGenerator.prototype._generateSourcesContent =
+  function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
+    return aSources.map(function (source) {
+      if (!this._sourcesContents) {
+        return null;
+      }
+      if (aSourceRoot != null) {
+        source = util.relative(aSourceRoot, source);
+      }
+      var key = util.toSetString(source);
+      return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)
+        ? this._sourcesContents[key]
+        : null;
+    }, this);
+  };
+
+/**
+ * Externalize the source map.
+ */
+SourceMapGenerator.prototype.toJSON =
+  function SourceMapGenerator_toJSON() {
+    var map = {
+      version: this._version,
+      sources: this._sources.toArray(),
+      names: this._names.toArray(),
+      mappings: this._serializeMappings()
+    };
+    if (this._file != null) {
+      map.file = this._file;
+    }
+    if (this._sourceRoot != null) {
+      map.sourceRoot = this._sourceRoot;
+    }
+    if (this._sourcesContents) {
+      map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
+    }
+
+    return map;
+  };
+
+/**
+ * Render the source map being generated to a string.
+ */
+SourceMapGenerator.prototype.toString =
+  function SourceMapGenerator_toString() {
+    return JSON.stringify(this.toJSON());
+  };
+
+exports.SourceMapGenerator = SourceMapGenerator;
diff --git a/node_modules/terser/node_modules/source-map/lib/source-node.js b/node_modules/terser/node_modules/source-map/lib/source-node.js
new file mode 100644
index 0000000..8bcdbe3
--- /dev/null
+++ b/node_modules/terser/node_modules/source-map/lib/source-node.js
@@ -0,0 +1,413 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+var SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;
+var util = require('./util');
+
+// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
+// operating systems these days (capturing the result).
+var REGEX_NEWLINE = /(\r?\n)/;
+
+// Newline character code for charCodeAt() comparisons
+var NEWLINE_CODE = 10;
+
+// Private symbol for identifying `SourceNode`s when multiple versions of
+// the source-map library are loaded. This MUST NOT CHANGE across
+// versions!
+var isSourceNode = "$$$isSourceNode$$$";
+
+/**
+ * SourceNodes provide a way to abstract over interpolating/concatenating
+ * snippets of generated JavaScript source code while maintaining the line and
+ * column information associated with the original source code.
+ *
+ * @param aLine The original line number.
+ * @param aColumn The original column number.
+ * @param aSource The original source's filename.
+ * @param aChunks Optional. An array of strings which are snippets of
+ *        generated JS, or other SourceNodes.
+ * @param aName The original identifier.
+ */
+function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
+  this.children = [];
+  this.sourceContents = {};
+  this.line = aLine == null ? null : aLine;
+  this.column = aColumn == null ? null : aColumn;
+  this.source = aSource == null ? null : aSource;
+  this.name = aName == null ? null : aName;
+  this[isSourceNode] = true;
+  if (aChunks != null) this.add(aChunks);
+}
+
+/**
+ * Creates a SourceNode from generated code and a SourceMapConsumer.
+ *
+ * @param aGeneratedCode The generated code
+ * @param aSourceMapConsumer The SourceMap for the generated code
+ * @param aRelativePath Optional. The path that relative sources in the
+ *        SourceMapConsumer should be relative to.
+ */
+SourceNode.fromStringWithSourceMap =
+  function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
+    // The SourceNode we want to fill with the generated code
+    // and the SourceMap
+    var node = new SourceNode();
+
+    // All even indices of this array are one line of the generated code,
+    // while all odd indices are the newlines between two adjacent lines
+    // (since `REGEX_NEWLINE` captures its match).
+    // Processed fragments are accessed by calling `shiftNextLine`.
+    var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
+    var remainingLinesIndex = 0;
+    var shiftNextLine = function() {
+      var lineContents = getNextLine();
+      // The last line of a file might not have a newline.
+      var newLine = getNextLine() || "";
+      return lineContents + newLine;
+
+      function getNextLine() {
+        return remainingLinesIndex < remainingLines.length ?
+            remainingLines[remainingLinesIndex++] : undefined;
+      }
+    };
+
+    // We need to remember the position of "remainingLines"
+    var lastGeneratedLine = 1, lastGeneratedColumn = 0;
+
+    // The generate SourceNodes we need a code range.
+    // To extract it current and last mapping is used.
+    // Here we store the last mapping.
+    var lastMapping = null;
+
+    aSourceMapConsumer.eachMapping(function (mapping) {
+      if (lastMapping !== null) {
+        // We add the code from "lastMapping" to "mapping":
+        // First check if there is a new line in between.
+        if (lastGeneratedLine < mapping.generatedLine) {
+          // Associate first line with "lastMapping"
+          addMappingWithCode(lastMapping, shiftNextLine());
+          lastGeneratedLine++;
+          lastGeneratedColumn = 0;
+          // The remaining code is added without mapping
+        } else {
+          // There is no new line in between.
+          // Associate the code between "lastGeneratedColumn" and
+          // "mapping.generatedColumn" with "lastMapping"
+          var nextLine = remainingLines[remainingLinesIndex] || '';
+          var code = nextLine.substr(0, mapping.generatedColumn -
+                                        lastGeneratedColumn);
+          remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -
+                                              lastGeneratedColumn);
+          lastGeneratedColumn = mapping.generatedColumn;
+          addMappingWithCode(lastMapping, code);
+          // No more remaining code, continue
+          lastMapping = mapping;
+          return;
+        }
+      }
+      // We add the generated code until the first mapping
+      // to the SourceNode without any mapping.
+      // Each line is added as separate string.
+      while (lastGeneratedLine < mapping.generatedLine) {
+        node.add(shiftNextLine());
+        lastGeneratedLine++;
+      }
+      if (lastGeneratedColumn < mapping.generatedColumn) {
+        var nextLine = remainingLines[remainingLinesIndex] || '';
+        node.add(nextLine.substr(0, mapping.generatedColumn));
+        remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);
+        lastGeneratedColumn = mapping.generatedColumn;
+      }
+      lastMapping = mapping;
+    }, this);
+    // We have processed all mappings.
+    if (remainingLinesIndex < remainingLines.length) {
+      if (lastMapping) {
+        // Associate the remaining code in the current line with "lastMapping"
+        addMappingWithCode(lastMapping, shiftNextLine());
+      }
+      // and add the remaining lines without any mapping
+      node.add(remainingLines.splice(remainingLinesIndex).join(""));
+    }
+
+    // Copy sourcesContent into SourceNode
+    aSourceMapConsumer.sources.forEach(function (sourceFile) {
+      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+      if (content != null) {
+        if (aRelativePath != null) {
+          sourceFile = util.join(aRelativePath, sourceFile);
+        }
+        node.setSourceContent(sourceFile, content);
+      }
+    });
+
+    return node;
+
+    function addMappingWithCode(mapping, code) {
+      if (mapping === null || mapping.source === undefined) {
+        node.add(code);
+      } else {
+        var source = aRelativePath
+          ? util.join(aRelativePath, mapping.source)
+          : mapping.source;
+        node.add(new SourceNode(mapping.originalLine,
+                                mapping.originalColumn,
+                                source,
+                                code,
+                                mapping.name));
+      }
+    }
+  };
+
+/**
+ * Add a chunk of generated JS to this source node.
+ *
+ * @param aChunk A string snippet of generated JS code, another instance of
+ *        SourceNode, or an array where each member is one of those things.
+ */
+SourceNode.prototype.add = function SourceNode_add(aChunk) {
+  if (Array.isArray(aChunk)) {
+    aChunk.forEach(function (chunk) {
+      this.add(chunk);
+    }, this);
+  }
+  else if (aChunk[isSourceNode] || typeof aChunk === "string") {
+    if (aChunk) {
+      this.children.push(aChunk);
+    }
+  }
+  else {
+    throw new TypeError(
+      "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
+    );
+  }
+  return this;
+};
+
+/**
+ * Add a chunk of generated JS to the beginning of this source node.
+ *
+ * @param aChunk A string snippet of generated JS code, another instance of
+ *        SourceNode, or an array where each member is one of those things.
+ */
+SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
+  if (Array.isArray(aChunk)) {
+    for (var i = aChunk.length-1; i >= 0; i--) {
+      this.prepend(aChunk[i]);
+    }
+  }
+  else if (aChunk[isSourceNode] || typeof aChunk === "string") {
+    this.children.unshift(aChunk);
+  }
+  else {
+    throw new TypeError(
+      "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
+    );
+  }
+  return this;
+};
+
+/**
+ * Walk over the tree of JS snippets in this node and its children. The
+ * walking function is called once for each snippet of JS and is passed that
+ * snippet and the its original associated source's line/column location.
+ *
+ * @param aFn The traversal function.
+ */
+SourceNode.prototype.walk = function SourceNode_walk(aFn) {
+  var chunk;
+  for (var i = 0, len = this.children.length; i < len; i++) {
+    chunk = this.children[i];
+    if (chunk[isSourceNode]) {
+      chunk.walk(aFn);
+    }
+    else {
+      if (chunk !== '') {
+        aFn(chunk, { source: this.source,
+                     line: this.line,
+                     column: this.column,
+                     name: this.name });
+      }
+    }
+  }
+};
+
+/**
+ * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
+ * each of `this.children`.
+ *
+ * @param aSep The separator.
+ */
+SourceNode.prototype.join = function SourceNode_join(aSep) {
+  var newChildren;
+  var i;
+  var len = this.children.length;
+  if (len > 0) {
+    newChildren = [];
+    for (i = 0; i < len-1; i++) {
+      newChildren.push(this.children[i]);
+      newChildren.push(aSep);
+    }
+    newChildren.push(this.children[i]);
+    this.children = newChildren;
+  }
+  return this;
+};
+
+/**
+ * Call String.prototype.replace on the very right-most source snippet. Useful
+ * for trimming whitespace from the end of a source node, etc.
+ *
+ * @param aPattern The pattern to replace.
+ * @param aReplacement The thing to replace the pattern with.
+ */
+SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
+  var lastChild = this.children[this.children.length - 1];
+  if (lastChild[isSourceNode]) {
+    lastChild.replaceRight(aPattern, aReplacement);
+  }
+  else if (typeof lastChild === 'string') {
+    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
+  }
+  else {
+    this.children.push(''.replace(aPattern, aReplacement));
+  }
+  return this;
+};
+
+/**
+ * Set the source content for a source file. This will be added to the SourceMapGenerator
+ * in the sourcesContent field.
+ *
+ * @param aSourceFile The filename of the source file
+ * @param aSourceContent The content of the source file
+ */
+SourceNode.prototype.setSourceContent =
+  function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
+    this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
+  };
+
+/**
+ * Walk over the tree of SourceNodes. The walking function is called for each
+ * source file content and is passed the filename and source content.
+ *
+ * @param aFn The traversal function.
+ */
+SourceNode.prototype.walkSourceContents =
+  function SourceNode_walkSourceContents(aFn) {
+    for (var i = 0, len = this.children.length; i < len; i++) {
+      if (this.children[i][isSourceNode]) {
+        this.children[i].walkSourceContents(aFn);
+      }
+    }
+
+    var sources = Object.keys(this.sourceContents);
+    for (var i = 0, len = sources.length; i < len; i++) {
+      aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
+    }
+  };
+
+/**
+ * Return the string representation of this source node. Walks over the tree
+ * and concatenates all the various snippets together to one string.
+ */
+SourceNode.prototype.toString = function SourceNode_toString() {
+  var str = "";
+  this.walk(function (chunk) {
+    str += chunk;
+  });
+  return str;
+};
+
+/**
+ * Returns the string representation of this source node along with a source
+ * map.
+ */
+SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
+  var generated = {
+    code: "",
+    line: 1,
+    column: 0
+  };
+  var map = new SourceMapGenerator(aArgs);
+  var sourceMappingActive = false;
+  var lastOriginalSource = null;
+  var lastOriginalLine = null;
+  var lastOriginalColumn = null;
+  var lastOriginalName = null;
+  this.walk(function (chunk, original) {
+    generated.code += chunk;
+    if (original.source !== null
+        && original.line !== null
+        && original.column !== null) {
+      if(lastOriginalSource !== original.source
+         || lastOriginalLine !== original.line
+         || lastOriginalColumn !== original.column
+         || lastOriginalName !== original.name) {
+        map.addMapping({
+          source: original.source,
+          original: {
+            line: original.line,
+            column: original.column
+          },
+          generated: {
+            line: generated.line,
+            column: generated.column
+          },
+          name: original.name
+        });
+      }
+      lastOriginalSource = original.source;
+      lastOriginalLine = original.line;
+      lastOriginalColumn = original.column;
+      lastOriginalName = original.name;
+      sourceMappingActive = true;
+    } else if (sourceMappingActive) {
+      map.addMapping({
+        generated: {
+          line: generated.line,
+          column: generated.column
+        }
+      });
+      lastOriginalSource = null;
+      sourceMappingActive = false;
+    }
+    for (var idx = 0, length = chunk.length; idx < length; idx++) {
+      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
+        generated.line++;
+        generated.column = 0;
+        // Mappings end at eol
+        if (idx + 1 === length) {
+          lastOriginalSource = null;
+          sourceMappingActive = false;
+        } else if (sourceMappingActive) {
+          map.addMapping({
+            source: original.source,
+            original: {
+              line: original.line,
+              column: original.column
+            },
+            generated: {
+              line: generated.line,
+              column: generated.column
+            },
+            name: original.name
+          });
+        }
+      } else {
+        generated.column++;
+      }
+    }
+  });
+  this.walkSourceContents(function (sourceFile, sourceContent) {
+    map.setSourceContent(sourceFile, sourceContent);
+  });
+
+  return { code: generated.code, map: map };
+};
+
+exports.SourceNode = SourceNode;
diff --git a/node_modules/terser/node_modules/source-map/lib/util.js b/node_modules/terser/node_modules/source-map/lib/util.js
new file mode 100644
index 0000000..3ca92e5
--- /dev/null
+++ b/node_modules/terser/node_modules/source-map/lib/util.js
@@ -0,0 +1,488 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+/**
+ * This is a helper function for getting values from parameter/options
+ * objects.
+ *
+ * @param args The object we are extracting values from
+ * @param name The name of the property we are getting.
+ * @param defaultValue An optional value to return if the property is missing
+ * from the object. If this is not specified and the property is missing, an
+ * error will be thrown.
+ */
+function getArg(aArgs, aName, aDefaultValue) {
+  if (aName in aArgs) {
+    return aArgs[aName];
+  } else if (arguments.length === 3) {
+    return aDefaultValue;
+  } else {
+    throw new Error('"' + aName + '" is a required argument.');
+  }
+}
+exports.getArg = getArg;
+
+var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/;
+var dataUrlRegexp = /^data:.+\,.+$/;
+
+function urlParse(aUrl) {
+  var match = aUrl.match(urlRegexp);
+  if (!match) {
+    return null;
+  }
+  return {
+    scheme: match[1],
+    auth: match[2],
+    host: match[3],
+    port: match[4],
+    path: match[5]
+  };
+}
+exports.urlParse = urlParse;
+
+function urlGenerate(aParsedUrl) {
+  var url = '';
+  if (aParsedUrl.scheme) {
+    url += aParsedUrl.scheme + ':';
+  }
+  url += '//';
+  if (aParsedUrl.auth) {
+    url += aParsedUrl.auth + '@';
+  }
+  if (aParsedUrl.host) {
+    url += aParsedUrl.host;
+  }
+  if (aParsedUrl.port) {
+    url += ":" + aParsedUrl.port
+  }
+  if (aParsedUrl.path) {
+    url += aParsedUrl.path;
+  }
+  return url;
+}
+exports.urlGenerate = urlGenerate;
+
+/**
+ * Normalizes a path, or the path portion of a URL:
+ *
+ * - Replaces consecutive slashes with one slash.
+ * - Removes unnecessary '.' parts.
+ * - Removes unnecessary '<dir>/..' parts.
+ *
+ * Based on code in the Node.js 'path' core module.
+ *
+ * @param aPath The path or url to normalize.
+ */
+function normalize(aPath) {
+  var path = aPath;
+  var url = urlParse(aPath);
+  if (url) {
+    if (!url.path) {
+      return aPath;
+    }
+    path = url.path;
+  }
+  var isAbsolute = exports.isAbsolute(path);
+
+  var parts = path.split(/\/+/);
+  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
+    part = parts[i];
+    if (part === '.') {
+      parts.splice(i, 1);
+    } else if (part === '..') {
+      up++;
+    } else if (up > 0) {
+      if (part === '') {
+        // The first part is blank if the path is absolute. Trying to go
+        // above the root is a no-op. Therefore we can remove all '..' parts
+        // directly after the root.
+        parts.splice(i + 1, up);
+        up = 0;
+      } else {
+        parts.splice(i, 2);
+        up--;
+      }
+    }
+  }
+  path = parts.join('/');
+
+  if (path === '') {
+    path = isAbsolute ? '/' : '.';
+  }
+
+  if (url) {
+    url.path = path;
+    return urlGenerate(url);
+  }
+  return path;
+}
+exports.normalize = normalize;
+
+/**
+ * Joins two paths/URLs.
+ *
+ * @param aRoot The root path or URL.
+ * @param aPath The path or URL to be joined with the root.
+ *
+ * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
+ *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended
+ *   first.
+ * - Otherwise aPath is a path. If aRoot is a URL, then its path portion
+ *   is updated with the result and aRoot is returned. Otherwise the result
+ *   is returned.
+ *   - If aPath is absolute, the result is aPath.
+ *   - Otherwise the two paths are joined with a slash.
+ * - Joining for example 'http://' and 'www.example.com' is also supported.
+ */
+function join(aRoot, aPath) {
+  if (aRoot === "") {
+    aRoot = ".";
+  }
+  if (aPath === "") {
+    aPath = ".";
+  }
+  var aPathUrl = urlParse(aPath);
+  var aRootUrl = urlParse(aRoot);
+  if (aRootUrl) {
+    aRoot = aRootUrl.path || '/';
+  }
+
+  // `join(foo, '//www.example.org')`
+  if (aPathUrl && !aPathUrl.scheme) {
+    if (aRootUrl) {
+      aPathUrl.scheme = aRootUrl.scheme;
+    }
+    return urlGenerate(aPathUrl);
+  }
+
+  if (aPathUrl || aPath.match(dataUrlRegexp)) {
+    return aPath;
+  }
+
+  // `join('http://', 'www.example.com')`
+  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
+    aRootUrl.host = aPath;
+    return urlGenerate(aRootUrl);
+  }
+
+  var joined = aPath.charAt(0) === '/'
+    ? aPath
+    : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);
+
+  if (aRootUrl) {
+    aRootUrl.path = joined;
+    return urlGenerate(aRootUrl);
+  }
+  return joined;
+}
+exports.join = join;
+
+exports.isAbsolute = function (aPath) {
+  return aPath.charAt(0) === '/' || urlRegexp.test(aPath);
+};
+
+/**
+ * Make a path relative to a URL or another path.
+ *
+ * @param aRoot The root path or URL.
+ * @param aPath The path or URL to be made relative to aRoot.
+ */
+function relative(aRoot, aPath) {
+  if (aRoot === "") {
+    aRoot = ".";
+  }
+
+  aRoot = aRoot.replace(/\/$/, '');
+
+  // It is possible for the path to be above the root. In this case, simply
+  // checking whether the root is a prefix of the path won't work. Instead, we
+  // need to remove components from the root one by one, until either we find
+  // a prefix that fits, or we run out of components to remove.
+  var level = 0;
+  while (aPath.indexOf(aRoot + '/') !== 0) {
+    var index = aRoot.lastIndexOf("/");
+    if (index < 0) {
+      return aPath;
+    }
+
+    // If the only part of the root that is left is the scheme (i.e. http://,
+    // file:///, etc.), one or more slashes (/), or simply nothing at all, we
+    // have exhausted all components, so the path is not relative to the root.
+    aRoot = aRoot.slice(0, index);
+    if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
+      return aPath;
+    }
+
+    ++level;
+  }
+
+  // Make sure we add a "../" for each component we removed from the root.
+  return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
+}
+exports.relative = relative;
+
+var supportsNullProto = (function () {
+  var obj = Object.create(null);
+  return !('__proto__' in obj);
+}());
+
+function identity (s) {
+  return s;
+}
+
+/**
+ * Because behavior goes wacky when you set `__proto__` on objects, we
+ * have to prefix all the strings in our set with an arbitrary character.
+ *
+ * See https://github.com/mozilla/source-map/pull/31 and
+ * https://github.com/mozilla/source-map/issues/30
+ *
+ * @param String aStr
+ */
+function toSetString(aStr) {
+  if (isProtoString(aStr)) {
+    return '$' + aStr;
+  }
+
+  return aStr;
+}
+exports.toSetString = supportsNullProto ? identity : toSetString;
+
+function fromSetString(aStr) {
+  if (isProtoString(aStr)) {
+    return aStr.slice(1);
+  }
+
+  return aStr;
+}
+exports.fromSetString = supportsNullProto ? identity : fromSetString;
+
+function isProtoString(s) {
+  if (!s) {
+    return false;
+  }
+
+  var length = s.length;
+
+  if (length < 9 /* "__proto__".length */) {
+    return false;
+  }
+
+  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||
+      s.charCodeAt(length - 2) !== 95  /* '_' */ ||
+      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||
+      s.charCodeAt(length - 4) !== 116 /* 't' */ ||
+      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||
+      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||
+      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||
+      s.charCodeAt(length - 8) !== 95  /* '_' */ ||
+      s.charCodeAt(length - 9) !== 95  /* '_' */) {
+    return false;
+  }
+
+  for (var i = length - 10; i >= 0; i--) {
+    if (s.charCodeAt(i) !== 36 /* '$' */) {
+      return false;
+    }
+  }
+
+  return true;
+}
+
+/**
+ * Comparator between two mappings where the original positions are compared.
+ *
+ * Optionally pass in `true` as `onlyCompareGenerated` to consider two
+ * mappings with the same original source/line/column, but different generated
+ * line and column the same. Useful when searching for a mapping with a
+ * stubbed out mapping.
+ */
+function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
+  var cmp = strcmp(mappingA.source, mappingB.source);
+  if (cmp !== 0) {
+    return cmp;
+  }
+
+  cmp = mappingA.originalLine - mappingB.originalLine;
+  if (cmp !== 0) {
+    return cmp;
+  }
+
+  cmp = mappingA.originalColumn - mappingB.originalColumn;
+  if (cmp !== 0 || onlyCompareOriginal) {
+    return cmp;
+  }
+
+  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
+  if (cmp !== 0) {
+    return cmp;
+  }
+
+  cmp = mappingA.generatedLine - mappingB.generatedLine;
+  if (cmp !== 0) {
+    return cmp;
+  }
+
+  return strcmp(mappingA.name, mappingB.name);
+}
+exports.compareByOriginalPositions = compareByOriginalPositions;
+
+/**
+ * Comparator between two mappings with deflated source and name indices where
+ * the generated positions are compared.
+ *
+ * Optionally pass in `true` as `onlyCompareGenerated` to consider two
+ * mappings with the same generated line and column, but different
+ * source/name/original line and column the same. Useful when searching for a
+ * mapping with a stubbed out mapping.
+ */
+function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
+  var cmp = mappingA.generatedLine - mappingB.generatedLine;
+  if (cmp !== 0) {
+    return cmp;
+  }
+
+  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
+  if (cmp !== 0 || onlyCompareGenerated) {
+    return cmp;
+  }
+
+  cmp = strcmp(mappingA.source, mappingB.source);
+  if (cmp !== 0) {
+    return cmp;
+  }
+
+  cmp = mappingA.originalLine - mappingB.originalLine;
+  if (cmp !== 0) {
+    return cmp;
+  }
+
+  cmp = mappingA.originalColumn - mappingB.originalColumn;
+  if (cmp !== 0) {
+    return cmp;
+  }
+
+  return strcmp(mappingA.name, mappingB.name);
+}
+exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;
+
+function strcmp(aStr1, aStr2) {
+  if (aStr1 === aStr2) {
+    return 0;
+  }
+
+  if (aStr1 === null) {
+    return 1; // aStr2 !== null
+  }
+
+  if (aStr2 === null) {
+    return -1; // aStr1 !== null
+  }
+
+  if (aStr1 > aStr2) {
+    return 1;
+  }
+
+  return -1;
+}
+
+/**
+ * Comparator between two mappings with inflated source and name strings where
+ * the generated positions are compared.
+ */
+function compareByGeneratedPositionsInflated(mappingA, mappingB) {
+  var cmp = mappingA.generatedLine - mappingB.generatedLine;
+  if (cmp !== 0) {
+    return cmp;
+  }
+
+  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
+  if (cmp !== 0) {
+    return cmp;
+  }
+
+  cmp = strcmp(mappingA.source, mappingB.source);
+  if (cmp !== 0) {
+    return cmp;
+  }
+
+  cmp = mappingA.originalLine - mappingB.originalLine;
+  if (cmp !== 0) {
+    return cmp;
+  }
+
+  cmp = mappingA.originalColumn - mappingB.originalColumn;
+  if (cmp !== 0) {
+    return cmp;
+  }
+
+  return strcmp(mappingA.name, mappingB.name);
+}
+exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
+
+/**
+ * Strip any JSON XSSI avoidance prefix from the string (as documented
+ * in the source maps specification), and then parse the string as
+ * JSON.
+ */
+function parseSourceMapInput(str) {
+  return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, ''));
+}
+exports.parseSourceMapInput = parseSourceMapInput;
+
+/**
+ * Compute the URL of a source given the the source root, the source's
+ * URL, and the source map's URL.
+ */
+function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {
+  sourceURL = sourceURL || '';
+
+  if (sourceRoot) {
+    // This follows what Chrome does.
+    if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {
+      sourceRoot += '/';
+    }
+    // The spec says:
+    //   Line 4: An optional source root, useful for relocating source
+    //   files on a server or removing repeated values in the
+    //   “sources” entry.  This value is prepended to the individual
+    //   entries in the “source” field.
+    sourceURL = sourceRoot + sourceURL;
+  }
+
+  // Historically, SourceMapConsumer did not take the sourceMapURL as
+  // a parameter.  This mode is still somewhat supported, which is why
+  // this code block is conditional.  However, it's preferable to pass
+  // the source map URL to SourceMapConsumer, so that this function
+  // can implement the source URL resolution algorithm as outlined in
+  // the spec.  This block is basically the equivalent of:
+  //    new URL(sourceURL, sourceMapURL).toString()
+  // ... except it avoids using URL, which wasn't available in the
+  // older releases of node still supported by this library.
+  //
+  // The spec says:
+  //   If the sources are not absolute URLs after prepending of the
+  //   “sourceRoot”, the sources are resolved relative to the
+  //   SourceMap (like resolving script src in a html document).
+  if (sourceMapURL) {
+    var parsed = urlParse(sourceMapURL);
+    if (!parsed) {
+      throw new Error("sourceMapURL could not be parsed");
+    }
+    if (parsed.path) {
+      // Strip the last path component, but keep the "/".
+      var index = parsed.path.lastIndexOf('/');
+      if (index >= 0) {
+        parsed.path = parsed.path.substring(0, index + 1);
+      }
+    }
+    sourceURL = join(urlGenerate(parsed), sourceURL);
+  }
+
+  return normalize(sourceURL);
+}
+exports.computeSourceURL = computeSourceURL;
diff --git a/node_modules/terser/node_modules/source-map/package.json b/node_modules/terser/node_modules/source-map/package.json
new file mode 100644
index 0000000..06a93fd
--- /dev/null
+++ b/node_modules/terser/node_modules/source-map/package.json
@@ -0,0 +1,212 @@
+{
+  "_from": "source-map@~0.6.1",
+  "_id": "source-map@0.6.1",
+  "_inBundle": false,
+  "_integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+  "_location": "/terser/source-map",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "source-map@~0.6.1",
+    "name": "source-map",
+    "escapedName": "source-map",
+    "rawSpec": "~0.6.1",
+    "saveSpec": null,
+    "fetchSpec": "~0.6.1"
+  },
+  "_requiredBy": [
+    "/terser"
+  ],
+  "_resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+  "_shasum": "74722af32e9614e9c287a8d0bbde48b5e2f1a263",
+  "_spec": "source-map@~0.6.1",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar\\node_modules\\terser",
+  "author": {
+    "name": "Nick Fitzgerald",
+    "email": "nfitzgerald@mozilla.com"
+  },
+  "bugs": {
+    "url": "https://github.com/mozilla/source-map/issues"
+  },
+  "bundleDependencies": false,
+  "contributors": [
+    {
+      "name": "Tobias Koppers",
+      "email": "tobias.koppers@googlemail.com"
+    },
+    {
+      "name": "Duncan Beevers",
+      "email": "duncan@dweebd.com"
+    },
+    {
+      "name": "Stephen Crane",
+      "email": "scrane@mozilla.com"
+    },
+    {
+      "name": "Ryan Seddon",
+      "email": "seddon.ryan@gmail.com"
+    },
+    {
+      "name": "Miles Elam",
+      "email": "miles.elam@deem.com"
+    },
+    {
+      "name": "Mihai Bazon",
+      "email": "mihai.bazon@gmail.com"
+    },
+    {
+      "name": "Michael Ficarra",
+      "email": "github.public.email@michael.ficarra.me"
+    },
+    {
+      "name": "Todd Wolfson",
+      "email": "todd@twolfson.com"
+    },
+    {
+      "name": "Alexander Solovyov",
+      "email": "alexander@solovyov.net"
+    },
+    {
+      "name": "Felix Gnass",
+      "email": "fgnass@gmail.com"
+    },
+    {
+      "name": "Conrad Irwin",
+      "email": "conrad.irwin@gmail.com"
+    },
+    {
+      "name": "usrbincc",
+      "email": "usrbincc@yahoo.com"
+    },
+    {
+      "name": "David Glasser",
+      "email": "glasser@davidglasser.net"
+    },
+    {
+      "name": "Chase Douglas",
+      "email": "chase@newrelic.com"
+    },
+    {
+      "name": "Evan Wallace",
+      "email": "evan.exe@gmail.com"
+    },
+    {
+      "name": "Heather Arthur",
+      "email": "fayearthur@gmail.com"
+    },
+    {
+      "name": "Hugh Kennedy",
+      "email": "hughskennedy@gmail.com"
+    },
+    {
+      "name": "David Glasser",
+      "email": "glasser@davidglasser.net"
+    },
+    {
+      "name": "Simon Lydell",
+      "email": "simon.lydell@gmail.com"
+    },
+    {
+      "name": "Jmeas Smith",
+      "email": "jellyes2@gmail.com"
+    },
+    {
+      "name": "Michael Z Goddard",
+      "email": "mzgoddard@gmail.com"
+    },
+    {
+      "name": "azu",
+      "email": "azu@users.noreply.github.com"
+    },
+    {
+      "name": "John Gozde",
+      "email": "john@gozde.ca"
+    },
+    {
+      "name": "Adam Kirkton",
+      "email": "akirkton@truefitinnovation.com"
+    },
+    {
+      "name": "Chris Montgomery",
+      "email": "christopher.montgomery@dowjones.com"
+    },
+    {
+      "name": "J. Ryan Stinnett",
+      "email": "jryans@gmail.com"
+    },
+    {
+      "name": "Jack Herrington",
+      "email": "jherrington@walmartlabs.com"
+    },
+    {
+      "name": "Chris Truter",
+      "email": "jeffpalentine@gmail.com"
+    },
+    {
+      "name": "Daniel Espeset",
+      "email": "daniel@danielespeset.com"
+    },
+    {
+      "name": "Jamie Wong",
+      "email": "jamie.lf.wong@gmail.com"
+    },
+    {
+      "name": "Eddy Bruël",
+      "email": "ejpbruel@mozilla.com"
+    },
+    {
+      "name": "Hawken Rives",
+      "email": "hawkrives@gmail.com"
+    },
+    {
+      "name": "Gilad Peleg",
+      "email": "giladp007@gmail.com"
+    },
+    {
+      "name": "djchie",
+      "email": "djchie.dev@gmail.com"
+    },
+    {
+      "name": "Gary Ye",
+      "email": "garysye@gmail.com"
+    },
+    {
+      "name": "Nicolas Lalevée",
+      "email": "nicolas.lalevee@hibnet.org"
+    }
+  ],
+  "deprecated": false,
+  "description": "Generates and consumes source maps",
+  "devDependencies": {
+    "doctoc": "^0.15.0",
+    "webpack": "^1.12.0"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "source-map.js",
+    "source-map.d.ts",
+    "lib/",
+    "dist/source-map.debug.js",
+    "dist/source-map.js",
+    "dist/source-map.min.js",
+    "dist/source-map.min.js.map"
+  ],
+  "homepage": "https://github.com/mozilla/source-map",
+  "license": "BSD-3-Clause",
+  "main": "./source-map.js",
+  "name": "source-map",
+  "repository": {
+    "type": "git",
+    "url": "git+ssh://git@github.com/mozilla/source-map.git"
+  },
+  "scripts": {
+    "build": "webpack --color",
+    "test": "npm run build && node test/run-tests.js",
+    "toc": "doctoc --title '## Table of Contents' README.md && doctoc --title '## Table of Contents' CONTRIBUTING.md"
+  },
+  "typings": "source-map",
+  "version": "0.6.1"
+}
diff --git a/node_modules/terser/node_modules/source-map/source-map.d.ts b/node_modules/terser/node_modules/source-map/source-map.d.ts
new file mode 100644
index 0000000..8f972b0
--- /dev/null
+++ b/node_modules/terser/node_modules/source-map/source-map.d.ts
@@ -0,0 +1,98 @@
+export interface StartOfSourceMap {
+    file?: string;
+    sourceRoot?: string;
+}
+
+export interface RawSourceMap extends StartOfSourceMap {
+    version: string;
+    sources: string[];
+    names: string[];
+    sourcesContent?: string[];
+    mappings: string;
+}
+
+export interface Position {
+    line: number;
+    column: number;
+}
+
+export interface LineRange extends Position {
+    lastColumn: number;
+}
+
+export interface FindPosition extends Position {
+    // SourceMapConsumer.GREATEST_LOWER_BOUND or SourceMapConsumer.LEAST_UPPER_BOUND
+    bias?: number;
+}
+
+export interface SourceFindPosition extends FindPosition {
+    source: string;
+}
+
+export interface MappedPosition extends Position {
+    source: string;
+    name?: string;
+}
+
+export interface MappingItem {
+    source: string;
+    generatedLine: number;
+    generatedColumn: number;
+    originalLine: number;
+    originalColumn: number;
+    name: string;
+}
+
+export class SourceMapConsumer {
+    static GENERATED_ORDER: number;
+    static ORIGINAL_ORDER: number;
+
+    static GREATEST_LOWER_BOUND: number;
+    static LEAST_UPPER_BOUND: number;
+
+    constructor(rawSourceMap: RawSourceMap);
+    computeColumnSpans(): void;
+    originalPositionFor(generatedPosition: FindPosition): MappedPosition;
+    generatedPositionFor(originalPosition: SourceFindPosition): LineRange;
+    allGeneratedPositionsFor(originalPosition: MappedPosition): Position[];
+    hasContentsOfAllSources(): boolean;
+    sourceContentFor(source: string, returnNullOnMissing?: boolean): string;
+    eachMapping(callback: (mapping: MappingItem) => void, context?: any, order?: number): void;
+}
+
+export interface Mapping {
+    generated: Position;
+    original: Position;
+    source: string;
+    name?: string;
+}
+
+export class SourceMapGenerator {
+    constructor(startOfSourceMap?: StartOfSourceMap);
+    static fromSourceMap(sourceMapConsumer: SourceMapConsumer): SourceMapGenerator;
+    addMapping(mapping: Mapping): void;
+    setSourceContent(sourceFile: string, sourceContent: string): void;
+    applySourceMap(sourceMapConsumer: SourceMapConsumer, sourceFile?: string, sourceMapPath?: string): void;
+    toString(): string;
+}
+
+export interface CodeWithSourceMap {
+    code: string;
+    map: SourceMapGenerator;
+}
+
+export class SourceNode {
+    constructor();
+    constructor(line: number, column: number, source: string);
+    constructor(line: number, column: number, source: string, chunk?: string, name?: string);
+    static fromStringWithSourceMap(code: string, sourceMapConsumer: SourceMapConsumer, relativePath?: string): SourceNode;
+    add(chunk: string): void;
+    prepend(chunk: string): void;
+    setSourceContent(sourceFile: string, sourceContent: string): void;
+    walk(fn: (chunk: string, mapping: MappedPosition) => void): void;
+    walkSourceContents(fn: (file: string, content: string) => void): void;
+    join(sep: string): SourceNode;
+    replaceRight(pattern: string, replacement: string): SourceNode;
+    toString(): string;
+    toStringWithSourceMap(startOfSourceMap?: StartOfSourceMap): CodeWithSourceMap;
+}
diff --git a/node_modules/terser/node_modules/source-map/source-map.js b/node_modules/terser/node_modules/source-map/source-map.js
new file mode 100644
index 0000000..bc88fe8
--- /dev/null
+++ b/node_modules/terser/node_modules/source-map/source-map.js
@@ -0,0 +1,8 @@
+/*
+ * Copyright 2009-2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE.txt or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+exports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;
+exports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;
+exports.SourceNode = require('./lib/source-node').SourceNode;
diff --git a/node_modules/terser/package.json b/node_modules/terser/package.json
new file mode 100644
index 0000000..f0387dc
--- /dev/null
+++ b/node_modules/terser/package.json
@@ -0,0 +1,166 @@
+{
+  "_from": "terser@^4.3.9",
+  "_id": "terser@4.8.0",
+  "_inBundle": false,
+  "_integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==",
+  "_location": "/terser",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "terser@^4.3.9",
+    "name": "terser",
+    "escapedName": "terser",
+    "rawSpec": "^4.3.9",
+    "saveSpec": null,
+    "fetchSpec": "^4.3.9"
+  },
+  "_requiredBy": [
+    "/grunt-terser"
+  ],
+  "_resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz",
+  "_shasum": "63056343d7c70bb29f3af665865a46fe03a0df17",
+  "_spec": "terser@^4.3.9",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar\\node_modules\\grunt-terser",
+  "author": {
+    "name": "Mihai Bazon",
+    "email": "mihai.bazon@gmail.com",
+    "url": "http://lisperator.net/"
+  },
+  "bin": {
+    "terser": "bin/terser"
+  },
+  "bugs": {
+    "url": "https://github.com/terser/terser/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "commander": "^2.20.0",
+    "source-map": "~0.6.1",
+    "source-map-support": "~0.5.12"
+  },
+  "deprecated": false,
+  "description": "JavaScript parser, mangler/compressor and beautifier toolkit for ES6+",
+  "devDependencies": {
+    "acorn": "^7.1.1",
+    "astring": "^1.4.1",
+    "eslint": "^6.3.0",
+    "eslump": "^2.0.0",
+    "mocha": "^7.1.2",
+    "mochallel": "^2.0.0",
+    "pre-commit": "^1.2.2",
+    "rimraf": "^3.0.0",
+    "rollup": "2.0.6",
+    "rollup-plugin-terser": "5.3.0",
+    "semver": "^7.1.3"
+  },
+  "engines": {
+    "node": ">=6.0.0"
+  },
+  "eslintConfig": {
+    "parserOptions": {
+      "sourceType": "module"
+    },
+    "env": {
+      "es6": true
+    },
+    "globals": {
+      "describe": false,
+      "it": false,
+      "require": false,
+      "global": false,
+      "process": false
+    },
+    "rules": {
+      "brace-style": [
+        "error",
+        "1tbs",
+        {
+          "allowSingleLine": true
+        }
+      ],
+      "quotes": [
+        "error",
+        "double",
+        "avoid-escape"
+      ],
+      "no-debugger": "error",
+      "no-undef": "error",
+      "no-unused-vars": [
+        "error",
+        {
+          "varsIgnorePattern": "^_$"
+        }
+      ],
+      "no-tabs": "error",
+      "semi": [
+        "error",
+        "always"
+      ],
+      "no-extra-semi": "error",
+      "no-irregular-whitespace": "error",
+      "space-before-blocks": [
+        "error",
+        "always"
+      ]
+    }
+  },
+  "files": [
+    "bin",
+    "dist",
+    "tools",
+    "LICENSE",
+    "README.md",
+    "CHANGELOG.md",
+    "PATRONS.md"
+  ],
+  "homepage": "https://terser.org",
+  "keywords": [
+    "uglify",
+    "terser",
+    "uglify-es",
+    "uglify-js",
+    "minify",
+    "minifier",
+    "javascript",
+    "ecmascript",
+    "es5",
+    "es6",
+    "es7",
+    "es8",
+    "es2015",
+    "es2016",
+    "es2017",
+    "async",
+    "await"
+  ],
+  "license": "BSD-2-Clause",
+  "main": "dist/bundle.min.js",
+  "maintainers": [
+    {
+      "name": "Fábio Santos",
+      "email": "fabiosantosart@gmail.com"
+    }
+  ],
+  "name": "terser",
+  "pre-commit": [
+    "lint-fix",
+    "test"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/terser/terser.git"
+  },
+  "scripts": {
+    "build": "rimraf dist/* && rollup --config --silent",
+    "lint": "eslint lib",
+    "lint-fix": "eslint --fix lib",
+    "postversion": "echo 'Remember to update the changelog!'",
+    "prepare": "npm run build",
+    "test": "npm run build -- --configTest && node test/run-tests.js",
+    "test:compress": "npm run build -- --configTest && node test/compress.js",
+    "test:mocha": "npm run build -- --configTest && node test/mocha.js"
+  },
+  "types": "tools/terser.d.ts",
+  "version": "4.8.0"
+}
diff --git a/node_modules/terser/tools/colorless-console.js b/node_modules/terser/tools/colorless-console.js
new file mode 100644
index 0000000..b65bb62
--- /dev/null
+++ b/node_modules/terser/tools/colorless-console.js
@@ -0,0 +1,11 @@
+"use strict"
+
+if (Number((/([0-9]+)\./.exec(process.version) || [])[1]) >= 10) {
+    var Console = require("console").Console;
+    global.console = new Console({
+        stdout: process.stdout,
+        stderr: process.stderr,
+        colorMode: false
+    });
+}
+
diff --git a/node_modules/terser/tools/domprops.js b/node_modules/terser/tools/domprops.js
new file mode 100644
index 0000000..e39a5e9
--- /dev/null
+++ b/node_modules/terser/tools/domprops.js
@@ -0,0 +1,5619 @@
+export var domprops = [
+    "$&",
+    "$'",
+    "$*",
+    "$+",
+    "$1",
+    "$2",
+    "$3",
+    "$4",
+    "$5",
+    "$6",
+    "$7",
+    "$8",
+    "$9",
+    "$_",
+    "$`",
+    "$input",
+    "@@iterator",
+    "ABORT_ERR",
+    "ACTIVE",
+    "ACTIVE_ATTRIBUTES",
+    "ACTIVE_TEXTURE",
+    "ACTIVE_UNIFORMS",
+    "ADDITION",
+    "ALIASED_LINE_WIDTH_RANGE",
+    "ALIASED_POINT_SIZE_RANGE",
+    "ALLOW_KEYBOARD_INPUT",
+    "ALLPASS",
+    "ALPHA",
+    "ALPHA_BITS",
+    "ALT_MASK",
+    "ALWAYS",
+    "ANY_TYPE",
+    "ANY_UNORDERED_NODE_TYPE",
+    "ARRAY_BUFFER",
+    "ARRAY_BUFFER_BINDING",
+    "ATTACHED_SHADERS",
+    "ATTRIBUTE_NODE",
+    "AT_TARGET",
+    "AddSearchProvider",
+    "AnalyserNode",
+    "AnimationEvent",
+    "AnonXMLHttpRequest",
+    "ApplicationCache",
+    "ApplicationCacheErrorEvent",
+    "Array",
+    "ArrayBuffer",
+    "Attr",
+    "Audio",
+    "AudioBuffer",
+    "AudioBufferSourceNode",
+    "AudioContext",
+    "AudioDestinationNode",
+    "AudioListener",
+    "AudioNode",
+    "AudioParam",
+    "AudioProcessingEvent",
+    "AudioStreamTrack",
+    "AutocompleteErrorEvent",
+    "BACK",
+    "BAD_BOUNDARYPOINTS_ERR",
+    "BANDPASS",
+    "BLEND",
+    "BLEND_COLOR",
+    "BLEND_DST_ALPHA",
+    "BLEND_DST_RGB",
+    "BLEND_EQUATION",
+    "BLEND_EQUATION_ALPHA",
+    "BLEND_EQUATION_RGB",
+    "BLEND_SRC_ALPHA",
+    "BLEND_SRC_RGB",
+    "BLUE_BITS",
+    "BLUR",
+    "BOOL",
+    "BOOLEAN_TYPE",
+    "BOOL_VEC2",
+    "BOOL_VEC3",
+    "BOOL_VEC4",
+    "BOTH",
+    "BROWSER_DEFAULT_WEBGL",
+    "BUBBLING_PHASE",
+    "BUFFER_SIZE",
+    "BUFFER_USAGE",
+    "BYTE",
+    "BYTES_PER_ELEMENT",
+    "BarProp",
+    "BaseHref",
+    "BatteryManager",
+    "BeforeLoadEvent",
+    "BeforeUnloadEvent",
+    "BiquadFilterNode",
+    "Blob",
+    "BlobEvent",
+    "Boolean",
+    "CAPTURING_PHASE",
+    "CCW",
+    "CDATASection",
+    "CDATA_SECTION_NODE",
+    "CHANGE",
+    "CHARSET_RULE",
+    "CHECKING",
+    "CLAMP_TO_EDGE",
+    "CLICK",
+    "CLOSED",
+    "CLOSING",
+    "COLOR_ATTACHMENT0",
+    "COLOR_BUFFER_BIT",
+    "COLOR_CLEAR_VALUE",
+    "COLOR_WRITEMASK",
+    "COMMENT_NODE",
+    "COMPILE_STATUS",
+    "COMPRESSED_RGBA_S3TC_DXT1_EXT",
+    "COMPRESSED_RGBA_S3TC_DXT3_EXT",
+    "COMPRESSED_RGBA_S3TC_DXT5_EXT",
+    "COMPRESSED_RGB_S3TC_DXT1_EXT",
+    "COMPRESSED_TEXTURE_FORMATS",
+    "CONNECTING",
+    "CONSTANT_ALPHA",
+    "CONSTANT_COLOR",
+    "CONSTRAINT_ERR",
+    "CONTEXT_LOST_WEBGL",
+    "CONTROL_MASK",
+    "COUNTER_STYLE_RULE",
+    "CSS",
+    "CSS2Properties",
+    "CSSCharsetRule",
+    "CSSConditionRule",
+    "CSSCounterStyleRule",
+    "CSSFontFaceRule",
+    "CSSFontFeatureValuesRule",
+    "CSSGroupingRule",
+    "CSSImportRule",
+    "CSSKeyframeRule",
+    "CSSKeyframesRule",
+    "CSSMediaRule",
+    "CSSMozDocumentRule",
+    "CSSNameSpaceRule",
+    "CSSPageRule",
+    "CSSPrimitiveValue",
+    "CSSRule",
+    "CSSRuleList",
+    "CSSStyleDeclaration",
+    "CSSStyleRule",
+    "CSSStyleSheet",
+    "CSSSupportsRule",
+    "CSSUnknownRule",
+    "CSSValue",
+    "CSSValueList",
+    "CSSVariablesDeclaration",
+    "CSSVariablesRule",
+    "CSSViewportRule",
+    "CSS_ATTR",
+    "CSS_CM",
+    "CSS_COUNTER",
+    "CSS_CUSTOM",
+    "CSS_DEG",
+    "CSS_DIMENSION",
+    "CSS_EMS",
+    "CSS_EXS",
+    "CSS_FILTER_BLUR",
+    "CSS_FILTER_BRIGHTNESS",
+    "CSS_FILTER_CONTRAST",
+    "CSS_FILTER_CUSTOM",
+    "CSS_FILTER_DROP_SHADOW",
+    "CSS_FILTER_GRAYSCALE",
+    "CSS_FILTER_HUE_ROTATE",
+    "CSS_FILTER_INVERT",
+    "CSS_FILTER_OPACITY",
+    "CSS_FILTER_REFERENCE",
+    "CSS_FILTER_SATURATE",
+    "CSS_FILTER_SEPIA",
+    "CSS_GRAD",
+    "CSS_HZ",
+    "CSS_IDENT",
+    "CSS_IN",
+    "CSS_INHERIT",
+    "CSS_KHZ",
+    "CSS_MATRIX",
+    "CSS_MATRIX3D",
+    "CSS_MM",
+    "CSS_MS",
+    "CSS_NUMBER",
+    "CSS_PC",
+    "CSS_PERCENTAGE",
+    "CSS_PERSPECTIVE",
+    "CSS_PRIMITIVE_VALUE",
+    "CSS_PT",
+    "CSS_PX",
+    "CSS_RAD",
+    "CSS_RECT",
+    "CSS_RGBCOLOR",
+    "CSS_ROTATE",
+    "CSS_ROTATE3D",
+    "CSS_ROTATEX",
+    "CSS_ROTATEY",
+    "CSS_ROTATEZ",
+    "CSS_S",
+    "CSS_SCALE",
+    "CSS_SCALE3D",
+    "CSS_SCALEX",
+    "CSS_SCALEY",
+    "CSS_SCALEZ",
+    "CSS_SKEW",
+    "CSS_SKEWX",
+    "CSS_SKEWY",
+    "CSS_STRING",
+    "CSS_TRANSLATE",
+    "CSS_TRANSLATE3D",
+    "CSS_TRANSLATEX",
+    "CSS_TRANSLATEY",
+    "CSS_TRANSLATEZ",
+    "CSS_UNKNOWN",
+    "CSS_URI",
+    "CSS_VALUE_LIST",
+    "CSS_VH",
+    "CSS_VMAX",
+    "CSS_VMIN",
+    "CSS_VW",
+    "CULL_FACE",
+    "CULL_FACE_MODE",
+    "CURRENT_PROGRAM",
+    "CURRENT_VERTEX_ATTRIB",
+    "CUSTOM",
+    "CW",
+    "CanvasGradient",
+    "CanvasPattern",
+    "CanvasRenderingContext2D",
+    "CaretPosition",
+    "ChannelMergerNode",
+    "ChannelSplitterNode",
+    "CharacterData",
+    "ClientRect",
+    "ClientRectList",
+    "Clipboard",
+    "ClipboardEvent",
+    "CloseEvent",
+    "Collator",
+    "CommandEvent",
+    "Comment",
+    "CompositionEvent",
+    "Console",
+    "Controllers",
+    "ConvolverNode",
+    "Counter",
+    "Crypto",
+    "CryptoKey",
+    "CustomEvent",
+    "DATABASE_ERR",
+    "DATA_CLONE_ERR",
+    "DATA_ERR",
+    "DBLCLICK",
+    "DECR",
+    "DECR_WRAP",
+    "DELETE_STATUS",
+    "DEPTH_ATTACHMENT",
+    "DEPTH_BITS",
+    "DEPTH_BUFFER_BIT",
+    "DEPTH_CLEAR_VALUE",
+    "DEPTH_COMPONENT",
+    "DEPTH_COMPONENT16",
+    "DEPTH_FUNC",
+    "DEPTH_RANGE",
+    "DEPTH_STENCIL",
+    "DEPTH_STENCIL_ATTACHMENT",
+    "DEPTH_TEST",
+    "DEPTH_WRITEMASK",
+    "DIRECTION_DOWN",
+    "DIRECTION_LEFT",
+    "DIRECTION_RIGHT",
+    "DIRECTION_UP",
+    "DISABLED",
+    "DISPATCH_REQUEST_ERR",
+    "DITHER",
+    "DOCUMENT_FRAGMENT_NODE",
+    "DOCUMENT_NODE",
+    "DOCUMENT_POSITION_CONTAINED_BY",
+    "DOCUMENT_POSITION_CONTAINS",
+    "DOCUMENT_POSITION_DISCONNECTED",
+    "DOCUMENT_POSITION_FOLLOWING",
+    "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC",
+    "DOCUMENT_POSITION_PRECEDING",
+    "DOCUMENT_TYPE_NODE",
+    "DOMCursor",
+    "DOMError",
+    "DOMException",
+    "DOMImplementation",
+    "DOMImplementationLS",
+    "DOMMatrix",
+    "DOMMatrixReadOnly",
+    "DOMParser",
+    "DOMPoint",
+    "DOMPointReadOnly",
+    "DOMQuad",
+    "DOMRect",
+    "DOMRectList",
+    "DOMRectReadOnly",
+    "DOMRequest",
+    "DOMSTRING_SIZE_ERR",
+    "DOMSettableTokenList",
+    "DOMStringList",
+    "DOMStringMap",
+    "DOMTokenList",
+    "DOMTransactionEvent",
+    "DOM_DELTA_LINE",
+    "DOM_DELTA_PAGE",
+    "DOM_DELTA_PIXEL",
+    "DOM_INPUT_METHOD_DROP",
+    "DOM_INPUT_METHOD_HANDWRITING",
+    "DOM_INPUT_METHOD_IME",
+    "DOM_INPUT_METHOD_KEYBOARD",
+    "DOM_INPUT_METHOD_MULTIMODAL",
+    "DOM_INPUT_METHOD_OPTION",
+    "DOM_INPUT_METHOD_PASTE",
+    "DOM_INPUT_METHOD_SCRIPT",
+    "DOM_INPUT_METHOD_UNKNOWN",
+    "DOM_INPUT_METHOD_VOICE",
+    "DOM_KEY_LOCATION_JOYSTICK",
+    "DOM_KEY_LOCATION_LEFT",
+    "DOM_KEY_LOCATION_MOBILE",
+    "DOM_KEY_LOCATION_NUMPAD",
+    "DOM_KEY_LOCATION_RIGHT",
+    "DOM_KEY_LOCATION_STANDARD",
+    "DOM_VK_0",
+    "DOM_VK_1",
+    "DOM_VK_2",
+    "DOM_VK_3",
+    "DOM_VK_4",
+    "DOM_VK_5",
+    "DOM_VK_6",
+    "DOM_VK_7",
+    "DOM_VK_8",
+    "DOM_VK_9",
+    "DOM_VK_A",
+    "DOM_VK_ACCEPT",
+    "DOM_VK_ADD",
+    "DOM_VK_ALT",
+    "DOM_VK_ALTGR",
+    "DOM_VK_AMPERSAND",
+    "DOM_VK_ASTERISK",
+    "DOM_VK_AT",
+    "DOM_VK_ATTN",
+    "DOM_VK_B",
+    "DOM_VK_BACKSPACE",
+    "DOM_VK_BACK_QUOTE",
+    "DOM_VK_BACK_SLASH",
+    "DOM_VK_BACK_SPACE",
+    "DOM_VK_C",
+    "DOM_VK_CANCEL",
+    "DOM_VK_CAPS_LOCK",
+    "DOM_VK_CIRCUMFLEX",
+    "DOM_VK_CLEAR",
+    "DOM_VK_CLOSE_BRACKET",
+    "DOM_VK_CLOSE_CURLY_BRACKET",
+    "DOM_VK_CLOSE_PAREN",
+    "DOM_VK_COLON",
+    "DOM_VK_COMMA",
+    "DOM_VK_CONTEXT_MENU",
+    "DOM_VK_CONTROL",
+    "DOM_VK_CONVERT",
+    "DOM_VK_CRSEL",
+    "DOM_VK_CTRL",
+    "DOM_VK_D",
+    "DOM_VK_DECIMAL",
+    "DOM_VK_DELETE",
+    "DOM_VK_DIVIDE",
+    "DOM_VK_DOLLAR",
+    "DOM_VK_DOUBLE_QUOTE",
+    "DOM_VK_DOWN",
+    "DOM_VK_E",
+    "DOM_VK_EISU",
+    "DOM_VK_END",
+    "DOM_VK_ENTER",
+    "DOM_VK_EQUALS",
+    "DOM_VK_EREOF",
+    "DOM_VK_ESCAPE",
+    "DOM_VK_EXCLAMATION",
+    "DOM_VK_EXECUTE",
+    "DOM_VK_EXSEL",
+    "DOM_VK_F",
+    "DOM_VK_F1",
+    "DOM_VK_F10",
+    "DOM_VK_F11",
+    "DOM_VK_F12",
+    "DOM_VK_F13",
+    "DOM_VK_F14",
+    "DOM_VK_F15",
+    "DOM_VK_F16",
+    "DOM_VK_F17",
+    "DOM_VK_F18",
+    "DOM_VK_F19",
+    "DOM_VK_F2",
+    "DOM_VK_F20",
+    "DOM_VK_F21",
+    "DOM_VK_F22",
+    "DOM_VK_F23",
+    "DOM_VK_F24",
+    "DOM_VK_F25",
+    "DOM_VK_F26",
+    "DOM_VK_F27",
+    "DOM_VK_F28",
+    "DOM_VK_F29",
+    "DOM_VK_F3",
+    "DOM_VK_F30",
+    "DOM_VK_F31",
+    "DOM_VK_F32",
+    "DOM_VK_F33",
+    "DOM_VK_F34",
+    "DOM_VK_F35",
+    "DOM_VK_F36",
+    "DOM_VK_F4",
+    "DOM_VK_F5",
+    "DOM_VK_F6",
+    "DOM_VK_F7",
+    "DOM_VK_F8",
+    "DOM_VK_F9",
+    "DOM_VK_FINAL",
+    "DOM_VK_FRONT",
+    "DOM_VK_G",
+    "DOM_VK_GREATER_THAN",
+    "DOM_VK_H",
+    "DOM_VK_HANGUL",
+    "DOM_VK_HANJA",
+    "DOM_VK_HASH",
+    "DOM_VK_HELP",
+    "DOM_VK_HK_TOGGLE",
+    "DOM_VK_HOME",
+    "DOM_VK_HYPHEN_MINUS",
+    "DOM_VK_I",
+    "DOM_VK_INSERT",
+    "DOM_VK_J",
+    "DOM_VK_JUNJA",
+    "DOM_VK_K",
+    "DOM_VK_KANA",
+    "DOM_VK_KANJI",
+    "DOM_VK_L",
+    "DOM_VK_LEFT",
+    "DOM_VK_LEFT_TAB",
+    "DOM_VK_LESS_THAN",
+    "DOM_VK_M",
+    "DOM_VK_META",
+    "DOM_VK_MODECHANGE",
+    "DOM_VK_MULTIPLY",
+    "DOM_VK_N",
+    "DOM_VK_NONCONVERT",
+    "DOM_VK_NUMPAD0",
+    "DOM_VK_NUMPAD1",
+    "DOM_VK_NUMPAD2",
+    "DOM_VK_NUMPAD3",
+    "DOM_VK_NUMPAD4",
+    "DOM_VK_NUMPAD5",
+    "DOM_VK_NUMPAD6",
+    "DOM_VK_NUMPAD7",
+    "DOM_VK_NUMPAD8",
+    "DOM_VK_NUMPAD9",
+    "DOM_VK_NUM_LOCK",
+    "DOM_VK_O",
+    "DOM_VK_OEM_1",
+    "DOM_VK_OEM_102",
+    "DOM_VK_OEM_2",
+    "DOM_VK_OEM_3",
+    "DOM_VK_OEM_4",
+    "DOM_VK_OEM_5",
+    "DOM_VK_OEM_6",
+    "DOM_VK_OEM_7",
+    "DOM_VK_OEM_8",
+    "DOM_VK_OEM_COMMA",
+    "DOM_VK_OEM_MINUS",
+    "DOM_VK_OEM_PERIOD",
+    "DOM_VK_OEM_PLUS",
+    "DOM_VK_OPEN_BRACKET",
+    "DOM_VK_OPEN_CURLY_BRACKET",
+    "DOM_VK_OPEN_PAREN",
+    "DOM_VK_P",
+    "DOM_VK_PA1",
+    "DOM_VK_PAGEDOWN",
+    "DOM_VK_PAGEUP",
+    "DOM_VK_PAGE_DOWN",
+    "DOM_VK_PAGE_UP",
+    "DOM_VK_PAUSE",
+    "DOM_VK_PERCENT",
+    "DOM_VK_PERIOD",
+    "DOM_VK_PIPE",
+    "DOM_VK_PLAY",
+    "DOM_VK_PLUS",
+    "DOM_VK_PRINT",
+    "DOM_VK_PRINTSCREEN",
+    "DOM_VK_PROCESSKEY",
+    "DOM_VK_PROPERITES",
+    "DOM_VK_Q",
+    "DOM_VK_QUESTION_MARK",
+    "DOM_VK_QUOTE",
+    "DOM_VK_R",
+    "DOM_VK_REDO",
+    "DOM_VK_RETURN",
+    "DOM_VK_RIGHT",
+    "DOM_VK_S",
+    "DOM_VK_SCROLL_LOCK",
+    "DOM_VK_SELECT",
+    "DOM_VK_SEMICOLON",
+    "DOM_VK_SEPARATOR",
+    "DOM_VK_SHIFT",
+    "DOM_VK_SLASH",
+    "DOM_VK_SLEEP",
+    "DOM_VK_SPACE",
+    "DOM_VK_SUBTRACT",
+    "DOM_VK_T",
+    "DOM_VK_TAB",
+    "DOM_VK_TILDE",
+    "DOM_VK_U",
+    "DOM_VK_UNDERSCORE",
+    "DOM_VK_UNDO",
+    "DOM_VK_UNICODE",
+    "DOM_VK_UP",
+    "DOM_VK_V",
+    "DOM_VK_VOLUME_DOWN",
+    "DOM_VK_VOLUME_MUTE",
+    "DOM_VK_VOLUME_UP",
+    "DOM_VK_W",
+    "DOM_VK_WIN",
+    "DOM_VK_WINDOW",
+    "DOM_VK_WIN_ICO_00",
+    "DOM_VK_WIN_ICO_CLEAR",
+    "DOM_VK_WIN_ICO_HELP",
+    "DOM_VK_WIN_OEM_ATTN",
+    "DOM_VK_WIN_OEM_AUTO",
+    "DOM_VK_WIN_OEM_BACKTAB",
+    "DOM_VK_WIN_OEM_CLEAR",
+    "DOM_VK_WIN_OEM_COPY",
+    "DOM_VK_WIN_OEM_CUSEL",
+    "DOM_VK_WIN_OEM_ENLW",
+    "DOM_VK_WIN_OEM_FINISH",
+    "DOM_VK_WIN_OEM_FJ_JISHO",
+    "DOM_VK_WIN_OEM_FJ_LOYA",
+    "DOM_VK_WIN_OEM_FJ_MASSHOU",
+    "DOM_VK_WIN_OEM_FJ_ROYA",
+    "DOM_VK_WIN_OEM_FJ_TOUROKU",
+    "DOM_VK_WIN_OEM_JUMP",
+    "DOM_VK_WIN_OEM_PA1",
+    "DOM_VK_WIN_OEM_PA2",
+    "DOM_VK_WIN_OEM_PA3",
+    "DOM_VK_WIN_OEM_RESET",
+    "DOM_VK_WIN_OEM_WSCTRL",
+    "DOM_VK_X",
+    "DOM_VK_XF86XK_ADD_FAVORITE",
+    "DOM_VK_XF86XK_APPLICATION_LEFT",
+    "DOM_VK_XF86XK_APPLICATION_RIGHT",
+    "DOM_VK_XF86XK_AUDIO_CYCLE_TRACK",
+    "DOM_VK_XF86XK_AUDIO_FORWARD",
+    "DOM_VK_XF86XK_AUDIO_LOWER_VOLUME",
+    "DOM_VK_XF86XK_AUDIO_MEDIA",
+    "DOM_VK_XF86XK_AUDIO_MUTE",
+    "DOM_VK_XF86XK_AUDIO_NEXT",
+    "DOM_VK_XF86XK_AUDIO_PAUSE",
+    "DOM_VK_XF86XK_AUDIO_PLAY",
+    "DOM_VK_XF86XK_AUDIO_PREV",
+    "DOM_VK_XF86XK_AUDIO_RAISE_VOLUME",
+    "DOM_VK_XF86XK_AUDIO_RANDOM_PLAY",
+    "DOM_VK_XF86XK_AUDIO_RECORD",
+    "DOM_VK_XF86XK_AUDIO_REPEAT",
+    "DOM_VK_XF86XK_AUDIO_REWIND",
+    "DOM_VK_XF86XK_AUDIO_STOP",
+    "DOM_VK_XF86XK_AWAY",
+    "DOM_VK_XF86XK_BACK",
+    "DOM_VK_XF86XK_BACK_FORWARD",
+    "DOM_VK_XF86XK_BATTERY",
+    "DOM_VK_XF86XK_BLUE",
+    "DOM_VK_XF86XK_BLUETOOTH",
+    "DOM_VK_XF86XK_BOOK",
+    "DOM_VK_XF86XK_BRIGHTNESS_ADJUST",
+    "DOM_VK_XF86XK_CALCULATOR",
+    "DOM_VK_XF86XK_CALENDAR",
+    "DOM_VK_XF86XK_CD",
+    "DOM_VK_XF86XK_CLOSE",
+    "DOM_VK_XF86XK_COMMUNITY",
+    "DOM_VK_XF86XK_CONTRAST_ADJUST",
+    "DOM_VK_XF86XK_COPY",
+    "DOM_VK_XF86XK_CUT",
+    "DOM_VK_XF86XK_CYCLE_ANGLE",
+    "DOM_VK_XF86XK_DISPLAY",
+    "DOM_VK_XF86XK_DOCUMENTS",
+    "DOM_VK_XF86XK_DOS",
+    "DOM_VK_XF86XK_EJECT",
+    "DOM_VK_XF86XK_EXCEL",
+    "DOM_VK_XF86XK_EXPLORER",
+    "DOM_VK_XF86XK_FAVORITES",
+    "DOM_VK_XF86XK_FINANCE",
+    "DOM_VK_XF86XK_FORWARD",
+    "DOM_VK_XF86XK_FRAME_BACK",
+    "DOM_VK_XF86XK_FRAME_FORWARD",
+    "DOM_VK_XF86XK_GAME",
+    "DOM_VK_XF86XK_GO",
+    "DOM_VK_XF86XK_GREEN",
+    "DOM_VK_XF86XK_HIBERNATE",
+    "DOM_VK_XF86XK_HISTORY",
+    "DOM_VK_XF86XK_HOME_PAGE",
+    "DOM_VK_XF86XK_HOT_LINKS",
+    "DOM_VK_XF86XK_I_TOUCH",
+    "DOM_VK_XF86XK_KBD_BRIGHTNESS_DOWN",
+    "DOM_VK_XF86XK_KBD_BRIGHTNESS_UP",
+    "DOM_VK_XF86XK_KBD_LIGHT_ON_OFF",
+    "DOM_VK_XF86XK_LAUNCH0",
+    "DOM_VK_XF86XK_LAUNCH1",
+    "DOM_VK_XF86XK_LAUNCH2",
+    "DOM_VK_XF86XK_LAUNCH3",
+    "DOM_VK_XF86XK_LAUNCH4",
+    "DOM_VK_XF86XK_LAUNCH5",
+    "DOM_VK_XF86XK_LAUNCH6",
+    "DOM_VK_XF86XK_LAUNCH7",
+    "DOM_VK_XF86XK_LAUNCH8",
+    "DOM_VK_XF86XK_LAUNCH9",
+    "DOM_VK_XF86XK_LAUNCH_A",
+    "DOM_VK_XF86XK_LAUNCH_B",
+    "DOM_VK_XF86XK_LAUNCH_C",
+    "DOM_VK_XF86XK_LAUNCH_D",
+    "DOM_VK_XF86XK_LAUNCH_E",
+    "DOM_VK_XF86XK_LAUNCH_F",
+    "DOM_VK_XF86XK_LIGHT_BULB",
+    "DOM_VK_XF86XK_LOG_OFF",
+    "DOM_VK_XF86XK_MAIL",
+    "DOM_VK_XF86XK_MAIL_FORWARD",
+    "DOM_VK_XF86XK_MARKET",
+    "DOM_VK_XF86XK_MEETING",
+    "DOM_VK_XF86XK_MEMO",
+    "DOM_VK_XF86XK_MENU_KB",
+    "DOM_VK_XF86XK_MENU_PB",
+    "DOM_VK_XF86XK_MESSENGER",
+    "DOM_VK_XF86XK_MON_BRIGHTNESS_DOWN",
+    "DOM_VK_XF86XK_MON_BRIGHTNESS_UP",
+    "DOM_VK_XF86XK_MUSIC",
+    "DOM_VK_XF86XK_MY_COMPUTER",
+    "DOM_VK_XF86XK_MY_SITES",
+    "DOM_VK_XF86XK_NEW",
+    "DOM_VK_XF86XK_NEWS",
+    "DOM_VK_XF86XK_OFFICE_HOME",
+    "DOM_VK_XF86XK_OPEN",
+    "DOM_VK_XF86XK_OPEN_URL",
+    "DOM_VK_XF86XK_OPTION",
+    "DOM_VK_XF86XK_PASTE",
+    "DOM_VK_XF86XK_PHONE",
+    "DOM_VK_XF86XK_PICTURES",
+    "DOM_VK_XF86XK_POWER_DOWN",
+    "DOM_VK_XF86XK_POWER_OFF",
+    "DOM_VK_XF86XK_RED",
+    "DOM_VK_XF86XK_REFRESH",
+    "DOM_VK_XF86XK_RELOAD",
+    "DOM_VK_XF86XK_REPLY",
+    "DOM_VK_XF86XK_ROCKER_DOWN",
+    "DOM_VK_XF86XK_ROCKER_ENTER",
+    "DOM_VK_XF86XK_ROCKER_UP",
+    "DOM_VK_XF86XK_ROTATE_WINDOWS",
+    "DOM_VK_XF86XK_ROTATION_KB",
+    "DOM_VK_XF86XK_ROTATION_PB",
+    "DOM_VK_XF86XK_SAVE",
+    "DOM_VK_XF86XK_SCREEN_SAVER",
+    "DOM_VK_XF86XK_SCROLL_CLICK",
+    "DOM_VK_XF86XK_SCROLL_DOWN",
+    "DOM_VK_XF86XK_SCROLL_UP",
+    "DOM_VK_XF86XK_SEARCH",
+    "DOM_VK_XF86XK_SEND",
+    "DOM_VK_XF86XK_SHOP",
+    "DOM_VK_XF86XK_SPELL",
+    "DOM_VK_XF86XK_SPLIT_SCREEN",
+    "DOM_VK_XF86XK_STANDBY",
+    "DOM_VK_XF86XK_START",
+    "DOM_VK_XF86XK_STOP",
+    "DOM_VK_XF86XK_SUBTITLE",
+    "DOM_VK_XF86XK_SUPPORT",
+    "DOM_VK_XF86XK_SUSPEND",
+    "DOM_VK_XF86XK_TASK_PANE",
+    "DOM_VK_XF86XK_TERMINAL",
+    "DOM_VK_XF86XK_TIME",
+    "DOM_VK_XF86XK_TOOLS",
+    "DOM_VK_XF86XK_TOP_MENU",
+    "DOM_VK_XF86XK_TO_DO_LIST",
+    "DOM_VK_XF86XK_TRAVEL",
+    "DOM_VK_XF86XK_USER1KB",
+    "DOM_VK_XF86XK_USER2KB",
+    "DOM_VK_XF86XK_USER_PB",
+    "DOM_VK_XF86XK_UWB",
+    "DOM_VK_XF86XK_VENDOR_HOME",
+    "DOM_VK_XF86XK_VIDEO",
+    "DOM_VK_XF86XK_VIEW",
+    "DOM_VK_XF86XK_WAKE_UP",
+    "DOM_VK_XF86XK_WEB_CAM",
+    "DOM_VK_XF86XK_WHEEL_BUTTON",
+    "DOM_VK_XF86XK_WLAN",
+    "DOM_VK_XF86XK_WORD",
+    "DOM_VK_XF86XK_WWW",
+    "DOM_VK_XF86XK_XFER",
+    "DOM_VK_XF86XK_YELLOW",
+    "DOM_VK_XF86XK_ZOOM_IN",
+    "DOM_VK_XF86XK_ZOOM_OUT",
+    "DOM_VK_Y",
+    "DOM_VK_Z",
+    "DOM_VK_ZOOM",
+    "DONE",
+    "DONT_CARE",
+    "DOWNLOADING",
+    "DRAGDROP",
+    "DST_ALPHA",
+    "DST_COLOR",
+    "DYNAMIC_DRAW",
+    "DataChannel",
+    "DataTransfer",
+    "DataTransferItem",
+    "DataTransferItemList",
+    "DataView",
+    "Date",
+    "DateTimeFormat",
+    "DelayNode",
+    "DesktopNotification",
+    "DesktopNotificationCenter",
+    "DeviceLightEvent",
+    "DeviceMotionEvent",
+    "DeviceOrientationEvent",
+    "DeviceProximityEvent",
+    "DeviceStorage",
+    "DeviceStorageChangeEvent",
+    "Document",
+    "DocumentFragment",
+    "DocumentType",
+    "DragEvent",
+    "DynamicsCompressorNode",
+    "E",
+    "ELEMENT_ARRAY_BUFFER",
+    "ELEMENT_ARRAY_BUFFER_BINDING",
+    "ELEMENT_NODE",
+    "EMPTY",
+    "ENCODING_ERR",
+    "ENDED",
+    "END_TO_END",
+    "END_TO_START",
+    "ENTITY_NODE",
+    "ENTITY_REFERENCE_NODE",
+    "EPSILON",
+    "EQUAL",
+    "EQUALPOWER",
+    "ERROR",
+    "EXPONENTIAL_DISTANCE",
+    "Element",
+    "ElementQuery",
+    "Entity",
+    "EntityReference",
+    "Error",
+    "ErrorEvent",
+    "EvalError",
+    "Event",
+    "EventException",
+    "EventSource",
+    "EventTarget",
+    "External",
+    "FASTEST",
+    "FIDOSDK",
+    "FILTER_ACCEPT",
+    "FILTER_INTERRUPT",
+    "FILTER_REJECT",
+    "FILTER_SKIP",
+    "FINISHED_STATE",
+    "FIRST_ORDERED_NODE_TYPE",
+    "FLOAT",
+    "FLOAT_MAT2",
+    "FLOAT_MAT3",
+    "FLOAT_MAT4",
+    "FLOAT_VEC2",
+    "FLOAT_VEC3",
+    "FLOAT_VEC4",
+    "FOCUS",
+    "FONT_FACE_RULE",
+    "FONT_FEATURE_VALUES_RULE",
+    "FRAGMENT_SHADER",
+    "FRAGMENT_SHADER_DERIVATIVE_HINT_OES",
+    "FRAMEBUFFER",
+    "FRAMEBUFFER_ATTACHMENT_OBJECT_NAME",
+    "FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE",
+    "FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE",
+    "FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL",
+    "FRAMEBUFFER_BINDING",
+    "FRAMEBUFFER_COMPLETE",
+    "FRAMEBUFFER_INCOMPLETE_ATTACHMENT",
+    "FRAMEBUFFER_INCOMPLETE_DIMENSIONS",
+    "FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT",
+    "FRAMEBUFFER_UNSUPPORTED",
+    "FRONT",
+    "FRONT_AND_BACK",
+    "FRONT_FACE",
+    "FUNC_ADD",
+    "FUNC_REVERSE_SUBTRACT",
+    "FUNC_SUBTRACT",
+    "Feed",
+    "FeedEntry",
+    "File",
+    "FileError",
+    "FileList",
+    "FileReader",
+    "FindInPage",
+    "Float32Array",
+    "Float64Array",
+    "FocusEvent",
+    "FontFace",
+    "FormData",
+    "Function",
+    "GENERATE_MIPMAP_HINT",
+    "GEQUAL",
+    "GREATER",
+    "GREEN_BITS",
+    "GainNode",
+    "Gamepad",
+    "GamepadButton",
+    "GamepadEvent",
+    "GestureEvent",
+    "HAVE_CURRENT_DATA",
+    "HAVE_ENOUGH_DATA",
+    "HAVE_FUTURE_DATA",
+    "HAVE_METADATA",
+    "HAVE_NOTHING",
+    "HEADERS_RECEIVED",
+    "HIDDEN",
+    "HIERARCHY_REQUEST_ERR",
+    "HIGHPASS",
+    "HIGHSHELF",
+    "HIGH_FLOAT",
+    "HIGH_INT",
+    "HORIZONTAL",
+    "HORIZONTAL_AXIS",
+    "HRTF",
+    "HTMLAllCollection",
+    "HTMLAnchorElement",
+    "HTMLAppletElement",
+    "HTMLAreaElement",
+    "HTMLAudioElement",
+    "HTMLBRElement",
+    "HTMLBaseElement",
+    "HTMLBaseFontElement",
+    "HTMLBlockquoteElement",
+    "HTMLBodyElement",
+    "HTMLButtonElement",
+    "HTMLCanvasElement",
+    "HTMLCollection",
+    "HTMLCommandElement",
+    "HTMLContentElement",
+    "HTMLDListElement",
+    "HTMLDataElement",
+    "HTMLDataListElement",
+    "HTMLDetailsElement",
+    "HTMLDialogElement",
+    "HTMLDirectoryElement",
+    "HTMLDivElement",
+    "HTMLDocument",
+    "HTMLElement",
+    "HTMLEmbedElement",
+    "HTMLFieldSetElement",
+    "HTMLFontElement",
+    "HTMLFormControlsCollection",
+    "HTMLFormElement",
+    "HTMLFrameElement",
+    "HTMLFrameSetElement",
+    "HTMLHRElement",
+    "HTMLHeadElement",
+    "HTMLHeadingElement",
+    "HTMLHtmlElement",
+    "HTMLIFrameElement",
+    "HTMLImageElement",
+    "HTMLInputElement",
+    "HTMLIsIndexElement",
+    "HTMLKeygenElement",
+    "HTMLLIElement",
+    "HTMLLabelElement",
+    "HTMLLegendElement",
+    "HTMLLinkElement",
+    "HTMLMapElement",
+    "HTMLMarqueeElement",
+    "HTMLMediaElement",
+    "HTMLMenuElement",
+    "HTMLMenuItemElement",
+    "HTMLMetaElement",
+    "HTMLMeterElement",
+    "HTMLModElement",
+    "HTMLOListElement",
+    "HTMLObjectElement",
+    "HTMLOptGroupElement",
+    "HTMLOptionElement",
+    "HTMLOptionsCollection",
+    "HTMLOutputElement",
+    "HTMLParagraphElement",
+    "HTMLParamElement",
+    "HTMLPictureElement",
+    "HTMLPreElement",
+    "HTMLProgressElement",
+    "HTMLPropertiesCollection",
+    "HTMLQuoteElement",
+    "HTMLScriptElement",
+    "HTMLSelectElement",
+    "HTMLShadowElement",
+    "HTMLSourceElement",
+    "HTMLSpanElement",
+    "HTMLStyleElement",
+    "HTMLTableCaptionElement",
+    "HTMLTableCellElement",
+    "HTMLTableColElement",
+    "HTMLTableElement",
+    "HTMLTableRowElement",
+    "HTMLTableSectionElement",
+    "HTMLTemplateElement",
+    "HTMLTextAreaElement",
+    "HTMLTimeElement",
+    "HTMLTitleElement",
+    "HTMLTrackElement",
+    "HTMLUListElement",
+    "HTMLUnknownElement",
+    "HTMLVideoElement",
+    "HashChangeEvent",
+    "Headers",
+    "History",
+    "ICE_CHECKING",
+    "ICE_CLOSED",
+    "ICE_COMPLETED",
+    "ICE_CONNECTED",
+    "ICE_FAILED",
+    "ICE_GATHERING",
+    "ICE_WAITING",
+    "IDBCursor",
+    "IDBCursorWithValue",
+    "IDBDatabase",
+    "IDBDatabaseException",
+    "IDBFactory",
+    "IDBFileHandle",
+    "IDBFileRequest",
+    "IDBIndex",
+    "IDBKeyRange",
+    "IDBMutableFile",
+    "IDBObjectStore",
+    "IDBOpenDBRequest",
+    "IDBRequest",
+    "IDBTransaction",
+    "IDBVersionChangeEvent",
+    "IDLE",
+    "IMPLEMENTATION_COLOR_READ_FORMAT",
+    "IMPLEMENTATION_COLOR_READ_TYPE",
+    "IMPORT_RULE",
+    "INCR",
+    "INCR_WRAP",
+    "INDEX_SIZE_ERR",
+    "INT",
+    "INT_VEC2",
+    "INT_VEC3",
+    "INT_VEC4",
+    "INUSE_ATTRIBUTE_ERR",
+    "INVALID_ACCESS_ERR",
+    "INVALID_CHARACTER_ERR",
+    "INVALID_ENUM",
+    "INVALID_EXPRESSION_ERR",
+    "INVALID_FRAMEBUFFER_OPERATION",
+    "INVALID_MODIFICATION_ERR",
+    "INVALID_NODE_TYPE_ERR",
+    "INVALID_OPERATION",
+    "INVALID_STATE_ERR",
+    "INVALID_VALUE",
+    "INVERSE_DISTANCE",
+    "INVERT",
+    "IceCandidate",
+    "Image",
+    "ImageBitmap",
+    "ImageData",
+    "Infinity",
+    "InputEvent",
+    "InputMethodContext",
+    "InstallTrigger",
+    "Int16Array",
+    "Int32Array",
+    "Int8Array",
+    "Intent",
+    "InternalError",
+    "Intl",
+    "IsSearchProviderInstalled",
+    "Iterator",
+    "JSON",
+    "KEEP",
+    "KEYDOWN",
+    "KEYFRAMES_RULE",
+    "KEYFRAME_RULE",
+    "KEYPRESS",
+    "KEYUP",
+    "KeyEvent",
+    "KeyboardEvent",
+    "LENGTHADJUST_SPACING",
+    "LENGTHADJUST_SPACINGANDGLYPHS",
+    "LENGTHADJUST_UNKNOWN",
+    "LEQUAL",
+    "LESS",
+    "LINEAR",
+    "LINEAR_DISTANCE",
+    "LINEAR_MIPMAP_LINEAR",
+    "LINEAR_MIPMAP_NEAREST",
+    "LINES",
+    "LINE_LOOP",
+    "LINE_STRIP",
+    "LINE_WIDTH",
+    "LINK_STATUS",
+    "LIVE",
+    "LN10",
+    "LN2",
+    "LOADED",
+    "LOADING",
+    "LOG10E",
+    "LOG2E",
+    "LOWPASS",
+    "LOWSHELF",
+    "LOW_FLOAT",
+    "LOW_INT",
+    "LSException",
+    "LSParserFilter",
+    "LUMINANCE",
+    "LUMINANCE_ALPHA",
+    "LocalMediaStream",
+    "Location",
+    "MAX_COMBINED_TEXTURE_IMAGE_UNITS",
+    "MAX_CUBE_MAP_TEXTURE_SIZE",
+    "MAX_FRAGMENT_UNIFORM_VECTORS",
+    "MAX_RENDERBUFFER_SIZE",
+    "MAX_SAFE_INTEGER",
+    "MAX_TEXTURE_IMAGE_UNITS",
+    "MAX_TEXTURE_MAX_ANISOTROPY_EXT",
+    "MAX_TEXTURE_SIZE",
+    "MAX_VALUE",
+    "MAX_VARYING_VECTORS",
+    "MAX_VERTEX_ATTRIBS",
+    "MAX_VERTEX_TEXTURE_IMAGE_UNITS",
+    "MAX_VERTEX_UNIFORM_VECTORS",
+    "MAX_VIEWPORT_DIMS",
+    "MEDIA_ERR_ABORTED",
+    "MEDIA_ERR_DECODE",
+    "MEDIA_ERR_ENCRYPTED",
+    "MEDIA_ERR_NETWORK",
+    "MEDIA_ERR_SRC_NOT_SUPPORTED",
+    "MEDIA_KEYERR_CLIENT",
+    "MEDIA_KEYERR_DOMAIN",
+    "MEDIA_KEYERR_HARDWARECHANGE",
+    "MEDIA_KEYERR_OUTPUT",
+    "MEDIA_KEYERR_SERVICE",
+    "MEDIA_KEYERR_UNKNOWN",
+    "MEDIA_RULE",
+    "MEDIUM_FLOAT",
+    "MEDIUM_INT",
+    "META_MASK",
+    "MIN_SAFE_INTEGER",
+    "MIN_VALUE",
+    "MIRRORED_REPEAT",
+    "MODE_ASYNCHRONOUS",
+    "MODE_SYNCHRONOUS",
+    "MODIFICATION",
+    "MOUSEDOWN",
+    "MOUSEDRAG",
+    "MOUSEMOVE",
+    "MOUSEOUT",
+    "MOUSEOVER",
+    "MOUSEUP",
+    "MOZ_KEYFRAMES_RULE",
+    "MOZ_KEYFRAME_RULE",
+    "MOZ_SOURCE_CURSOR",
+    "MOZ_SOURCE_ERASER",
+    "MOZ_SOURCE_KEYBOARD",
+    "MOZ_SOURCE_MOUSE",
+    "MOZ_SOURCE_PEN",
+    "MOZ_SOURCE_TOUCH",
+    "MOZ_SOURCE_UNKNOWN",
+    "MSGESTURE_FLAG_BEGIN",
+    "MSGESTURE_FLAG_CANCEL",
+    "MSGESTURE_FLAG_END",
+    "MSGESTURE_FLAG_INERTIA",
+    "MSGESTURE_FLAG_NONE",
+    "MSPOINTER_TYPE_MOUSE",
+    "MSPOINTER_TYPE_PEN",
+    "MSPOINTER_TYPE_TOUCH",
+    "MS_ASYNC_CALLBACK_STATUS_ASSIGN_DELEGATE",
+    "MS_ASYNC_CALLBACK_STATUS_CANCEL",
+    "MS_ASYNC_CALLBACK_STATUS_CHOOSEANY",
+    "MS_ASYNC_CALLBACK_STATUS_ERROR",
+    "MS_ASYNC_CALLBACK_STATUS_JOIN",
+    "MS_ASYNC_OP_STATUS_CANCELED",
+    "MS_ASYNC_OP_STATUS_ERROR",
+    "MS_ASYNC_OP_STATUS_SUCCESS",
+    "MS_MANIPULATION_STATE_ACTIVE",
+    "MS_MANIPULATION_STATE_CANCELLED",
+    "MS_MANIPULATION_STATE_COMMITTED",
+    "MS_MANIPULATION_STATE_DRAGGING",
+    "MS_MANIPULATION_STATE_INERTIA",
+    "MS_MANIPULATION_STATE_PRESELECT",
+    "MS_MANIPULATION_STATE_SELECTING",
+    "MS_MANIPULATION_STATE_STOPPED",
+    "MS_MEDIA_ERR_ENCRYPTED",
+    "MS_MEDIA_KEYERR_CLIENT",
+    "MS_MEDIA_KEYERR_DOMAIN",
+    "MS_MEDIA_KEYERR_HARDWARECHANGE",
+    "MS_MEDIA_KEYERR_OUTPUT",
+    "MS_MEDIA_KEYERR_SERVICE",
+    "MS_MEDIA_KEYERR_UNKNOWN",
+    "Map",
+    "Math",
+    "MediaController",
+    "MediaDevices",
+    "MediaElementAudioSourceNode",
+    "MediaEncryptedEvent",
+    "MediaError",
+    "MediaKeyError",
+    "MediaKeyEvent",
+    "MediaKeyMessageEvent",
+    "MediaKeyNeededEvent",
+    "MediaKeySession",
+    "MediaKeyStatusMap",
+    "MediaKeySystemAccess",
+    "MediaKeys",
+    "MediaList",
+    "MediaQueryList",
+    "MediaQueryListEvent",
+    "MediaRecorder",
+    "MediaSource",
+    "MediaStream",
+    "MediaStreamAudioDestinationNode",
+    "MediaStreamAudioSourceNode",
+    "MediaStreamEvent",
+    "MediaStreamTrack",
+    "MediaStreamTrackEvent",
+    "MessageChannel",
+    "MessageEvent",
+    "MessagePort",
+    "Methods",
+    "MimeType",
+    "MimeTypeArray",
+    "MouseEvent",
+    "MouseScrollEvent",
+    "MozAnimation",
+    "MozAnimationDelay",
+    "MozAnimationDirection",
+    "MozAnimationDuration",
+    "MozAnimationFillMode",
+    "MozAnimationIterationCount",
+    "MozAnimationName",
+    "MozAnimationPlayState",
+    "MozAnimationTimingFunction",
+    "MozAppearance",
+    "MozBackfaceVisibility",
+    "MozBinding",
+    "MozBorderBottomColors",
+    "MozBorderEnd",
+    "MozBorderEndColor",
+    "MozBorderEndStyle",
+    "MozBorderEndWidth",
+    "MozBorderImage",
+    "MozBorderLeftColors",
+    "MozBorderRightColors",
+    "MozBorderStart",
+    "MozBorderStartColor",
+    "MozBorderStartStyle",
+    "MozBorderStartWidth",
+    "MozBorderTopColors",
+    "MozBoxAlign",
+    "MozBoxDirection",
+    "MozBoxFlex",
+    "MozBoxOrdinalGroup",
+    "MozBoxOrient",
+    "MozBoxPack",
+    "MozBoxSizing",
+    "MozCSSKeyframeRule",
+    "MozCSSKeyframesRule",
+    "MozColumnCount",
+    "MozColumnFill",
+    "MozColumnGap",
+    "MozColumnRule",
+    "MozColumnRuleColor",
+    "MozColumnRuleStyle",
+    "MozColumnRuleWidth",
+    "MozColumnWidth",
+    "MozColumns",
+    "MozContactChangeEvent",
+    "MozFloatEdge",
+    "MozFontFeatureSettings",
+    "MozFontLanguageOverride",
+    "MozForceBrokenImageIcon",
+    "MozHyphens",
+    "MozImageRegion",
+    "MozMarginEnd",
+    "MozMarginStart",
+    "MozMmsEvent",
+    "MozMmsMessage",
+    "MozMobileMessageThread",
+    "MozOSXFontSmoothing",
+    "MozOrient",
+    "MozOutlineRadius",
+    "MozOutlineRadiusBottomleft",
+    "MozOutlineRadiusBottomright",
+    "MozOutlineRadiusTopleft",
+    "MozOutlineRadiusTopright",
+    "MozPaddingEnd",
+    "MozPaddingStart",
+    "MozPerspective",
+    "MozPerspectiveOrigin",
+    "MozPowerManager",
+    "MozSettingsEvent",
+    "MozSmsEvent",
+    "MozSmsMessage",
+    "MozStackSizing",
+    "MozTabSize",
+    "MozTextAlignLast",
+    "MozTextDecorationColor",
+    "MozTextDecorationLine",
+    "MozTextDecorationStyle",
+    "MozTextSizeAdjust",
+    "MozTransform",
+    "MozTransformOrigin",
+    "MozTransformStyle",
+    "MozTransition",
+    "MozTransitionDelay",
+    "MozTransitionDuration",
+    "MozTransitionProperty",
+    "MozTransitionTimingFunction",
+    "MozUserFocus",
+    "MozUserInput",
+    "MozUserModify",
+    "MozUserSelect",
+    "MozWindowDragging",
+    "MozWindowShadow",
+    "MutationEvent",
+    "MutationObserver",
+    "MutationRecord",
+    "NAMESPACE_ERR",
+    "NAMESPACE_RULE",
+    "NEAREST",
+    "NEAREST_MIPMAP_LINEAR",
+    "NEAREST_MIPMAP_NEAREST",
+    "NEGATIVE_INFINITY",
+    "NETWORK_EMPTY",
+    "NETWORK_ERR",
+    "NETWORK_IDLE",
+    "NETWORK_LOADED",
+    "NETWORK_LOADING",
+    "NETWORK_NO_SOURCE",
+    "NEVER",
+    "NEW",
+    "NEXT",
+    "NEXT_NO_DUPLICATE",
+    "NICEST",
+    "NODE_AFTER",
+    "NODE_BEFORE",
+    "NODE_BEFORE_AND_AFTER",
+    "NODE_INSIDE",
+    "NONE",
+    "NON_TRANSIENT_ERR",
+    "NOTATION_NODE",
+    "NOTCH",
+    "NOTEQUAL",
+    "NOT_ALLOWED_ERR",
+    "NOT_FOUND_ERR",
+    "NOT_READABLE_ERR",
+    "NOT_SUPPORTED_ERR",
+    "NO_DATA_ALLOWED_ERR",
+    "NO_ERR",
+    "NO_ERROR",
+    "NO_MODIFICATION_ALLOWED_ERR",
+    "NUMBER_TYPE",
+    "NUM_COMPRESSED_TEXTURE_FORMATS",
+    "NaN",
+    "NamedNodeMap",
+    "Navigator",
+    "NearbyLinks",
+    "NetworkInformation",
+    "Node",
+    "NodeFilter",
+    "NodeIterator",
+    "NodeList",
+    "Notation",
+    "Notification",
+    "NotifyPaintEvent",
+    "Number",
+    "NumberFormat",
+    "OBSOLETE",
+    "ONE",
+    "ONE_MINUS_CONSTANT_ALPHA",
+    "ONE_MINUS_CONSTANT_COLOR",
+    "ONE_MINUS_DST_ALPHA",
+    "ONE_MINUS_DST_COLOR",
+    "ONE_MINUS_SRC_ALPHA",
+    "ONE_MINUS_SRC_COLOR",
+    "OPEN",
+    "OPENED",
+    "OPENING",
+    "ORDERED_NODE_ITERATOR_TYPE",
+    "ORDERED_NODE_SNAPSHOT_TYPE",
+    "OUT_OF_MEMORY",
+    "Object",
+    "OfflineAudioCompletionEvent",
+    "OfflineAudioContext",
+    "OfflineResourceList",
+    "Option",
+    "OscillatorNode",
+    "OverflowEvent",
+    "PACK_ALIGNMENT",
+    "PAGE_RULE",
+    "PARSE_ERR",
+    "PATHSEG_ARC_ABS",
+    "PATHSEG_ARC_REL",
+    "PATHSEG_CLOSEPATH",
+    "PATHSEG_CURVETO_CUBIC_ABS",
+    "PATHSEG_CURVETO_CUBIC_REL",
+    "PATHSEG_CURVETO_CUBIC_SMOOTH_ABS",
+    "PATHSEG_CURVETO_CUBIC_SMOOTH_REL",
+    "PATHSEG_CURVETO_QUADRATIC_ABS",
+    "PATHSEG_CURVETO_QUADRATIC_REL",
+    "PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS",
+    "PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL",
+    "PATHSEG_LINETO_ABS",
+    "PATHSEG_LINETO_HORIZONTAL_ABS",
+    "PATHSEG_LINETO_HORIZONTAL_REL",
+    "PATHSEG_LINETO_REL",
+    "PATHSEG_LINETO_VERTICAL_ABS",
+    "PATHSEG_LINETO_VERTICAL_REL",
+    "PATHSEG_MOVETO_ABS",
+    "PATHSEG_MOVETO_REL",
+    "PATHSEG_UNKNOWN",
+    "PATH_EXISTS_ERR",
+    "PEAKING",
+    "PERMISSION_DENIED",
+    "PERSISTENT",
+    "PI",
+    "PLAYING_STATE",
+    "POINTS",
+    "POLYGON_OFFSET_FACTOR",
+    "POLYGON_OFFSET_FILL",
+    "POLYGON_OFFSET_UNITS",
+    "POSITION_UNAVAILABLE",
+    "POSITIVE_INFINITY",
+    "PREV",
+    "PREV_NO_DUPLICATE",
+    "PROCESSING_INSTRUCTION_NODE",
+    "PageChangeEvent",
+    "PageTransitionEvent",
+    "PaintRequest",
+    "PaintRequestList",
+    "PannerNode",
+    "Path2D",
+    "Performance",
+    "PerformanceEntry",
+    "PerformanceMark",
+    "PerformanceMeasure",
+    "PerformanceNavigation",
+    "PerformanceResourceTiming",
+    "PerformanceTiming",
+    "PeriodicWave",
+    "Plugin",
+    "PluginArray",
+    "PopStateEvent",
+    "PopupBlockedEvent",
+    "ProcessingInstruction",
+    "ProgressEvent",
+    "Promise",
+    "PropertyNodeList",
+    "Proxy",
+    "PushManager",
+    "PushSubscription",
+    "Q",
+    "QUOTA_ERR",
+    "QUOTA_EXCEEDED_ERR",
+    "QueryInterface",
+    "READ_ONLY",
+    "READ_ONLY_ERR",
+    "READ_WRITE",
+    "RED_BITS",
+    "REMOVAL",
+    "RENDERBUFFER",
+    "RENDERBUFFER_ALPHA_SIZE",
+    "RENDERBUFFER_BINDING",
+    "RENDERBUFFER_BLUE_SIZE",
+    "RENDERBUFFER_DEPTH_SIZE",
+    "RENDERBUFFER_GREEN_SIZE",
+    "RENDERBUFFER_HEIGHT",
+    "RENDERBUFFER_INTERNAL_FORMAT",
+    "RENDERBUFFER_RED_SIZE",
+    "RENDERBUFFER_STENCIL_SIZE",
+    "RENDERBUFFER_WIDTH",
+    "RENDERER",
+    "RENDERING_INTENT_ABSOLUTE_COLORIMETRIC",
+    "RENDERING_INTENT_AUTO",
+    "RENDERING_INTENT_PERCEPTUAL",
+    "RENDERING_INTENT_RELATIVE_COLORIMETRIC",
+    "RENDERING_INTENT_SATURATION",
+    "RENDERING_INTENT_UNKNOWN",
+    "REPEAT",
+    "REPLACE",
+    "RGB",
+    "RGB565",
+    "RGB5_A1",
+    "RGBA",
+    "RGBA4",
+    "RGBColor",
+    "ROTATION_CLOCKWISE",
+    "ROTATION_COUNTERCLOCKWISE",
+    "RTCDataChannelEvent",
+    "RTCIceCandidate",
+    "RTCPeerConnectionIceEvent",
+    "RTCRtpReceiver",
+    "RTCRtpSender",
+    "RTCSessionDescription",
+    "RTCStatsReport",
+    "RadioNodeList",
+    "Range",
+    "RangeError",
+    "RangeException",
+    "RecordErrorEvent",
+    "Rect",
+    "ReferenceError",
+    "RegExp",
+    "Request",
+    "Response",
+    "SAMPLER_2D",
+    "SAMPLER_CUBE",
+    "SAMPLES",
+    "SAMPLE_ALPHA_TO_COVERAGE",
+    "SAMPLE_BUFFERS",
+    "SAMPLE_COVERAGE",
+    "SAMPLE_COVERAGE_INVERT",
+    "SAMPLE_COVERAGE_VALUE",
+    "SAWTOOTH",
+    "SCHEDULED_STATE",
+    "SCISSOR_BOX",
+    "SCISSOR_TEST",
+    "SCROLL_PAGE_DOWN",
+    "SCROLL_PAGE_UP",
+    "SDP_ANSWER",
+    "SDP_OFFER",
+    "SDP_PRANSWER",
+    "SECURITY_ERR",
+    "SELECT",
+    "SERIALIZE_ERR",
+    "SEVERITY_ERROR",
+    "SEVERITY_FATAL_ERROR",
+    "SEVERITY_WARNING",
+    "SHADER_COMPILER",
+    "SHADER_TYPE",
+    "SHADING_LANGUAGE_VERSION",
+    "SHIFT_MASK",
+    "SHORT",
+    "SHOWING",
+    "SHOW_ALL",
+    "SHOW_ATTRIBUTE",
+    "SHOW_CDATA_SECTION",
+    "SHOW_COMMENT",
+    "SHOW_DOCUMENT",
+    "SHOW_DOCUMENT_FRAGMENT",
+    "SHOW_DOCUMENT_TYPE",
+    "SHOW_ELEMENT",
+    "SHOW_ENTITY",
+    "SHOW_ENTITY_REFERENCE",
+    "SHOW_NOTATION",
+    "SHOW_PROCESSING_INSTRUCTION",
+    "SHOW_TEXT",
+    "SINE",
+    "SOUNDFIELD",
+    "SQLException",
+    "SQRT1_2",
+    "SQRT2",
+    "SQUARE",
+    "SRC_ALPHA",
+    "SRC_ALPHA_SATURATE",
+    "SRC_COLOR",
+    "START_TO_END",
+    "START_TO_START",
+    "STATIC_DRAW",
+    "STENCIL_ATTACHMENT",
+    "STENCIL_BACK_FAIL",
+    "STENCIL_BACK_FUNC",
+    "STENCIL_BACK_PASS_DEPTH_FAIL",
+    "STENCIL_BACK_PASS_DEPTH_PASS",
+    "STENCIL_BACK_REF",
+    "STENCIL_BACK_VALUE_MASK",
+    "STENCIL_BACK_WRITEMASK",
+    "STENCIL_BITS",
+    "STENCIL_BUFFER_BIT",
+    "STENCIL_CLEAR_VALUE",
+    "STENCIL_FAIL",
+    "STENCIL_FUNC",
+    "STENCIL_INDEX",
+    "STENCIL_INDEX8",
+    "STENCIL_PASS_DEPTH_FAIL",
+    "STENCIL_PASS_DEPTH_PASS",
+    "STENCIL_REF",
+    "STENCIL_TEST",
+    "STENCIL_VALUE_MASK",
+    "STENCIL_WRITEMASK",
+    "STREAM_DRAW",
+    "STRING_TYPE",
+    "STYLE_RULE",
+    "SUBPIXEL_BITS",
+    "SUPPORTS_RULE",
+    "SVGAElement",
+    "SVGAltGlyphDefElement",
+    "SVGAltGlyphElement",
+    "SVGAltGlyphItemElement",
+    "SVGAngle",
+    "SVGAnimateColorElement",
+    "SVGAnimateElement",
+    "SVGAnimateMotionElement",
+    "SVGAnimateTransformElement",
+    "SVGAnimatedAngle",
+    "SVGAnimatedBoolean",
+    "SVGAnimatedEnumeration",
+    "SVGAnimatedInteger",
+    "SVGAnimatedLength",
+    "SVGAnimatedLengthList",
+    "SVGAnimatedNumber",
+    "SVGAnimatedNumberList",
+    "SVGAnimatedPreserveAspectRatio",
+    "SVGAnimatedRect",
+    "SVGAnimatedString",
+    "SVGAnimatedTransformList",
+    "SVGAnimationElement",
+    "SVGCircleElement",
+    "SVGClipPathElement",
+    "SVGColor",
+    "SVGComponentTransferFunctionElement",
+    "SVGCursorElement",
+    "SVGDefsElement",
+    "SVGDescElement",
+    "SVGDiscardElement",
+    "SVGDocument",
+    "SVGElement",
+    "SVGElementInstance",
+    "SVGElementInstanceList",
+    "SVGEllipseElement",
+    "SVGException",
+    "SVGFEBlendElement",
+    "SVGFEColorMatrixElement",
+    "SVGFEComponentTransferElement",
+    "SVGFECompositeElement",
+    "SVGFEConvolveMatrixElement",
+    "SVGFEDiffuseLightingElement",
+    "SVGFEDisplacementMapElement",
+    "SVGFEDistantLightElement",
+    "SVGFEDropShadowElement",
+    "SVGFEFloodElement",
+    "SVGFEFuncAElement",
+    "SVGFEFuncBElement",
+    "SVGFEFuncGElement",
+    "SVGFEFuncRElement",
+    "SVGFEGaussianBlurElement",
+    "SVGFEImageElement",
+    "SVGFEMergeElement",
+    "SVGFEMergeNodeElement",
+    "SVGFEMorphologyElement",
+    "SVGFEOffsetElement",
+    "SVGFEPointLightElement",
+    "SVGFESpecularLightingElement",
+    "SVGFESpotLightElement",
+    "SVGFETileElement",
+    "SVGFETurbulenceElement",
+    "SVGFilterElement",
+    "SVGFontElement",
+    "SVGFontFaceElement",
+    "SVGFontFaceFormatElement",
+    "SVGFontFaceNameElement",
+    "SVGFontFaceSrcElement",
+    "SVGFontFaceUriElement",
+    "SVGForeignObjectElement",
+    "SVGGElement",
+    "SVGGeometryElement",
+    "SVGGlyphElement",
+    "SVGGlyphRefElement",
+    "SVGGradientElement",
+    "SVGGraphicsElement",
+    "SVGHKernElement",
+    "SVGImageElement",
+    "SVGLength",
+    "SVGLengthList",
+    "SVGLineElement",
+    "SVGLinearGradientElement",
+    "SVGMPathElement",
+    "SVGMarkerElement",
+    "SVGMaskElement",
+    "SVGMatrix",
+    "SVGMetadataElement",
+    "SVGMissingGlyphElement",
+    "SVGNumber",
+    "SVGNumberList",
+    "SVGPaint",
+    "SVGPathElement",
+    "SVGPathSeg",
+    "SVGPathSegArcAbs",
+    "SVGPathSegArcRel",
+    "SVGPathSegClosePath",
+    "SVGPathSegCurvetoCubicAbs",
+    "SVGPathSegCurvetoCubicRel",
+    "SVGPathSegCurvetoCubicSmoothAbs",
+    "SVGPathSegCurvetoCubicSmoothRel",
+    "SVGPathSegCurvetoQuadraticAbs",
+    "SVGPathSegCurvetoQuadraticRel",
+    "SVGPathSegCurvetoQuadraticSmoothAbs",
+    "SVGPathSegCurvetoQuadraticSmoothRel",
+    "SVGPathSegLinetoAbs",
+    "SVGPathSegLinetoHorizontalAbs",
+    "SVGPathSegLinetoHorizontalRel",
+    "SVGPathSegLinetoRel",
+    "SVGPathSegLinetoVerticalAbs",
+    "SVGPathSegLinetoVerticalRel",
+    "SVGPathSegList",
+    "SVGPathSegMovetoAbs",
+    "SVGPathSegMovetoRel",
+    "SVGPatternElement",
+    "SVGPoint",
+    "SVGPointList",
+    "SVGPolygonElement",
+    "SVGPolylineElement",
+    "SVGPreserveAspectRatio",
+    "SVGRadialGradientElement",
+    "SVGRect",
+    "SVGRectElement",
+    "SVGRenderingIntent",
+    "SVGSVGElement",
+    "SVGScriptElement",
+    "SVGSetElement",
+    "SVGStopElement",
+    "SVGStringList",
+    "SVGStyleElement",
+    "SVGSwitchElement",
+    "SVGSymbolElement",
+    "SVGTRefElement",
+    "SVGTSpanElement",
+    "SVGTextContentElement",
+    "SVGTextElement",
+    "SVGTextPathElement",
+    "SVGTextPositioningElement",
+    "SVGTitleElement",
+    "SVGTransform",
+    "SVGTransformList",
+    "SVGUnitTypes",
+    "SVGUseElement",
+    "SVGVKernElement",
+    "SVGViewElement",
+    "SVGViewSpec",
+    "SVGZoomAndPan",
+    "SVGZoomEvent",
+    "SVG_ANGLETYPE_DEG",
+    "SVG_ANGLETYPE_GRAD",
+    "SVG_ANGLETYPE_RAD",
+    "SVG_ANGLETYPE_UNKNOWN",
+    "SVG_ANGLETYPE_UNSPECIFIED",
+    "SVG_CHANNEL_A",
+    "SVG_CHANNEL_B",
+    "SVG_CHANNEL_G",
+    "SVG_CHANNEL_R",
+    "SVG_CHANNEL_UNKNOWN",
+    "SVG_COLORTYPE_CURRENTCOLOR",
+    "SVG_COLORTYPE_RGBCOLOR",
+    "SVG_COLORTYPE_RGBCOLOR_ICCCOLOR",
+    "SVG_COLORTYPE_UNKNOWN",
+    "SVG_EDGEMODE_DUPLICATE",
+    "SVG_EDGEMODE_NONE",
+    "SVG_EDGEMODE_UNKNOWN",
+    "SVG_EDGEMODE_WRAP",
+    "SVG_FEBLEND_MODE_COLOR",
+    "SVG_FEBLEND_MODE_COLOR_BURN",
+    "SVG_FEBLEND_MODE_COLOR_DODGE",
+    "SVG_FEBLEND_MODE_DARKEN",
+    "SVG_FEBLEND_MODE_DIFFERENCE",
+    "SVG_FEBLEND_MODE_EXCLUSION",
+    "SVG_FEBLEND_MODE_HARD_LIGHT",
+    "SVG_FEBLEND_MODE_HUE",
+    "SVG_FEBLEND_MODE_LIGHTEN",
+    "SVG_FEBLEND_MODE_LUMINOSITY",
+    "SVG_FEBLEND_MODE_MULTIPLY",
+    "SVG_FEBLEND_MODE_NORMAL",
+    "SVG_FEBLEND_MODE_OVERLAY",
+    "SVG_FEBLEND_MODE_SATURATION",
+    "SVG_FEBLEND_MODE_SCREEN",
+    "SVG_FEBLEND_MODE_SOFT_LIGHT",
+    "SVG_FEBLEND_MODE_UNKNOWN",
+    "SVG_FECOLORMATRIX_TYPE_HUEROTATE",
+    "SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA",
+    "SVG_FECOLORMATRIX_TYPE_MATRIX",
+    "SVG_FECOLORMATRIX_TYPE_SATURATE",
+    "SVG_FECOLORMATRIX_TYPE_UNKNOWN",
+    "SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE",
+    "SVG_FECOMPONENTTRANSFER_TYPE_GAMMA",
+    "SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY",
+    "SVG_FECOMPONENTTRANSFER_TYPE_LINEAR",
+    "SVG_FECOMPONENTTRANSFER_TYPE_TABLE",
+    "SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN",
+    "SVG_FECOMPOSITE_OPERATOR_ARITHMETIC",
+    "SVG_FECOMPOSITE_OPERATOR_ATOP",
+    "SVG_FECOMPOSITE_OPERATOR_IN",
+    "SVG_FECOMPOSITE_OPERATOR_OUT",
+    "SVG_FECOMPOSITE_OPERATOR_OVER",
+    "SVG_FECOMPOSITE_OPERATOR_UNKNOWN",
+    "SVG_FECOMPOSITE_OPERATOR_XOR",
+    "SVG_INVALID_VALUE_ERR",
+    "SVG_LENGTHTYPE_CM",
+    "SVG_LENGTHTYPE_EMS",
+    "SVG_LENGTHTYPE_EXS",
+    "SVG_LENGTHTYPE_IN",
+    "SVG_LENGTHTYPE_MM",
+    "SVG_LENGTHTYPE_NUMBER",
+    "SVG_LENGTHTYPE_PC",
+    "SVG_LENGTHTYPE_PERCENTAGE",
+    "SVG_LENGTHTYPE_PT",
+    "SVG_LENGTHTYPE_PX",
+    "SVG_LENGTHTYPE_UNKNOWN",
+    "SVG_MARKERUNITS_STROKEWIDTH",
+    "SVG_MARKERUNITS_UNKNOWN",
+    "SVG_MARKERUNITS_USERSPACEONUSE",
+    "SVG_MARKER_ORIENT_ANGLE",
+    "SVG_MARKER_ORIENT_AUTO",
+    "SVG_MARKER_ORIENT_UNKNOWN",
+    "SVG_MASKTYPE_ALPHA",
+    "SVG_MASKTYPE_LUMINANCE",
+    "SVG_MATRIX_NOT_INVERTABLE",
+    "SVG_MEETORSLICE_MEET",
+    "SVG_MEETORSLICE_SLICE",
+    "SVG_MEETORSLICE_UNKNOWN",
+    "SVG_MORPHOLOGY_OPERATOR_DILATE",
+    "SVG_MORPHOLOGY_OPERATOR_ERODE",
+    "SVG_MORPHOLOGY_OPERATOR_UNKNOWN",
+    "SVG_PAINTTYPE_CURRENTCOLOR",
+    "SVG_PAINTTYPE_NONE",
+    "SVG_PAINTTYPE_RGBCOLOR",
+    "SVG_PAINTTYPE_RGBCOLOR_ICCCOLOR",
+    "SVG_PAINTTYPE_UNKNOWN",
+    "SVG_PAINTTYPE_URI",
+    "SVG_PAINTTYPE_URI_CURRENTCOLOR",
+    "SVG_PAINTTYPE_URI_NONE",
+    "SVG_PAINTTYPE_URI_RGBCOLOR",
+    "SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR",
+    "SVG_PRESERVEASPECTRATIO_NONE",
+    "SVG_PRESERVEASPECTRATIO_UNKNOWN",
+    "SVG_PRESERVEASPECTRATIO_XMAXYMAX",
+    "SVG_PRESERVEASPECTRATIO_XMAXYMID",
+    "SVG_PRESERVEASPECTRATIO_XMAXYMIN",
+    "SVG_PRESERVEASPECTRATIO_XMIDYMAX",
+    "SVG_PRESERVEASPECTRATIO_XMIDYMID",
+    "SVG_PRESERVEASPECTRATIO_XMIDYMIN",
+    "SVG_PRESERVEASPECTRATIO_XMINYMAX",
+    "SVG_PRESERVEASPECTRATIO_XMINYMID",
+    "SVG_PRESERVEASPECTRATIO_XMINYMIN",
+    "SVG_SPREADMETHOD_PAD",
+    "SVG_SPREADMETHOD_REFLECT",
+    "SVG_SPREADMETHOD_REPEAT",
+    "SVG_SPREADMETHOD_UNKNOWN",
+    "SVG_STITCHTYPE_NOSTITCH",
+    "SVG_STITCHTYPE_STITCH",
+    "SVG_STITCHTYPE_UNKNOWN",
+    "SVG_TRANSFORM_MATRIX",
+    "SVG_TRANSFORM_ROTATE",
+    "SVG_TRANSFORM_SCALE",
+    "SVG_TRANSFORM_SKEWX",
+    "SVG_TRANSFORM_SKEWY",
+    "SVG_TRANSFORM_TRANSLATE",
+    "SVG_TRANSFORM_UNKNOWN",
+    "SVG_TURBULENCE_TYPE_FRACTALNOISE",
+    "SVG_TURBULENCE_TYPE_TURBULENCE",
+    "SVG_TURBULENCE_TYPE_UNKNOWN",
+    "SVG_UNIT_TYPE_OBJECTBOUNDINGBOX",
+    "SVG_UNIT_TYPE_UNKNOWN",
+    "SVG_UNIT_TYPE_USERSPACEONUSE",
+    "SVG_WRONG_TYPE_ERR",
+    "SVG_ZOOMANDPAN_DISABLE",
+    "SVG_ZOOMANDPAN_MAGNIFY",
+    "SVG_ZOOMANDPAN_UNKNOWN",
+    "SYNTAX_ERR",
+    "SavedPages",
+    "Screen",
+    "ScreenOrientation",
+    "Script",
+    "ScriptProcessorNode",
+    "ScrollAreaEvent",
+    "SecurityPolicyViolationEvent",
+    "Selection",
+    "ServiceWorker",
+    "ServiceWorkerContainer",
+    "ServiceWorkerRegistration",
+    "SessionDescription",
+    "Set",
+    "ShadowRoot",
+    "SharedWorker",
+    "SimpleGestureEvent",
+    "SpeechSynthesisEvent",
+    "SpeechSynthesisUtterance",
+    "StopIteration",
+    "Storage",
+    "StorageEvent",
+    "String",
+    "StyleSheet",
+    "StyleSheetList",
+    "SubtleCrypto",
+    "Symbol",
+    "SyntaxError",
+    "TEMPORARY",
+    "TEXTPATH_METHODTYPE_ALIGN",
+    "TEXTPATH_METHODTYPE_STRETCH",
+    "TEXTPATH_METHODTYPE_UNKNOWN",
+    "TEXTPATH_SPACINGTYPE_AUTO",
+    "TEXTPATH_SPACINGTYPE_EXACT",
+    "TEXTPATH_SPACINGTYPE_UNKNOWN",
+    "TEXTURE",
+    "TEXTURE0",
+    "TEXTURE1",
+    "TEXTURE10",
+    "TEXTURE11",
+    "TEXTURE12",
+    "TEXTURE13",
+    "TEXTURE14",
+    "TEXTURE15",
+    "TEXTURE16",
+    "TEXTURE17",
+    "TEXTURE18",
+    "TEXTURE19",
+    "TEXTURE2",
+    "TEXTURE20",
+    "TEXTURE21",
+    "TEXTURE22",
+    "TEXTURE23",
+    "TEXTURE24",
+    "TEXTURE25",
+    "TEXTURE26",
+    "TEXTURE27",
+    "TEXTURE28",
+    "TEXTURE29",
+    "TEXTURE3",
+    "TEXTURE30",
+    "TEXTURE31",
+    "TEXTURE4",
+    "TEXTURE5",
+    "TEXTURE6",
+    "TEXTURE7",
+    "TEXTURE8",
+    "TEXTURE9",
+    "TEXTURE_2D",
+    "TEXTURE_BINDING_2D",
+    "TEXTURE_BINDING_CUBE_MAP",
+    "TEXTURE_CUBE_MAP",
+    "TEXTURE_CUBE_MAP_NEGATIVE_X",
+    "TEXTURE_CUBE_MAP_NEGATIVE_Y",
+    "TEXTURE_CUBE_MAP_NEGATIVE_Z",
+    "TEXTURE_CUBE_MAP_POSITIVE_X",
+    "TEXTURE_CUBE_MAP_POSITIVE_Y",
+    "TEXTURE_CUBE_MAP_POSITIVE_Z",
+    "TEXTURE_MAG_FILTER",
+    "TEXTURE_MAX_ANISOTROPY_EXT",
+    "TEXTURE_MIN_FILTER",
+    "TEXTURE_WRAP_S",
+    "TEXTURE_WRAP_T",
+    "TEXT_NODE",
+    "TIMEOUT",
+    "TIMEOUT_ERR",
+    "TOO_LARGE_ERR",
+    "TRANSACTION_INACTIVE_ERR",
+    "TRIANGLE",
+    "TRIANGLES",
+    "TRIANGLE_FAN",
+    "TRIANGLE_STRIP",
+    "TYPE_BACK_FORWARD",
+    "TYPE_ERR",
+    "TYPE_MISMATCH_ERR",
+    "TYPE_NAVIGATE",
+    "TYPE_RELOAD",
+    "TYPE_RESERVED",
+    "Text",
+    "TextDecoder",
+    "TextEncoder",
+    "TextEvent",
+    "TextMetrics",
+    "TextTrack",
+    "TextTrackCue",
+    "TextTrackCueList",
+    "TextTrackList",
+    "TimeEvent",
+    "TimeRanges",
+    "Touch",
+    "TouchEvent",
+    "TouchList",
+    "TrackEvent",
+    "TransitionEvent",
+    "TreeWalker",
+    "TypeError",
+    "UIEvent",
+    "UNCACHED",
+    "UNKNOWN_ERR",
+    "UNKNOWN_RULE",
+    "UNMASKED_RENDERER_WEBGL",
+    "UNMASKED_VENDOR_WEBGL",
+    "UNORDERED_NODE_ITERATOR_TYPE",
+    "UNORDERED_NODE_SNAPSHOT_TYPE",
+    "UNPACK_ALIGNMENT",
+    "UNPACK_COLORSPACE_CONVERSION_WEBGL",
+    "UNPACK_FLIP_Y_WEBGL",
+    "UNPACK_PREMULTIPLY_ALPHA_WEBGL",
+    "UNSCHEDULED_STATE",
+    "UNSENT",
+    "UNSIGNED_BYTE",
+    "UNSIGNED_INT",
+    "UNSIGNED_SHORT",
+    "UNSIGNED_SHORT_4_4_4_4",
+    "UNSIGNED_SHORT_5_5_5_1",
+    "UNSIGNED_SHORT_5_6_5",
+    "UNSPECIFIED_EVENT_TYPE_ERR",
+    "UPDATEREADY",
+    "URIError",
+    "URL",
+    "URLSearchParams",
+    "URLUnencoded",
+    "URL_MISMATCH_ERR",
+    "UTC",
+    "Uint16Array",
+    "Uint32Array",
+    "Uint8Array",
+    "Uint8ClampedArray",
+    "UserMessageHandler",
+    "UserMessageHandlersNamespace",
+    "UserProximityEvent",
+    "VALIDATE_STATUS",
+    "VALIDATION_ERR",
+    "VARIABLES_RULE",
+    "VENDOR",
+    "VERSION",
+    "VERSION_CHANGE",
+    "VERSION_ERR",
+    "VERTEX_ATTRIB_ARRAY_BUFFER_BINDING",
+    "VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE",
+    "VERTEX_ATTRIB_ARRAY_ENABLED",
+    "VERTEX_ATTRIB_ARRAY_NORMALIZED",
+    "VERTEX_ATTRIB_ARRAY_POINTER",
+    "VERTEX_ATTRIB_ARRAY_SIZE",
+    "VERTEX_ATTRIB_ARRAY_STRIDE",
+    "VERTEX_ATTRIB_ARRAY_TYPE",
+    "VERTEX_SHADER",
+    "VERTICAL",
+    "VERTICAL_AXIS",
+    "VER_ERR",
+    "VIEWPORT",
+    "VIEWPORT_RULE",
+    "VTTCue",
+    "VTTRegion",
+    "ValidityState",
+    "VideoStreamTrack",
+    "WEBKIT_FILTER_RULE",
+    "WEBKIT_KEYFRAMES_RULE",
+    "WEBKIT_KEYFRAME_RULE",
+    "WEBKIT_REGION_RULE",
+    "WRONG_DOCUMENT_ERR",
+    "WaveShaperNode",
+    "WeakMap",
+    "WeakSet",
+    "WebGLActiveInfo",
+    "WebGLBuffer",
+    "WebGLContextEvent",
+    "WebGLFramebuffer",
+    "WebGLProgram",
+    "WebGLRenderbuffer",
+    "WebGLRenderingContext",
+    "WebGLShader",
+    "WebGLShaderPrecisionFormat",
+    "WebGLTexture",
+    "WebGLUniformLocation",
+    "WebGLVertexArray",
+    "WebKitAnimationEvent",
+    "WebKitBlobBuilder",
+    "WebKitCSSFilterRule",
+    "WebKitCSSFilterValue",
+    "WebKitCSSKeyframeRule",
+    "WebKitCSSKeyframesRule",
+    "WebKitCSSMatrix",
+    "WebKitCSSRegionRule",
+    "WebKitCSSTransformValue",
+    "WebKitDataCue",
+    "WebKitGamepad",
+    "WebKitMediaKeyError",
+    "WebKitMediaKeyMessageEvent",
+    "WebKitMediaKeySession",
+    "WebKitMediaKeys",
+    "WebKitMediaSource",
+    "WebKitMutationObserver",
+    "WebKitNamespace",
+    "WebKitPlaybackTargetAvailabilityEvent",
+    "WebKitPoint",
+    "WebKitShadowRoot",
+    "WebKitSourceBuffer",
+    "WebKitSourceBufferList",
+    "WebKitTransitionEvent",
+    "WebSocket",
+    "WheelEvent",
+    "Window",
+    "Worker",
+    "XMLDocument",
+    "XMLHttpRequest",
+    "XMLHttpRequestEventTarget",
+    "XMLHttpRequestException",
+    "XMLHttpRequestProgressEvent",
+    "XMLHttpRequestUpload",
+    "XMLSerializer",
+    "XMLStylesheetProcessingInstruction",
+    "XPathEvaluator",
+    "XPathException",
+    "XPathExpression",
+    "XPathNSResolver",
+    "XPathResult",
+    "XSLTProcessor",
+    "ZERO",
+    "_XD0M_",
+    "_YD0M_",
+    "__defineGetter__",
+    "__defineSetter__",
+    "__lookupGetter__",
+    "__lookupSetter__",
+    "__opera",
+    "__proto__",
+    "_browserjsran",
+    "a",
+    "aLink",
+    "abbr",
+    "abort",
+    "abs",
+    "absolute",
+    "acceleration",
+    "accelerationIncludingGravity",
+    "accelerator",
+    "accept",
+    "acceptCharset",
+    "acceptNode",
+    "accessKey",
+    "accessKeyLabel",
+    "accuracy",
+    "acos",
+    "acosh",
+    "action",
+    "actionURL",
+    "active",
+    "activeCues",
+    "activeElement",
+    "activeSourceBuffers",
+    "activeSourceCount",
+    "activeTexture",
+    "add",
+    "addBehavior",
+    "addCandidate",
+    "addColorStop",
+    "addCue",
+    "addElement",
+    "addEventListener",
+    "addFilter",
+    "addFromString",
+    "addFromUri",
+    "addIceCandidate",
+    "addImport",
+    "addListener",
+    "addNamed",
+    "addPageRule",
+    "addPath",
+    "addPointer",
+    "addRange",
+    "addRegion",
+    "addRule",
+    "addSearchEngine",
+    "addSourceBuffer",
+    "addStream",
+    "addTextTrack",
+    "addTrack",
+    "addWakeLockListener",
+    "addedNodes",
+    "additionalName",
+    "additiveSymbols",
+    "addons",
+    "adoptNode",
+    "adr",
+    "advance",
+    "alert",
+    "algorithm",
+    "align",
+    "align-content",
+    "align-items",
+    "align-self",
+    "alignContent",
+    "alignItems",
+    "alignSelf",
+    "alignmentBaseline",
+    "alinkColor",
+    "all",
+    "allSettled",
+    "allowFullscreen",
+    "allowedDirections",
+    "alpha",
+    "alt",
+    "altGraphKey",
+    "altHtml",
+    "altKey",
+    "altLeft",
+    "altitude",
+    "altitudeAccuracy",
+    "amplitude",
+    "ancestorOrigins",
+    "anchor",
+    "anchorNode",
+    "anchorOffset",
+    "anchors",
+    "angle",
+    "animVal",
+    "animate",
+    "animatedInstanceRoot",
+    "animatedNormalizedPathSegList",
+    "animatedPathSegList",
+    "animatedPoints",
+    "animation",
+    "animation-delay",
+    "animation-direction",
+    "animation-duration",
+    "animation-fill-mode",
+    "animation-iteration-count",
+    "animation-name",
+    "animation-play-state",
+    "animation-timing-function",
+    "animationDelay",
+    "animationDirection",
+    "animationDuration",
+    "animationFillMode",
+    "animationIterationCount",
+    "animationName",
+    "animationPlayState",
+    "animationStartTime",
+    "animationTimingFunction",
+    "animationsPaused",
+    "anniversary",
+    "any",
+    "app",
+    "appCodeName",
+    "appMinorVersion",
+    "appName",
+    "appNotifications",
+    "appVersion",
+    "append",
+    "appendBuffer",
+    "appendChild",
+    "appendData",
+    "appendItem",
+    "appendMedium",
+    "appendNamed",
+    "appendRule",
+    "appendStream",
+    "appendWindowEnd",
+    "appendWindowStart",
+    "applets",
+    "applicationCache",
+    "apply",
+    "applyElement",
+    "arc",
+    "arcTo",
+    "archive",
+    "areas",
+    "arguments",
+    "arrayBuffer",
+    "asin",
+    "asinh",
+    "assert",
+    "assign",
+    "async",
+    "atEnd",
+    "atan",
+    "atan2",
+    "atanh",
+    "atob",
+    "attachEvent",
+    "attachShader",
+    "attachShadow",
+    "attachments",
+    "attack",
+    "attrChange",
+    "attrName",
+    "attributeFilter",
+    "attributeName",
+    "attributeNamespace",
+    "attributeOldValue",
+    "attributes",
+    "audioTracks",
+    "autoIncrement",
+    "autobuffer",
+    "autocapitalize",
+    "autocomplete",
+    "autocorrect",
+    "autofocus",
+    "autoplay",
+    "availHeight",
+    "availLeft",
+    "availTop",
+    "availWidth",
+    "availability",
+    "available",
+    "aversion",
+    "axes",
+    "axis",
+    "azimuth",
+    "b",
+    "back",
+    "backface-visibility",
+    "backfaceVisibility",
+    "background",
+    "background-attachment",
+    "background-blend-mode",
+    "background-clip",
+    "background-color",
+    "background-image",
+    "background-origin",
+    "background-position",
+    "background-repeat",
+    "background-size",
+    "backgroundAttachment",
+    "backgroundBlendMode",
+    "backgroundClip",
+    "backgroundColor",
+    "backgroundImage",
+    "backgroundOrigin",
+    "backgroundPosition",
+    "backgroundPositionX",
+    "backgroundPositionY",
+    "backgroundRepeat",
+    "backgroundSize",
+    "badInput",
+    "balance",
+    "baseFrequencyX",
+    "baseFrequencyY",
+    "baseNode",
+    "baseOffset",
+    "baseURI",
+    "baseVal",
+    "baselineShift",
+    "battery",
+    "bday",
+    "beginElement",
+    "beginElementAt",
+    "beginPath",
+    "behavior",
+    "behaviorCookie",
+    "behaviorPart",
+    "behaviorUrns",
+    "beta",
+    "bezierCurveTo",
+    "bgColor",
+    "bgProperties",
+    "bias",
+    "big",
+    "binaryType",
+    "bind",
+    "bindAttribLocation",
+    "bindBuffer",
+    "bindFramebuffer",
+    "bindRenderbuffer",
+    "bindTexture",
+    "blendColor",
+    "blendEquation",
+    "blendEquationSeparate",
+    "blendFunc",
+    "blendFuncSeparate",
+    "blink",
+    "blob",
+    "blockDirection",
+    "blue",
+    "blur",
+    "body",
+    "bodyUsed",
+    "bold",
+    "bookmarks",
+    "booleanValue",
+    "border",
+    "border-bottom",
+    "border-bottom-color",
+    "border-bottom-left-radius",
+    "border-bottom-right-radius",
+    "border-bottom-style",
+    "border-bottom-width",
+    "border-collapse",
+    "border-color",
+    "border-image",
+    "border-image-outset",
+    "border-image-repeat",
+    "border-image-slice",
+    "border-image-source",
+    "border-image-width",
+    "border-left",
+    "border-left-color",
+    "border-left-style",
+    "border-left-width",
+    "border-radius",
+    "border-right",
+    "border-right-color",
+    "border-right-style",
+    "border-right-width",
+    "border-spacing",
+    "border-style",
+    "border-top",
+    "border-top-color",
+    "border-top-left-radius",
+    "border-top-right-radius",
+    "border-top-style",
+    "border-top-width",
+    "border-width",
+    "borderBottom",
+    "borderBottomColor",
+    "borderBottomLeftRadius",
+    "borderBottomRightRadius",
+    "borderBottomStyle",
+    "borderBottomWidth",
+    "borderCollapse",
+    "borderColor",
+    "borderColorDark",
+    "borderColorLight",
+    "borderImage",
+    "borderImageOutset",
+    "borderImageRepeat",
+    "borderImageSlice",
+    "borderImageSource",
+    "borderImageWidth",
+    "borderLeft",
+    "borderLeftColor",
+    "borderLeftStyle",
+    "borderLeftWidth",
+    "borderRadius",
+    "borderRight",
+    "borderRightColor",
+    "borderRightStyle",
+    "borderRightWidth",
+    "borderSpacing",
+    "borderStyle",
+    "borderTop",
+    "borderTopColor",
+    "borderTopLeftRadius",
+    "borderTopRightRadius",
+    "borderTopStyle",
+    "borderTopWidth",
+    "borderWidth",
+    "bottom",
+    "bottomMargin",
+    "bound",
+    "boundElements",
+    "boundingClientRect",
+    "boundingHeight",
+    "boundingLeft",
+    "boundingTop",
+    "boundingWidth",
+    "bounds",
+    "box-decoration-break",
+    "box-shadow",
+    "box-sizing",
+    "boxDecorationBreak",
+    "boxShadow",
+    "boxSizing",
+    "breakAfter",
+    "breakBefore",
+    "breakInside",
+    "browserLanguage",
+    "btoa",
+    "bubbles",
+    "buffer",
+    "bufferData",
+    "bufferDepth",
+    "bufferSize",
+    "bufferSubData",
+    "buffered",
+    "bufferedAmount",
+    "buildID",
+    "buildNumber",
+    "button",
+    "buttonID",
+    "buttons",
+    "byteLength",
+    "byteOffset",
+    "c",
+    "call",
+    "caller",
+    "canBeFormatted",
+    "canBeMounted",
+    "canBeShared",
+    "canHaveChildren",
+    "canHaveHTML",
+    "canPlayType",
+    "cancel",
+    "cancelAnimationFrame",
+    "cancelBubble",
+    "cancelScheduledValues",
+    "cancelable",
+    "candidate",
+    "canvas",
+    "caption",
+    "caption-side",
+    "captionSide",
+    "capture",
+    "captureEvents",
+    "captureStackTrace",
+    "caretPositionFromPoint",
+    "caretRangeFromPoint",
+    "cast",
+    "catch",
+    "category",
+    "cbrt",
+    "cd",
+    "ceil",
+    "cellIndex",
+    "cellPadding",
+    "cellSpacing",
+    "cells",
+    "ch",
+    "chOff",
+    "chain",
+    "challenge",
+    "changedTouches",
+    "channel",
+    "channelCount",
+    "channelCountMode",
+    "channelInterpretation",
+    "char",
+    "charAt",
+    "charCode",
+    "charCodeAt",
+    "charIndex",
+    "characterData",
+    "characterDataOldValue",
+    "characterSet",
+    "charging",
+    "chargingTime",
+    "charset",
+    "checkEnclosure",
+    "checkFramebufferStatus",
+    "checkIntersection",
+    "checkValidity",
+    "checked",
+    "childElementCount",
+    "childList",
+    "childNodes",
+    "children",
+    "chrome",
+    "ciphertext",
+    "cite",
+    "classList",
+    "className",
+    "classid",
+    "clear",
+    "clearAttributes",
+    "clearColor",
+    "clearData",
+    "clearDepth",
+    "clearImmediate",
+    "clearInterval",
+    "clearMarks",
+    "clearMeasures",
+    "clearParameters",
+    "clearRect",
+    "clearResourceTimings",
+    "clearShadow",
+    "clearStencil",
+    "clearTimeout",
+    "clearWatch",
+    "click",
+    "clickCount",
+    "clientHeight",
+    "clientInformation",
+    "clientLeft",
+    "clientRect",
+    "clientRects",
+    "clientTop",
+    "clientWidth",
+    "clientX",
+    "clientY",
+    "clip",
+    "clip-path",
+    "clip-rule",
+    "clipBottom",
+    "clipLeft",
+    "clipPath",
+    "clipPathUnits",
+    "clipRight",
+    "clipRule",
+    "clipTop",
+    "clipboardData",
+    "clone",
+    "cloneContents",
+    "cloneNode",
+    "cloneRange",
+    "close",
+    "closePath",
+    "closed",
+    "closest",
+    "clz",
+    "clz32",
+    "cmp",
+    "code",
+    "codeBase",
+    "codePointAt",
+    "codeType",
+    "colSpan",
+    "collapse",
+    "collapseToEnd",
+    "collapseToStart",
+    "collapsed",
+    "collect",
+    "colno",
+    "color",
+    "color-interpolation",
+    "color-interpolation-filters",
+    "colorDepth",
+    "colorInterpolation",
+    "colorInterpolationFilters",
+    "colorMask",
+    "colorType",
+    "cols",
+    "columnCount",
+    "columnFill",
+    "columnGap",
+    "columnNumber",
+    "columnRule",
+    "columnRuleColor",
+    "columnRuleStyle",
+    "columnRuleWidth",
+    "columnSpan",
+    "columnWidth",
+    "columns",
+    "command",
+    "commitPreferences",
+    "commonAncestorContainer",
+    "compact",
+    "compareBoundaryPoints",
+    "compareDocumentPosition",
+    "compareEndPoints",
+    "compareNode",
+    "comparePoint",
+    "compatMode",
+    "compatible",
+    "compile",
+    "compileShader",
+    "complete",
+    "componentFromPoint",
+    "compositionEndOffset",
+    "compositionStartOffset",
+    "compressedTexImage2D",
+    "compressedTexSubImage2D",
+    "concat",
+    "conditionText",
+    "coneInnerAngle",
+    "coneOuterAngle",
+    "coneOuterGain",
+    "confirm",
+    "confirmComposition",
+    "confirmSiteSpecificTrackingException",
+    "confirmWebWideTrackingException",
+    "connect",
+    "connectEnd",
+    "connectStart",
+    "connected",
+    "connection",
+    "connectionSpeed",
+    "console",
+    "consolidate",
+    "constrictionActive",
+    "constructor",
+    "contactID",
+    "contains",
+    "containsNode",
+    "content",
+    "contentDocument",
+    "contentEditable",
+    "contentOverflow",
+    "contentScriptType",
+    "contentStyleType",
+    "contentType",
+    "contentWindow",
+    "context",
+    "contextMenu",
+    "contextmenu",
+    "continue",
+    "continuous",
+    "control",
+    "controller",
+    "controls",
+    "convertToSpecifiedUnits",
+    "cookie",
+    "cookieEnabled",
+    "coords",
+    "copyFromChannel",
+    "copyTexImage2D",
+    "copyTexSubImage2D",
+    "copyToChannel",
+    "copyWithin",
+    "correspondingElement",
+    "correspondingUseElement",
+    "cos",
+    "cosh",
+    "count",
+    "counter-increment",
+    "counter-reset",
+    "counterIncrement",
+    "counterReset",
+    "cpuClass",
+    "cpuSleepAllowed",
+    "create",
+    "createAnalyser",
+    "createAnswer",
+    "createAttribute",
+    "createAttributeNS",
+    "createBiquadFilter",
+    "createBuffer",
+    "createBufferSource",
+    "createCDATASection",
+    "createCSSStyleSheet",
+    "createCaption",
+    "createChannelMerger",
+    "createChannelSplitter",
+    "createComment",
+    "createContextualFragment",
+    "createControlRange",
+    "createConvolver",
+    "createDTMFSender",
+    "createDataChannel",
+    "createDelay",
+    "createDelayNode",
+    "createDocument",
+    "createDocumentFragment",
+    "createDocumentType",
+    "createDynamicsCompressor",
+    "createElement",
+    "createElementNS",
+    "createEntityReference",
+    "createEvent",
+    "createEventObject",
+    "createExpression",
+    "createFramebuffer",
+    "createFunction",
+    "createGain",
+    "createGainNode",
+    "createHTMLDocument",
+    "createImageBitmap",
+    "createImageData",
+    "createIndex",
+    "createJavaScriptNode",
+    "createLinearGradient",
+    "createMediaElementSource",
+    "createMediaKeys",
+    "createMediaStreamDestination",
+    "createMediaStreamSource",
+    "createMutableFile",
+    "createNSResolver",
+    "createNodeIterator",
+    "createNotification",
+    "createObjectStore",
+    "createObjectURL",
+    "createOffer",
+    "createOscillator",
+    "createPanner",
+    "createPattern",
+    "createPeriodicWave",
+    "createPopup",
+    "createProcessingInstruction",
+    "createProgram",
+    "createRadialGradient",
+    "createRange",
+    "createRangeCollection",
+    "createRenderbuffer",
+    "createSVGAngle",
+    "createSVGLength",
+    "createSVGMatrix",
+    "createSVGNumber",
+    "createSVGPathSegArcAbs",
+    "createSVGPathSegArcRel",
+    "createSVGPathSegClosePath",
+    "createSVGPathSegCurvetoCubicAbs",
+    "createSVGPathSegCurvetoCubicRel",
+    "createSVGPathSegCurvetoCubicSmoothAbs",
+    "createSVGPathSegCurvetoCubicSmoothRel",
+    "createSVGPathSegCurvetoQuadraticAbs",
+    "createSVGPathSegCurvetoQuadraticRel",
+    "createSVGPathSegCurvetoQuadraticSmoothAbs",
+    "createSVGPathSegCurvetoQuadraticSmoothRel",
+    "createSVGPathSegLinetoAbs",
+    "createSVGPathSegLinetoHorizontalAbs",
+    "createSVGPathSegLinetoHorizontalRel",
+    "createSVGPathSegLinetoRel",
+    "createSVGPathSegLinetoVerticalAbs",
+    "createSVGPathSegLinetoVerticalRel",
+    "createSVGPathSegMovetoAbs",
+    "createSVGPathSegMovetoRel",
+    "createSVGPoint",
+    "createSVGRect",
+    "createSVGTransform",
+    "createSVGTransformFromMatrix",
+    "createScriptProcessor",
+    "createSession",
+    "createShader",
+    "createShadowRoot",
+    "createStereoPanner",
+    "createStyleSheet",
+    "createTBody",
+    "createTFoot",
+    "createTHead",
+    "createTextNode",
+    "createTextRange",
+    "createTexture",
+    "createTouch",
+    "createTouchList",
+    "createTreeWalker",
+    "createWaveShaper",
+    "creationTime",
+    "crossOrigin",
+    "crypto",
+    "csi",
+    "cssFloat",
+    "cssRules",
+    "cssText",
+    "cssValueType",
+    "ctrlKey",
+    "ctrlLeft",
+    "cues",
+    "cullFace",
+    "currentNode",
+    "currentPage",
+    "currentScale",
+    "currentScript",
+    "currentSrc",
+    "currentState",
+    "currentStyle",
+    "currentTarget",
+    "currentTime",
+    "currentTranslate",
+    "currentView",
+    "cursor",
+    "curve",
+    "customError",
+    "cx",
+    "cy",
+    "d",
+    "data",
+    "dataFld",
+    "dataFormatAs",
+    "dataPageSize",
+    "dataSrc",
+    "dataTransfer",
+    "database",
+    "dataset",
+    "dateTime",
+    "db",
+    "debug",
+    "debuggerEnabled",
+    "declare",
+    "decode",
+    "decodeAudioData",
+    "decodeURI",
+    "decodeURIComponent",
+    "decodingInfo",
+    "decrypt",
+    "default",
+    "defaultCharset",
+    "defaultChecked",
+    "defaultMuted",
+    "defaultPlaybackRate",
+    "defaultPrevented",
+    "defaultSelected",
+    "defaultStatus",
+    "defaultURL",
+    "defaultValue",
+    "defaultView",
+    "defaultstatus",
+    "defer",
+    "defineMagicFunction",
+    "defineMagicVariable",
+    "defineProperties",
+    "defineProperty",
+    "delayTime",
+    "delete",
+    "deleteBuffer",
+    "deleteCaption",
+    "deleteCell",
+    "deleteContents",
+    "deleteData",
+    "deleteDatabase",
+    "deleteFramebuffer",
+    "deleteFromDocument",
+    "deleteIndex",
+    "deleteMedium",
+    "deleteObjectStore",
+    "deleteProgram",
+    "deleteRenderbuffer",
+    "deleteRow",
+    "deleteRule",
+    "deleteShader",
+    "deleteTFoot",
+    "deleteTHead",
+    "deleteTexture",
+    "deliverChangeRecords",
+    "delivery",
+    "deliveryInfo",
+    "deliveryStatus",
+    "deliveryTimestamp",
+    "delta",
+    "deltaMode",
+    "deltaX",
+    "deltaY",
+    "deltaZ",
+    "depthFunc",
+    "depthMask",
+    "depthRange",
+    "deriveBits",
+    "deriveKey",
+    "description",
+    "deselectAll",
+    "designMode",
+    "destination",
+    "destinationURL",
+    "detach",
+    "detachEvent",
+    "detachShader",
+    "detail",
+    "detune",
+    "devicePixelRatio",
+    "deviceXDPI",
+    "deviceYDPI",
+    "diffuseConstant",
+    "digest",
+    "dimensions",
+    "dir",
+    "dirName",
+    "direction",
+    "dirxml",
+    "disable",
+    "disableVertexAttribArray",
+    "disabled",
+    "dischargingTime",
+    "disconnect",
+    "dispatchEvent",
+    "display",
+    "distanceModel",
+    "divisor",
+    "djsapi",
+    "djsproxy",
+    "doImport",
+    "doNotTrack",
+    "doScroll",
+    "doctype",
+    "document",
+    "documentElement",
+    "documentMode",
+    "documentURI",
+    "dolphin",
+    "dolphinGameCenter",
+    "dolphininfo",
+    "dolphinmeta",
+    "domComplete",
+    "domContentLoadedEventEnd",
+    "domContentLoadedEventStart",
+    "domInteractive",
+    "domLoading",
+    "domain",
+    "domainLookupEnd",
+    "domainLookupStart",
+    "dominant-baseline",
+    "dominantBaseline",
+    "done",
+    "dopplerFactor",
+    "download",
+    "dragDrop",
+    "draggable",
+    "drawArrays",
+    "drawArraysInstancedANGLE",
+    "drawCustomFocusRing",
+    "drawElements",
+    "drawElementsInstancedANGLE",
+    "drawFocusIfNeeded",
+    "drawImage",
+    "drawImageFromRect",
+    "drawSystemFocusRing",
+    "drawingBufferHeight",
+    "drawingBufferWidth",
+    "dropEffect",
+    "droppedVideoFrames",
+    "dropzone",
+    "dump",
+    "duplicate",
+    "duration",
+    "dvname",
+    "dvnum",
+    "dx",
+    "dy",
+    "dynsrc",
+    "e",
+    "edgeMode",
+    "effectAllowed",
+    "elapsedTime",
+    "elementFromPoint",
+    "elements",
+    "elevation",
+    "ellipse",
+    "email",
+    "embeds",
+    "empty",
+    "empty-cells",
+    "emptyCells",
+    "enable",
+    "enableBackground",
+    "enableStyleSheetsForSet",
+    "enableVertexAttribArray",
+    "enabled",
+    "enabledPlugin",
+    "encode",
+    "encodeURI",
+    "encodeURIComponent",
+    "encoding",
+    "encrypt",
+    "enctype",
+    "end",
+    "endContainer",
+    "endElement",
+    "endElementAt",
+    "endOfStream",
+    "endOffset",
+    "endTime",
+    "ended",
+    "endsWith",
+    "entities",
+    "entries",
+    "entryType",
+    "enumerate",
+    "enumerateEditable",
+    "error",
+    "errorCode",
+    "escape",
+    "eval",
+    "evaluate",
+    "event",
+    "eventPhase",
+    "every",
+    "exception",
+    "exec",
+    "execCommand",
+    "execCommandShowHelp",
+    "execScript",
+    "exitFullscreen",
+    "exitPointerLock",
+    "exp",
+    "expand",
+    "expandEntityReferences",
+    "expando",
+    "expansion",
+    "expiryDate",
+    "explicitOriginalTarget",
+    "expm1",
+    "exponent",
+    "exponentialRampToValueAtTime",
+    "exportKey",
+    "extend",
+    "extensions",
+    "extentNode",
+    "extentOffset",
+    "external",
+    "externalResourcesRequired",
+    "extractContents",
+    "extractable",
+    "f",
+    "face",
+    "factoryReset",
+    "fallback",
+    "familyName",
+    "farthestViewportElement",
+    "fastSeek",
+    "fatal",
+    "fetch",
+    "fetchStart",
+    "fftSize",
+    "fgColor",
+    "fileCreatedDate",
+    "fileHandle",
+    "fileModifiedDate",
+    "fileName",
+    "fileSize",
+    "fileUpdatedDate",
+    "filename",
+    "files",
+    "fill",
+    "fill-opacity",
+    "fill-rule",
+    "fillOpacity",
+    "fillRect",
+    "fillRule",
+    "fillStyle",
+    "fillText",
+    "filter",
+    "filterResX",
+    "filterResY",
+    "filterUnits",
+    "filters",
+    "finally",
+    "find",
+    "findIndex",
+    "findRule",
+    "findText",
+    "finish",
+    "fireEvent",
+    "firstChild",
+    "firstElementChild",
+    "firstPage",
+    "fixed",
+    "flex",
+    "flex-basis",
+    "flex-direction",
+    "flex-flow",
+    "flex-grow",
+    "flex-shrink",
+    "flex-wrap",
+    "flexBasis",
+    "flexDirection",
+    "flexFlow",
+    "flexGrow",
+    "flexShrink",
+    "flexWrap",
+    "flipX",
+    "flipY",
+    "float",
+    "flood-color",
+    "flood-opacity",
+    "floodColor",
+    "floodOpacity",
+    "floor",
+    "flush",
+    "focus",
+    "focusNode",
+    "focusOffset",
+    "font",
+    "font-family",
+    "font-feature-settings",
+    "font-kerning",
+    "font-language-override",
+    "font-size",
+    "font-size-adjust",
+    "font-stretch",
+    "font-style",
+    "font-synthesis",
+    "font-variant",
+    "font-variant-alternates",
+    "font-variant-caps",
+    "font-variant-east-asian",
+    "font-variant-ligatures",
+    "font-variant-numeric",
+    "font-variant-position",
+    "font-weight",
+    "fontFamily",
+    "fontFeatureSettings",
+    "fontKerning",
+    "fontLanguageOverride",
+    "fontSize",
+    "fontSizeAdjust",
+    "fontSmoothingEnabled",
+    "fontStretch",
+    "fontStyle",
+    "fontSynthesis",
+    "fontVariant",
+    "fontVariantAlternates",
+    "fontVariantCaps",
+    "fontVariantEastAsian",
+    "fontVariantLigatures",
+    "fontVariantNumeric",
+    "fontVariantPosition",
+    "fontWeight",
+    "fontcolor",
+    "fonts",
+    "fontsize",
+    "for",
+    "forEach",
+    "forceRedraw",
+    "form",
+    "formAction",
+    "formEnctype",
+    "formMethod",
+    "formNoValidate",
+    "formTarget",
+    "format",
+    "formatToParts",
+    "forms",
+    "forward",
+    "fr",
+    "frame",
+    "frameBorder",
+    "frameElement",
+    "frameSpacing",
+    "framebufferRenderbuffer",
+    "framebufferTexture2D",
+    "frames",
+    "freeSpace",
+    "freeze",
+    "frequency",
+    "frequencyBinCount",
+    "from",
+    "fromCharCode",
+    "fromCodePoint",
+    "fromElement",
+    "frontFace",
+    "fround",
+    "fullScreen",
+    "fullscreenElement",
+    "fullscreenEnabled",
+    "fx",
+    "fy",
+    "gain",
+    "gamepad",
+    "gamma",
+    "genderIdentity",
+    "generateKey",
+    "generateMipmap",
+    "generateRequest",
+    "geolocation",
+    "gestureObject",
+    "get",
+    "getActiveAttrib",
+    "getActiveUniform",
+    "getAdjacentText",
+    "getAll",
+    "getAllResponseHeaders",
+    "getAsFile",
+    "getAsString",
+    "getAttachedShaders",
+    "getAttribLocation",
+    "getAttribute",
+    "getAttributeNS",
+    "getAttributeNode",
+    "getAttributeNodeNS",
+    "getAudioTracks",
+    "getBBox",
+    "getBattery",
+    "getBlob",
+    "getBookmark",
+    "getBoundingClientRect",
+    "getBufferParameter",
+    "getByteFrequencyData",
+    "getByteTimeDomainData",
+    "getCSSCanvasContext",
+    "getCTM",
+    "getCandidateWindowClientRect",
+    "getChannelData",
+    "getCharNumAtPosition",
+    "getClientRect",
+    "getClientRects",
+    "getCompositionAlternatives",
+    "getComputedStyle",
+    "getComputedTextLength",
+    "getConfiguration",
+    "getContext",
+    "getContextAttributes",
+    "getCounterValue",
+    "getCueAsHTML",
+    "getCueById",
+    "getCurrentPosition",
+    "getCurrentTime",
+    "getData",
+    "getDatabaseNames",
+    "getDate",
+    "getDay",
+    "getDefaultComputedStyle",
+    "getDestinationInsertionPoints",
+    "getDistributedNodes",
+    "getEditable",
+    "getElementById",
+    "getElementsByClassName",
+    "getElementsByName",
+    "getElementsByTagName",
+    "getElementsByTagNameNS",
+    "getEnclosureList",
+    "getEndPositionOfChar",
+    "getEntries",
+    "getEntriesByName",
+    "getEntriesByType",
+    "getError",
+    "getExtension",
+    "getExtentOfChar",
+    "getFeature",
+    "getFile",
+    "getFloat32",
+    "getFloat64",
+    "getFloatFrequencyData",
+    "getFloatTimeDomainData",
+    "getFloatValue",
+    "getFramebufferAttachmentParameter",
+    "getFrequencyResponse",
+    "getFullYear",
+    "getGamepads",
+    "getHours",
+    "getImageData",
+    "getInt16",
+    "getInt32",
+    "getInt8",
+    "getIntersectionList",
+    "getItem",
+    "getItems",
+    "getKey",
+    "getLineDash",
+    "getLocalStreams",
+    "getMarks",
+    "getMatchedCSSRules",
+    "getMeasures",
+    "getMetadata",
+    "getMilliseconds",
+    "getMinutes",
+    "getModifierState",
+    "getMonth",
+    "getNamedItem",
+    "getNamedItemNS",
+    "getNotifier",
+    "getNumberOfChars",
+    "getOverrideHistoryNavigationMode",
+    "getOverrideStyle",
+    "getOwnPropertyDescriptor",
+    "getOwnPropertyNames",
+    "getOwnPropertySymbols",
+    "getParameter",
+    "getPathSegAtLength",
+    "getPointAtLength",
+    "getPreference",
+    "getPreferenceDefault",
+    "getPresentationAttribute",
+    "getPreventDefault",
+    "getProgramInfoLog",
+    "getProgramParameter",
+    "getPropertyCSSValue",
+    "getPropertyPriority",
+    "getPropertyShorthand",
+    "getPropertyValue",
+    "getPrototypeOf",
+    "getRGBColorValue",
+    "getRandomValues",
+    "getRangeAt",
+    "getReceivers",
+    "getRectValue",
+    "getRegistration",
+    "getRemoteStreams",
+    "getRenderbufferParameter",
+    "getResponseHeader",
+    "getRoot",
+    "getRotationOfChar",
+    "getSVGDocument",
+    "getScreenCTM",
+    "getSeconds",
+    "getSelection",
+    "getSenders",
+    "getShaderInfoLog",
+    "getShaderParameter",
+    "getShaderPrecisionFormat",
+    "getShaderSource",
+    "getSimpleDuration",
+    "getSiteIcons",
+    "getSources",
+    "getSpeculativeParserUrls",
+    "getStartPositionOfChar",
+    "getStartTime",
+    "getStats",
+    "getStorageUpdates",
+    "getStreamById",
+    "getStringValue",
+    "getSubStringLength",
+    "getSubscription",
+    "getSupportedExtensions",
+    "getTexParameter",
+    "getTime",
+    "getTimezoneOffset",
+    "getTotalLength",
+    "getTrackById",
+    "getTracks",
+    "getTransformToElement",
+    "getUTCDate",
+    "getUTCDay",
+    "getUTCFullYear",
+    "getUTCHours",
+    "getUTCMilliseconds",
+    "getUTCMinutes",
+    "getUTCMonth",
+    "getUTCSeconds",
+    "getUint16",
+    "getUint32",
+    "getUint8",
+    "getUniform",
+    "getUniformLocation",
+    "getUserMedia",
+    "getValues",
+    "getVarDate",
+    "getVariableValue",
+    "getVertexAttrib",
+    "getVertexAttribOffset",
+    "getVideoPlaybackQuality",
+    "getVideoTracks",
+    "getWakeLockState",
+    "getYear",
+    "givenName",
+    "global",
+    "globalAlpha",
+    "globalCompositeOperation",
+    "glyphOrientationHorizontal",
+    "glyphOrientationVertical",
+    "glyphRef",
+    "go",
+    "gradientTransform",
+    "gradientUnits",
+    "grammars",
+    "green",
+    "group",
+    "groupCollapsed",
+    "groupEnd",
+    "hardwareConcurrency",
+    "has",
+    "hasAttribute",
+    "hasAttributeNS",
+    "hasAttributes",
+    "hasChildNodes",
+    "hasComposition",
+    "hasExtension",
+    "hasFeature",
+    "hasFocus",
+    "hasLayout",
+    "hasOwnProperty",
+    "hash",
+    "head",
+    "headers",
+    "heading",
+    "height",
+    "hidden",
+    "hide",
+    "hideFocus",
+    "high",
+    "hint",
+    "history",
+    "honorificPrefix",
+    "honorificSuffix",
+    "horizontalOverflow",
+    "host",
+    "hostname",
+    "href",
+    "hreflang",
+    "hspace",
+    "html5TagCheckInerface",
+    "htmlFor",
+    "htmlText",
+    "httpEquiv",
+    "hwTimestamp",
+    "hypot",
+    "iccId",
+    "iceConnectionState",
+    "iceGatheringState",
+    "icon",
+    "id",
+    "identifier",
+    "identity",
+    "ignoreBOM",
+    "ignoreCase",
+    "image-orientation",
+    "image-rendering",
+    "imageOrientation",
+    "imageRendering",
+    "images",
+    "ime-mode",
+    "imeMode",
+    "implementation",
+    "importKey",
+    "importNode",
+    "importStylesheet",
+    "imports",
+    "impp",
+    "imul",
+    "in1",
+    "in2",
+    "inBandMetadataTrackDispatchType",
+    "inRange",
+    "includes",
+    "incremental",
+    "indeterminate",
+    "index",
+    "indexNames",
+    "indexOf",
+    "indexedDB",
+    "inertiaDestinationX",
+    "inertiaDestinationY",
+    "info",
+    "init",
+    "initAnimationEvent",
+    "initBeforeLoadEvent",
+    "initClipboardEvent",
+    "initCloseEvent",
+    "initCommandEvent",
+    "initCompositionEvent",
+    "initCustomEvent",
+    "initData",
+    "initDeviceMotionEvent",
+    "initDeviceOrientationEvent",
+    "initDragEvent",
+    "initErrorEvent",
+    "initEvent",
+    "initFocusEvent",
+    "initGestureEvent",
+    "initHashChangeEvent",
+    "initKeyEvent",
+    "initKeyboardEvent",
+    "initMSManipulationEvent",
+    "initMessageEvent",
+    "initMouseEvent",
+    "initMouseScrollEvent",
+    "initMouseWheelEvent",
+    "initMutationEvent",
+    "initNSMouseEvent",
+    "initOverflowEvent",
+    "initPageEvent",
+    "initPageTransitionEvent",
+    "initPointerEvent",
+    "initPopStateEvent",
+    "initProgressEvent",
+    "initScrollAreaEvent",
+    "initSimpleGestureEvent",
+    "initStorageEvent",
+    "initTextEvent",
+    "initTimeEvent",
+    "initTouchEvent",
+    "initTransitionEvent",
+    "initUIEvent",
+    "initWebKitAnimationEvent",
+    "initWebKitTransitionEvent",
+    "initWebKitWheelEvent",
+    "initWheelEvent",
+    "initialTime",
+    "initialize",
+    "initiatorType",
+    "inner",
+    "innerHTML",
+    "innerHeight",
+    "innerText",
+    "innerWidth",
+    "input",
+    "inputBuffer",
+    "inputEncoding",
+    "inputMethod",
+    "insertAdjacentElement",
+    "insertAdjacentHTML",
+    "insertAdjacentText",
+    "insertBefore",
+    "insertCell",
+    "insertData",
+    "insertItemBefore",
+    "insertNode",
+    "insertRow",
+    "insertRule",
+    "instanceRoot",
+    "intercept",
+    "interimResults",
+    "internalSubset",
+    "intersectsNode",
+    "interval",
+    "invalidIteratorState",
+    "inverse",
+    "invertSelf",
+    "is",
+    "is2D",
+    "isAlternate",
+    "isArray",
+    "isBingCurrentSearchDefault",
+    "isBuffer",
+    "isCandidateWindowVisible",
+    "isChar",
+    "isCollapsed",
+    "isComposing",
+    "isContentEditable",
+    "isContentHandlerRegistered",
+    "isContextLost",
+    "isDefaultNamespace",
+    "isDisabled",
+    "isEnabled",
+    "isEqual",
+    "isEqualNode",
+    "isExtensible",
+    "isFinite",
+    "isFramebuffer",
+    "isFrozen",
+    "isGenerator",
+    "isId",
+    "isInjected",
+    "isInteger",
+    "isMap",
+    "isMultiLine",
+    "isNaN",
+    "isOpen",
+    "isPointInFill",
+    "isPointInPath",
+    "isPointInRange",
+    "isPointInStroke",
+    "isPrefAlternate",
+    "isPrimary",
+    "isProgram",
+    "isPropertyImplicit",
+    "isProtocolHandlerRegistered",
+    "isPrototypeOf",
+    "isRenderbuffer",
+    "isSafeInteger",
+    "isSameNode",
+    "isSealed",
+    "isShader",
+    "isSupported",
+    "isTextEdit",
+    "isTexture",
+    "isTrusted",
+    "isTypeSupported",
+    "isView",
+    "isolation",
+    "italics",
+    "item",
+    "itemId",
+    "itemProp",
+    "itemRef",
+    "itemScope",
+    "itemType",
+    "itemValue",
+    "iterateNext",
+    "iterator",
+    "javaEnabled",
+    "jobTitle",
+    "join",
+    "json",
+    "justify-content",
+    "justifyContent",
+    "k1",
+    "k2",
+    "k3",
+    "k4",
+    "kernelMatrix",
+    "kernelUnitLengthX",
+    "kernelUnitLengthY",
+    "kerning",
+    "key",
+    "keyCode",
+    "keyFor",
+    "keyIdentifier",
+    "keyLightEnabled",
+    "keyLocation",
+    "keyPath",
+    "keySystem",
+    "keyText",
+    "keyUsage",
+    "keys",
+    "keytype",
+    "kind",
+    "knee",
+    "label",
+    "labels",
+    "lang",
+    "language",
+    "languages",
+    "largeArcFlag",
+    "lastChild",
+    "lastElementChild",
+    "lastEventId",
+    "lastIndex",
+    "lastIndexOf",
+    "lastMatch",
+    "lastMessageSubject",
+    "lastMessageType",
+    "lastModified",
+    "lastModifiedDate",
+    "lastPage",
+    "lastParen",
+    "lastState",
+    "lastStyleSheetSet",
+    "latitude",
+    "layerX",
+    "layerY",
+    "layoutFlow",
+    "layoutGrid",
+    "layoutGridChar",
+    "layoutGridLine",
+    "layoutGridMode",
+    "layoutGridType",
+    "lbound",
+    "left",
+    "leftContext",
+    "leftMargin",
+    "length",
+    "lengthAdjust",
+    "lengthComputable",
+    "letter-spacing",
+    "letterSpacing",
+    "level",
+    "lighting-color",
+    "lightingColor",
+    "limitingConeAngle",
+    "line",
+    "line-height",
+    "lineAlign",
+    "lineBreak",
+    "lineCap",
+    "lineDashOffset",
+    "lineHeight",
+    "lineJoin",
+    "lineNumber",
+    "lineTo",
+    "lineWidth",
+    "linearRampToValueAtTime",
+    "lineno",
+    "link",
+    "linkColor",
+    "linkProgram",
+    "links",
+    "list",
+    "list-style",
+    "list-style-image",
+    "list-style-position",
+    "list-style-type",
+    "listStyle",
+    "listStyleImage",
+    "listStylePosition",
+    "listStyleType",
+    "listener",
+    "load",
+    "loadEventEnd",
+    "loadEventStart",
+    "loadTimes",
+    "loaded",
+    "localDescription",
+    "localName",
+    "localStorage",
+    "locale",
+    "localeCompare",
+    "location",
+    "locationbar",
+    "lock",
+    "lockedFile",
+    "log",
+    "log10",
+    "log1p",
+    "log2",
+    "logicalXDPI",
+    "logicalYDPI",
+    "longDesc",
+    "longitude",
+    "lookupNamespaceURI",
+    "lookupPrefix",
+    "loop",
+    "loopEnd",
+    "loopStart",
+    "looping",
+    "low",
+    "lower",
+    "lowerBound",
+    "lowerOpen",
+    "lowsrc",
+    "m11",
+    "m12",
+    "m13",
+    "m14",
+    "m21",
+    "m22",
+    "m23",
+    "m24",
+    "m31",
+    "m32",
+    "m33",
+    "m34",
+    "m41",
+    "m42",
+    "m43",
+    "m44",
+    "manifest",
+    "map",
+    "mapping",
+    "margin",
+    "margin-bottom",
+    "margin-left",
+    "margin-right",
+    "margin-top",
+    "marginBottom",
+    "marginHeight",
+    "marginLeft",
+    "marginRight",
+    "marginTop",
+    "marginWidth",
+    "mark",
+    "marker",
+    "marker-end",
+    "marker-mid",
+    "marker-offset",
+    "marker-start",
+    "markerEnd",
+    "markerHeight",
+    "markerMid",
+    "markerOffset",
+    "markerStart",
+    "markerUnits",
+    "markerWidth",
+    "marks",
+    "mask",
+    "mask-type",
+    "maskContentUnits",
+    "maskType",
+    "maskUnits",
+    "match",
+    "matchMedia",
+    "matchMedium",
+    "matches",
+    "matrix",
+    "matrixTransform",
+    "max",
+    "max-height",
+    "max-width",
+    "maxAlternatives",
+    "maxChannelCount",
+    "maxConnectionsPerServer",
+    "maxDecibels",
+    "maxDistance",
+    "maxHeight",
+    "maxLength",
+    "maxTouchPoints",
+    "maxValue",
+    "maxWidth",
+    "measure",
+    "measureText",
+    "media",
+    "mediaCapabilities",
+    "mediaDevices",
+    "mediaElement",
+    "mediaGroup",
+    "mediaKeys",
+    "mediaText",
+    "meetOrSlice",
+    "memory",
+    "menubar",
+    "mergeAttributes",
+    "message",
+    "messageClass",
+    "messageHandlers",
+    "metaKey",
+    "method",
+    "mimeType",
+    "mimeTypes",
+    "min",
+    "min-height",
+    "min-width",
+    "minDecibels",
+    "minHeight",
+    "minValue",
+    "minWidth",
+    "miterLimit",
+    "mix-blend-mode",
+    "mixBlendMode",
+    "mode",
+    "modify",
+    "mount",
+    "move",
+    "moveBy",
+    "moveEnd",
+    "moveFirst",
+    "moveFocusDown",
+    "moveFocusLeft",
+    "moveFocusRight",
+    "moveFocusUp",
+    "moveNext",
+    "moveRow",
+    "moveStart",
+    "moveTo",
+    "moveToBookmark",
+    "moveToElementText",
+    "moveToPoint",
+    "mozAdd",
+    "mozAnimationStartTime",
+    "mozAnon",
+    "mozApps",
+    "mozAudioCaptured",
+    "mozAudioChannelType",
+    "mozAutoplayEnabled",
+    "mozCancelAnimationFrame",
+    "mozCancelFullScreen",
+    "mozCancelRequestAnimationFrame",
+    "mozCaptureStream",
+    "mozCaptureStreamUntilEnded",
+    "mozClearDataAt",
+    "mozContact",
+    "mozContacts",
+    "mozCreateFileHandle",
+    "mozCurrentTransform",
+    "mozCurrentTransformInverse",
+    "mozCursor",
+    "mozDash",
+    "mozDashOffset",
+    "mozDecodedFrames",
+    "mozExitPointerLock",
+    "mozFillRule",
+    "mozFragmentEnd",
+    "mozFrameDelay",
+    "mozFullScreen",
+    "mozFullScreenElement",
+    "mozFullScreenEnabled",
+    "mozGetAll",
+    "mozGetAllKeys",
+    "mozGetAsFile",
+    "mozGetDataAt",
+    "mozGetMetadata",
+    "mozGetUserMedia",
+    "mozHasAudio",
+    "mozHasItem",
+    "mozHidden",
+    "mozImageSmoothingEnabled",
+    "mozIndexedDB",
+    "mozInnerScreenX",
+    "mozInnerScreenY",
+    "mozInputSource",
+    "mozIsTextField",
+    "mozItem",
+    "mozItemCount",
+    "mozItems",
+    "mozLength",
+    "mozLockOrientation",
+    "mozMatchesSelector",
+    "mozMovementX",
+    "mozMovementY",
+    "mozOpaque",
+    "mozOrientation",
+    "mozPaintCount",
+    "mozPaintedFrames",
+    "mozParsedFrames",
+    "mozPay",
+    "mozPointerLockElement",
+    "mozPresentedFrames",
+    "mozPreservesPitch",
+    "mozPressure",
+    "mozPrintCallback",
+    "mozRTCIceCandidate",
+    "mozRTCPeerConnection",
+    "mozRTCSessionDescription",
+    "mozRemove",
+    "mozRequestAnimationFrame",
+    "mozRequestFullScreen",
+    "mozRequestPointerLock",
+    "mozSetDataAt",
+    "mozSetImageElement",
+    "mozSourceNode",
+    "mozSrcObject",
+    "mozSystem",
+    "mozTCPSocket",
+    "mozTextStyle",
+    "mozTypesAt",
+    "mozUnlockOrientation",
+    "mozUserCancelled",
+    "mozVisibilityState",
+    "msAnimation",
+    "msAnimationDelay",
+    "msAnimationDirection",
+    "msAnimationDuration",
+    "msAnimationFillMode",
+    "msAnimationIterationCount",
+    "msAnimationName",
+    "msAnimationPlayState",
+    "msAnimationStartTime",
+    "msAnimationTimingFunction",
+    "msBackfaceVisibility",
+    "msBlockProgression",
+    "msCSSOMElementFloatMetrics",
+    "msCaching",
+    "msCachingEnabled",
+    "msCancelRequestAnimationFrame",
+    "msCapsLockWarningOff",
+    "msClearImmediate",
+    "msClose",
+    "msContentZoomChaining",
+    "msContentZoomFactor",
+    "msContentZoomLimit",
+    "msContentZoomLimitMax",
+    "msContentZoomLimitMin",
+    "msContentZoomSnap",
+    "msContentZoomSnapPoints",
+    "msContentZoomSnapType",
+    "msContentZooming",
+    "msConvertURL",
+    "msCrypto",
+    "msDoNotTrack",
+    "msElementsFromPoint",
+    "msElementsFromRect",
+    "msExitFullscreen",
+    "msExtendedCode",
+    "msFillRule",
+    "msFirstPaint",
+    "msFlex",
+    "msFlexAlign",
+    "msFlexDirection",
+    "msFlexFlow",
+    "msFlexItemAlign",
+    "msFlexLinePack",
+    "msFlexNegative",
+    "msFlexOrder",
+    "msFlexPack",
+    "msFlexPositive",
+    "msFlexPreferredSize",
+    "msFlexWrap",
+    "msFlowFrom",
+    "msFlowInto",
+    "msFontFeatureSettings",
+    "msFullscreenElement",
+    "msFullscreenEnabled",
+    "msGetInputContext",
+    "msGetRegionContent",
+    "msGetUntransformedBounds",
+    "msGraphicsTrustStatus",
+    "msGridColumn",
+    "msGridColumnAlign",
+    "msGridColumnSpan",
+    "msGridColumns",
+    "msGridRow",
+    "msGridRowAlign",
+    "msGridRowSpan",
+    "msGridRows",
+    "msHidden",
+    "msHighContrastAdjust",
+    "msHyphenateLimitChars",
+    "msHyphenateLimitLines",
+    "msHyphenateLimitZone",
+    "msHyphens",
+    "msImageSmoothingEnabled",
+    "msImeAlign",
+    "msIndexedDB",
+    "msInterpolationMode",
+    "msIsStaticHTML",
+    "msKeySystem",
+    "msKeys",
+    "msLaunchUri",
+    "msLockOrientation",
+    "msManipulationViewsEnabled",
+    "msMatchMedia",
+    "msMatchesSelector",
+    "msMaxTouchPoints",
+    "msOrientation",
+    "msOverflowStyle",
+    "msPerspective",
+    "msPerspectiveOrigin",
+    "msPlayToDisabled",
+    "msPlayToPreferredSourceUri",
+    "msPlayToPrimary",
+    "msPointerEnabled",
+    "msRegionOverflow",
+    "msReleasePointerCapture",
+    "msRequestAnimationFrame",
+    "msRequestFullscreen",
+    "msSaveBlob",
+    "msSaveOrOpenBlob",
+    "msScrollChaining",
+    "msScrollLimit",
+    "msScrollLimitXMax",
+    "msScrollLimitXMin",
+    "msScrollLimitYMax",
+    "msScrollLimitYMin",
+    "msScrollRails",
+    "msScrollSnapPointsX",
+    "msScrollSnapPointsY",
+    "msScrollSnapType",
+    "msScrollSnapX",
+    "msScrollSnapY",
+    "msScrollTranslation",
+    "msSetImmediate",
+    "msSetMediaKeys",
+    "msSetPointerCapture",
+    "msTextCombineHorizontal",
+    "msTextSizeAdjust",
+    "msToBlob",
+    "msTouchAction",
+    "msTouchSelect",
+    "msTraceAsyncCallbackCompleted",
+    "msTraceAsyncCallbackStarting",
+    "msTraceAsyncOperationCompleted",
+    "msTraceAsyncOperationStarting",
+    "msTransform",
+    "msTransformOrigin",
+    "msTransformStyle",
+    "msTransition",
+    "msTransitionDelay",
+    "msTransitionDuration",
+    "msTransitionProperty",
+    "msTransitionTimingFunction",
+    "msUnlockOrientation",
+    "msUpdateAsyncCallbackRelation",
+    "msUserSelect",
+    "msVisibilityState",
+    "msWrapFlow",
+    "msWrapMargin",
+    "msWrapThrough",
+    "msWriteProfilerMark",
+    "msZoom",
+    "msZoomTo",
+    "mt",
+    "multiEntry",
+    "multiSelectionObj",
+    "multiline",
+    "multiple",
+    "multiply",
+    "multiplySelf",
+    "mutableFile",
+    "muted",
+    "n",
+    "name",
+    "nameProp",
+    "namedItem",
+    "namedRecordset",
+    "names",
+    "namespaceURI",
+    "namespaces",
+    "naturalHeight",
+    "naturalWidth",
+    "navigate",
+    "navigation",
+    "navigationMode",
+    "navigationStart",
+    "navigator",
+    "near",
+    "nearestViewportElement",
+    "negative",
+    "netscape",
+    "networkState",
+    "newScale",
+    "newTranslate",
+    "newURL",
+    "newValue",
+    "newValueSpecifiedUnits",
+    "newVersion",
+    "newhome",
+    "next",
+    "nextElementSibling",
+    "nextNode",
+    "nextPage",
+    "nextSibling",
+    "nickname",
+    "noHref",
+    "noResize",
+    "noShade",
+    "noValidate",
+    "noWrap",
+    "nodeName",
+    "nodeType",
+    "nodeValue",
+    "normalize",
+    "normalizedPathSegList",
+    "notationName",
+    "notations",
+    "note",
+    "noteGrainOn",
+    "noteOff",
+    "noteOn",
+    "now",
+    "numOctaves",
+    "number",
+    "numberOfChannels",
+    "numberOfInputs",
+    "numberOfItems",
+    "numberOfOutputs",
+    "numberValue",
+    "oMatchesSelector",
+    "object",
+    "object-fit",
+    "object-position",
+    "objectFit",
+    "objectPosition",
+    "objectStore",
+    "objectStoreNames",
+    "observe",
+    "of",
+    "offscreenBuffering",
+    "offset",
+    "offsetHeight",
+    "offsetLeft",
+    "offsetNode",
+    "offsetParent",
+    "offsetTop",
+    "offsetWidth",
+    "offsetX",
+    "offsetY",
+    "ok",
+    "oldURL",
+    "oldValue",
+    "oldVersion",
+    "olderShadowRoot",
+    "onLine",
+    "onabort",
+    "onactivate",
+    "onactive",
+    "onaddstream",
+    "onaddtrack",
+    "onafterprint",
+    "onafterscriptexecute",
+    "onafterupdate",
+    "onaudioend",
+    "onaudioprocess",
+    "onaudiostart",
+    "onautocomplete",
+    "onautocompleteerror",
+    "onbeforeactivate",
+    "onbeforecopy",
+    "onbeforecut",
+    "onbeforedeactivate",
+    "onbeforeeditfocus",
+    "onbeforepaste",
+    "onbeforeprint",
+    "onbeforescriptexecute",
+    "onbeforeunload",
+    "onbeforeupdate",
+    "onblocked",
+    "onblur",
+    "onbounce",
+    "onboundary",
+    "oncached",
+    "oncancel",
+    "oncandidatewindowhide",
+    "oncandidatewindowshow",
+    "oncandidatewindowupdate",
+    "oncanplay",
+    "oncanplaythrough",
+    "once",
+    "oncellchange",
+    "onchange",
+    "onchargingchange",
+    "onchargingtimechange",
+    "onchecking",
+    "onclick",
+    "onclose",
+    "oncompassneedscalibration",
+    "oncomplete",
+    "oncontextmenu",
+    "oncontrolselect",
+    "oncopy",
+    "oncuechange",
+    "oncut",
+    "ondataavailable",
+    "ondatachannel",
+    "ondatasetchanged",
+    "ondatasetcomplete",
+    "ondblclick",
+    "ondeactivate",
+    "ondevicelight",
+    "ondevicemotion",
+    "ondeviceorientation",
+    "ondeviceproximity",
+    "ondischargingtimechange",
+    "ondisplay",
+    "ondownloading",
+    "ondrag",
+    "ondragend",
+    "ondragenter",
+    "ondragleave",
+    "ondragover",
+    "ondragstart",
+    "ondrop",
+    "ondurationchange",
+    "onemptied",
+    "onencrypted",
+    "onend",
+    "onended",
+    "onenter",
+    "onerror",
+    "onerrorupdate",
+    "onexit",
+    "onfilterchange",
+    "onfinish",
+    "onfocus",
+    "onfocusin",
+    "onfocusout",
+    "onfullscreenchange",
+    "onfullscreenerror",
+    "ongesturechange",
+    "ongestureend",
+    "ongesturestart",
+    "ongotpointercapture",
+    "onhashchange",
+    "onhelp",
+    "onicecandidate",
+    "oniceconnectionstatechange",
+    "oninactive",
+    "oninput",
+    "oninvalid",
+    "onkeydown",
+    "onkeypress",
+    "onkeyup",
+    "onlanguagechange",
+    "onlayoutcomplete",
+    "onlevelchange",
+    "onload",
+    "onloadeddata",
+    "onloadedmetadata",
+    "onloadend",
+    "onloadstart",
+    "onlosecapture",
+    "onlostpointercapture",
+    "only",
+    "onmark",
+    "onmessage",
+    "onmousedown",
+    "onmouseenter",
+    "onmouseleave",
+    "onmousemove",
+    "onmouseout",
+    "onmouseover",
+    "onmouseup",
+    "onmousewheel",
+    "onmove",
+    "onmoveend",
+    "onmovestart",
+    "onmozfullscreenchange",
+    "onmozfullscreenerror",
+    "onmozorientationchange",
+    "onmozpointerlockchange",
+    "onmozpointerlockerror",
+    "onmscontentzoom",
+    "onmsfullscreenchange",
+    "onmsfullscreenerror",
+    "onmsgesturechange",
+    "onmsgesturedoubletap",
+    "onmsgestureend",
+    "onmsgesturehold",
+    "onmsgesturestart",
+    "onmsgesturetap",
+    "onmsgotpointercapture",
+    "onmsinertiastart",
+    "onmslostpointercapture",
+    "onmsmanipulationstatechanged",
+    "onmsneedkey",
+    "onmsorientationchange",
+    "onmspointercancel",
+    "onmspointerdown",
+    "onmspointerenter",
+    "onmspointerhover",
+    "onmspointerleave",
+    "onmspointermove",
+    "onmspointerout",
+    "onmspointerover",
+    "onmspointerup",
+    "onmssitemodejumplistitemremoved",
+    "onmsthumbnailclick",
+    "onnegotiationneeded",
+    "onnomatch",
+    "onnoupdate",
+    "onobsolete",
+    "onoffline",
+    "ononline",
+    "onopen",
+    "onorientationchange",
+    "onpagechange",
+    "onpagehide",
+    "onpageshow",
+    "onpaste",
+    "onpause",
+    "onplay",
+    "onplaying",
+    "onpluginstreamstart",
+    "onpointercancel",
+    "onpointerdown",
+    "onpointerenter",
+    "onpointerleave",
+    "onpointerlockchange",
+    "onpointerlockerror",
+    "onpointermove",
+    "onpointerout",
+    "onpointerover",
+    "onpointerup",
+    "onpopstate",
+    "onprogress",
+    "onpropertychange",
+    "onratechange",
+    "onreadystatechange",
+    "onremovestream",
+    "onremovetrack",
+    "onreset",
+    "onresize",
+    "onresizeend",
+    "onresizestart",
+    "onresourcetimingbufferfull",
+    "onresult",
+    "onresume",
+    "onrowenter",
+    "onrowexit",
+    "onrowsdelete",
+    "onrowsinserted",
+    "onscroll",
+    "onsearch",
+    "onseeked",
+    "onseeking",
+    "onselect",
+    "onselectionchange",
+    "onselectstart",
+    "onshow",
+    "onsignalingstatechange",
+    "onsoundend",
+    "onsoundstart",
+    "onspeechend",
+    "onspeechstart",
+    "onstalled",
+    "onstart",
+    "onstatechange",
+    "onstop",
+    "onstorage",
+    "onstoragecommit",
+    "onsubmit",
+    "onsuccess",
+    "onsuspend",
+    "ontextinput",
+    "ontimeout",
+    "ontimeupdate",
+    "ontoggle",
+    "ontouchcancel",
+    "ontouchend",
+    "ontouchmove",
+    "ontouchstart",
+    "ontransitionend",
+    "onunload",
+    "onupdateready",
+    "onupgradeneeded",
+    "onuserproximity",
+    "onversionchange",
+    "onvoiceschanged",
+    "onvolumechange",
+    "onwaiting",
+    "onwarning",
+    "onwebkitanimationend",
+    "onwebkitanimationiteration",
+    "onwebkitanimationstart",
+    "onwebkitcurrentplaybacktargetiswirelesschanged",
+    "onwebkitfullscreenchange",
+    "onwebkitfullscreenerror",
+    "onwebkitkeyadded",
+    "onwebkitkeyerror",
+    "onwebkitkeymessage",
+    "onwebkitneedkey",
+    "onwebkitorientationchange",
+    "onwebkitplaybacktargetavailabilitychanged",
+    "onwebkitpointerlockchange",
+    "onwebkitpointerlockerror",
+    "onwebkitresourcetimingbufferfull",
+    "onwebkittransitionend",
+    "onwheel",
+    "onzoom",
+    "opacity",
+    "open",
+    "openCursor",
+    "openDatabase",
+    "openKeyCursor",
+    "opener",
+    "opera",
+    "operationType",
+    "operator",
+    "opr",
+    "optimum",
+    "options",
+    "order",
+    "orderX",
+    "orderY",
+    "ordered",
+    "org",
+    "orient",
+    "orientAngle",
+    "orientType",
+    "orientation",
+    "origin",
+    "originalTarget",
+    "orphans",
+    "oscpu",
+    "outerHTML",
+    "outerHeight",
+    "outerText",
+    "outerWidth",
+    "outline",
+    "outline-color",
+    "outline-offset",
+    "outline-style",
+    "outline-width",
+    "outlineColor",
+    "outlineOffset",
+    "outlineStyle",
+    "outlineWidth",
+    "outputBuffer",
+    "overflow",
+    "overflow-x",
+    "overflow-y",
+    "overflowX",
+    "overflowY",
+    "overrideMimeType",
+    "oversample",
+    "ownerDocument",
+    "ownerElement",
+    "ownerNode",
+    "ownerRule",
+    "ownerSVGElement",
+    "owningElement",
+    "p1",
+    "p2",
+    "p3",
+    "p4",
+    "pad",
+    "padding",
+    "padding-bottom",
+    "padding-left",
+    "padding-right",
+    "padding-top",
+    "paddingBottom",
+    "paddingLeft",
+    "paddingRight",
+    "paddingTop",
+    "page",
+    "page-break-after",
+    "page-break-before",
+    "page-break-inside",
+    "pageBreakAfter",
+    "pageBreakBefore",
+    "pageBreakInside",
+    "pageCount",
+    "pageX",
+    "pageXOffset",
+    "pageY",
+    "pageYOffset",
+    "pages",
+    "paint-order",
+    "paintOrder",
+    "paintRequests",
+    "paintType",
+    "palette",
+    "panningModel",
+    "parent",
+    "parentElement",
+    "parentNode",
+    "parentRule",
+    "parentStyleSheet",
+    "parentTextEdit",
+    "parentWindow",
+    "parse",
+    "parseFloat",
+    "parseFromString",
+    "parseInt",
+    "participants",
+    "passive",
+    "password",
+    "pasteHTML",
+    "path",
+    "pathLength",
+    "pathSegList",
+    "pathSegType",
+    "pathSegTypeAsLetter",
+    "pathname",
+    "pattern",
+    "patternContentUnits",
+    "patternMismatch",
+    "patternTransform",
+    "patternUnits",
+    "pause",
+    "pauseAnimations",
+    "pauseOnExit",
+    "paused",
+    "pending",
+    "performance",
+    "permission",
+    "persisted",
+    "personalbar",
+    "perspective",
+    "perspective-origin",
+    "perspectiveOrigin",
+    "phoneticFamilyName",
+    "phoneticGivenName",
+    "photo",
+    "ping",
+    "pitch",
+    "pixelBottom",
+    "pixelDepth",
+    "pixelHeight",
+    "pixelLeft",
+    "pixelRight",
+    "pixelStorei",
+    "pixelTop",
+    "pixelUnitToMillimeterX",
+    "pixelUnitToMillimeterY",
+    "pixelWidth",
+    "placeholder",
+    "platform",
+    "play",
+    "playbackRate",
+    "playbackState",
+    "playbackTime",
+    "played",
+    "plugins",
+    "pluginspage",
+    "pname",
+    "pointer-events",
+    "pointerBeforeReferenceNode",
+    "pointerEnabled",
+    "pointerEvents",
+    "pointerId",
+    "pointerLockElement",
+    "pointerType",
+    "points",
+    "pointsAtX",
+    "pointsAtY",
+    "pointsAtZ",
+    "polygonOffset",
+    "pop",
+    "popupWindowFeatures",
+    "popupWindowName",
+    "popupWindowURI",
+    "port",
+    "port1",
+    "port2",
+    "ports",
+    "posBottom",
+    "posHeight",
+    "posLeft",
+    "posRight",
+    "posTop",
+    "posWidth",
+    "position",
+    "positionAlign",
+    "postError",
+    "postMessage",
+    "poster",
+    "pow",
+    "powerOff",
+    "preMultiplySelf",
+    "precision",
+    "preferredStyleSheetSet",
+    "preferredStylesheetSet",
+    "prefix",
+    "preload",
+    "prepend",
+    "preserveAlpha",
+    "preserveAspectRatio",
+    "preserveAspectRatioString",
+    "pressed",
+    "pressure",
+    "prevValue",
+    "preventDefault",
+    "preventExtensions",
+    "previousElementSibling",
+    "previousNode",
+    "previousPage",
+    "previousScale",
+    "previousSibling",
+    "previousTranslate",
+    "primaryKey",
+    "primitiveType",
+    "primitiveUnits",
+    "principals",
+    "print",
+    "privateKey",
+    "probablySupportsContext",
+    "process",
+    "processIceMessage",
+    "product",
+    "productSub",
+    "profile",
+    "profileEnd",
+    "profiles",
+    "prompt",
+    "properties",
+    "propertyIsEnumerable",
+    "propertyName",
+    "protocol",
+    "protocolLong",
+    "prototype",
+    "pseudoClass",
+    "pseudoElement",
+    "publicId",
+    "publicKey",
+    "published",
+    "push",
+    "pushNotification",
+    "pushState",
+    "put",
+    "putImageData",
+    "quadraticCurveTo",
+    "qualifier",
+    "queryCommandEnabled",
+    "queryCommandIndeterm",
+    "queryCommandState",
+    "queryCommandSupported",
+    "queryCommandText",
+    "queryCommandValue",
+    "querySelector",
+    "querySelectorAll",
+    "quote",
+    "quotes",
+    "r",
+    "r1",
+    "r2",
+    "race",
+    "radiogroup",
+    "radiusX",
+    "radiusY",
+    "random",
+    "range",
+    "rangeCount",
+    "rangeMax",
+    "rangeMin",
+    "rangeOffset",
+    "rangeOverflow",
+    "rangeParent",
+    "rangeUnderflow",
+    "rate",
+    "ratio",
+    "raw",
+    "read",
+    "readAsArrayBuffer",
+    "readAsBinaryString",
+    "readAsBlob",
+    "readAsDataURL",
+    "readAsText",
+    "readOnly",
+    "readPixels",
+    "readReportRequested",
+    "readyState",
+    "reason",
+    "reboot",
+    "receiver",
+    "receivers",
+    "recordNumber",
+    "recordset",
+    "rect",
+    "red",
+    "redirectCount",
+    "redirectEnd",
+    "redirectStart",
+    "reduce",
+    "reduceRight",
+    "reduction",
+    "refDistance",
+    "refX",
+    "refY",
+    "referenceNode",
+    "referrer",
+    "refresh",
+    "region",
+    "regionAnchorX",
+    "regionAnchorY",
+    "regionId",
+    "regions",
+    "register",
+    "registerContentHandler",
+    "registerElement",
+    "registerProtocolHandler",
+    "reject",
+    "rel",
+    "relList",
+    "relatedNode",
+    "relatedTarget",
+    "release",
+    "releaseCapture",
+    "releaseEvents",
+    "releasePointerCapture",
+    "releaseShaderCompiler",
+    "reliable",
+    "reload",
+    "remainingSpace",
+    "remoteDescription",
+    "remove",
+    "removeAllRanges",
+    "removeAttribute",
+    "removeAttributeNS",
+    "removeAttributeNode",
+    "removeBehavior",
+    "removeChild",
+    "removeCue",
+    "removeEventListener",
+    "removeFilter",
+    "removeImport",
+    "removeItem",
+    "removeListener",
+    "removeNamedItem",
+    "removeNamedItemNS",
+    "removeNode",
+    "removeParameter",
+    "removeProperty",
+    "removeRange",
+    "removeRegion",
+    "removeRule",
+    "removeSiteSpecificTrackingException",
+    "removeSourceBuffer",
+    "removeStream",
+    "removeTrack",
+    "removeVariable",
+    "removeWakeLockListener",
+    "removeWebWideTrackingException",
+    "removedNodes",
+    "renderbufferStorage",
+    "renderedBuffer",
+    "renderingMode",
+    "repeat",
+    "replace",
+    "replaceAdjacentText",
+    "replaceChild",
+    "replaceData",
+    "replaceId",
+    "replaceItem",
+    "replaceNode",
+    "replaceState",
+    "replaceTrack",
+    "replaceWholeText",
+    "reportValidity",
+    "requestAnimationFrame",
+    "requestAutocomplete",
+    "requestData",
+    "requestFullscreen",
+    "requestMediaKeySystemAccess",
+    "requestPermission",
+    "requestPointerLock",
+    "requestStart",
+    "requestingWindow",
+    "required",
+    "requiredExtensions",
+    "requiredFeatures",
+    "reset",
+    "resetTransform",
+    "resize",
+    "resizeBy",
+    "resizeTo",
+    "resolve",
+    "response",
+    "responseBody",
+    "responseEnd",
+    "responseStart",
+    "responseText",
+    "responseType",
+    "responseURL",
+    "responseXML",
+    "restore",
+    "result",
+    "resultType",
+    "resume",
+    "returnValue",
+    "rev",
+    "reverse",
+    "reversed",
+    "revocable",
+    "revokeObjectURL",
+    "rgbColor",
+    "right",
+    "rightContext",
+    "rightMargin",
+    "rolloffFactor",
+    "root",
+    "rootElement",
+    "rotate",
+    "rotateAxisAngle",
+    "rotateAxisAngleSelf",
+    "rotateFromVector",
+    "rotateFromVectorSelf",
+    "rotateSelf",
+    "rotation",
+    "rotationRate",
+    "round",
+    "rowIndex",
+    "rowSpan",
+    "rows",
+    "rubyAlign",
+    "rubyOverhang",
+    "rubyPosition",
+    "rules",
+    "runtime",
+    "runtimeStyle",
+    "rx",
+    "ry",
+    "safari",
+    "sampleCoverage",
+    "sampleRate",
+    "sandbox",
+    "save",
+    "scale",
+    "scale3d",
+    "scale3dSelf",
+    "scaleNonUniform",
+    "scaleNonUniformSelf",
+    "scaleSelf",
+    "scheme",
+    "scissor",
+    "scope",
+    "scopeName",
+    "scoped",
+    "screen",
+    "screenBrightness",
+    "screenEnabled",
+    "screenLeft",
+    "screenPixelToMillimeterX",
+    "screenPixelToMillimeterY",
+    "screenTop",
+    "screenX",
+    "screenY",
+    "scripts",
+    "scroll",
+    "scroll-behavior",
+    "scrollAmount",
+    "scrollBehavior",
+    "scrollBy",
+    "scrollByLines",
+    "scrollByPages",
+    "scrollDelay",
+    "scrollHeight",
+    "scrollIntoView",
+    "scrollIntoViewIfNeeded",
+    "scrollLeft",
+    "scrollLeftMax",
+    "scrollMaxX",
+    "scrollMaxY",
+    "scrollTo",
+    "scrollTop",
+    "scrollTopMax",
+    "scrollWidth",
+    "scrollX",
+    "scrollY",
+    "scrollbar3dLightColor",
+    "scrollbarArrowColor",
+    "scrollbarBaseColor",
+    "scrollbarDarkShadowColor",
+    "scrollbarFaceColor",
+    "scrollbarHighlightColor",
+    "scrollbarShadowColor",
+    "scrollbarTrackColor",
+    "scrollbars",
+    "scrolling",
+    "sdp",
+    "sdpMLineIndex",
+    "sdpMid",
+    "seal",
+    "search",
+    "searchBox",
+    "searchBoxJavaBridge_",
+    "searchParams",
+    "sectionRowIndex",
+    "secureConnectionStart",
+    "security",
+    "seed",
+    "seekable",
+    "seeking",
+    "select",
+    "selectAllChildren",
+    "selectNode",
+    "selectNodeContents",
+    "selectNodes",
+    "selectSingleNode",
+    "selectSubString",
+    "selected",
+    "selectedIndex",
+    "selectedOptions",
+    "selectedStyleSheetSet",
+    "selectedStylesheetSet",
+    "selection",
+    "selectionDirection",
+    "selectionEnd",
+    "selectionStart",
+    "selector",
+    "selectorText",
+    "self",
+    "send",
+    "sendAsBinary",
+    "sendBeacon",
+    "sender",
+    "sentTimestamp",
+    "separator",
+    "serializeToString",
+    "serviceWorker",
+    "sessionId",
+    "sessionStorage",
+    "set",
+    "setActive",
+    "setAlpha",
+    "setAttribute",
+    "setAttributeNS",
+    "setAttributeNode",
+    "setAttributeNodeNS",
+    "setBaseAndExtent",
+    "setBingCurrentSearchDefault",
+    "setCapture",
+    "setColor",
+    "setCompositeOperation",
+    "setCurrentTime",
+    "setCustomValidity",
+    "setData",
+    "setDate",
+    "setDragImage",
+    "setEnd",
+    "setEndAfter",
+    "setEndBefore",
+    "setEndPoint",
+    "setFillColor",
+    "setFilterRes",
+    "setFloat32",
+    "setFloat64",
+    "setFloatValue",
+    "setFullYear",
+    "setHours",
+    "setImmediate",
+    "setInt16",
+    "setInt32",
+    "setInt8",
+    "setInterval",
+    "setItem",
+    "setLineCap",
+    "setLineDash",
+    "setLineJoin",
+    "setLineWidth",
+    "setLocalDescription",
+    "setMatrix",
+    "setMatrixValue",
+    "setMediaKeys",
+    "setMilliseconds",
+    "setMinutes",
+    "setMiterLimit",
+    "setMonth",
+    "setNamedItem",
+    "setNamedItemNS",
+    "setNonUserCodeExceptions",
+    "setOrientToAngle",
+    "setOrientToAuto",
+    "setOrientation",
+    "setOverrideHistoryNavigationMode",
+    "setPaint",
+    "setParameter",
+    "setPeriodicWave",
+    "setPointerCapture",
+    "setPosition",
+    "setPreference",
+    "setProperty",
+    "setPrototypeOf",
+    "setRGBColor",
+    "setRGBColorICCColor",
+    "setRadius",
+    "setRangeText",
+    "setRemoteDescription",
+    "setRequestHeader",
+    "setResizable",
+    "setResourceTimingBufferSize",
+    "setRotate",
+    "setScale",
+    "setSeconds",
+    "setSelectionRange",
+    "setServerCertificate",
+    "setShadow",
+    "setSkewX",
+    "setSkewY",
+    "setStart",
+    "setStartAfter",
+    "setStartBefore",
+    "setStdDeviation",
+    "setStringValue",
+    "setStrokeColor",
+    "setSuggestResult",
+    "setTargetAtTime",
+    "setTargetValueAtTime",
+    "setTime",
+    "setTimeout",
+    "setTransform",
+    "setTranslate",
+    "setUTCDate",
+    "setUTCFullYear",
+    "setUTCHours",
+    "setUTCMilliseconds",
+    "setUTCMinutes",
+    "setUTCMonth",
+    "setUTCSeconds",
+    "setUint16",
+    "setUint32",
+    "setUint8",
+    "setUri",
+    "setValueAtTime",
+    "setValueCurveAtTime",
+    "setVariable",
+    "setVelocity",
+    "setVersion",
+    "setYear",
+    "settingName",
+    "settingValue",
+    "sex",
+    "shaderSource",
+    "shadowBlur",
+    "shadowColor",
+    "shadowOffsetX",
+    "shadowOffsetY",
+    "shadowRoot",
+    "shape",
+    "shape-rendering",
+    "shapeRendering",
+    "sheet",
+    "shift",
+    "shiftKey",
+    "shiftLeft",
+    "show",
+    "showHelp",
+    "showModal",
+    "showModalDialog",
+    "showModelessDialog",
+    "showNotification",
+    "sidebar",
+    "sign",
+    "signalingState",
+    "sin",
+    "singleNodeValue",
+    "sinh",
+    "size",
+    "sizeToContent",
+    "sizes",
+    "skewX",
+    "skewXSelf",
+    "skewY",
+    "skewYSelf",
+    "slice",
+    "slope",
+    "small",
+    "smil",
+    "smooth",
+    "smoothingTimeConstant",
+    "snapToLines",
+    "snapshotItem",
+    "snapshotLength",
+    "some",
+    "sort",
+    "source",
+    "sourceBuffer",
+    "sourceBuffers",
+    "sourceIndex",
+    "spacing",
+    "span",
+    "speakAs",
+    "speaking",
+    "specified",
+    "specularConstant",
+    "specularExponent",
+    "speechSynthesis",
+    "speed",
+    "speedOfSound",
+    "spellcheck",
+    "splice",
+    "split",
+    "splitText",
+    "spreadMethod",
+    "sqrt",
+    "src",
+    "srcElement",
+    "srcFilter",
+    "srcUrn",
+    "srcdoc",
+    "srclang",
+    "srcset",
+    "stack",
+    "stackTraceLimit",
+    "stacktrace",
+    "standalone",
+    "standby",
+    "start",
+    "startContainer",
+    "startIce",
+    "startOffset",
+    "startRendering",
+    "startTime",
+    "startsWith",
+    "state",
+    "status",
+    "statusMessage",
+    "statusText",
+    "statusbar",
+    "stdDeviationX",
+    "stdDeviationY",
+    "stencilFunc",
+    "stencilFuncSeparate",
+    "stencilMask",
+    "stencilMaskSeparate",
+    "stencilOp",
+    "stencilOpSeparate",
+    "step",
+    "stepDown",
+    "stepMismatch",
+    "stepUp",
+    "sticky",
+    "stitchTiles",
+    "stop",
+    "stop-color",
+    "stop-opacity",
+    "stopColor",
+    "stopImmediatePropagation",
+    "stopOpacity",
+    "stopPropagation",
+    "storageArea",
+    "storageName",
+    "storageStatus",
+    "storeSiteSpecificTrackingException",
+    "storeWebWideTrackingException",
+    "stpVersion",
+    "stream",
+    "strike",
+    "stringValue",
+    "stringify",
+    "stroke",
+    "stroke-dasharray",
+    "stroke-dashoffset",
+    "stroke-linecap",
+    "stroke-linejoin",
+    "stroke-miterlimit",
+    "stroke-opacity",
+    "stroke-width",
+    "strokeDasharray",
+    "strokeDashoffset",
+    "strokeLinecap",
+    "strokeLinejoin",
+    "strokeMiterlimit",
+    "strokeOpacity",
+    "strokeRect",
+    "strokeStyle",
+    "strokeText",
+    "strokeWidth",
+    "style",
+    "styleFloat",
+    "styleMedia",
+    "styleSheet",
+    "styleSheetSets",
+    "styleSheets",
+    "sub",
+    "subarray",
+    "subject",
+    "submit",
+    "subscribe",
+    "substr",
+    "substring",
+    "substringData",
+    "subtle",
+    "subtree",
+    "suffix",
+    "suffixes",
+    "summary",
+    "sup",
+    "supports",
+    "surfaceScale",
+    "surroundContents",
+    "suspend",
+    "suspendRedraw",
+    "swapCache",
+    "swapNode",
+    "sweepFlag",
+    "symbols",
+    "system",
+    "systemCode",
+    "systemId",
+    "systemLanguage",
+    "systemXDPI",
+    "systemYDPI",
+    "tBodies",
+    "tFoot",
+    "tHead",
+    "tabIndex",
+    "table",
+    "table-layout",
+    "tableLayout",
+    "tableValues",
+    "tag",
+    "tagName",
+    "tagUrn",
+    "tags",
+    "taintEnabled",
+    "takeRecords",
+    "tan",
+    "tanh",
+    "target",
+    "targetElement",
+    "targetTouches",
+    "targetX",
+    "targetY",
+    "tel",
+    "terminate",
+    "test",
+    "texImage2D",
+    "texParameterf",
+    "texParameteri",
+    "texSubImage2D",
+    "text",
+    "text-align",
+    "text-anchor",
+    "text-decoration",
+    "text-decoration-color",
+    "text-decoration-line",
+    "text-decoration-style",
+    "text-indent",
+    "text-overflow",
+    "text-rendering",
+    "text-shadow",
+    "text-transform",
+    "textAlign",
+    "textAlignLast",
+    "textAnchor",
+    "textAutospace",
+    "textBaseline",
+    "textContent",
+    "textDecoration",
+    "textDecorationBlink",
+    "textDecorationColor",
+    "textDecorationLine",
+    "textDecorationLineThrough",
+    "textDecorationNone",
+    "textDecorationOverline",
+    "textDecorationStyle",
+    "textDecorationUnderline",
+    "textIndent",
+    "textJustify",
+    "textJustifyTrim",
+    "textKashida",
+    "textKashidaSpace",
+    "textLength",
+    "textOverflow",
+    "textRendering",
+    "textShadow",
+    "textTracks",
+    "textTransform",
+    "textUnderlinePosition",
+    "then",
+    "threadId",
+    "threshold",
+    "tiltX",
+    "tiltY",
+    "time",
+    "timeEnd",
+    "timeStamp",
+    "timeout",
+    "timestamp",
+    "timestampOffset",
+    "timing",
+    "title",
+    "toArray",
+    "toBlob",
+    "toDataURL",
+    "toDateString",
+    "toElement",
+    "toExponential",
+    "toFixed",
+    "toFloat32Array",
+    "toFloat64Array",
+    "toGMTString",
+    "toISOString",
+    "toJSON",
+    "toLocaleDateString",
+    "toLocaleFormat",
+    "toLocaleLowerCase",
+    "toLocaleString",
+    "toLocaleTimeString",
+    "toLocaleUpperCase",
+    "toLowerCase",
+    "toMethod",
+    "toPrecision",
+    "toSdp",
+    "toSource",
+    "toStaticHTML",
+    "toString",
+    "toStringTag",
+    "toTimeString",
+    "toUTCString",
+    "toUpperCase",
+    "toggle",
+    "toggleLongPressEnabled",
+    "tooLong",
+    "toolbar",
+    "top",
+    "topMargin",
+    "total",
+    "totalFrameDelay",
+    "totalVideoFrames",
+    "touchAction",
+    "touches",
+    "trace",
+    "track",
+    "transaction",
+    "transactions",
+    "transform",
+    "transform-origin",
+    "transform-style",
+    "transformOrigin",
+    "transformPoint",
+    "transformString",
+    "transformStyle",
+    "transformToDocument",
+    "transformToFragment",
+    "transition",
+    "transition-delay",
+    "transition-duration",
+    "transition-property",
+    "transition-timing-function",
+    "transitionDelay",
+    "transitionDuration",
+    "transitionProperty",
+    "transitionTimingFunction",
+    "translate",
+    "translateSelf",
+    "translationX",
+    "translationY",
+    "trim",
+    "trimLeft",
+    "trimRight",
+    "trueSpeed",
+    "trunc",
+    "truncate",
+    "type",
+    "typeDetail",
+    "typeMismatch",
+    "typeMustMatch",
+    "types",
+    "ubound",
+    "undefined",
+    "unescape",
+    "uneval",
+    "unicode-bidi",
+    "unicodeBidi",
+    "uniform1f",
+    "uniform1fv",
+    "uniform1i",
+    "uniform1iv",
+    "uniform2f",
+    "uniform2fv",
+    "uniform2i",
+    "uniform2iv",
+    "uniform3f",
+    "uniform3fv",
+    "uniform3i",
+    "uniform3iv",
+    "uniform4f",
+    "uniform4fv",
+    "uniform4i",
+    "uniform4iv",
+    "uniformMatrix2fv",
+    "uniformMatrix3fv",
+    "uniformMatrix4fv",
+    "unique",
+    "uniqueID",
+    "uniqueNumber",
+    "unitType",
+    "units",
+    "unloadEventEnd",
+    "unloadEventStart",
+    "unlock",
+    "unmount",
+    "unobserve",
+    "unpause",
+    "unpauseAnimations",
+    "unreadCount",
+    "unregister",
+    "unregisterContentHandler",
+    "unregisterProtocolHandler",
+    "unscopables",
+    "unselectable",
+    "unshift",
+    "unsubscribe",
+    "unsuspendRedraw",
+    "unsuspendRedrawAll",
+    "unwatch",
+    "unwrapKey",
+    "update",
+    "updateCommands",
+    "updateIce",
+    "updateInterval",
+    "updateSettings",
+    "updated",
+    "updating",
+    "upload",
+    "upper",
+    "upperBound",
+    "upperOpen",
+    "uri",
+    "url",
+    "urn",
+    "urns",
+    "usages",
+    "useCurrentView",
+    "useMap",
+    "useProgram",
+    "usedSpace",
+    "userAgent",
+    "userLanguage",
+    "username",
+    "v8BreakIterator",
+    "vAlign",
+    "vLink",
+    "valid",
+    "validateProgram",
+    "validationMessage",
+    "validity",
+    "value",
+    "valueAsDate",
+    "valueAsNumber",
+    "valueAsString",
+    "valueInSpecifiedUnits",
+    "valueMissing",
+    "valueOf",
+    "valueText",
+    "valueType",
+    "values",
+    "vector-effect",
+    "vectorEffect",
+    "velocityAngular",
+    "velocityExpansion",
+    "velocityX",
+    "velocityY",
+    "vendor",
+    "vendorSub",
+    "verify",
+    "version",
+    "vertexAttrib1f",
+    "vertexAttrib1fv",
+    "vertexAttrib2f",
+    "vertexAttrib2fv",
+    "vertexAttrib3f",
+    "vertexAttrib3fv",
+    "vertexAttrib4f",
+    "vertexAttrib4fv",
+    "vertexAttribDivisorANGLE",
+    "vertexAttribPointer",
+    "vertical",
+    "vertical-align",
+    "verticalAlign",
+    "verticalOverflow",
+    "vibrate",
+    "videoHeight",
+    "videoTracks",
+    "videoWidth",
+    "view",
+    "viewBox",
+    "viewBoxString",
+    "viewTarget",
+    "viewTargetString",
+    "viewport",
+    "viewportAnchorX",
+    "viewportAnchorY",
+    "viewportElement",
+    "visibility",
+    "visibilityState",
+    "visible",
+    "vlinkColor",
+    "voice",
+    "volume",
+    "vrml",
+    "vspace",
+    "w",
+    "wand",
+    "warn",
+    "wasClean",
+    "watch",
+    "watchPosition",
+    "webdriver",
+    "webkitAddKey",
+    "webkitAnimation",
+    "webkitAnimationDelay",
+    "webkitAnimationDirection",
+    "webkitAnimationDuration",
+    "webkitAnimationFillMode",
+    "webkitAnimationIterationCount",
+    "webkitAnimationName",
+    "webkitAnimationPlayState",
+    "webkitAnimationTimingFunction",
+    "webkitAppearance",
+    "webkitAudioContext",
+    "webkitAudioDecodedByteCount",
+    "webkitAudioPannerNode",
+    "webkitBackfaceVisibility",
+    "webkitBackground",
+    "webkitBackgroundAttachment",
+    "webkitBackgroundClip",
+    "webkitBackgroundColor",
+    "webkitBackgroundImage",
+    "webkitBackgroundOrigin",
+    "webkitBackgroundPosition",
+    "webkitBackgroundPositionX",
+    "webkitBackgroundPositionY",
+    "webkitBackgroundRepeat",
+    "webkitBackgroundSize",
+    "webkitBackingStorePixelRatio",
+    "webkitBorderImage",
+    "webkitBorderImageOutset",
+    "webkitBorderImageRepeat",
+    "webkitBorderImageSlice",
+    "webkitBorderImageSource",
+    "webkitBorderImageWidth",
+    "webkitBoxAlign",
+    "webkitBoxDirection",
+    "webkitBoxFlex",
+    "webkitBoxOrdinalGroup",
+    "webkitBoxOrient",
+    "webkitBoxPack",
+    "webkitBoxSizing",
+    "webkitCancelAnimationFrame",
+    "webkitCancelFullScreen",
+    "webkitCancelKeyRequest",
+    "webkitCancelRequestAnimationFrame",
+    "webkitClearResourceTimings",
+    "webkitClosedCaptionsVisible",
+    "webkitConvertPointFromNodeToPage",
+    "webkitConvertPointFromPageToNode",
+    "webkitCreateShadowRoot",
+    "webkitCurrentFullScreenElement",
+    "webkitCurrentPlaybackTargetIsWireless",
+    "webkitDirectionInvertedFromDevice",
+    "webkitDisplayingFullscreen",
+    "webkitEnterFullScreen",
+    "webkitEnterFullscreen",
+    "webkitExitFullScreen",
+    "webkitExitFullscreen",
+    "webkitExitPointerLock",
+    "webkitFullScreenKeyboardInputAllowed",
+    "webkitFullscreenElement",
+    "webkitFullscreenEnabled",
+    "webkitGenerateKeyRequest",
+    "webkitGetAsEntry",
+    "webkitGetDatabaseNames",
+    "webkitGetEntries",
+    "webkitGetEntriesByName",
+    "webkitGetEntriesByType",
+    "webkitGetFlowByName",
+    "webkitGetGamepads",
+    "webkitGetImageDataHD",
+    "webkitGetNamedFlows",
+    "webkitGetRegionFlowRanges",
+    "webkitGetUserMedia",
+    "webkitHasClosedCaptions",
+    "webkitHidden",
+    "webkitIDBCursor",
+    "webkitIDBDatabase",
+    "webkitIDBDatabaseError",
+    "webkitIDBDatabaseException",
+    "webkitIDBFactory",
+    "webkitIDBIndex",
+    "webkitIDBKeyRange",
+    "webkitIDBObjectStore",
+    "webkitIDBRequest",
+    "webkitIDBTransaction",
+    "webkitImageSmoothingEnabled",
+    "webkitIndexedDB",
+    "webkitInitMessageEvent",
+    "webkitIsFullScreen",
+    "webkitKeys",
+    "webkitLineDashOffset",
+    "webkitLockOrientation",
+    "webkitMatchesSelector",
+    "webkitMediaStream",
+    "webkitNotifications",
+    "webkitOfflineAudioContext",
+    "webkitOrientation",
+    "webkitPeerConnection00",
+    "webkitPersistentStorage",
+    "webkitPointerLockElement",
+    "webkitPostMessage",
+    "webkitPreservesPitch",
+    "webkitPutImageDataHD",
+    "webkitRTCPeerConnection",
+    "webkitRegionOverset",
+    "webkitRequestAnimationFrame",
+    "webkitRequestFileSystem",
+    "webkitRequestFullScreen",
+    "webkitRequestFullscreen",
+    "webkitRequestPointerLock",
+    "webkitResolveLocalFileSystemURL",
+    "webkitSetMediaKeys",
+    "webkitSetResourceTimingBufferSize",
+    "webkitShadowRoot",
+    "webkitShowPlaybackTargetPicker",
+    "webkitSlice",
+    "webkitSpeechGrammar",
+    "webkitSpeechGrammarList",
+    "webkitSpeechRecognition",
+    "webkitSpeechRecognitionError",
+    "webkitSpeechRecognitionEvent",
+    "webkitStorageInfo",
+    "webkitSupportsFullscreen",
+    "webkitTemporaryStorage",
+    "webkitTextSizeAdjust",
+    "webkitTransform",
+    "webkitTransformOrigin",
+    "webkitTransition",
+    "webkitTransitionDelay",
+    "webkitTransitionDuration",
+    "webkitTransitionProperty",
+    "webkitTransitionTimingFunction",
+    "webkitURL",
+    "webkitUnlockOrientation",
+    "webkitUserSelect",
+    "webkitVideoDecodedByteCount",
+    "webkitVisibilityState",
+    "webkitWirelessVideoPlaybackDisabled",
+    "webkitdropzone",
+    "webstore",
+    "weight",
+    "whatToShow",
+    "wheelDelta",
+    "wheelDeltaX",
+    "wheelDeltaY",
+    "which",
+    "white-space",
+    "whiteSpace",
+    "wholeText",
+    "widows",
+    "width",
+    "will-change",
+    "willChange",
+    "willValidate",
+    "window",
+    "withCredentials",
+    "word-break",
+    "word-spacing",
+    "word-wrap",
+    "wordBreak",
+    "wordSpacing",
+    "wordWrap",
+    "wrap",
+    "wrapKey",
+    "write",
+    "writeln",
+    "writingMode",
+    "x",
+    "x1",
+    "x2",
+    "xChannelSelector",
+    "xmlEncoding",
+    "xmlStandalone",
+    "xmlVersion",
+    "xmlbase",
+    "xmllang",
+    "xmlspace",
+    "y",
+    "y1",
+    "y2",
+    "yChannelSelector",
+    "yandex",
+    "z",
+    "z-index",
+    "zIndex",
+    "zoom",
+    "zoomAndPan",
+    "zoomRectScreen"
+];
diff --git a/node_modules/terser/tools/exit.js b/node_modules/terser/tools/exit.js
new file mode 100644
index 0000000..17048d8
--- /dev/null
+++ b/node_modules/terser/tools/exit.js
@@ -0,0 +1,15 @@
+// workaround for tty output truncation upon process.exit()
+var exit = process.exit;
+process.exit = function() {
+    var args = [].slice.call(arguments);
+    process.once("uncaughtException", function() {
+        (function callback() {
+            if (process.stdout.bufferSize || process.stderr.bufferSize) {
+                setImmediate(callback);
+            } else {
+                exit.apply(process, args);
+            }
+        })();
+    });
+    throw exit;
+};
diff --git a/node_modules/terser/tools/node.js b/node_modules/terser/tools/node.js
new file mode 100644
index 0000000..b14580d
--- /dev/null
+++ b/node_modules/terser/tools/node.js
@@ -0,0 +1,19 @@
+import { minify } from "../lib/minify";
+
+export function default_options() {
+    const defs = {};
+
+    Object.keys(infer_options({ 0: 0 })).forEach((component) => {
+        const options = infer_options({
+            [component]: {0: 0}
+        });
+
+        if (options) defs[component] = options;
+    });
+    return defs;
+}
+
+function infer_options(options) {
+    var result = minify("", options);
+    return result.error && result.error.defs;
+}
diff --git a/node_modules/terser/tools/props.html b/node_modules/terser/tools/props.html
new file mode 100644
index 0000000..eeae8a6
--- /dev/null
+++ b/node_modules/terser/tools/props.html
@@ -0,0 +1,55 @@
+<html>
+  <head>
+  </head>
+  <body>
+    <script>(function(){
+      var props = {};
+
+      function addObject(obj) {
+        if (obj == null) return;
+        try {
+          Object.getOwnPropertyNames(obj).forEach(add);
+        } catch(ex) {}
+        if (obj.prototype) {
+          Object.getOwnPropertyNames(obj.prototype).forEach(add);
+        }
+        if (typeof obj == "function") {
+          try {
+            Object.getOwnPropertyNames(new obj).forEach(add);
+          } catch(ex) {}
+        }
+      }
+
+      function add(name) {
+        props[name] = true;
+      }
+
+      Object.getOwnPropertyNames(window).forEach(function(thing){
+        addObject(window[thing]);
+      });
+
+      try {
+        addObject(new Event("click"));
+        addObject(new Event("contextmenu"));
+        addObject(new Event("mouseup"));
+        addObject(new Event("mousedown"));
+        addObject(new Event("keydown"));
+        addObject(new Event("keypress"));
+        addObject(new Event("keyup"));
+      } catch(ex) {}
+
+      var ta = document.createElement("textarea");
+      ta.style.width = "100%";
+      ta.style.height = "20em";
+      ta.style.boxSizing = "border-box";
+      ta.value = 'export var domprops = ' + JSON.stringify(Object.keys(props).sort(cmp), null, 4);
+      document.body.appendChild(ta);
+
+      function cmp(a, b) {
+        a = a.toLowerCase();
+        b = b.toLowerCase();
+        return a < b ? -1 : a > b ? 1 : 0;
+      }
+    })();</script>
+  </body>
+</html>
diff --git a/node_modules/terser/tools/terser.d.ts b/node_modules/terser/tools/terser.d.ts
new file mode 100644
index 0000000..ca9bd07
--- /dev/null
+++ b/node_modules/terser/tools/terser.d.ts
@@ -0,0 +1,794 @@
+/// <reference lib="es2015" />
+
+import { RawSourceMap } from 'source-map';
+
+/** @deprecated since this versions basically do not exist */
+type ECMA_UNOFFICIAL = 6 | 7 | 8 | 9 | 10 | 11;
+
+export type ECMA = 5 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | ECMA_UNOFFICIAL;
+
+export interface ParseOptions {
+    bare_returns?: boolean;
+    ecma?: ECMA;
+    html5_comments?: boolean;
+    shebang?: boolean;
+}
+
+export interface CompressOptions {
+    arguments?: boolean;
+    arrows?: boolean;
+    booleans_as_integers?: boolean;
+    booleans?: boolean;
+    collapse_vars?: boolean;
+    comparisons?: boolean;
+    computed_props?: boolean;
+    conditionals?: boolean;
+    dead_code?: boolean;
+    defaults?: boolean;
+    directives?: boolean;
+    drop_console?: boolean;
+    drop_debugger?: boolean;
+    ecma?: ECMA;
+    evaluate?: boolean;
+    expression?: boolean;
+    global_defs?: object;
+    hoist_funs?: boolean;
+    hoist_props?: boolean;
+    hoist_vars?: boolean;
+    ie8?: boolean;
+    if_return?: boolean;
+    inline?: boolean | InlineFunctions;
+    join_vars?: boolean;
+    keep_classnames?: boolean | RegExp;
+    keep_fargs?: boolean;
+    keep_fnames?: boolean | RegExp;
+    keep_infinity?: boolean;
+    loops?: boolean;
+    module?: boolean;
+    negate_iife?: boolean;
+    passes?: number;
+    properties?: boolean;
+    pure_funcs?: string[];
+    pure_getters?: boolean | 'strict';
+    reduce_funcs?: boolean;
+    reduce_vars?: boolean;
+    sequences?: boolean | number;
+    side_effects?: boolean;
+    switches?: boolean;
+    toplevel?: boolean;
+    top_retain?: null | string | string[] | RegExp;
+    typeofs?: boolean;
+    unsafe_arrows?: boolean;
+    unsafe?: boolean;
+    unsafe_comps?: boolean;
+    unsafe_Function?: boolean;
+    unsafe_math?: boolean;
+    unsafe_symbols?: boolean;
+    unsafe_methods?: boolean;
+    unsafe_proto?: boolean;
+    unsafe_regexp?: boolean;
+    unsafe_undefined?: boolean;
+    unused?: boolean;
+    warnings?: boolean;
+}
+
+export enum InlineFunctions {
+    Disabled = 0,
+    SimpleFunctions = 1,
+    WithArguments = 2,
+    WithArgumentsAndVariables = 3
+}
+
+export interface MangleOptions {
+    eval?: boolean;
+    keep_classnames?: boolean | RegExp;
+    keep_fnames?: boolean | RegExp;
+    module?: boolean;
+    properties?: boolean | ManglePropertiesOptions;
+    reserved?: string[];
+    safari10?: boolean;
+    toplevel?: boolean;
+}
+
+export interface ManglePropertiesOptions {
+    builtins?: boolean;
+    debug?: boolean;
+    keep_quoted?: boolean | 'strict';
+    regex?: RegExp | string;
+    reserved?: string[];
+}
+
+export interface OutputOptions {
+    ascii_only?: boolean;
+    beautify?: boolean;
+    braces?: boolean;
+    comments?: boolean | 'all' | 'some' | RegExp | ( (node: AST_Node, comment: {
+        value: string,
+        type: 'comment1' | 'comment2' | 'comment3' | 'comment4',
+        pos: number,
+        line: number,
+        col: number,
+    }) => boolean );
+    ecma?: ECMA;
+    ie8?: boolean;
+    indent_level?: number;
+    indent_start?: number;
+    inline_script?: boolean;
+    keep_quoted_props?: boolean;
+    max_line_len?: number | false;
+    preamble?: string;
+    preserve_annotations?: boolean;
+    quote_keys?: boolean;
+    quote_style?: OutputQuoteStyle;
+    safari10?: boolean;
+    semicolons?: boolean;
+    shebang?: boolean;
+    shorthand?: boolean;
+    source_map?: SourceMapOptions;
+    webkit?: boolean;
+    width?: number;
+    wrap_iife?: boolean;
+    wrap_func_args?: boolean;
+}
+
+export enum OutputQuoteStyle {
+    PreferDouble = 0,
+    AlwaysSingle = 1,
+    AlwaysDouble = 2,
+    AlwaysOriginal = 3
+}
+
+export interface MinifyOptions {
+    compress?: boolean | CompressOptions;
+    ecma?: ECMA;
+    ie8?: boolean;
+    keep_classnames?: boolean | RegExp;
+    keep_fnames?: boolean | RegExp;
+    mangle?: boolean | MangleOptions;
+    module?: boolean;
+    nameCache?: object;
+    output?: OutputOptions;
+    parse?: ParseOptions;
+    safari10?: boolean;
+    sourceMap?: boolean | SourceMapOptions;
+    toplevel?: boolean;
+    warnings?: boolean | 'verbose';
+}
+
+export interface MinifyOutput {
+    ast?: AST_Node;
+    code?: string;
+    error?: Error;
+    map?: RawSourceMap | string;
+    warnings?: string[];
+}
+
+export interface SourceMapOptions {
+    /** Source map object, 'inline' or source map file content */
+    content?: RawSourceMap | string;
+    includeSources?: boolean;
+    filename?: string;
+    root?: string;
+    url?: string | 'inline';
+}
+
+declare function parse(text: string, options?: ParseOptions): AST_Node;
+
+export class TreeWalker {
+    constructor(callback: (node: AST_Node, descend?: (node: AST_Node) => void) => boolean | undefined);
+    directives: object;
+    find_parent(type: AST_Node): AST_Node | undefined;
+    has_directive(type: string): boolean;
+    loopcontrol_target(node: AST_Node): AST_Node | undefined;
+    parent(n: number): AST_Node | undefined;
+    pop(): void;
+    push(node: AST_Node): void;
+    self(): AST_Node | undefined;
+    stack: AST_Node[];
+    visit: (node: AST_Node, descend: boolean) => any;
+}
+
+export class TreeTransformer extends TreeWalker {
+    constructor(
+        before: (node: AST_Node, descend?: (node: AST_Node, tw: TreeWalker) => void, in_list?: boolean) => AST_Node | undefined,
+        after?: (node: AST_Node, in_list?: boolean) => AST_Node | undefined
+    );
+    before: (node: AST_Node) => AST_Node;
+    after?: (node: AST_Node) => AST_Node;
+}
+
+export function push_uniq<T>(array: T[], el: T): void;
+
+export function minify(files: string | string[] | { [file: string]: string } | AST_Node, options?: MinifyOptions): MinifyOutput;
+
+export class AST_Node {
+    constructor(props?: object);
+    static BASE?: AST_Node;
+    static PROPS: string[];
+    static SELF_PROPS: string[];
+    static SUBCLASSES: AST_Node[];
+    static documentation: string;
+    static propdoc?: Record<string, string>;
+    static expressions?: AST_Node[];
+    static warn?: (text: string, props: any) => void;
+    static from_mozilla_ast?: (node: AST_Node) => any;
+    walk: (visitor: TreeWalker) => void;
+    print_to_string: (options?: OutputOptions) => string;
+    transform: (tt: TreeTransformer, in_list?: boolean) => AST_Node;
+    TYPE: string;
+    CTOR: typeof AST_Node;
+}
+
+declare class SymbolDef {
+    constructor(scope?: AST_Scope, orig?: object, init?: object);
+    name: string;
+    orig: AST_SymbolRef[];
+    init: AST_SymbolRef;
+    eliminated: number;
+    scope: AST_Scope;
+    references: AST_SymbolRef[];
+    replaced: number;
+    global: boolean;
+    export: boolean;
+    mangled_name: null | string;
+    undeclared: boolean;
+    id: number;
+}
+
+type ArgType = AST_SymbolFunarg | AST_DefaultAssign | AST_Destructuring | AST_Expansion;
+
+declare class AST_Statement extends AST_Node {
+    constructor(props?: object);
+}
+
+declare class AST_Debugger extends AST_Statement {
+    constructor(props?: object);
+}
+
+declare class AST_Directive extends AST_Statement {
+    constructor(props?: object);
+    value: string;
+    quote: string;
+}
+
+declare class AST_SimpleStatement extends AST_Statement {
+    constructor(props?: object);
+    body: AST_Node[];
+}
+
+declare class AST_Block extends AST_Statement {
+    constructor(props?: object);
+    body: AST_Node[];
+    block_scope: AST_Scope | null;
+}
+
+declare class AST_BlockStatement extends AST_Block {
+    constructor(props?: object);
+}
+
+declare class AST_Scope extends AST_Block {
+    constructor(props?: object);
+    variables: any;
+    functions: any;
+    uses_with: boolean;
+    uses_eval: boolean;
+    parent_scope: AST_Scope | null;
+    enclosed: any;
+    cname: any;
+}
+
+declare class AST_Toplevel extends AST_Scope {
+    constructor(props?: object);
+    globals: any;
+}
+
+declare class AST_Lambda extends AST_Scope {
+    constructor(props?: object);
+    name: AST_SymbolDeclaration | null;
+    argnames: ArgType[];
+    uses_arguments: boolean;
+    is_generator: boolean;
+    async: boolean;
+}
+
+declare class AST_Accessor extends AST_Lambda {
+    constructor(props?: object);
+}
+
+declare class AST_Function extends AST_Lambda {
+    constructor(props?: object);
+}
+
+declare class AST_Arrow extends AST_Lambda {
+    constructor(props?: object);
+}
+
+declare class AST_Defun extends AST_Lambda {
+    constructor(props?: object);
+}
+
+declare class AST_Class extends AST_Scope {
+    constructor(props?: object);
+    name: AST_SymbolClass | AST_SymbolDefClass | null;
+    extends: AST_Node | null;
+    properties: AST_ObjectProperty[];
+}
+
+declare class AST_DefClass extends AST_Class {
+    constructor(props?: object);
+}
+
+declare class AST_ClassExpression extends AST_Class {
+    constructor(props?: object);
+}
+
+declare class AST_Switch extends AST_Block {
+    constructor(props?: object);
+    expression: AST_Node;
+}
+
+declare class AST_SwitchBranch extends AST_Block {
+    constructor(props?: object);
+}
+
+declare class AST_Default extends AST_SwitchBranch {
+    constructor(props?: object);
+}
+
+declare class AST_Case extends AST_SwitchBranch {
+    constructor(props?: object);
+    expression: AST_Node;
+}
+
+declare class AST_Try extends AST_Block {
+    constructor(props?: object);
+    bcatch: AST_Catch;
+    bfinally: null | AST_Finally;
+}
+
+declare class AST_Catch extends AST_Block {
+    constructor(props?: object);
+    argname: ArgType;
+}
+
+declare class AST_Finally extends AST_Block {
+    constructor(props?: object);
+}
+
+declare class AST_EmptyStatement extends AST_Statement {
+    constructor(props?: object);
+}
+
+declare class AST_StatementWithBody extends AST_Statement {
+    constructor(props?: object);
+    body: AST_Node[];
+}
+
+declare class AST_LabeledStatement extends AST_StatementWithBody {
+    constructor(props?: object);
+    label: AST_Label;
+}
+
+declare class AST_IterationStatement extends AST_StatementWithBody {
+    constructor(props?: object);
+    block_scope: AST_Scope | null;
+}
+
+declare class AST_DWLoop extends AST_IterationStatement {
+    constructor(props?: object);
+    condition: AST_Node;
+}
+
+declare class AST_Do extends AST_DWLoop {
+    constructor(props?: object);
+}
+
+declare class AST_While extends AST_DWLoop {
+    constructor(props?: object);
+}
+
+declare class AST_For extends AST_IterationStatement {
+    constructor(props?: object);
+    init: AST_Node | null;
+    condition: AST_Node | null;
+    step: AST_Node | null;
+}
+
+declare class AST_ForIn extends AST_IterationStatement {
+    constructor(props?: object);
+    init: AST_Node | null;
+    object: AST_Node;
+}
+
+declare class AST_ForOf extends AST_ForIn {
+    constructor(props?: object);
+    await: boolean;
+}
+
+declare class AST_With extends AST_StatementWithBody {
+    constructor(props?: object);
+    expression: AST_Node;
+}
+
+declare class AST_If extends AST_StatementWithBody {
+    constructor(props?: object);
+    condition: AST_Node;
+    alternative: AST_Node | null;
+}
+
+declare class AST_Jump extends AST_Statement {
+    constructor(props?: object);
+}
+
+declare class AST_Exit extends AST_Jump {
+    constructor(props?: object);
+    value: AST_Node | null;
+}
+
+declare class AST_Return extends AST_Exit {
+    constructor(props?: object);
+}
+
+declare class AST_Throw extends AST_Exit {
+    constructor(props?: object);
+}
+
+declare class AST_LoopControl extends AST_Jump {
+    constructor(props?: object);
+    label: null | AST_LabelRef;
+}
+
+declare class AST_Break extends AST_LoopControl {
+    constructor(props?: object);
+}
+
+declare class AST_Continue extends AST_LoopControl {
+    constructor(props?: object);
+}
+
+declare class AST_Definitions extends AST_Statement {
+    constructor(props?: object);
+    definitions: AST_VarDef[];
+}
+
+declare class AST_Var extends AST_Definitions {
+    constructor(props?: object);
+}
+
+declare class AST_Let extends AST_Definitions {
+    constructor(props?: object);
+}
+
+declare class AST_Const extends AST_Definitions {
+    constructor(props?: object);
+}
+
+declare class AST_Export extends AST_Statement {
+    constructor(props?: object);
+    exported_definition: AST_Definitions | AST_Lambda | AST_DefClass | null;
+    exported_value: AST_Node | null;
+    is_default: boolean;
+    exported_names: AST_NameMapping[];
+    module_name: AST_String;
+}
+
+declare class AST_Expansion extends AST_Node {
+    constructor(props?: object);
+    expression: AST_Node;
+}
+
+declare class AST_Destructuring extends AST_Node {
+    constructor(props?: object);
+    names: AST_Node[];
+    is_array: boolean;
+}
+
+declare class AST_PrefixedTemplateString extends AST_Node {
+    constructor(props?: object);
+    template_string: AST_TemplateString;
+    prefix: AST_Node;
+}
+
+declare class AST_TemplateString extends AST_Node {
+    constructor(props?: object);
+    segments: AST_Node[];
+}
+
+declare class AST_TemplateSegment extends AST_Node {
+    constructor(props?: object);
+    value: string;
+    raw: string;
+}
+
+declare class AST_NameMapping extends AST_Node {
+    constructor(props?: object);
+    foreign_name: AST_Symbol;
+    name: AST_SymbolExport | AST_SymbolImport;
+}
+
+declare class AST_Import extends AST_Node {
+    constructor(props?: object);
+    imported_name: null | AST_SymbolImport;
+    imported_names: AST_NameMapping[];
+    module_name: AST_String;
+}
+
+declare class AST_VarDef extends AST_Node {
+    constructor(props?: object);
+    name: AST_Destructuring | AST_SymbolConst | AST_SymbolLet | AST_SymbolVar;
+    value: AST_Node | null;
+}
+
+declare class AST_Call extends AST_Node {
+    constructor(props?: object);
+    expression: AST_Node;
+    args: AST_Node[];
+}
+
+declare class AST_New extends AST_Call {
+    constructor(props?: object);
+}
+
+declare class AST_Sequence extends AST_Node {
+    constructor(props?: object);
+    expressions: AST_Node[];
+}
+
+declare class AST_PropAccess extends AST_Node {
+    constructor(props?: object);
+    expression: AST_Node;
+    property: AST_Node | string;
+}
+
+declare class AST_Dot extends AST_PropAccess {
+    constructor(props?: object);
+}
+
+declare class AST_Sub extends AST_PropAccess {
+    constructor(props?: object);
+}
+
+declare class AST_Unary extends AST_Node {
+    constructor(props?: object);
+    operator: string;
+    expression: AST_Node;
+}
+
+declare class AST_UnaryPrefix extends AST_Unary {
+    constructor(props?: object);
+}
+
+declare class AST_UnaryPostfix extends AST_Unary {
+    constructor(props?: object);
+}
+
+declare class AST_Binary extends AST_Node {
+    constructor(props?: object);
+    operator: string;
+    left: AST_Node;
+    right: AST_Node;
+}
+
+declare class AST_Assign extends AST_Binary {
+    constructor(props?: object);
+}
+
+declare class AST_DefaultAssign extends AST_Binary {
+    constructor(props?: object);
+}
+
+declare class AST_Conditional extends AST_Node {
+    constructor(props?: object);
+    condition: AST_Node;
+    consequent: AST_Node;
+    alternative: AST_Node;
+}
+
+declare class AST_Array extends AST_Node {
+    constructor(props?: object);
+    elements: AST_Node[];
+}
+
+declare class AST_Object extends AST_Node {
+    constructor(props?: object);
+    properties: AST_ObjectProperty[];
+}
+
+declare class AST_ObjectProperty extends AST_Node {
+    constructor(props?: object);
+    key: string | number | AST_Node;
+    value: AST_Node;
+}
+
+declare class AST_ObjectKeyVal extends AST_ObjectProperty {
+    constructor(props?: object);
+    quote: string;
+}
+
+declare class AST_ObjectSetter extends AST_ObjectProperty {
+    constructor(props?: object);
+    quote: string;
+    static: boolean;
+}
+
+declare class AST_ObjectGetter extends AST_ObjectProperty {
+    constructor(props?: object);
+    quote: string;
+    static: boolean;
+}
+
+declare class AST_ConciseMethod extends AST_ObjectProperty {
+    constructor(props?: object);
+    quote: string;
+    static: boolean;
+    is_generator: boolean;
+    async: boolean;
+}
+
+declare class AST_Symbol extends AST_Node {
+    constructor(props?: object);
+    scope: AST_Scope;
+    name: string;
+    thedef: SymbolDef;
+}
+
+declare class AST_SymbolDeclaration extends AST_Symbol {
+    constructor(props?: object);
+    init: AST_Node | null;
+}
+
+declare class AST_SymbolVar extends AST_SymbolDeclaration {
+    constructor(props?: object);
+}
+
+declare class AST_SymbolFunarg extends AST_SymbolVar {
+    constructor(props?: object);
+}
+
+declare class AST_SymbolBlockDeclaration extends AST_SymbolDeclaration {
+    constructor(props?: object);
+}
+
+declare class AST_SymbolConst extends AST_SymbolBlockDeclaration {
+    constructor(props?: object);
+}
+
+declare class AST_SymbolLet extends AST_SymbolBlockDeclaration {
+    constructor(props?: object);
+}
+
+declare class AST_SymbolDefClass extends AST_SymbolBlockDeclaration {
+    constructor(props?: object);
+}
+
+declare class AST_SymbolCatch extends AST_SymbolBlockDeclaration {
+    constructor(props?: object);
+}
+
+declare class AST_SymbolImport extends AST_SymbolBlockDeclaration {
+    constructor(props?: object);
+}
+
+declare class AST_SymbolDefun extends AST_SymbolDeclaration {
+    constructor(props?: object);
+}
+
+declare class AST_SymbolLambda extends AST_SymbolDeclaration {
+    constructor(props?: object);
+}
+
+declare class AST_SymbolClass extends AST_SymbolDeclaration {
+    constructor(props?: object);
+}
+
+declare class AST_SymbolMethod extends AST_Symbol {
+    constructor(props?: object);
+}
+
+declare class AST_SymbolImportForeign extends AST_Symbol {
+    constructor(props?: object);
+}
+
+declare class AST_Label extends AST_Symbol {
+    constructor(props?: object);
+    references: AST_LoopControl | null;
+}
+
+declare class AST_SymbolRef extends AST_Symbol {
+    constructor(props?: object);
+}
+
+declare class AST_SymbolExport extends AST_SymbolRef {
+    constructor(props?: object);
+}
+
+declare class AST_SymbolExportForeign extends AST_Symbol {
+    constructor(props?: object);
+}
+
+declare class AST_LabelRef extends AST_Symbol {
+    constructor(props?: object);
+}
+
+declare class AST_This extends AST_Symbol {
+    constructor(props?: object);
+}
+
+declare class AST_Super extends AST_This {
+    constructor(props?: object);
+}
+
+declare class AST_NewTarget extends AST_Node {
+    constructor(props?: object);
+}
+
+declare class AST_Constant extends AST_Node {
+    constructor(props?: object);
+}
+
+declare class AST_String extends AST_Constant {
+    constructor(props?: object);
+    value: string;
+    quote: string;
+}
+
+declare class AST_Number extends AST_Constant {
+    constructor(props?: object);
+    value: number;
+    literal: string;
+}
+
+declare class AST_RegExp extends AST_Constant {
+    constructor(props?: object);
+    value: {
+        source: string,
+        flags: string
+    };
+}
+
+declare class AST_Atom extends AST_Constant {
+    constructor(props?: object);
+}
+
+declare class AST_Null extends AST_Atom {
+    constructor(props?: object);
+}
+
+declare class AST_NaN extends AST_Atom {
+    constructor(props?: object);
+}
+
+declare class AST_Undefined extends AST_Atom {
+    constructor(props?: object);
+}
+
+declare class AST_Hole extends AST_Atom {
+    constructor(props?: object);
+}
+
+declare class AST_Infinity extends AST_Atom {
+    constructor(props?: object);
+}
+
+declare class AST_Boolean extends AST_Atom {
+    constructor(props?: object);
+}
+
+declare class AST_False extends AST_Boolean {
+    constructor(props?: object);
+}
+
+declare class AST_True extends AST_Boolean {
+    constructor(props?: object);
+}
+
+declare class AST_Await extends AST_Node {
+    constructor(props?: object);
+    expression: AST_Node;
+}
+
+declare class AST_Yield extends AST_Node {
+    constructor(props?: object);
+    expression: AST_Node;
+    is_star: boolean;
+}
