Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

tsickle

Package Overview
Dependencies
Maintainers
2
Versions
65
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

tsickle - npm Package Compare versions

Comparing version 0.33.0 to 0.33.1

6

package.json
{
"name": "tsickle",
"version": "0.33.0",
"version": "0.33.1",
"description": "Transpile TypeScript code to JavaScript with Closure annotations.",

@@ -20,3 +20,3 @@ "main": "src/tsickle.js",

"peerDependencies": {
"typescript": "git://github.com/mprobst/TypeScript.git#5456479a4a"
"typescript": "3.1.3"
},

@@ -38,3 +38,3 @@ "devDependencies": {

"tslint": "5.11.0",
"typescript": "git://github.com/mprobst/TypeScript.git#5456479a4a"
"typescript": "3.1.3"
},

@@ -41,0 +41,0 @@ "scripts": {

@@ -9,2 +9,13 @@ /**

/// <amd-module name="tsickle/src/cli_support" />
/**
* asserts that the given fileName is an absolute path.
*
* The TypeScript API works in absolute paths, so we must be careful to resolve
* paths before handing them over to TypeScript.
*/
export declare function assertAbsolute(fileName: string): void;
/**
* Takes a context (ts.SourceFile.fileName of the current file) and the import URL of an ES6
* import and generates a googmodule module name for the imported module.
*/
export declare function pathToModuleName(rootModulePath: string, context: string, fileName: string): string;

@@ -14,3 +14,3 @@ /**

else if (typeof define === "function" && define.amd) {
define("tsickle/src/cli_support", ["require", "exports", "path"], factory);
define("tsickle/src/cli_support", ["require", "exports", "assert", "path"], factory);
}

@@ -20,6 +20,20 @@ })(function (require, exports) {

Object.defineProperty(exports, "__esModule", { value: true });
var assert = require("assert");
var path = require("path");
// Postprocess generated JS.
/**
* asserts that the given fileName is an absolute path.
*
* The TypeScript API works in absolute paths, so we must be careful to resolve
* paths before handing them over to TypeScript.
*/
function assertAbsolute(fileName) {
assert(path.isAbsolute(fileName), "expected " + JSON.stringify(fileName) + " to be absolute");
}
exports.assertAbsolute = assertAbsolute;
/**
* Takes a context (ts.SourceFile.fileName of the current file) and the import URL of an ES6
* import and generates a googmodule module name for the imported module.
*/
function pathToModuleName(rootModulePath, context, fileName) {
fileName = fileName.replace(/\.[tj]s$/, '');
fileName = fileName.replace(/(\.d)?\.[tj]s$/, '');
if (fileName[0] === '.') {

@@ -30,4 +44,11 @@ // './foo' or '../foo'.

}
// Ensure consistency by naming all modules after their absolute paths
fileName = path.resolve(fileName);
// TODO(evanm): various tests assume they can import relative paths like
// 'foo/bar' and have them interpreted as root-relative; preserve that here.
// Fix this by removing the next line.
if (!path.isAbsolute(fileName))
fileName = path.join(rootModulePath, fileName);
// TODO(evanm): various tests assume they can pass in a 'fileName' like
// 'goog:foo.bar' and have this function do something reasonable.
// For correctness, the above must have produced an absolute path.
// assertAbsolute(fileName);
if (rootModulePath) {

@@ -42,2 +63,2 @@ fileName = path.relative(rootModulePath, fileName);

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpX3N1cHBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2xpX3N1cHBvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7SUFFSCwyQkFBNkI7SUFFN0IsNEJBQTRCO0lBQzVCLDBCQUNJLGNBQXNCLEVBQUUsT0FBZSxFQUFFLFFBQWdCO1FBQzNELFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUU1QyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7WUFDdkIsdUJBQXVCO1lBQ3ZCLDhEQUE4RDtZQUM5RCxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3ZEO1FBRUQsc0VBQXNFO1FBQ3RFLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWxDLElBQUksY0FBYyxFQUFFO1lBQ2xCLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUNwRDtRQUVELG1EQUFtRDtRQUNuRCxJQUFNLFVBQVUsR0FDWixRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVsRyxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBdEJELDRDQXNCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuLy8gUG9zdHByb2Nlc3MgZ2VuZXJhdGVkIEpTLlxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhUb01vZHVsZU5hbWUoXG4gICAgcm9vdE1vZHVsZVBhdGg6IHN0cmluZywgY29udGV4dDogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgZmlsZU5hbWUgPSBmaWxlTmFtZS5yZXBsYWNlKC9cXC5bdGpdcyQvLCAnJyk7XG5cbiAgaWYgKGZpbGVOYW1lWzBdID09PSAnLicpIHtcbiAgICAvLyAnLi9mb28nIG9yICcuLi9mb28nLlxuICAgIC8vIFJlc29sdmUgdGhlIHBhdGggYWdhaW5zdCB0aGUgZGlybmFtZSBvZiB0aGUgY3VycmVudCBtb2R1bGUuXG4gICAgZmlsZU5hbWUgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKGNvbnRleHQpLCBmaWxlTmFtZSk7XG4gIH1cblxuICAvLyBFbnN1cmUgY29uc2lzdGVuY3kgYnkgbmFtaW5nIGFsbCBtb2R1bGVzIGFmdGVyIHRoZWlyIGFic29sdXRlIHBhdGhzXG4gIGZpbGVOYW1lID0gcGF0aC5yZXNvbHZlKGZpbGVOYW1lKTtcblxuICBpZiAocm9vdE1vZHVsZVBhdGgpIHtcbiAgICBmaWxlTmFtZSA9IHBhdGgucmVsYXRpdmUocm9vdE1vZHVsZVBhdGgsIGZpbGVOYW1lKTtcbiAgfVxuXG4gIC8vIFJlcGxhY2UgY2hhcmFjdGVycyBub3Qgc3VwcG9ydGVkIGJ5IGdvb2cubW9kdWxlLlxuICBjb25zdCBtb2R1bGVOYW1lID1cbiAgICAgIGZpbGVOYW1lLnJlcGxhY2UoL1xcL3xcXFxcL2csICcuJykucmVwbGFjZSgvXlteYS16QS1aXyRdLywgJ18nKS5yZXBsYWNlKC9bXmEtekEtWjAtOS5fJF0vZywgJ18nKTtcblxuICByZXR1cm4gbW9kdWxlTmFtZTtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpX3N1cHBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2xpX3N1cHBvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7SUFFSCwrQkFBaUM7SUFDakMsMkJBQTZCO0lBRTdCOzs7OztPQUtHO0lBQ0gsd0JBQStCLFFBQWdCO1FBQzdDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLGNBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsb0JBQWlCLENBQUMsQ0FBQztJQUMzRixDQUFDO0lBRkQsd0NBRUM7SUFFRDs7O09BR0c7SUFDSCwwQkFDSSxjQUFzQixFQUFFLE9BQWUsRUFBRSxRQUFnQjtRQUMzRCxRQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVsRCxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7WUFDdkIsdUJBQXVCO1lBQ3ZCLDhEQUE4RDtZQUM5RCxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3ZEO1FBRUQsd0VBQXdFO1FBQ3hFLDRFQUE0RTtRQUM1RSxzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQUUsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRS9FLHVFQUF1RTtRQUN2RSxpRUFBaUU7UUFFakUsa0VBQWtFO1FBQ2xFLDRCQUE0QjtRQUU1QixJQUFJLGNBQWMsRUFBRTtZQUNsQixRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDcEQ7UUFFRCxtREFBbUQ7UUFDbkQsSUFBTSxVQUFVLEdBQ1osUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFbEcsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQTlCRCw0Q0E4QkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuLyoqXG4gKiBhc3NlcnRzIHRoYXQgdGhlIGdpdmVuIGZpbGVOYW1lIGlzIGFuIGFic29sdXRlIHBhdGguXG4gKlxuICogVGhlIFR5cGVTY3JpcHQgQVBJIHdvcmtzIGluIGFic29sdXRlIHBhdGhzLCBzbyB3ZSBtdXN0IGJlIGNhcmVmdWwgdG8gcmVzb2x2ZVxuICogcGF0aHMgYmVmb3JlIGhhbmRpbmcgdGhlbSBvdmVyIHRvIFR5cGVTY3JpcHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRBYnNvbHV0ZShmaWxlTmFtZTogc3RyaW5nKSB7XG4gIGFzc2VydChwYXRoLmlzQWJzb2x1dGUoZmlsZU5hbWUpLCBgZXhwZWN0ZWQgJHtKU09OLnN0cmluZ2lmeShmaWxlTmFtZSl9IHRvIGJlIGFic29sdXRlYCk7XG59XG5cbi8qKlxuICogVGFrZXMgYSBjb250ZXh0ICh0cy5Tb3VyY2VGaWxlLmZpbGVOYW1lIG9mIHRoZSBjdXJyZW50IGZpbGUpIGFuZCB0aGUgaW1wb3J0IFVSTCBvZiBhbiBFUzZcbiAqIGltcG9ydCBhbmQgZ2VuZXJhdGVzIGEgZ29vZ21vZHVsZSBtb2R1bGUgbmFtZSBmb3IgdGhlIGltcG9ydGVkIG1vZHVsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGhUb01vZHVsZU5hbWUoXG4gICAgcm9vdE1vZHVsZVBhdGg6IHN0cmluZywgY29udGV4dDogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgZmlsZU5hbWUgPSBmaWxlTmFtZS5yZXBsYWNlKC8oXFwuZCk/XFwuW3RqXXMkLywgJycpO1xuXG4gIGlmIChmaWxlTmFtZVswXSA9PT0gJy4nKSB7XG4gICAgLy8gJy4vZm9vJyBvciAnLi4vZm9vJy5cbiAgICAvLyBSZXNvbHZlIHRoZSBwYXRoIGFnYWluc3QgdGhlIGRpcm5hbWUgb2YgdGhlIGN1cnJlbnQgbW9kdWxlLlxuICAgIGZpbGVOYW1lID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShjb250ZXh0KSwgZmlsZU5hbWUpO1xuICB9XG5cbiAgLy8gVE9ETyhldmFubSk6IHZhcmlvdXMgdGVzdHMgYXNzdW1lIHRoZXkgY2FuIGltcG9ydCByZWxhdGl2ZSBwYXRocyBsaWtlXG4gIC8vICdmb28vYmFyJyBhbmQgaGF2ZSB0aGVtIGludGVycHJldGVkIGFzIHJvb3QtcmVsYXRpdmU7IHByZXNlcnZlIHRoYXQgaGVyZS5cbiAgLy8gRml4IHRoaXMgYnkgcmVtb3ZpbmcgdGhlIG5leHQgbGluZS5cbiAgaWYgKCFwYXRoLmlzQWJzb2x1dGUoZmlsZU5hbWUpKSBmaWxlTmFtZSA9IHBhdGguam9pbihyb290TW9kdWxlUGF0aCwgZmlsZU5hbWUpO1xuXG4gIC8vIFRPRE8oZXZhbm0pOiB2YXJpb3VzIHRlc3RzIGFzc3VtZSB0aGV5IGNhbiBwYXNzIGluIGEgJ2ZpbGVOYW1lJyBsaWtlXG4gIC8vICdnb29nOmZvby5iYXInIGFuZCBoYXZlIHRoaXMgZnVuY3Rpb24gZG8gc29tZXRoaW5nIHJlYXNvbmFibGUuXG5cbiAgLy8gRm9yIGNvcnJlY3RuZXNzLCB0aGUgYWJvdmUgbXVzdCBoYXZlIHByb2R1Y2VkIGFuIGFic29sdXRlIHBhdGguXG4gIC8vIGFzc2VydEFic29sdXRlKGZpbGVOYW1lKTtcblxuICBpZiAocm9vdE1vZHVsZVBhdGgpIHtcbiAgICBmaWxlTmFtZSA9IHBhdGgucmVsYXRpdmUocm9vdE1vZHVsZVBhdGgsIGZpbGVOYW1lKTtcbiAgfVxuXG4gIC8vIFJlcGxhY2UgY2hhcmFjdGVycyBub3Qgc3VwcG9ydGVkIGJ5IGdvb2cubW9kdWxlLlxuICBjb25zdCBtb2R1bGVOYW1lID1cbiAgICAgIGZpbGVOYW1lLnJlcGxhY2UoL1xcL3xcXFxcL2csICcuJykucmVwbGFjZSgvXlteYS16QS1aXyRdLywgJ18nKS5yZXBsYWNlKC9bXmEtekEtWjAtOS5fJF0vZywgJ18nKTtcblxuICByZXR1cm4gbW9kdWxlTmFtZTtcbn1cbiJdfQ==

@@ -80,1 +80,11 @@ /**

var SymbolConstructor;
/**
* This type is used as a marker in locations where TypeScript knows the type
* but we cannot express that type in the Closure system.
*
* It's used in 'implements' clauses so that a person debugging the emitted JS
* can see that tsickle saw the type but ignored it.
* @record
*/
class InexpressibleType {}

@@ -23,4 +23,9 @@ /**

/**
* getEnumType computes the Closure type of an enum, by iterating through the members and gathering
* their types.
*/
export declare function getEnumType(typeChecker: ts.TypeChecker, enumDecl: ts.EnumDeclaration): 'number' | 'string' | '?';
/**
* Transformer factory for the enum transformer. See fileoverview for details.
*/
export declare function enumTransformer(typeChecker: ts.TypeChecker, diagnostics: ts.Diagnostic[]): (context: ts.TransformationContext) => ts.Transformer<ts.SourceFile>;

@@ -24,3 +24,3 @@ /**

else if (typeof define === "function" && define.amd) {
define("tsickle/src/enum_transformer", ["require", "exports", "typescript", "tsickle/src/transformer_util"], factory);
define("tsickle/src/enum_transformer", ["require", "exports", "typescript", "tsickle/src/jsdoc_transformer", "tsickle/src/transformer_util"], factory);
}

@@ -43,2 +43,3 @@ })(function (require, exports) {

var ts = require("typescript");
var jsdoc_transformer_1 = require("tsickle/src/jsdoc_transformer");
var transformer_util_1 = require("tsickle/src/transformer_util");

@@ -120,2 +121,3 @@ /** isInNamespace returns true if any of node's ancestors is a namespace (ModuleDeclaration). */

}
exports.getEnumType = getEnumType;
/**

@@ -136,2 +138,6 @@ * Transformer factory for the enum transformer. See fileoverview for details.

return ts.visitEachChild(node, visitor, context);
// TypeScript does not emit any code for ambient enums, so early exit here to prevent the code
// below from producing runtime values for an ambient structure.
if (jsdoc_transformer_1.isAmbient(node))
return ts.visitEachChild(node, visitor, context);
var name = node.name.getText();

@@ -252,2 +258,2 @@ var isExported = transformer_util_1.hasModifierFlag(node, ts.ModifierFlags.Export);

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bV90cmFuc2Zvcm1lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9lbnVtX3RyYW5zZm9ybWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUVIOzs7Ozs7Ozs7OztPQVdHO0lBRUgsK0JBQWlDO0lBRWpDLGlFQUFzRztJQUV0RyxnR0FBZ0c7SUFDaEcsdUJBQXVCLElBQWE7UUFDbEMsZ0dBQWdHO1FBQ2hHLHVCQUF1QjtRQUN2QixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUM3QyxPQUFPLE1BQU0sRUFBRTtZQUNiLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFO2dCQUNuRCxPQUFPLElBQUksQ0FBQzthQUNiO1lBQ0QsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7U0FDeEI7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNILDJCQUEyQixXQUEyQixFQUFFLE1BQXFCO1FBQzNFLHlEQUF5RDtRQUN6RCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTtZQUN2QixPQUFPLFFBQVEsQ0FBQztTQUNqQjtRQUNELElBQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDL0QsK0VBQStFO1FBQy9FLGVBQWU7UUFDZiw0Q0FBNEM7UUFDNUMsTUFBTTtRQUNOLGtEQUFrRDtRQUNsRCxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUU7WUFDeEMsT0FBTyxRQUFRLENBQUM7U0FDakI7UUFDRCxxREFBcUQ7UUFDckQsaUVBQWlFO1FBQ2pFLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENB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RUFBRSxDQUFDLGdCQUFnQixDQUFDLG9DQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7NEJBQ2pFLFlBQVksR0FBRyxFQUFFLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO3lCQUMxRTs2QkFBTTs0QkFDTCxxRUFBcUU7NEJBQ3JFLFFBQVEsR0FBRyxFQUFFLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQzs0QkFDdEYsWUFBWSxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7eUJBQzVFO3dCQUNELFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQ25ELEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNsRjs7Ozs7Ozs7O2dCQUNELE9BQU8sV0FBVyxDQUFDO1lBQ3JCLENBQUM7WUFFRCxPQUFPLFVBQUMsRUFBaUIsSUFBSyxPQUFBLE9BQU8sQ0FBQyxFQUFFLENBQWtCLEVBQTVCLENBQTRCLENBQUM7UUFDN0QsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQXBIRCwwQ0FvSEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8qKlxuICogQGZpbGVvdmVydmlldyBUcmFuc2Zvcm1zIFR5cGVTY3JpcHQgZW51bSBkZWNsYXJhdGlvbnMgdG8gQ2xvc3VyZSBlbnVtIGRlY2xhcmF0aW9ucywgd2hpY2hcbiAqIGxvb2sgbGlrZTpcbiAqXG4gKiAgICAgLy4uIEBlbnVtIHtudW1iZXJ9IC4vXG4gKiAgICAgY29uc3QgRm9vID0ge0JBUjogMCwgQkFaOiAxLCAuLi59O1xuICogICAgIGV4cG9ydCB7Rm9vfTsgIC8vIGV2ZW4gaWYgb3JpZ2luYWxseSBleHBvcnRlZCBvbiBvbmUgbGluZS5cbiAqXG4gKiBUaGlzIGRlY2xhcmVzIGFuIGVudW0gdHlwZSBmb3IgQ2xvc3VyZSBDb21waWxlciAoYW5kIENsb3N1cmUgSlMgdXNlcnMgb2YgdGhpcyBUUyBjb2RlKS5cbiAqIFNwbGl0dGluZyB0aGUgZW51bSBpbnRvIGRlY2xhcmF0aW9uIGFuZCBleHBvcnQgaXMgcmVxdWlyZWQgc28gdGhhdCBsb2NhbCByZWZlcmVuY2VzIHRvIHRoZVxuICogdHlwZSByZXNvbHZlIChcIkB0eXBlIHtGb299XCIpLlxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge2NyZWF0ZVNpbmdsZVF1b3RlU3RyaW5nTGl0ZXJhbCwgZ2V0SWRlbnRpZmllclRleHQsIGhhc01vZGlmaWVyRmxhZ30gZnJvbSAnLi90cmFuc2Zvcm1lcl91dGlsJztcblxuLyoqIGlzSW5OYW1lc3BhY2UgcmV0dXJucyB0cnVlIGlmIGFueSBvZiBub2RlJ3MgYW5jZXN0b3JzIGlzIGEgbmFtZXNwYWNlIChNb2R1bGVEZWNsYXJhdGlvbikuICovXG5mdW5jdGlvbiBpc0luTmFtZXNwYWNlKG5vZGU6IHRzLk5vZGUpIHtcbiAgLy8gTXVzdCB1c2UgdGhlIG9yaWdpbmFsIG5vZGUgYmVjYXVzZSBub2RlIG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIHRyYW5zZm9ybWVkLCB3aXRoIG5vZGUucGFyZW50XG4gIC8vIG5vIGxvbmdlciBiZWluZyBzZXQuXG4gIGxldCBwYXJlbnQgPSB0cy5nZXRPcmlnaW5hbE5vZGUobm9kZSkucGFyZW50O1xuICB3aGlsZSAocGFyZW50KSB7XG4gICAgaWYgKHBhcmVudC5raW5kID09PSB0cy5TeW50YXhLaW5kLk1vZHVsZURlY2xhcmF0aW9uKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogZ2V0RW51bU1lbWJlclR5cGUgY29tcHV0ZXMgdGhlIHR5cGUgb2YgYW4gZW51bSBtZW1iZXIgYnkgaW5zcGVjdGluZyBpdHMgaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0RW51bU1lbWJlclR5cGUodHlwZUNoZWNrZXI6IHRzLlR5cGVDaGVja2VyLCBtZW1iZXI6IHRzLkVudW1NZW1iZXIpOiAnbnVtYmVyJ3wnc3RyaW5nJyB7XG4gIC8vIEVudW0gbWVtYmVycyB3aXRob3V0IGluaXRpYWxpemF0aW9uIGhhdmUgdHlwZSAnbnVtYmVyJ1xuICBpZiAoIW1lbWJlci5pbml0aWFsaXplcikge1xuICAgIHJldHVybiAnbnVtYmVyJztcbiAgfVxuICBjb25zdCB0eXBlID0gdHlwZUNoZWNrZXIuZ2V0VHlwZUF0TG9jYXRpb24obWVtYmVyLmluaXRpYWxpemVyKTtcbiAgLy8gTm90ZTogY2hlY2tpbmcgYWdhaW5zdCAnTnVtYmVyTGlrZScgaW5zdGVhZCBvZiBqdXN0ICdOdW1iZXInIG1lYW5zIHRoaXMgY29kZVxuICAvLyBoYW5kbGVzIGJvdGhcbiAgLy8gICBNRU1CRVIgPSAzLCAgLy8gVHlwZUZsYWdzLk51bWJlckxpdGVyYWxcbiAgLy8gYW5kXG4gIC8vICAgTUVNQkVSID0gc29tZUZ1bmN0aW9uKCksICAvLyBUeXBlRmxhZ3MuTnVtYmVyXG4gIGlmICh0eXBlLmZsYWdzICYgdHMuVHlwZUZsYWdzLk51bWJlckxpa2UpIHtcbiAgICByZXR1cm4gJ251bWJlcic7XG4gIH1cbiAgLy8gSWYgdGhlIHZhbHVlIGlzIG5vdCBhIG51bWJlciwgaXQgbXVzdCBiZSBhIHN0cmluZy5cbiAgLy8gVHlwZVNjcmlwdCBkb2VzIG5vdCBhbGxvdyBlbnVtIG1lbWJlcnMgdG8gaGF2ZSBhbnkgb3RoZXIgdHlwZS5cbiAgcmV0dXJuICdzdHJpbmcnO1xufVxuXG4vKipcbiAqIGdldEVudW1UeXBlIGNvbXB1dGVzIHRoZSBDbG9zdXJlIHR5cGUgb2YgYW4gZW51bSwgYnkgaXRlcmF0aW5nIHRocm91Z2ggdGhlIG1lbWJlcnMgYW5kIGdhdGhlcmluZ1xuICogdGhlaXIgdHlwZXMuXG4gKi9cbmZ1bmN0aW9uIGdldEVudW1UeXBlKHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlciwgZW51bURlY2w6IHRzLkVudW1EZWNsYXJhdGlvbik6ICdudW1iZXInfCdzdHJpbmcnfFxuICAgICc/JyB7XG4gIGxldCBoYXNOdW1iZXIgPSBmYWxzZTtcbiAgbGV0IGhhc1N0cmluZyA9IGZhbHNlO1xuICBmb3IgKGNvbnN0IG1lbWJlciBvZiBlbnVtRGVjbC5tZW1iZXJzKSB7XG4gICAgY29uc3QgdHlwZSA9IGdldEVudW1NZW1iZXJUeXBlKHR5cGVDaGVja2VyLCBtZW1iZXIpO1xuICAgIGlmICh0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgaGFzU3RyaW5nID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICBoYXNOdW1iZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBpZiAoaGFzTnVtYmVyICYmIGhhc1N0cmluZykge1xuICAgIHJldHVybiAnPyc7ICAvLyBDbG9zdXJlJ3MgbmV3IHR5cGUgaW5mZXJlbmNlIGRvZXNuJ3Qgc3VwcG9ydCBlbnVtcyBvZiB1bmlvbnMuXG4gIH0gZWxzZSBpZiAoaGFzTnVtYmVyKSB7XG4gICAgcmV0dXJuICdudW1iZXInO1xuICB9IGVsc2UgaWYgKGhhc1N0cmluZykge1xuICAgIHJldHVybiAnc3RyaW5nJztcbiAgfSBlbHNlIHtcbiAgICAvLyBQZXJoYXBzIGFuIGVtcHR5IGVudW0/XG4gICAgcmV0dXJuICc/JztcbiAgfVxufVxuXG4vKipcbiAqIFRyYW5zZm9ybWVyIGZhY3RvcnkgZm9yIHRoZSBlbnVtIHRyYW5zZm9ybWVyLiBTZWUgZmlsZW92ZXJ2aWV3IGZvciBkZXRhaWxzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW51bVRyYW5zZm9ybWVyKHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlciwgZGlhZ25vc3RpY3M6IHRzLkRpYWdub3N0aWNbXSk6XG4gICAgKGNvbnRleHQ6IHRzLlRyYW5zZm9ybWF0aW9uQ29udGV4dCkgPT4gdHMuVHJhbnNmb3JtZXI8dHMuU291cmNlRmlsZT4ge1xuICByZXR1cm4gKGNvbnRleHQ6IHRzLlRyYW5zZm9ybWF0aW9uQ29udGV4dCkgPT4ge1xuICAgIGZ1bmN0aW9uIHZpc2l0b3I8VCBleHRlbmRzIHRzLk5vZGU+KG5vZGU6IFQpOiBUfHRzLk5vZGVbXSB7XG4gICAgICBpZiAoIXRzLmlzRW51bURlY2xhcmF0aW9uKG5vZGUpKSByZXR1cm4gdHMudmlzaXRFYWNoQ2hpbGQobm9kZSwgdmlzaXRvciwgY29udGV4dCk7XG5cbiAgICAgIC8vIFRPRE8obWFydGlucHJvYnN0KTogVGhlIGVudW0gdHJhbnNmb3JtZXIgZG9lcyBub3Qgd29yayBmb3IgZW51bXMgZW1iZWRkZWQgaW4gbmFtZXNwYWNlcyxcbiAgICAgIC8vIGJlY2F1c2UgVFMgZG9lcyBub3Qgc3VwcG9ydCBzcGxpdHRpbmcgZXhwb3J0IGFuZCBkZWNsYXJhdGlvbiAoXCJleHBvcnQge0Zvb307XCIpIGluXG4gICAgICAvLyBuYW1lc3BhY2VzLiB0c2lja2xlJ3MgZW1pdCBmb3IgbmFtZXNwYWNlcyBpcyB1bmludGVsbGlnaWJsZSBmb3IgQ2xvc3VyZSBpbiBhbnkgY2FzZSwgc29cbiAgICAgIC8vIHRoaXMgaXMgbGVmdCB0byBmaXggZm9yIGFub3RoZXIgZGF5LlxuICAgICAgaWYgKGlzSW5OYW1lc3BhY2Uobm9kZSkpIHJldHVybiB0cy52aXNpdEVhY2hDaGlsZChub2RlLCB2aXNpdG9yLCBjb250ZXh0KTtcblxuICAgICAgY29uc3QgbmFtZSA9IG5vZGUubmFtZS5nZXRUZXh0KCk7XG4gICAgICBjb25zdCBpc0V4cG9ydGVkID0gaGFzTW9kaWZpZXJGbGFnKG5vZGUsIHRzLk1vZGlmaWVyRmxhZ3MuRXhwb3J0KTtcbiAgICAgIGNvbnN0IGVudW1UeXBlID0gZ2V0RW51bVR5cGUodHlwZUNoZWNrZXIsIG5vZGUpO1xuXG4gICAgICBjb25zdCB2YWx1ZXM6IHRzLlByb3BlcnR5QXNzaWdubWVudFtdID0gW107XG4gICAgICBsZXQgZW51bUluZGV4ID0gMDtcbiAgICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIG5vZGUubWVtYmVycykge1xuICAgICAgICBsZXQgZW51bVZhbHVlOiB0cy5FeHByZXNzaW9uO1xuICAgICAgICBpZiAobWVtYmVyLmluaXRpYWxpemVyKSB7XG4gICAgICAgICAgY29uc3QgZW51bUNvbnN0VmFsdWUgPSB0eXBlQ2hlY2tlci5nZXRDb25zdGFudFZhbHVlKG1lbWJlcik7XG4gICAgICAgICAgaWYgKHR5cGVvZiBlbnVtQ29uc3RWYWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGVudW1JbmRleCA9IGVudW1Db25zdFZhbHVlICsgMTtcbiAgICAgICAgICAgIGVudW1WYWx1ZSA9IHRzLmNyZWF0ZUxpdGVyYWwoZW51bUNvbnN0VmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBOb24tbnVtZXJpYyBlbnVtIHZhbHVlIChzdHJpbmcgb3IgYW4gZXhwcmVzc2lvbikuXG4gICAgICAgICAgICAvLyBFbWl0IHRoaXMgaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbiBhcy1pcy5cbiAgICAgICAgICAgIC8vIE5vdGU6IGlmIHRoZSBtZW1iZXIncyBpbml0aWFsaXplciBleHByZXNzaW9uIHJlZmVycyB0byBhbm90aGVyXG4gICAgICAgICAgICAvLyB2YWx1ZSB3aXRoaW4gdGhlIGVudW0gKGUuZy4gc29tZXRoaW5nIGxpa2VcbiAgICAgICAgICAgIC8vICAgZW51bSBGb28ge1xuICAgICAgICAgICAgLy8gICAgIEZpZWxkMSxcbiAgICAgICAgICAgIC8vICAgICBGaWVsZDIgPSBGaWVsZDEgKyBzb21ldGhpbmcoKSxcbiAgICAgICAgICAgIC8vICAgfVxuICAgICAgICAgICAgLy8gVGhlbiB3aGVuIHdlIGVtaXQgdGhlIGluaXRpYWxpemVyIHdlIHByb2R1Y2UgaW52YWxpZCBjb2RlIGJlY2F1c2VcbiAgICAgICAgICAgIC8vIG9uIHRoZSBDbG9zdXJlIHNpZGUgdGhlIHJlZmVyZW5jZSB0byBGaWVsZDEgaGFzIHRvIGJlIG5hbWVzcGFjZWQsXG4gICAgICAgICAgICAvLyBlLmcuIHdyaXR0ZW4gXCJGb28uRmllbGQxICsgc29tZXRoaW5nKClcIi5cbiAgICAgICAgICAgIC8vIEhvcGVmdWxseSB0aGlzIGRvZXNuJ3QgY29tZSB1cCBvZnRlbiAtLSBpZiB0aGUgZW51bSBpbnN0ZWFkIGhhc1xuICAgICAgICAgICAgLy8gc29tZXRoaW5nIGxpa2VcbiAgICAgICAgICAgIC8vICAgICBGaWVsZDIgPSBGaWVsZDEgKyAzLFxuICAgICAgICAgICAgLy8gdGhlbiBpdCdzIHN0aWxsIGEgY29uc3RhbnQgZXhwcmVzc2lvbiBhbmQgd2UgaW5saW5lIHRoZSBjb25zdGFudFxuICAgICAgICAgICAgLy8gdmFsdWUgaW4gdGhlIGFib3ZlIGJyYW5jaCBvZiB0aGlzIFwiaWZcIiBzdGF0ZW1lbnQuXG4gICAgICAgICAgICBlbnVtVmFsdWUgPSB2aXNpdG9yKG1lbWJlci5pbml0aWFsaXplcikgYXMgdHMuRXhwcmVzc2lvbjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW51bVZhbHVlID0gdHMuY3JlYXRlTGl0ZXJhbChlbnVtSW5kZXgpO1xuICAgICAgICAgIGVudW1JbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1lbWJlck5hbWUgPSBtZW1iZXIubmFtZS5nZXRUZXh0KCk7XG4gICAgICAgIHZhbHVlcy5wdXNoKHRzLnNldE9yaWdpbmFsTm9kZShcbiAgICAgICAgICAgIHRzLnNldFRleHRSYW5nZSh0cy5jcmVhdGVQcm9wZXJ0eUFzc2lnbm1lbnQobWVtYmVyTmFtZSwgZW51bVZhbHVlKSwgbWVtYmVyKSwgbWVtYmVyKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhckRlY2wgPSB0cy5jcmVhdGVWYXJpYWJsZVN0YXRlbWVudChcbiAgICAgICAgICAvKiBtb2RpZmllcnMgKi8gdW5kZWZpbmVkLFxuICAgICAgICAgIHRzLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KFxuICAgICAgICAgICAgICBbdHMuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihcbiAgICAgICAgICAgICAgICAgIG5hbWUsIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHRzLmNyZWF0ZU9iamVjdExpdGVyYWwoXG4gICAgICAgICAgICAgICAgICAgICAgdHMuc2V0VGV4dFJhbmdlKHRzLmNyZWF0ZU5vZGVBcnJheSh2YWx1ZXMsIHRydWUpLCBub2RlLm1lbWJlcnMpLCB0cnVlKSldLFxuICAgICAgICAgICAgICAvKiBjcmVhdGUgYSBjb25zdCB2YXIgKi8gdHMuTm9kZUZsYWdzLkNvbnN0KSk7XG4gICAgICBjb25zdCBjb21tZW50OiB0cy5TeW50aGVzaXplZENvbW1lbnQgPSB7XG4gICAgICAgIGtpbmQ6IHRzLlN5bnRheEtpbmQuTXVsdGlMaW5lQ29tbWVudFRyaXZpYSxcbiAgICAgICAgdGV4dDogYCogQGVudW0geyR7ZW51bVR5cGV9fSBgLFxuICAgICAgICBoYXNUcmFpbGluZ05ld0xpbmU6IHRydWUsXG4gICAgICAgIHBvczogLTEsXG4gICAgICAgIGVuZDogLTFcbiAgICAgIH07XG4gICAgICB0cy5zZXRTeW50aGV0aWNMZWFkaW5nQ29tbWVudHModmFyRGVjbCwgW2NvbW1lbnRdKTtcblxuICAgICAgY29uc3QgcmVzdWx0Tm9kZXM6IHRzLk5vZGVbXSA9IFt2YXJEZWNsXTtcbiAgICAgIGlmIChpc0V4cG9ydGVkKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIHNlcGFyYXRlIGV4cG9ydCB7Li4ufSBzdGF0ZW1lbnQsIHNvIHRoYXQgdGhlIGVudW0gbmFtZSBjYW4gYmUgdXNlZCBpbiBsb2NhbFxuICAgICAgICAvLyB0eXBlIGFubm90YXRpb25zIHdpdGhpbiB0aGUgZmlsZS5cbiAgICAgICAgcmVzdWx0Tm9kZXMucHVzaCh0cy5jcmVhdGVFeHBvcnREZWNsYXJhdGlvbihcbiAgICAgICAgICAgIHVuZGVmaW5lZCwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgdHMuY3JlYXRlTmFtZWRFeHBvcnRzKFt0cy5jcmVhdGVFeHBvcnRTcGVjaWZpZXIodW5kZWZpbmVkLCBuYW1lKV0pKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNNb2RpZmllckZsYWcobm9kZSwgdHMuTW9kaWZpZXJGbGFncy5Db25zdCkpIHtcbiAgICAgICAgLy8gQnkgVHlwZVNjcmlwdCBzZW1hbnRpY3MsIGNvbnN0IGVudW1zIGRpc2FwcGVhciBhZnRlciBUUyBjb21waWxhdGlvbi5cbiAgICAgICAgLy8gV2Ugc3RpbGwgbmVlZCB0byBnZW5lcmF0ZSB0aGUgcnVudGltZSB2YWx1ZSBhYm92ZSB0byBtYWtlIENsb3N1cmUgQ29tcGlsZXIncyB0eXBlIHN5c3RlbVxuICAgICAgICAvLyBoYXBweSBhbmQgYWxsb3cgcmVmZXJpbmcgdG8gZW51bXMgZnJvbSBKUyBjb2RlLCBidXQgd2Ugc2hvdWxkIGF0IGxlYXN0IG5vdCBlbWl0IHN0cmluZ1xuICAgICAgICAvLyB2YWx1ZSBtYXBwaW5ncy5cbiAgICAgICAgcmV0dXJuIHJlc3VsdE5vZGVzO1xuICAgICAgfVxuXG4gICAgICAvLyBFbWl0IHRoZSByZXZlcnNlIG1hcHBpbmcgb2YgZm9vW2Zvby5CQVJdID0gJ0JBUic7IGxpbmVzIGZvciBudW1iZXIgZW51bSBtZW1iZXJzXG4gICAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiBub2RlLm1lbWJlcnMpIHtcbiAgICAgICAgY29uc3QgbWVtYmVyTmFtZSA9IG1lbWJlci5uYW1lO1xuICAgICAgICBjb25zdCBtZW1iZXJUeXBlID0gZ2V0RW51bU1lbWJlclR5cGUodHlwZUNoZWNrZXIsIG1lbWJlcik7XG4gICAgICAgIGlmIChtZW1iZXJUeXBlICE9PSAnbnVtYmVyJykgY29udGludWU7XG5cbiAgICAgICAgLy8gVHlwZVNjcmlwdCBlbnVtIG1lbWJlcnMgY2FuIGhhdmUgSWRlbnRpZmllciBuYW1lcyBvciBTdHJpbmcgbmFtZXMuXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gZW1pdCBzbGlnaHRseSBkaWZmZXJlbnQgY29kZSB0byBzdXBwb3J0IHRoZXNlIHR3byBzeW50YXhlczpcbiAgICAgICAgbGV0IG5hbWVFeHByOiB0cy5FeHByZXNzaW9uO1xuICAgICAgICBsZXQgbWVtYmVyQWNjZXNzOiB0cy5FeHByZXNzaW9uO1xuICAgICAgICBpZiAodHMuaXNJZGVudGlmaWVyKG1lbWJlck5hbWUpKSB7XG4gICAgICAgICAgLy8gRm9vW0Zvby5BQkNdID0gXCJBQkNcIjtcbiAgICAgICAgICBuYW1lRXhwciA9IGNyZWF0ZVNpbmdsZVF1b3RlU3RyaW5nTGl0ZXJhbChtZW1iZXJOYW1lLnRleHQpO1xuICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0byBjcmVhdGUgYSBjbGVhbiwgbmV3IGlkZW50aWZpZXIsIHNvIGNvbW1lbnRzIGRvIG5vdCBnZXQgZW1pdHRlZCB0d2ljZS5cbiAgICAgICAgICBjb25zdCBpZGVudCA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoZ2V0SWRlbnRpZmllclRleHQobWVtYmVyTmFtZSkpO1xuICAgICAgICAgIG1lbWJlckFjY2VzcyA9IHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKHRzLmNyZWF0ZUlkZW50aWZpZXIobmFtZSksIGlkZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBGb29bRm9vW1wiQSBCIENcIl1dID0gXCJBIEIgQ1wiOyBvciBGb29bRm9vW2V4cHJlc3Npb25dXSA9IGV4cHJlc3Npb247XG4gICAgICAgICAgbmFtZUV4cHIgPSB0cy5pc0NvbXB1dGVkUHJvcGVydHlOYW1lKG1lbWJlck5hbWUpID8gbWVtYmVyTmFtZS5leHByZXNzaW9uIDogbWVtYmVyTmFtZTtcbiAgICAgICAgICBtZW1iZXJBY2Nlc3MgPSB0cy5jcmVhdGVFbGVtZW50QWNjZXNzKHRzLmNyZWF0ZUlkZW50aWZpZXIobmFtZSksIG5hbWVFeHByKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHROb2Rlcy5wdXNoKHRzLmNyZWF0ZVN0YXRlbWVudCh0cy5jcmVhdGVBc3NpZ25tZW50KFxuICAgICAgICAgICAgdHMuY3JlYXRlRWxlbWVudEFjY2Vzcyh0cy5jcmVhdGVJZGVudGlmaWVyKG5hbWUpLCBtZW1iZXJBY2Nlc3MpLCBuYW1lRXhwcikpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHROb2RlcztcbiAgICB9XG5cbiAgICByZXR1cm4gKHNmOiB0cy5Tb3VyY2VGaWxlKSA9PiB2aXNpdG9yKHNmKSBhcyB0cy5Tb3VyY2VGaWxlO1xuICB9O1xufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bV90cmFuc2Zvcm1lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9lbnVtX3RyYW5zZm9ybWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUVIOzs7Ozs7Ozs7OztPQVdHO0lBRUgsK0JBQWlDO0lBRWpDLG1FQUE4QztJQUM5QyxpRUFBc0c7SUFFdEcsZ0dBQWdHO0lBQ2hHLHVCQUF1QixJQUFhO1FBQ2xDLGdHQUFnRztRQUNoRyx1QkFBdUI7UUFDdkIsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDN0MsT0FBTyxNQUFNLEVBQUU7WUFDYixJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRTtnQkFDbkQsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1NBQ3hCO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSCwyQkFBMkIsV0FBMkIsRUFBRSxNQUFxQjtRQUMzRSx5REFBeUQ7UUFDekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFDdkIsT0FBTyxRQUFRLENBQUM7U0FDakI7UUFDRCxJQUFNLElBQUksR0FBRyxXQUFXLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9ELCtFQUErRTtRQUMvRSxlQUFlO1FBQ2YsNENBQTRDO1FBQzVDLE1BQU07UUFDTixrREFBa0Q7UUFDbEQsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFO1lBQ3hDLE9BQU8sUUFBUSxDQUFDO1NBQ2pCO1FBQ0QscURBQXFEO1FBQ3JELGlFQUFpRTtRQUNqRSxPQUFPLFFBQVEs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R29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8qKlxuICogQGZpbGVvdmVydmlldyBUcmFuc2Zvcm1zIFR5cGVTY3JpcHQgZW51bSBkZWNsYXJhdGlvbnMgdG8gQ2xvc3VyZSBlbnVtIGRlY2xhcmF0aW9ucywgd2hpY2hcbiAqIGxvb2sgbGlrZTpcbiAqXG4gKiAgICAgLy4uIEBlbnVtIHtudW1iZXJ9IC4vXG4gKiAgICAgY29uc3QgRm9vID0ge0JBUjogMCwgQkFaOiAxLCAuLi59O1xuICogICAgIGV4cG9ydCB7Rm9vfTsgIC8vIGV2ZW4gaWYgb3JpZ2luYWxseSBleHBvcnRlZCBvbiBvbmUgbGluZS5cbiAqXG4gKiBUaGlzIGRlY2xhcmVzIGFuIGVudW0gdHlwZSBmb3IgQ2xvc3VyZSBDb21waWxlciAoYW5kIENsb3N1cmUgSlMgdXNlcnMgb2YgdGhpcyBUUyBjb2RlKS5cbiAqIFNwbGl0dGluZyB0aGUgZW51bSBpbnRvIGRlY2xhcmF0aW9uIGFuZCBleHBvcnQgaXMgcmVxdWlyZWQgc28gdGhhdCBsb2NhbCByZWZlcmVuY2VzIHRvIHRoZVxuICogdHlwZSByZXNvbHZlIChcIkB0eXBlIHtGb299XCIpLlxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge2lzQW1iaWVudH0gZnJvbSAnLi9qc2RvY190cmFuc2Zvcm1lcic7XG5pbXBvcnQge2NyZWF0ZVNpbmdsZVF1b3RlU3RyaW5nTGl0ZXJhbCwgZ2V0SWRlbnRpZmllclRleHQsIGhhc01vZGlmaWVyRmxhZ30gZnJvbSAnLi90cmFuc2Zvcm1lcl91dGlsJztcblxuLyoqIGlzSW5OYW1lc3BhY2UgcmV0dXJucyB0cnVlIGlmIGFueSBvZiBub2RlJ3MgYW5jZXN0b3JzIGlzIGEgbmFtZXNwYWNlIChNb2R1bGVEZWNsYXJhdGlvbikuICovXG5mdW5jdGlvbiBpc0luTmFtZXNwYWNlKG5vZGU6IHRzLk5vZGUpIHtcbiAgLy8gTXVzdCB1c2UgdGhlIG9yaWdpbmFsIG5vZGUgYmVjYXVzZSBub2RlIG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIHRyYW5zZm9ybWVkLCB3aXRoIG5vZGUucGFyZW50XG4gIC8vIG5vIGxvbmdlciBiZWluZyBzZXQuXG4gIGxldCBwYXJlbnQgPSB0cy5nZXRPcmlnaW5hbE5vZGUobm9kZSkucGFyZW50O1xuICB3aGlsZSAocGFyZW50KSB7XG4gICAgaWYgKHBhcmVudC5raW5kID09PSB0cy5TeW50YXhLaW5kLk1vZHVsZURlY2xhcmF0aW9uKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogZ2V0RW51bU1lbWJlclR5cGUgY29tcHV0ZXMgdGhlIHR5cGUgb2YgYW4gZW51bSBtZW1iZXIgYnkgaW5zcGVjdGluZyBpdHMgaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0RW51bU1lbWJlclR5cGUodHlwZUNoZWNrZXI6IHRzLlR5cGVDaGVja2VyLCBtZW1iZXI6IHRzLkVudW1NZW1iZXIpOiAnbnVtYmVyJ3wnc3RyaW5nJyB7XG4gIC8vIEVudW0gbWVtYmVycyB3aXRob3V0IGluaXRpYWxpemF0aW9uIGhhdmUgdHlwZSAnbnVtYmVyJ1xuICBpZiAoIW1lbWJlci5pbml0aWFsaXplcikge1xuICAgIHJldHVybiAnbnVtYmVyJztcbiAgfVxuICBjb25zdCB0eXBlID0gdHlwZUNoZWNrZXIuZ2V0VHlwZUF0TG9jYXRpb24obWVtYmVyLmluaXRpYWxpemVyKTtcbiAgLy8gTm90ZTogY2hlY2tpbmcgYWdhaW5zdCAnTnVtYmVyTGlrZScgaW5zdGVhZCBvZiBqdXN0ICdOdW1iZXInIG1lYW5zIHRoaXMgY29kZVxuICAvLyBoYW5kbGVzIGJvdGhcbiAgLy8gICBNRU1CRVIgPSAzLCAgLy8gVHlwZUZsYWdzLk51bWJlckxpdGVyYWxcbiAgLy8gYW5kXG4gIC8vICAgTUVNQkVSID0gc29tZUZ1bmN0aW9uKCksICAvLyBUeXBlRmxhZ3MuTnVtYmVyXG4gIGlmICh0eXBlLmZsYWdzICYgdHMuVHlwZUZsYWdzLk51bWJlckxpa2UpIHtcbiAgICByZXR1cm4gJ251bWJlcic7XG4gIH1cbiAgLy8gSWYgdGhlIHZhbHVlIGlzIG5vdCBhIG51bWJlciwgaXQgbXVzdCBiZSBhIHN0cmluZy5cbiAgLy8gVHlwZVNjcmlwdCBkb2VzIG5vdCBhbGxvdyBlbnVtIG1lbWJlcnMgdG8gaGF2ZSBhbnkgb3RoZXIgdHlwZS5cbiAgcmV0dXJuICdzdHJpbmcnO1xufVxuXG4vKipcbiAqIGdldEVudW1UeXBlIGNvbXB1dGVzIHRoZSBDbG9zdXJlIHR5cGUgb2YgYW4gZW51bSwgYnkgaXRlcmF0aW5nIHRocm91Z2ggdGhlIG1lbWJlcnMgYW5kIGdhdGhlcmluZ1xuICogdGhlaXIgdHlwZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnVtVHlwZSh0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsIGVudW1EZWNsOiB0cy5FbnVtRGVjbGFyYXRpb24pOiAnbnVtYmVyJ3xcbiAgICAnc3RyaW5nJ3wnPycge1xuICBsZXQgaGFzTnVtYmVyID0gZmFsc2U7XG4gIGxldCBoYXNTdHJpbmcgPSBmYWxzZTtcbiAgZm9yIChjb25zdCBtZW1iZXIgb2YgZW51bURlY2wubWVtYmVycykge1xuICAgIGNvbnN0IHR5cGUgPSBnZXRFbnVtTWVtYmVyVHlwZSh0eXBlQ2hlY2tlciwgbWVtYmVyKTtcbiAgICBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGhhc1N0cmluZyA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgaGFzTnVtYmVyID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgaWYgKGhhc051bWJlciAmJiBoYXNTdHJpbmcpIHtcbiAgICByZXR1cm4gJz8nOyAgLy8gQ2xvc3VyZSdzIG5ldyB0eXBlIGluZmVyZW5jZSBkb2Vzbid0IHN1cHBvcnQgZW51bXMgb2YgdW5pb25zLlxuICB9IGVsc2UgaWYgKGhhc051bWJlcikge1xuICAgIHJldHVybiAnbnVtYmVyJztcbiAgfSBlbHNlIGlmIChoYXNTdHJpbmcpIHtcbiAgICByZXR1cm4gJ3N0cmluZyc7XG4gIH0gZWxzZSB7XG4gICAgLy8gUGVyaGFwcyBhbiBlbXB0eSBlbnVtP1xuICAgIHJldHVybiAnPyc7XG4gIH1cbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm1lciBmYWN0b3J5IGZvciB0aGUgZW51bSB0cmFuc2Zvcm1lci4gU2VlIGZpbGVvdmVydmlldyBmb3IgZGV0YWlscy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVudW1UcmFuc2Zvcm1lcih0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsIGRpYWdub3N0aWNzOiB0cy5EaWFnbm9zdGljW10pOlxuICAgIChjb250ZXh0OiB0cy5UcmFuc2Zvcm1hdGlvbkNvbnRleHQpID0+IHRzLlRyYW5zZm9ybWVyPHRzLlNvdXJjZUZpbGU+IHtcbiAgcmV0dXJuIChjb250ZXh0OiB0cy5UcmFuc2Zvcm1hdGlvbkNvbnRleHQpID0+IHtcbiAgICBmdW5jdGlvbiB2aXNpdG9yPFQgZXh0ZW5kcyB0cy5Ob2RlPihub2RlOiBUKTogVHx0cy5Ob2RlW10ge1xuICAgICAgaWYgKCF0cy5pc0VudW1EZWNsYXJhdGlvbihub2RlKSkgcmV0dXJuIHRzLnZpc2l0RWFjaENoaWxkKG5vZGUsIHZpc2l0b3IsIGNvbnRleHQpO1xuXG4gICAgICAvLyBUT0RPKG1hcnRpbnByb2JzdCk6IFRoZSBlbnVtIHRyYW5zZm9ybWVyIGRvZXMgbm90IHdvcmsgZm9yIGVudW1zIGVtYmVkZGVkIGluIG5hbWVzcGFjZXMsXG4gICAgICAvLyBiZWNhdXNlIFRTIGRvZXMgbm90IHN1cHBvcnQgc3BsaXR0aW5nIGV4cG9ydCBhbmQgZGVjbGFyYXRpb24gKFwiZXhwb3J0IHtGb299O1wiKSBpblxuICAgICAgLy8gbmFtZXNwYWNlcy4gdHNpY2tsZSdzIGVtaXQgZm9yIG5hbWVzcGFjZXMgaXMgdW5pbnRlbGxpZ2libGUgZm9yIENsb3N1cmUgaW4gYW55IGNhc2UsIHNvXG4gICAgICAvLyB0aGlzIGlzIGxlZnQgdG8gZml4IGZvciBhbm90aGVyIGRheS5cbiAgICAgIGlmIChpc0luTmFtZXNwYWNlKG5vZGUpKSByZXR1cm4gdHMudmlzaXRFYWNoQ2hpbGQobm9kZSwgdmlzaXRvciwgY29udGV4dCk7XG5cbiAgICAgIC8vIFR5cGVTY3JpcHQgZG9lcyBub3QgZW1pdCBhbnkgY29kZSBmb3IgYW1iaWVudCBlbnVtcywgc28gZWFybHkgZXhpdCBoZXJlIHRvIHByZXZlbnQgdGhlIGNvZGVcbiAgICAgIC8vIGJlbG93IGZyb20gcHJvZHVjaW5nIHJ1bnRpbWUgdmFsdWVzIGZvciBhbiBhbWJpZW50IHN0cnVjdHVyZS5cbiAgICAgIGlmIChpc0FtYmllbnQobm9kZSkpIHJldHVybiB0cy52aXNpdEVhY2hDaGlsZChub2RlLCB2aXNpdG9yLCBjb250ZXh0KTtcblxuICAgICAgY29uc3QgbmFtZSA9IG5vZGUubmFtZS5nZXRUZXh0KCk7XG4gICAgICBjb25zdCBpc0V4cG9ydGVkID0gaGFzTW9kaWZpZXJGbGFnKG5vZGUsIHRzLk1vZGlmaWVyRmxhZ3MuRXhwb3J0KTtcbiAgICAgIGNvbnN0IGVudW1UeXBlID0gZ2V0RW51bVR5cGUodHlwZUNoZWNrZXIsIG5vZGUpO1xuXG4gICAgICBjb25zdCB2YWx1ZXM6IHRzLlByb3BlcnR5QXNzaWdubWVudFtdID0gW107XG4gICAgICBsZXQgZW51bUluZGV4ID0gMDtcbiAgICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIG5vZGUubWVtYmVycykge1xuICAgICAgICBsZXQgZW51bVZhbHVlOiB0cy5FeHByZXNzaW9uO1xuICAgICAgICBpZiAobWVtYmVyLmluaXRpYWxpemVyKSB7XG4gICAgICAgICAgY29uc3QgZW51bUNvbnN0VmFsdWUgPSB0eXBlQ2hlY2tlci5nZXRDb25zdGFudFZhbHVlKG1lbWJlcik7XG4gICAgICAgICAgaWYgKHR5cGVvZiBlbnVtQ29uc3RWYWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGVudW1JbmRleCA9IGVudW1Db25zdFZhbHVlICsgMTtcbiAgICAgICAgICAgIGVudW1WYWx1ZSA9IHRzLmNyZWF0ZUxpdGVyYWwoZW51bUNvbnN0VmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBOb24tbnVtZXJpYyBlbnVtIHZhbHVlIChzdHJpbmcgb3IgYW4gZXhwcmVzc2lvbikuXG4gICAgICAgICAgICAvLyBFbWl0IHRoaXMgaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbiBhcy1pcy5cbiAgICAgICAgICAgIC8vIE5vdGU6IGlmIHRoZSBtZW1iZXIncyBpbml0aWFsaXplciBleHByZXNzaW9uIHJlZmVycyB0byBhbm90aGVyXG4gICAgICAgICAgICAvLyB2YWx1ZSB3aXRoaW4gdGhlIGVudW0gKGUuZy4gc29tZXRoaW5nIGxpa2VcbiAgICAgICAgICAgIC8vICAgZW51bSBGb28ge1xuICAgICAgICAgICAgLy8gICAgIEZpZWxkMSxcbiAgICAgICAgICAgIC8vICAgICBGaWVsZDIgPSBGaWVsZDEgKyBzb21ldGhpbmcoKSxcbiAgICAgICAgICAgIC8vICAgfVxuICAgICAgICAgICAgLy8gVGhlbiB3aGVuIHdlIGVtaXQgdGhlIGluaXRpYWxpemVyIHdlIHByb2R1Y2UgaW52YWxpZCBjb2RlIGJlY2F1c2VcbiAgICAgICAgICAgIC8vIG9uIHRoZSBDbG9zdXJlIHNpZGUgdGhlIHJlZmVyZW5jZSB0byBGaWVsZDEgaGFzIHRvIGJlIG5hbWVzcGFjZWQsXG4gICAgICAgICAgICAvLyBlLmcuIHdyaXR0ZW4gXCJGb28uRmllbGQxICsgc29tZXRoaW5nKClcIi5cbiAgICAgICAgICAgIC8vIEhvcGVmdWxseSB0aGlzIGRvZXNuJ3QgY29tZSB1cCBvZnRlbiAtLSBpZiB0aGUgZW51bSBpbnN0ZWFkIGhhc1xuICAgICAgICAgICAgLy8gc29tZXRoaW5nIGxpa2VcbiAgICAgICAgICAgIC8vICAgICBGaWVsZDIgPSBGaWVsZDEgKyAzLFxuICAgICAgICAgICAgLy8gdGhlbiBpdCdzIHN0aWxsIGEgY29uc3RhbnQgZXhwcmVzc2lvbiBhbmQgd2UgaW5saW5lIHRoZSBjb25zdGFudFxuICAgICAgICAgICAgLy8gdmFsdWUgaW4gdGhlIGFib3ZlIGJyYW5jaCBvZiB0aGlzIFwiaWZcIiBzdGF0ZW1lbnQuXG4gICAgICAgICAgICBlbnVtVmFsdWUgPSB2aXNpdG9yKG1lbWJlci5pbml0aWFsaXplcikgYXMgdHMuRXhwcmVzc2lvbjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW51bVZhbHVlID0gdHMuY3JlYXRlTGl0ZXJhbChlbnVtSW5kZXgpO1xuICAgICAgICAgIGVudW1JbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1lbWJlck5hbWUgPSBtZW1iZXIubmFtZS5nZXRUZXh0KCk7XG4gICAgICAgIHZhbHVlcy5wdXNoKHRzLnNldE9yaWdpbmFsTm9kZShcbiAgICAgICAgICAgIHRzLnNldFRleHRSYW5nZSh0cy5jcmVhdGVQcm9wZXJ0eUFzc2lnbm1lbnQobWVtYmVyTmFtZSwgZW51bVZhbHVlKSwgbWVtYmVyKSwgbWVtYmVyKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhckRlY2wgPSB0cy5jcmVhdGVWYXJpYWJsZVN0YXRlbWVudChcbiAgICAgICAgICAvKiBtb2RpZmllcnMgKi8gdW5kZWZpbmVkLFxuICAgICAgICAgIHRzLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KFxuICAgICAgICAgICAgICBbdHMuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihcbiAgICAgICAgICAgICAgICAgIG5hbWUsIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHRzLmNyZWF0ZU9iamVjdExpdGVyYWwoXG4gICAgICAgICAgICAgICAgICAgICAgdHMuc2V0VGV4dFJhbmdlKHRzLmNyZWF0ZU5vZGVBcnJheSh2YWx1ZXMsIHRydWUpLCBub2RlLm1lbWJlcnMpLCB0cnVlKSldLFxuICAgICAgICAgICAgICAvKiBjcmVhdGUgYSBjb25zdCB2YXIgKi8gdHMuTm9kZUZsYWdzLkNvbnN0KSk7XG4gICAgICBjb25zdCBjb21tZW50OiB0cy5TeW50aGVzaXplZENvbW1lbnQgPSB7XG4gICAgICAgIGtpbmQ6IHRzLlN5bnRheEtpbmQuTXVsdGlMaW5lQ29tbWVudFRyaXZpYSxcbiAgICAgICAgdGV4dDogYCogQGVudW0geyR7ZW51bVR5cGV9fSBgLFxuICAgICAgICBoYXNUcmFpbGluZ05ld0xpbmU6IHRydWUsXG4gICAgICAgIHBvczogLTEsXG4gICAgICAgIGVuZDogLTFcbiAgICAgIH07XG4gICAgICB0cy5zZXRTeW50aGV0aWNMZWFkaW5nQ29tbWVudHModmFyRGVjbCwgW2NvbW1lbnRdKTtcblxuICAgICAgY29uc3QgcmVzdWx0Tm9kZXM6IHRzLk5vZGVbXSA9IFt2YXJEZWNsXTtcbiAgICAgIGlmIChpc0V4cG9ydGVkKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIHNlcGFyYXRlIGV4cG9ydCB7Li4ufSBzdGF0ZW1lbnQsIHNvIHRoYXQgdGhlIGVudW0gbmFtZSBjYW4gYmUgdXNlZCBpbiBsb2NhbFxuICAgICAgICAvLyB0eXBlIGFubm90YXRpb25zIHdpdGhpbiB0aGUgZmlsZS5cbiAgICAgICAgcmVzdWx0Tm9kZXMucHVzaCh0cy5jcmVhdGVFeHBvcnREZWNsYXJhdGlvbihcbiAgICAgICAgICAgIHVuZGVmaW5lZCwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgdHMuY3JlYXRlTmFtZWRFeHBvcnRzKFt0cy5jcmVhdGVFeHBvcnRTcGVjaWZpZXIodW5kZWZpbmVkLCBuYW1lKV0pKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNNb2RpZmllckZsYWcobm9kZSwgdHMuTW9kaWZpZXJGbGFncy5Db25zdCkpIHtcbiAgICAgICAgLy8gQnkgVHlwZVNjcmlwdCBzZW1hbnRpY3MsIGNvbnN0IGVudW1zIGRpc2FwcGVhciBhZnRlciBUUyBjb21waWxhdGlvbi5cbiAgICAgICAgLy8gV2Ugc3RpbGwgbmVlZCB0byBnZW5lcmF0ZSB0aGUgcnVudGltZSB2YWx1ZSBhYm92ZSB0byBtYWtlIENsb3N1cmUgQ29tcGlsZXIncyB0eXBlIHN5c3RlbVxuICAgICAgICAvLyBoYXBweSBhbmQgYWxsb3cgcmVmZXJpbmcgdG8gZW51bXMgZnJvbSBKUyBjb2RlLCBidXQgd2Ugc2hvdWxkIGF0IGxlYXN0IG5vdCBlbWl0IHN0cmluZ1xuICAgICAgICAvLyB2YWx1ZSBtYXBwaW5ncy5cbiAgICAgICAgcmV0dXJuIHJlc3VsdE5vZGVzO1xuICAgICAgfVxuXG4gICAgICAvLyBFbWl0IHRoZSByZXZlcnNlIG1hcHBpbmcgb2YgZm9vW2Zvby5CQVJdID0gJ0JBUic7IGxpbmVzIGZvciBudW1iZXIgZW51bSBtZW1iZXJzXG4gICAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiBub2RlLm1lbWJlcnMpIHtcbiAgICAgICAgY29uc3QgbWVtYmVyTmFtZSA9IG1lbWJlci5uYW1lO1xuICAgICAgICBjb25zdCBtZW1iZXJUeXBlID0gZ2V0RW51bU1lbWJlclR5cGUodHlwZUNoZWNrZXIsIG1lbWJlcik7XG4gICAgICAgIGlmIChtZW1iZXJUeXBlICE9PSAnbnVtYmVyJykgY29udGludWU7XG5cbiAgICAgICAgLy8gVHlwZVNjcmlwdCBlbnVtIG1lbWJlcnMgY2FuIGhhdmUgSWRlbnRpZmllciBuYW1lcyBvciBTdHJpbmcgbmFtZXMuXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gZW1pdCBzbGlnaHRseSBkaWZmZXJlbnQgY29kZSB0byBzdXBwb3J0IHRoZXNlIHR3byBzeW50YXhlczpcbiAgICAgICAgbGV0IG5hbWVFeHByOiB0cy5FeHByZXNzaW9uO1xuICAgICAgICBsZXQgbWVtYmVyQWNjZXNzOiB0cy5FeHByZXNzaW9uO1xuICAgICAgICBpZiAodHMuaXNJZGVudGlmaWVyKG1lbWJlck5hbWUpKSB7XG4gICAgICAgICAgLy8gRm9vW0Zvby5BQkNdID0gXCJBQkNcIjtcbiAgICAgICAgICBuYW1lRXhwciA9IGNyZWF0ZVNpbmdsZVF1b3RlU3RyaW5nTGl0ZXJhbChtZW1iZXJOYW1lLnRleHQpO1xuICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0byBjcmVhdGUgYSBjbGVhbiwgbmV3IGlkZW50aWZpZXIsIHNvIGNvbW1lbnRzIGRvIG5vdCBnZXQgZW1pdHRlZCB0d2ljZS5cbiAgICAgICAgICBjb25zdCBpZGVudCA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoZ2V0SWRlbnRpZmllclRleHQobWVtYmVyTmFtZSkpO1xuICAgICAgICAgIG1lbWJlckFjY2VzcyA9IHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKHRzLmNyZWF0ZUlkZW50aWZpZXIobmFtZSksIGlkZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBGb29bRm9vW1wiQSBCIENcIl1dID0gXCJBIEIgQ1wiOyBvciBGb29bRm9vW2V4cHJlc3Npb25dXSA9IGV4cHJlc3Npb247XG4gICAgICAgICAgbmFtZUV4cHIgPSB0cy5pc0NvbXB1dGVkUHJvcGVydHlOYW1lKG1lbWJlck5hbWUpID8gbWVtYmVyTmFtZS5leHByZXNzaW9uIDogbWVtYmVyTmFtZTtcbiAgICAgICAgICBtZW1iZXJBY2Nlc3MgPSB0cy5jcmVhdGVFbGVtZW50QWNjZXNzKHRzLmNyZWF0ZUlkZW50aWZpZXIobmFtZSksIG5hbWVFeHByKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHROb2Rlcy5wdXNoKHRzLmNyZWF0ZVN0YXRlbWVudCh0cy5jcmVhdGVBc3NpZ25tZW50KFxuICAgICAgICAgICAgdHMuY3JlYXRlRWxlbWVudEFjY2Vzcyh0cy5jcmVhdGVJZGVudGlmaWVyKG5hbWUpLCBtZW1iZXJBY2Nlc3MpLCBuYW1lRXhwcikpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHROb2RlcztcbiAgICB9XG5cbiAgICByZXR1cm4gKHNmOiB0cy5Tb3VyY2VGaWxlKSA9PiB2aXNpdG9yKHNmKSBhcyB0cy5Tb3VyY2VGaWxlO1xuICB9O1xufVxuIl19

@@ -14,6 +14,9 @@ /**

* header.
*
* @param rootDir Project root. Emitted comments will reference paths relative to this root.
* This param is effectively required, but made optional here until Angular is fixed.
*/
export declare function getGeneratedExterns(externs: {
[fileName: string]: string;
}): string;
}, rootDir?: string): string;
/**

@@ -24,7 +27,4 @@ * Returns a mangled version of the module name (resolved file name) for source file.

* prefix to scope symbols in externs file (see code below).
*
* @param contextFileName if given is used as the context file path to resolve the source file's
* name against.
*/
export declare function moduleNameAsIdentifier(host: AnnotatorHost, fileName: string, contextFileName?: string): string;
export declare function moduleNameAsIdentifier(host: AnnotatorHost, fileName: string): string;
/**

@@ -31,0 +31,0 @@ * generateExterns generates extern definitions for all ambient declarations in the given source

@@ -91,2 +91,6 @@ /**

suppressions.add('uselessCode');
// 4) Suppress missingReturn. If the TS compiler's exhaustiveness analysis
// concludes that all possible branches return a value, then we don't want
// Closure to second-guess this decision.
suppressions.add('missingReturn');
suppressTag.type = Array.from(suppressions.values()).sort().join(',');

@@ -202,2 +206,2 @@ return tags;

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZW92ZXJ2aWV3X2NvbW1lbnRfdHJhbnNmb3JtZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZmlsZW92ZXJ2aWV3X2NvbW1lbnRfdHJhbnNmb3JtZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFFSCx5Q0FBaUM7SUFDakMsaUVBQThIO0lBQzlILDJDQUFtQztJQUVuQzs7O09BR0c7SUFDSCxJQUFNLDRCQUE0QixHQUM5QixJQUFJLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBRTNFOzs7OztPQUtHO0lBQ0gscUNBQXFDLElBQWlCO1FBQ3BELHdDQUF3QztRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxPQUFPLEtBQUssY0FBYyxFQUE1QixDQUE0QixDQUFDLEVBQUU7WUFDakQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUMsQ0FBQyxDQUFDO1NBQ3hFO1FBRUQsa0NBQWtDO1FBQ2xDLDBGQUEwRjtRQUMxRixrQ0FBa0M7UUFDbEMsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxPQUFPLEtBQUssVUFBVSxFQUF4QixDQUF3QixDQUFDLENBQUM7UUFDM0QsSUFBSSxZQUF5QixDQUFDO1FBQzlCLElBQUksV0FBVyxFQUFFO1lBQ2YsWUFBWSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMs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RDtvQkFDMUQsT0FBTyx5QkFBeUIsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7aUJBQzNEO2dCQUVELFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDO2dCQUNqRCxvRUFBb0U7Z0JBQ3BFLE9BQU8sVUFBVSxDQUFDO1lBQ3BCLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQztJQUNKLENBQUM7SUFwR0Qsa0ZBb0dDO0lBRUQsbUNBQW1DLEVBQWlCLEVBQUUsV0FBbUI7UUFDdkUsSUFBSSx1QkFBdUIsR0FBRyw0Q0FBeUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1RCx1QkFBdUIsR0FBRyxFQUFFLENBQUMsMkJBQTJCLENBQ3BELHVCQUF1QixFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RGLE9BQU8sdUNBQW9CLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxlQUFlLFdBQUUsdUJBQXVCLEdBQUssRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDbkcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMganNkb2MgZnJvbSAnLi9qc2RvYyc7XG5pbXBvcnQge2NyZWF0ZU5vdEVtaXR0ZWRTdGF0ZW1lbnQsIHJlcG9ydERpYWdub3N0aWMsIHN5bnRoZXNpemVDb21tZW50UmFuZ2VzLCB1cGRhdGVTb3VyY2VGaWxlTm9kZX0gZnJvbSAnLi90cmFuc2Zvcm1lcl91dGlsJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJy4vdHlwZXNjcmlwdCc7XG5cbi8qKlxuICogQSBzZXQgb2YgSlNEb2MgdGFncyB0aGF0IG1hcmsgYSBjb21tZW50IGFzIGEgZmlsZW92ZXJ2aWV3IGNvbW1lbnQuIFRoZXNlIGFyZSByZWNvZ25pemVkIGJ5IG90aGVyXG4gKiBwaWVjZXMgb2YgaW5mcmFzdHJ1Y3R1cmUgKENsb3N1cmUgQ29tcGlsZXIsIG1vZHVsZSBzeXN0ZW0sIC4uLikuXG4gKi9cbmNvbnN0IEZJTEVPVkVSVklFV19DT01NRU5UX01BUktFUlM6IFJlYWRvbmx5U2V0PHN0cmluZz4gPVxuICAgIG5ldyBTZXQoWydmaWxlb3ZlcnZpZXcnLCAnZXh0ZXJucycsICdtb2ROYW1lJywgJ21vZHMnLCAncGludG9tb2R1bGUnXSk7XG5cbi8qKlxuICogR2l2ZW4gYSBwYXJzZWQgXFxAZmlsZW92ZXJ2aWV3IGNvbW1lbnQsIGVuc3VyZXMgaXQgaGFzIGFsbCB0aGUgYXR0cmlidXRlcyB3ZSBuZWVkLlxuICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHRvIG1vZGlmeSBhbiBleGlzdGluZyBjb21tZW50IG9yIHRvIG1ha2UgYSBuZXcgb25lLlxuICpcbiAqIEBwYXJhbSB0YWdzIENvbW1lbnQgYXMgcGFyc2VkIGxpc3Qgb2YgdGFnczsgbW9kaWZpZWQgaW4tcGxhY2UuXG4gKi9cbmZ1bmN0aW9uIGF1Z21lbnRGaWxlb3ZlcnZpZXdDb21tZW50cyh0YWdzOiBqc2RvYy5UYWdbXSkge1xuICAvLyBFbnN1cmUgd2Ugc3RhcnQgd2l0aCBhIEBmaWxlb3ZlcnZpZXcuXG4gIGlmICghdGFncy5maW5kKHQgPT4gdC50YWdOYW1lID09PSAnZmlsZW92ZXJ2aWV3JykpIHtcbiAgICB0YWdzLnNwbGljZSgwLCAwLCB7dGFnTmFtZTogJ2ZpbGVvdmVydmlldycsIHRleHQ6ICdhZGRlZCBieSB0c2lja2xlJ30pO1xuICB9XG5cbiAgLy8gRmluZCBvciBjcmVhdGUgYSBAc3VwcHJlc3MgdGFnLlxuICAvLyBDbG9zdXJlIGNvbXBpbGVyIGJhcmZzIGlmIHRoZXJlJ3MgYSBkdXBsaWNhdGVkIEBzdXBwcmVzcyB0YWcgaW4gYSBmaWxlLCBzbyB0aGUgdGFnIG11c3RcbiAgLy8gb25seSBhcHBlYXIgb25jZSBhbmQgYmUgbWVyZ2VkLlxuICBsZXQgc3VwcHJlc3NUYWcgPSB0YWdzLmZpbmQodCA9PiB0LnRhZ05hbWUgPT09ICdzdXBwcmVzcycpO1xuICBsZXQgc3VwcHJlc3Npb25zOiBTZXQ8c3RyaW5nPjtcbiAgaWYgKHN1cHByZXNzVGFnKSB7XG4gICAgc3VwcHJlc3Npb25zID0gbmV3IFNldCgoc3VwcHJlc3NUYWcudHlwZSB8fCAnJykuc3BsaXQoJywnKS5tYXAocyA9PiBzLnRyaW0oKSkpO1xuICB9IGVsc2Uge1xuICAgIHN1cHByZXNzVGFnID0ge3RhZ05hbWU6ICdzdXBwcmVzcycsIHRleHQ6ICdjaGVja2VkIGJ5IHRzYyd9O1xuICAgIHRhZ3MucHVzaChzdXBwcmVzc1RhZyk7XG4gICAgc3VwcHJlc3Npb25zID0gbmV3IFNldCgpO1xuICB9XG5cbiAgLy8gRW5zdXJlIG91ciBzdXBwcmVzc2lvbnMgYXJlIGluY2x1ZGVkIGluIHRoZSBAc3VwcHJlc3MgdGFnOlxuICAvLyAxKSBTdXBwcmVzcyBjaGVja1R5cGVzLiAgV2UgYmVsaWV2ZSB0aGUgY29kZSBoYXMgYWxyZWFkeSBiZWVuIHR5cGUtY2hlY2tlZCBieSBUeXBlU2NyaXB0LFxuICAvLyBhbmQgd2UgY2Fubm90IG1vZGVsIGFsbCB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlY2lzaW9ucyBpbiBDbG9zdXJlIHN5bnRheC5cbiAgc3VwcHJlc3Npb25zLmFkZCgnY2hlY2tUeXBlcycpO1xuICAvLyAyKSBTdXBwcmVzcyBleHRyYVJlcXVpcmUuICBXZSByZW1vdmUgZXh0cmEgcmVxdWlyZXMgYXQgdGhlIFR5cGVTY3JpcHQgbGV2ZWwsIHNvIGFueSByZXF1aXJlXG4gIC8vIHRoYXQgZ2V0cyB0byB0aGUgSlMgbGV2ZWwgaXMgYSBsb2FkLWJlYXJpbmcgcmVxdWlyZS5cbiAgc3VwcHJlc3Npb25zLmFkZCgnZXh0cmFSZXF1aXJlJyk7XG4gIC8vIDMpIFN1cHByZXNzIHVzZWxlc3NDb2RlLiAgV2UgZW1pdCBhbiBcImlmIChmYWxzZSlcIiBhcm91bmQgdHlwZSBkZWNsYXJhdGlvbnMsXG4gIC8vIHdoaWNoIGlzIGZsYWdnZWQgYXMgdW51c2VkIGNvZGUgdW5sZXNzIHdlIHN1cHByZXNzIGl0LlxuICBzdXBwcmVzc2lvbnMuYWRkKCd1c2VsZXNzQ29kZScpO1xuICBzdXBwcmVzc1RhZy50eXBlID0gQXJyYXkuZnJvbShzdXBwcmVzc2lvbnMudmFsdWVzKCkpLnNvcnQoKS5qb2luKCcsJyk7XG5cbiAgcmV0dXJuIHRhZ3M7XG59XG5cbi8qKlxuICogQSB0cmFuc2Zvcm1lciB0aGF0IGVuc3VyZXMgdGhlIGVtaXR0ZWQgSlMgZmlsZSBoYXMgYW4gXFxAZmlsZW92ZXJ2aWV3IGNvbW1lbnQgdGhhdCBjb250YWlucyBhblxuICogXFxAc3VwcHJlc3Mge2NoZWNrVHlwZXN9IGFubm90YXRpb24gYnkgZWl0aGVyIGFkZGluZyBvciB1cGRhdGluZyBhbiBleGlzdGluZyBjb21tZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtRmlsZW92ZXJ2aWV3Q29tbWVudEZhY3RvcnkoZGlhZ25vc3RpY3M6IHRzLkRpYWdub3N0aWNbXSkge1xuICByZXR1cm4gKCk6IChzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlKSA9PiB0cy5Tb3VyY2VGaWxlID0+IHtcbiAgICBmdW5jdGlvbiBjaGVja05vRmlsZW92ZXJ2aWV3Q29tbWVudHMoXG4gICAgICAgIGNvbnRleHQ6IHRzLk5vZGUsIGNvbW1lbnRzOiBqc2RvYy5TeW50aGVzaXplZENvbW1lbnRXaXRoT3JpZ2luYWxbXSwgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbW1lbnQgb2YgY29tbWVudHMpIHtcbiAgICAgICAgY29uc3QgcGFyc2UgPSBqc2RvYy5wYXJzZShjb21tZW50KTtcbiAgICAgICAgaWYgKHBhcnNlICE9PSBudWxsICYmIHBhcnNlLnRhZ3Muc29tZSh0ID0+IEZJTEVPVkVSVklFV19DT01NRU5UX01BUktFUlMuaGFzKHQudGFnTmFtZSkpKSB7XG4gICAgICAgICAgLy8gUmVwb3J0IGEgd2FybmluZzsgdGhpcyBzaG91bGQgbm90IGJyZWFrIGNvbXBpbGF0aW9uIGluIHRoaXJkIHBhcnR5IGNvZGUuXG4gICAgICAgICAgcmVwb3J0RGlhZ25vc3RpYyhcbiAgICAgICAgICAgICAgZGlhZ25vc3RpY3MsIGNvbnRleHQsIG1lc3NhZ2UsIGNvbW1lbnQub3JpZ2luYWxSYW5nZSwgdHMuRGlhZ25vc3RpY0NhdGVnb3J5Lldhcm5pbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlKSA9PiB7XG4gICAgICBjb25zdCB0ZXh0ID0gc291cmNlRmlsZS5nZXRGdWxsVGV4dCgpO1xuXG4gICAgICBsZXQgZmlsZUNvbW1lbnRzOiB0cy5TeW50aGVzaXplZENvbW1lbnRbXSA9IFtdO1xuICAgICAgY29uc3QgZmlyc3RTdGF0ZW1lbnQgPSBzb3VyY2VGaWxlLnN0YXRlbWVudHMubGVuZ3RoICYmIHNvdXJjZUZpbGUuc3RhdGVtZW50c1swXSB8fCBudWxsO1xuXG4gICAgICBjb25zdCBvcmlnaW5hbENvbW1lbnRzID0gdHMuZ2V0TGVhZGluZ0NvbW1lbnRSYW5nZXModGV4dCwgMCkgfHwgW107XG4gICAgICBpZiAoIWZpcnN0U3RhdGVtZW50KSB7XG4gICAgICAgIC8vIEluIGFuIGVtcHR5IHNvdXJjZSBmaWxlLCBhbGwgY29tbWVudHMgYXJlIGZpbGUtbGV2ZWwgY29tbWVudHMuXG4gICAgICAgIGZpbGVDb21tZW50cyA9IHN5bnRoZXNpemVDb21tZW50UmFuZ2VzKHNvdXJjZUZpbGUsIG9yaWdpbmFsQ29tbWVudHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2VhcmNoIGZvciB0aGUgbGFzdCBjb21tZW50IHNwbGl0IGZyb20gdGhlIGZpbGUgd2l0aCBhIFxcblxcbi4gQWxsIGNvbW1lbnRzIGJlZm9yZSB0aGF0IGFyZVxuICAgICAgICAvLyBjb25zaWRlcmVkIGZpbGVvdmVydmlldyBjb21tZW50cywgYWxsIGNvbW1lbnRzIGFmdGVyIHRoYXQgYmVsb25nIHRvIHRoZSBuZXh0XG4gICAgICAgIC8vIHN0YXRlbWVudChzKS4gSWYgbm9uZSBmb3VuZCwgY29tbWVudHMgcmVtYWlucyBlbXB0eSwgYW5kIHRoZSBjb2RlIGJlbG93IHdpbGwgaW5zZXJ0IGEgbmV3XG4gICAgICAgIC8vIGZpbGVvdmVydmlldyBjb21tZW50LlxuICAgICAgICBmb3IgKGxldCBpID0gb3JpZ2luYWxDb21tZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGNvbnN0IGVuZCA9IG9yaWdpbmFsQ29tbWVudHNbaV0uZW5kO1xuICAgICAgICAgIGlmICghdGV4dC5zdWJzdHJpbmcoZW5kKS5zdGFydHNXaXRoKCdcXG5cXG4nKSAmJlxuICAgICAgICAgICAgICAhdGV4dC5zdWJzdHJpbmcoZW5kKS5zdGFydHNXaXRoKCdcXHJcXG5cXHJcXG4nKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFRoaXMgY29tbWVudCBpcyBzZXBhcmF0ZWQgZnJvbSB0aGUgc291cmNlIGZpbGUgd2l0aCBhIGRvdWJsZSBicmVhaywgbWFya2luZyBpdCAoYW5kIGFueVxuICAgICAgICAgIC8vIHByZWNlZGluZyBjb21tZW50cykgYXMgYSBmaWxlLWxldmVsIGNvbW1lbnQuIFNwbGl0IHRoZW0gb2ZmIGFuZCBhdHRhY2ggdGhlbSBvbnRvIGFcbiAgICAgICAgICAvLyBOb3RFbWl0dGVkU3RhdGVtZW50LCBzbyB0aGF0IHRoZXkgZG8gbm90IGdldCBsb3N0IGxhdGVyIG9uLlxuICAgICAgICAgIGNvbnN0IHN5bnRoZXNpemVkQ29tbWVudHMgPSBqc2RvYy5zeW50aGVzaXplTGVhZGluZ0NvbW1lbnRzKGZpcnN0U3RhdGVtZW50KTtcbiAgICAgICAgICBjb25zdCBub3RFbWl0dGVkID0gdHMuY3JlYXRlTm90RW1pdHRlZFN0YXRlbWVudChzb3VyY2VGaWxlKTtcbiAgICAgICAgICAvLyBNb2RpZnkgdGhlIGNvbW1lbnRzIG9uIHRoZSBmaXJzdFN0YXRlbWVudCBpbiBwbGFjZSBieSByZW1vdmluZyB0aGUgZmlsZS1sZXZlbCBjb21tZW50cy5cbiAgICAgICAgICBmaWxlQ29tbWVudHMgPSBzeW50aGVzaXplZENvbW1lbnRzLnNwbGljZSgwLCBpICsgMSk7XG4gICAgICAgICAgLy8gTW92ZSB0aGUgZmlsZUNvbW1lbnRzIG9udG8gbm90RW1pdHRlZC5cbiAgICAgICAgICB0cy5zZXRTeW50aGV0aWNMZWFkaW5nQ29tbWVudHMobm90RW1pdHRlZCwgZmlsZUNvbW1lbnRzKTtcbiAgICAgICAgICBzb3VyY2VGaWxlID0gdXBkYXRlU291cmNlRmlsZU5vZGUoXG4gICAgICAgICAgICAgIHNvdXJjZUZpbGUsXG4gICAgICAgICAgICAgIHRzLmNyZWF0ZU5vZGVBcnJheShbbm90RW1pdHRlZCwgZmlyc3RTdGF0ZW1lbnQsIC4uLnNvdXJjZUZpbGUuc3RhdGVtZW50cy5zbGljZSgxKV0pKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG5cbiAgICAgICAgLy8gTm93IHdhbGsgZXZlcnkgdG9wIGxldmVsIHN0YXRlbWVudCBhbmQgZXNjYXBlL2Ryb3AgYW55IEBmaWxlb3ZlcnZpZXcgY29tbWVudHMgZm91bmQuXG4gICAgICAgIC8vIENsb3N1cmUgaWdub3JlcyBhbGwgQGZpbGVvdmVydmlldyBjb21tZW50cyBidXQgdGhlIGxhc3QsIHNvIHRzaWNrbGUgbXVzdCBtYWtlIHN1cmUgbm90IHRvXG4gICAgICAgIC8vIGVtaXQgZHVwbGljYXRlZCBvbmVzLlxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvdXJjZUZpbGUuc3RhdGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHN0bXQgPSBzb3VyY2VGaWxlLnN0YXRlbWVudHNbaV07XG4gICAgICAgICAgLy8gQWNjZXB0IHRoZSBOb3RFbWl0dGVkU3RhdGVtZW50IGluc2VydGVkIGFib3ZlLlxuICAgICAgICAgIGlmIChpID09PSAwICYmIHN0bXQua2luZCA9PT0gdHMuU3ludGF4S2luZC5Ob3RFbWl0dGVkU3RhdGVtZW50KSBjb250aW51ZTtcbiAgICAgICAgICBjb25zdCBjb21tZW50cyA9IGpzZG9jLnN5bnRoZXNpemVMZWFkaW5nQ29tbWVudHMoc3RtdCk7XG4gICAgICAgICAgY2hlY2tOb0ZpbGVvdmVydmlld0NvbW1lbnRzKFxuICAgICAgICAgICAgICBzdG10LCBjb21tZW50cyxcbiAgICAgICAgICAgICAgYGZpbGUgY29tbWVudHMgbXVzdCBiZSBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlLCBgICtcbiAgICAgICAgICAgICAgICAgIGBzZXBhcmF0ZWQgZnJvbSB0aGUgZmlsZSBib2R5IGJ5IGFuIGVtcHR5IGxpbmUuYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2xvc3VyZSBDb21waWxlciBjb25zaWRlcnMgdGhlICpsYXN0KiBjb21tZW50IHdpdGggQGZpbGVvdmVydmlldyAob3IgQGV4dGVybnMgb3JcbiAgICAgIC8vIEBub2NvbXBpbGUpIHRoYXQgaGFzIG5vdCBiZWVuIGF0dGFjaGVkIHRvIHNvbWUgb3RoZXIgdHJlZSBub2RlIHRvIGJlIHRoZSBmaWxlIG92ZXJ2aWV3XG4gICAgICAvLyBjb21tZW50LCBhbmQgb25seSBhcHBsaWVzIEBzdXBwcmVzcyB0YWdzIGZyb20gaXQuIEdvb2dsZS1pbnRlcm5hbCB0b29saW5nIGNvbnNpZGVycyAqYW55KlxuICAgICAgLy8gY29tbWVudCBtZW50aW9uaW5nIEBmaWxlb3ZlcnZpZXcuXG4gICAgICBsZXQgZmlsZW92ZXJ2aWV3SWR4ID0gLTE7XG4gICAgICBsZXQgdGFnczoganNkb2MuVGFnW10gPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSBmaWxlQ29tbWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgcGFyc2UgPSBqc2RvYy5wYXJzZUNvbnRlbnRzKGZpbGVDb21tZW50c1tpXS50ZXh0KTtcbiAgICAgICAgaWYgKHBhcnNlICE9PSBudWxsICYmIHBhcnNlLnRhZ3Muc29tZSh0ID0+IEZJTEVPVkVSVklFV19DT01NRU5UX01BUktFUlMuaGFzKHQudGFnTmFtZSkpKSB7XG4gICAgICAgICAgZmlsZW92ZXJ2aWV3SWR4ID0gaTtcbiAgICAgICAgICB0YWdzID0gcGFyc2UudGFncztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZW92ZXJ2aWV3SWR4ICE9PSAtMSkge1xuICAgICAgICBjaGVja05vRmlsZW92ZXJ2aWV3Q29tbWVudHMoXG4gICAgICAgICAgICBmaXJzdFN0YXRlbWVudCB8fCBzb3VyY2VGaWxlLCBmaWxlQ29tbWVudHMuc2xpY2UoMCwgZmlsZW92ZXJ2aWV3SWR4KSxcbiAgICAgICAgICAgIGBkdXBsaWNhdGUgZmlsZSBsZXZlbCBjb21tZW50YCk7XG4gICAgICB9XG5cbiAgICAgIGF1Z21lbnRGaWxlb3ZlcnZpZXdDb21tZW50cyh0YWdzKTtcbiAgICAgIGNvbnN0IGNvbW1lbnRUZXh0ID0ganNkb2MudG9TdHJpbmdXaXRob3V0U3RhcnRFbmQodGFncyk7XG5cbiAgICAgIGlmIChmaWxlb3ZlcnZpZXdJZHggPCAwKSB7XG4gICAgICAgIC8vIE5vIGV4aXN0aW5nIGNvbW1lbnQgdG8gbWVyZ2Ugd2l0aCwganVzdCBlbWl0IGEgbmV3IG9uZS5cbiAgICAgICAgcmV0dXJuIGFkZE5ld0ZpbGVvdmVydmlld0NvbW1lbnQoc291cmNlRmlsZSwgY29tbWVudFRleHQpO1xuICAgICAgfVxuXG4gICAgICBmaWxlQ29tbWVudHNbZmlsZW92ZXJ2aWV3SWR4XS50ZXh0ID0gY29tbWVudFRleHQ7XG4gICAgICAvLyBzZiBkb2VzIG5vdCBuZWVkIHRvIGJlIHVwZGF0ZWQsIHN5bnRoZXNpemVkIGNvbW1lbnRzIGFyZSBtdXRhYmxlLlxuICAgICAgcmV0dXJuIHNvdXJjZUZpbGU7XG4gICAgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYWRkTmV3RmlsZW92ZXJ2aWV3Q29tbWVudChzZjogdHMuU291cmNlRmlsZSwgY29tbWVudFRleHQ6IHN0cmluZyk6IHRzLlNvdXJjZUZpbGUge1xuICBsZXQgc3ludGhldGljRmlyc3RTdGF0ZW1lbnQgPSBjcmVhdGVOb3RFbWl0dGVkU3RhdGVtZW50KHNmKTtcbiAgc3ludGhldGljRmlyc3RTdGF0ZW1lbnQgPSB0cy5hZGRTeW50aGV0aWNUcmFpbGluZ0NvbW1lbnQoXG4gICAgICBzeW50aGV0aWNGaXJzdFN0YXRlbWVudCwgdHMuU3ludGF4S2luZC5NdWx0aUxpbmVDb21tZW50VHJpdmlhLCBjb21tZW50VGV4dCwgdHJ1ZSk7XG4gIHJldHVybiB1cGRhdGVTb3VyY2VGaWxlTm9kZShzZiwgdHMuY3JlYXRlTm9kZUFycmF5KFtzeW50aGV0aWNGaXJzdFN0YXRlbWVudCwgLi4uc2Yuc3RhdGVtZW50c10pKTtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZW92ZXJ2aWV3X2NvbW1lbnRfdHJhbnNmb3JtZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZmlsZW92ZXJ2aWV3X2NvbW1lbnRfdHJhbnNmb3JtZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFFSCx5Q0FBaUM7SUFDakMsaUVBQThIO0lBQzlILDJDQUFtQztJQUVuQzs7O09BR0c7SUFDSCxJQUFNLDRCQUE0QixHQUM5QixJQUFJLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBRTNFOzs7OztPQUtHO0lBQ0gscUNBQXFDLElBQWlCO1FBQ3BELHdDQUF3QztRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxPQUFPLEtBQUssY0FBYyxFQUE1QixDQUE0QixDQUFDLEVBQUU7WUFDakQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUMsQ0FBQyxDQUFDO1NBQ3hFO1FBRUQsa0NBQWtDO1FBQ2xDLDBGQUEwRjtRQUMxRixrQ0FBa0M7UUFDbEMsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxPQUFPLEtBQUssVUFBVSxFQUF4QixDQUF3QixDQUFDLENBQUM7UUFDM0QsSUFBSSxZQUF5QixDQUFDO1FBQzlCLElBQUksV0FBVyxFQUFFO1lBQ2YsWUFBWSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMs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QUFLLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRXhELElBQUksZUFBZSxHQUFHLENBQUMsRUFBRTtvQkFDdkIsMERBQTBEO29CQUMxRCxPQUFPLHlCQUF5QixDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztpQkFDM0Q7Z0JBRUQsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUM7Z0JBQ2pELG9FQUFvRTtnQkFDcEUsT0FBTyxVQUFVLENBQUM7WUFDcEIsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQXBHRCxrRkFvR0M7SUFFRCxtQ0FBbUMsRUFBaUIsRUFBRSxXQUFtQjtRQUN2RSxJQUFJLHVCQUF1QixHQUFHLDRDQUF5QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVELHVCQUF1QixHQUFHLEVBQUUsQ0FBQywyQkFBMkIsQ0FDcEQsdUJBQXVCLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEYsT0FBTyx1Q0FBb0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLGVBQWUsV0FBRSx1QkFBdUIsR0FBSyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNuRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyBqc2RvYyBmcm9tICcuL2pzZG9jJztcbmltcG9ydCB7Y3JlYXRlTm90RW1pdHRlZFN0YXRlbWVudCwgcmVwb3J0RGlhZ25vc3RpYywgc3ludGhlc2l6ZUNvbW1lbnRSYW5nZXMsIHVwZGF0ZVNvdXJjZUZpbGVOb2RlfSBmcm9tICcuL3RyYW5zZm9ybWVyX3V0aWwnO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAnLi90eXBlc2NyaXB0JztcblxuLyoqXG4gKiBBIHNldCBvZiBKU0RvYyB0YWdzIHRoYXQgbWFyayBhIGNvbW1lbnQgYXMgYSBmaWxlb3ZlcnZpZXcgY29tbWVudC4gVGhlc2UgYXJlIHJlY29nbml6ZWQgYnkgb3RoZXJcbiAqIHBpZWNlcyBvZiBpbmZyYXN0cnVjdHVyZSAoQ2xvc3VyZSBDb21waWxlciwgbW9kdWxlIHN5c3RlbSwgLi4uKS5cbiAqL1xuY29uc3QgRklMRU9WRVJWSUVXX0NPTU1FTlRfTUFSS0VSUzogUmVhZG9ubHlTZXQ8c3RyaW5nPiA9XG4gICAgbmV3IFNldChbJ2ZpbGVvdmVydmlldycsICdleHRlcm5zJywgJ21vZE5hbWUnLCAnbW9kcycsICdwaW50b21vZHVsZSddKTtcblxuLyoqXG4gKiBHaXZlbiBhIHBhcnNlZCBcXEBmaWxlb3ZlcnZpZXcgY29tbWVudCwgZW5zdXJlcyBpdCBoYXMgYWxsIHRoZSBhdHRyaWJ1dGVzIHdlIG5lZWQuXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgdG8gbW9kaWZ5IGFuIGV4aXN0aW5nIGNvbW1lbnQgb3IgdG8gbWFrZSBhIG5ldyBvbmUuXG4gKlxuICogQHBhcmFtIHRhZ3MgQ29tbWVudCBhcyBwYXJzZWQgbGlzdCBvZiB0YWdzOyBtb2RpZmllZCBpbi1wbGFjZS5cbiAqL1xuZnVuY3Rpb24gYXVnbWVudEZpbGVvdmVydmlld0NvbW1lbnRzKHRhZ3M6IGpzZG9jLlRhZ1tdKSB7XG4gIC8vIEVuc3VyZSB3ZSBzdGFydCB3aXRoIGEgQGZpbGVvdmVydmlldy5cbiAgaWYgKCF0YWdzLmZpbmQodCA9PiB0LnRhZ05hbWUgPT09ICdmaWxlb3ZlcnZpZXcnKSkge1xuICAgIHRhZ3Muc3BsaWNlKDAsIDAsIHt0YWdOYW1lOiAnZmlsZW92ZXJ2aWV3JywgdGV4dDogJ2FkZGVkIGJ5IHRzaWNrbGUnfSk7XG4gIH1cblxuICAvLyBGaW5kIG9yIGNyZWF0ZSBhIEBzdXBwcmVzcyB0YWcuXG4gIC8vIENsb3N1cmUgY29tcGlsZXIgYmFyZnMgaWYgdGhlcmUncyBhIGR1cGxpY2F0ZWQgQHN1cHByZXNzIHRhZyBpbiBhIGZpbGUsIHNvIHRoZSB0YWcgbXVzdFxuICAvLyBvbmx5IGFwcGVhciBvbmNlIGFuZCBiZSBtZXJnZWQuXG4gIGxldCBzdXBwcmVzc1RhZyA9IHRhZ3MuZmluZCh0ID0+IHQudGFnTmFtZSA9PT0gJ3N1cHByZXNzJyk7XG4gIGxldCBzdXBwcmVzc2lvbnM6IFNldDxzdHJpbmc+O1xuICBpZiAoc3VwcHJlc3NUYWcpIHtcbiAgICBzdXBwcmVzc2lvbnMgPSBuZXcgU2V0KChzdXBwcmVzc1RhZy50eXBlIHx8ICcnKS5zcGxpdCgnLCcpLm1hcChzID0+IHMudHJpbSgpKSk7XG4gIH0gZWxzZSB7XG4gICAgc3VwcHJlc3NUYWcgPSB7dGFnTmFtZTogJ3N1cHByZXNzJywgdGV4dDogJ2NoZWNrZWQgYnkgdHNjJ307XG4gICAgdGFncy5wdXNoKHN1cHByZXNzVGFnKTtcbiAgICBzdXBwcmVzc2lvbnMgPSBuZXcgU2V0KCk7XG4gIH1cblxuICAvLyBFbnN1cmUgb3VyIHN1cHByZXNzaW9ucyBhcmUgaW5jbHVkZWQgaW4gdGhlIEBzdXBwcmVzcyB0YWc6XG4gIC8vIDEpIFN1cHByZXNzIGNoZWNrVHlwZXMuICBXZSBiZWxpZXZlIHRoZSBjb2RlIGhhcyBhbHJlYWR5IGJlZW4gdHlwZS1jaGVja2VkIGJ5IFR5cGVTY3JpcHQsXG4gIC8vIGFuZCB3ZSBjYW5ub3QgbW9kZWwgYWxsIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVjaXNpb25zIGluIENsb3N1cmUgc3ludGF4LlxuICBzdXBwcmVzc2lvbnMuYWRkKCdjaGVja1R5cGVzJyk7XG4gIC8vIDIpIFN1cHByZXNzIGV4dHJhUmVxdWlyZS4gIFdlIHJlbW92ZSBleHRyYSByZXF1aXJlcyBhdCB0aGUgVHlwZVNjcmlwdCBsZXZlbCwgc28gYW55IHJlcXVpcmVcbiAgLy8gdGhhdCBnZXRzIHRvIHRoZSBKUyBsZXZlbCBpcyBhIGxvYWQtYmVhcmluZyByZXF1aXJlLlxuICBzdXBwcmVzc2lvbnMuYWRkKCdleHRyYVJlcXVpcmUnKTtcbiAgLy8gMykgU3VwcHJlc3MgdXNlbGVzc0NvZGUuICBXZSBlbWl0IGFuIFwiaWYgKGZhbHNlKVwiIGFyb3VuZCB0eXBlIGRlY2xhcmF0aW9ucyxcbiAgLy8gd2hpY2ggaXMgZmxhZ2dlZCBhcyB1bnVzZWQgY29kZSB1bmxlc3Mgd2Ugc3VwcHJlc3MgaXQuXG4gIHN1cHByZXNzaW9ucy5hZGQoJ3VzZWxlc3NDb2RlJyk7XG4gIC8vIDQpIFN1cHByZXNzIG1pc3NpbmdSZXR1cm4uICBJZiB0aGUgVFMgY29tcGlsZXIncyBleGhhdXN0aXZlbmVzcyBhbmFseXNpc1xuICAvLyBjb25jbHVkZXMgdGhhdCBhbGwgcG9zc2libGUgYnJhbmNoZXMgcmV0dXJuIGEgdmFsdWUsIHRoZW4gd2UgZG9uJ3Qgd2FudFxuICAvLyBDbG9zdXJlIHRvIHNlY29uZC1ndWVzcyB0aGlzIGRlY2lzaW9uLlxuICBzdXBwcmVzc2lvbnMuYWRkKCdtaXNzaW5nUmV0dXJuJyk7XG4gIHN1cHByZXNzVGFnLnR5cGUgPSBBcnJheS5mcm9tKHN1cHByZXNzaW9ucy52YWx1ZXMoKSkuc29ydCgpLmpvaW4oJywnKTtcblxuICByZXR1cm4gdGFncztcbn1cblxuLyoqXG4gKiBBIHRyYW5zZm9ybWVyIHRoYXQgZW5zdXJlcyB0aGUgZW1pdHRlZCBKUyBmaWxlIGhhcyBhbiBcXEBmaWxlb3ZlcnZpZXcgY29tbWVudCB0aGF0IGNvbnRhaW5zIGFuXG4gKiBcXEBzdXBwcmVzcyB7Y2hlY2tUeXBlc30gYW5ub3RhdGlvbiBieSBlaXRoZXIgYWRkaW5nIG9yIHVwZGF0aW5nIGFuIGV4aXN0aW5nIGNvbW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1GaWxlb3ZlcnZpZXdDb21tZW50RmFjdG9yeShkaWFnbm9zdGljczogdHMuRGlhZ25vc3RpY1tdKSB7XG4gIHJldHVybiAoKTogKHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUpID0+IHRzLlNvdXJjZUZpbGUgPT4ge1xuICAgIGZ1bmN0aW9uIGNoZWNrTm9GaWxlb3ZlcnZpZXdDb21tZW50cyhcbiAgICAgICAgY29udGV4dDogdHMuTm9kZSwgY29tbWVudHM6IGpzZG9jLlN5bnRoZXNpemVkQ29tbWVudFdpdGhPcmlnaW5hbFtdLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgIGZvciAoY29uc3QgY29tbWVudCBvZiBjb21tZW50cykge1xuICAgICAgICBjb25zdCBwYXJzZSA9IGpzZG9jLnBhcnNlKGNvbW1lbnQpO1xuICAgICAgICBpZiAocGFyc2UgIT09IG51bGwgJiYgcGFyc2UudGFncy5zb21lKHQgPT4gRklMRU9WRVJWSUVXX0NPTU1FTlRfTUFSS0VSUy5oYXModC50YWdOYW1lKSkpIHtcbiAgICAgICAgICAvLyBSZXBvcnQgYSB3YXJuaW5nOyB0aGlzIHNob3VsZCBub3QgYnJlYWsgY29tcGlsYXRpb24gaW4gdGhpcmQgcGFydHkgY29kZS5cbiAgICAgICAgICByZXBvcnREaWFnbm9zdGljKFxuICAgICAgICAgICAgICBkaWFnbm9zdGljcywgY29udGV4dCwgbWVzc2FnZSwgY29tbWVudC5vcmlnaW5hbFJhbmdlLCB0cy5EaWFnbm9zdGljQ2F0ZWdvcnkuV2FybmluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUpID0+IHtcbiAgICAgIGNvbnN0IHRleHQgPSBzb3VyY2VGaWxlLmdldEZ1bGxUZXh0KCk7XG5cbiAgICAgIGxldCBmaWxlQ29tbWVudHM6IHRzLlN5bnRoZXNpemVkQ29tbWVudFtdID0gW107XG4gICAgICBjb25zdCBmaXJzdFN0YXRlbWVudCA9IHNvdXJjZUZpbGUuc3RhdGVtZW50cy5sZW5ndGggJiYgc291cmNlRmlsZS5zdGF0ZW1lbnRzWzBdIHx8IG51bGw7XG5cbiAgICAgIGNvbnN0IG9yaWdpbmFsQ29tbWVudHMgPSB0cy5nZXRMZWFkaW5nQ29tbWVudFJhbmdlcyh0ZXh0LCAwKSB8fCBbXTtcbiAgICAgIGlmICghZmlyc3RTdGF0ZW1lbnQpIHtcbiAgICAgICAgLy8gSW4gYW4gZW1wdHkgc291cmNlIGZpbGUsIGFsbCBjb21tZW50cyBhcmUgZmlsZS1sZXZlbCBjb21tZW50cy5cbiAgICAgICAgZmlsZUNvbW1lbnRzID0gc3ludGhlc2l6ZUNvbW1lbnRSYW5nZXMoc291cmNlRmlsZSwgb3JpZ2luYWxDb21tZW50cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTZWFyY2ggZm9yIHRoZSBsYXN0IGNvbW1lbnQgc3BsaXQgZnJvbSB0aGUgZmlsZSB3aXRoIGEgXFxuXFxuLiBBbGwgY29tbWVudHMgYmVmb3JlIHRoYXQgYXJlXG4gICAgICAgIC8vIGNvbnNpZGVyZWQgZmlsZW92ZXJ2aWV3IGNvbW1lbnRzLCBhbGwgY29tbWVudHMgYWZ0ZXIgdGhhdCBiZWxvbmcgdG8gdGhlIG5leHRcbiAgICAgICAgLy8gc3RhdGVtZW50KHMpLiBJZiBub25lIGZvdW5kLCBjb21tZW50cyByZW1haW5zIGVtcHR5LCBhbmQgdGhlIGNvZGUgYmVsb3cgd2lsbCBpbnNlcnQgYSBuZXdcbiAgICAgICAgLy8gZmlsZW92ZXJ2aWV3IGNvbW1lbnQuXG4gICAgICAgIGZvciAobGV0IGkgPSBvcmlnaW5hbENvbW1lbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgY29uc3QgZW5kID0gb3JpZ2luYWxDb21tZW50c1tpXS5lbmQ7XG4gICAgICAgICAgaWYgKCF0ZXh0LnN1YnN0cmluZyhlbmQpLnN0YXJ0c1dpdGgoJ1xcblxcbicpICYmXG4gICAgICAgICAgICAgICF0ZXh0LnN1YnN0cmluZyhlbmQpLnN0YXJ0c1dpdGgoJ1xcclxcblxcclxcbicpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gVGhpcyBjb21tZW50IGlzIHNlcGFyYXRlZCBmcm9tIHRoZSBzb3VyY2UgZmlsZSB3aXRoIGEgZG91YmxlIGJyZWFrLCBtYXJraW5nIGl0IChhbmQgYW55XG4gICAgICAgICAgLy8gcHJlY2VkaW5nIGNvbW1lbnRzKSBhcyBhIGZpbGUtbGV2ZWwgY29tbWVudC4gU3BsaXQgdGhlbSBvZmYgYW5kIGF0dGFjaCB0aGVtIG9udG8gYVxuICAgICAgICAgIC8vIE5vdEVtaXR0ZWRTdGF0ZW1lbnQsIHNvIHRoYXQgdGhleSBkbyBub3QgZ2V0IGxvc3QgbGF0ZXIgb24uXG4gICAgICAgICAgY29uc3Qgc3ludGhlc2l6ZWRDb21tZW50cyA9IGpzZG9jLnN5bnRoZXNpemVMZWFkaW5nQ29tbWVudHMoZmlyc3RTdGF0ZW1lbnQpO1xuICAgICAgICAgIGNvbnN0IG5vdEVtaXR0ZWQgPSB0cy5jcmVhdGVOb3RFbWl0dGVkU3RhdGVtZW50KHNvdXJjZUZpbGUpO1xuICAgICAgICAgIC8vIE1vZGlmeSB0aGUgY29tbWVudHMgb24gdGhlIGZpcnN0U3RhdGVtZW50IGluIHBsYWNlIGJ5IHJlbW92aW5nIHRoZSBmaWxlLWxldmVsIGNvbW1lbnRzLlxuICAgICAgICAgIGZpbGVDb21tZW50cyA9IHN5bnRoZXNpemVkQ29tbWVudHMuc3BsaWNlKDAsIGkgKyAxKTtcbiAgICAgICAgICAvLyBNb3ZlIHRoZSBmaWxlQ29tbWVudHMgb250byBub3RFbWl0dGVkLlxuICAgICAgICAgIHRzLnNldFN5bnRoZXRpY0xlYWRpbmdDb21tZW50cyhub3RFbWl0dGVkLCBmaWxlQ29tbWVudHMpO1xuICAgICAgICAgIHNvdXJjZUZpbGUgPSB1cGRhdGVTb3VyY2VGaWxlTm9kZShcbiAgICAgICAgICAgICAgc291cmNlRmlsZSxcbiAgICAgICAgICAgICAgdHMuY3JlYXRlTm9kZUFycmF5KFtub3RFbWl0dGVkLCBmaXJzdFN0YXRlbWVudCwgLi4uc291cmNlRmlsZS5zdGF0ZW1lbnRzLnNsaWNlKDEpXSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cblxuICAgICAgICAvLyBOb3cgd2FsayBldmVyeSB0b3AgbGV2ZWwgc3RhdGVtZW50IGFuZCBlc2NhcGUvZHJvcCBhbnkgQGZpbGVvdmVydmlldyBjb21tZW50cyBmb3VuZC5cbiAgICAgICAgLy8gQ2xvc3VyZSBpZ25vcmVzIGFsbCBAZmlsZW92ZXJ2aWV3IGNvbW1lbnRzIGJ1dCB0aGUgbGFzdCwgc28gdHNpY2tsZSBtdXN0IG1ha2Ugc3VyZSBub3QgdG9cbiAgICAgICAgLy8gZW1pdCBkdXBsaWNhdGVkIG9uZXMuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc291cmNlRmlsZS5zdGF0ZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3Qgc3RtdCA9IHNvdXJjZUZpbGUuc3RhdGVtZW50c1tpXTtcbiAgICAgICAgICAvLyBBY2NlcHQgdGhlIE5vdEVtaXR0ZWRTdGF0ZW1lbnQgaW5zZXJ0ZWQgYWJvdmUuXG4gICAgICAgICAgaWYgKGkgPT09IDAgJiYgc3RtdC5raW5kID09PSB0cy5TeW50YXhLaW5kLk5vdEVtaXR0ZWRTdGF0ZW1lbnQpIGNvbnRpbnVlO1xuICAgICAgICAgIGNvbnN0IGNvbW1lbnRzID0ganNkb2Muc3ludGhlc2l6ZUxlYWRpbmdDb21tZW50cyhzdG10KTtcbiAgICAgICAgICBjaGVja05vRmlsZW92ZXJ2aWV3Q29tbWVudHMoXG4gICAgICAgICAgICAgIHN0bXQsIGNvbW1lbnRzLFxuICAgICAgICAgICAgICBgZmlsZSBjb21tZW50cyBtdXN0IGJlIGF0IHRoZSB0b3Agb2YgdGhlIGZpbGUsIGAgK1xuICAgICAgICAgICAgICAgICAgYHNlcGFyYXRlZCBmcm9tIHRoZSBmaWxlIGJvZHkgYnkgYW4gZW1wdHkgbGluZS5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDbG9zdXJlIENvbXBpbGVyIGNvbnNpZGVycyB0aGUgKmxhc3QqIGNvbW1lbnQgd2l0aCBAZmlsZW92ZXJ2aWV3IChvciBAZXh0ZXJucyBvclxuICAgICAgLy8gQG5vY29tcGlsZSkgdGhhdCBoYXMgbm90IGJlZW4gYXR0YWNoZWQgdG8gc29tZSBvdGhlciB0cmVlIG5vZGUgdG8gYmUgdGhlIGZpbGUgb3ZlcnZpZXdcbiAgICAgIC8vIGNvbW1lbnQsIGFuZCBvbmx5IGFwcGxpZXMgQHN1cHByZXNzIHRhZ3MgZnJvbSBpdC4gR29vZ2xlLWludGVybmFsIHRvb2xpbmcgY29uc2lkZXJzICphbnkqXG4gICAgICAvLyBjb21tZW50IG1lbnRpb25pbmcgQGZpbGVvdmVydmlldy5cbiAgICAgIGxldCBmaWxlb3ZlcnZpZXdJZHggPSAtMTtcbiAgICAgIGxldCB0YWdzOiBqc2RvYy5UYWdbXSA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IGZpbGVDb21tZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBwYXJzZSA9IGpzZG9jLnBhcnNlQ29udGVudHMoZmlsZUNvbW1lbnRzW2ldLnRleHQpO1xuICAgICAgICBpZiAocGFyc2UgIT09IG51bGwgJiYgcGFyc2UudGFncy5zb21lKHQgPT4gRklMRU9WRVJWSUVXX0NPTU1FTlRfTUFSS0VSUy5oYXModC50YWdOYW1lKSkpIHtcbiAgICAgICAgICBmaWxlb3ZlcnZpZXdJZHggPSBpO1xuICAgICAgICAgIHRhZ3MgPSBwYXJzZS50YWdzO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWxlb3ZlcnZpZXdJZHggIT09IC0xKSB7XG4gICAgICAgIGNoZWNrTm9GaWxlb3ZlcnZpZXdDb21tZW50cyhcbiAgICAgICAgICAgIGZpcnN0U3RhdGVtZW50IHx8IHNvdXJjZUZpbGUsIGZpbGVDb21tZW50cy5zbGljZSgwLCBmaWxlb3ZlcnZpZXdJZHgpLFxuICAgICAgICAgICAgYGR1cGxpY2F0ZSBmaWxlIGxldmVsIGNvbW1lbnRgKTtcbiAgICAgIH1cblxuICAgICAgYXVnbWVudEZpbGVvdmVydmlld0NvbW1lbnRzKHRhZ3MpO1xuICAgICAgY29uc3QgY29tbWVudFRleHQgPSBqc2RvYy50b1N0cmluZ1dpdGhvdXRTdGFydEVuZCh0YWdzKTtcblxuICAgICAgaWYgKGZpbGVvdmVydmlld0lkeCA8IDApIHtcbiAgICAgICAgLy8gTm8gZXhpc3RpbmcgY29tbWVudCB0byBtZXJnZSB3aXRoLCBqdXN0IGVtaXQgYSBuZXcgb25lLlxuICAgICAgICByZXR1cm4gYWRkTmV3RmlsZW92ZXJ2aWV3Q29tbWVudChzb3VyY2VGaWxlLCBjb21tZW50VGV4dCk7XG4gICAgICB9XG5cbiAgICAgIGZpbGVDb21tZW50c1tmaWxlb3ZlcnZpZXdJZHhdLnRleHQgPSBjb21tZW50VGV4dDtcbiAgICAgIC8vIHNmIGRvZXMgbm90IG5lZWQgdG8gYmUgdXBkYXRlZCwgc3ludGhlc2l6ZWQgY29tbWVudHMgYXJlIG11dGFibGUuXG4gICAgICByZXR1cm4gc291cmNlRmlsZTtcbiAgICB9O1xuICB9O1xufVxuXG5mdW5jdGlvbiBhZGROZXdGaWxlb3ZlcnZpZXdDb21tZW50KHNmOiB0cy5Tb3VyY2VGaWxlLCBjb21tZW50VGV4dDogc3RyaW5nKTogdHMuU291cmNlRmlsZSB7XG4gIGxldCBzeW50aGV0aWNGaXJzdFN0YXRlbWVudCA9IGNyZWF0ZU5vdEVtaXR0ZWRTdGF0ZW1lbnQoc2YpO1xuICBzeW50aGV0aWNGaXJzdFN0YXRlbWVudCA9IHRzLmFkZFN5bnRoZXRpY1RyYWlsaW5nQ29tbWVudChcbiAgICAgIHN5bnRoZXRpY0ZpcnN0U3RhdGVtZW50LCB0cy5TeW50YXhLaW5kLk11bHRpTGluZUNvbW1lbnRUcml2aWEsIGNvbW1lbnRUZXh0LCB0cnVlKTtcbiAgcmV0dXJuIHVwZGF0ZVNvdXJjZUZpbGVOb2RlKHNmLCB0cy5jcmVhdGVOb2RlQXJyYXkoW3N5bnRoZXRpY0ZpcnN0U3RhdGVtZW50LCAuLi5zZi5zdGF0ZW1lbnRzXSkpO1xufVxuIl19

@@ -62,40 +62,79 @@ /**

var JSDOC_TAGS_WHITELIST = new Set([
'abstract', 'argument',
'author', 'consistentIdGenerator',
'const', 'constant',
'constructor', 'copyright',
'define', 'deprecated',
'desc', 'dict',
'disposes', 'enhance',
'enhanceable', 'enum',
'export', 'expose',
'extends', 'externs',
'fileoverview', 'final',
'hassoydelcall', 'hassoydeltemplate',
'hidden', 'id',
'idGenerator', 'ignore',
'implements', 'implicitCast',
'inheritDoc', 'interface',
'jaggerInject', 'jaggerModule',
'jaggerProvide', 'jaggerProvidePromise',
'lends', 'license',
'link', 'meaning',
'modifies', 'modName',
'mods', 'ngInject',
'noalias', 'nocollapse',
'nocompile', 'nosideeffects',
'override', 'owner',
'package', 'param',
'pintomodule', 'polymerBehavior',
'preserve', 'preserveTry',
'private', 'protected',
'public', 'record',
'requirecss', 'requires',
'return', 'returns',
'see', 'stableIdGenerator',
'struct', 'suppress',
'template', 'this',
'throws', 'type',
'typedef', 'unrestricted',
'version', 'wizaction',
'abstract',
'argument',
'author',
'consistentIdGenerator',
'const',
'constant',
'constructor',
'copyright',
'define',
'deprecated',
'desc',
'dict',
'disposes',
'enhance',
'enhanceable',
'enum',
'export',
'expose',
'extends',
'externs',
'fileoverview',
'final',
'hassoydelcall',
'hassoydeltemplate',
'hidden',
'id',
'idGenerator',
'ignore',
'implements',
'implicitCast',
'inheritDoc',
'interface',
'jaggerInject',
'jaggerModule',
'jaggerProvide',
'jaggerProvidePromise',
'lends',
'license',
'link',
'meaning',
'modifies',
'modName',
'mods',
'ngInject',
'noalias',
'nocollapse',
'nocompile',
'nosideeffects',
'override',
'owner',
'package',
'param',
'pintomodule',
'polymer',
'polymerBehavior',
'preserve',
'preserveTry',
'private',
'protected',
'public',
'record',
'requirecss',
'requires',
'return',
'returns',
'see',
'stableIdGenerator',
'struct',
'suppress',
'template',
'this',
'throws',
'type',
'typedef',
'unrestricted',
'version',
'wizaction',
'wizmodule',

@@ -453,3 +492,5 @@ ]);

var type = types.size > 0 ? Array.from(types).join('|') : undefined;
var text = texts.size > 0 ? Array.from(texts).join(' / ') : undefined;
// @template uses text (not type!) to declare its type parameters, with ','-separated text.
var isTemplateTag = tagName === 'template';
var text = texts.size > 0 ? Array.from(texts).join(isTemplateTag ? ',' : ' / ') : undefined;
var tag = { tagName: tagName, parameterName: parameterName, type: type, text: text };

@@ -468,2 +509,2 @@ // Note: a param can either be optional or a rest param; if we merged an

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNkb2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvanNkb2MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBRUgsMkNBQW1DO0lBc0NuQzs7Ozs7O09BTUc7SUFDSCxJQUFNLG9CQUFvQixHQUFHLElBQUksR0FBRyxDQUFDO1FBQ25DLFVBQVUsRUFBTyxVQUFVO1FBQzNCLFFBQVEsRUFBUyx1QkFBdUI7UUFDeEMsT0FBTyxFQUFVLFVBQVU7UUFDM0IsYUFBYSxFQUFJLFdBQVc7UUFDNUIsUUFBUSxFQUFTLFlBQVk7UUFDN0IsTUFBTSxFQUFXLE1BQU07UUFDdkIsVUFBVSxFQUFPLFNBQVM7UUFDMUIsYUFBYSxFQUFJLE1BQU07UUFDdkIsUUFBUSxFQUFTLFFBQVE7UUFDekIsU0FBUyxFQUFRLFNBQVM7UUFDMUIsY0FBYyxFQUFHLE9BQU87UUFDeEIsZUFBZSxFQUFFLG1CQUFtQjtRQUNwQyxRQUFRLEVBQVMsSUFBSTtRQUNyQixhQUFhLEVBQUksUUFBUTtRQUN6QixZQUFZLEVBQUssY0FBYztRQUMvQixZQUFZLEVBQUssV0FBVztRQUM1QixjQUFjLEVBQUcsY0FBYztRQUMvQixlQUFlLEVBQUUsc0JBQXNCO1FBQ3ZDLE9BQU8sRUFBVSxTQUFTO1FBQzFCLE1BQU0sRUFBVyxTQUFTO1FBQzFCLFVBQVUsRUFBTyxTQUFTO1FBQzFCLE1BQU0sRUFBVyxVQUFVO1FBQzNCLFNBQVMsRUFBUSxZQUFZO1FBQzdCLFdBQVcsRUFBTSxlQUFlO1FBQ2hDLFVBQVUsRUFBTyxPQUFPO1FBQ3hCLFNBQVMsRUFBUSxPQUFPO1FBQ3hCLGFBQWEsRUFBSSxpQkFBaUI7UUFDbEMsVUFBVSxFQUFPLGFBQWE7UUFDOUIsU0FBUyxFQUFRLFdBQVc7UUFDNUIsUUFBUSxFQUFTLFFBQVE7UUFDekIsWUFBWSxFQUFLLFVBQVU7UUFDM0Is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QyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDdEUsSUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDeEUsSUFBTSxHQUFHLEdBQVEsRUFBQyxPQUFPLFNBQUEsRUFBRSxhQUFhLGVBQUEsRUFBRSxJQUFJLE1BQUEsRUFBRSxJQUFJLE1BQUEsRUFBQyxDQUFDO1FBQ3RELHdFQUF3RTtRQUN4RSx1RUFBdUU7UUFDdkUsSUFBSSxTQUFTLEVBQUU7WUFDYixHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztTQUN0QjthQUFNLElBQUksUUFBUSxFQUFFO1lBQ25CLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1NBQ3JCO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBbENELHNCQWtDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAnLi90eXBlc2NyaXB0JztcblxuLyoqXG4gKiBUeXBlU2NyaXB0IGhhcyBhbiBBUEkgZm9yIEpTRG9jIGFscmVhZHksIGJ1dCBpdCdzIG5vdCBleHBvc2VkLlxuICogaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy83MzkzXG4gKiBGb3Igbm93IHdlIGNyZWF0ZSB0eXBlcyB0aGF0IGFyZSBzaW1pbGFyIHRvIHRoZWlycyBzbyB0aGF0IG1pZ3JhdGluZ1xuICogdG8gdGhlaXIgQVBJIHdpbGwgYmUgZWFzaWVyLiAgU2VlIGUuZy4gdHMuSlNEb2NUYWcgYW5kIHRzLkpTRG9jQ29tbWVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWcge1xuICAvKipcbiAgICogdGFnTmFtZSBpcyBlLmcuIFwicGFyYW1cIiBpbiBhbiBAcGFyYW0gZGVjbGFyYXRpb24uICBJdCBpcyB0aGUgZW1wdHkgc3RyaW5nXG4gICAqIGZvciB0aGUgcGxhaW4gdGV4dCBkb2N1bWVudGF0aW9uIHRoYXQgb2NjdXJzIGJlZm9yZSBhbnkgQGZvbyBsaW5lcy5cbiAgICovXG4gIHRhZ05hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIHBhcmFtZXRlck5hbWUgaXMgdGhlIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXIsIGUuZy4gXCJmb29cIlxuICAgKiBpbiBgXFxAcGFyYW0gZm9vIFRoZSBmb28gcGFyYW1gXG4gICAqL1xuICBwYXJhbWV0ZXJOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgYSBKU0RvYyBcXEBwYXJhbSwgXFxAdHlwZSBldGMgdGFnLCByZW5kZXJlZCBpbiBjdXJseSBicmFjZXMuXG4gICAqIENhbiBhbHNvIGhvbGQgdGhlIHR5cGUgb2YgYW4gXFxAc3VwcHJlc3MuXG4gICAqL1xuICB0eXBlPzogc3RyaW5nO1xuICAvKiogb3B0aW9uYWwgaXMgdHJ1ZSBmb3Igb3B0aW9uYWwgZnVuY3Rpb24gcGFyYW1ldGVycy4gKi9cbiAgb3B0aW9uYWw/OiBib29sZWFuO1xuICAvKiogcmVzdFBhcmFtIGlzIHRydWUgZm9yIFwiLi4ueDogZm9vW11cIiBmdW5jdGlvbiBwYXJhbWV0ZXJzLiAqL1xuICByZXN0UGFyYW0/OiBib29sZWFuO1xuICAvKipcbiAgICogZGVzdHJ1Y3R1cmluZyBpcyB0cnVlIGZvciBkZXN0cnVjdHVyaW5nIGJpbmQgcGFyYW1ldGVycywgd2hpY2ggcmVxdWlyZVxuICAgKiBub24tbnVsbCBhcmd1bWVudHMgb24gdGhlIENsb3N1cmUgc2lkZS4gIENhbiBsaWtlbHkgcmVtb3ZlIHRoaXNcbiAgICogb25jZSBUeXBlU2NyaXB0IG51bGxhYmxlIHR5cGVzIGFyZSBhdmFpbGFibGUuXG4gICAqL1xuICBkZXN0cnVjdHVyaW5nPzogYm9vbGVhbjtcbiAgLyoqIEFueSByZW1haW5pbmcgdGV4dCBvbiB0aGUgdGFnLCBlLmcuIHRoZSBkZXNjcmlwdGlvbi4gKi9cbiAgdGV4dD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIGxpc3Qgb2YgYWxsIEpTRG9jIHRhZ3MgYWxsb3dlZCBieSB0aGUgQ2xvc3VyZSBjb21waWxlci5cbiAqIFRoZSBwdWJsaWMgQ2xvc3VyZSBkb2NzIGRvbid0IGxpc3QgYWxsIHRoZSB0YWdzIGl0IGFsbG93czsgdGhpcyBsaXN0IGNvbWVzXG4gKiBmcm9tIHRoZSBjb21waWxlciBzb3VyY2UgaXRzZWxmLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9jbG9zdXJlLWNvbXBpbGVyL2Jsb2IvbWFzdGVyL3NyYy9jb20vZ29vZ2xlL2phdmFzY3JpcHQvanNjb21wL3BhcnNpbmcvQW5ub3RhdGlvbi5qYXZhXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2Nsb3N1cmUtY29tcGlsZXIvYmxvYi9tYXN0ZXIvc3JjL2NvbS9nb29nbGUvamF2YXNjcmlwdC9qc2NvbXAvcGFyc2luZy9QYXJzZXJDb25maWcucHJvcGVydGllc1xuICovXG5jb25zdCBKU0RPQ19UQUdTX1dISVRFTElTVCA9IG5ldyBTZXQoW1xuICAnYWJzdHJhY3QnLCAgICAgICdhcmd1bWVudCcsXG4gICdhdXRob3InLCAgICAgICAgJ2NvbnNpc3RlbnRJZEdlbmVyYXRvcicsXG4gICdjb25zdCcsICAgICAgICAgJ2NvbnN0YW50JyxcbiAgJ2NvbnN0cnVjdG9yJywgICAnY29weXJpZ2h0JyxcbiAgJ2RlZmluZScsICAgICAgICAnZGVwcmVjYXRlZCcsXG4gICdkZXNjJywgICAgICAgICAgJ2RpY3QnLFxuICAnZGlzcG9zZXMnLCAgICAgICdlbmhhbmNlJyxcbiAgJ2VuaGFuY2VhYmxlJywgICAnZW51bScsXG4gICdleHBvcnQnLCAgICAgICAgJ2V4cG9zZScsXG4gICdleHRlbmRzJywgICAgICAgJ2V4dGVybnMnLFxuICAnZmlsZW92ZXJ2aWV3JywgICdmaW5hbCcsXG4gICdoYXNzb3lkZWxjYWxsJywgJ2hhc3NveWRlbHRlbXBsYXRlJyxcbiAgJ2hpZGRlbicsICAgICAgICAnaWQnLFxuICAnaWRHZW5lcmF0b3InLCAgICdpZ25vcmUnLFxuICAnaW1wbGVtZW50cycsICAgICdpbXBsaWNpdENhc3QnLFxuICAnaW5oZXJpdERvYycsICAgICdpbnRlcmZhY2UnLFxuICAnamFnZ2VySW5qZWN0JywgICdqYWdnZXJNb2R1bGUnLFxuICAnamFnZ2VyUHJvdmlkZScsICdqYWdnZXJQcm92aWRlUHJvbWlzZScsXG4gICdsZW5kcycsICAgICAgICAgJ2xpY2Vuc2UnLFxuICAnbGluaycsICAgICAgICAgICdtZWFuaW5nJyxcbiAgJ21vZGlmaWVzJywgICAgICAnbW9kTmFtZScsXG4gICdtb2RzJywgICAgICAgICAgJ25nSW5qZWN0JyxcbiAgJ25vYWxpYXMnLCAgICAgICAnbm9jb2xsYXBzZScsXG4gICdub2NvbXBpbGUnLCAgICAgJ25vc2lkZWVmZmVjdHMnLFxuICAnb3ZlcnJpZGUnLCAgICAgICdvd25lcicsXG4gICdwYWNrYWdlJywgICAgICAgJ3BhcmFtJyxcbiAgJ3BpbnRvbW9kdWxlJywgICAncG9seW1lckJlaGF2aW9yJyxcbiAgJ3ByZXNlcnZlJywgICAgICAncHJlc2VydmVUcnknLFxuICAncHJpdmF0ZScsICAgICAgICdwcm90ZWN0ZWQnLFxuICAncHVibGljJywgICAgICAgICdyZWNvcmQnLFxuICAncmVxdWlyZWNzcycsICAgICdyZXF1aXJlcycsXG4gICdyZXR1cm4nLCAgICAgICAgJ3JldHVybnMnLFxuICAnc2VlJywgICAgICAgICAgICdzdGFibGVJZEdlbmVyYXRvcicsXG4gICdzdHJ1Y3QnLCAgICAgICAgJ3N1cHByZXNzJyxcbiAgJ3RlbXBsYXRlJywgICAgICAndGhpcycsXG4gICd0aHJvd3MnLCAgICAgICAgJ3R5cGUnLFxuICAndHlwZWRlZicsICAgICAgICd1bnJlc3RyaWN0ZWQnLFxuICAndmVyc2lvbicsICAgICAgICd3aXphY3Rpb24nLFxuICAnd2l6bW9kdWxlJyxcbl0pO1xuXG4vKipcbiAqIEEgbGlzdCBvZiBKU0RvYyBAdGFncyB0aGF0IGFyZSBuZXZlciBhbGxvd2VkIGluIFR5cGVTY3JpcHQgc291cmNlLiBUaGVzZSBhcmUgQ2xvc3VyZSB0YWdzIHRoYXRcbiAqIGNhbiBiZSBleHByZXNzZWQgaW4gdGhlIFR5cGVTY3JpcHQgc3VyZmFjZSBzeW50YXguIEFzIHRzaWNrbGUncyBlbWl0IHdpbGwgbWFuZ2xlIHR5cGUgbmFtZXMsXG4gKiB0aGVzZSB3aWxsIGNhdXNlIENsb3N1cmUgQ29tcGlsZXIgaXNzdWVzIGFuZCBzaG91bGQgbm90IGJlIHVzZWQuXG4gKi9cbmNvbnN0IEpTRE9DX1RBR1NfQkxBQ0tMSVNUID0gbmV3IFNldChbXG4gICdhdWdtZW50cycsICdjbGFzcycsICAgICAgJ2NvbnN0cnVjdHMnLCAnY29uc3RydWN0b3InLCAnZW51bScsICAgICAgJ2V4dGVuZHMnLCAnZmllbGQnLFxuICAnZnVuY3Rpb24nLCAnaW1wbGVtZW50cycsICdpbnRlcmZhY2UnLCAgJ2xlbmRzJywgICAgICAgJ25hbWVzcGFjZScsICdwcml2YXRlJywgJ3B1YmxpYycsXG4gICdyZWNvcmQnLCAgICdzdGF0aWMnLCAgICAgJ3RlbXBsYXRlJywgICAndGhpcycsICAgICAgICAndHlwZScsICAgICAgJ3R5cGVkZWYnLFxuXSk7XG5cbi8qKlxuICogQSBsaXN0IG9mIEpTRG9jIEB0YWdzIHRoYXQgbWlnaHQgaW5jbHVkZSBhIHt0eXBlfSBhZnRlciB0aGVtLiBPbmx5IGJhbm5lZCB3aGVuIGEgdHlwZSBpcyBwYXNzZWQuXG4gKiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBpbmNsdWRlIHRhZ3MgdGhhdCBjYXJyeSBhIG5vbi10eXBlIHN5c3RlbSB0eXBlLCBlLmcuIFxcQHN1cHByZXNzLlxuICovXG5jb25zdCBKU0RPQ19UQUdTX1dJVEhfVFlQRVMgPSBuZXcgU2V0KFtcbiAgJ2NvbnN0JyxcbiAgJ2V4cG9ydCcsXG4gICdwYXJhbScsXG4gICdyZXR1cm4nLFxuXSk7XG5cbi8qKlxuICogUmVzdWx0IG9mIHBhcnNpbmcgYSBKU0RvYyBjb21tZW50LiBTdWNoIGNvbW1lbnRzIGVzc2VudGlhbGx5IGFyZSBidWlsdCBvZiBhIGxpc3Qgb2YgdGFncy5cbiAqIEluIGFkZGl0aW9uIHRvIHRoZSB0YWdzLCB0aGlzIG1pZ2h0IGFsc28gY29udGFpbiB3YXJuaW5ncyB0byBpbmRpY2F0ZSBub24tZmF0YWwgcHJvYmxlbXNcbiAqIHdoaWxlIGZpbmRpbmcgdGhlIHRhZ3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkSlNEb2NDb21tZW50IHtcbiAgdGFnczogVGFnW107XG4gIHdhcm5pbmdzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogcGFyc2UgcGFyc2VzIEpTRG9jIG91dCBvZiBhIGNvbW1lbnQgc3RyaW5nLlxuICogUmV0dXJucyBudWxsIGlmIGNvbW1lbnQgaXMgbm90IEpTRG9jLlxuICovXG4vLyBUT0RPKG1hcnRpbnByb2JzdCk6IHJlcHJlc2VudGluZyBKU0RvYyBhcyBhIGxpc3Qgb2YgdGFncyBpcyB0b28gc2ltcGxpc3RpYy4gV2UgbmVlZCBmdW5jdGlvbmFsaXR5XG4vLyBzdWNoIGFzIG1lcmdpbmcgKGJlbG93KSwgZGUtZHVwbGljYXRpbmcgY2VydGFpbiB0YWdzIChAZGVwcmVjYXRlZCksIGFuZCBzcGVjaWFsIHRyZWF0bWVudCBmb3Jcbi8vIG90aGVycyAoZS5nLiBAc3VwcHJlc3MpLiBXZSBzaG91bGQgaW50cm9kdWNlIGEgcHJvcGVyIG1vZGVsIGNsYXNzIHdpdGggYSBtb3JlIHN1aXRhYmxlIGRhdGFcbi8vIHN0cnVjdXJlIChlLmcuIGEgTWFwPFRhZ05hbWUsIFZhbHVlc1tdPikuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UoY29tbWVudDogdHMuU3ludGhlc2l6ZWRDb21tZW50KTogUGFyc2VkSlNEb2NDb21tZW50fG51bGwge1xuICAvLyBUT0RPKGV2YW5tKTogdGhpcyBpcyBhIHBpbGUgb2YgaGFja3kgcmVnZXhlcyBmb3Igbm93LCBiZWNhdXNlIHdlXG4gIC8vIHdvdWxkIHJhdGhlciB1c2UgdGhlIGJldHRlciBUeXBlU2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIEpTRG9jXG4gIC8vIHBhcnNpbmcuICBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzczOTNcbiAgaWYgKGNvbW1lbnQua2luZCAhPT0gdHMuU3ludGF4S2luZC5NdWx0aUxpbmVDb21tZW50VHJpdmlhKSByZXR1cm4gbnVsbDtcbiAgLy8gY29tbWVudC50ZXh0IGRvZXMgbm90IGluY2x1ZGUgLyogYW5kICovLCBzbyBtdXN0IHN0YXJ0IHdpdGggJyonIGZvciBKU0RvYy5cbiAgaWYgKGNvbW1lbnQudGV4dFswXSAhPT0gJyonKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgdGV4dCA9IGNvbW1lbnQudGV4dC5zdWJzdHJpbmcoMSkudHJpbSgpO1xuICByZXR1cm4gcGFyc2VDb250ZW50cyh0ZXh0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbnB1dCBzdHJpbmcgd2l0aCBsaW5lIGVuZGluZ3Mgbm9ybWFsaXplZCB0byAnXFxuJy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUxpbmVFbmRpbmdzKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gaW5wdXQucmVwbGFjZSgvXFxyXFxuL2csICdcXG4nKTtcbn1cblxuLyoqXG4gKiBwYXJzZUNvbnRlbnRzIHBhcnNlcyBKU0RvYyBvdXQgb2YgYSBjb21tZW50IHRleHQuXG4gKiBSZXR1cm5zIG51bGwgaWYgY29tbWVudCBpcyBub3QgSlNEb2MuXG4gKlxuICogQHBhcmFtIGNvbW1lbnRUZXh0IGEgY29tbWVudCdzIHRleHQgY29udGVudCwgaS5lLiB0aGUgY29tbWVudCB3L28gLyogYW5kICogLy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ29udGVudHMoY29tbWVudFRleHQ6IHN0cmluZyk6IFBhcnNlZEpTRG9jQ29tbWVudHxudWxsIHtcbiAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgcHJvcGVyIGxpbmUgZW5kaW5ncyBiZWZvcmUgcGFyc2luZyBvbiBXaW5kb3dzLlxuICBjb21tZW50VGV4dCA9IG5vcm1hbGl6ZUxpbmVFbmRpbmdzKGNvbW1lbnRUZXh0KTtcbiAgLy8gU3RyaXAgYWxsIHRoZSBcIiAqIFwiIGJpdHMgZnJvbSB0aGUgZnJvbnQgb2YgZWFjaCBsaW5lLlxuICBjb21tZW50VGV4dCA9IGNvbW1lbnRUZXh0LnJlcGxhY2UoL15cXHMqXFwqPyA/L2dtLCAnJyk7XG4gIGNvbnN0IGxpbmVzID0gY29tbWVudFRleHQuc3BsaXQoJ1xcbicpO1xuICBjb25zdCB0YWdzOiBUYWdbXSA9IFtdO1xuICBjb25zdCB3YXJuaW5nczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgbGV0IG1hdGNoID0gbGluZS5tYXRjaCgvXlxccypAKFxcUyspICooLiopLyk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICBsZXQgW18sIHRhZ05hbWUsIHRleHRdID0gbWF0Y2g7XG4gICAgICBpZiAodGFnTmFtZSA9PT0gJ3JldHVybnMnKSB7XG4gICAgICAgIC8vIEEgc3lub255bSBmb3IgJ3JldHVybicuXG4gICAgICAgIHRhZ05hbWUgPSAncmV0dXJuJztcbiAgICAgIH1cbiAgICAgIGxldCB0eXBlOiBzdHJpbmd8dW5kZWZpbmVkO1xuICAgICAgaWYgKEpTRE9DX1RBR1NfQkxBQ0tMSVNULmhhcyh0YWdOYW1lKSkge1xuICAgICAgICB3YXJuaW5ncy5wdXNoKGBAJHt0YWdOYW1lfSBhbm5vdGF0aW9ucyBhcmUgcmVkdW5kYW50IHdpdGggVHlwZVNjcmlwdCBlcXVpdmFsZW50c2ApO1xuICAgICAgICBjb250aW51ZTsgIC8vIERyb3AgdGhlIHRhZyBzbyBDbG9zdXJlIHdvbid0IHByb2Nlc3MgaXQuXG4gICAgICB9IGVsc2UgaWYgKEpTRE9DX1RBR1NfV0lUSF9UWVBFUy5oYXModGFnTmFtZSkgJiYgdGV4dFswXSA9PT0gJ3snKSB7XG4gICAgICAgIHdhcm5pbmdzLnB1c2goXG4gICAgICAgICAgICBgdGhlIHR5cGUgYW5ub3RhdGlvbiBvbiBAJHt0YWdOYW1lfSBpcyByZWR1bmRhbnQgd2l0aCBpdHMgVHlwZVNjcmlwdCB0eXBlLCBgICtcbiAgICAgICAgICAgIGByZW1vdmUgdGhlIHsuLi59IHBhcnRgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT09ICdzdXBwcmVzcycpIHtcbiAgICAgICAgY29uc3Qgc3VwcHJlc3NNYXRjaCA9IHRleHQubWF0Y2goL15cXHsoLiopXFx9KC4qKSQvKTtcbiAgICAgICAgaWYgKCFzdXBwcmVzc01hdGNoKSB7XG4gICAgICAgICAgd2FybmluZ3MucHVzaChgbWFsZm9ybWVkIEBzdXBwcmVzcyB0YWc6IFwiJHt0ZXh0fVwiYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgWywgdHlwZSwgdGV4dF0gPSBzdXBwcmVzc01hdGNoO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT09ICdkaWN0Jykge1xuICAgICAgICB3YXJuaW5ncy5wdXNoKCd1c2UgaW5kZXggc2lnbmF0dXJlcyAoYFtrOiBzdHJpbmddOiB0eXBlYCkgaW5zdGVhZCBvZiBAZGljdCcpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gR3JhYiB0aGUgcGFyYW1ldGVyIG5hbWUgZnJvbSBAcGFyYW0gdGFncy5cbiAgICAgIGxldCBwYXJhbWV0ZXJOYW1lOiBzdHJpbmd8dW5kZWZpbmVkO1xuICAgICAgaWYgKHRhZ05hbWUgPT09ICdwYXJhbScpIHtcbiAgICAgICAgbWF0Y2ggPSB0ZXh0Lm1hdGNoKC9eKFxcUyspID8oLiopLyk7XG4gICAgICAgIGlmIChtYXRjaCkgW18sIHBhcmFtZXRlck5hbWUsIHRleHRdID0gbWF0Y2g7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhZzogVGFnID0ge3RhZ05hbWV9O1xuICAgICAgaWYgKHBhcmFtZXRlck5hbWUpIHRhZy5wYXJhbWV0ZXJOYW1lID0gcGFyYW1ldGVyTmFtZTtcbiAgICAgIGlmICh0ZXh0KSB0YWcudGV4dCA9IHRleHQ7XG4gICAgICBpZiAodHlwZSkgdGFnLnR5cGUgPSB0eXBlO1xuICAgICAgdGFncy5wdXNoKHRhZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRleHQgd2l0aG91dCBhIHByZWNlZGluZyBAdGFnIG9uIGl0IGlzIGVpdGhlciB0aGUgcGxhaW4gdGV4dFxuICAgICAgLy8gZG9jdW1lbnRhdGlvbiBvciBhIGNvbnRpbnVhdGlvbiBvZiBhIHByZXZpb3VzIHRhZy5cbiAgICAgIGlmICh0YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0YWdzLnB1c2goe3RhZ05hbWU6ICcnLCB0ZXh0OiBsaW5lfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBsYXN0VGFnID0gdGFnc1t0YWdzLmxlbmd0aCAtIDFdO1xuICAgICAgICBsYXN0VGFnLnRleHQgPSAobGFzdFRhZy50ZXh0IHx8ICcnKSArICdcXG4nICsgbGluZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4ge3RhZ3MsIHdhcm5pbmdzfTtcbiAgfVxuICByZXR1cm4ge3RhZ3N9O1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgYSBUYWcgaW50byBhIHN0cmluZyB1c2FibGUgaW4gYSBjb21tZW50LlxuICogUmV0dXJucyBhIHN0cmluZyBsaWtlIFwiIEBmb28ge2Jhcn0gYmF6XCIgKG5vdGUgdGhlIHdoaXRlc3BhY2UpLlxuICovXG5mdW5jdGlvbiB0YWdUb1N0cmluZyh0YWc6IFRhZywgZXNjYXBlRXh0cmFUYWdzID0gbmV3IFNldDxzdHJpbmc+KCkpOiBzdHJpbmcge1xuICBsZXQgb3V0ID0gJyc7XG4gIGlmICh0YWcudGFnTmFtZSkge1xuICAgIGlmICghSlNET0NfVEFHU19XSElURUxJU1QuaGFzKHRhZy50YWdOYW1lKSB8fCBlc2NhcGVFeHRyYVRhZ3MuaGFzKHRhZy50YWdOYW1lKSkge1xuICAgICAgLy8gRXNjYXBlIHRhZ3Mgd2UgZG9uJ3QgdW5kZXJzdGFuZC4gIFRoaXMgaXMgYSBzdWJ0bGVcbiAgICAgIC8vIGNvbXByb21pc2UgYmV0d2VlbiBtdWx0aXBsZSBpc3N1ZXMuXG4gICAgICAvLyAxKSBJZiB3ZSBwYXNzIHRocm91Z2ggdGhlc2Ugbm9uLUNsb3N1cmUgdGFncywgdGhlIHVzZXIgd2lsbFxuICAgICAgLy8gICAgZ2V0IGEgd2FybmluZyBmcm9tIENsb3N1cmUsIGFuZCB0aGUgcG9pbnQgb2YgdHNpY2tsZSBpc1xuICAgICAgLy8gICAgdG8gaW5zdWxhdGUgdGhlIHVzZXIgZnJvbSBDbG9zdXJlLlxuICAgICAgLy8gMikgVGhlIG91dHB1dCBvZiB0c2lja2xlIGlzIGZvciBDbG9zdXJlIGJ1dCBhbHNvIG1heSBiZSByZWFkXG4gICAgICAvLyAgICBieSBodW1hbnMsIGZvciBleGFtcGxlIG5vbi1UeXBlU2NyaXB0IHVzZXJzIG9mIEFuZ3VsYXIuXG4gICAgICAvLyAzKSBGaW5hbGx5LCB3ZSBkb24ndCB3YW50IHRvIHdhcm4gYmVjYXVzZSB1c2VycyBzaG91bGQgYmVcbiAgICAgIC8vICAgIGZyZWUgdG8gYWRkIHdoaWNoZXZlciBKU0RvYyB0aGV5IGZlZWwgbGlrZS4gIElmIHRoZSB1c2VyXG4gICAgICAvLyAgICB3YW50cyBoZWxwIGVuc3VyaW5nIHRoZXkgZGlkbid0IHR5cG8gYSB0YWcsIHRoYXQgaXMgdGhlXG4gICAgICAvLyAgICByZXNwb25zaWJpbGl0eSBvZiBhIGxpbnRlci5cbiAgICAgIG91dCArPSBgIFxcXFxAJHt0YWcudGFnTmFtZX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gYCBAJHt0YWcudGFnTmFtZX1gO1xuICAgIH1cbiAgfVxuICBpZiAodGFnLnR5cGUpIHtcbiAgICBvdXQgKz0gJyB7JztcbiAgICBpZiAodGFnLnJlc3RQYXJhbSkge1xuICAgICAgb3V0ICs9ICcuLi4nO1xuICAgIH1cbiAgICBvdXQgKz0gdGFnLnR5cGU7XG4gICAgaWYgKHRhZy5vcHRpb25hbCkge1xuICAgICAgb3V0ICs9ICc9JztcbiAgICB9XG4gICAgb3V0ICs9ICd9JztcbiAgfVxuICBpZiAodGFnLnBhcmFtZXRlck5hbWUpIHtcbiAgICBvdXQgKz0gJyAnICsgdGFnLnBhcmFtZXRlck5hbWU7XG4gIH1cbiAgaWYgKHRhZy50ZXh0KSB7XG4gICAgb3V0ICs9ICcgJyArIHRhZy50ZXh0LnJlcGxhY2UoL0AvZywgJ1xcXFxAJyk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIFRhZ3MgdGhhdCBtdXN0IG9ubHkgb2NjdXIgb25jZXMgaW4gYSBjb21tZW50IChmaWx0ZXJlZCBiZWxvdykuICovXG5jb25zdCBTSU5HTEVUT05fVEFHUyA9IG5ldyBTZXQoWydkZXByZWNhdGVkJ10pO1xuXG4vKiogVGFncyB0aGF0IGNvbmZsaWN0IHdpdGggXFxAdHlwZSBpbiBDbG9zdXJlIENvbXBpbGVyIChlLmcuIFxcQHBhcmFtKS4gKi9cbmV4cG9ydCBjb25zdCBUQUdTX0NPTkZMSUNUSU5HX1dJVEhfVFlQRSA9IG5ldyBTZXQoWydwYXJhbScsICdyZXR1cm4nXSk7XG5cbi8qKlxuICogQSBzeW50aGVzaXplZCBjb21tZW50IHRoYXQgKHBvc3NpYmx5KSBpbmNsdWRlcyB0aGUgb3JpZ2luYWwgY29tbWVudCByYW5nZSBpdCB3YXMgY3JlYXRlZCBmcm9tLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5bnRoZXNpemVkQ29tbWVudFdpdGhPcmlnaW5hbCBleHRlbmRzIHRzLlN5bnRoZXNpemVkQ29tbWVudCB7XG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luYWwgdGV4dCByYW5nZSBvZiB0aGUgY29tbWVudCAocmVsYXRpdmUgdG8gdGhlIHNvdXJjZSBmaWxlJ3MgZnVsbCB0ZXh0KS5cbiAgICovXG4gIG9yaWdpbmFsUmFuZ2U/OiB0cy5UZXh0UmFuZ2U7XG59XG5cbi8qKlxuICogc3ludGhlc2l6ZUxlYWRpbmdDb21tZW50cyBwYXJzZXMgdGhlIGxlYWRpbmcgY29tbWVudHMgb2Ygbm9kZSwgY29udmVydHMgdGhlbVxuICogdG8gc3ludGhldGljIGNvbW1lbnRzLCBhbmQgbWFrZXMgc3VyZSB0aGUgb3JpZ2luYWwgdGV4dCBjb21tZW50cyBkbyBub3QgZ2V0XG4gKiBlbWl0dGVkIGJ5IFR5cGVTY3JpcHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzeW50aGVzaXplTGVhZGluZ0NvbW1lbnRzKG5vZGU6IHRzLk5vZGUpOiBTeW50aGVzaXplZENvbW1lbnRXaXRoT3JpZ2luYWxbXSB7XG4gIGNvbnN0IGV4aXN0aW5nID0gdHMuZ2V0U3ludGhldGljTGVhZGluZ0NvbW1lbnRzKG5vZGUpO1xuICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcbiAgY29uc3QgdGV4dCA9IG5vZGUuZ2V0RnVsbFRleHQoKTtcbiAgY29uc3Qgc3ludGhDb21tZW50cyA9IGdldExlYWRpbmdDb21tZW50UmFuZ2VzU3ludGhlc2l6ZWQodGV4dCwgbm9kZS5nZXRGdWxsU3RhcnQoKSk7XG4gIGlmIChzeW50aENvbW1lbnRzLmxlbmd0aCkge1xuICAgIHRzLnNldFN5bnRoZXRpY0xlYWRpbmdDb21tZW50cyhub2RlLCBzeW50aENvbW1lbnRzKTtcbiAgICBzdXBwcmVzc0xlYWRpbmdDb21tZW50c1JlY3Vyc2l2ZWx5KG5vZGUpO1xuICB9XG4gIHJldHVybiBzeW50aENvbW1lbnRzO1xufVxuXG4vKipcbiAqIHBhcnNlTGVhZGluZ0NvbW1lbnRSYW5nZXNTeW50aGVzaXplZCBwYXJzZXMgdGhlIGxlYWRpbmcgY29tbWVudCByYW5nZXMgb3V0IG9mIHRoZSBnaXZlbiB0ZXh0IGFuZFxuICogY29udmVydHMgdGhlbSB0byBTeW50aGVzaXplZENvbW1lbnRzLlxuICogQHBhcmFtIG9mZnNldCB0aGUgb2Zmc2V0IG9mIHRleHQgaW4gdGhlIHNvdXJjZSBmaWxlLCBlLmcuIG5vZGUuZ2V0RnVsbFN0YXJ0KCkuXG4gKi9cbi8vIFZpc2libGVGb3JUZXN0aW5nXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGVhZGluZ0NvbW1lbnRSYW5nZXNTeW50aGVzaXplZChcbiAgICB0ZXh0OiBzdHJpbmcsIG9mZnNldCA9IDApOiBTeW50aGVzaXplZENvbW1lbnRXaXRoT3JpZ2luYWxbXSB7XG4gIGNvbnN0IGNvbW1lbnRzID0gdHMuZ2V0TGVhZGluZ0NvbW1lbnRSYW5nZXModGV4dCwgMCkgfHwgW107XG4gIHJldHVybiBjb21tZW50cy5tYXAoKGNyKTogU3ludGhlc2l6ZWRDb21tZW50V2l0aE9yaWdpbmFsID0+IHtcbiAgICAvLyBDb25mdXNpbmdseSwgQ29tbWVudFJhbmdlIGluIFR5cGVTY3JpcHQgaW5jbHVkZXMgc3RhcnQgYW5kIGVuZCBtYXJrZXJzLCBidXRcbiAgICAvLyBTeW50aGVzaXplZENvbW1lbnRzIGRvIG5vdC5cbiAgICBjb25zdCBjb21tZW50VGV4dCA9IGNyLmtpbmQgPT09IHRzLlN5bnRheEtpbmQuU2luZ2xlTGluZUNvbW1lbnRUcml2aWEgP1xuICAgICAgICB0ZXh0LnN1YnN0cmluZyhjci5wb3MgKyAyLCBjci5lbmQpIDpcbiAgICAgICAgdGV4dC5zdWJzdHJpbmcoY3IucG9zICsgMiwgY3IuZW5kIC0gMik7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNyLFxuICAgICAgdGV4dDogY29tbWVudFRleHQsXG4gICAgICBwb3M6IC0xLFxuICAgICAgZW5kOiAtMSxcbiAgICAgIG9yaWdpbmFsUmFuZ2U6IHtwb3M6IGNyLnBvcyArIG9mZnNldCwgZW5kOiBjci5lbmQgKyBvZmZzZXR9XG4gICAgfTtcbiAgfSk7XG59XG5cbi8qKlxuICogc3VwcHJlc3NDb21tZW50c1JlY3Vyc2l2ZWx5IHByZXZlbnRzIGVtaXQgb2YgbGVhZGluZyBjb21tZW50cyBvbiBub2RlLCBhbmQgYW55IHJlY3Vyc2l2ZSBub2Rlc1xuICogdW5kZXJuZWF0aCBpdCB0aGF0IHN0YXJ0IGF0IHRoZSBzYW1lIG9mZnNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1cHByZXNzTGVhZGluZ0NvbW1lbnRzUmVjdXJzaXZlbHkobm9kZTogdHMuTm9kZSkge1xuICAvLyBUeXBlU2NyaXB0IGVtaXRzIGxlYWRpbmcgY29tbWVudHMgb24gYSBub2RlLCB1bmxlc3M6XG4gIC8vIC0gdGhlIGNvbW1lbnQgd2FzIGVtaXR0ZWQgYnkgdGhlIHBhcmVudCBub2RlXG4gIC8vIC0gdGhlIG5vZGUgaGFzIHRoZSBOb0xlYWRpbmdDb21tZW50cyBlbWl0IGZsYWcuXG4gIC8vIEhvd2V2ZXIsIHRyYW5zZm9ybWF0aW9uIHN0ZXBzIHNvbWV0aW1lcyBjb3B5IG5vZGVzIHdpdGhvdXQga2VlcGluZyB0aGVpciBlbWl0IGZsYWdzLCBzbyBqdXN0XG4gIC8vIHNldHRpbmcgTm9MZWFkaW5nQ29tbWVudHMgcmVjdXJzaXZlbHkgaXMgbm90IGVub3VnaCwgd2UgbXVzdCBhbHNvIHNldCB0aGUgdGV4dCByYW5nZSB0byBhdm9pZFxuICAvLyB0aGUgY29waWVkIG5vZGUgdG8gaGF2ZSBjb21tZW50cyBlbWl0dGVkLlxuICBjb25zdCBvcmlnaW5hbFN0YXJ0ID0gbm9kZS5nZXRGdWxsU3RhcnQoKTtcbiAgY29uc3QgYWN0dWFsU3RhcnQgPSBub2RlLmdldFN0YXJ0KCk7XG4gIGZ1bmN0aW9uIHN1cHByZXNzQ29tbWVudHNJbnRlcm5hbChub2RlOiB0cy5Ob2RlKTogYm9vbGVhbiB7XG4gICAgdHMuc2V0RW1pdEZsYWdzKG5vZGUsIHRzLkVtaXRGbGFncy5Ob0xlYWRpbmdDb21tZW50cyk7XG4gICAgcmV0dXJuICEhdHMuZm9yRWFjaENoaWxkKG5vZGUsIChjaGlsZCkgPT4ge1xuICAgICAgaWYgKGNoaWxkLnBvcyAhPT0gb3JpZ2luYWxTdGFydCkgcmV0dXJuIHRydWU7XG4gICAgICByZXR1cm4gc3VwcHJlc3NDb21tZW50c0ludGVybmFsKGNoaWxkKTtcbiAgICB9KTtcbiAgfVxuICBzdXBwcmVzc0NvbW1lbnRzSW50ZXJuYWwobm9kZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1N5bnRoZXNpemVkQ29tbWVudChcbiAgICB0YWdzOiBUYWdbXSwgZXNjYXBlRXh0cmFUYWdzPzogU2V0PHN0cmluZz4pOiB0cy5TeW50aGVzaXplZENvbW1lbnQge1xuICByZXR1cm4ge1xuICAgIGtpbmQ6IHRzLlN5bnRheEtpbmQuTXVsdGlMaW5lQ29tbWVudFRyaXZpYSxcbiAgICB0ZXh0OiB0b1N0cmluZ1dpdGhvdXRTdGFydEVuZCh0YWdzLCBlc2NhcGVFeHRyYVRhZ3MpLFxuICAgIHBvczogLTEsXG4gICAgZW5kOiAtMSxcbiAgICBoYXNUcmFpbGluZ05ld0xpbmU6IHRydWUsXG4gIH07XG59XG5cbi8qKiBTZXJpYWxpemVzIGEgQ29tbWVudCBvdXQgdG8gYSBzdHJpbmcsIGJ1dCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBzdGFydCBhbmQgZW5kIGNvbW1lbnQgdG9rZW5zLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nV2l0aG91dFN0YXJ0RW5kKHRhZ3M6IFRhZ1tdLCBlc2NhcGVFeHRyYVRhZ3MgPSBuZXcgU2V0PHN0cmluZz4oKSk6IHN0cmluZyB7XG4gIHJldHVybiBzZXJpYWxpemUodGFncywgZmFsc2UsIGVzY2FwZUV4dHJhVGFncyk7XG59XG5cbi8qKiBTZXJpYWxpemVzIGEgQ29tbWVudCBvdXQgdG8gYSBzdHJpbmcgdXNhYmxlIGluIHNvdXJjZSBjb2RlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKHRhZ3M6IFRhZ1tdLCBlc2NhcGVFeHRyYVRhZ3MgPSBuZXcgU2V0PHN0cmluZz4oKSk6IHN0cmluZyB7XG4gIHJldHVybiBzZXJpYWxpemUodGFncywgdHJ1ZSwgZXNjYXBlRXh0cmFUYWdzKTtcbn1cblxuZnVuY3Rpb24gc2VyaWFsaXplKFxuICAgIHRhZ3M6IFRhZ1tdLCBpbmNsdWRlU3RhcnRFbmQ6IGJvb2xlYW4sIGVzY2FwZUV4dHJhVGFncyA9IG5ldyBTZXQ8c3RyaW5nPigpKTogc3RyaW5nIHtcbiAgaWYgKHRhZ3MubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG4gIGlmICh0YWdzLmxlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IHRhZyA9IHRhZ3NbMF07XG4gICAgaWYgKCh0YWcudGFnTmFtZSA9PT0gJ3R5cGUnIHx8IHRhZy50YWdOYW1lID09PSAndHlwZWRlZicgfHwgdGFnLnRhZ05hbWUgPT09ICdub2NvbGxhcHNlJykgJiZcbiAgICAgICAgKCF0YWcudGV4dCB8fCAhdGFnLnRleHQubWF0Y2goJ1xcbicpKSkge1xuICAgICAgLy8gU3BlY2lhbC1jYXNlIG9uZS1saW5lciBcInR5cGVcIiBhbmQgXCJub2NvbGxhcHNlXCIgdGFncyB0byBmaXQgb24gb25lIGxpbmUsIGUuZy5cbiAgICAgIC8vICAgLyoqIEB0eXBlIHtmb299ICovXG4gICAgICBjb25zdCB0ZXh0ID0gdGFnVG9TdHJpbmcodGFnLCBlc2NhcGVFeHRyYVRhZ3MpO1xuICAgICAgcmV0dXJuIGluY2x1ZGVTdGFydEVuZCA/IGAvKioke3RleHR9ICovYCA6IGAqJHt0ZXh0fSBgO1xuICAgIH1cbiAgICAvLyBPdGhlcndpc2UsIGZhbGwgdGhyb3VnaCB0byB0aGUgbXVsdGktbGluZSBvdXRwdXQuXG4gIH1cblxuICBsZXQgb3V0ID0gaW5jbHVkZVN0YXJ0RW5kID8gJy8qKlxcbicgOiAnKlxcbic7XG4gIGNvbnN0IGVtaXR0ZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCB0YWcgb2YgdGFncykge1xuICAgIGlmIChlbWl0dGVkLmhhcyh0YWcudGFnTmFtZSkgJiYgU0lOR0xFVE9OX1RBR1MuaGFzKHRhZy50YWdOYW1lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGVtaXR0ZWQuYWRkKHRhZy50YWdOYW1lKTtcbiAgICBvdXQgKz0gJyAqJztcbiAgICAvLyBJZiB0aGUgdGFnVG9TdHJpbmcgaXMgbXVsdGktbGluZSwgaW5zZXJ0IFwiICogXCIgcHJlZml4ZXMgb24gc3Vic2VxdWVudCBsaW5lcy5cbiAgICBvdXQgKz0gdGFnVG9TdHJpbmcodGFnLCBlc2NhcGVFeHRyYVRhZ3MpLnNwbGl0KCdcXG4nKS5qb2luKCdcXG4gKiAnKTtcbiAgICBvdXQgKz0gJ1xcbic7XG4gIH1cbiAgb3V0ICs9IGluY2x1ZGVTdGFydEVuZCA/ICcgKi9cXG4nIDogJyAnO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogTWVyZ2VzIG11bHRpcGxlIHRhZ3MgKG9mIHRoZSBzYW1lIHRhZ05hbWUgdHlwZSkgaW50byBhIHNpbmdsZSB1bmlmaWVkIHRhZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZSh0YWdzOiBUYWdbXSk6IFRhZyB7XG4gIGNvbnN0IHRhZ05hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IHBhcmFtZXRlck5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IHR5cGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IHRleHRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIC8vIElmIGFueSBvZiB0aGUgdGFncyBhcmUgb3B0aW9uYWwvcmVzdCwgdGhlbiB0aGUgbWVyZ2VkIG91dHB1dCBpcyBvcHRpb25hbC9yZXN0LlxuICBsZXQgb3B0aW9uYWwgPSBmYWxzZTtcbiAgbGV0IHJlc3RQYXJhbSA9IGZhbHNlO1xuICBmb3IgKGNvbnN0IHRhZyBvZiB0YWdzKSB7XG4gICAgdGFnTmFtZXMuYWRkKHRhZy50YWdOYW1lKTtcbiAgICBpZiAodGFnLnBhcmFtZXRlck5hbWUgIT09IHVuZGVmaW5lZCkgcGFyYW1ldGVyTmFtZXMuYWRkKHRhZy5wYXJhbWV0ZXJOYW1lKTtcbiAgICBpZiAodGFnLnR5cGUgIT09IHVuZGVmaW5lZCkgdHlwZXMuYWRkKHRhZy50eXBlKTtcbiAgICBpZiAodGFnLnRleHQgIT09IHVuZGVmaW5lZCkgdGV4dHMuYWRkKHRhZy50ZXh0KTtcbiAgICBpZiAodGFnLm9wdGlvbmFsKSBvcHRpb25hbCA9IHRydWU7XG4gICAgaWYgKHRhZy5yZXN0UGFyYW0pIHJlc3RQYXJhbSA9IHRydWU7XG4gIH1cblxuICBpZiAodGFnTmFtZXMuc2l6ZSAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IG1lcmdlIGRpZmZlcmluZyB0YWdzOiAke0pTT04uc3RyaW5naWZ5KHRhZ3MpfWApO1xuICB9XG4gIGNvbnN0IHRhZ05hbWUgPSB0YWdOYW1lcy52YWx1ZXMoKS5uZXh0KCkudmFsdWU7XG4gIGNvbnN0IHBhcmFtZXRlck5hbWUgPVxuICAgICAgcGFyYW1ldGVyTmFtZXMuc2l6ZSA+IDAgPyBBcnJheS5mcm9tKHBhcmFtZXRlck5hbWVzKS5qb2luKCdfb3JfJykgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHR5cGUgPSB0eXBlcy5zaXplID4gMCA/IEFycmF5LmZyb20odHlwZXMpLmpvaW4oJ3wnKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgdGV4dCA9IHRleHRzLnNpemUgPiAwID8gQXJyYXkuZnJvbSh0ZXh0cykuam9pbignIC8gJykgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHRhZzogVGFnID0ge3RhZ05hbWUsIHBhcmFtZXRlck5hbWUsIHR5cGUsIHRleHR9O1xuICAvLyBOb3RlOiBhIHBhcmFtIGNhbiBlaXRoZXIgYmUgb3B0aW9uYWwgb3IgYSByZXN0IHBhcmFtOyBpZiB3ZSBtZXJnZWQgYW5cbiAgLy8gb3B0aW9uYWwgYW5kIHJlc3QgcGFyYW0gdG9nZXRoZXIsIHByZWZlciBtYXJraW5nIGl0IGFzIGEgcmVzdCBwYXJhbS5cbiAgaWYgKHJlc3RQYXJhbSkge1xuICAgIHRhZy5yZXN0UGFyYW0gPSB0cnVlO1xuICB9IGVsc2UgaWYgKG9wdGlvbmFsKSB7XG4gICAgdGFnLm9wdGlvbmFsID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gdGFnO1xufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNkb2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvanNkb2MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBRUgsMkNBQW1DO0lBc0NuQzs7Ozs7O09BTUc7SUFDSCxJQUFNLG9CQUFvQixHQUFHLElBQUksR0FBRyxDQUFDO1FBQ25DLFVBQVU7UUFDVixVQUFVO1FBQ1YsUUFBUTtRQUNSLHVCQUF1QjtRQUN2QixPQUFPO1FBQ1AsVUFBVTtRQUNWLGFBQWE7UUFDYixXQUFXO1FBQ1gsUUFBUTtRQUNSLFlBQVk7UUFDWixNQUFNO1FBQ04sTUFBTTtRQUNOLFVBQVU7UUFDVixTQUFTO1FBQ1QsYUFBYTtRQUNiLE1BQU07UUFDTixRQUFRO1FBQ1IsUUFBUTtRQUNSLFNBQVM7UUFDVCxTQUFTO1FBQ1QsY0FBYztRQUNkLE9BQU87UUFDUCxlQUFlO1FBQ2YsbUJBQW1CO1FBQ25CLFFBQVE7UUFDUixJQUFJO1FBQ0osYUFBYTtRQUNiLFFBQVE7UUFDUixZQUFZO1FBQ1osY0FBYztRQUNkLFlBQVk7UUFDWixXQUFXO1FBQ1gsY0FBYztRQUNkLGNBQWM7UUFDZCxlQUFlO1FBQ2Ysc0JBQXNCO1FBQ3RCLE9BQU87UUFDUCxTQUFTO1FBQ1QsTUFBTTtRQUNOLFNBQVM7UUFDVCxVQUFVO1FBQ1YsU0FBUztRQUNULE1BQU07UUFDTixVQUFVO1FBQ1YsU0FBUztRQUNULFlBQVk7UUFDWixXQUFXO1FBQ1gsZUFBZTtRQUNmLFVBQVU7UUFDVixPQUFPO1FBQ1AsU0FBUztRQUNULE9BQU87UUFDUCxhQUFhO1FBQ2IsU0FBUztRQUNULGlCQUFpQjtRQUNqQixVQUFVO1FBQ1YsYUFBYTtRQUNiLFNBQVM7UUFDVCxXQUFXO1FBQ1gsUUFBUTtRQUNSLFFBQVE7UUFDUixZQUFZO1FBQ1osVUFBVTtRQUNWLFFBQVE7UUFDUixTQUFTO1FBQ1QsS0FBSztRQUNMLG1CQUFtQjtRQUNuQixRQUFRO1FBQ1IsVUFBVTtRQUNWLFVBQVU7UUFDVixNQUFNO1FBQ04sUUFBUTtRQUNSLE1BQU07UUFDTixTQUFTO1FBQ1QsY0FBYztRQUNkLFNBQVM7UUFDVCxXQUFXO1FBQ1gsV0FBVztLQUNaLENBQUMsQ0FBQztJQUVIOzs7O09BSUc7SUFDSCxJQUFNLG9CQUFvQixHQUFHLElBQUksR0FBRyxDQUFDO1FBQ25DLFVBQVUsRUFBRSxPQUFPLEVBQU8sWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQU8sU0FBUyxFQUFFLE9BQU87UUFDdEYsVUFBVSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUcsT0FBTyxFQUFRLFdBQVcsRUFBRSxTQUFTLEVBQUUsUUFBUTtRQUN2RixRQUFRLEVBQUksUUFBUSxFQUFNLFVBQVUsRUFBSSxNQUFNLEVBQVMsTUFBTSxFQUFPLFNBQVM7S0FDOUUsQ0FBQyxDQUFDO0lBRUg7OztPQUdHO0lBQ0gsSUFBTSxxQkFBcUIsR0FBRyxJQUFJLEdBQUcsQ0FBQztRQUNwQyxPQUFPO1FBQ1AsUUFBUTtRQUNSLE9BQU87UUFDUCxRQUFRO0tBQ1QsQ0FBQyxDQUFDO0lBWUg7OztPQUdHO0lBQ0gsb0dBQW9HO0lBQ3BHLGdHQUFnRztJQUNoRyw4RkFBOEY7SUFDOUYsNENBQTRDO0lBQzVDLGVBQXNCLE9BQThCO1FBQ2xELG1FQUFtRTtRQUNuRSxpRUFBaUU7UUFDakUsZ0VBQWdFO1FBQ2hFLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLHNCQUFzQjtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3ZFLDZFQUE2RTtRQUM3RSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3pDLElBQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzlDLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFURCxzQkFTQztJQUVEOztPQUVHO0lBQ0gsOEJBQXFDLEtBQWE7UUFDaEQsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRkQsb0RBRUM7SUFFRDs7Ozs7T0FLRztJQUNILHVCQUE4QixXQUFtQjs7UUFDL0MsbUVBQW1FO1FBQ25FLFdBQVcsR0FBRyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNoRCx3REFBd0Q7UUFDeEQsV0FBVyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELElBQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsSUFBTSxJQUFJLEdBQVUsRUFBRSxDQUFDO1FBQ3ZCLElBQU0sUUFBUSxHQUFhLEVBQUUsQ0FBQzs7WUFDOUIsS0FBbUIsSUFBQSxVQUFBLFNBQUEsS0FBSyxDQUFBLDRCQUFBLCtDQUFFO2dCQUFyQixJQUFNLElBQUksa0JBQUE7Z0JBQ2IsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLEtBQUssRUFBRTtvQkFDTCxJQUFBLHFCQUEwQixFQUF6QixTQUFDLEVBQUUsZUFBTyxFQUFFLFlBQUksQ0FBVTtvQkFDL0IsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFO3dCQUN6QiwwQkFBMEI7d0JBQzFCLE9BQU8sR0FBRyxRQUFRLENBQUM7cUJBQ3BCO29CQUNELElBQUksSUFBSSxTQUFrQixDQUFDO29CQUMzQixJQUFJLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTt3QkFDckMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFJLE9BQU8sMkRBQXdELENBQUMsQ0FBQzt3QkFDbkYsU0FBUyxDQUFFLDRDQUE0QztxQkFDeEQ7eUJBQU0sSUFBSSxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTt3QkFDaEUsUUFBUSxDQUFDLElBQUksQ0FDVCw2QkFBMkIsT0FBTyw2Q0FBMEM7NEJBQzVFLHVCQUF1QixDQUFDLENBQUM7d0JBQzdCLFNBQVM7cUJBQ1Y7eUJBQU0sSUFBSSxPQUFPLEtBQUssVUFBVSxFQUFFO3dCQUNqQyxJQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7d0JBQ25ELElBQUksQ0FBQyxhQUFhLEVBQUU7NEJBQ2xCLFFBQVEsQ0FBQyxJQUFJLENBQUMsZ0NBQTZCLElBQUksT0FBRyxDQUFDLENBQUM7eUJBQ3JEOzZCQUFNOzRCQUNMLDZCQUE4QixFQUEzQixZQUFJLEVBQUUsWUFBSSxDQUFrQjt5QkFDaEM7cUJBQ0Y7eUJBQU0sSUFBSSxPQUFPLEtBQUssTUFBTSxFQUFFO3dCQUM3QixRQUFRLENBQUMsSUFBSSxDQUFDLDZEQUE2RCxDQUFDLENBQUM7d0JBQzdFLFNBQVM7cUJBQ1Y7b0JBRUQsNENBQTRDO29CQUM1QyxJQUFJLGFBQWEsU0FBa0IsQ0FBQztvQkFDcEMsSUFBSSxPQUFPLEtBQUssT0FBTyxFQUFFO3dCQUN2QixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQzt3QkFDbkMsSUFBSSxLQUFLOzRCQUFFLHFCQUFnQyxFQUEvQixTQUFDLEVBQUUscUJBQWEsRUFBRSxZQUFJLENBQVU7cUJBQzdDO29CQUVELElBQU0sR0FBRyxHQUFRLEVBQUMsT0FBTyxTQUFBLEVBQUMsQ0FBQztvQkFDM0IsSUFBSSxhQUFhO3dCQUFFLEdBQUcsQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO29CQUNyRCxJQUFJLElBQUk7d0JBQUUsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7b0JBQzFCLElBQUksSUFBSTt3QkFBRSxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztvQkFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDaEI7cUJBQU07b0JBQ0wsK0RBQStEO29CQUMvRCxxREFBcUQ7b0JBQ3JELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7d0JBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO3FCQUN0Qzt5QkFBTTt3QkFDTCxJQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDdEMsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztxQkFDbkQ7aUJBQ0Y7YUFDRjs7Ozs7Ozs7O1FBQ0QsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN2QixPQUFPLEVBQUMsSUFBSSxNQUFBLEVBQUUsUUFBUSxVQUFBLEVBQUMsQ0FBQztTQUN6QjtRQUNELE9BQU8sRUFBQyxJQUFJLE1BQUEsRUFBQyxDQUFDO0lBQ2hCLENBQUM7SUFoRUQsc0NBZ0VDO0lBRUQ7OztPQUdHO0lBQ0gscUJBQXFCLEdBQVEsRUFBRSxlQUFtQztRQUFuQyxnQ0FBQSxFQUFBLHNCQUFzQixHQUFHLEVBQVU7UUFDaEUsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO1lBQ2YsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzlFLHFEQUFxRDtnQkFDckQsc0NBQXNDO2dCQUN0Qyw4REFBOEQ7Z0JBQzlELDZEQUE2RDtnQkFDN0Qsd0NBQXdDO2dCQUN4QywrREFBK0Q7Z0JBQy9ELDZEQUE2RDtnQkFDN0QsNERBQTREO2dCQUM1RCw4REFBOEQ7Z0JBQzlELDZEQUE2RDtnQkFDN0QsaUNBQWlDO2dCQUNqQyxHQUFHLElBQUksU0FBTyxHQUFHLENBQUMsT0FBUyxDQUFDO2FBQzdCO2lCQUFNO2dCQUNMLEdBQUcsSUFBSSxPQUFLLEdBQUcsQ0FBQyxPQUFTLENBQUM7YUFDM0I7U0FDRjtRQUNELElBQUksR0FBRyxDQUFDLElBQUksRUFBRTtZQUNaLEdBQUcsSUFBSSxJQUFJLENBQUM7WUFDWixJQUFJLEdBQUcsQ0FBQyxTQUFTLEVBQUU7Z0JBQ2pCLEdBQUcsSUFBSSxLQUFLLENBQUM7YUFDZDtZQUNELEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ2hCLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRTtnQkFDaEIsR0FBRyxJQUFJLEdBQUcsQ0FBQzthQUNaO1lBQ0QsR0FBRyxJQUFJLEdBQUcsQ0FBQztTQUNaO1FBQ0QsSUFBSSxHQUFHLENBQUMsYUFBYSxFQUFFO1lBQ3JCLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQztTQUNoQztRQUNELElBQUksR0FBRyxDQUFDLElBQUksRUFBRTtZQUNaLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQscUVBQXFFO0lBQ3JFLElBQU0sY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUUvQyx5RUFBeUU7SUFDNUQsUUFBQSwwQkFBMEIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBWXZFOzs7O09BSUc7SUFDSCxtQ0FBMEMsSUFBYTtRQUNyRCxJQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEQsSUFBSSxRQUFRO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFDOUIsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2hDLElBQU0sYUFBYSxHQUFHLGtDQUFrQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUNwRixJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUU7WUFDeEIsRUFBRSxDQUFDLDJCQUEyQixDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztZQUNwRCxrQ0FBa0MsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMxQztRQUNELE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFWRCw4REFVQztJQUVEOzs7O09BSUc7SUFDSCxvQkFBb0I7SUFDcEIsNENBQ0ksSUFBWSxFQUFFLE1BQVU7UUFBVix1QkFBQSxFQUFBLFVBQVU7UUFDMUIsSUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0QsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQUMsRUFBRTtZQUNyQiw4RUFBOEU7WUFDOUUsOEJBQThCO1lBQzlCLElBQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2dCQUNuRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDM0Msb0JBQ0ssRUFBRSxJQUNMLElBQUksRUFBRSxXQUFXLEVBQ2pCLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFDUCxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQ1AsYUFBYSxFQUFFLEVBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLE1BQU0sRUFBQyxJQUMzRDtRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQWpCRCxnRkFpQkM7SUFFRDs7O09BR0c7SUFDSCw0Q0FBbUQsSUFBYTtRQUM5RCx1REFBdUQ7UUFDdkQsK0NBQStDO1FBQy9DLGtEQUFrRDtRQUNsRCwrRkFBK0Y7UUFDL0YsZ0dBQWdHO1FBQ2hHLDRDQUE0QztRQUM1QyxJQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDMUMsSUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3BDLGtDQUFrQyxJQUFhO1lBQzdDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUN0RCxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxVQUFDLEtBQUs7Z0JBQ25DLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxhQUFhO29CQUFFLE9BQU8sSUFBSSxDQUFDO2dCQUM3QyxPQUFPLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFqQkQsZ0ZBaUJDO0lBRUQsOEJBQ0ksSUFBVyxFQUFFLGVBQTZCO1FBQzVDLE9BQU87WUFDTCxJQUFJLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0I7WUFDMUMsSUFBSSxFQUFFLHVCQUF1QixDQUFDLElBQUksRUFBRSxlQUFlLENBQUM7WUFDcEQsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNQLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDUCxrQkFBa0IsRUFBRSxJQUFJO1NBQ3pCLENBQUM7SUFDSixDQUFDO0lBVEQsb0RBU0M7SUFFRCxtR0FBbUc7SUFDbkcsaUNBQXdDLElBQVcsRUFBRSxlQUFtQztRQUFuQyxnQ0FBQSxFQUFBLHNCQUFzQixHQUFHLEVBQVU7UUFDdEYsT0FBTyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRkQsMERBRUM7SUFFRCxrRUFBa0U7SUFDbEUsa0JBQXlCLElBQVcsRUFBRSxlQUFtQztRQUFuQyxnQ0FBQSxFQUFBLHNCQUFzQixHQUFHLEVBQVU7UUFDdkUsT0FBTyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRkQsNEJBRUM7SUFFRCxtQkFDSSxJQUFXLEVBQUUsZUFBd0IsRUFBRSxlQUFtQztRQUFuQyxnQ0FBQSxFQUFBLHNCQUFzQixHQUFHLEVBQVU7O1FBQzVFLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDakMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNyQixJQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEtBQUssTUFBTSxJQUFJLEdBQUcsQ0FBQyxPQUFPLEtBQUssU0FBUyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEtBQUssWUFBWSxDQUFDO2dCQUNyRixDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7Z0JBQ3hDLCtFQUErRTtnQkFDL0UsdUJBQXVCO2dCQUN2QixJQUFNLElBQUksR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDO2dCQUMvQyxPQUFPLGVBQWUsQ0FBQyxDQUFDLENBQUMsUUFBTSxJQUFJLFFBQUssQ0FBQyxDQUFDLENBQUMsTUFBSSxJQUFJLE1BQUcsQ0FBQzthQUN4RDtZQUNELG9EQUFvRDtTQUNyRDtRQUVELElBQUksR0FBRyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDNUMsSUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQzs7WUFDbEMsS0FBa0IsSUFBQSxTQUFBLFNBQUEsSUFBSSxDQUFBLDBCQUFBLDRDQUFFO2dCQUFuQixJQUFNLEdBQUcsaUJBQUE7Z0JBQ1osSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDL0QsU0FBUztpQkFDVjtnQkFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDekIsR0FBRyxJQUFJLElBQUksQ0FBQztnQkFDWiwrRUFBK0U7Z0JBQy9FLEdBQUcsSUFBSSxXQUFXLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ25FLEdBQUcsSUFBSSxJQUFJLENBQUM7YUFDYjs7Ozs7Ozs7O1FBQ0QsR0FBRyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDdkMsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsaUZBQWlGO0lBQ2pGLGVBQXNCLElBQVc7O1FBQy9CLElBQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDbkMsSUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUN6QyxJQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBQ2hDLElBQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDaEMsaUZBQWlGO1FBQ2pGLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7O1lBQ3RCLEtBQWtCLElBQUEsU0FBQSxTQUFBLElBQUksQ0FBQSwwQkFBQSw0Q0FBRTtnQkFBbkIsSUFBTSxLQUFHLGlCQUFBO2dCQUNaLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMxQixJQUFJLEtBQUcsQ0FBQyxhQUFhLEtBQUssU0FBUztvQkFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDM0UsSUFBSSxLQUFHLENBQUMsSUFBSSxLQUFLLFNBQVM7b0JBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hELElBQUksS0FBRyxDQUFDLElBQUksS0FBSyxTQUFTO29CQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoRCxJQUFJLEtBQUcsQ0FBQyxRQUFRO29CQUFFLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ2xDLElBQUksS0FBRyxDQUFDLFNBQVM7b0JBQUUsU0FBUyxHQUFHLElBQUksQ0FBQzthQUNyQzs7Ozs7Ozs7O1FBRUQsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFnQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBRyxDQUFDLENBQUM7U0FDekU7UUFDRCxJQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQy9DLElBQU0sYUFBYSxHQUNmLGNBQWMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2xGLElBQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3RFLDJGQUEyRjtRQUMzRixJQUFNLGFBQWEsR0FBRyxPQUFPLEtBQUssVUFBVSxDQUFDO1FBQzdDLElBQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUM5RixJQUFNLEdBQUcsR0FBUSxFQUFDLE9BQU8sU0FBQSxFQUFFLGFBQWEsZUFBQSxFQUFFLElBQUksTUFBQSxFQUFFLElBQUksTUFBQSxFQUFDLENBQUM7UUFDdEQsd0VBQXdFO1FBQ3hFLHVFQUF1RTtRQUN2RSxJQUFJLFNBQVMsRUFBRTtZQUNiLEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1NBQ3RCO2FBQU0sSUFBSSxRQUFRLEVBQUU7WUFDbkIsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7U0FDckI7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFwQ0Qsc0JBb0NDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICcuL3R5cGVzY3JpcHQnO1xuXG4vKipcbiAqIFR5cGVTY3JpcHQgaGFzIGFuIEFQSSBmb3IgSlNEb2MgYWxyZWFkeSwgYnV0IGl0J3Mgbm90IGV4cG9zZWQuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzczOTNcbiAqIEZvciBub3cgd2UgY3JlYXRlIHR5cGVzIHRoYXQgYXJlIHNpbWlsYXIgdG8gdGhlaXJzIHNvIHRoYXQgbWlncmF0aW5nXG4gKiB0byB0aGVpciBBUEkgd2lsbCBiZSBlYXNpZXIuICBTZWUgZS5nLiB0cy5KU0RvY1RhZyBhbmQgdHMuSlNEb2NDb21tZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhZyB7XG4gIC8qKlxuICAgKiB0YWdOYW1lIGlzIGUuZy4gXCJwYXJhbVwiIGluIGFuIEBwYXJhbSBkZWNsYXJhdGlvbi4gIEl0IGlzIHRoZSBlbXB0eSBzdHJpbmdcbiAgICogZm9yIHRoZSBwbGFpbiB0ZXh0IGRvY3VtZW50YXRpb24gdGhhdCBvY2N1cnMgYmVmb3JlIGFueSBAZm9vIGxpbmVzLlxuICAgKi9cbiAgdGFnTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogcGFyYW1ldGVyTmFtZSBpcyB0aGUgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlciwgZS5nLiBcImZvb1wiXG4gICAqIGluIGBcXEBwYXJhbSBmb28gVGhlIGZvbyBwYXJhbWBcbiAgICovXG4gIHBhcmFtZXRlck5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBhIEpTRG9jIFxcQHBhcmFtLCBcXEB0eXBlIGV0YyB0YWcsIHJlbmRlcmVkIGluIGN1cmx5IGJyYWNlcy5cbiAgICogQ2FuIGFsc28gaG9sZCB0aGUgdHlwZSBvZiBhbiBcXEBzdXBwcmVzcy5cbiAgICovXG4gIHR5cGU/OiBzdHJpbmc7XG4gIC8qKiBvcHRpb25hbCBpcyB0cnVlIGZvciBvcHRpb25hbCBmdW5jdGlvbiBwYXJhbWV0ZXJzLiAqL1xuICBvcHRpb25hbD86IGJvb2xlYW47XG4gIC8qKiByZXN0UGFyYW0gaXMgdHJ1ZSBmb3IgXCIuLi54OiBmb29bXVwiIGZ1bmN0aW9uIHBhcmFtZXRlcnMuICovXG4gIHJlc3RQYXJhbT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBkZXN0cnVjdHVyaW5nIGlzIHRydWUgZm9yIGRlc3RydWN0dXJpbmcgYmluZCBwYXJhbWV0ZXJzLCB3aGljaCByZXF1aXJlXG4gICAqIG5vbi1udWxsIGFyZ3VtZW50cyBvbiB0aGUgQ2xvc3VyZSBzaWRlLiAgQ2FuIGxpa2VseSByZW1vdmUgdGhpc1xuICAgKiBvbmNlIFR5cGVTY3JpcHQgbnVsbGFibGUgdHlwZXMgYXJlIGF2YWlsYWJsZS5cbiAgICovXG4gIGRlc3RydWN0dXJpbmc/OiBib29sZWFuO1xuICAvKiogQW55IHJlbWFpbmluZyB0ZXh0IG9uIHRoZSB0YWcsIGUuZy4gdGhlIGRlc2NyaXB0aW9uLiAqL1xuICB0ZXh0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgbGlzdCBvZiBhbGwgSlNEb2MgdGFncyBhbGxvd2VkIGJ5IHRoZSBDbG9zdXJlIGNvbXBpbGVyLlxuICogVGhlIHB1YmxpYyBDbG9zdXJlIGRvY3MgZG9uJ3QgbGlzdCBhbGwgdGhlIHRhZ3MgaXQgYWxsb3dzOyB0aGlzIGxpc3QgY29tZXNcbiAqIGZyb20gdGhlIGNvbXBpbGVyIHNvdXJjZSBpdHNlbGYuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2Nsb3N1cmUtY29tcGlsZXIvYmxvYi9tYXN0ZXIvc3JjL2NvbS9nb29nbGUvamF2YXNjcmlwdC9qc2NvbXAvcGFyc2luZy9Bbm5vdGF0aW9uLmphdmFcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1jb21waWxlci9ibG9iL21hc3Rlci9zcmMvY29tL2dvb2dsZS9qYXZhc2NyaXB0L2pzY29tcC9wYXJzaW5nL1BhcnNlckNvbmZpZy5wcm9wZXJ0aWVzXG4gKi9cbmNvbnN0IEpTRE9DX1RBR1NfV0hJVEVMSVNUID0gbmV3IFNldChbXG4gICdhYnN0cmFjdCcsXG4gICdhcmd1bWVudCcsXG4gICdhdXRob3InLFxuICAnY29uc2lzdGVudElkR2VuZXJhdG9yJyxcbiAgJ2NvbnN0JyxcbiAgJ2NvbnN0YW50JyxcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2NvcHlyaWdodCcsXG4gICdkZWZpbmUnLFxuICAnZGVwcmVjYXRlZCcsXG4gICdkZXNjJyxcbiAgJ2RpY3QnLFxuICAnZGlzcG9zZXMnLFxuICAnZW5oYW5jZScsXG4gICdlbmhhbmNlYWJsZScsXG4gICdlbnVtJyxcbiAgJ2V4cG9ydCcsXG4gICdleHBvc2UnLFxuICAnZXh0ZW5kcycsXG4gICdleHRlcm5zJyxcbiAgJ2ZpbGVvdmVydmlldycsXG4gICdmaW5hbCcsXG4gICdoYXNzb3lkZWxjYWxsJyxcbiAgJ2hhc3NveWRlbHRlbXBsYXRlJyxcbiAgJ2hpZGRlbicsXG4gICdpZCcsXG4gICdpZEdlbmVyYXRvcicsXG4gICdpZ25vcmUnLFxuICAnaW1wbGVtZW50cycsXG4gICdpbXBsaWNpdENhc3QnLFxuICAnaW5oZXJpdERvYycsXG4gICdpbnRlcmZhY2UnLFxuICAnamFnZ2VySW5qZWN0JyxcbiAgJ2phZ2dlck1vZHVsZScsXG4gICdqYWdnZXJQcm92aWRlJyxcbiAgJ2phZ2dlclByb3ZpZGVQcm9taXNlJyxcbiAgJ2xlbmRzJyxcbiAgJ2xpY2Vuc2UnLFxuICAnbGluaycsXG4gICdtZWFuaW5nJyxcbiAgJ21vZGlmaWVzJyxcbiAgJ21vZE5hbWUnLFxuICAnbW9kcycsXG4gICduZ0luamVjdCcsXG4gICdub2FsaWFzJyxcbiAgJ25vY29sbGFwc2UnLFxuICAnbm9jb21waWxlJyxcbiAgJ25vc2lkZWVmZmVjdHMnLFxuICAnb3ZlcnJpZGUnLFxuICAnb3duZXInLFxuICAncGFja2FnZScsXG4gICdwYXJhbScsXG4gICdwaW50b21vZHVsZScsXG4gICdwb2x5bWVyJyxcbiAgJ3BvbHltZXJCZWhhdmlvcicsXG4gICdwcmVzZXJ2ZScsXG4gICdwcmVzZXJ2ZVRyeScsXG4gICdwcml2YXRlJyxcbiAgJ3Byb3RlY3RlZCcsXG4gICdwdWJsaWMnLFxuICAncmVjb3JkJyxcbiAgJ3JlcXVpcmVjc3MnLFxuICAncmVxdWlyZXMnLFxuICAncmV0dXJuJyxcbiAgJ3JldHVybnMnLFxuICAnc2VlJyxcbiAgJ3N0YWJsZUlkR2VuZXJhdG9yJyxcbiAgJ3N0cnVjdCcsXG4gICdzdXBwcmVzcycsXG4gICd0ZW1wbGF0ZScsXG4gICd0aGlzJyxcbiAgJ3Rocm93cycsXG4gICd0eXBlJyxcbiAgJ3R5cGVkZWYnLFxuICAndW5yZXN0cmljdGVkJyxcbiAgJ3ZlcnNpb24nLFxuICAnd2l6YWN0aW9uJyxcbiAgJ3dpem1vZHVsZScsXG5dKTtcblxuLyoqXG4gKiBBIGxpc3Qgb2YgSlNEb2MgQHRhZ3MgdGhhdCBhcmUgbmV2ZXIgYWxsb3dlZCBpbiBUeXBlU2NyaXB0IHNvdXJjZS4gVGhlc2UgYXJlIENsb3N1cmUgdGFncyB0aGF0XG4gKiBjYW4gYmUgZXhwcmVzc2VkIGluIHRoZSBUeXBlU2NyaXB0IHN1cmZhY2Ugc3ludGF4LiBBcyB0c2lja2xlJ3MgZW1pdCB3aWxsIG1hbmdsZSB0eXBlIG5hbWVzLFxuICogdGhlc2Ugd2lsbCBjYXVzZSBDbG9zdXJlIENvbXBpbGVyIGlzc3VlcyBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLlxuICovXG5jb25zdCBKU0RPQ19UQUdTX0JMQUNLTElTVCA9IG5ldyBTZXQoW1xuICAnYXVnbWVudHMnLCAnY2xhc3MnLCAgICAgICdjb25zdHJ1Y3RzJywgJ2NvbnN0cnVjdG9yJywgJ2VudW0nLCAgICAgICdleHRlbmRzJywgJ2ZpZWxkJyxcbiAgJ2Z1bmN0aW9uJywgJ2ltcGxlbWVudHMnLCAnaW50ZXJmYWNlJywgICdsZW5kcycsICAgICAgICduYW1lc3BhY2UnLCAncHJpdmF0ZScsICdwdWJsaWMnLFxuICAncmVjb3JkJywgICAnc3RhdGljJywgICAgICd0ZW1wbGF0ZScsICAgJ3RoaXMnLCAgICAgICAgJ3R5cGUnLCAgICAgICd0eXBlZGVmJyxcbl0pO1xuXG4vKipcbiAqIEEgbGlzdCBvZiBKU0RvYyBAdGFncyB0aGF0IG1pZ2h0IGluY2x1ZGUgYSB7dHlwZX0gYWZ0ZXIgdGhlbS4gT25seSBiYW5uZWQgd2hlbiBhIHR5cGUgaXMgcGFzc2VkLlxuICogTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgaW5jbHVkZSB0YWdzIHRoYXQgY2FycnkgYSBub24tdHlwZSBzeXN0ZW0gdHlwZSwgZS5nLiBcXEBzdXBwcmVzcy5cbiAqL1xuY29uc3QgSlNET0NfVEFHU19XSVRIX1RZUEVTID0gbmV3IFNldChbXG4gICdjb25zdCcsXG4gICdleHBvcnQnLFxuICAncGFyYW0nLFxuICAncmV0dXJuJyxcbl0pO1xuXG4vKipcbiAqIFJlc3VsdCBvZiBwYXJzaW5nIGEgSlNEb2MgY29tbWVudC4gU3VjaCBjb21tZW50cyBlc3NlbnRpYWxseSBhcmUgYnVpbHQgb2YgYSBsaXN0IG9mIHRhZ3MuXG4gKiBJbiBhZGRpdGlvbiB0byB0aGUgdGFncywgdGhpcyBtaWdodCBhbHNvIGNvbnRhaW4gd2FybmluZ3MgdG8gaW5kaWNhdGUgbm9uLWZhdGFsIHByb2JsZW1zXG4gKiB3aGlsZSBmaW5kaW5nIHRoZSB0YWdzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZEpTRG9jQ29tbWVudCB7XG4gIHRhZ3M6IFRhZ1tdO1xuICB3YXJuaW5ncz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIHBhcnNlIHBhcnNlcyBKU0RvYyBvdXQgb2YgYSBjb21tZW50IHN0cmluZy5cbiAqIFJldHVybnMgbnVsbCBpZiBjb21tZW50IGlzIG5vdCBKU0RvYy5cbiAqL1xuLy8gVE9ETyhtYXJ0aW5wcm9ic3QpOiByZXByZXNlbnRpbmcgSlNEb2MgYXMgYSBsaXN0IG9mIHRhZ3MgaXMgdG9vIHNpbXBsaXN0aWMuIFdlIG5lZWQgZnVuY3Rpb25hbGl0eVxuLy8gc3VjaCBhcyBtZXJnaW5nIChiZWxvdyksIGRlLWR1cGxpY2F0aW5nIGNlcnRhaW4gdGFncyAoQGRlcHJlY2F0ZWQpLCBhbmQgc3BlY2lhbCB0cmVhdG1lbnQgZm9yXG4vLyBvdGhlcnMgKGUuZy4gQHN1cHByZXNzKS4gV2Ugc2hvdWxkIGludHJvZHVjZSBhIHByb3BlciBtb2RlbCBjbGFzcyB3aXRoIGEgbW9yZSBzdWl0YWJsZSBkYXRhXG4vLyBzdHJ1Y3VyZSAoZS5nLiBhIE1hcDxUYWdOYW1lLCBWYWx1ZXNbXT4pLlxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKGNvbW1lbnQ6IHRzLlN5bnRoZXNpemVkQ29tbWVudCk6IFBhcnNlZEpTRG9jQ29tbWVudHxudWxsIHtcbiAgLy8gVE9ETyhldmFubSk6IHRoaXMgaXMgYSBwaWxlIG9mIGhhY2t5IHJlZ2V4ZXMgZm9yIG5vdywgYmVjYXVzZSB3ZVxuICAvLyB3b3VsZCByYXRoZXIgdXNlIHRoZSBiZXR0ZXIgVHlwZVNjcmlwdCBpbXBsZW1lbnRhdGlvbiBvZiBKU0RvY1xuICAvLyBwYXJzaW5nLiAgaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy83MzkzXG4gIGlmIChjb21tZW50LmtpbmQgIT09IHRzLlN5bnRheEtpbmQuTXVsdGlMaW5lQ29tbWVudFRyaXZpYSkgcmV0dXJuIG51bGw7XG4gIC8vIGNvbW1lbnQudGV4dCBkb2VzIG5vdCBpbmNsdWRlIC8qIGFuZCAqLywgc28gbXVzdCBzdGFydCB3aXRoICcqJyBmb3IgSlNEb2MuXG4gIGlmIChjb21tZW50LnRleHRbMF0gIT09ICcqJykgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHRleHQgPSBjb21tZW50LnRleHQuc3Vic3RyaW5nKDEpLnRyaW0oKTtcbiAgcmV0dXJuIHBhcnNlQ29udGVudHModGV4dCk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW5wdXQgc3RyaW5nIHdpdGggbGluZSBlbmRpbmdzIG5vcm1hbGl6ZWQgdG8gJ1xcbicuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVMaW5lRW5kaW5ncyhpbnB1dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL1xcclxcbi9nLCAnXFxuJyk7XG59XG5cbi8qKlxuICogcGFyc2VDb250ZW50cyBwYXJzZXMgSlNEb2Mgb3V0IG9mIGEgY29tbWVudCB0ZXh0LlxuICogUmV0dXJucyBudWxsIGlmIGNvbW1lbnQgaXMgbm90IEpTRG9jLlxuICpcbiAqIEBwYXJhbSBjb21tZW50VGV4dCBhIGNvbW1lbnQncyB0ZXh0IGNvbnRlbnQsIGkuZS4gdGhlIGNvbW1lbnQgdy9vIC8qIGFuZCAqIC8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNvbnRlbnRzKGNvbW1lbnRUZXh0OiBzdHJpbmcpOiBQYXJzZWRKU0RvY0NvbW1lbnR8bnVsbCB7XG4gIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIHByb3BlciBsaW5lIGVuZGluZ3MgYmVmb3JlIHBhcnNpbmcgb24gV2luZG93cy5cbiAgY29tbWVudFRleHQgPSBub3JtYWxpemVMaW5lRW5kaW5ncyhjb21tZW50VGV4dCk7XG4gIC8vIFN0cmlwIGFsbCB0aGUgXCIgKiBcIiBiaXRzIGZyb20gdGhlIGZyb250IG9mIGVhY2ggbGluZS5cbiAgY29tbWVudFRleHQgPSBjb21tZW50VGV4dC5yZXBsYWNlKC9eXFxzKlxcKj8gPy9nbSwgJycpO1xuICBjb25zdCBsaW5lcyA9IGNvbW1lbnRUZXh0LnNwbGl0KCdcXG4nKTtcbiAgY29uc3QgdGFnczogVGFnW10gPSBbXTtcbiAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgIGxldCBtYXRjaCA9IGxpbmUubWF0Y2goL15cXHMqQChcXFMrKSAqKC4qKS8pO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgbGV0IFtfLCB0YWdOYW1lLCB0ZXh0XSA9IG1hdGNoO1xuICAgICAgaWYgKHRhZ05hbWUgPT09ICdyZXR1cm5zJykge1xuICAgICAgICAvLyBBIHN5bm9ueW0gZm9yICdyZXR1cm4nLlxuICAgICAgICB0YWdOYW1lID0gJ3JldHVybic7XG4gICAgICB9XG4gICAgICBsZXQgdHlwZTogc3RyaW5nfHVuZGVmaW5lZDtcbiAgICAgIGlmIChKU0RPQ19UQUdTX0JMQUNLTElTVC5oYXModGFnTmFtZSkpIHtcbiAgICAgICAgd2FybmluZ3MucHVzaChgQCR7dGFnTmFtZX0gYW5ub3RhdGlvbnMgYXJlIHJlZHVuZGFudCB3aXRoIFR5cGVTY3JpcHQgZXF1aXZhbGVudHNgKTtcbiAgICAgICAgY29udGludWU7ICAvLyBEcm9wIHRoZSB0YWcgc28gQ2xvc3VyZSB3b24ndCBwcm9jZXNzIGl0LlxuICAgICAgfSBlbHNlIGlmIChKU0RPQ19UQUdTX1dJVEhfVFlQRVMuaGFzKHRhZ05hbWUpICYmIHRleHRbMF0gPT09ICd7Jykge1xuICAgICAgICB3YXJuaW5ncy5wdXNoKFxuICAgICAgICAgICAgYHRoZSB0eXBlIGFubm90YXRpb24gb24gQCR7dGFnTmFtZX0gaXMgcmVkdW5kYW50IHdpdGggaXRzIFR5cGVTY3JpcHQgdHlwZSwgYCArXG4gICAgICAgICAgICBgcmVtb3ZlIHRoZSB7Li4ufSBwYXJ0YCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09PSAnc3VwcHJlc3MnKSB7XG4gICAgICAgIGNvbnN0IHN1cHByZXNzTWF0Y2ggPSB0ZXh0Lm1hdGNoKC9eXFx7KC4qKVxcfSguKikkLyk7XG4gICAgICAgIGlmICghc3VwcHJlc3NNYXRjaCkge1xuICAgICAgICAgIHdhcm5pbmdzLnB1c2goYG1hbGZvcm1lZCBAc3VwcHJlc3MgdGFnOiBcIiR7dGV4dH1cImApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIFssIHR5cGUsIHRleHRdID0gc3VwcHJlc3NNYXRjaDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09PSAnZGljdCcpIHtcbiAgICAgICAgd2FybmluZ3MucHVzaCgndXNlIGluZGV4IHNpZ25hdHVyZXMgKGBbazogc3RyaW5nXTogdHlwZWApIGluc3RlYWQgb2YgQGRpY3QnKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIEdyYWIgdGhlIHBhcmFtZXRlciBuYW1lIGZyb20gQHBhcmFtIHRhZ3MuXG4gICAgICBsZXQgcGFyYW1ldGVyTmFtZTogc3RyaW5nfHVuZGVmaW5lZDtcbiAgICAgIGlmICh0YWdOYW1lID09PSAncGFyYW0nKSB7XG4gICAgICAgIG1hdGNoID0gdGV4dC5tYXRjaCgvXihcXFMrKSA/KC4qKS8pO1xuICAgICAgICBpZiAobWF0Y2gpIFtfLCBwYXJhbWV0ZXJOYW1lLCB0ZXh0XSA9IG1hdGNoO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0YWc6IFRhZyA9IHt0YWdOYW1lfTtcbiAgICAgIGlmIChwYXJhbWV0ZXJOYW1lKSB0YWcucGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlck5hbWU7XG4gICAgICBpZiAodGV4dCkgdGFnLnRleHQgPSB0ZXh0O1xuICAgICAgaWYgKHR5cGUpIHRhZy50eXBlID0gdHlwZTtcbiAgICAgIHRhZ3MucHVzaCh0YWcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUZXh0IHdpdGhvdXQgYSBwcmVjZWRpbmcgQHRhZyBvbiBpdCBpcyBlaXRoZXIgdGhlIHBsYWluIHRleHRcbiAgICAgIC8vIGRvY3VtZW50YXRpb24gb3IgYSBjb250aW51YXRpb24gb2YgYSBwcmV2aW91cyB0YWcuXG4gICAgICBpZiAodGFncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGFncy5wdXNoKHt0YWdOYW1lOiAnJywgdGV4dDogbGluZX0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbGFzdFRhZyA9IHRhZ3NbdGFncy5sZW5ndGggLSAxXTtcbiAgICAgICAgbGFzdFRhZy50ZXh0ID0gKGxhc3RUYWcudGV4dCB8fCAnJykgKyAnXFxuJyArIGxpbmU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICh3YXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHt0YWdzLCB3YXJuaW5nc307XG4gIH1cbiAgcmV0dXJuIHt0YWdzfTtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemVzIGEgVGFnIGludG8gYSBzdHJpbmcgdXNhYmxlIGluIGEgY29tbWVudC5cbiAqIFJldHVybnMgYSBzdHJpbmcgbGlrZSBcIiBAZm9vIHtiYXJ9IGJhelwiIChub3RlIHRoZSB3aGl0ZXNwYWNlKS5cbiAqL1xuZnVuY3Rpb24gdGFnVG9TdHJpbmcodGFnOiBUYWcsIGVzY2FwZUV4dHJhVGFncyA9IG5ldyBTZXQ8c3RyaW5nPigpKTogc3RyaW5nIHtcbiAgbGV0IG91dCA9ICcnO1xuICBpZiAodGFnLnRhZ05hbWUpIHtcbiAgICBpZiAoIUpTRE9DX1RBR1NfV0hJVEVMSVNULmhhcyh0YWcudGFnTmFtZSkgfHwgZXNjYXBlRXh0cmFUYWdzLmhhcyh0YWcudGFnTmFtZSkpIHtcbiAgICAgIC8vIEVzY2FwZSB0YWdzIHdlIGRvbid0IHVuZGVyc3RhbmQuICBUaGlzIGlzIGEgc3VidGxlXG4gICAgICAvLyBjb21wcm9taXNlIGJldHdlZW4gbXVsdGlwbGUgaXNzdWVzLlxuICAgICAgLy8gMSkgSWYgd2UgcGFzcyB0aHJvdWdoIHRoZXNlIG5vbi1DbG9zdXJlIHRhZ3MsIHRoZSB1c2VyIHdpbGxcbiAgICAgIC8vICAgIGdldCBhIHdhcm5pbmcgZnJvbSBDbG9zdXJlLCBhbmQgdGhlIHBvaW50IG9mIHRzaWNrbGUgaXNcbiAgICAgIC8vICAgIHRvIGluc3VsYXRlIHRoZSB1c2VyIGZyb20gQ2xvc3VyZS5cbiAgICAgIC8vIDIpIFRoZSBvdXRwdXQgb2YgdHNpY2tsZSBpcyBmb3IgQ2xvc3VyZSBidXQgYWxzbyBtYXkgYmUgcmVhZFxuICAgICAgLy8gICAgYnkgaHVtYW5zLCBmb3IgZXhhbXBsZSBub24tVHlwZVNjcmlwdCB1c2VycyBvZiBBbmd1bGFyLlxuICAgICAgLy8gMykgRmluYWxseSwgd2UgZG9uJ3Qgd2FudCB0byB3YXJuIGJlY2F1c2UgdXNlcnMgc2hvdWxkIGJlXG4gICAgICAvLyAgICBmcmVlIHRvIGFkZCB3aGljaGV2ZXIgSlNEb2MgdGhleSBmZWVsIGxpa2UuICBJZiB0aGUgdXNlclxuICAgICAgLy8gICAgd2FudHMgaGVscCBlbnN1cmluZyB0aGV5IGRpZG4ndCB0eXBvIGEgdGFnLCB0aGF0IGlzIHRoZVxuICAgICAgLy8gICAgcmVzcG9uc2liaWxpdHkgb2YgYSBsaW50ZXIuXG4gICAgICBvdXQgKz0gYCBcXFxcQCR7dGFnLnRhZ05hbWV9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9IGAgQCR7dGFnLnRhZ05hbWV9YDtcbiAgICB9XG4gIH1cbiAgaWYgKHRhZy50eXBlKSB7XG4gICAgb3V0ICs9ICcgeyc7XG4gICAgaWYgKHRhZy5yZXN0UGFyYW0pIHtcbiAgICAgIG91dCArPSAnLi4uJztcbiAgICB9XG4gICAgb3V0ICs9IHRhZy50eXBlO1xuICAgIGlmICh0YWcub3B0aW9uYWwpIHtcbiAgICAgIG91dCArPSAnPSc7XG4gICAgfVxuICAgIG91dCArPSAnfSc7XG4gIH1cbiAgaWYgKHRhZy5wYXJhbWV0ZXJOYW1lKSB7XG4gICAgb3V0ICs9ICcgJyArIHRhZy5wYXJhbWV0ZXJOYW1lO1xuICB9XG4gIGlmICh0YWcudGV4dCkge1xuICAgIG91dCArPSAnICcgKyB0YWcudGV4dC5yZXBsYWNlKC9AL2csICdcXFxcQCcpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBUYWdzIHRoYXQgbXVzdCBvbmx5IG9jY3VyIG9uY2VzIGluIGEgY29tbWVudCAoZmlsdGVyZWQgYmVsb3cpLiAqL1xuY29uc3QgU0lOR0xFVE9OX1RBR1MgPSBuZXcgU2V0KFsnZGVwcmVjYXRlZCddKTtcblxuLyoqIFRhZ3MgdGhhdCBjb25mbGljdCB3aXRoIFxcQHR5cGUgaW4gQ2xvc3VyZSBDb21waWxlciAoZS5nLiBcXEBwYXJhbSkuICovXG5leHBvcnQgY29uc3QgVEFHU19DT05GTElDVElOR19XSVRIX1RZUEUgPSBuZXcgU2V0KFsncGFyYW0nLCAncmV0dXJuJ10pO1xuXG4vKipcbiAqIEEgc3ludGhlc2l6ZWQgY29tbWVudCB0aGF0IChwb3NzaWJseSkgaW5jbHVkZXMgdGhlIG9yaWdpbmFsIGNvbW1lbnQgcmFuZ2UgaXQgd2FzIGNyZWF0ZWQgZnJvbS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeW50aGVzaXplZENvbW1lbnRXaXRoT3JpZ2luYWwgZXh0ZW5kcyB0cy5TeW50aGVzaXplZENvbW1lbnQge1xuICAvKipcbiAgICogVGhlIG9yaWdpbmFsIHRleHQgcmFuZ2Ugb2YgdGhlIGNvbW1lbnQgKHJlbGF0aXZlIHRvIHRoZSBzb3VyY2UgZmlsZSdzIGZ1bGwgdGV4dCkuXG4gICAqL1xuICBvcmlnaW5hbFJhbmdlPzogdHMuVGV4dFJhbmdlO1xufVxuXG4vKipcbiAqIHN5bnRoZXNpemVMZWFkaW5nQ29tbWVudHMgcGFyc2VzIHRoZSBsZWFkaW5nIGNvbW1lbnRzIG9mIG5vZGUsIGNvbnZlcnRzIHRoZW1cbiAqIHRvIHN5bnRoZXRpYyBjb21tZW50cywgYW5kIG1ha2VzIHN1cmUgdGhlIG9yaWdpbmFsIHRleHQgY29tbWVudHMgZG8gbm90IGdldFxuICogZW1pdHRlZCBieSBUeXBlU2NyaXB0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ludGhlc2l6ZUxlYWRpbmdDb21tZW50cyhub2RlOiB0cy5Ob2RlKTogU3ludGhlc2l6ZWRDb21tZW50V2l0aE9yaWdpbmFsW10ge1xuICBjb25zdCBleGlzdGluZyA9IHRzLmdldFN5bnRoZXRpY0xlYWRpbmdDb21tZW50cyhub2RlKTtcbiAgaWYgKGV4aXN0aW5nKSByZXR1cm4gZXhpc3Rpbmc7XG4gIGNvbnN0IHRleHQgPSBub2RlLmdldEZ1bGxUZXh0KCk7XG4gIGNvbnN0IHN5bnRoQ29tbWVudHMgPSBnZXRMZWFkaW5nQ29tbWVudFJhbmdlc1N5bnRoZXNpemVkKHRleHQsIG5vZGUuZ2V0RnVsbFN0YXJ0KCkpO1xuICBpZiAoc3ludGhDb21tZW50cy5sZW5ndGgpIHtcbiAgICB0cy5zZXRTeW50aGV0aWNMZWFkaW5nQ29tbWVudHMobm9kZSwgc3ludGhDb21tZW50cyk7XG4gICAgc3VwcHJlc3NMZWFkaW5nQ29tbWVudHNSZWN1cnNpdmVseShub2RlKTtcbiAgfVxuICByZXR1cm4gc3ludGhDb21tZW50cztcbn1cblxuLyoqXG4gKiBwYXJzZUxlYWRpbmdDb21tZW50UmFuZ2VzU3ludGhlc2l6ZWQgcGFyc2VzIHRoZSBsZWFkaW5nIGNvbW1lbnQgcmFuZ2VzIG91dCBvZiB0aGUgZ2l2ZW4gdGV4dCBhbmRcbiAqIGNvbnZlcnRzIHRoZW0gdG8gU3ludGhlc2l6ZWRDb21tZW50cy5cbiAqIEBwYXJhbSBvZmZzZXQgdGhlIG9mZnNldCBvZiB0ZXh0IGluIHRoZSBzb3VyY2UgZmlsZSwgZS5nLiBub2RlLmdldEZ1bGxTdGFydCgpLlxuICovXG4vLyBWaXNpYmxlRm9yVGVzdGluZ1xuZXhwb3J0IGZ1bmN0aW9uIGdldExlYWRpbmdDb21tZW50UmFuZ2VzU3ludGhlc2l6ZWQoXG4gICAgdGV4dDogc3RyaW5nLCBvZmZzZXQgPSAwKTogU3ludGhlc2l6ZWRDb21tZW50V2l0aE9yaWdpbmFsW10ge1xuICBjb25zdCBjb21tZW50cyA9IHRzLmdldExlYWRpbmdDb21tZW50UmFuZ2VzKHRleHQsIDApIHx8IFtdO1xuICByZXR1cm4gY29tbWVudHMubWFwKChjcik6IFN5bnRoZXNpemVkQ29tbWVudFdpdGhPcmlnaW5hbCA9PiB7XG4gICAgLy8gQ29uZnVzaW5nbHksIENvbW1lbnRSYW5nZSBpbiBUeXBlU2NyaXB0IGluY2x1ZGVzIHN0YXJ0IGFuZCBlbmQgbWFya2VycywgYnV0XG4gICAgLy8gU3ludGhlc2l6ZWRDb21tZW50cyBkbyBub3QuXG4gICAgY29uc3QgY29tbWVudFRleHQgPSBjci5raW5kID09PSB0cy5TeW50YXhLaW5kLlNpbmdsZUxpbmVDb21tZW50VHJpdmlhID9cbiAgICAgICAgdGV4dC5zdWJzdHJpbmcoY3IucG9zICsgMiwgY3IuZW5kKSA6XG4gICAgICAgIHRleHQuc3Vic3RyaW5nKGNyLnBvcyArIDIsIGNyLmVuZCAtIDIpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5jcixcbiAgICAgIHRleHQ6IGNvbW1lbnRUZXh0LFxuICAgICAgcG9zOiAtMSxcbiAgICAgIGVuZDogLTEsXG4gICAgICBvcmlnaW5hbFJhbmdlOiB7cG9zOiBjci5wb3MgKyBvZmZzZXQsIGVuZDogY3IuZW5kICsgb2Zmc2V0fVxuICAgIH07XG4gIH0pO1xufVxuXG4vKipcbiAqIHN1cHByZXNzQ29tbWVudHNSZWN1cnNpdmVseSBwcmV2ZW50cyBlbWl0IG9mIGxlYWRpbmcgY29tbWVudHMgb24gbm9kZSwgYW5kIGFueSByZWN1cnNpdmUgbm9kZXNcbiAqIHVuZGVybmVhdGggaXQgdGhhdCBzdGFydCBhdCB0aGUgc2FtZSBvZmZzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdXBwcmVzc0xlYWRpbmdDb21tZW50c1JlY3Vyc2l2ZWx5KG5vZGU6IHRzLk5vZGUpIHtcbiAgLy8gVHlwZVNjcmlwdCBlbWl0cyBsZWFkaW5nIGNvbW1lbnRzIG9uIGEgbm9kZSwgdW5sZXNzOlxuICAvLyAtIHRoZSBjb21tZW50IHdhcyBlbWl0dGVkIGJ5IHRoZSBwYXJlbnQgbm9kZVxuICAvLyAtIHRoZSBub2RlIGhhcyB0aGUgTm9MZWFkaW5nQ29tbWVudHMgZW1pdCBmbGFnLlxuICAvLyBIb3dldmVyLCB0cmFuc2Zvcm1hdGlvbiBzdGVwcyBzb21ldGltZXMgY29weSBub2RlcyB3aXRob3V0IGtlZXBpbmcgdGhlaXIgZW1pdCBmbGFncywgc28ganVzdFxuICAvLyBzZXR0aW5nIE5vTGVhZGluZ0NvbW1lbnRzIHJlY3Vyc2l2ZWx5IGlzIG5vdCBlbm91Z2gsIHdlIG11c3QgYWxzbyBzZXQgdGhlIHRleHQgcmFuZ2UgdG8gYXZvaWRcbiAgLy8gdGhlIGNvcGllZCBub2RlIHRvIGhhdmUgY29tbWVudHMgZW1pdHRlZC5cbiAgY29uc3Qgb3JpZ2luYWxTdGFydCA9IG5vZGUuZ2V0RnVsbFN0YXJ0KCk7XG4gIGNvbnN0IGFjdHVhbFN0YXJ0ID0gbm9kZS5nZXRTdGFydCgpO1xuICBmdW5jdGlvbiBzdXBwcmVzc0NvbW1lbnRzSW50ZXJuYWwobm9kZTogdHMuTm9kZSk6IGJvb2xlYW4ge1xuICAgIHRzLnNldEVtaXRGbGFncyhub2RlLCB0cy5FbWl0RmxhZ3MuTm9MZWFkaW5nQ29tbWVudHMpO1xuICAgIHJldHVybiAhIXRzLmZvckVhY2hDaGlsZChub2RlLCAoY2hpbGQpID0+IHtcbiAgICAgIGlmIChjaGlsZC5wb3MgIT09IG9yaWdpbmFsU3RhcnQpIHJldHVybiB0cnVlO1xuICAgICAgcmV0dXJuIHN1cHByZXNzQ29tbWVudHNJbnRlcm5hbChjaGlsZCk7XG4gICAgfSk7XG4gIH1cbiAgc3VwcHJlc3NDb21tZW50c0ludGVybmFsKG5vZGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9TeW50aGVzaXplZENvbW1lbnQoXG4gICAgdGFnczogVGFnW10sIGVzY2FwZUV4dHJhVGFncz86IFNldDxzdHJpbmc+KTogdHMuU3ludGhlc2l6ZWRDb21tZW50IHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiB0cy5TeW50YXhLaW5kLk11bHRpTGluZUNvbW1lbnRUcml2aWEsXG4gICAgdGV4dDogdG9TdHJpbmdXaXRob3V0U3RhcnRFbmQodGFncywgZXNjYXBlRXh0cmFUYWdzKSxcbiAgICBwb3M6IC0xLFxuICAgIGVuZDogLTEsXG4gICAgaGFzVHJhaWxpbmdOZXdMaW5lOiB0cnVlLFxuICB9O1xufVxuXG4vKiogU2VyaWFsaXplcyBhIENvbW1lbnQgb3V0IHRvIGEgc3RyaW5nLCBidXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgc3RhcnQgYW5kIGVuZCBjb21tZW50IHRva2Vucy4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1N0cmluZ1dpdGhvdXRTdGFydEVuZCh0YWdzOiBUYWdbXSwgZXNjYXBlRXh0cmFUYWdzID0gbmV3IFNldDxzdHJpbmc+KCkpOiBzdHJpbmcge1xuICByZXR1cm4gc2VyaWFsaXplKHRhZ3MsIGZhbHNlLCBlc2NhcGVFeHRyYVRhZ3MpO1xufVxuXG4vKiogU2VyaWFsaXplcyBhIENvbW1lbnQgb3V0IHRvIGEgc3RyaW5nIHVzYWJsZSBpbiBzb3VyY2UgY29kZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1N0cmluZyh0YWdzOiBUYWdbXSwgZXNjYXBlRXh0cmFUYWdzID0gbmV3IFNldDxzdHJpbmc+KCkpOiBzdHJpbmcge1xuICByZXR1cm4gc2VyaWFsaXplKHRhZ3MsIHRydWUsIGVzY2FwZUV4dHJhVGFncyk7XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZShcbiAgICB0YWdzOiBUYWdbXSwgaW5jbHVkZVN0YXJ0RW5kOiBib29sZWFuLCBlc2NhcGVFeHRyYVRhZ3MgPSBuZXcgU2V0PHN0cmluZz4oKSk6IHN0cmluZyB7XG4gIGlmICh0YWdzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICBpZiAodGFncy5sZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCB0YWcgPSB0YWdzWzBdO1xuICAgIGlmICgodGFnLnRhZ05hbWUgPT09ICd0eXBlJyB8fCB0YWcudGFnTmFtZSA9PT0gJ3R5cGVkZWYnIHx8IHRhZy50YWdOYW1lID09PSAnbm9jb2xsYXBzZScpICYmXG4gICAgICAgICghdGFnLnRleHQgfHwgIXRhZy50ZXh0Lm1hdGNoKCdcXG4nKSkpIHtcbiAgICAgIC8vIFNwZWNpYWwtY2FzZSBvbmUtbGluZXIgXCJ0eXBlXCIgYW5kIFwibm9jb2xsYXBzZVwiIHRhZ3MgdG8gZml0IG9uIG9uZSBsaW5lLCBlLmcuXG4gICAgICAvLyAgIC8qKiBAdHlwZSB7Zm9vfSAqL1xuICAgICAgY29uc3QgdGV4dCA9IHRhZ1RvU3RyaW5nKHRhZywgZXNjYXBlRXh0cmFUYWdzKTtcbiAgICAgIHJldHVybiBpbmNsdWRlU3RhcnRFbmQgPyBgLyoqJHt0ZXh0fSAqL2AgOiBgKiR7dGV4dH0gYDtcbiAgICB9XG4gICAgLy8gT3RoZXJ3aXNlLCBmYWxsIHRocm91Z2ggdG8gdGhlIG11bHRpLWxpbmUgb3V0cHV0LlxuICB9XG5cbiAgbGV0IG91dCA9IGluY2x1ZGVTdGFydEVuZCA/ICcvKipcXG4nIDogJypcXG4nO1xuICBjb25zdCBlbWl0dGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgdGFnIG9mIHRhZ3MpIHtcbiAgICBpZiAoZW1pdHRlZC5oYXModGFnLnRhZ05hbWUpICYmIFNJTkdMRVRPTl9UQUdTLmhhcyh0YWcudGFnTmFtZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBlbWl0dGVkLmFkZCh0YWcudGFnTmFtZSk7XG4gICAgb3V0ICs9ICcgKic7XG4gICAgLy8gSWYgdGhlIHRhZ1RvU3RyaW5nIGlzIG11bHRpLWxpbmUsIGluc2VydCBcIiAqIFwiIHByZWZpeGVzIG9uIHN1YnNlcXVlbnQgbGluZXMuXG4gICAgb3V0ICs9IHRhZ1RvU3RyaW5nKHRhZywgZXNjYXBlRXh0cmFUYWdzKS5zcGxpdCgnXFxuJykuam9pbignXFxuICogJyk7XG4gICAgb3V0ICs9ICdcXG4nO1xuICB9XG4gIG91dCArPSBpbmNsdWRlU3RhcnRFbmQgPyAnICovXFxuJyA6ICcgJztcbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIE1lcmdlcyBtdWx0aXBsZSB0YWdzIChvZiB0aGUgc2FtZSB0YWdOYW1lIHR5cGUpIGludG8gYSBzaW5nbGUgdW5pZmllZCB0YWcuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2UodGFnczogVGFnW10pOiBUYWcge1xuICBjb25zdCB0YWdOYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBwYXJhbWV0ZXJOYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCB0eXBlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCB0ZXh0cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAvLyBJZiBhbnkgb2YgdGhlIHRhZ3MgYXJlIG9wdGlvbmFsL3Jlc3QsIHRoZW4gdGhlIG1lcmdlZCBvdXRwdXQgaXMgb3B0aW9uYWwvcmVzdC5cbiAgbGV0IG9wdGlvbmFsID0gZmFsc2U7XG4gIGxldCByZXN0UGFyYW0gPSBmYWxzZTtcbiAgZm9yIChjb25zdCB0YWcgb2YgdGFncykge1xuICAgIHRhZ05hbWVzLmFkZCh0YWcudGFnTmFtZSk7XG4gICAgaWYgKHRhZy5wYXJhbWV0ZXJOYW1lICE9PSB1bmRlZmluZWQpIHBhcmFtZXRlck5hbWVzLmFkZCh0YWcucGFyYW1ldGVyTmFtZSk7XG4gICAgaWYgKHRhZy50eXBlICE9PSB1bmRlZmluZWQpIHR5cGVzLmFkZCh0YWcudHlwZSk7XG4gICAgaWYgKHRhZy50ZXh0ICE9PSB1bmRlZmluZWQpIHRleHRzLmFkZCh0YWcudGV4dCk7XG4gICAgaWYgKHRhZy5vcHRpb25hbCkgb3B0aW9uYWwgPSB0cnVlO1xuICAgIGlmICh0YWcucmVzdFBhcmFtKSByZXN0UGFyYW0gPSB0cnVlO1xuICB9XG5cbiAgaWYgKHRhZ05hbWVzLnNpemUgIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbm5vdCBtZXJnZSBkaWZmZXJpbmcgdGFnczogJHtKU09OLnN0cmluZ2lmeSh0YWdzKX1gKTtcbiAgfVxuICBjb25zdCB0YWdOYW1lID0gdGFnTmFtZXMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICBjb25zdCBwYXJhbWV0ZXJOYW1lID1cbiAgICAgIHBhcmFtZXRlck5hbWVzLnNpemUgPiAwID8gQXJyYXkuZnJvbShwYXJhbWV0ZXJOYW1lcykuam9pbignX29yXycpIDogdW5kZWZpbmVkO1xuICBjb25zdCB0eXBlID0gdHlwZXMuc2l6ZSA+IDAgPyBBcnJheS5mcm9tKHR5cGVzKS5qb2luKCd8JykgOiB1bmRlZmluZWQ7XG4gIC8vIEB0ZW1wbGF0ZSB1c2VzIHRleHQgKG5vdCB0eXBlISkgdG8gZGVjbGFyZSBpdHMgdHlwZSBwYXJhbWV0ZXJzLCB3aXRoICcsJy1zZXBhcmF0ZWQgdGV4dC5cbiAgY29uc3QgaXNUZW1wbGF0ZVRhZyA9IHRhZ05hbWUgPT09ICd0ZW1wbGF0ZSc7XG4gIGNvbnN0IHRleHQgPSB0ZXh0cy5zaXplID4gMCA/IEFycmF5LmZyb20odGV4dHMpLmpvaW4oaXNUZW1wbGF0ZVRhZyA/ICcsJyA6ICcgLyAnKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgdGFnOiBUYWcgPSB7dGFnTmFtZSwgcGFyYW1ldGVyTmFtZSwgdHlwZSwgdGV4dH07XG4gIC8vIE5vdGU6IGEgcGFyYW0gY2FuIGVpdGhlciBiZSBvcHRpb25hbCBvciBhIHJlc3QgcGFyYW07IGlmIHdlIG1lcmdlZCBhblxuICAvLyBvcHRpb25hbCBhbmQgcmVzdCBwYXJhbSB0b2dldGhlciwgcHJlZmVyIG1hcmtpbmcgaXQgYXMgYSByZXN0IHBhcmFtLlxuICBpZiAocmVzdFBhcmFtKSB7XG4gICAgdGFnLnJlc3RQYXJhbSA9IHRydWU7XG4gIH0gZWxzZSBpZiAob3B0aW9uYWwpIHtcbiAgICB0YWcub3B0aW9uYWwgPSB0cnVlO1xuICB9XG4gIHJldHVybiB0YWc7XG59XG4iXX0=

@@ -145,3 +145,3 @@ #!/usr/bin/env node

var compilerHost = ts.createCompilerHost(options);
var program = ts.createProgram(fileNames, options, compilerHost);
var program = ts.createProgram(absoluteFileNames, options, compilerHost);
var filesToProcess = new Set(absoluteFileNames);

@@ -154,3 +154,5 @@ var rootModulePath = options.rootDir || getCommonParentDirectory(absoluteFileNames);

shouldIgnoreWarningsForPath: function (fileName) { return false; },
pathToModuleName: cliSupport.pathToModuleName.bind(null, rootModulePath),
pathToModuleName: function (context, fileName) {
return cliSupport.pathToModuleName(rootModulePath, context, fileName);
},
fileNameToModuleId: function (fileName) { return path.relative(rootModulePath, fileName); },

@@ -206,3 +208,3 @@ es5Mode: true,

mkdirp.sync(path.dirname(settings.externsPath));
fs.writeFileSync(settings.externsPath, tsickle.getGeneratedExterns(result.externs));
fs.writeFileSync(settings.externsPath, tsickle.getGeneratedExterns(result.externs, config.options.rootDir || ''));
}

@@ -216,2 +218,2 @@ return 0;

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFVQSx1QkFBeUI7SUFDekIsbUNBQXFDO0lBQ3JDLCtCQUFpQztJQUNqQywyQkFBNkI7SUFDN0IsMkNBQW1DO0lBRW5DLG9EQUE0QztJQUM1Qyw2Q0FBcUM7SUFDckMsK0NBQTBDO0lBaUIxQztRQUNFLE9BQU8sQ0FBQyxLQUFLLENBQUMseVhBU2YsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILDhCQUE4QixJQUFjOztRQUMxQyxJQUFNLFFBQVEsR0FBYSxFQUFFLENBQUM7UUFDOUIsSUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDOztZQUNsQyxLQUFtQixJQUFBLEtBQUEsU0FBQSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBLGdCQUFBLDRCQUFFO2dCQUF2QyxJQUFNLElBQUksV0FBQTtnQkFDYixRQUFRLElBQUksRUFBRTtvQkFDWixLQUFLLEdBQUcsQ0FBQztvQkFDVCxLQUFLLE1BQU07d0JBQ1QsS0FBSyxFQUFFLENBQUM7d0JBQ1IsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDaEIsTUFBTTtvQkFDUixLQUFLLFNBQVM7d0JBQ1osUUFBUSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3hDLE1BQU07b0JBQ1IsS0FBSyxPQUFPO3dCQUNWLFFBQVEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO3dCQUN4QixNQUFNO29CQUNSLEtBQUssU0FBUzt3QkFDWixRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzt3QkFDeEIsTUFBTTtvQkFDUixLQUFLLG1CQUFtQjt3QkFDdEIsUUFBUSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQzt3QkFDbEMsTUFB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LENBQUMsQ0FBQyxDQUFDO1NBQ3JGO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7UUFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzVDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIG1pbmltaXN0IGZyb20gJ21pbmltaXN0JztcbmltcG9ydCAqIGFzIG1rZGlycCBmcm9tICdta2RpcnAnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJy4vdHlwZXNjcmlwdCc7XG5cbmltcG9ydCAqIGFzIGNsaVN1cHBvcnQgZnJvbSAnLi9jbGlfc3VwcG9ydCc7XG5pbXBvcnQgKiBhcyB0c2lja2xlIGZyb20gJy4vdHNpY2tsZSc7XG5pbXBvcnQge01vZHVsZXNNYW5pZmVzdH0gZnJvbSAnLi90c2lja2xlJztcblxuLyoqIFRzaWNrbGUgc2V0dGluZ3MgcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUuICovXG5leHBvcnQgaW50ZXJmYWNlIFNldHRpbmdzIHtcbiAgLyoqIElmIHByb3ZpZGVkLCBtb2RpZnkgcXVvdGluZyBvZiBwcm9wZXJ0eSBhY2Nlc3NlcyB0byBtYXRjaCB0aGUgdHlwZSBkZWNsYXJhdGlvbi4gKi9cbiAgZW5hYmxlQXV0b1F1b3Rpbmc/OiBib29sZWFuO1xuXG4gIC8qKiBJZiBwcm92aWRlZCwgcGF0aCB0byBzYXZlIGV4dGVybnMgdG8uICovXG4gIGV4dGVybnNQYXRoPzogc3RyaW5nO1xuXG4gIC8qKiBJZiBwcm92aWRlZCwgYXR0ZW1wdCB0byBwcm92aWRlIHR5cGVzIHJhdGhlciB0aGFuIHs/fS4gKi9cbiAgaXNUeXBlZD86IGJvb2xlYW47XG5cbiAgLyoqIElmIHRydWUsIGxvZyBpbnRlcm5hbCBkZWJ1ZyB3YXJuaW5ncyB0byB0aGUgY29uc29sZS4gKi9cbiAgdmVyYm9zZT86IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIHVzYWdlKCkge1xuICBjb25zb2xlLmVycm9yKGB1c2FnZTogdHNpY2tsZSBbdHNpY2tsZSBvcHRpb25zXSAtLSBbdHNjIG9wdGlvbnNdXG5cbmV4YW1wbGU6XG4gIHRzaWNrbGUgLS1leHRlcm5zPWZvby9leHRlcm5zLmpzIC0tIC1wIHNyYyAtLW5vSW1wbGljaXRBbnlcblxudHNpY2tsZSBmbGFncyBhcmU6XG4gIC0tZXh0ZXJucz1QQVRIICAgICAgICBzYXZlIGdlbmVyYXRlZCBDbG9zdXJlIGV4dGVybnMuanMgdG8gUEFUSFxuICAtLXR5cGVkICAgICAgICAgICAgICAgW2V4cGVyaW1lbnRhbF0gYXR0ZW1wdCB0byBwcm92aWRlIENsb3N1cmUgdHlwZXMgaW5zdGVhZCBvZiB7P31cbiAgLS1lbmFibGVBdXRvUXVvdGluZyAgIGF1dG9tYXRpY2FsbHkgYXBwbHkgcXVvdGVzIHRvIHByb3BlcnR5IGFjY2Vzc2VzXG5gKTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMsIGV4dHJhY3RpbmcgdGhlIHRzaWNrbGUgc2V0dGluZ3MgYW5kXG4gKiB0aGUgYXJndW1lbnRzIHRvIHBhc3Mgb24gdG8gdHNjLlxuICovXG5mdW5jdGlvbiBsb2FkU2V0dGluZ3NGcm9tQXJncyhhcmdzOiBzdHJpbmdbXSk6IHtzZXR0aW5nczogU2V0dGluZ3MsIHRzY0FyZ3M6IHN0cmluZ1tdfSB7XG4gIGNvbnN0IHNldHRpbmdzOiBTZXR0aW5ncyA9IHt9O1xuICBjb25zdCBwYXJzZWRBcmdzID0gbWluaW1pc3QoYXJncyk7XG4gIGZvciAoY29uc3QgZmxhZyBvZiBPYmplY3Qua2V5cyhwYXJzZWRBcmdzKSkge1xuICAgIHN3aXRjaCAoZmxhZykge1xuICAgICAgY2FzZSAnaCc6XG4gICAgICBjYXNlICdoZWxwJzpcbiAgICAgICAgdXNhZ2UoKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V4dGVybnMnOlxuICAgICAgICBzZXR0aW5ncy5leHRlcm5zUGF0aCA9IHBhcnNlZEFyZ3NbZmxhZ107XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndHlwZWQnOlxuICAgICAgICBzZXR0aW5ncy5pc1R5cGVkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd2ZXJib3NlJzpcbiAgICAgICAgc2V0dGluZ3MudmVyYm9zZSA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZW5hYmxlQXV0b1F1b3RpbmcnOlxuICAgICAgICBzZXR0aW5ncy5lbmFibGVBdXRvUXVvdGluZyA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnXyc6XG4gICAgICAgIC8vIFRoaXMgaXMgcGFydCBvZiB0aGUgbWluaW1pc3QgQVBJLCBhbmQgaG9sZHMgYXJncyBhZnRlciB0aGUgJy0tJy5cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zb2xlLmVycm9yKGB1bmtub3duIGZsYWcgJy0tJHtmbGFnfSdgKTtcbiAgICAgICAgdXNhZ2UoKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfVxuICAvLyBBcmd1bWVudHMgYWZ0ZXIgdGhlICctLScgYXJnIGFyZSBhcmd1bWVudHMgdG8gdHNjLlxuICBjb25zdCB0c2NBcmdzID0gcGFyc2VkQXJnc1snXyddO1xuICByZXR1cm4ge3NldHRpbmdzLCB0c2NBcmdzfTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgdGhlIGxvd2VzdC1sZXZlbCBjb21tb24gcGFyZW50IGRpcmVjdG9yeSBvZiB0aGUgZ2l2ZW4gbGlzdCBvZiBmaWxlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbW1vblBhcmVudERpcmVjdG9yeShmaWxlTmFtZXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgY29uc3QgcGF0aFNwbGl0dGVyID0gL1tcXC9cXFxcXSsvO1xuICBjb25zdCBjb21tb25QYXJlbnQgPSBmaWxlTmFtZXNbMF0uc3BsaXQocGF0aFNwbGl0dGVyKTtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBmaWxlTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB0aGlzUGF0aCA9IGZpbGVOYW1lc1tpXS5zcGxpdChwYXRoU3BsaXR0ZXIpO1xuICAgIGxldCBqID0gMDtcbiAgICB3aGlsZSAodGhpc1BhdGhbal0gPT09IGNvbW1vblBhcmVudFtqXSkge1xuICAgICAgaisrO1xuICAgIH1cbiAgICBjb21tb25QYXJlbnQubGVuZ3RoID0gajsgIC8vIFRydW5jYXRlIHdpdGhvdXQgY29weWluZyB0aGUgYXJyYXlcbiAgfVxuICBpZiAoY29tbW9uUGFyZW50Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnLyc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNvbW1vblBhcmVudC5qb2luKHBhdGguc2VwKTtcbiAgfVxufVxuXG4vKipcbiAqIExvYWRzIHRoZSB0c2NvbmZpZy5qc29uIGZyb20gYSBkaXJlY3RvcnkuXG4gKlxuICogVE9ETyhtYXJ0aW5wcm9ic3QpOiB1c2UgdHMuZmluZENvbmZpZ0ZpbGUgdG8gbWF0Y2ggdHNjIGJlaGF2aW91ci5cbiAqXG4gKiBAcGFyYW0gYXJncyB0c2MgY29tbWFuZC1saW5lIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gbG9hZFRzY0NvbmZpZyhhcmdzOiBzdHJpbmdbXSk6XG4gICAge29wdGlvbnM6IHRzLkNvbXBpbGVyT3B0aW9ucywgZmlsZU5hbWVzOiBzdHJpbmdbXSwgZXJyb3JzOiB0cy5EaWFnbm9zdGljW119IHtcbiAgLy8gR2F0aGVyIHRzYyBvcHRpb25zL2lucHV0IGZpbGVzIGZyb20gY29tbWFuZCBsaW5lLlxuICBsZXQge29wdGlvbnMsIGZpbGVOYW1lcywgZXJyb3JzfSA9IHRzLnBhcnNlQ29tbWFuZExpbmUoYXJncyk7XG4gIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB7b3B0aW9uczoge30sIGZpbGVOYW1lczogW10sIGVycm9yc307XG4gIH1cblxuICAvLyBTdG9yZSBmaWxlIGFyZ3VtZW50c1xuICBjb25zdCB0c0ZpbGVBcmd1bWVudHMgPSBmaWxlTmFtZXM7XG5cbiAgLy8gUmVhZCBmdXJ0aGVyIHNldHRpbmdzIGZyb20gdHNjb25maWcuanNvbi5cbiAgY29uc3QgcHJvamVjdERpciA9IG9wdGlvbnMucHJvamVjdCB8fCAnLic7XG4gIGNvbnN0IGNvbmZpZ0ZpbGVOYW1lID0gcGF0aC5qb2luKHByb2plY3REaXIsICd0c2NvbmZpZy5qc29uJyk7XG4gIGNvbnN0IHtjb25maWc6IGpzb24sIGVycm9yfSA9XG4gICAgICB0cy5yZWFkQ29uZmlnRmlsZShjb25maWdGaWxlTmFtZSwgcGF0aCA9PiBmcy5yZWFkRmlsZVN5bmMocGF0aCwgJ3V0Zi04JykpO1xuICBpZiAoZXJyb3IpIHtcbiAgICByZXR1cm4ge29wdGlvbnM6IHt9LCBmaWxlTmFtZXM6IFtdLCBlcnJvcnM6IFtlcnJvcl19O1xuICB9XG4gICh7b3B0aW9ucywgZmlsZU5hbWVzLCBlcnJvcnN9ID1cbiAgICAgICB0cy5wYXJzZUpzb25Db25maWdGaWxlQ29udGVudChqc29uLCB0cy5zeXMsIHByb2plY3REaXIsIG9wdGlvbnMsIGNvbmZpZ0ZpbGVOYW1lKSk7XG4gIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB7b3B0aW9uczoge30sIGZpbGVOYW1lczogW10sIGVycm9yc307XG4gIH1cblxuICAvLyBpZiBmaWxlIGFyZ3VtZW50cyB3ZXJlIGdpdmVuIHRvIHRoZSB0eXBlc2NyaXB0IHRyYW5zcGlsZXIgdGhlbiB0cmFuc3BpbGUgb25seSB0aG9zZSBmaWxlc1xuICBmaWxlTmFtZXMgPSB0c0ZpbGVBcmd1bWVudHMubGVuZ3RoID4gMCA/IHRzRmlsZUFyZ3VtZW50cyA6IGZpbGVOYW1lcztcblxuICByZXR1cm4ge29wdGlvbnMsIGZpbGVOYW1lcywgZXJyb3JzOiBbXX07XG59XG5cbi8qKlxuICogQ29tcGlsZXMgVHlwZVNjcmlwdCBjb2RlIGludG8gQ2xvc3VyZS1jb21waWxlci1yZWFkeSBKUy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ2xvc3VyZUpTKFxuICAgIG9wdGlvbnM6IHRzLkNvbXBpbGVyT3B0aW9ucywgZmlsZU5hbWVzOiBzdHJpbmdbXSwgc2V0dGluZ3M6IFNldHRpbmdzLFxuICAgIHdyaXRlRmlsZT86IHRzLldyaXRlRmlsZUNhbGxiYWNrKTogdHNpY2tsZS5FbWl0UmVzdWx0IHtcbiAgLy8gVXNlIGFic29sdXRlIHBhdGhzIHRvIGRldGVybWluZSB3aGF0IGZpbGVzIHRvIHByb2Nlc3Mgc2luY2UgZmlsZXMgbWF5IGJlIGltcG9ydGVkIHVzaW5nXG4gIC8vIHJlbGF0aXZlIG9yIGFic29sdXRlIHBhdGhzXG4gIGNvbnN0IGFic29sdXRlRmlsZU5hbWVzID0gZmlsZU5hbWVzLm1hcChpID0+IHBhdGgucmVzb2x2ZShpKSk7XG5cbiAgY29uc3QgY29tcGlsZXJIb3N0ID0gdHMuY3JlYXRlQ29tcGlsZXJIb3N0KG9wdGlvbnMpO1xuICBjb25zdCBwcm9ncmFtID0gdHMuY3JlYXRlUHJvZ3JhbShmaWxlTmFtZXMsIG9wdGlvbnMsIGNvbXBpbGVySG9zdCk7XG4gIGNvbnN0IGZpbGVzVG9Qcm9jZXNzID0gbmV3IFNldChhYnNvbHV0ZUZpbGVOYW1lcyk7XG4gIGNvbnN0IHJvb3RNb2R1bGVQYXRoID0gb3B0aW9ucy5yb290RGlyIHx8IGdldENvbW1vblBhcmVudERpcmVjdG9yeShhYnNvbHV0ZUZpbGVOYW1lcyk7XG4gIGNvbnN0IHRyYW5zZm9ybWVySG9zdDogdHNpY2tsZS5Uc2lja2xlSG9zdCA9IHtcbiAgICBzaG91bGRTa2lwVHNpY2tsZVByb2Nlc3Npbmc6IChmaWxlTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gIWZpbGVzVG9Qcm9jZXNzLmhhcyhwYXRoLnJlc29sdmUoZmlsZU5hbWUpKTtcbiAgICB9LFxuICAgIHNob3VsZElnbm9yZVdhcm5pbmdzRm9yUGF0aDogKGZpbGVOYW1lOiBzdHJpbmcpID0+IGZhbHNlLFxuICAgIHBhdGhUb01vZHVsZU5hbWU6IGNsaVN1cHBvcnQucGF0aFRvTW9kdWxlTmFtZS5iaW5kKG51bGwsIHJvb3RNb2R1bGVQYXRoKSxcbiAgICBmaWxlTmFtZVRvTW9kdWxlSWQ6IChmaWxlTmFtZSkgPT4gcGF0aC5yZWxhdGl2ZShyb290TW9kdWxlUGF0aCwgZmlsZU5hbWUpLFxuICAgIGVzNU1vZGU6IHRydWUsXG4gICAgZ29vZ21vZHVsZTogdHJ1ZSxcbiAgICB0cmFuc2Zvcm1EZWNvcmF0b3JzOiB0cnVlLFxuICAgIHRyYW5zZm9ybVR5cGVzVG9DbG9zdXJlOiB0cnVlLFxuICAgIHR5cGVCbGFja0xpc3RQYXRoczogbmV3IFNldCgpLFxuICAgIGVuYWJsZUF1dG9RdW90aW5nOiBzZXR0aW5ncy5lbmFibGVBdXRvUXVvdGluZyxcbiAgICB1bnR5cGVkOiBmYWxzZSxcbiAgICBsb2dXYXJuaW5nOiAod2FybmluZykgPT4gY29uc29sZS5lcnJvcih0cy5mb3JtYXREaWFnbm9zdGljcyhbd2FybmluZ10sIGNvbXBpbGVySG9zdCkpLFxuICAgIG9wdGlvbnMsXG4gICAgaG9zdDogY29tcGlsZXJIb3N0LFxuICB9O1xuICBjb25zdCBkaWFnbm9zdGljcyA9IHRzLmdldFByZUVtaXREaWFnbm9zdGljcyhwcm9ncmFtKTtcbiAgaWYgKGRpYWdub3N0aWNzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGlhZ25vc3RpY3MsXG4gICAgICBtb2R1bGVzTWFuaWZlc3Q6IG5ldyBNb2R1bGVzTWFuaWZlc3QoKSxcbiAgICAgIGV4dGVybnM6IHt9LFxuICAgICAgZW1pdFNraXBwZWQ6IHRydWUsXG4gICAgICBlbWl0dGVkRmlsZXM6IFtdLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHRzaWNrbGUuZW1pdFdpdGhUc2lja2xlKFxuICAgICAgcHJvZ3JhbSwgdHJhbnNmb3JtZXJIb3N0LCBjb21waWxlckhvc3QsIG9wdGlvbnMsIHVuZGVmaW5lZCwgd3JpdGVGaWxlKTtcbn1cblxuZnVuY3Rpb24gbWFpbihhcmdzOiBzdHJpbmdbXSk6IG51bWJlciB7XG4gIGNvbnN0IHtzZXR0aW5ncywgdHNjQXJnc30gPSBsb2FkU2V0dGluZ3NGcm9tQXJncyhhcmdzKTtcbiAgY29uc3QgY29uZmlnID0gbG9hZFRzY0NvbmZpZyh0c2NBcmdzKTtcbiAgaWYgKGNvbmZpZy5lcnJvcnMubGVuZ3RoKSB7XG4gICAgY29uc29sZS5lcnJvcih0cy5mb3JtYXREaWFnbm9zdGljcyhjb25maWcuZXJyb3JzLCB0cy5jcmVhdGVDb21waWxlckhvc3QoY29uZmlnLm9wdGlvbnMpKSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBpZiAoY29uZmlnLm9wdGlvbnMubW9kdWxlICE9PSB0cy5Nb2R1bGVLaW5kLkNvbW1vbkpTKSB7XG4gICAgLy8gVGhpcyBpcyBub3QgYW4gdXBzdHJlYW0gVHlwZVNjcmlwdCBkaWFnbm9zdGljLCB0aGVyZWZvcmUgaXQgZG9lcyBub3QgZ29cbiAgICAvLyB0aHJvdWdoIHRoZSBkaWFnbm9zdGljcyBhcnJheSBtZWNoYW5pc20uXG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ3RzaWNrbGUgY29udmVydHMgVHlwZVNjcmlwdCBtb2R1bGVzIHRvIENsb3N1cmUgbW9kdWxlcyB2aWEgQ29tbW9uSlMgaW50ZXJuYWxseS4gJyArXG4gICAgICAgICdTZXQgdHNjb25maWcuanMgXCJtb2R1bGVcIjogXCJjb21tb25qc1wiJyk7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICAvLyBSdW4gdHNpY2tsZStUU0MgdG8gY29udmVydCBpbnB1dHMgdG8gQ2xvc3VyZSBKUyBmaWxlcy5cbiAgY29uc3QgcmVzdWx0ID0gdG9DbG9zdXJlSlMoXG4gICAgICBjb25maWcub3B0aW9ucywgY29uZmlnLmZpbGVOYW1lcywgc2V0dGluZ3MsIChmaWxlUGF0aDogc3RyaW5nLCBjb250ZW50czogc3RyaW5nKSA9PiB7XG4gICAgICAgIG1rZGlycC5zeW5jKHBhdGguZGlybmFtZShmaWxlUGF0aCkpO1xuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBjb250ZW50cywge2VuY29kaW5nOiAndXRmLTgnfSk7XG4gICAgICB9KTtcbiAgaWYgKHJlc3VsdC5kaWFnbm9zdGljcy5sZW5ndGgpIHtcbiAgICBjb25zb2xlLmVycm9yKHRzLmZvcm1hdERpYWdub3N0aWNzKHJlc3VsdC5kaWFnbm9zdGljcywgdHMuY3JlYXRlQ29tcGlsZXJIb3N0KGNvbmZpZy5vcHRpb25zKSkpO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgaWYgKHNldHRpbmdzLmV4dGVybnNQYXRoKSB7XG4gICAgbWtkaXJwLnN5bmMocGF0aC5kaXJuYW1lKHNldHRpbmdzLmV4dGVybnNQYXRoKSk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhzZXR0aW5ncy5leHRlcm5zUGF0aCwgdHNpY2tsZS5nZXRHZW5lcmF0ZWRFeHRlcm5zKHJlc3VsdC5leHRlcm5zKSk7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vIENMSSBlbnRyeSBwb2ludFxuaWYgKHJlcXVpcmUubWFpbiA9PT0gbW9kdWxlKSB7XG4gIHByb2Nlc3MuZXhpdChtYWluKHByb2Nlc3MuYXJndi5zcGxpY2UoMikpKTtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFVQSx1QkFBeUI7SUFDekIsbUNBQXFDO0lBQ3JDLCtCQUFpQztJQUNqQywyQkFBNkI7SUFDN0IsMkNBQW1DO0lBRW5DLG9EQUE0QztJQUM1Qyw2Q0FBcUM7SUFDckMsK0NBQTBDO0lBaUIxQztRQUNFLE9BQU8sQ0FBQyxLQUFLLENBQUMseVhBU2YsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILDhCQUE4QixJQUFjOztRQUMxQyxJQUFNLFFBQVEsR0FBYSxFQUFFLENBQUM7UUFDOUIsSUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDOztZQUNsQyxLQUFtQixJQUFBLEtBQUEsU0FBQSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBLGdCQUFBLDRCQUFFO2dCQUF2QyxJQUFNLElBQUksV0FBQTtnQkFDYixRQUFRLElBQUksRUFBRTtvQkFDWixLQUFLLEdBQUcsQ0FBQztvQkFDVCxLQUFLLE1BQU07d0JBQ1QsS0FBSyxFQUFFLENBQUM7d0JBQ1IsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDaEIsTUFBTTtvQkFDUixLQUFLLFNBQVM7d0JBQ1osUUFBUSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3hDLE1BQU07b0JBQ1IsS0FBSyxPQUFPO3dCQUNWLFFBQVEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO3dCQUN4QixNQUFNO29CQUNSLEtBQUssU0FBUzt3QkFDWixRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzt3QkFDeEIsTUFBTTtvQkFDUixLQUFLLG1CQUFtQjt3QkFDdEIsUUFBUSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQzt3QkFDbEMsTUFB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V0FBVyxFQUNwQixPQUFPLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2hGO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7UUFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzVDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIG1pbmltaXN0IGZyb20gJ21pbmltaXN0JztcbmltcG9ydCAqIGFzIG1rZGlycCBmcm9tICdta2RpcnAnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJy4vdHlwZXNjcmlwdCc7XG5cbmltcG9ydCAqIGFzIGNsaVN1cHBvcnQgZnJvbSAnLi9jbGlfc3VwcG9ydCc7XG5pbXBvcnQgKiBhcyB0c2lja2xlIGZyb20gJy4vdHNpY2tsZSc7XG5pbXBvcnQge01vZHVsZXNNYW5pZmVzdH0gZnJvbSAnLi90c2lja2xlJztcblxuLyoqIFRzaWNrbGUgc2V0dGluZ3MgcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUuICovXG5leHBvcnQgaW50ZXJmYWNlIFNldHRpbmdzIHtcbiAgLyoqIElmIHByb3ZpZGVkLCBtb2RpZnkgcXVvdGluZyBvZiBwcm9wZXJ0eSBhY2Nlc3NlcyB0byBtYXRjaCB0aGUgdHlwZSBkZWNsYXJhdGlvbi4gKi9cbiAgZW5hYmxlQXV0b1F1b3Rpbmc/OiBib29sZWFuO1xuXG4gIC8qKiBJZiBwcm92aWRlZCwgcGF0aCB0byBzYXZlIGV4dGVybnMgdG8uICovXG4gIGV4dGVybnNQYXRoPzogc3RyaW5nO1xuXG4gIC8qKiBJZiBwcm92aWRlZCwgYXR0ZW1wdCB0byBwcm92aWRlIHR5cGVzIHJhdGhlciB0aGFuIHs/fS4gKi9cbiAgaXNUeXBlZD86IGJvb2xlYW47XG5cbiAgLyoqIElmIHRydWUsIGxvZyBpbnRlcm5hbCBkZWJ1ZyB3YXJuaW5ncyB0byB0aGUgY29uc29sZS4gKi9cbiAgdmVyYm9zZT86IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIHVzYWdlKCkge1xuICBjb25zb2xlLmVycm9yKGB1c2FnZTogdHNpY2tsZSBbdHNpY2tsZSBvcHRpb25zXSAtLSBbdHNjIG9wdGlvbnNdXG5cbmV4YW1wbGU6XG4gIHRzaWNrbGUgLS1leHRlcm5zPWZvby9leHRlcm5zLmpzIC0tIC1wIHNyYyAtLW5vSW1wbGljaXRBbnlcblxudHNpY2tsZSBmbGFncyBhcmU6XG4gIC0tZXh0ZXJucz1QQVRIICAgICAgICBzYXZlIGdlbmVyYXRlZCBDbG9zdXJlIGV4dGVybnMuanMgdG8gUEFUSFxuICAtLXR5cGVkICAgICAgICAgICAgICAgW2V4cGVyaW1lbnRhbF0gYXR0ZW1wdCB0byBwcm92aWRlIENsb3N1cmUgdHlwZXMgaW5zdGVhZCBvZiB7P31cbiAgLS1lbmFibGVBdXRvUXVvdGluZyAgIGF1dG9tYXRpY2FsbHkgYXBwbHkgcXVvdGVzIHRvIHByb3BlcnR5IGFjY2Vzc2VzXG5gKTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMsIGV4dHJhY3RpbmcgdGhlIHRzaWNrbGUgc2V0dGluZ3MgYW5kXG4gKiB0aGUgYXJndW1lbnRzIHRvIHBhc3Mgb24gdG8gdHNjLlxuICovXG5mdW5jdGlvbiBsb2FkU2V0dGluZ3NGcm9tQXJncyhhcmdzOiBzdHJpbmdbXSk6IHtzZXR0aW5nczogU2V0dGluZ3MsIHRzY0FyZ3M6IHN0cmluZ1tdfSB7XG4gIGNvbnN0IHNldHRpbmdzOiBTZXR0aW5ncyA9IHt9O1xuICBjb25zdCBwYXJzZWRBcmdzID0gbWluaW1pc3QoYXJncyk7XG4gIGZvciAoY29uc3QgZmxhZyBvZiBPYmplY3Qua2V5cyhwYXJzZWRBcmdzKSkge1xuICAgIHN3aXRjaCAoZmxhZykge1xuICAgICAgY2FzZSAnaCc6XG4gICAgICBjYXNlICdoZWxwJzpcbiAgICAgICAgdXNhZ2UoKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V4dGVybnMnOlxuICAgICAgICBzZXR0aW5ncy5leHRlcm5zUGF0aCA9IHBhcnNlZEFyZ3NbZmxhZ107XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndHlwZWQnOlxuICAgICAgICBzZXR0aW5ncy5pc1R5cGVkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd2ZXJib3NlJzpcbiAgICAgICAgc2V0dGluZ3MudmVyYm9zZSA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZW5hYmxlQXV0b1F1b3RpbmcnOlxuICAgICAgICBzZXR0aW5ncy5lbmFibGVBdXRvUXVvdGluZyA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnXyc6XG4gICAgICAgIC8vIFRoaXMgaXMgcGFydCBvZiB0aGUgbWluaW1pc3QgQVBJLCBhbmQgaG9sZHMgYXJncyBhZnRlciB0aGUgJy0tJy5cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zb2xlLmVycm9yKGB1bmtub3duIGZsYWcgJy0tJHtmbGFnfSdgKTtcbiAgICAgICAgdXNhZ2UoKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfVxuICAvLyBBcmd1bWVudHMgYWZ0ZXIgdGhlICctLScgYXJnIGFyZSBhcmd1bWVudHMgdG8gdHNjLlxuICBjb25zdCB0c2NBcmdzID0gcGFyc2VkQXJnc1snXyddO1xuICByZXR1cm4ge3NldHRpbmdzLCB0c2NBcmdzfTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgdGhlIGxvd2VzdC1sZXZlbCBjb21tb24gcGFyZW50IGRpcmVjdG9yeSBvZiB0aGUgZ2l2ZW4gbGlzdCBvZiBmaWxlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbW1vblBhcmVudERpcmVjdG9yeShmaWxlTmFtZXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgY29uc3QgcGF0aFNwbGl0dGVyID0gL1tcXC9cXFxcXSsvO1xuICBjb25zdCBjb21tb25QYXJlbnQgPSBmaWxlTmFtZXNbMF0uc3BsaXQocGF0aFNwbGl0dGVyKTtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBmaWxlTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB0aGlzUGF0aCA9IGZpbGVOYW1lc1tpXS5zcGxpdChwYXRoU3BsaXR0ZXIpO1xuICAgIGxldCBqID0gMDtcbiAgICB3aGlsZSAodGhpc1BhdGhbal0gPT09IGNvbW1vblBhcmVudFtqXSkge1xuICAgICAgaisrO1xuICAgIH1cbiAgICBjb21tb25QYXJlbnQubGVuZ3RoID0gajsgIC8vIFRydW5jYXRlIHdpdGhvdXQgY29weWluZyB0aGUgYXJyYXlcbiAgfVxuICBpZiAoY29tbW9uUGFyZW50Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnLyc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNvbW1vblBhcmVudC5qb2luKHBhdGguc2VwKTtcbiAgfVxufVxuXG4vKipcbiAqIExvYWRzIHRoZSB0c2NvbmZpZy5qc29uIGZyb20gYSBkaXJlY3RvcnkuXG4gKlxuICogVE9ETyhtYXJ0aW5wcm9ic3QpOiB1c2UgdHMuZmluZENvbmZpZ0ZpbGUgdG8gbWF0Y2ggdHNjIGJlaGF2aW91ci5cbiAqXG4gKiBAcGFyYW0gYXJncyB0c2MgY29tbWFuZC1saW5lIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gbG9hZFRzY0NvbmZpZyhhcmdzOiBzdHJpbmdbXSk6XG4gICAge29wdGlvbnM6IHRzLkNvbXBpbGVyT3B0aW9ucywgZmlsZU5hbWVzOiBzdHJpbmdbXSwgZXJyb3JzOiB0cy5EaWFnbm9zdGljW119IHtcbiAgLy8gR2F0aGVyIHRzYyBvcHRpb25zL2lucHV0IGZpbGVzIGZyb20gY29tbWFuZCBsaW5lLlxuICBsZXQge29wdGlvbnMsIGZpbGVOYW1lcywgZXJyb3JzfSA9IHRzLnBhcnNlQ29tbWFuZExpbmUoYXJncyk7XG4gIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB7b3B0aW9uczoge30sIGZpbGVOYW1lczogW10sIGVycm9yc307XG4gIH1cblxuICAvLyBTdG9yZSBmaWxlIGFyZ3VtZW50c1xuICBjb25zdCB0c0ZpbGVBcmd1bWVudHMgPSBmaWxlTmFtZXM7XG5cbiAgLy8gUmVhZCBmdXJ0aGVyIHNldHRpbmdzIGZyb20gdHNjb25maWcuanNvbi5cbiAgY29uc3QgcHJvamVjdERpciA9IG9wdGlvbnMucHJvamVjdCB8fCAnLic7XG4gIGNvbnN0IGNvbmZpZ0ZpbGVOYW1lID0gcGF0aC5qb2luKHByb2plY3REaXIsICd0c2NvbmZpZy5qc29uJyk7XG4gIGNvbnN0IHtjb25maWc6IGpzb24sIGVycm9yfSA9XG4gICAgICB0cy5yZWFkQ29uZmlnRmlsZShjb25maWdGaWxlTmFtZSwgcGF0aCA9PiBmcy5yZWFkRmlsZVN5bmMocGF0aCwgJ3V0Zi04JykpO1xuICBpZiAoZXJyb3IpIHtcbiAgICByZXR1cm4ge29wdGlvbnM6IHt9LCBmaWxlTmFtZXM6IFtdLCBlcnJvcnM6IFtlcnJvcl19O1xuICB9XG4gICh7b3B0aW9ucywgZmlsZU5hbWVzLCBlcnJvcnN9ID1cbiAgICAgICB0cy5wYXJzZUpzb25Db25maWdGaWxlQ29udGVudChqc29uLCB0cy5zeXMsIHByb2plY3REaXIsIG9wdGlvbnMsIGNvbmZpZ0ZpbGVOYW1lKSk7XG4gIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB7b3B0aW9uczoge30sIGZpbGVOYW1lczogW10sIGVycm9yc307XG4gIH1cblxuICAvLyBpZiBmaWxlIGFyZ3VtZW50cyB3ZXJlIGdpdmVuIHRvIHRoZSB0eXBlc2NyaXB0IHRyYW5zcGlsZXIgdGhlbiB0cmFuc3BpbGUgb25seSB0aG9zZSBmaWxlc1xuICBmaWxlTmFtZXMgPSB0c0ZpbGVBcmd1bWVudHMubGVuZ3RoID4gMCA/IHRzRmlsZUFyZ3VtZW50cyA6IGZpbGVOYW1lcztcblxuICByZXR1cm4ge29wdGlvbnMsIGZpbGVOYW1lcywgZXJyb3JzOiBbXX07XG59XG5cbi8qKlxuICogQ29tcGlsZXMgVHlwZVNjcmlwdCBjb2RlIGludG8gQ2xvc3VyZS1jb21waWxlci1yZWFkeSBKUy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ2xvc3VyZUpTKFxuICAgIG9wdGlvbnM6IHRzLkNvbXBpbGVyT3B0aW9ucywgZmlsZU5hbWVzOiBzdHJpbmdbXSwgc2V0dGluZ3M6IFNldHRpbmdzLFxuICAgIHdyaXRlRmlsZT86IHRzLldyaXRlRmlsZUNhbGxiYWNrKTogdHNpY2tsZS5FbWl0UmVzdWx0IHtcbiAgLy8gVXNlIGFic29sdXRlIHBhdGhzIHRvIGRldGVybWluZSB3aGF0IGZpbGVzIHRvIHByb2Nlc3Mgc2luY2UgZmlsZXMgbWF5IGJlIGltcG9ydGVkIHVzaW5nXG4gIC8vIHJlbGF0aXZlIG9yIGFic29sdXRlIHBhdGhzXG4gIGNvbnN0IGFic29sdXRlRmlsZU5hbWVzID0gZmlsZU5hbWVzLm1hcChpID0+IHBhdGgucmVzb2x2ZShpKSk7XG5cbiAgY29uc3QgY29tcGlsZXJIb3N0ID0gdHMuY3JlYXRlQ29tcGlsZXJIb3N0KG9wdGlvbnMpO1xuICBjb25zdCBwcm9ncmFtID0gdHMuY3JlYXRlUHJvZ3JhbShhYnNvbHV0ZUZpbGVOYW1lcywgb3B0aW9ucywgY29tcGlsZXJIb3N0KTtcbiAgY29uc3QgZmlsZXNUb1Byb2Nlc3MgPSBuZXcgU2V0KGFic29sdXRlRmlsZU5hbWVzKTtcbiAgY29uc3Qgcm9vdE1vZHVsZVBhdGggPSBvcHRpb25zLnJvb3REaXIgfHwgZ2V0Q29tbW9uUGFyZW50RGlyZWN0b3J5KGFic29sdXRlRmlsZU5hbWVzKTtcbiAgY29uc3QgdHJhbnNmb3JtZXJIb3N0OiB0c2lja2xlLlRzaWNrbGVIb3N0ID0ge1xuICAgIHNob3VsZFNraXBUc2lja2xlUHJvY2Vzc2luZzogKGZpbGVOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiAhZmlsZXNUb1Byb2Nlc3MuaGFzKHBhdGgucmVzb2x2ZShmaWxlTmFtZSkpO1xuICAgIH0sXG4gICAgc2hvdWxkSWdub3JlV2FybmluZ3NGb3JQYXRoOiAoZmlsZU5hbWU6IHN0cmluZykgPT4gZmFsc2UsXG4gICAgcGF0aFRvTW9kdWxlTmFtZTogKGNvbnRleHQsIGZpbGVOYW1lKSA9PlxuICAgICAgICBjbGlTdXBwb3J0LnBhdGhUb01vZHVsZU5hbWUocm9vdE1vZHVsZVBhdGgsIGNvbnRleHQsIGZpbGVOYW1lKSxcbiAgICBmaWxlTmFtZVRvTW9kdWxlSWQ6IChmaWxlTmFtZSkgPT4gcGF0aC5yZWxhdGl2ZShyb290TW9kdWxlUGF0aCwgZmlsZU5hbWUpLFxuICAgIGVzNU1vZGU6IHRydWUsXG4gICAgZ29vZ21vZHVsZTogdHJ1ZSxcbiAgICB0cmFuc2Zvcm1EZWNvcmF0b3JzOiB0cnVlLFxuICAgIHRyYW5zZm9ybVR5cGVzVG9DbG9zdXJlOiB0cnVlLFxuICAgIHR5cGVCbGFja0xpc3RQYXRoczogbmV3IFNldCgpLFxuICAgIGVuYWJsZUF1dG9RdW90aW5nOiBzZXR0aW5ncy5lbmFibGVBdXRvUXVvdGluZyxcbiAgICB1bnR5cGVkOiBmYWxzZSxcbiAgICBsb2dXYXJuaW5nOiAod2FybmluZykgPT4gY29uc29sZS5lcnJvcih0cy5mb3JtYXREaWFnbm9zdGljcyhbd2FybmluZ10sIGNvbXBpbGVySG9zdCkpLFxuICAgIG9wdGlvbnMsXG4gICAgaG9zdDogY29tcGlsZXJIb3N0LFxuICB9O1xuICBjb25zdCBkaWFnbm9zdGljcyA9IHRzLmdldFByZUVtaXREaWFnbm9zdGljcyhwcm9ncmFtKTtcbiAgaWYgKGRpYWdub3N0aWNzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGlhZ25vc3RpY3MsXG4gICAgICBtb2R1bGVzTWFuaWZlc3Q6IG5ldyBNb2R1bGVzTWFuaWZlc3QoKSxcbiAgICAgIGV4dGVybnM6IHt9LFxuICAgICAgZW1pdFNraXBwZWQ6IHRydWUsXG4gICAgICBlbWl0dGVkRmlsZXM6IFtdLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHRzaWNrbGUuZW1pdFdpdGhUc2lja2xlKFxuICAgICAgcHJvZ3JhbSwgdHJhbnNmb3JtZXJIb3N0LCBjb21waWxlckhvc3QsIG9wdGlvbnMsIHVuZGVmaW5lZCwgd3JpdGVGaWxlKTtcbn1cblxuZnVuY3Rpb24gbWFpbihhcmdzOiBzdHJpbmdbXSk6IG51bWJlciB7XG4gIGNvbnN0IHtzZXR0aW5ncywgdHNjQXJnc30gPSBsb2FkU2V0dGluZ3NGcm9tQXJncyhhcmdzKTtcbiAgY29uc3QgY29uZmlnID0gbG9hZFRzY0NvbmZpZyh0c2NBcmdzKTtcbiAgaWYgKGNvbmZpZy5lcnJvcnMubGVuZ3RoKSB7XG4gICAgY29uc29sZS5lcnJvcih0cy5mb3JtYXREaWFnbm9zdGljcyhjb25maWcuZXJyb3JzLCB0cy5jcmVhdGVDb21waWxlckhvc3QoY29uZmlnLm9wdGlvbnMpKSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBpZiAoY29uZmlnLm9wdGlvbnMubW9kdWxlICE9PSB0cy5Nb2R1bGVLaW5kLkNvbW1vbkpTKSB7XG4gICAgLy8gVGhpcyBpcyBub3QgYW4gdXBzdHJlYW0gVHlwZVNjcmlwdCBkaWFnbm9zdGljLCB0aGVyZWZvcmUgaXQgZG9lcyBub3QgZ29cbiAgICAvLyB0aHJvdWdoIHRoZSBkaWFnbm9zdGljcyBhcnJheSBtZWNoYW5pc20uXG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ3RzaWNrbGUgY29udmVydHMgVHlwZVNjcmlwdCBtb2R1bGVzIHRvIENsb3N1cmUgbW9kdWxlcyB2aWEgQ29tbW9uSlMgaW50ZXJuYWxseS4gJyArXG4gICAgICAgICdTZXQgdHNjb25maWcuanMgXCJtb2R1bGVcIjogXCJjb21tb25qc1wiJyk7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICAvLyBSdW4gdHNpY2tsZStUU0MgdG8gY29udmVydCBpbnB1dHMgdG8gQ2xvc3VyZSBKUyBmaWxlcy5cbiAgY29uc3QgcmVzdWx0ID0gdG9DbG9zdXJlSlMoXG4gICAgICBjb25maWcub3B0aW9ucywgY29uZmlnLmZpbGVOYW1lcywgc2V0dGluZ3MsIChmaWxlUGF0aDogc3RyaW5nLCBjb250ZW50czogc3RyaW5nKSA9PiB7XG4gICAgICAgIG1rZGlycC5zeW5jKHBhdGguZGlybmFtZShmaWxlUGF0aCkpO1xuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBjb250ZW50cywge2VuY29kaW5nOiAndXRmLTgnfSk7XG4gICAgICB9KTtcbiAgaWYgKHJlc3VsdC5kaWFnbm9zdGljcy5sZW5ndGgpIHtcbiAgICBjb25zb2xlLmVycm9yKHRzLmZvcm1hdERpYWdub3N0aWNzKHJlc3VsdC5kaWFnbm9zdGljcywgdHMuY3JlYXRlQ29tcGlsZXJIb3N0KGNvbmZpZy5vcHRpb25zKSkpO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgaWYgKHNldHRpbmdzLmV4dGVybnNQYXRoKSB7XG4gICAgbWtkaXJwLnN5bmMocGF0aC5kaXJuYW1lKHNldHRpbmdzLmV4dGVybnNQYXRoKSk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgc2V0dGluZ3MuZXh0ZXJuc1BhdGgsXG4gICAgICAgIHRzaWNrbGUuZ2V0R2VuZXJhdGVkRXh0ZXJucyhyZXN1bHQuZXh0ZXJucywgY29uZmlnLm9wdGlvbnMucm9vdERpciB8fCAnJykpO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vLyBDTEkgZW50cnkgcG9pbnRcbmlmIChyZXF1aXJlLm1haW4gPT09IG1vZHVsZSkge1xuICBwcm9jZXNzLmV4aXQobWFpbihwcm9jZXNzLmFyZ3Yuc3BsaWNlKDIpKSk7XG59XG4iXX0=

@@ -107,3 +107,7 @@ /**

*/
getFunctionTypeJSDoc(fnDecls: ts.SignatureDeclaration[], extraTags?: jsdoc.Tag[]): [jsdoc.Tag[], string[]];
getFunctionTypeJSDoc(fnDecls: ts.SignatureDeclaration[], extraTags?: jsdoc.Tag[]): {
tags: jsdoc.Tag[];
parameterNames: string[];
thisReturnType: ts.Type | null;
};
}

@@ -11,3 +11,3 @@ /**

/** @return true if node has the specified modifier flag set. */
export declare function hasModifierFlag(node: ts.Node, flag: ts.ModifierFlags): boolean;
export declare function hasModifierFlag(declaration: ts.Declaration, flag: ts.ModifierFlags): boolean;
/** Returns true if fileName is a .d.ts file. */

@@ -14,0 +14,0 @@ export declare function isDtsFileName(fileName: string): boolean;

@@ -49,4 +49,4 @@ /**

/** @return true if node has the specified modifier flag set. */
function hasModifierFlag(node, flag) {
return (ts.getCombinedModifierFlags(node) & flag) !== 0;
function hasModifierFlag(declaration, flag) {
return (ts.getCombinedModifierFlags(declaration) & flag) !== 0;
}

@@ -290,2 +290,2 @@ exports.hasModifierFlag = hasModifierFlag;

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtZXJfdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90cmFuc2Zvcm1lcl91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUVILDJDQUFtQztJQUVuQyxnRUFBZ0U7SUFDaEUseUJBQWdDLElBQWEsRUFBRSxJQUFzQjtRQUNuRSxPQUFPLENBQUMsRUFBRSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRkQsMENBRUM7SUFFRCxnREFBZ0Q7SUFDaEQsdUJBQThCLFFBQWdCO1FBQzVDLE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRkQsc0NBRUM7SUFFRCxzREFBc0Q7SUFDdEQsMkJBQWtDLFVBQXlCO1FBQ3pELCtGQUErRjtRQUMvRixvRkFBb0Y7UUFDcEYsT0FBTyxZQUFZLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFKRCw4Q0FJQztJQUVELHlEQUF5RDtJQUN6RCwyQkFBa0MsSUFBbUI7UUFDbkQsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3pCLE9BQU8saUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDaEM7UUFDRCxPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFMRCw4Q0FLQztJQUVEOztPQUVHO0lBQ0gsc0JBQTZCLElBQWlCO1FBQzVDLDRFQUE0RTtRQUM1RSxJQUFNLEdBQUcsR0FBRyxJQUFjLENBQUM7UUFDM0IsSUFBSSxHQUFHLENBQUMsVUFBVSxD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LENBQUM7SUFURCxzREFTQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAnLi90eXBlc2NyaXB0JztcblxuLyoqIEByZXR1cm4gdHJ1ZSBpZiBub2RlIGhhcyB0aGUgc3BlY2lmaWVkIG1vZGlmaWVyIGZsYWcgc2V0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc01vZGlmaWVyRmxhZyhub2RlOiB0cy5Ob2RlLCBmbGFnOiB0cy5Nb2RpZmllckZsYWdzKTogYm9vbGVhbiB7XG4gIHJldHVybiAodHMuZ2V0Q29tYmluZWRNb2RpZmllckZsYWdzKG5vZGUpICYgZmxhZykgIT09IDA7XG59XG5cbi8qKiBSZXR1cm5zIHRydWUgaWYgZmlsZU5hbWUgaXMgYSAuZC50cyBmaWxlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRHRzRmlsZU5hbWUoZmlsZU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZmlsZU5hbWUuZW5kc1dpdGgoJy5kLnRzJyk7XG59XG5cbi8qKiBSZXR1cm5zIHRoZSBzdHJpbmcgY29udGVudHMgb2YgYSB0cy5JZGVudGlmaWVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldElkZW50aWZpZXJUZXh0KGlkZW50aWZpZXI6IHRzLklkZW50aWZpZXIpOiBzdHJpbmcge1xuICAvLyBOT1RFOiAnZXNjYXBlZFRleHQnIG9uIGFuIElkZW50aWZpZXIgbWF5IGJlIGVzY2FwZWQgaWYgaXQgc3RhcnRzIHdpdGggJ19fJy4gVGhlIGFsdGVybmF0aXZlLFxuICAvLyBnZXRUZXh0KCksIGNhbm5vdCBiZSB1c2VkIG9uIHN5bnRoZXNpemVkIG5vZGVzLCBzbyB1bmVzY2FwZSB0aGUgaWRlbnRpZmllciBiZWxvdy5cbiAgcmV0dXJuIHVuZXNjYXBlTmFtZShpZGVudGlmaWVyLmVzY2FwZWRUZXh0KTtcbn1cblxuLyoqIFJldHVybnMgYSBkb3Qtam9pbmVkIHF1YWxpZmllZCBuYW1lIChmb28uYmFyLkJheikuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW50aXR5TmFtZVRleHQobmFtZTogdHMuRW50aXR5TmFtZSk6IHN0cmluZyB7XG4gIGlmICh0cy5pc0lkZW50aWZpZXIobmFtZSkpIHtcbiAgICByZXR1cm4gZ2V0SWRlbnRpZmllclRleHQobmFtZSk7XG4gIH1cbiAgcmV0dXJuIGdldEVudGl0eU5hbWVUZXh0KG5hbWUubGVmdCkgKyAnLicgKyBnZXRJZGVudGlmaWVyVGV4dChuYW1lLnJpZ2h0KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBlc2NhcGVkIFR5cGVTY3JpcHQgbmFtZSBpbnRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuZXNjYXBlTmFtZShuYW1lOiB0cy5fX1N0cmluZyk6IHN0cmluZyB7XG4gIC8vIFNlZSB0aGUgcHJpdmF0ZSBmdW5jdGlvbiB1bmVzY2FwZUlkZW50aWZpZXIgaW4gVHlwZVNjcmlwdCdzIHV0aWxpdGllcy50cy5cbiAgY29uc3Qgc3RyID0gbmFtZSBhcyBzdHJpbmc7XG4gIGlmIChzdHIuc3RhcnRzV2l0aCgnX19fJykpIHJldHVybiBzdHIuc3Vic3RyaW5nKDEpO1xuICByZXR1cm4gc3RyO1xufVxuXG4vKipcbiAqIHRzLmNyZWF0ZU5vdEVtaXR0ZWRTdGF0ZW1lbnQgd2lsbCBjcmVhdGUgYSBub2RlLCBidXQgdGhlIGNvbW1lbnRzIGNvdmVyZWQgYnkgaXRzIHRleHQgcmFuZ2UgYXJlXG4gKiBuZXZlciBlbWl0dGVkbSBleGNlcHQgZm9yIHZlcnkgc3BlY2lmaWMgc3BlY2lhbCBjYXNlcyAoLy8vIGNvbW1lbnRzKS5cbiAqXG4gKiBjcmVhdGVOb3RFbWl0dGVkU3RhdGVtZW50V2l0aENvbW1lbnRzIGNyZWF0ZXMgYSBub3QgZW1pdHRlZCBzdGF0ZW1lbnQgYW5kIGFkZHMgY29tbWVudCByYW5nZXNcbiAqIGZyb20gdGhlIG9yaWdpbmFsIHN0YXRlbWVudCBhcyBzeW50aGV0aWMgY29tbWVudHMgdG8gaXQsIHNvIHRoYXQgdGhleSBnZXQgcmV0YWluZWQgaW4gdGhlIG91dHB1dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU5vdEVtaXR0ZWRTdGF0ZW1lbnRXaXRoQ29tbWVudHMoXG4gICAgc291cmNlRmlsZTogdHMuU291cmNlRmlsZSwgb3JpZ2luYWw6IHRzLk5vZGUpOiB0cy5TdGF0ZW1lbnQge1xuICBsZXQgcmVwbGFjZW1lbnQgPSB0cy5jcmVhdGVOb3RFbWl0dGVkU3RhdGVtZW50KG9yaWdpbmFsKTtcbiAgLy8gTkI6IHN5bnRoZXRpYyBub2RlcyBjYW4gaGF2ZSBwb3MvZW5kID09IC0xLiBUaGlzIGlzIGhhbmRsZWQgYnkgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24uXG4gIGNvbnN0IGxlYWRpbmcgPSB0cy5nZXRMZWFkaW5nQ29tbWVudFJhbmdlcyhzb3VyY2VGaWxlLnRleHQsIG9yaWdpbmFsLnBvcykgfHwgW107XG4gIGNvbnN0IHRyYWlsaW5nID0gdHMuZ2V0VHJhaWxpbmdDb21tZW50UmFuZ2VzKHNvdXJjZUZpbGUudGV4dCwgb3JpZ2luYWwuZW5kKSB8fCBbXTtcbiAgcmVwbGFjZW1lbnQgPVxuICAgICAgdHMuc2V0U3ludGhldGljTGVhZGluZ0NvbW1lbnRzKHJlcGxhY2VtZW50LCBzeW50aGVzaXplQ29tbWVudFJhbmdlcyhzb3VyY2VGaWxlLCBsZWFkaW5nKSk7XG4gIHJlcGxhY2VtZW50ID1cbiAgICAgIHRzLnNldFN5bnRoZXRpY1RyYWlsaW5nQ29tbWVudHMocmVwbGFjZW1lbnQsIHN5bnRoZXNpemVDb21tZW50UmFuZ2VzKHNvdXJjZUZpbGUsIHRyYWlsaW5nKSk7XG4gIHJldHVybiByZXBsYWNlbWVudDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBgdHMuQ29tbWVudFJhbmdlYHMgaW50byBgdHMuU3ludGhlc2l6ZWRDb21tZW50YHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzeW50aGVzaXplQ29tbWVudFJhbmdlcyhcbiAgICBzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlLCBwYXJzZWRDb21tZW50czogdHMuQ29tbWVudFJhbmdlW10pOiB0cy5TeW50aGVzaXplZENvbW1lbnRbXSB7XG4gIGNvbnN0IHN5bnRoZXNpemVkQ29tbWVudHM6IHRzLlN5bnRoZXNpemVkQ29tbWVudFtdID0gW107XG4gIHBhcnNlZENvbW1lbnRzLmZvckVhY2goKHtraW5kLCBwb3MsIGVuZCwgaGFzVHJhaWxpbmdOZXdMaW5lfSwgY29tbWVudElkeCkgPT4ge1xuICAgIGxldCBjb21tZW50VGV4dCA9IHNvdXJjZUZpbGUudGV4dC5zdWJzdHJpbmcocG9zLCBlbmQpLnRyaW0oKTtcbiAgICBpZiAoa2luZCA9PT0gdHMuU3ludGF4S2luZC5NdWx0aUxpbmVDb21tZW50VHJpdmlhKSB7XG4gICAgICBjb21tZW50VGV4dCA9IGNvbW1lbnRUZXh0LnJlcGxhY2UoLyheXFwvXFwqKXwoXFwqXFwvJCkvZywgJycpO1xuICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gdHMuU3ludGF4S2luZC5TaW5nbGVMaW5lQ29tbWVudFRyaXZpYSkge1xuICAgICAgaWYgKGNvbW1lbnRUZXh0LnN0YXJ0c1dpdGgoJy8vLycpKSB7XG4gICAgICAgIC8vIHRyaXBsZS1zbGFzaCBjb21tZW50cyBhcmUgdHlwZXNjcmlwdCBzcGVjaWZpYywgaWdub3JlIHRoZW0gaW4gdGhlIG91dHB1dC5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29tbWVudFRleHQgPSBjb21tZW50VGV4dC5yZXBsYWNlKC8oXlxcL1xcLykvZywgJycpO1xuICAgIH1cbiAgICBzeW50aGVzaXplZENvbW1lbnRzLnB1c2goe2tpbmQsIHRleHQ6IGNvbW1lbnRUZXh0LCBoYXNUcmFpbGluZ05ld0xpbmUsIHBvczogLTEsIGVuZDogLTF9KTtcbiAgfSk7XG4gIHJldHVybiBzeW50aGVzaXplZENvbW1lbnRzO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBub24gZW1pdHRlZCBzdGF0ZW1lbnQgdGhhdCBjYW4gYmUgdXNlZCB0byBzdG9yZSBzeW50aGVzaXplZCBjb21tZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU5vdEVtaXR0ZWRTdGF0ZW1lbnQoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSk6IHRzLk5vdEVtaXR0ZWRTdGF0ZW1lbnQge1xuICBjb25zdCBzdG10ID0gdHMuY3JlYXRlTm90RW1pdHRlZFN0YXRlbWVudChzb3VyY2VGaWxlKTtcbiAgdHMuc2V0T3JpZ2luYWxOb2RlKHN0bXQsIHVuZGVmaW5lZCk7XG4gIHRzLnNldFRleHRSYW5nZShzdG10LCB7cG9zOiAwLCBlbmQ6IDB9KTtcbiAgdHMuc2V0RW1pdEZsYWdzKHN0bXQsIHRzLkVtaXRGbGFncy5DdXN0b21Qcm9sb2d1ZSk7XG4gIHJldHVybiBzdG10O1xufVxuXG4vKipcbiAqIFRoaXMgaXMgYSB2ZXJzaW9uIG9mIGB0cy52aXNpdEVhY2hDaGlsZGAgdGhhdCB3b3JrcyB0aGF0IGNhbGxzIG91ciB2ZXJzaW9uXG4gKiBvZiBgdXBkYXRlU291cmNlRmlsZU5vZGVgLCBzbyB0aGF0IHR5cGVzY3JpcHQgZG9lc24ndCBsb3NlIHR5cGUgaW5mb3JtYXRpb25cbiAqIGZvciBwcm9wZXJ0eSBkZWNvcmF0b3JzLlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMTczODRcbiAqXG4gKiBAcGFyYW0gc2ZcbiAqIEBwYXJhbSBzdGF0ZW1lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2aXNpdEVhY2hDaGlsZChcbiAgICBub2RlOiB0cy5Ob2RlLCB2aXNpdG9yOiB0cy5WaXNpdG9yLCBjb250ZXh0OiB0cy5UcmFuc2Zvcm1hdGlvbkNvbnRleHQpOiB0cy5Ob2RlIHtcbiAgaWYgKG5vZGUua2luZCA9PT0gdHMuU3ludGF4S2luZC5Tb3VyY2VGaWxlKSB7XG4gICAgY29uc3Qgc2YgPSBub2RlIGFzIHRzLlNvdXJjZUZpbGU7XG4gICAgcmV0dXJuIHVwZGF0ZVNvdXJjZUZpbGVOb2RlKHNmLCB0cy52aXNpdExleGljYWxFbnZpcm9ubWVudChzZi5zdGF0ZW1lbnRzLCB2aXNpdG9yLCBjb250ZXh0KSk7XG4gIH1cblxuICByZXR1cm4gdHMudmlzaXRFYWNoQ2hpbGQobm9kZSwgdmlzaXRvciwgY29udGV4dCk7XG59XG5cbi8qKlxuICogVGhpcyBpcyBhIHZlcnNpb24gb2YgYHRzLnVwZGF0ZVNvdXJjZUZpbGVOb2RlYCB0aGF0IHdvcmtzXG4gKiB3ZWxsIHdpdGggcHJvcGVydHkgZGVjb3JhdG9ycy5cbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzE3Mzg0XG4gKiBUT0RPKCM2MzQpOiBUaGlzIGhhcyBiZWVuIGZpeGVkIGluIFRTIDIuNS4gSW52ZXN0aWdhdGUgcmVtb3ZhbC5cbiAqXG4gKiBAcGFyYW0gc2ZcbiAqIEBwYXJhbSBzdGF0ZW1lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTb3VyY2VGaWxlTm9kZShcbiAgICBzZjogdHMuU291cmNlRmlsZSwgc3RhdGVtZW50czogdHMuTm9kZUFycmF5PHRzLlN0YXRlbWVudD4pOiB0cy5Tb3VyY2VGaWxlIHtcbiAgaWYgKHN0YXRlbWVudHMgPT09IHNmLnN0YXRlbWVudHMpIHtcbiAgICByZXR1cm4gc2Y7XG4gIH1cbiAgLy8gTm90ZTogTmVlZCB0byBjbG9uZSB0aGUgb3JpZ2luYWwgZmlsZSAoYW5kIG5vdCB1c2UgYHRzLnVwZGF0ZVNvdXJjZUZpbGVOb2RlYClcbiAgLy8gYXMgb3RoZXJ3aXNlIFRTIGZhaWxzIHdoZW4gcmVzb2x2aW5nIHR5cGVzIGZvciBkZWNvcmF0b3JzLlxuICBzZiA9IHRzLmdldE11dGFibGVDbG9uZShzZik7XG4gIHNmLnN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzO1xuICByZXR1cm4gc2Y7XG59XG5cbi8vIENvcGllZCBmcm9tIFR5cGVTY3JpcHRcbmV4cG9ydCBmdW5jdGlvbiBpc1R5cGVOb2RlS2luZChraW5kOiB0cy5TeW50YXhLaW5kKSB7XG4gIHJldHVybiAoa2luZCA+PSB0cy5TeW50YXhLaW5kLkZpcnN0VHlwZU5vZGUgJiYga2luZCA8PSB0cy5TeW50YXhLaW5kLkxhc3RUeXBlTm9kZSkgfHxcbiAgICAgIGtpbmQgPT09IHRzLlN5bnRheEtpbmQuQW55S2V5d29yZCB8fCBraW5kID09PSB0cy5TeW50YXhLaW5kLk51bWJlcktleXdvcmQgfHxcbiAgICAgIGtpbmQgPT09IHRzLlN5bnRheEtpbmQuT2JqZWN0S2V5d29yZCB8fCBraW5kID09PSB0cy5TeW50YXhLaW5kLkJvb2xlYW5LZXl3b3JkIHx8XG4gICAgICBraW5kID09PSB0cy5TeW50YXhLaW5kLlN0cmluZ0tleXdvcmQgfHwga2luZCA9PT0gdHMuU3ludGF4S2luZC5TeW1ib2xLZXl3b3JkIHx8XG4gICAgICBraW5kID09PSB0cy5TeW50YXhLaW5kLlRoaXNLZXl3b3JkIHx8IGtpbmQgPT09IHRzLlN5bnRheEtpbmQuVm9pZEtleXdvcmQgfHxcbiAgICAgIGtpbmQgPT09IHRzLlN5bnRheEtpbmQuVW5kZWZpbmVkS2V5d29yZCB8fCBraW5kID09PSB0cy5TeW50YXhLaW5kLk51bGxLZXl3b3JkIHx8XG4gICAgICBraW5kID09PSB0cy5TeW50YXhLaW5kLk5ldmVyS2V5d29yZCB8fCBraW5kID09PSB0cy5TeW50YXhLaW5kLkV4cHJlc3Npb25XaXRoVHlwZUFyZ3VtZW50cztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RyaW5nIGxpdGVyYWwgdGhhdCB1c2VzIHNpbmdsZSBxdW90ZXMuIFB1cmVseSBjb3NtZXRpYywgYnV0IGluY3JlYXNlcyBmaWRlbGl0eSB0byB0aGVcbiAqIGV4aXN0aW5nIHRlc3Qgc3VpdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTaW5nbGVRdW90ZVN0cmluZ0xpdGVyYWwodGV4dDogc3RyaW5nKTogdHMuU3RyaW5nTGl0ZXJhbCB7XG4gIGNvbnN0IHN0cmluZ0xpdGVyYWwgPSB0cy5jcmVhdGVMaXRlcmFsKHRleHQpO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55IGFjY2Vzc2luZyBUUyBpbnRlcm5hbCBBUEkuXG4gIChzdHJpbmdMaXRlcmFsIGFzIGFueSkuc2luZ2xlUXVvdGUgPSB0cnVlO1xuICByZXR1cm4gc3RyaW5nTGl0ZXJhbDtcbn1cblxuLyoqIENyZWF0ZXMgYSBub3QgZW1pdHRlZCBzdGF0ZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gdGV4dCBhcyBhIHNpbmdsZSBsaW5lIGNvbW1lbnQuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2luZ2xlTGluZUNvbW1lbnQob3JpZ2luYWw6IHRzLk5vZGUsIHRleHQ6IHN0cmluZykge1xuICBjb25zdCBjb21tZW50OiB0cy5TeW50aGVzaXplZENvbW1lbnQgPSB7XG4gICAga2luZDogdHMuU3ludGF4S2luZC5TaW5nbGVMaW5lQ29tbWVudFRyaXZpYSxcbiAgICB0ZXh0OiAnICcgKyB0ZXh0LFxuICAgIGhhc1RyYWlsaW5nTmV3TGluZTogdHJ1ZSxcbiAgICBwb3M6IC0xLFxuICAgIGVuZDogLTEsXG4gIH07XG4gIHJldHVybiB0cy5zZXRTeW50aGV0aWNUcmFpbGluZ0NvbW1lbnRzKHRzLmNyZWF0ZU5vdEVtaXR0ZWRTdGF0ZW1lbnQob3JpZ2luYWwpLCBbY29tbWVudF0pO1xufVxuXG4vKiogQ3JlYXRlcyBhIG5vdCBlbWl0dGVkIHN0YXRlbWVudCB3aXRoIHRoZSBnaXZlbiB0ZXh0IGFzIGEgc2luZ2xlIGxpbmUgY29tbWVudC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNdWx0aUxpbmVDb21tZW50KG9yaWdpbmFsOiB0cy5Ob2RlLCB0ZXh0OiBzdHJpbmcpIHtcbiAgY29uc3QgY29tbWVudDogdHMuU3ludGhlc2l6ZWRDb21tZW50ID0ge1xuICAgIGtpbmQ6IHRzLlN5bnRheEtpbmQuTXVsdGlMaW5lQ29tbWVudFRyaXZpYSxcbiAgICB0ZXh0OiAnICcgKyB0ZXh0LFxuICAgIGhhc1RyYWlsaW5nTmV3TGluZTogdHJ1ZSxcbiAgICBwb3M6IC0xLFxuICAgIGVuZDogLTEsXG4gIH07XG4gIHJldHVybiB0cy5zZXRTeW50aGV0aWNUcmFpbGluZ0NvbW1lbnRzKHRzLmNyZWF0ZU5vdEVtaXR0ZWRTdGF0ZW1lbnQob3JpZ2luYWwpLCBbY29tbWVudF0pO1xufVxuXG4vKipcbiAqIGRlYnVnV2FybiBsb2dzIGEgZGVidWcgd2FybmluZy5cbiAqXG4gKiBUaGVzZSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjYXNlcyB3aGVyZSB0c2lja2xlIGlzIG1ha2luZyBhIHF1ZXN0aW9uYWJsZSBqdWRnZW1lbnQgYWJvdXQgd2hhdFxuICogdG8gZG8uIEJ5IGRlZmF1bHQsIHRzaWNrbGUgZG9lcyBub3QgcmVwb3J0IGFueSB3YXJuaW5ncyB0byB0aGUgY2FsbGVyLCBhbmQgd2FybmluZ3MgYXJlIGhpZGRlblxuICogYmVoaW5kIGEgZGVidWcgZmxhZywgYXMgd2FybmluZ3MgYXJlIG9ubHkgZm9yIHRzaWNrbGUgdG8gZGVidWcgaXRzZWxmLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwb3J0RGVidWdXYXJuaW5nKFxuICAgIGhvc3Q6IHtsb2dXYXJuaW5nID8gKGQ6IHRzLkRpYWdub3N0aWMpIDogdm9pZH0sIG5vZGU6IHRzLk5vZGUsIG1lc3NhZ2VUZXh0OiBzdHJpbmcpIHtcbiAgaWYgKCFob3N0LmxvZ1dhcm5pbmcpIHJldHVybjtcbiAgaG9zdC5sb2dXYXJuaW5nKGNyZWF0ZURpYWdub3N0aWMoXG4gICAgICBub2RlLCBtZXNzYWdlVGV4dCwgLyogdGV4dFJhbmdlICovIHVuZGVmaW5lZCwgdHMuRGlhZ25vc3RpY0NhdGVnb3J5Lldhcm5pbmcpKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuZCByZXBvcnRzIGEgZGlhZ25vc3RpYyBieSBhZGRpbmcgaXQgdG8gdGhlIGdpdmVuIGFycmF5LlxuICpcbiAqIFRoaXMgaXMgdXNlZCBmb3IgZXJyb3JzIGFuZCB3YXJuaW5ncyBpbiB0c2lja2xlJ3MgaW5wdXQuIEVtaXQgZXJyb3JzICh0aGUgZGVmYXVsdCkgaWYgdHNpY2tsZVxuICogY2Fubm90IGVtaXQgYSBjb3JyZWN0IHJlc3VsdCBnaXZlbiB0aGUgaW5wdXQuIEVtaXQgd2FybmluZ3MgZm9yIHF1ZXN0aW9uYWJsZSBpbnB1dCBpZiB0aGVyZSdzIGFcbiAqIGdvb2QgY2hhbmNlIHRoYXQgdGhlIG91dHB1dCB3aWxsIHdvcmsuXG4gKlxuICogRm9yIHR5cGljYWwgdHNpY2tsZSB1c2VycywgZXJyb3JzIGFyZSBhbHdheXMgcmVwb3J0ZWQgYW5kIGJyZWFrIHRoZSBjb21waWxhdGlvbiBvcGVyYXRpb24sXG4gKiB3YXJuaW5ncyB3aWxsIG9ubHkgYmUgZW1pdHRlZCBmb3IgZmlyc3QgcGFydHkgY29kZSAoYW5kIGJyZWFrIHRoZSBjb21waWxhdGlvbiB0aGVyZSksIGJ1dCB3aWwgYmVcbiAqIGlnbm9yZWQgZm9yIHRoaXJkIHBhcnR5IGNvZGUuXG4gKlxuICogQHBhcmFtIHRleHRSYW5nZSBwYXNzIHRvIG92ZXJycmlkZSB0aGUgdGV4dCByYW5nZSBmcm9tIHRoZSBub2RlIHdpdGggYSBtb3JlIHNwZWNpZmljIHJhbmdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwb3J0RGlhZ25vc3RpYyhcbiAgICBkaWFnbm9zdGljczogdHMuRGlhZ25vc3RpY1tdLCBub2RlOiB0cy5Ob2RlLCBtZXNzYWdlVGV4dDogc3RyaW5nLCB0ZXh0UmFuZ2U/OiB0cy5UZXh0UmFuZ2UsXG4gICAgY2F0ZWdvcnkgPSB0cy5EaWFnbm9zdGljQ2F0ZWdvcnkuRXJyb3IpIHtcbiAgZGlhZ25vc3RpY3MucHVzaChjcmVhdGVEaWFnbm9zdGljKG5vZGUsIG1lc3NhZ2VUZXh0LCB0ZXh0UmFuZ2UsIGNhdGVnb3J5KSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURpYWdub3N0aWMoXG4gICAgbm9kZTogdHMuTm9kZSwgbWVzc2FnZVRleHQ6IHN0cmluZywgdGV4dFJhbmdlOiB0cy5UZXh0UmFuZ2V8dW5kZWZpbmVkLFxuICAgIGNhdGVnb3J5OiB0cy5EaWFnbm9zdGljQ2F0ZWdvcnkpOiB0cy5EaWFnbm9zdGljIHtcbiAgbGV0IHN0YXJ0LCBsZW5ndGg6IG51bWJlcjtcbiAgaWYgKHRleHRSYW5nZSkge1xuICAgIHN0YXJ0ID0gdGV4dFJhbmdlLnBvcztcbiAgICBsZW5ndGggPSB0ZXh0UmFuZ2UuZW5kIC0gdGV4dFJhbmdlLnBvcztcbiAgfSBlbHNlIHtcbiAgICAvLyBPbmx5IHVzZSBnZXRTdGFydCBpZiBub2RlIGhhcyBhIHZhbGlkIHBvcywgYXMgaXQgbWlnaHQgYmUgc3ludGhlc2l6ZWQuXG4gICAgc3RhcnQgPSBub2RlLnBvcyA+PSAwID8gbm9kZS5nZXRTdGFydCgpIDogMDtcbiAgICBsZW5ndGggPSBub2RlLmVuZCAtIG5vZGUucG9zO1xuICB9XG4gIHJldHVybiB7XG4gICAgZmlsZTogbm9kZS5nZXRTb3VyY2VGaWxlKCksXG4gICAgc3RhcnQsXG4gICAgbGVuZ3RoLFxuICAgIG1lc3NhZ2VUZXh0LFxuICAgIGNhdGVnb3J5LFxuICAgIGNvZGU6IDAsXG4gIH07XG59XG5cbi8qKlxuICogQSByZXBsYWNlbWVudCBmb3IgdHMuZ2V0TGVhZGluZ0NvbW1lbnRSYW5nZXMgdGhhdCByZXR1cm5zIHRoZSB1bmlvbiBvZiBzeW50aGV0aWMgYW5kXG4gKiBub24tc3ludGhldGljIGNvbW1lbnRzIG9uIHRoZSBnaXZlbiBub2RlLCB3aXRoIHRoZWlyIHRleHQgaW5jbHVkZWQuIFRoZSByZXR1cm5lZCBjb21tZW50cyBtdXN0XG4gKiBub3QgYmUgbXV0YXRlZCwgYXMgdGhlaXIgY29udGVudCBtaWdodCBvciBtaWdodCBub3QgYmUgcmVmbGVjdGVkIGJhY2sgaW50byB0aGUgQVNULlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsTGVhZGluZ0NvbW1lbnRzKG5vZGU6IHRzLk5vZGUpOlxuICAgIFJlYWRvbmx5QXJyYXk8UmVhZG9ubHk8dHMuQ29tbWVudFJhbmdlJnt0ZXh0OiBzdHJpbmd9Pj4ge1xuICBjb25zdCBhbGxSYW5nZXM6IEFycmF5PFJlYWRvbmx5PHRzLkNvbW1lbnRSYW5nZSZ7dGV4dDogc3RyaW5nfT4+ID0gW107XG4gIGNvbnN0IG5vZGVUZXh0ID0gbm9kZS5nZXRGdWxsVGV4dCgpO1xuICBjb25zdCBjciA9IHRzLmdldExlYWRpbmdDb21tZW50UmFuZ2VzKG5vZGVUZXh0LCAwKTtcbiAgaWYgKGNyKSBhbGxSYW5nZXMucHVzaCguLi5jci5tYXAoYyA9PiAoey4uLmMsIHRleHQ6IG5vZGVUZXh0LnN1YnN0cmluZyhjLnBvcywgYy5lbmQpfSkpKTtcbiAgY29uc3Qgc3ludGhldGljID0gdHMuZ2V0U3ludGhldGljTGVhZGluZ0NvbW1lbnRzKG5vZGUpO1xuICBpZiAoc3ludGhldGljKSBhbGxSYW5nZXMucHVzaCguLi5zeW50aGV0aWMpO1xuICByZXR1cm4gYWxsUmFuZ2VzO1xufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtZXJfdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90cmFuc2Zvcm1lcl91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUVILDJDQUFtQztJQUVuQyxnRUFBZ0U7SUFDaEUseUJBQWdDLFdBQTJCLEVBQUUsSUFBc0I7UUFDakYsT0FBTyxDQUFDLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUZELDBDQUVDO0lBRUQsZ0RBQWdEO0lBQ2hELHVCQUE4QixRQUFnQjtRQUM1QyxPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUZELHNDQUVDO0lBRUQsc0RBQXNEO0lBQ3RELDJCQUFrQyxVQUF5QjtRQUN6RCwrRkFBK0Y7UUFDL0Ysb0ZBQW9GO1FBQ3BGLE9BQU8sWUFBWSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBSkQsOENBSUM7SUFFRCx5REFBeUQ7SUFDekQsMkJBQWtDLElBQW1CO1FBQ25ELElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN6QixPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsT0FBTyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBTEQsOENBS0M7SUFFRDs7T0FFRztJQUNILHNCQUE2QixJQUFpQjtRQUM1Qyw0RUFBNEU7UUFDNUUsSUFBTSxHQUFHLEdBQUcsSUFBYyxDQUFDO1FBQzNCLElBQUksR0FBRyxDQUFDLFVBQVUs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QixDQUFDO0lBVEQsc0RBU0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJy4vdHlwZXNjcmlwdCc7XG5cbi8qKiBAcmV0dXJuIHRydWUgaWYgbm9kZSBoYXMgdGhlIHNwZWNpZmllZCBtb2RpZmllciBmbGFnIHNldC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNNb2RpZmllckZsYWcoZGVjbGFyYXRpb246IHRzLkRlY2xhcmF0aW9uLCBmbGFnOiB0cy5Nb2RpZmllckZsYWdzKTogYm9vbGVhbiB7XG4gIHJldHVybiAodHMuZ2V0Q29tYmluZWRNb2RpZmllckZsYWdzKGRlY2xhcmF0aW9uKSAmIGZsYWcpICE9PSAwO1xufVxuXG4vKiogUmV0dXJucyB0cnVlIGlmIGZpbGVOYW1lIGlzIGEgLmQudHMgZmlsZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0R0c0ZpbGVOYW1lKGZpbGVOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGZpbGVOYW1lLmVuZHNXaXRoKCcuZC50cycpO1xufVxuXG4vKiogUmV0dXJucyB0aGUgc3RyaW5nIGNvbnRlbnRzIG9mIGEgdHMuSWRlbnRpZmllci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJZGVudGlmaWVyVGV4dChpZGVudGlmaWVyOiB0cy5JZGVudGlmaWVyKTogc3RyaW5nIHtcbiAgLy8gTk9URTogJ2VzY2FwZWRUZXh0JyBvbiBhbiBJZGVudGlmaWVyIG1heSBiZSBlc2NhcGVkIGlmIGl0IHN0YXJ0cyB3aXRoICdfXycuIFRoZSBhbHRlcm5hdGl2ZSxcbiAgLy8gZ2V0VGV4dCgpLCBjYW5ub3QgYmUgdXNlZCBvbiBzeW50aGVzaXplZCBub2Rlcywgc28gdW5lc2NhcGUgdGhlIGlkZW50aWZpZXIgYmVsb3cuXG4gIHJldHVybiB1bmVzY2FwZU5hbWUoaWRlbnRpZmllci5lc2NhcGVkVGV4dCk7XG59XG5cbi8qKiBSZXR1cm5zIGEgZG90LWpvaW5lZCBxdWFsaWZpZWQgbmFtZSAoZm9vLmJhci5CYXopLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudGl0eU5hbWVUZXh0KG5hbWU6IHRzLkVudGl0eU5hbWUpOiBzdHJpbmcge1xuICBpZiAodHMuaXNJZGVudGlmaWVyKG5hbWUpKSB7XG4gICAgcmV0dXJuIGdldElkZW50aWZpZXJUZXh0KG5hbWUpO1xuICB9XG4gIHJldHVybiBnZXRFbnRpdHlOYW1lVGV4dChuYW1lLmxlZnQpICsgJy4nICsgZ2V0SWRlbnRpZmllclRleHQobmFtZS5yaWdodCk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gZXNjYXBlZCBUeXBlU2NyaXB0IG5hbWUgaW50byB0aGUgb3JpZ2luYWwgc291cmNlIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmVzY2FwZU5hbWUobmFtZTogdHMuX19TdHJpbmcpOiBzdHJpbmcge1xuICAvLyBTZWUgdGhlIHByaXZhdGUgZnVuY3Rpb24gdW5lc2NhcGVJZGVudGlmaWVyIGluIFR5cGVTY3JpcHQncyB1dGlsaXRpZXMudHMuXG4gIGNvbnN0IHN0ciA9IG5hbWUgYXMgc3RyaW5nO1xuICBpZiAoc3RyLnN0YXJ0c1dpdGgoJ19fXycpKSByZXR1cm4gc3RyLnN1YnN0cmluZygxKTtcbiAgcmV0dXJuIHN0cjtcbn1cblxuLyoqXG4gKiB0cy5jcmVhdGVOb3RFbWl0dGVkU3RhdGVtZW50IHdpbGwgY3JlYXRlIGEgbm9kZSwgYnV0IHRoZSBjb21tZW50cyBjb3ZlcmVkIGJ5IGl0cyB0ZXh0IHJhbmdlIGFyZVxuICogbmV2ZXIgZW1pdHRlZG0gZXhjZXB0IGZvciB2ZXJ5IHNwZWNpZmljIHNwZWNpYWwgY2FzZXMgKC8vLyBjb21tZW50cykuXG4gKlxuICogY3JlYXRlTm90RW1pdHRlZFN0YXRlbWVudFdpdGhDb21tZW50cyBjcmVhdGVzIGEgbm90IGVtaXR0ZWQgc3RhdGVtZW50IGFuZCBhZGRzIGNvbW1lbnQgcmFuZ2VzXG4gKiBmcm9tIHRoZSBvcmlnaW5hbCBzdGF0ZW1lbnQgYXMgc3ludGhldGljIGNvbW1lbnRzIHRvIGl0LCBzbyB0aGF0IHRoZXkgZ2V0IHJldGFpbmVkIGluIHRoZSBvdXRwdXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOb3RFbWl0dGVkU3RhdGVtZW50V2l0aENvbW1lbnRzKFxuICAgIHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUsIG9yaWdpbmFsOiB0cy5Ob2RlKTogdHMuU3RhdGVtZW50IHtcbiAgbGV0IHJlcGxhY2VtZW50ID0gdHMuY3JlYXRlTm90RW1pdHRlZFN0YXRlbWVudChvcmlnaW5hbCk7XG4gIC8vIE5COiBzeW50aGV0aWMgbm9kZXMgY2FuIGhhdmUgcG9zL2VuZCA9PSAtMS4gVGhpcyBpcyBoYW5kbGVkIGJ5IHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uLlxuICBjb25zdCBsZWFkaW5nID0gdHMuZ2V0TGVhZGluZ0NvbW1lbnRSYW5nZXMoc291cmNlRmlsZS50ZXh0LCBvcmlnaW5hbC5wb3MpIHx8IFtdO1xuICBjb25zdCB0cmFpbGluZyA9IHRzLmdldFRyYWlsaW5nQ29tbWVudFJhbmdlcyhzb3VyY2VGaWxlLnRleHQsIG9yaWdpbmFsLmVuZCkgfHwgW107XG4gIHJlcGxhY2VtZW50ID1cbiAgICAgIHRzLnNldFN5bnRoZXRpY0xlYWRpbmdDb21tZW50cyhyZXBsYWNlbWVudCwgc3ludGhlc2l6ZUNvbW1lbnRSYW5nZXMoc291cmNlRmlsZSwgbGVhZGluZykpO1xuICByZXBsYWNlbWVudCA9XG4gICAgICB0cy5zZXRTeW50aGV0aWNUcmFpbGluZ0NvbW1lbnRzKHJlcGxhY2VtZW50LCBzeW50aGVzaXplQ29tbWVudFJhbmdlcyhzb3VyY2VGaWxlLCB0cmFpbGluZykpO1xuICByZXR1cm4gcmVwbGFjZW1lbnQ7XG59XG5cbi8qKlxuICogQ29udmVydHMgYHRzLkNvbW1lbnRSYW5nZWBzIGludG8gYHRzLlN5bnRoZXNpemVkQ29tbWVudGBzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ludGhlc2l6ZUNvbW1lbnRSYW5nZXMoXG4gICAgc291cmNlRmlsZTogdHMuU291cmNlRmlsZSwgcGFyc2VkQ29tbWVudHM6IHRzLkNvbW1lbnRSYW5nZVtdKTogdHMuU3ludGhlc2l6ZWRDb21tZW50W10ge1xuICBjb25zdCBzeW50aGVzaXplZENvbW1lbnRzOiB0cy5TeW50aGVzaXplZENvbW1lbnRbXSA9IFtdO1xuICBwYXJzZWRDb21tZW50cy5mb3JFYWNoKCh7a2luZCwgcG9zLCBlbmQsIGhhc1RyYWlsaW5nTmV3TGluZX0sIGNvbW1lbnRJZHgpID0+IHtcbiAgICBsZXQgY29tbWVudFRleHQgPSBzb3VyY2VGaWxlLnRleHQuc3Vic3RyaW5nKHBvcywgZW5kKS50cmltKCk7XG4gICAgaWYgKGtpbmQgPT09IHRzLlN5bnRheEtpbmQuTXVsdGlMaW5lQ29tbWVudFRyaXZpYSkge1xuICAgICAgY29tbWVudFRleHQgPSBjb21tZW50VGV4dC5yZXBsYWNlKC8oXlxcL1xcKil8KFxcKlxcLyQpL2csICcnKTtcbiAgICB9IGVsc2UgaWYgKGtpbmQgPT09IHRzLlN5bnRheEtpbmQuU2luZ2xlTGluZUNvbW1lbnRUcml2aWEpIHtcbiAgICAgIGlmIChjb21tZW50VGV4dC5zdGFydHNXaXRoKCcvLy8nKSkge1xuICAgICAgICAvLyB0cmlwbGUtc2xhc2ggY29tbWVudHMgYXJlIHR5cGVzY3JpcHQgc3BlY2lmaWMsIGlnbm9yZSB0aGVtIGluIHRoZSBvdXRwdXQuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbW1lbnRUZXh0ID0gY29tbWVudFRleHQucmVwbGFjZSgvKF5cXC9cXC8pL2csICcnKTtcbiAgICB9XG4gICAgc3ludGhlc2l6ZWRDb21tZW50cy5wdXNoKHtraW5kLCB0ZXh0OiBjb21tZW50VGV4dCwgaGFzVHJhaWxpbmdOZXdMaW5lLCBwb3M6IC0xLCBlbmQ6IC0xfSk7XG4gIH0pO1xuICByZXR1cm4gc3ludGhlc2l6ZWRDb21tZW50cztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbm9uIGVtaXR0ZWQgc3RhdGVtZW50IHRoYXQgY2FuIGJlIHVzZWQgdG8gc3RvcmUgc3ludGhlc2l6ZWQgY29tbWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOb3RFbWl0dGVkU3RhdGVtZW50KHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUpOiB0cy5Ob3RFbWl0dGVkU3RhdGVtZW50IHtcbiAgY29uc3Qgc3RtdCA9IHRzLmNyZWF0ZU5vdEVtaXR0ZWRTdGF0ZW1lbnQoc291cmNlRmlsZSk7XG4gIHRzLnNldE9yaWdpbmFsTm9kZShzdG10LCB1bmRlZmluZWQpO1xuICB0cy5zZXRUZXh0UmFuZ2Uoc3RtdCwge3BvczogMCwgZW5kOiAwfSk7XG4gIHRzLnNldEVtaXRGbGFncyhzdG10LCB0cy5FbWl0RmxhZ3MuQ3VzdG9tUHJvbG9ndWUpO1xuICByZXR1cm4gc3RtdDtcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGEgdmVyc2lvbiBvZiBgdHMudmlzaXRFYWNoQ2hpbGRgIHRoYXQgd29ya3MgdGhhdCBjYWxscyBvdXIgdmVyc2lvblxuICogb2YgYHVwZGF0ZVNvdXJjZUZpbGVOb2RlYCwgc28gdGhhdCB0eXBlc2NyaXB0IGRvZXNuJ3QgbG9zZSB0eXBlIGluZm9ybWF0aW9uXG4gKiBmb3IgcHJvcGVydHkgZGVjb3JhdG9ycy5cbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzE3Mzg0XG4gKlxuICogQHBhcmFtIHNmXG4gKiBAcGFyYW0gc3RhdGVtZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmlzaXRFYWNoQ2hpbGQoXG4gICAgbm9kZTogdHMuTm9kZSwgdmlzaXRvcjogdHMuVmlzaXRvciwgY29udGV4dDogdHMuVHJhbnNmb3JtYXRpb25Db250ZXh0KTogdHMuTm9kZSB7XG4gIGlmIChub2RlLmtpbmQgPT09IHRzLlN5bnRheEtpbmQuU291cmNlRmlsZSkge1xuICAgIGNvbnN0IHNmID0gbm9kZSBhcyB0cy5Tb3VyY2VGaWxlO1xuICAgIHJldHVybiB1cGRhdGVTb3VyY2VGaWxlTm9kZShzZiwgdHMudmlzaXRMZXhpY2FsRW52aXJvbm1lbnQoc2Yuc3RhdGVtZW50cywgdmlzaXRvciwgY29udGV4dCkpO1xuICB9XG5cbiAgcmV0dXJuIHRzLnZpc2l0RWFjaENoaWxkKG5vZGUsIHZpc2l0b3IsIGNvbnRleHQpO1xufVxuXG4vKipcbiAqIFRoaXMgaXMgYSB2ZXJzaW9uIG9mIGB0cy51cGRhdGVTb3VyY2VGaWxlTm9kZWAgdGhhdCB3b3Jrc1xuICogd2VsbCB3aXRoIHByb3BlcnR5IGRlY29yYXRvcnMuXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8xNzM4NFxuICogVE9ETygjNjM0KTogVGhpcyBoYXMgYmVlbiBmaXhlZCBpbiBUUyAyLjUuIEludmVzdGlnYXRlIHJlbW92YWwuXG4gKlxuICogQHBhcmFtIHNmXG4gKiBAcGFyYW0gc3RhdGVtZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU291cmNlRmlsZU5vZGUoXG4gICAgc2Y6IHRzLlNvdXJjZUZpbGUsIHN0YXRlbWVudHM6IHRzLk5vZGVBcnJheTx0cy5TdGF0ZW1lbnQ+KTogdHMuU291cmNlRmlsZSB7XG4gIGlmIChzdGF0ZW1lbnRzID09PSBzZi5zdGF0ZW1lbnRzKSB7XG4gICAgcmV0dXJuIHNmO1xuICB9XG4gIC8vIE5vdGU6IE5lZWQgdG8gY2xvbmUgdGhlIG9yaWdpbmFsIGZpbGUgKGFuZCBub3QgdXNlIGB0cy51cGRhdGVTb3VyY2VGaWxlTm9kZWApXG4gIC8vIGFzIG90aGVyd2lzZSBUUyBmYWlscyB3aGVuIHJlc29sdmluZyB0eXBlcyBmb3IgZGVjb3JhdG9ycy5cbiAgc2YgPSB0cy5nZXRNdXRhYmxlQ2xvbmUoc2YpO1xuICBzZi5zdGF0ZW1lbnRzID0gc3RhdGVtZW50cztcbiAgcmV0dXJuIHNmO1xufVxuXG4vLyBDb3BpZWQgZnJvbSBUeXBlU2NyaXB0XG5leHBvcnQgZnVuY3Rpb24gaXNUeXBlTm9kZUtpbmQoa2luZDogdHMuU3ludGF4S2luZCkge1xuICByZXR1cm4gKGtpbmQgPj0gdHMuU3ludGF4S2luZC5GaXJzdFR5cGVOb2RlICYmIGtpbmQgPD0gdHMuU3ludGF4S2luZC5MYXN0VHlwZU5vZGUpIHx8XG4gICAgICBraW5kID09PSB0cy5TeW50YXhLaW5kLkFueUtleXdvcmQgfHwga2luZCA9PT0gdHMuU3ludGF4S2luZC5OdW1iZXJLZXl3b3JkIHx8XG4gICAgICBraW5kID09PSB0cy5TeW50YXhLaW5kLk9iamVjdEtleXdvcmQgfHwga2luZCA9PT0gdHMuU3ludGF4S2luZC5Cb29sZWFuS2V5d29yZCB8fFxuICAgICAga2luZCA9PT0gdHMuU3ludGF4S2luZC5TdHJpbmdLZXl3b3JkIHx8IGtpbmQgPT09IHRzLlN5bnRheEtpbmQuU3ltYm9sS2V5d29yZCB8fFxuICAgICAga2luZCA9PT0gdHMuU3ludGF4S2luZC5UaGlzS2V5d29yZCB8fCBraW5kID09PSB0cy5TeW50YXhLaW5kLlZvaWRLZXl3b3JkIHx8XG4gICAgICBraW5kID09PSB0cy5TeW50YXhLaW5kLlVuZGVmaW5lZEtleXdvcmQgfHwga2luZCA9PT0gdHMuU3ludGF4S2luZC5OdWxsS2V5d29yZCB8fFxuICAgICAga2luZCA9PT0gdHMuU3ludGF4S2luZC5OZXZlcktleXdvcmQgfHwga2luZCA9PT0gdHMuU3ludGF4S2luZC5FeHByZXNzaW9uV2l0aFR5cGVBcmd1bWVudHM7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0cmluZyBsaXRlcmFsIHRoYXQgdXNlcyBzaW5nbGUgcXVvdGVzLiBQdXJlbHkgY29zbWV0aWMsIGJ1dCBpbmNyZWFzZXMgZmlkZWxpdHkgdG8gdGhlXG4gKiBleGlzdGluZyB0ZXN0IHN1aXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2luZ2xlUXVvdGVTdHJpbmdMaXRlcmFsKHRleHQ6IHN0cmluZyk6IHRzLlN0cmluZ0xpdGVyYWwge1xuICBjb25zdCBzdHJpbmdMaXRlcmFsID0gdHMuY3JlYXRlTGl0ZXJhbCh0ZXh0KTtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueSBhY2Nlc3NpbmcgVFMgaW50ZXJuYWwgQVBJLlxuICAoc3RyaW5nTGl0ZXJhbCBhcyBhbnkpLnNpbmdsZVF1b3RlID0gdHJ1ZTtcbiAgcmV0dXJuIHN0cmluZ0xpdGVyYWw7XG59XG5cbi8qKiBDcmVhdGVzIGEgbm90IGVtaXR0ZWQgc3RhdGVtZW50IHdpdGggdGhlIGdpdmVuIHRleHQgYXMgYSBzaW5nbGUgbGluZSBjb21tZW50LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNpbmdsZUxpbmVDb21tZW50KG9yaWdpbmFsOiB0cy5Ob2RlLCB0ZXh0OiBzdHJpbmcpIHtcbiAgY29uc3QgY29tbWVudDogdHMuU3ludGhlc2l6ZWRDb21tZW50ID0ge1xuICAgIGtpbmQ6IHRzLlN5bnRheEtpbmQuU2luZ2xlTGluZUNvbW1lbnRUcml2aWEsXG4gICAgdGV4dDogJyAnICsgdGV4dCxcbiAgICBoYXNUcmFpbGluZ05ld0xpbmU6IHRydWUsXG4gICAgcG9zOiAtMSxcbiAgICBlbmQ6IC0xLFxuICB9O1xuICByZXR1cm4gdHMuc2V0U3ludGhldGljVHJhaWxpbmdDb21tZW50cyh0cy5jcmVhdGVOb3RFbWl0dGVkU3RhdGVtZW50KG9yaWdpbmFsKSwgW2NvbW1lbnRdKTtcbn1cblxuLyoqIENyZWF0ZXMgYSBub3QgZW1pdHRlZCBzdGF0ZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gdGV4dCBhcyBhIHNpbmdsZSBsaW5lIGNvbW1lbnQuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTXVsdGlMaW5lQ29tbWVudChvcmlnaW5hbDogdHMuTm9kZSwgdGV4dDogc3RyaW5nKSB7XG4gIGNvbnN0IGNvbW1lbnQ6IHRzLlN5bnRoZXNpemVkQ29tbWVudCA9IHtcbiAgICBraW5kOiB0cy5TeW50YXhLaW5kLk11bHRpTGluZUNvbW1lbnRUcml2aWEsXG4gICAgdGV4dDogJyAnICsgdGV4dCxcbiAgICBoYXNUcmFpbGluZ05ld0xpbmU6IHRydWUsXG4gICAgcG9zOiAtMSxcbiAgICBlbmQ6IC0xLFxuICB9O1xuICByZXR1cm4gdHMuc2V0U3ludGhldGljVHJhaWxpbmdDb21tZW50cyh0cy5jcmVhdGVOb3RFbWl0dGVkU3RhdGVtZW50KG9yaWdpbmFsKSwgW2NvbW1lbnRdKTtcbn1cblxuLyoqXG4gKiBkZWJ1Z1dhcm4gbG9ncyBhIGRlYnVnIHdhcm5pbmcuXG4gKlxuICogVGhlc2Ugc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgY2FzZXMgd2hlcmUgdHNpY2tsZSBpcyBtYWtpbmcgYSBxdWVzdGlvbmFibGUganVkZ2VtZW50IGFib3V0IHdoYXRcbiAqIHRvIGRvLiBCeSBkZWZhdWx0LCB0c2lja2xlIGRvZXMgbm90IHJlcG9ydCBhbnkgd2FybmluZ3MgdG8gdGhlIGNhbGxlciwgYW5kIHdhcm5pbmdzIGFyZSBoaWRkZW5cbiAqIGJlaGluZCBhIGRlYnVnIGZsYWcsIGFzIHdhcm5pbmdzIGFyZSBvbmx5IGZvciB0c2lja2xlIHRvIGRlYnVnIGl0c2VsZi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcG9ydERlYnVnV2FybmluZyhcbiAgICBob3N0OiB7bG9nV2FybmluZyA/IChkOiB0cy5EaWFnbm9zdGljKSA6IHZvaWR9LCBub2RlOiB0cy5Ob2RlLCBtZXNzYWdlVGV4dDogc3RyaW5nKSB7XG4gIGlmICghaG9zdC5sb2dXYXJuaW5nKSByZXR1cm47XG4gIGhvc3QubG9nV2FybmluZyhjcmVhdGVEaWFnbm9zdGljKFxuICAgICAgbm9kZSwgbWVzc2FnZVRleHQsIC8qIHRleHRSYW5nZSAqLyB1bmRlZmluZWQsIHRzLkRpYWdub3N0aWNDYXRlZ29yeS5XYXJuaW5nKSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbmQgcmVwb3J0cyBhIGRpYWdub3N0aWMgYnkgYWRkaW5nIGl0IHRvIHRoZSBnaXZlbiBhcnJheS5cbiAqXG4gKiBUaGlzIGlzIHVzZWQgZm9yIGVycm9ycyBhbmQgd2FybmluZ3MgaW4gdHNpY2tsZSdzIGlucHV0LiBFbWl0IGVycm9ycyAodGhlIGRlZmF1bHQpIGlmIHRzaWNrbGVcbiAqIGNhbm5vdCBlbWl0IGEgY29ycmVjdCByZXN1bHQgZ2l2ZW4gdGhlIGlucHV0LiBFbWl0IHdhcm5pbmdzIGZvciBxdWVzdGlvbmFibGUgaW5wdXQgaWYgdGhlcmUncyBhXG4gKiBnb29kIGNoYW5jZSB0aGF0IHRoZSBvdXRwdXQgd2lsbCB3b3JrLlxuICpcbiAqIEZvciB0eXBpY2FsIHRzaWNrbGUgdXNlcnMsIGVycm9ycyBhcmUgYWx3YXlzIHJlcG9ydGVkIGFuZCBicmVhayB0aGUgY29tcGlsYXRpb24gb3BlcmF0aW9uLFxuICogd2FybmluZ3Mgd2lsbCBvbmx5IGJlIGVtaXR0ZWQgZm9yIGZpcnN0IHBhcnR5IGNvZGUgKGFuZCBicmVhayB0aGUgY29tcGlsYXRpb24gdGhlcmUpLCBidXQgd2lsIGJlXG4gKiBpZ25vcmVkIGZvciB0aGlyZCBwYXJ0eSBjb2RlLlxuICpcbiAqIEBwYXJhbSB0ZXh0UmFuZ2UgcGFzcyB0byBvdmVycnJpZGUgdGhlIHRleHQgcmFuZ2UgZnJvbSB0aGUgbm9kZSB3aXRoIGEgbW9yZSBzcGVjaWZpYyByYW5nZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcG9ydERpYWdub3N0aWMoXG4gICAgZGlhZ25vc3RpY3M6IHRzLkRpYWdub3N0aWNbXSwgbm9kZTogdHMuTm9kZSwgbWVzc2FnZVRleHQ6IHN0cmluZywgdGV4dFJhbmdlPzogdHMuVGV4dFJhbmdlLFxuICAgIGNhdGVnb3J5ID0gdHMuRGlhZ25vc3RpY0NhdGVnb3J5LkVycm9yKSB7XG4gIGRpYWdub3N0aWNzLnB1c2goY3JlYXRlRGlhZ25vc3RpYyhub2RlLCBtZXNzYWdlVGV4dCwgdGV4dFJhbmdlLCBjYXRlZ29yeSkpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVEaWFnbm9zdGljKFxuICAgIG5vZGU6IHRzLk5vZGUsIG1lc3NhZ2VUZXh0OiBzdHJpbmcsIHRleHRSYW5nZTogdHMuVGV4dFJhbmdlfHVuZGVmaW5lZCxcbiAgICBjYXRlZ29yeTogdHMuRGlhZ25vc3RpY0NhdGVnb3J5KTogdHMuRGlhZ25vc3RpYyB7XG4gIGxldCBzdGFydCwgbGVuZ3RoOiBudW1iZXI7XG4gIGlmICh0ZXh0UmFuZ2UpIHtcbiAgICBzdGFydCA9IHRleHRSYW5nZS5wb3M7XG4gICAgbGVuZ3RoID0gdGV4dFJhbmdlLmVuZCAtIHRleHRSYW5nZS5wb3M7XG4gIH0gZWxzZSB7XG4gICAgLy8gT25seSB1c2UgZ2V0U3RhcnQgaWYgbm9kZSBoYXMgYSB2YWxpZCBwb3MsIGFzIGl0IG1pZ2h0IGJlIHN5bnRoZXNpemVkLlxuICAgIHN0YXJ0ID0gbm9kZS5wb3MgPj0gMCA/IG5vZGUuZ2V0U3RhcnQoKSA6IDA7XG4gICAgbGVuZ3RoID0gbm9kZS5lbmQgLSBub2RlLnBvcztcbiAgfVxuICByZXR1cm4ge1xuICAgIGZpbGU6IG5vZGUuZ2V0U291cmNlRmlsZSgpLFxuICAgIHN0YXJ0LFxuICAgIGxlbmd0aCxcbiAgICBtZXNzYWdlVGV4dCxcbiAgICBjYXRlZ29yeSxcbiAgICBjb2RlOiAwLFxuICB9O1xufVxuXG4vKipcbiAqIEEgcmVwbGFjZW1lbnQgZm9yIHRzLmdldExlYWRpbmdDb21tZW50UmFuZ2VzIHRoYXQgcmV0dXJucyB0aGUgdW5pb24gb2Ygc3ludGhldGljIGFuZFxuICogbm9uLXN5bnRoZXRpYyBjb21tZW50cyBvbiB0aGUgZ2l2ZW4gbm9kZSwgd2l0aCB0aGVpciB0ZXh0IGluY2x1ZGVkLiBUaGUgcmV0dXJuZWQgY29tbWVudHMgbXVzdFxuICogbm90IGJlIG11dGF0ZWQsIGFzIHRoZWlyIGNvbnRlbnQgbWlnaHQgb3IgbWlnaHQgbm90IGJlIHJlZmxlY3RlZCBiYWNrIGludG8gdGhlIEFTVC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbExlYWRpbmdDb21tZW50cyhub2RlOiB0cy5Ob2RlKTpcbiAgICBSZWFkb25seUFycmF5PFJlYWRvbmx5PHRzLkNvbW1lbnRSYW5nZSZ7dGV4dDogc3RyaW5nfT4+IHtcbiAgY29uc3QgYWxsUmFuZ2VzOiBBcnJheTxSZWFkb25seTx0cy5Db21tZW50UmFuZ2Ume3RleHQ6IHN0cmluZ30+PiA9IFtdO1xuICBjb25zdCBub2RlVGV4dCA9IG5vZGUuZ2V0RnVsbFRleHQoKTtcbiAgY29uc3QgY3IgPSB0cy5nZXRMZWFkaW5nQ29tbWVudFJhbmdlcyhub2RlVGV4dCwgMCk7XG4gIGlmIChjcikgYWxsUmFuZ2VzLnB1c2goLi4uY3IubWFwKGMgPT4gKHsuLi5jLCB0ZXh0OiBub2RlVGV4dC5zdWJzdHJpbmcoYy5wb3MsIGMuZW5kKX0pKSk7XG4gIGNvbnN0IHN5bnRoZXRpYyA9IHRzLmdldFN5bnRoZXRpY0xlYWRpbmdDb21tZW50cyhub2RlKTtcbiAgaWYgKHN5bnRoZXRpYykgYWxsUmFuZ2VzLnB1c2goLi4uc3ludGhldGljKTtcbiAgcmV0dXJuIGFsbFJhbmdlcztcbn1cbiJdfQ==

@@ -54,6 +54,11 @@ /**

export interface EmitTransformers {
/** Custom transformers to evaluate before Tsickle .js transformations. */
beforeTsickle?: Array<ts.TransformerFactory<ts.SourceFile>>;
/** Custom transformers to evaluate before built-in .js transformations. */
beforeTs?: Array<ts.TransformerFactory<ts.SourceFile>>;
/** Custom transformers to evaluate after built-in .js transformations. */
afterTs?: Array<ts.TransformerFactory<ts.SourceFile>>;
/** Custom transformers to evaluate after built-in .d.ts transformations. */
afterDeclarations?: Array<ts.TransformerFactory<ts.Bundle | ts.SourceFile>>;
}
export declare function emitWithTsickle(program: ts.Program, host: TsickleHost, tsHost: ts.CompilerHost, tsOptions: ts.CompilerOptions, targetSourceFile?: ts.SourceFile, writeFile?: ts.WriteFileCallback, cancellationToken?: ts.CancellationToken, emitOnlyDtsFiles?: boolean, customTransformers?: EmitTransformers): EmitResult;

@@ -44,3 +44,3 @@ /**

else if (typeof define === "function" && define.amd) {
define("tsickle/src/tsickle", ["require", "exports", "tsickle/src/decorator_downlevel_transformer", "tsickle/src/enum_transformer", "tsickle/src/externs", "tsickle/src/fileoverview_comment_transformer", "tsickle/src/googmodule", "tsickle/src/jsdoc_transformer", "tsickle/src/modules_manifest", "tsickle/src/quoting_transformer", "tsickle/src/transformer_util", "tsickle/src/typescript", "tsickle/src/externs", "tsickle/src/modules_manifest"], factory);
define("tsickle/src/tsickle", ["require", "exports", "tsickle/src/cli_support", "tsickle/src/decorator_downlevel_transformer", "tsickle/src/enum_transformer", "tsickle/src/externs", "tsickle/src/fileoverview_comment_transformer", "tsickle/src/googmodule", "tsickle/src/jsdoc_transformer", "tsickle/src/modules_manifest", "tsickle/src/quoting_transformer", "tsickle/src/transformer_util", "tsickle/src/typescript", "tsickle/src/externs", "tsickle/src/modules_manifest"], factory);
}

@@ -50,2 +50,3 @@ })(function (require, exports) {

Object.defineProperty(exports, "__esModule", { value: true });
var cli_support_1 = require("tsickle/src/cli_support");
var decorator_downlevel_transformer_1 = require("tsickle/src/decorator_downlevel_transformer");

@@ -95,3 +96,16 @@ var enum_transformer_1 = require("tsickle/src/enum_transformer");

if (customTransformers === void 0) { customTransformers = {}; }
var e_2, _a;
var e_2, _a, e_3, _b;
try {
for (var _c = __values(program.getSourceFiles()), _d = _c.next(); !_d.done; _d = _c.next()) {
var sf = _d.value;
cli_support_1.assertAbsolute(sf.fileName);
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
}
finally { if (e_2) throw e_2.error; }
}
var tsickleDiagnostics = [];

@@ -117,3 +131,4 @@ var typeChecker = program.getTypeChecker();

before: __spread((customTransformers.beforeTsickle || []), (tsickleTransformers.before || []).map(function (tf) { return skipTransformForSourceFileIfNeeded(host, tf); }), (customTransformers.beforeTs || [])),
after: __spread((customTransformers.afterTs || []), (tsickleTransformers.after || []).map(function (tf) { return skipTransformForSourceFileIfNeeded(host, tf); }))
after: __spread((customTransformers.afterTs || []), (tsickleTransformers.after || []).map(function (tf) { return skipTransformForSourceFileIfNeeded(host, tf); })),
afterDeclarations: customTransformers.afterDeclarations,
};

@@ -129,2 +144,3 @@ if (host.transformTypesToClosure) {

var writeFileImpl = function (fileName, content, writeByteOrderMark, onError, sourceFiles) {
cli_support_1.assertAbsolute(fileName);
if (host.addDtsClutzAliases && transformer_util_1.isDtsFileName(fileName) && sourceFiles) {

@@ -142,3 +158,3 @@ // Only bundle emits pass more than one source file for .d.ts writes. Bundle emits however

};
var _b = program.emit(targetSourceFile, writeFileImpl, cancellationToken, emitOnlyDtsFiles, tsTransformers), tsDiagnostics = _b.diagnostics, emitSkipped = _b.emitSkipped, emittedFiles = _b.emittedFiles;
var _e = program.emit(targetSourceFile, writeFileImpl, cancellationToken, emitOnlyDtsFiles, tsTransformers), tsDiagnostics = _e.diagnostics, emitSkipped = _e.emitSkipped, emittedFiles = _e.emittedFiles;
var externs = {};

@@ -154,10 +170,5 @@ if (host.transformTypesToClosure) {

}
// fileName might be absolute, which would cause emits different by checkout location or
// non-deterministic output for build systems that use hashed work directories (bazel).
// fileNameToModuleId gives the logical, base path relative ID for the given fileName, which
// avoids this issue.
var moduleId = host.fileNameToModuleId(sourceFile.fileName);
var _c = externs_1.generateExterns(typeChecker, sourceFile, host, /* moduleResolutionHost */ host.host, tsOptions), output = _c.output, diagnostics = _c.diagnostics;
var _f = externs_1.generateExterns(typeChecker, sourceFile, host, /* moduleResolutionHost */ host.host, tsOptions), output = _f.output, diagnostics = _f.diagnostics;
if (output) {
externs[moduleId] = output;
externs[sourceFile.fileName] = output;
}

@@ -169,8 +180,8 @@ if (diagnostics) {

}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
catch (e_3_1) { e_3 = { error: e_3_1 }; }
finally {
try {
if (sourceFiles_1_1 && !sourceFiles_1_1.done && (_a = sourceFiles_1.return)) _a.call(sourceFiles_1);
if (sourceFiles_1_1 && !sourceFiles_1_1.done && (_b = sourceFiles_1.return)) _b.call(sourceFiles_1);
}
finally { if (e_2) throw e_2.error; }
finally { if (e_3) throw e_3.error; }
}

@@ -208,3 +219,3 @@ }

function addClutzAliases(fileName, dtsFileContent, sourceFile, typeChecker, host) {
var e_3, _a;
var e_4, _a;
var moduleSymbol = typeChecker.getSymbolAtLocation(sourceFile);

@@ -261,3 +272,3 @@ var moduleExports = moduleSymbol && typeChecker.getExportsOfModule(moduleSymbol);

}
catch (e_3_1) { e_3 = { error: e_3_1 }; }
catch (e_4_1) { e_4 = { error: e_4_1 }; }
finally {

@@ -267,3 +278,3 @@ try {

}
finally { if (e_3) throw e_3.error; }
finally { if (e_4) throw e_4.error; }
}

@@ -292,2 +303,2 @@ dtsFileContent += 'declare global {\n';

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpY2tsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90c2lja2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBRUgsK0ZBQWdGO0lBQ2hGLGlFQUFtRDtJQUNuRCwrQ0FBMEM7SUFDMUMsaUdBQXVGO0lBQ3ZGLG1EQUEyQztJQUMzQyxtRUFBMEY7SUFDMUYsaUVBQW1EO0lBQ25ELHVFQUF5RDtJQUN6RCxpRUFBaUQ7SUFDakQsMkNBQW1DO0lBQ25DLHVDQUF1QztJQUN2QywrQ0FBOEM7SUFBdEMsd0NBQUEsbUJBQW1CLENBQUE7SUFFM0IsaUVBQTREO0lBQTNDLDZDQUFBLGVBQWUsQ0FBQTtJQThCaEMsMEJBQWlDLFdBQXlCOztRQUN4RCxJQUFNLFdBQVcsR0FBb0IsRUFBRSxDQUFDO1FBQ3hDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFNLFlBQVksR0FBYSxFQUFFLENBQUM7UUFDbEMsSUFBTSxPQUFPLEdBQWlDLEVBQUUsQ0FBQztRQUNqRCxJQUFNLGVBQWUsR0FBRyxJQUFJLGtDQUFlLEVBQUUsQ0FBQzs7WUFDOUMsS0FBaUIsSUFBQSxnQkFBQSxTQUFBLFdBQVcsQ0FBQSx3Q0FBQSxpRUFBRTtnQkFBekIsSUFBTSxFQUFFLHdCQUFBO2dCQUNYLFdBQVcsQ0FBQyxJQUFJLE9BQWhCLFdBQVcsV0FBUyxFQUFFLENBQUMsV0FBVyxHQUFFO2dCQUNwQyxXQUFXLEdBQUcsV0FBVyxJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUM7Z0JBQzVDLFlBQVksQ0FBQyxJQUFJLE9BQWpCLFlBQVksV0FBUyxFQUFFLENBQUMsWUFBWSxHQUFFO2dCQUN0QyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ25DLGVBQWUsQ0FBQyxXQUFXLENBQUMsRUFB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QyxJQUFJLGlCQUFjLENBQUM7b0JBQzlCLGFBQWEsSUFBSSxpQ0FBK0IsZUFBZSxTQUFJLE1BQU0sQ0FBQyxJQUFJLFlBQzFFLE1BQU0sQ0FBQyxJQUFJLGlCQUFjLENBQUM7aUJBQy9CO2FBQ0Y7Ozs7Ozs7OztRQUVELGNBQWMsSUFBSSxvQkFBb0IsQ0FBQztRQUN2QyxjQUFjLElBQUkscUNBQTJCLENBQUM7UUFDOUMsY0FBYyxJQUFJLGFBQWEsQ0FBQztRQUNoQyxjQUFjLElBQUksT0FBTyxDQUFDO1FBQzFCLGNBQWMsSUFBSSxvREFBd0MsZUFBZSxTQUFNLENBQUM7UUFDaEYsY0FBYyxJQUFJLGFBQWEsQ0FBQztRQUNoQyxjQUFjLElBQUksT0FBTyxDQUFDO1FBQzFCLGNBQWMsSUFBSSxLQUFLLENBQUM7UUFFeEIsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVELDRDQUNJLElBQWlCLEVBQ2pCLGVBQXFEO1FBQ3ZELE9BQU8sVUFBQyxPQUFpQztZQUN2QyxJQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUMsT0FBTyxVQUFDLFVBQXlCO2dCQUMvQixJQUFJLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQ3pELE9BQU8sVUFBVSxDQUFDO2lCQUNuQjtnQkFDRCxPQUFPLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5QixDQUFDLENBQUM7UUFDSixDQUFDLENBQUM7SUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge2RlY29yYXRvckRvd25sZXZlbFRyYW5zZm9ybWVyfSBmcm9tICcuL2RlY29yYXRvcl9kb3dubGV2ZWxfdHJhbnNmb3JtZXInO1xuaW1wb3J0IHtlbnVtVHJhbnNmb3JtZXJ9IGZyb20gJy4vZW51bV90cmFuc2Zvcm1lcic7XG5pbXBvcnQge2dlbmVyYXRlRXh0ZXJuc30gZnJvbSAnLi9leHRlcm5zJztcbmltcG9ydCB7dHJhbnNmb3JtRmlsZW92ZXJ2aWV3Q29tbWVudEZhY3Rvcnl9IGZyb20gJy4vZmlsZW92ZXJ2aWV3X2NvbW1lbnRfdHJhbnNmb3JtZXInO1xuaW1wb3J0ICogYXMgZ29vZ21vZHVsZSBmcm9tICcuL2dvb2dtb2R1bGUnO1xuaW1wb3J0IHtBbm5vdGF0b3JIb3N0LCBqc2RvY1RyYW5zZm9ybWVyLCByZW1vdmVUeXBlQXNzZXJ0aW9uc30gZnJvbSAnLi9qc2RvY190cmFuc2Zvcm1lcic7XG5pbXBvcnQge01vZHVsZXNNYW5pZmVzdH0gZnJvbSAnLi9tb2R1bGVzX21hbmlmZXN0JztcbmltcG9ydCB7cXVvdGluZ1RyYW5zZm9ybWVyfSBmcm9tICcuL3F1b3RpbmdfdHJhbnNmb3JtZXInO1xuaW1wb3J0IHtpc0R0c0ZpbGVOYW1lfSBmcm9tICcuL3RyYW5zZm9ybWVyX3V0aWwnO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAnLi90eXBlc2NyaXB0Jztcbi8vIFJldGFpbmVkIGhlcmUgZm9yIEFQSSBjb21wYXRpYmlsaXR5LlxuZXhwb3J0IHtnZXRHZW5lcmF0ZWRFeHRlcm5zfSBmcm9tICcuL2V4dGVybnMnO1xuXG5leHBvcnQge0ZpbGVNYXAsIE1vZHVsZXNNYW5pZmVzdH0gZnJvbSAnLi9tb2R1bGVzX21hbmlmZXN0JztcblxuZXhwb3J0IGludGVyZmFjZSBUc2lja2xlSG9zdCBleHRlbmRzIGdvb2dtb2R1bGUuR29vZ01vZHVsZVByb2Nlc3Nvckhvc3QsIEFubm90YXRvckhvc3Qge1xuICAvKipcbiAgICogV2hldGhlciB0byBkb3dubGV2ZWwgZGVjb3JhdG9yc1xuICAgKi9cbiAgdHJhbnNmb3JtRGVjb3JhdG9ycz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNvbnZlcnMgdHlwZXMgdG8gY2xvc3VyZVxuICAgKi9cbiAgdHJhbnNmb3JtVHlwZXNUb0Nsb3N1cmU/OiBib29sZWFuO1xuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgYWxpYXNlcyB0byB0aGUgLmQudHMgZmlsZXMgdG8gYWRkIHRoZSBleHBvcnRzIHRvIHRoZVxuICAgKiDgsqBf4LKgLmNsdXR6IG5hbWVzcGFjZS5cbiAgICovXG4gIGFkZER0c0NsdXR6QWxpYXNlcz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJZiB0cnVlLCB0c2lja2xlIGFuZCBkZWNvcmF0b3IgZG93bmxldmVsIHByb2Nlc3Npbmcgd2lsbCBiZSBza2lwcGVkIGZvclxuICAgKiB0aGF0IGZpbGUuXG4gICAqL1xuICBzaG91bGRTa2lwVHNpY2tsZVByb2Nlc3NpbmcoZmlsZU5hbWU6IHN0cmluZyk6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUc2lja2xlIHRyZWF0cyB3YXJuaW5ncyBhcyBlcnJvcnMsIGlmIHRydWUsIGlnbm9yZSB3YXJuaW5ncy4gIFRoaXMgbWlnaHQgYmVcbiAgICogdXNlZnVsIGZvciBlLmcuIHRoaXJkIHBhcnR5IGNvZGUuXG4gICAqL1xuICBzaG91bGRJZ25vcmVXYXJuaW5nc0ZvclBhdGgoZmlsZVBhdGg6IHN0cmluZyk6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRvIGNvbnZlcnQgQ29tbW9uSlMgcmVxdWlyZSgpIGltcG9ydHMgdG8gZ29vZy5tb2R1bGUoKSBhbmQgZ29vZy5yZXF1aXJlKCkgY2FsbHMuICovXG4gIGdvb2dtb2R1bGU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUVtaXRSZXN1bHRzKGVtaXRSZXN1bHRzOiBFbWl0UmVzdWx0W10pOiBFbWl0UmVzdWx0IHtcbiAgY29uc3QgZGlhZ25vc3RpY3M6IHRzLkRpYWdub3N0aWNbXSA9IFtdO1xuICBsZXQgZW1pdFNraXBwZWQgPSB0cnVlO1xuICBjb25zdCBlbWl0dGVkRmlsZXM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGV4dGVybnM6IHtbZmlsZU5hbWU6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcbiAgY29uc3QgbW9kdWxlc01hbmlmZXN0ID0gbmV3IE1vZHVsZXNNYW5pZmVzdCgpO1xuICBmb3IgKGNvbnN0IGVyIG9mIGVtaXRSZXN1bHRzKSB7XG4gICAgZGlhZ25vc3RpY3MucHVzaCguLi5lci5kaWFnbm9zdGljcyk7XG4gICAgZW1pdFNraXBwZWQgPSBlbWl0U2tpcHBlZCB8fCBlci5lbWl0U2tpcHBlZDtcbiAgICBlbWl0dGVkRmlsZXMucHVzaCguLi5lci5lbWl0dGVkRmlsZXMpO1xuICAgIE9iamVjdC5hc3NpZ24oZXh0ZXJucywgZXIuZXh0ZXJucyk7XG4gICAgbW9kdWxlc01hbmlmZXN0LmFkZE1hbmlmZXN0KGVyLm1vZHVsZXNNYW5pZmVzdCk7XG4gIH1cbiAgcmV0dXJuIHtkaWFnbm9zdGljcywgZW1pdFNraXBwZWQsIGVtaXR0ZWRGaWxlcywgZXh0ZXJucywgbW9kdWxlc01hbmlmZXN0fTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbWl0UmVzdWx0IGV4dGVuZHMgdHMuRW1pdFJlc3VsdCB7XG4gIC8vIFRoZSBtYW5pZmVzdCBvZiBKUyBtb2R1bGVzIG91dHB1dCBieSB0aGUgY29tcGlsZXIuXG4gIG1vZHVsZXNNYW5pZmVzdDogTW9kdWxlc01hbmlmZXN0O1xuICAvKipcbiAgICogZXh0ZXJucy5qcyBmaWxlcyBwcm9kdWNlZCBieSB0c2lja2xlLCBpZiBhbnkuIG1vZHVsZSBJRHMgYXJlIHJlbGF0aXZlIHBhdGhzIGZyb21cbiAgICogZmlsZU5hbWVUb01vZHVsZUlkLlxuICAgKi9cbiAgZXh0ZXJuczoge1ttb2R1bGVJZDogc3RyaW5nXTogc3RyaW5nfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbWl0VHJhbnNmb3JtZXJzIHtcbiAgYmVmb3JlVHNpY2tsZT86IEFycmF5PHRzLlRyYW5zZm9ybWVyRmFjdG9yeTx0cy5Tb3VyY2VGaWxlPj47XG4gIGJlZm9yZVRzPzogQXJyYXk8dHMuVHJhbnNmb3JtZXJGYWN0b3J5PHRzLlNvdXJjZUZpbGU+PjtcbiAgYWZ0ZXJUcz86IEFycmF5PHRzLlRyYW5zZm9ybWVyRmFjdG9yeTx0cy5Tb3VyY2VGaWxlPj47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbWl0V2l0aFRzaWNrbGUoXG4gICAgcHJvZ3JhbTogdHMuUHJvZ3JhbSwgaG9zdDogVHNpY2tsZUhvc3QsIHRzSG9zdDogdHMuQ29tcGlsZXJIb3N0LCB0c09wdGlvbnM6IHRzLkNvbXBpbGVyT3B0aW9ucyxcbiAgICB0YXJnZXRTb3VyY2VGaWxlPzogdHMuU291cmNlRmlsZSwgd3JpdGVGaWxlPzogdHMuV3JpdGVGaWxlQ2FsbGJhY2ssXG4gICAgY2FuY2VsbGF0aW9uVG9rZW4/OiB0cy5DYW5jZWxsYXRpb25Ub2tlbiwgZW1pdE9ubHlEdHNGaWxlcz86IGJvb2xlYW4sXG4gICAgY3VzdG9tVHJhbnNmb3JtZXJzOiBFbWl0VHJhbnNmb3JtZXJzID0ge30pOiBFbWl0UmVzdWx0IHtcbiAgbGV0IHRzaWNrbGVEaWFnbm9zdGljczogdHMuRGlhZ25vc3RpY1tdID0gW107XG4gIGNvbnN0IHR5cGVDaGVja2VyID0gcHJvZ3JhbS5nZXRUeXBlQ2hlY2tlcigpO1xuICBjb25zdCB0c2lja2xlU291cmNlVHJhbnNmb3JtZXJzOiBBcnJheTx0cy5UcmFuc2Zvcm1lckZhY3Rvcnk8dHMuU291cmNlRmlsZT4+ID0gW107XG4gIGlmIChob3N0LnRyYW5zZm9ybVR5cGVzVG9DbG9zdXJlKSB7XG4gICAgLy8gT25seSBhZGQgQHN1cHByZXNzIHtjaGVja1R5cGVzfSBjb21tZW50cyB3aGVuIGFsc28gYWRkaW5nIHR5cGUgYW5ub3RhdGlvbnMuXG4gICAgdHNpY2tsZVNvdXJjZVRyYW5zZm9ybWVycy5wdXNoKHRyYW5zZm9ybUZpbGVvdmVydmlld0NvbW1lbnRGYWN0b3J5KHRzaWNrbGVEaWFnbm9zdGljcykpO1xuICAgIHRzaWNrbGVTb3VyY2VUcmFuc2Zvcm1lcnMucHVzaChcbiAgICAgICAganNkb2NUcmFuc2Zvcm1lcihob3N0LCB0c09wdGlvbnMsIHRzSG9zdCwgdHlwZUNoZWNrZXIsIHRzaWNrbGVEaWFnbm9zdGljcykpO1xuICAgIGlmIChob3N0LmVuYWJsZUF1dG9RdW90aW5nKSB7XG4gICAgICB0c2lja2xlU291cmNlVHJhbnNmb3JtZXJzLnB1c2gocXVvdGluZ1RyYW5zZm9ybWVyKGhvc3QsIHR5cGVDaGVja2VyLCB0c2lja2xlRGlhZ25vc3RpY3MpKTtcbiAgICB9XG4gICAgdHNpY2tsZVNvdXJjZVRyYW5zZm9ybWVycy5wdXNoKGVudW1UcmFuc2Zvcm1lcih0eXBlQ2hlY2tlciwgdHNpY2tsZURpYWdub3N0aWNzKSk7XG4gICAgdHNpY2tsZVNvdXJjZVRyYW5zZm9ybWVycy5wdXNoKGRlY29yYXRvckRvd25sZXZlbFRyYW5zZm9ybWVyKHR5cGVDaGVja2VyLCB0c2lja2xlRGlhZ25vc3RpY3MpKTtcbiAgfSBlbHNlIGlmIChob3N0LnRyYW5zZm9ybURlY29yYXRvcnMpIHtcbiAgICB0c2lja2xlU291cmNlVHJhbnNmb3JtZXJzLnB1c2goZGVjb3JhdG9yRG93bmxldmVsVHJhbnNmb3JtZXIodHlwZUNoZWNrZXIsIHRzaWNrbGVEaWFnbm9zdGljcykpO1xuICB9XG4gIGNvbnN0IG1vZHVsZXNNYW5pZmVzdCA9IG5ldyBNb2R1bGVzTWFuaWZlc3QoKTtcbiAgY29uc3QgdHNpY2tsZVRyYW5zZm9ybWVyczogdHMuQ3VzdG9tVHJhbnNmb3JtZXJzID0ge2JlZm9yZTogdHNpY2tsZVNvdXJjZVRyYW5zZm9ybWVyc307XG4gIGNvbnN0IHRzVHJhbnNmb3JtZXJzOiB0cy5DdXN0b21UcmFuc2Zvcm1lcnMgPSB7XG4gICAgYmVmb3JlOiBbXG4gICAgICAuLi4oY3VzdG9tVHJhbnNmb3JtZXJzLmJlZm9yZVRzaWNrbGUgfHwgW10pLFxuICAgICAgLi4uKHRzaWNrbGVUcmFuc2Zvcm1lcnMuYmVmb3JlIHx8IFtdKS5tYXAodGYgPT4gc2tpcFRyYW5zZm9ybUZvclNvdXJjZUZpbGVJZk5lZWRlZChob3N0LCB0ZikpLFxuICAgICAgLi4uKGN1c3RvbVRyYW5zZm9ybWVycy5iZWZvcmVUcyB8fCBbXSksXG4gICAgXSxcbiAgICBhZnRlcjogW1xuICAgICAgLi4uKGN1c3RvbVRyYW5zZm9ybWVycy5hZnRlclRzIHx8IFtdKSxcbiAgICAgIC4uLih0c2lja2xlVHJhbnNmb3JtZXJzLmFmdGVyIHx8IFtdKS5tYXAodGYgPT4gc2tpcFRyYW5zZm9ybUZvclNvdXJjZUZpbGVJZk5lZWRlZChob3N0LCB0ZikpLFxuICAgIF1cbiAgfTtcbiAgaWYgKGhvc3QudHJhbnNmb3JtVHlwZXNUb0Nsb3N1cmUpIHtcbiAgICAvLyBTZWUgY29tbWVudCBvbiByZW1vdGVUeXBlQXNzZXJ0aW9ucy5cbiAgICB0c1RyYW5zZm9ybWVycy5iZWZvcmUhLnB1c2gocmVtb3ZlVHlwZUFzc2VydGlvbnMoKSk7XG4gIH1cbiAgaWYgKGhvc3QuZ29vZ21vZHVsZSkge1xuICAgIHRzVHJhbnNmb3JtZXJzLmFmdGVyIS5wdXNoKGdvb2dtb2R1bGUuY29tbW9uSnNUb0dvb2dtb2R1bGVUcmFuc2Zvcm1lcihcbiAgICAgICAgaG9zdCwgbW9kdWxlc01hbmlmZXN0LCB0eXBlQ2hlY2tlciwgdHNpY2tsZURpYWdub3N0aWNzKSk7XG4gIH1cblxuICBjb25zdCB3cml0ZUZpbGVEZWxlZ2F0ZTogdHMuV3JpdGVGaWxlQ2FsbGJhY2sgPSB3cml0ZUZpbGUgfHwgdHNIb3N0LndyaXRlRmlsZS5iaW5kKHRzSG9zdCk7XG4gIGNvbnN0IHdyaXRlRmlsZUltcGwgPVxuICAgICAgKGZpbGVOYW1lOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZywgd3JpdGVCeXRlT3JkZXJNYXJrOiBib29sZWFuLFxuICAgICAgIG9uRXJyb3I6ICgobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkKXx1bmRlZmluZWQsXG4gICAgICAgc291cmNlRmlsZXM6IFJlYWRvbmx5QXJyYXk8dHMuU291cmNlRmlsZT4pID0+IHtcbiAgICAgICAgaWYgKGhvc3QuYWRkRHRzQ2x1dHpBbGlhc2VzICYmIGlzRHRzRmlsZU5hbWUoZmlsZU5hbWUpICYmIHNvdXJjZUZpbGVzKSB7XG4gICAgICAgICAgLy8gT25seSBidW5kbGUgZW1pdHMgcGFzcyBtb3JlIHRoYW4gb25lIHNvdXJjZSBmaWxlIGZvciAuZC50cyB3cml0ZXMuIEJ1bmRsZSBlbWl0cyBob3dldmVyXG4gICAgICAgICAgLy8gYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdHNpY2tsZSwgYXMgd2UgY2Fubm90IGFubm90YXRlIHRoZW0gZm9yIENsb3N1cmUgaW4gYW55IG1lYW5pbmdmdWxcbiAgICAgICAgICAvLyB3YXkgYW55d2F5LlxuICAgICAgICAgIGlmICghc291cmNlRmlsZXMgfHwgc291cmNlRmlsZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCBleGFjdGx5IG9uZSBzb3VyY2UgZmlsZSBmb3IgLmQudHMgZW1pdCwgZ290ICR7XG4gICAgICAgICAgICAgICAgc291cmNlRmlsZXMubWFwKHNmID0+IHNmLmZpbGVOYW1lKX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgb3JpZ2luYWxTb3VyY2UgPSBzb3VyY2VGaWxlc1swXTtcbiAgICAgICAgICBjb250ZW50ID0gYWRkQ2x1dHpBbGlhc2VzKGZpbGVOYW1lLCBjb250ZW50LCBvcmlnaW5hbFNvdXJjZSwgdHlwZUNoZWNrZXIsIGhvc3QpO1xuICAgICAgICB9XG4gICAgICAgIHdyaXRlRmlsZURlbGVnYXRlKGZpbGVOYW1lLCBjb250ZW50LCB3cml0ZUJ5dGVPcmRlck1hcmssIG9uRXJyb3IsIHNvdXJjZUZpbGVzKTtcbiAgICAgIH07XG5cbiAgY29uc3Qge2RpYWdub3N0aWNzOiB0c0RpYWdub3N0aWNzLCBlbWl0U2tpcHBlZCwgZW1pdHRlZEZpbGVzfSA9IHByb2dyYW0uZW1pdChcbiAgICAgIHRhcmdldFNvdXJjZUZpbGUsIHdyaXRlRmlsZUltcGwsIGNhbmNlbGxhdGlvblRva2VuLCBlbWl0T25seUR0c0ZpbGVzLCB0c1RyYW5zZm9ybWVycyk7XG5cbiAgY29uc3QgZXh0ZXJuczoge1tmaWxlTmFtZTogc3RyaW5nXTogc3RyaW5nfSA9IHt9O1xuICBpZiAoaG9zdC50cmFuc2Zvcm1UeXBlc1RvQ2xvc3VyZSkge1xuICAgIGNvbnN0IHNvdXJjZUZpbGVzID0gdGFyZ2V0U291cmNlRmlsZSA/IFt0YXJnZXRTb3VyY2VGaWxlXSA6IHByb2dyYW0uZ2V0U291cmNlRmlsZXMoKTtcbiAgICBmb3IgKGNvbnN0IHNvdXJjZUZpbGUgb2Ygc291cmNlRmlsZXMpIHtcbiAgICAgIGNvbnN0IGlzRHRzID0gaXNEdHNGaWxlTmFtZShzb3VyY2VGaWxlLmZpbGVOYW1lKTtcbiAgICAgIGlmIChpc0R0cyAmJiBob3N0LnNob3VsZFNraXBUc2lja2xlUHJvY2Vzc2luZyhzb3VyY2VGaWxlLmZpbGVOYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8vIGZpbGVOYW1lIG1pZ2h0IGJlIGFic29sdXRlLCB3aGljaCB3b3VsZCBjYXVzZSBlbWl0cyBkaWZmZXJlbnQgYnkgY2hlY2tvdXQgbG9jYXRpb24gb3JcbiAgICAgIC8vIG5vbi1kZXRlcm1pbmlzdGljIG91dHB1dCBmb3IgYnVpbGQgc3lzdGVtcyB0aGF0IHVzZSBoYXNoZWQgd29yayBkaXJlY3RvcmllcyAoYmF6ZWwpLlxuICAgICAgLy8gZmlsZU5hbWVUb01vZHVsZUlkIGdpdmVzIHRoZSBsb2dpY2FsLCBiYXNlIHBhdGggcmVsYXRpdmUgSUQgZm9yIHRoZSBnaXZlbiBmaWxlTmFtZSwgd2hpY2hcbiAgICAgIC8vIGF2b2lkcyB0aGlzIGlzc3VlLlxuICAgICAgY29uc3QgbW9kdWxlSWQgPSBob3N0LmZpbGVOYW1lVG9Nb2R1bGVJZChzb3VyY2VGaWxlLmZpbGVOYW1lKTtcbiAgICAgIGNvbnN0IHtvdXRwdXQsIGRpYWdub3N0aWNzfSA9IGdlbmVyYXRlRXh0ZXJucyhcbiAgICAgICAgICB0eXBlQ2hlY2tlciwgc291cmNlRmlsZSwgaG9zdCwgLyogbW9kdWxlUmVzb2x1dGlvbkhvc3QgKi8gaG9zdC5ob3N0LCB0c09wdGlvbnMpO1xuICAgICAgaWYgKG91dHB1dCkge1xuICAgICAgICBleHRlcm5zW21vZHVsZUlkXSA9IG91dHB1dDtcbiAgICAgIH1cbiAgICAgIGlmIChkaWFnbm9zdGljcykge1xuICAgICAgICB0c2lja2xlRGlhZ25vc3RpY3MucHVzaCguLi5kaWFnbm9zdGljcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIEFsbCBkaWFnbm9zdGljcyAoaW5jbHVkaW5nIHdhcm5pbmdzKSBhcmUgdHJlYXRlZCBhcyBlcnJvcnMuXG4gIC8vIElmIHRoZSBob3N0IGRlY2lkZXMgdG8gaWdub3JlIHdhcm5pbmdzLCBqdXN0IGRpc2NhcmQgdGhlbS5cbiAgLy8gV2FybmluZ3MgaW5jbHVkZSBzdHVmZiBsaWtlIFwiZG9uJ3QgdXNlIEB0eXBlIGluIHlvdXIganNkb2NcIjsgdHNpY2tsZVxuICAvLyB3YXJucyBhbmQgdGhlbiBmaXhlcyB1cCB0aGUgY29kZSB0byBiZSBDbG9zdXJlLWNvbXBhdGlibGUgYW55d2F5LlxuICB0c2lja2xlRGlhZ25vc3RpY3MgPSB0c2lja2xlRGlhZ25vc3RpY3MuZmlsdGVyKFxuICAgICAgZCA9PiBkLmNhdGVnb3J5ID09PSB0cy5EaWFnbm9zdGljQ2F0ZWdvcnkuRXJyb3IgfHxcbiAgICAgICAgICAhaG9zdC5zaG91bGRJZ25vcmVXYXJuaW5nc0ZvclBhdGgoZC5maWxlIS5maWxlTmFtZSkpO1xuXG4gIHJldHVybiB7XG4gICAgbW9kdWxlc01hbmlmZXN0LFxuICAgIGVtaXRTa2lwcGVkLFxuICAgIGVtaXR0ZWRGaWxlczogZW1pdHRlZEZpbGVzIHx8IFtdLFxuICAgIGRpYWdub3N0aWNzOiBbLi4udHNEaWFnbm9zdGljcywgLi4udHNpY2tsZURpYWdub3N0aWNzXSxcbiAgICBleHRlcm5zXG4gIH07XG59XG5cbi8qKiBDb21wYXJlcyB0d28gc3RyaW5ncyBhbmQgcmV0dXJucyBhIG51bWJlciBzdWl0YWJsZSBmb3IgdXNlIGluIHNvcnQoKS4gKi9cbmZ1bmN0aW9uIHN0cmluZ0NvbXBhcmUoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBudW1iZXIge1xuICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgaWYgKGEgPiBiKSByZXR1cm4gMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8qKlxuICogQSB0c2lja2xlIHByb2R1Y2VkIGRlY2xhcmF0aW9uIGZpbGUgbWlnaHQgYmUgY29uc3VtZWQgYmUgcmVmZXJlbmNlZCBieSBDbHV0elxuICogcHJvZHVjZWQgLmQudHMgZmlsZXMsIHdoaWNoIHVzZSBzeW1ib2wgbmFtZXMgYmFzZWQgb24gQ2xvc3VyZSdzIGludGVybmFsXG4gKiBuYW1pbmcgY29udmVudGlvbnMsIHNvIHdlIG5lZWQgdG8gcHJvdmlkZSBhbGlhc2VzIGZvciBhbGwgdGhlIGV4cG9ydGVkIHN5bWJvbHNcbiAqIGluIHRoZSBDbHV0eiBuYW1pbmcgY29udmVudGlvbi5cbiAqL1xuZnVuY3Rpb24gYWRkQ2x1dHpBbGlhc2VzKFxuICAgIGZpbGVOYW1lOiBzdHJpbmcsIGR0c0ZpbGVDb250ZW50OiBzdHJpbmcsIHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUsXG4gICAgdHlwZUNoZWNrZXI6IHRzLlR5cGVDaGVja2VyLCBob3N0OiBUc2lja2xlSG9zdCk6IHN0cmluZyB7XG4gIGNvbnN0IG1vZHVsZVN5bWJvbCA9IHR5cGVDaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24oc291cmNlRmlsZSk7XG4gIGNvbnN0IG1vZHVsZUV4cG9ydHMgPSBtb2R1bGVTeW1ib2wgJiYgdHlwZUNoZWNrZXIuZ2V0RXhwb3J0c09mTW9kdWxlKG1vZHVsZVN5bWJvbCk7XG4gIGlmICghbW9kdWxlRXhwb3J0cykgcmV0dXJuIGR0c0ZpbGVDb250ZW50O1xuXG4gIC8vIC5kLnRzIGZpbGVzIGNhbiBiZSB0cmFuc2Zvcm1lZCwgdG9vLCBzbyB3ZSBuZWVkIHRvIGNvbXBhcmUgdGhlIG9yaWdpbmFsIG5vZGUgYmVsb3cuXG4gIGNvbnN0IG9yaWdTb3VyY2VGaWxlID0gdHMuZ2V0T3JpZ2luYWxOb2RlKHNvdXJjZUZpbGUpO1xuICAvLyBUaGUgbW9kdWxlIGV4cG9ydHMgbWlnaHQgYmUgcmUtZXhwb3J0cywgYW5kIGluIHRoZSBjYXNlIG9mIFwiZXhwb3J0ICpcIiBtaWdodCBub3QgZXZlbiBiZVxuICAvLyBhdmFpbGFibGUgaW4gdGhlIG1vZHVsZSBzY29wZSwgd2hpY2ggbWFrZXMgdGhlbSBkaWZmaWN1bHQgdG8gZXhwb3J0LiBBdm9pZCB0aGUgcHJvYmxlbSBieVxuICAvLyBmaWx0ZXJpbmcgb3V0IHN5bWJvbHMgd2hvIGRvIG5vdCBoYXZlIGEgZGVjbGFyYXRpb24gaW4gdGhlIGxvY2FsIG1vZHVsZS5cbiAgY29uc3QgbG9jYWxFeHBvcnRzID0gbW9kdWxlRXhwb3J0cy5maWx0ZXIoZSA9PiB7XG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIGRlY2xhcmF0aW9ucywgYmUgY29uc2VydmF0aXZlIGFuZCBlbWl0IHRoZSBhbGlhc2VzLlxuICAgIGlmICghZS5kZWNsYXJhdGlvbnMpIHJldHVybiB0cnVlO1xuICAgIC8vIFNraXAgZGVmYXVsdCBleHBvcnRzLCB0aGV5IGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZC5cbiAgICAvLyBkZWZhdWx0IGlzIGEga2V5d29yZCBpbiB0eXBlc2NyaXB0LCBzbyB0aGUgbmFtZSBvZiB0aGUgZXhwb3J0IGJlaW5nIGRlZmF1bHQgbWVhbnMgdGhhdCBpdCdzIGFcbiAgICAvLyBkZWZhdWx0IGV4cG9ydC5cbiAgICBpZiAoZS5uYW1lID09PSAnZGVmYXVsdCcpIHJldHVybiBmYWxzZTtcbiAgICAvLyBPdGhlcndpc2UgY2hlY2sgdGhhdCBzb21lIGRlY2xhcmF0aW9uIGlzIGZyb20gdGhlIGxvY2FsIG1vZHVsZS5cbiAgICByZXR1cm4gZS5kZWNsYXJhdGlvbnMuc29tZShkID0+IGQuZ2V0U291cmNlRmlsZSgpID09PSBvcmlnU291cmNlRmlsZSk7XG4gIH0pO1xuICBpZiAoIWxvY2FsRXhwb3J0cy5sZW5ndGgpIHJldHVybiBkdHNGaWxlQ29udGVudDtcblxuICAvLyBUeXBlU2NyaXB0IDIuOCBhbmQgVHlwZVNjcmlwdCAyLjkgZGlmZmVyIG9uIHRoZSBvcmRlciBpbiB3aGljaCB0aGVcbiAgLy8gbW9kdWxlIHN5bWJvbHMgY29tZSBvdXQsIHNvIHNvcnQgaGVyZSB0byBtYWtlIHRoZSB0ZXN0cyBzdGFibGUuXG4gIGxvY2FsRXhwb3J0cy5zb3J0KChhLCBiKSA9PiBzdHJpbmdDb21wYXJlKGEubmFtZSwgYi5uYW1lKSk7XG5cbiAgY29uc3QgbW9kdWxlTmFtZSA9IGhvc3QucGF0aFRvTW9kdWxlTmFtZSgnJywgc291cmNlRmlsZS5maWxlTmFtZSk7XG4gIGNvbnN0IGNsdXR6TW9kdWxlTmFtZSA9IG1vZHVsZU5hbWUucmVwbGFjZSgvXFwuL2csICckJyk7XG5cbiAgLy8gQ2x1dHogbWlnaHQgcmVmZXIgdG8gdGhlIG5hbWUgaW4gdHdvIGRpZmZlcmVudCBmb3JtcyAoc3RlbW1pbmcgZnJvbSBnb29nLnByb3ZpZGUgYW5kXG4gIC8vIGdvb2cubW9kdWxlIHJlc3BlY3RpdmVseSkuXG4gIC8vIDEpIGdsb2JhbCBpbiBjbHV0ejogICDgsqBf4LKgLmNsdXR6Lm1vZHVsZSRjb250ZW50cyRwYXRoJHRvJG1vZHVsZV9TeW1ib2wuLi5cbiAgLy8gMikgbG9jYWwgaW4gYSBtb2R1bGU6IOCyoF/gsqAuY2x1dHoubW9kdWxlJGV4cG9ydHMkcGF0aCR0byRtb2R1bGUuU3ltYm9sIC4uXG4gIC8vIFNlZSBleGFtcGxlcyBhdDpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY2x1dHovdHJlZS9tYXN0ZXIvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL2phdmFzY3JpcHQvY2x1dHpcblxuICAvLyBDYXNlICgxKSBmcm9tIGFib3ZlLlxuICBsZXQgZ2xvYmFsU3ltYm9scyA9ICcnO1xuICAvLyBDYXNlICgyKSBmcm9tIGFib3ZlLlxuICBsZXQgbmVzdGVkU3ltYm9scyA9ICcnO1xuICBmb3IgKGNvbnN0IHN5bWJvbCBvZiBsb2NhbEV4cG9ydHMpIHtcbiAgICBnbG9iYWxTeW1ib2xzICs9XG4gICAgICAgIGBcXHRcXHRleHBvcnQgeyR7c3ltYm9sLm5hbWV9IGFzIG1vZHVsZSRjb250ZW50cyQke2NsdXR6TW9kdWxlTmFtZX1fJHtzeW1ib2wubmFtZX19XFxuYDtcbiAgICBuZXN0ZWRTeW1ib2xzICs9XG4gICAgICAgIGBcXHRcXHRleHBvcnQge21vZHVsZSRjb250ZW50cyQke2NsdXR6TW9kdWxlTmFtZX1fJHtzeW1ib2wubmFtZX0gYXMgJHtzeW1ib2wubmFtZX19XFxuYDtcbiAgICBpZiAoc3ltYm9sLmZsYWdzICYgdHMuU3ltYm9sRmxhZ3MuQ2xhc3MpIHtcbiAgICAgIGdsb2JhbFN5bWJvbHMgKz0gYFxcdFxcdGV4cG9ydCB7JHtzeW1ib2wubmFtZX0gYXMgbW9kdWxlJGNvbnRlbnRzJCR7Y2x1dHpNb2R1bGVOYW1lfV8ke1xuICAgICAgICAgIHN5bWJvbC5uYW1lfV9JbnN0YW5jZX1cXG5gO1xuICAgICAgbmVzdGVkU3ltYm9scyArPSBgXFx0XFx0ZXhwb3J0IHttb2R1bGUkY29udGVudHMkJHtjbHV0ek1vZHVsZU5hbWV9XyR7c3ltYm9sLm5hbWV9IGFzICR7XG4gICAgICAgICAgc3ltYm9sLm5hbWV9X0luc3RhbmNlfVxcbmA7XG4gICAgfVxuICB9XG5cbiAgZHRzRmlsZUNvbnRlbnQgKz0gJ2RlY2xhcmUgZ2xvYmFsIHtcXG4nO1xuICBkdHNGaWxlQ29udGVudCArPSBgXFx0bmFtZXNwYWNlIOCyoF/gsqAuY2x1dHoge1xcbmA7XG4gIGR0c0ZpbGVDb250ZW50ICs9IGdsb2JhbFN5bWJvbHM7XG4gIGR0c0ZpbGVDb250ZW50ICs9IGBcXHR9XFxuYDtcbiAgZHRzRmlsZUNvbnRlbnQgKz0gYFxcdG5hbWVzcGFjZSDgsqBf4LKgLmNsdXR6Lm1vZHVsZSRleHBvcnRzJCR7Y2x1dHpNb2R1bGVOYW1lfSB7XFxuYDtcbiAgZHRzRmlsZUNvbnRlbnQgKz0gbmVzdGVkU3ltYm9scztcbiAgZHRzRmlsZUNvbnRlbnQgKz0gYFxcdH1cXG5gO1xuICBkdHNGaWxlQ29udGVudCArPSAnfVxcbic7XG5cbiAgcmV0dXJuIGR0c0ZpbGVDb250ZW50O1xufVxuXG5mdW5jdGlvbiBza2lwVHJhbnNmb3JtRm9yU291cmNlRmlsZUlmTmVlZGVkKFxuICAgIGhvc3Q6IFRzaWNrbGVIb3N0LFxuICAgIGRlbGVnYXRlRmFjdG9yeTogdHMuVHJhbnNmb3JtZXJGYWN0b3J5PHRzLlNvdXJjZUZpbGU+KTogdHMuVHJhbnNmb3JtZXJGYWN0b3J5PHRzLlNvdXJjZUZpbGU+IHtcbiAgcmV0dXJuIChjb250ZXh0OiB0cy5UcmFuc2Zvcm1hdGlvbkNvbnRleHQpID0+IHtcbiAgICBjb25zdCBkZWxlZ2F0ZSA9IGRlbGVnYXRlRmFjdG9yeShjb250ZXh0KTtcbiAgICByZXR1cm4gKHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUpID0+IHtcbiAgICAgIGlmIChob3N0LnNob3VsZFNraXBUc2lja2xlUHJvY2Vzc2luZyhzb3VyY2VGaWxlLmZpbGVOYW1lKSkge1xuICAgICAgICByZXR1cm4gc291cmNlRmlsZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWxlZ2F0ZShzb3VyY2VGaWxlKTtcbiAgICB9O1xuICB9O1xufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpY2tsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90c2lja2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBSUgsdURBQTZDO0lBQzdDLCtGQUFnRjtJQUNoRixpRUFBbUQ7SUFDbkQsK0NBQTBDO0lBQzFDLGlHQUF1RjtJQUN2RixtREFBMkM7SUFDM0MsbUVBQTBGO0lBQzFGLGlFQUFtRDtJQUNuRCx1RUFBeUQ7SUFDekQsaUVBQWlEO0lBQ2pELDJDQUFtQztJQUVuQyx1Q0FBdUM7SUFDdkMsK0NBQThDO0lBQXRDLHdDQUFBLG1CQUFtQixDQUFBO0lBQzNCLGlFQUE0RDtJQUEzQyw2Q0FBQSxlQUFlLENBQUE7SUE4QmhDLDBCQUFpQyxXQUF5Qjs7UUFDeEQsSUFBTSxXQUFXLEdBQW9CLEVBQUUsQ0FBQztRQUN4QyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBTSxZQUFZLEdBQWEsRUFBRSxDQUFDO1FBQ2xDLElBQU0sT0FBTyxHQUFpQyxFQUFFLENBQUM7UUFDakQsSUFBTSxlQUFlLEdBQUcsSUFBSSxrQ0FBZSxFQUFFLENBQUM7O1lBQzlDLEtBQWlCLElBQUEsZ0JBQUEsU0FBQSxXQUFXLENBQUEsd0NBQUEsaUVBQUU7Z0JBQXpCLElBQU0sRUFBRSx3QkFBQTtnQkFDWCxXQUFXLENBQUMsSUFBSSxPQUFoQixXQUFXLFdBQVMsRUFBRSxDQUFDLFdBQVcsR0FBRTtnQkFDcEMsV0FBVyxHQUFHLFdBQVcsSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDO2dCQUM1QyxZQUFZLENBQUMsSUFBSSxPQUFqQixZQUFZLFdBQVMsRUFBRSxDQUFDLFlBQVksR0FBRTtnQkFDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNuQyxlQUFlLENBQUMs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Q0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUU7b0JBQ3ZDLGFBQWEsSUFBSSxpQkFBZSxNQUFNLENBQUMsSUFBSSw0QkFBdUIsZUFBZSxTQUM3RSxNQUFNLENBQUMsSUFBSSxpQkFBYyxDQUFDO29CQUM5QixhQUFhLElBQUksaUNBQStCLGVBQWUsU0FBSSxNQUFNLENBQUMsSUFBSSxZQUMxRSxNQUFNLENBQUMsSUFBSSxpQkFBYyxDQUFDO2lCQUMvQjthQUNGOzs7Ozs7Ozs7UUFFRCxjQUFjLElBQUksb0JBQW9CLENBQUM7UUFDdkMsY0FBYyxJQUFJLHFDQUEyQixDQUFDO1FBQzlDLGNBQWMsSUFBSSxhQUFhLENBQUM7UUFDaEMsY0FBYyxJQUFJLE9BQU8sQ0FBQztRQUMxQixjQUFjLElBQUksb0RBQXdDLGVBQWUsU0FBTSxDQUFDO1FBQ2hGLGNBQWMsSUFBSSxhQUFhLENBQUM7UUFDaEMsY0FBYyxJQUFJLE9BQU8sQ0FBQztRQUMxQixjQUFjLElBQUksS0FBSyxDQUFDO1FBRXhCLE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7SUFFRCw0Q0FDSSxJQUFpQixFQUNqQixlQUFxRDtRQUN2RCxPQUFPLFVBQUMsT0FBaUM7WUFDdkMsSUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFDLE9BQU8sVUFBQyxVQUF5QjtnQkFDL0IsSUFBSSxJQUFJLENBQUMsMkJBQTJCLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUN6RCxPQUFPLFVBQVUsQ0FBQztpQkFDbkI7Z0JBQ0QsT0FBTyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDOUIsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDO0lBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IHthc3NlcnRBYnNvbHV0ZX0gZnJvbSAnLi9jbGlfc3VwcG9ydCc7XG5pbXBvcnQge2RlY29yYXRvckRvd25sZXZlbFRyYW5zZm9ybWVyfSBmcm9tICcuL2RlY29yYXRvcl9kb3dubGV2ZWxfdHJhbnNmb3JtZXInO1xuaW1wb3J0IHtlbnVtVHJhbnNmb3JtZXJ9IGZyb20gJy4vZW51bV90cmFuc2Zvcm1lcic7XG5pbXBvcnQge2dlbmVyYXRlRXh0ZXJuc30gZnJvbSAnLi9leHRlcm5zJztcbmltcG9ydCB7dHJhbnNmb3JtRmlsZW92ZXJ2aWV3Q29tbWVudEZhY3Rvcnl9IGZyb20gJy4vZmlsZW92ZXJ2aWV3X2NvbW1lbnRfdHJhbnNmb3JtZXInO1xuaW1wb3J0ICogYXMgZ29vZ21vZHVsZSBmcm9tICcuL2dvb2dtb2R1bGUnO1xuaW1wb3J0IHtBbm5vdGF0b3JIb3N0LCBqc2RvY1RyYW5zZm9ybWVyLCByZW1vdmVUeXBlQXNzZXJ0aW9uc30gZnJvbSAnLi9qc2RvY190cmFuc2Zvcm1lcic7XG5pbXBvcnQge01vZHVsZXNNYW5pZmVzdH0gZnJvbSAnLi9tb2R1bGVzX21hbmlmZXN0JztcbmltcG9ydCB7cXVvdGluZ1RyYW5zZm9ybWVyfSBmcm9tICcuL3F1b3RpbmdfdHJhbnNmb3JtZXInO1xuaW1wb3J0IHtpc0R0c0ZpbGVOYW1lfSBmcm9tICcuL3RyYW5zZm9ybWVyX3V0aWwnO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAnLi90eXBlc2NyaXB0JztcblxuLy8gUmV0YWluZWQgaGVyZSBmb3IgQVBJIGNvbXBhdGliaWxpdHkuXG5leHBvcnQge2dldEdlbmVyYXRlZEV4dGVybnN9IGZyb20gJy4vZXh0ZXJucyc7XG5leHBvcnQge0ZpbGVNYXAsIE1vZHVsZXNNYW5pZmVzdH0gZnJvbSAnLi9tb2R1bGVzX21hbmlmZXN0JztcblxuZXhwb3J0IGludGVyZmFjZSBUc2lja2xlSG9zdCBleHRlbmRzIGdvb2dtb2R1bGUuR29vZ01vZHVsZVByb2Nlc3Nvckhvc3QsIEFubm90YXRvckhvc3Qge1xuICAvKipcbiAgICogV2hldGhlciB0byBkb3dubGV2ZWwgZGVjb3JhdG9yc1xuICAgKi9cbiAgdHJhbnNmb3JtRGVjb3JhdG9ycz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNvbnZlcnMgdHlwZXMgdG8gY2xvc3VyZVxuICAgKi9cbiAgdHJhbnNmb3JtVHlwZXNUb0Nsb3N1cmU/OiBib29sZWFuO1xuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgYWxpYXNlcyB0byB0aGUgLmQudHMgZmlsZXMgdG8gYWRkIHRoZSBleHBvcnRzIHRvIHRoZVxuICAgKiDgsqBf4LKgLmNsdXR6IG5hbWVzcGFjZS5cbiAgICovXG4gIGFkZER0c0NsdXR6QWxpYXNlcz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJZiB0cnVlLCB0c2lja2xlIGFuZCBkZWNvcmF0b3IgZG93bmxldmVsIHByb2Nlc3Npbmcgd2lsbCBiZSBza2lwcGVkIGZvclxuICAgKiB0aGF0IGZpbGUuXG4gICAqL1xuICBzaG91bGRTa2lwVHNpY2tsZVByb2Nlc3NpbmcoZmlsZU5hbWU6IHN0cmluZyk6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUc2lja2xlIHRyZWF0cyB3YXJuaW5ncyBhcyBlcnJvcnMsIGlmIHRydWUsIGlnbm9yZSB3YXJuaW5ncy4gIFRoaXMgbWlnaHQgYmVcbiAgICogdXNlZnVsIGZvciBlLmcuIHRoaXJkIHBhcnR5IGNvZGUuXG4gICAqL1xuICBzaG91bGRJZ25vcmVXYXJuaW5nc0ZvclBhdGgoZmlsZVBhdGg6IHN0cmluZyk6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRvIGNvbnZlcnQgQ29tbW9uSlMgcmVxdWlyZSgpIGltcG9ydHMgdG8gZ29vZy5tb2R1bGUoKSBhbmQgZ29vZy5yZXF1aXJlKCkgY2FsbHMuICovXG4gIGdvb2dtb2R1bGU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUVtaXRSZXN1bHRzKGVtaXRSZXN1bHRzOiBFbWl0UmVzdWx0W10pOiBFbWl0UmVzdWx0IHtcbiAgY29uc3QgZGlhZ25vc3RpY3M6IHRzLkRpYWdub3N0aWNbXSA9IFtdO1xuICBsZXQgZW1pdFNraXBwZWQgPSB0cnVlO1xuICBjb25zdCBlbWl0dGVkRmlsZXM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGV4dGVybnM6IHtbZmlsZU5hbWU6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcbiAgY29uc3QgbW9kdWxlc01hbmlmZXN0ID0gbmV3IE1vZHVsZXNNYW5pZmVzdCgpO1xuICBmb3IgKGNvbnN0IGVyIG9mIGVtaXRSZXN1bHRzKSB7XG4gICAgZGlhZ25vc3RpY3MucHVzaCguLi5lci5kaWFnbm9zdGljcyk7XG4gICAgZW1pdFNraXBwZWQgPSBlbWl0U2tpcHBlZCB8fCBlci5lbWl0U2tpcHBlZDtcbiAgICBlbWl0dGVkRmlsZXMucHVzaCguLi5lci5lbWl0dGVkRmlsZXMpO1xuICAgIE9iamVjdC5hc3NpZ24oZXh0ZXJucywgZXIuZXh0ZXJucyk7XG4gICAgbW9kdWxlc01hbmlmZXN0LmFkZE1hbmlmZXN0KGVyLm1vZHVsZXNNYW5pZmVzdCk7XG4gIH1cbiAgcmV0dXJuIHtkaWFnbm9zdGljcywgZW1pdFNraXBwZWQsIGVtaXR0ZWRGaWxlcywgZXh0ZXJucywgbW9kdWxlc01hbmlmZXN0fTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbWl0UmVzdWx0IGV4dGVuZHMgdHMuRW1pdFJlc3VsdCB7XG4gIC8vIFRoZSBtYW5pZmVzdCBvZiBKUyBtb2R1bGVzIG91dHB1dCBieSB0aGUgY29tcGlsZXIuXG4gIG1vZHVsZXNNYW5pZmVzdDogTW9kdWxlc01hbmlmZXN0O1xuICAvKipcbiAgICogZXh0ZXJucy5qcyBmaWxlcyBwcm9kdWNlZCBieSB0c2lja2xlLCBpZiBhbnkuIG1vZHVsZSBJRHMgYXJlIHJlbGF0aXZlIHBhdGhzIGZyb21cbiAgICogZmlsZU5hbWVUb01vZHVsZUlkLlxuICAgKi9cbiAgZXh0ZXJuczoge1ttb2R1bGVJZDogc3RyaW5nXTogc3RyaW5nfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbWl0VHJhbnNmb3JtZXJzIHtcbiAgLyoqIEN1c3RvbSB0cmFuc2Zvcm1lcnMgdG8gZXZhbHVhdGUgYmVmb3JlIFRzaWNrbGUgLmpzIHRyYW5zZm9ybWF0aW9ucy4gKi9cbiAgYmVmb3JlVHNpY2tsZT86IEFycmF5PHRzLlRyYW5zZm9ybWVyRmFjdG9yeTx0cy5Tb3VyY2VGaWxlPj47XG4gIC8qKiBDdXN0b20gdHJhbnNmb3JtZXJzIHRvIGV2YWx1YXRlIGJlZm9yZSBidWlsdC1pbiAuanMgdHJhbnNmb3JtYXRpb25zLiAqL1xuICBiZWZvcmVUcz86IEFycmF5PHRzLlRyYW5zZm9ybWVyRmFjdG9yeTx0cy5Tb3VyY2VGaWxlPj47XG4gIC8qKiBDdXN0b20gdHJhbnNmb3JtZXJzIHRvIGV2YWx1YXRlIGFmdGVyIGJ1aWx0LWluIC5qcyB0cmFuc2Zvcm1hdGlvbnMuICovXG4gIGFmdGVyVHM/OiBBcnJheTx0cy5UcmFuc2Zvcm1lckZhY3Rvcnk8dHMuU291cmNlRmlsZT4+O1xuICAvKiogQ3VzdG9tIHRyYW5zZm9ybWVycyB0byBldmFsdWF0ZSBhZnRlciBidWlsdC1pbiAuZC50cyB0cmFuc2Zvcm1hdGlvbnMuICovXG4gIGFmdGVyRGVjbGFyYXRpb25zPzogQXJyYXk8dHMuVHJhbnNmb3JtZXJGYWN0b3J5PHRzLkJ1bmRsZXx0cy5Tb3VyY2VGaWxlPj47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbWl0V2l0aFRzaWNrbGUoXG4gICAgcHJvZ3JhbTogdHMuUHJvZ3JhbSwgaG9zdDogVHNpY2tsZUhvc3QsIHRzSG9zdDogdHMuQ29tcGlsZXJIb3N0LCB0c09wdGlvbnM6IHRzLkNvbXBpbGVyT3B0aW9ucyxcbiAgICB0YXJnZXRTb3VyY2VGaWxlPzogdHMuU291cmNlRmlsZSwgd3JpdGVGaWxlPzogdHMuV3JpdGVGaWxlQ2FsbGJhY2ssXG4gICAgY2FuY2VsbGF0aW9uVG9rZW4/OiB0cy5DYW5jZWxsYXRpb25Ub2tlbiwgZW1pdE9ubHlEdHNGaWxlcz86IGJvb2xlYW4sXG4gICAgY3VzdG9tVHJhbnNmb3JtZXJzOiBFbWl0VHJhbnNmb3JtZXJzID0ge30pOiBFbWl0UmVzdWx0IHtcbiAgZm9yIChjb25zdCBzZiBvZiBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkpIHtcbiAgICBhc3NlcnRBYnNvbHV0ZShzZi5maWxlTmFtZSk7XG4gIH1cblxuICBsZXQgdHNpY2tsZURpYWdub3N0aWNzOiB0cy5EaWFnbm9zdGljW10gPSBbXTtcbiAgY29uc3QgdHlwZUNoZWNrZXIgPSBwcm9ncmFtLmdldFR5cGVDaGVja2VyKCk7XG4gIGNvbnN0IHRzaWNrbGVTb3VyY2VUcmFuc2Zvcm1lcnM6IEFycmF5PHRzLlRyYW5zZm9ybWVyRmFjdG9yeTx0cy5Tb3VyY2VGaWxlPj4gPSBbXTtcbiAgaWYgKGhvc3QudHJhbnNmb3JtVHlwZXNUb0Nsb3N1cmUpIHtcbiAgICAvLyBPbmx5IGFkZCBAc3VwcHJlc3Mge2NoZWNrVHlwZXN9IGNvbW1lbnRzIHdoZW4gYWxzbyBhZGRpbmcgdHlwZSBhbm5vdGF0aW9ucy5cbiAgICB0c2lja2xlU291cmNlVHJhbnNmb3JtZXJzLnB1c2godHJhbnNmb3JtRmlsZW92ZXJ2aWV3Q29tbWVudEZhY3RvcnkodHNpY2tsZURpYWdub3N0aWNzKSk7XG4gICAgdHNpY2tsZVNvdXJjZVRyYW5zZm9ybWVycy5wdXNoKFxuICAgICAgICBqc2RvY1RyYW5zZm9ybWVyKGhvc3QsIHRzT3B0aW9ucywgdHNIb3N0LCB0eXBlQ2hlY2tlciwgdHNpY2tsZURpYWdub3N0aWNzKSk7XG4gICAgaWYgKGhvc3QuZW5hYmxlQXV0b1F1b3RpbmcpIHtcbiAgICAgIHRzaWNrbGVTb3VyY2VUcmFuc2Zvcm1lcnMucHVzaChxdW90aW5nVHJhbnNmb3JtZXIoaG9zdCwgdHlwZUNoZWNrZXIsIHRzaWNrbGVEaWFnbm9zdGljcykpO1xuICAgIH1cbiAgICB0c2lja2xlU291cmNlVHJhbnNmb3JtZXJzLnB1c2goZW51bVRyYW5zZm9ybWVyKHR5cGVDaGVja2VyLCB0c2lja2xlRGlhZ25vc3RpY3MpKTtcbiAgICB0c2lja2xlU291cmNlVHJhbnNmb3JtZXJzLnB1c2goZGVjb3JhdG9yRG93bmxldmVsVHJhbnNmb3JtZXIodHlwZUNoZWNrZXIsIHRzaWNrbGVEaWFnbm9zdGljcykpO1xuICB9IGVsc2UgaWYgKGhvc3QudHJhbnNmb3JtRGVjb3JhdG9ycykge1xuICAgIHRzaWNrbGVTb3VyY2VUcmFuc2Zvcm1lcnMucHVzaChkZWNvcmF0b3JEb3dubGV2ZWxUcmFuc2Zvcm1lcih0eXBlQ2hlY2tlciwgdHNpY2tsZURpYWdub3N0aWNzKSk7XG4gIH1cbiAgY29uc3QgbW9kdWxlc01hbmlmZXN0ID0gbmV3IE1vZHVsZXNNYW5pZmVzdCgpO1xuICBjb25zdCB0c2lja2xlVHJhbnNmb3JtZXJzOiB0cy5DdXN0b21UcmFuc2Zvcm1lcnMgPSB7YmVmb3JlOiB0c2lja2xlU291cmNlVHJhbnNmb3JtZXJzfTtcbiAgY29uc3QgdHNUcmFuc2Zvcm1lcnM6IHRzLkN1c3RvbVRyYW5zZm9ybWVycyA9IHtcbiAgICBiZWZvcmU6IFtcbiAgICAgIC4uLihjdXN0b21UcmFuc2Zvcm1lcnMuYmVmb3JlVHNpY2tsZSB8fCBbXSksXG4gICAgICAuLi4odHNpY2tsZVRyYW5zZm9ybWVycy5iZWZvcmUgfHwgW10pLm1hcCh0ZiA9PiBza2lwVHJhbnNmb3JtRm9yU291cmNlRmlsZUlmTmVlZGVkKGhvc3QsIHRmKSksXG4gICAgICAuLi4oY3VzdG9tVHJhbnNmb3JtZXJzLmJlZm9yZVRzIHx8IFtdKSxcbiAgICBdLFxuICAgIGFmdGVyOiBbXG4gICAgICAuLi4oY3VzdG9tVHJhbnNmb3JtZXJzLmFmdGVyVHMgfHwgW10pLFxuICAgICAgLi4uKHRzaWNrbGVUcmFuc2Zvcm1lcnMuYWZ0ZXIgfHwgW10pLm1hcCh0ZiA9PiBza2lwVHJhbnNmb3JtRm9yU291cmNlRmlsZUlmTmVlZGVkKGhvc3QsIHRmKSksXG4gICAgXSxcbiAgICBhZnRlckRlY2xhcmF0aW9uczogY3VzdG9tVHJhbnNmb3JtZXJzLmFmdGVyRGVjbGFyYXRpb25zLFxuICB9O1xuICBpZiAoaG9zdC50cmFuc2Zvcm1UeXBlc1RvQ2xvc3VyZSkge1xuICAgIC8vIFNlZSBjb21tZW50IG9uIHJlbW90ZVR5cGVBc3NlcnRpb25zLlxuICAgIHRzVHJhbnNmb3JtZXJzLmJlZm9yZSEucHVzaChyZW1vdmVUeXBlQXNzZXJ0aW9ucygpKTtcbiAgfVxuICBpZiAoaG9zdC5nb29nbW9kdWxlKSB7XG4gICAgdHNUcmFuc2Zvcm1lcnMuYWZ0ZXIhLnB1c2goZ29vZ21vZHVsZS5jb21tb25Kc1RvR29vZ21vZHVsZVRyYW5zZm9ybWVyKFxuICAgICAgICBob3N0LCBtb2R1bGVzTWFuaWZlc3QsIHR5cGVDaGVja2VyLCB0c2lja2xlRGlhZ25vc3RpY3MpKTtcbiAgfVxuXG4gIGNvbnN0IHdyaXRlRmlsZURlbGVnYXRlOiB0cy5Xcml0ZUZpbGVDYWxsYmFjayA9IHdyaXRlRmlsZSB8fCB0c0hvc3Qud3JpdGVGaWxlLmJpbmQodHNIb3N0KTtcbiAgY29uc3Qgd3JpdGVGaWxlSW1wbCA9XG4gICAgICAoZmlsZU5hbWU6IHN0cmluZywgY29udGVudDogc3RyaW5nLCB3cml0ZUJ5dGVPcmRlck1hcms6IGJvb2xlYW4sXG4gICAgICAgb25FcnJvcjogKChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQpfHVuZGVmaW5lZCxcbiAgICAgICBzb3VyY2VGaWxlczogUmVhZG9ubHlBcnJheTx0cy5Tb3VyY2VGaWxlPikgPT4ge1xuICAgICAgICBhc3NlcnRBYnNvbHV0ZShmaWxlTmFtZSk7XG4gICAgICAgIGlmIChob3N0LmFkZER0c0NsdXR6QWxpYXNlcyAmJiBpc0R0c0ZpbGVOYW1lKGZpbGVOYW1lKSAmJiBzb3VyY2VGaWxlcykge1xuICAgICAgICAgIC8vIE9ubHkgYnVuZGxlIGVtaXRzIHBhc3MgbW9yZSB0aGFuIG9uZSBzb3VyY2UgZmlsZSBmb3IgLmQudHMgd3JpdGVzLiBCdW5kbGUgZW1pdHMgaG93ZXZlclxuICAgICAgICAgIC8vIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRzaWNrbGUsIGFzIHdlIGNhbm5vdCBhbm5vdGF0ZSB0aGVtIGZvciBDbG9zdXJlIGluIGFueSBtZWFuaW5nZnVsXG4gICAgICAgICAgLy8gd2F5IGFueXdheS5cbiAgICAgICAgICBpZiAoIXNvdXJjZUZpbGVzIHx8IHNvdXJjZUZpbGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgZXhhY3RseSBvbmUgc291cmNlIGZpbGUgZm9yIC5kLnRzIGVtaXQsIGdvdCAke1xuICAgICAgICAgICAgICAgIHNvdXJjZUZpbGVzLm1hcChzZiA9PiBzZi5maWxlTmFtZSl9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsU291cmNlID0gc291cmNlRmlsZXNbMF07XG4gICAgICAgICAgY29udGVudCA9IGFkZENsdXR6QWxpYXNlcyhmaWxlTmFtZSwgY29udGVudCwgb3JpZ2luYWxTb3VyY2UsIHR5cGVDaGVja2VyLCBob3N0KTtcbiAgICAgICAgfVxuICAgICAgICB3cml0ZUZpbGVEZWxlZ2F0ZShmaWxlTmFtZSwgY29udGVudCwgd3JpdGVCeXRlT3JkZXJNYXJrLCBvbkVycm9yLCBzb3VyY2VGaWxlcyk7XG4gICAgICB9O1xuXG4gIGNvbnN0IHtkaWFnbm9zdGljczogdHNEaWFnbm9zdGljcywgZW1pdFNraXBwZWQsIGVtaXR0ZWRGaWxlc30gPSBwcm9ncmFtLmVtaXQoXG4gICAgICB0YXJnZXRTb3VyY2VGaWxlLCB3cml0ZUZpbGVJbXBsLCBjYW5jZWxsYXRpb25Ub2tlbiwgZW1pdE9ubHlEdHNGaWxlcywgdHNUcmFuc2Zvcm1lcnMpO1xuXG4gIGNvbnN0IGV4dGVybnM6IHtbZmlsZU5hbWU6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcbiAgaWYgKGhvc3QudHJhbnNmb3JtVHlwZXNUb0Nsb3N1cmUpIHtcbiAgICBjb25zdCBzb3VyY2VGaWxlcyA9IHRhcmdldFNvdXJjZUZpbGUgPyBbdGFyZ2V0U291cmNlRmlsZV0gOiBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCk7XG4gICAgZm9yIChjb25zdCBzb3VyY2VGaWxlIG9mIHNvdXJjZUZpbGVzKSB7XG4gICAgICBjb25zdCBpc0R0cyA9IGlzRHRzRmlsZU5hbWUoc291cmNlRmlsZS5maWxlTmFtZSk7XG4gICAgICBpZiAoaXNEdHMgJiYgaG9zdC5zaG91bGRTa2lwVHNpY2tsZVByb2Nlc3Npbmcoc291cmNlRmlsZS5maWxlTmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCB7b3V0cHV0LCBkaWFnbm9zdGljc30gPSBnZW5lcmF0ZUV4dGVybnMoXG4gICAgICAgICAgdHlwZUNoZWNrZXIsIHNvdXJjZUZpbGUsIGhvc3QsIC8qIG1vZHVsZVJlc29sdXRpb25Ib3N0ICovIGhvc3QuaG9zdCwgdHNPcHRpb25zKTtcbiAgICAgIGlmIChvdXRwdXQpIHtcbiAgICAgICAgZXh0ZXJuc1tzb3VyY2VGaWxlLmZpbGVOYW1lXSA9IG91dHB1dDtcbiAgICAgIH1cbiAgICAgIGlmIChkaWFnbm9zdGljcykge1xuICAgICAgICB0c2lja2xlRGlhZ25vc3RpY3MucHVzaCguLi5kaWFnbm9zdGljcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIEFsbCBkaWFnbm9zdGljcyAoaW5jbHVkaW5nIHdhcm5pbmdzKSBhcmUgdHJlYXRlZCBhcyBlcnJvcnMuXG4gIC8vIElmIHRoZSBob3N0IGRlY2lkZXMgdG8gaWdub3JlIHdhcm5pbmdzLCBqdXN0IGRpc2NhcmQgdGhlbS5cbiAgLy8gV2FybmluZ3MgaW5jbHVkZSBzdHVmZiBsaWtlIFwiZG9uJ3QgdXNlIEB0eXBlIGluIHlvdXIganNkb2NcIjsgdHNpY2tsZVxuICAvLyB3YXJucyBhbmQgdGhlbiBmaXhlcyB1cCB0aGUgY29kZSB0byBiZSBDbG9zdXJlLWNvbXBhdGlibGUgYW55d2F5LlxuICB0c2lja2xlRGlhZ25vc3RpY3MgPSB0c2lja2xlRGlhZ25vc3RpY3MuZmlsdGVyKFxuICAgICAgZCA9PiBkLmNhdGVnb3J5ID09PSB0cy5EaWFnbm9zdGljQ2F0ZWdvcnkuRXJyb3IgfHxcbiAgICAgICAgICAhaG9zdC5zaG91bGRJZ25vcmVXYXJuaW5nc0ZvclBhdGgoZC5maWxlIS5maWxlTmFtZSkpO1xuXG4gIHJldHVybiB7XG4gICAgbW9kdWxlc01hbmlmZXN0LFxuICAgIGVtaXRTa2lwcGVkLFxuICAgIGVtaXR0ZWRGaWxlczogZW1pdHRlZEZpbGVzIHx8IFtdLFxuICAgIGRpYWdub3N0aWNzOiBbLi4udHNEaWFnbm9zdGljcywgLi4udHNpY2tsZURpYWdub3N0aWNzXSxcbiAgICBleHRlcm5zXG4gIH07XG59XG5cbi8qKiBDb21wYXJlcyB0d28gc3RyaW5ncyBhbmQgcmV0dXJucyBhIG51bWJlciBzdWl0YWJsZSBmb3IgdXNlIGluIHNvcnQoKS4gKi9cbmZ1bmN0aW9uIHN0cmluZ0NvbXBhcmUoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBudW1iZXIge1xuICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgaWYgKGEgPiBiKSByZXR1cm4gMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8qKlxuICogQSB0c2lja2xlIHByb2R1Y2VkIGRlY2xhcmF0aW9uIGZpbGUgbWlnaHQgYmUgY29uc3VtZWQgYmUgcmVmZXJlbmNlZCBieSBDbHV0elxuICogcHJvZHVjZWQgLmQudHMgZmlsZXMsIHdoaWNoIHVzZSBzeW1ib2wgbmFtZXMgYmFzZWQgb24gQ2xvc3VyZSdzIGludGVybmFsXG4gKiBuYW1pbmcgY29udmVudGlvbnMsIHNvIHdlIG5lZWQgdG8gcHJvdmlkZSBhbGlhc2VzIGZvciBhbGwgdGhlIGV4cG9ydGVkIHN5bWJvbHNcbiAqIGluIHRoZSBDbHV0eiBuYW1pbmcgY29udmVudGlvbi5cbiAqL1xuZnVuY3Rpb24gYWRkQ2x1dHpBbGlhc2VzKFxuICAgIGZpbGVOYW1lOiBzdHJpbmcsIGR0c0ZpbGVDb250ZW50OiBzdHJpbmcsIHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUsXG4gICAgdHlwZUNoZWNrZXI6IHRzLlR5cGVDaGVja2VyLCBob3N0OiBUc2lja2xlSG9zdCk6IHN0cmluZyB7XG4gIGNvbnN0IG1vZHVsZVN5bWJvbCA9IHR5cGVDaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24oc291cmNlRmlsZSk7XG4gIGNvbnN0IG1vZHVsZUV4cG9ydHMgPSBtb2R1bGVTeW1ib2wgJiYgdHlwZUNoZWNrZXIuZ2V0RXhwb3J0c09mTW9kdWxlKG1vZHVsZVN5bWJvbCk7XG4gIGlmICghbW9kdWxlRXhwb3J0cykgcmV0dXJuIGR0c0ZpbGVDb250ZW50O1xuXG4gIC8vIC5kLnRzIGZpbGVzIGNhbiBiZSB0cmFuc2Zvcm1lZCwgdG9vLCBzbyB3ZSBuZWVkIHRvIGNvbXBhcmUgdGhlIG9yaWdpbmFsIG5vZGUgYmVsb3cuXG4gIGNvbnN0IG9yaWdTb3VyY2VGaWxlID0gdHMuZ2V0T3JpZ2luYWxOb2RlKHNvdXJjZUZpbGUpO1xuICAvLyBUaGUgbW9kdWxlIGV4cG9ydHMgbWlnaHQgYmUgcmUtZXhwb3J0cywgYW5kIGluIHRoZSBjYXNlIG9mIFwiZXhwb3J0ICpcIiBtaWdodCBub3QgZXZlbiBiZVxuICAvLyBhdmFpbGFibGUgaW4gdGhlIG1vZHVsZSBzY29wZSwgd2hpY2ggbWFrZXMgdGhlbSBkaWZmaWN1bHQgdG8gZXhwb3J0LiBBdm9pZCB0aGUgcHJvYmxlbSBieVxuICAvLyBmaWx0ZXJpbmcgb3V0IHN5bWJvbHMgd2hvIGRvIG5vdCBoYXZlIGEgZGVjbGFyYXRpb24gaW4gdGhlIGxvY2FsIG1vZHVsZS5cbiAgY29uc3QgbG9jYWxFeHBvcnRzID0gbW9kdWxlRXhwb3J0cy5maWx0ZXIoZSA9PiB7XG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIGRlY2xhcmF0aW9ucywgYmUgY29uc2VydmF0aXZlIGFuZCBlbWl0IHRoZSBhbGlhc2VzLlxuICAgIGlmICghZS5kZWNsYXJhdGlvbnMpIHJldHVybiB0cnVlO1xuICAgIC8vIFNraXAgZGVmYXVsdCBleHBvcnRzLCB0aGV5IGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZC5cbiAgICAvLyBkZWZhdWx0IGlzIGEga2V5d29yZCBpbiB0eXBlc2NyaXB0LCBzbyB0aGUgbmFtZSBvZiB0aGUgZXhwb3J0IGJlaW5nIGRlZmF1bHQgbWVhbnMgdGhhdCBpdCdzIGFcbiAgICAvLyBkZWZhdWx0IGV4cG9ydC5cbiAgICBpZiAoZS5uYW1lID09PSAnZGVmYXVsdCcpIHJldHVybiBmYWxzZTtcbiAgICAvLyBPdGhlcndpc2UgY2hlY2sgdGhhdCBzb21lIGRlY2xhcmF0aW9uIGlzIGZyb20gdGhlIGxvY2FsIG1vZHVsZS5cbiAgICByZXR1cm4gZS5kZWNsYXJhdGlvbnMuc29tZShkID0+IGQuZ2V0U291cmNlRmlsZSgpID09PSBvcmlnU291cmNlRmlsZSk7XG4gIH0pO1xuICBpZiAoIWxvY2FsRXhwb3J0cy5sZW5ndGgpIHJldHVybiBkdHNGaWxlQ29udGVudDtcblxuICAvLyBUeXBlU2NyaXB0IDIuOCBhbmQgVHlwZVNjcmlwdCAyLjkgZGlmZmVyIG9uIHRoZSBvcmRlciBpbiB3aGljaCB0aGVcbiAgLy8gbW9kdWxlIHN5bWJvbHMgY29tZSBvdXQsIHNvIHNvcnQgaGVyZSB0byBtYWtlIHRoZSB0ZXN0cyBzdGFibGUuXG4gIGxvY2FsRXhwb3J0cy5zb3J0KChhLCBiKSA9PiBzdHJpbmdDb21wYXJlKGEubmFtZSwgYi5uYW1lKSk7XG5cbiAgY29uc3QgbW9kdWxlTmFtZSA9IGhvc3QucGF0aFRvTW9kdWxlTmFtZSgnJywgc291cmNlRmlsZS5maWxlTmFtZSk7XG4gIGNvbnN0IGNsdXR6TW9kdWxlTmFtZSA9IG1vZHVsZU5hbWUucmVwbGFjZSgvXFwuL2csICckJyk7XG5cbiAgLy8gQ2x1dHogbWlnaHQgcmVmZXIgdG8gdGhlIG5hbWUgaW4gdHdvIGRpZmZlcmVudCBmb3JtcyAoc3RlbW1pbmcgZnJvbSBnb29nLnByb3ZpZGUgYW5kXG4gIC8vIGdvb2cubW9kdWxlIHJlc3BlY3RpdmVseSkuXG4gIC8vIDEpIGdsb2JhbCBpbiBjbHV0ejogICDgsqBf4LKgLmNsdXR6Lm1vZHVsZSRjb250ZW50cyRwYXRoJHRvJG1vZHVsZV9TeW1ib2wuLi5cbiAgLy8gMikgbG9jYWwgaW4gYSBtb2R1bGU6IOCyoF/gsqAuY2x1dHoubW9kdWxlJGV4cG9ydHMkcGF0aCR0byRtb2R1bGUuU3ltYm9sIC4uXG4gIC8vIFNlZSBleGFtcGxlcyBhdDpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY2x1dHovdHJlZS9tYXN0ZXIvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL2phdmFzY3JpcHQvY2x1dHpcblxuICAvLyBDYXNlICgxKSBmcm9tIGFib3ZlLlxuICBsZXQgZ2xvYmFsU3ltYm9scyA9ICcnO1xuICAvLyBDYXNlICgyKSBmcm9tIGFib3ZlLlxuICBsZXQgbmVzdGVkU3ltYm9scyA9ICcnO1xuICBmb3IgKGNvbnN0IHN5bWJvbCBvZiBsb2NhbEV4cG9ydHMpIHtcbiAgICBnbG9iYWxTeW1ib2xzICs9XG4gICAgICAgIGBcXHRcXHRleHBvcnQgeyR7c3ltYm9sLm5hbWV9IGFzIG1vZHVsZSRjb250ZW50cyQke2NsdXR6TW9kdWxlTmFtZX1fJHtzeW1ib2wubmFtZX19XFxuYDtcbiAgICBuZXN0ZWRTeW1ib2xzICs9XG4gICAgICAgIGBcXHRcXHRleHBvcnQge21vZHVsZSRjb250ZW50cyQke2NsdXR6TW9kdWxlTmFtZX1fJHtzeW1ib2wubmFtZX0gYXMgJHtzeW1ib2wubmFtZX19XFxuYDtcbiAgICBpZiAoc3ltYm9sLmZsYWdzICYgdHMuU3ltYm9sRmxhZ3MuQ2xhc3MpIHtcbiAgICAgIGdsb2JhbFN5bWJvbHMgKz0gYFxcdFxcdGV4cG9ydCB7JHtzeW1ib2wubmFtZX0gYXMgbW9kdWxlJGNvbnRlbnRzJCR7Y2x1dHpNb2R1bGVOYW1lfV8ke1xuICAgICAgICAgIHN5bWJvbC5uYW1lfV9JbnN0YW5jZX1cXG5gO1xuICAgICAgbmVzdGVkU3ltYm9scyArPSBgXFx0XFx0ZXhwb3J0IHttb2R1bGUkY29udGVudHMkJHtjbHV0ek1vZHVsZU5hbWV9XyR7c3ltYm9sLm5hbWV9IGFzICR7XG4gICAgICAgICAgc3ltYm9sLm5hbWV9X0luc3RhbmNlfVxcbmA7XG4gICAgfVxuICB9XG5cbiAgZHRzRmlsZUNvbnRlbnQgKz0gJ2RlY2xhcmUgZ2xvYmFsIHtcXG4nO1xuICBkdHNGaWxlQ29udGVudCArPSBgXFx0bmFtZXNwYWNlIOCyoF/gsqAuY2x1dHoge1xcbmA7XG4gIGR0c0ZpbGVDb250ZW50ICs9IGdsb2JhbFN5bWJvbHM7XG4gIGR0c0ZpbGVDb250ZW50ICs9IGBcXHR9XFxuYDtcbiAgZHRzRmlsZUNvbnRlbnQgKz0gYFxcdG5hbWVzcGFjZSDgsqBf4LKgLmNsdXR6Lm1vZHVsZSRleHBvcnRzJCR7Y2x1dHpNb2R1bGVOYW1lfSB7XFxuYDtcbiAgZHRzRmlsZUNvbnRlbnQgKz0gbmVzdGVkU3ltYm9scztcbiAgZHRzRmlsZUNvbnRlbnQgKz0gYFxcdH1cXG5gO1xuICBkdHNGaWxlQ29udGVudCArPSAnfVxcbic7XG5cbiAgcmV0dXJuIGR0c0ZpbGVDb250ZW50O1xufVxuXG5mdW5jdGlvbiBza2lwVHJhbnNmb3JtRm9yU291cmNlRmlsZUlmTmVlZGVkKFxuICAgIGhvc3Q6IFRzaWNrbGVIb3N0LFxuICAgIGRlbGVnYXRlRmFjdG9yeTogdHMuVHJhbnNmb3JtZXJGYWN0b3J5PHRzLlNvdXJjZUZpbGU+KTogdHMuVHJhbnNmb3JtZXJGYWN0b3J5PHRzLlNvdXJjZUZpbGU+IHtcbiAgcmV0dXJuIChjb250ZXh0OiB0cy5UcmFuc2Zvcm1hdGlvbkNvbnRleHQpID0+IHtcbiAgICBjb25zdCBkZWxlZ2F0ZSA9IGRlbGVnYXRlRmFjdG9yeShjb250ZXh0KTtcbiAgICByZXR1cm4gKHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUpID0+IHtcbiAgICAgIGlmIChob3N0LnNob3VsZFNraXBUc2lja2xlUHJvY2Vzc2luZyhzb3VyY2VGaWxlLmZpbGVOYW1lKSkge1xuICAgICAgICByZXR1cm4gc291cmNlRmlsZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWxlZ2F0ZShzb3VyY2VGaWxlKTtcbiAgICB9O1xuICB9O1xufVxuIl19

@@ -62,12 +62,7 @@ /**

/**
* Converts a ts.Symbol to a string.
* Other approaches that don't work:
* - TypeChecker.typeToString translates Array as T[].
* - TypeChecker.symbolToString emits types without their namespace,
* and doesn't let you pass the flag to control that.
* @param useFqn whether to scope the name using its fully qualified name. Closure's template
* arguments are always scoped to the class containing them, where TypeScript's template args
* would be fully qualified. I.e. this flag is false for generic types.
* Converts a ts.Symbol to a string, applying aliases and ensuring symbols are imported.
* @return a string representation of the symbol as a valid Closure type name, or `undefined` if
* the type cannot be expressed (e.g. for anonymous types).
*/
symbolToString(sym: ts.Symbol, useFqn: boolean): string;
symbolToString(sym: ts.Symbol): string | undefined;
/**

@@ -74,0 +69,0 @@ * Returns the mangled name prefix for symbol, or an empty string if not applicable.

@@ -17,5 +17,5 @@ /**

import * as ts from 'typescript';
export { __String, addSyntheticLeadingComment, addSyntheticTrailingComment, AsExpression, AssertionExpression, BinaryExpression, Block, CallExpression, CancellationToken, ClassDeclaration, ClassElement, ClassLikeDeclaration, CommentRange, CompilerHost, CompilerOptions, ConstructorDeclaration, createArrayLiteral, createArrayTypeNode, createArrowFunction, createAssignment, createBinary, createBlock, createCall, createCompilerHost, createElementAccess, createExportSpecifier, createFunctionDeclaration, createFunctionExpression, createFunctionTypeNode, createIdentifier, createIf, createIndexSignature, createKeywordTypeNode, createLiteral, createLiteralTypeNode, createNamedExports, createNodeArray, createNotEmittedStatement, createNull, createObjectLiteral, createParameter, createParen, createProgram, createProperty, createPropertyAccess, createPropertyAssignment, createPropertySignature, createSourceFile, createStatement, createToken, createTypeLiteralNode, createTypeReferenceNode, createUnionTypeNode, createVariableDeclaration, createVariableDeclarationList, createVariableStatement, CustomTransformers, Declaration, DeclarationStatement, DeclarationWithTypeParameters, Decorator, Diagnostic, DiagnosticCategory, ElementAccessExpression, EmitFlags, EmitResult, EntityName, EnumDeclaration, EnumMember, ExportDeclaration, ExportSpecifier, Expression, ExpressionStatement, flattenDiagnosticMessageText, forEachChild, formatDiagnostics, FormatDiagnosticsHost, FunctionDeclaration, FunctionLikeDeclaration, GetAccessorDeclaration, getCombinedModifierFlags, getCombinedNodeFlags, getLeadingCommentRanges, getLineAndCharacterOfPosition, getMutableClone, getOriginalNode, getPreEmitDiagnostics, getSyntheticLeadingComments, getSyntheticTrailingComments, getTrailingCommentRanges, HeritageClause, Identifier, IfStatement, ImportDeclaration, ImportEqualsDeclaration, ImportSpecifier, IndexKind, InterfaceDeclaration, isArrowFunction, isAssertionExpression, isBinaryExpression, isCallExpression, isExportAssignment, isExportDeclaration, isExpressionStatement, isExternalModule, isExternalModuleReference, isFunctionDeclaration, isIdentifier, isImportDeclaration, isImportEqualsDeclaration, isInterfaceDeclaration, isLiteralExpression, isLiteralTypeNode, isMethodSignature, isModuleBlock, isModuleDeclaration, isNamedImports, isNamespaceExportDeclaration, isNamespaceImport, isNonNullExpression, isObjectLiteralExpression, isParenthesizedExpression, isPropertyAccessExpression, isPropertyAssignment, isPropertyDeclaration, isPropertySignature, isQualifiedName, isSourceFile, isStringLiteral, isTypeReferenceNode, isVariableDeclaration, isVariableStatement, MethodDeclaration, Modifier, ModifierFlags, ModuleBlock, ModuleDeclaration, ModuleKind, ModuleResolutionHost, NamedDeclaration, NamedImports, NamespaceExportDeclaration, Node, NodeArray, NodeFlags, NonNullExpression, NotEmittedStatement, ObjectFlags, ObjectLiteralElementLike, ObjectLiteralExpression, ObjectType, ParameterDeclaration, parseCommandLine, parseJsonConfigFileContent, Program, PropertyAccessExpression, PropertyAssignment, PropertyDeclaration, PropertyName, PropertySignature, QualifiedName, readConfigFile, resolveModuleName, ScriptTarget, SetAccessorDeclaration, setCommentRange, setEmitFlags, setOriginalNode, setSourceMapRange, setSyntheticLeadingComments, setSyntheticTrailingComments, setTextRange, Signature, SignatureDeclaration, SignatureKind, SourceFile, Statement, StringLiteral, Symbol, SymbolFlags, SymbolFormatFlags, SymbolWriter, SyntaxKind, SynthesizedComment, sys, TextRange, Token, TransformationContext, Transformer, TransformerFactory, Type, TypeAliasDeclaration, TypeAssertion, TypeChecker, TypeElement, TypeFlags, TypeNode, TypeParameterDeclaration, TypeReference, TypeReferenceNode, UnionType, updateAsExpression, updateBlock, updateConstructor, updateExportDeclaration, updateExpressionWithTypeArguments, updateGetAccessor, updateHeritageClause, updateMethod, updateNamedExports, updateNonNullExpression, updateParameter, updateSetAccessor, updateSourceFileNode, updateTypeAssertion, VariableDeclaration, VariableStatement, visitEachChild, visitFunctionBody, visitLexicalEnvironment, visitNode, Visitor, visitParameterList, WriteFileCallback } from 'typescript';
export { __String, addSyntheticLeadingComment, addSyntheticTrailingComment, AsExpression, AssertionExpression, BinaryExpression, Block, Bundle, CallExpression, CancellationToken, ClassDeclaration, ClassElement, ClassLikeDeclaration, CommentRange, CompilerHost, CompilerOptions, ConstructorDeclaration, createArrayLiteral, createArrayTypeNode, createArrowFunction, createAssignment, createBinary, createBlock, createCall, createCompilerHost, createElementAccess, createExportSpecifier, createFunctionDeclaration, createFunctionExpression, createFunctionTypeNode, createIdentifier, createIf, createIndexSignature, createKeywordTypeNode, createLiteral, createLiteralTypeNode, createNamedExports, createNodeArray, createNotEmittedStatement, createNull, createObjectLiteral, createParameter, createParen, createProgram, createProperty, createPropertyAccess, createPropertyAssignment, createPropertySignature, createSourceFile, createStatement, createToken, createTypeLiteralNode, createTypeReferenceNode, createUnionTypeNode, createVariableDeclaration, createVariableDeclarationList, createVariableStatement, CustomTransformers, Declaration, DeclarationStatement, DeclarationWithTypeParameters, Decorator, Diagnostic, DiagnosticCategory, ElementAccessExpression, EmitFlags, EmitResult, EntityName, EnumDeclaration, EnumMember, ExportDeclaration, ExportSpecifier, Expression, ExpressionStatement, ExpressionWithTypeArguments, flattenDiagnosticMessageText, forEachChild, formatDiagnostics, FormatDiagnosticsHost, FunctionDeclaration, FunctionLikeDeclaration, GetAccessorDeclaration, getCombinedModifierFlags, getCombinedNodeFlags, getLeadingCommentRanges, getLineAndCharacterOfPosition, getMutableClone, getOriginalNode, getPreEmitDiagnostics, getSyntheticLeadingComments, getSyntheticTrailingComments, getTrailingCommentRanges, HeritageClause, Identifier, IfStatement, ImportDeclaration, ImportEqualsDeclaration, ImportSpecifier, IndexKind, InterfaceDeclaration, isArrowFunction, isAssertionExpression, isBinaryExpression, isCallExpression, isExportAssignment, isExportDeclaration, isExpressionStatement, isExternalModule, isExternalModuleReference, isFunctionDeclaration, isIdentifier, isImportDeclaration, isImportEqualsDeclaration, isInterfaceDeclaration, isLiteralExpression, isLiteralTypeNode, isMethodSignature, isModuleBlock, isModuleDeclaration, isNamedImports, isNamespaceExportDeclaration, isNamespaceImport, isNonNullExpression, isObjectLiteralExpression, isParenthesizedExpression, isPropertyAccessExpression, isPropertyAssignment, isPropertyDeclaration, isPropertySignature, isQualifiedName, isSourceFile, isStringLiteral, isTypeReferenceNode, isVariableDeclaration, isVariableStatement, MethodDeclaration, Modifier, ModifierFlags, ModuleBlock, ModuleDeclaration, ModuleKind, ModuleResolutionHost, NamedDeclaration, NamedImports, NamespaceExportDeclaration, Node, NodeArray, NodeBuilderFlags, NodeFlags, NonNullExpression, NotEmittedStatement, ObjectFlags, ObjectLiteralElementLike, ObjectLiteralExpression, ObjectType, ParameterDeclaration, parseCommandLine, parseJsonConfigFileContent, Program, PropertyAccessExpression, PropertyAssignment, PropertyDeclaration, PropertyName, PropertySignature, QualifiedName, readConfigFile, resolveModuleName, ScriptTarget, SetAccessorDeclaration, setCommentRange, setEmitFlags, setOriginalNode, setSourceMapRange, setSyntheticLeadingComments, setSyntheticTrailingComments, setTextRange, Signature, SignatureDeclaration, SignatureKind, SourceFile, Statement, StringLiteral, Symbol, SymbolFlags, SymbolFormatFlags, SyntaxKind, SynthesizedComment, sys, TextRange, ThisExpression, Token, TransformationContext, Transformer, TransformerFactory, Type, TypeAliasDeclaration, TypeAssertion, TypeChecker, TypeElement, TypeFlags, TypeNode, TypeParameterDeclaration, TypeReference, TypeReferenceNode, UnionType, updateAsExpression, updateBlock, updateConstructor, updateExportDeclaration, updateExpressionWithTypeArguments, updateGetAccessor, updateHeritageClause, updateMethod, updateNamedExports, updateNonNullExpression, updateParameter, updatePropertyAccess, updateSetAccessor, updateSourceFileNode, updateTypeAssertion, VariableDeclaration, VariableStatement, visitEachChild, visitFunctionBody, visitLexicalEnvironment, visitNode, Visitor, visitParameterList, WriteFileCallback } from 'typescript';
export declare const SyntaxKindJSDocSignature: ts.SyntaxKind;
export declare function getEmitFlags(node: ts.Node): ts.EmitFlags | undefined;
export declare let updateProperty: typeof ts.updateProperty;

@@ -140,2 +140,3 @@ /**

exports.ModuleKind = typescript_1.ModuleKind;
exports.NodeBuilderFlags = typescript_1.NodeBuilderFlags;
exports.NodeFlags = typescript_1.NodeFlags;

@@ -172,2 +173,3 @@ exports.ObjectFlags = typescript_1.ObjectFlags;

exports.updateParameter = typescript_1.updateParameter;
exports.updatePropertyAccess = typescript_1.updatePropertyAccess;
exports.updateSetAccessor = typescript_1.updateSetAccessor;

@@ -201,2 +203,2 @@ exports.updateSourceFileNode = typescript_1.updateSourceFileNode;

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90eXBlc2NyaXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUVIOzs7Ozs7T0FNRztJQUVILCtFQUErRTtJQUUvRSwrQkFBaUM7SUFLakMseUNBQWdxSTtJQUE5b0ksa0RBQUEsMEJBQTBCLENBQUE7SUFBRSxtREFBQSwyQkFBMkIsQ0FBQTtJQUE0TiwwQ0FBQSxrQkFBa0IsQ0FBQTtJQUFFLDJDQUFBLG1CQUFtQixDQUFBO0lBQUUsMkNBQUEsbUJBQW1CLENBQUE7SUFBRSx3Q0FBQSxnQkFBZ0IsQ0FBQTtJQUFFLG9DQUFBLFlBQVksQ0FBQTtJQUFFLG1DQUFBLFdBQVcsQ0FBQTtJQUFFLGtDQUFBLFVBQVUsQ0FBQTtJQUFFLDBDQUFBLGtCQUFrQixDQUFBO0lBQUUsMkNBQUEsbUJBQW1CLENBQUE7SUFBRSw2Q0FBQSxxQkFBcUIsQ0FBQTtJQUFFLGlEQUFBLHlCQUF5QixDQUFBO0lBQUUsZ0RBQUEsd0JBQXdCLENBQUE7SUFBRSw4Q0FBQSxzQkFBc0IsQ0FBQTtJQUFFLHdDQUFBLGdCQUFnQixDQUFBO0lBQUUsZ0NBQUEsUUFBUSxDQUFBO0lBQUUsNENBQUEsb0JBQW9CLENBQUE7SUFBRSw2Q0FBQSxxQkFBcUIsQ0FBQTtJQUFFLHFDQUFBLGFBQWEsQ0FBQTtJQUFFLDZDQUFBLHFCQUFxQixDQUFBO0lBQUUsMENBQUEsa0JBQWtCLENBQUE7SUFBRSx1Q0FBQSxlQUFlLENBQUE7SUFBRSxpREFBQSx5QkFBeUIsQ0FBQTtJQUFFLGtDQUFBLFVBQVUsQ0FBQTtJQUFFLDJDQUFBLG1CQUFtQixDQUFBO0lBQUUsdUNBQUEsZUFBZSxDQUFBO0lBQUUsbUNBQUEsV0FBVyxDQUFBO0lBQUUscUNBQUEsYUFBYSxDQUFBO0lBQUUsc0NBQUEsY0FBYyxDQUFBO0lBQUUsNENBQUEsb0JB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QUFHLEVBQUUsQ0FBQyxjQUFtRCxDQUFDO1FBQ2hGLHNCQUFjLEdBQUcsVUFBQyxJQUE0QixFQUFFLFVBQWlELEVBQy9FLFNBQStDLEVBQUUsSUFBNEIsRUFDN0UsYUFBeUMsRUFBRSxJQUEyQixFQUN0RSxXQUFvQztZQUNwRCxPQUFPLGtCQUFnQixDQUNaLElBQXVDLEVBQUUsVUFBcUMsRUFDOUUsU0FBZ0IsRUFBRSxJQUFXLEVBQUUsSUFBVyxFQUFFLFdBQWtCLENBQVEsQ0FBQztRQUNwRixDQUFDLENBQUM7S0FDSCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IEFic3RyYWN0aW9uIG92ZXIgdGhlIFR5cGVTY3JpcHQgQVBJIHRoYXQgbWFrZXMgbXVsdGlwbGVcbiAqIHZlcnNpb25zIG9mIFR5cGVTY3JpcHQgYXBwZWFyIHRvIGJlIGludGVyb3BlcmFibGUuIEFueSB0aW1lIGEgYnJlYWtpbmcgY2hhbmdlXG4gKiBpbiBUeXBlU2NyaXB0IGFmZmVjdHMgVHNpY2tsZSBjb2RlLCB3ZSBzaG91bGQgZXh0ZW5kIHRoaXMgc2hpbSB0byBwcmVzZW50IGFuXG4gKiB1bmJyb2tlbiBBUEkuXG4gKiBBbGwgY29kZSBpbiB0c2lja2xlIHNob3VsZCBpbXBvcnQgZnJvbSB0aGlzIGxvY2F0aW9uLCBub3QgZnJvbSAndHlwZXNjcmlwdCcuXG4gKi9cblxuLy8gdHNsaW50OmRpc2FibGU6bm8tYW55IFdlIG5lZWQgdG8gZG8gdmFyaW91cyB1bnNhZmUgY2FzdHMgYmV0d2VlbiBUUyB2ZXJzaW9uc1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuLy8gTm90ZSwgdGhpcyBpbXBvcnQgZGVwZW5kcyBvbiBhIGdlbnJ1bGUgY29weWluZyB0aGUgLmQudHMgZmlsZSB0byB0aGlzIHBhY2thZ2VcbmltcG9ydCAqIGFzIHRzMjQgZnJvbSAnLi90eXBlc2NyaXB0LTIuNCc7XG5cbmV4cG9ydCB7X19TdHJpbmcsIGFkZFN5bnRoZXRpY0xlYWRpbmdDb21tZW50LCBhZGRTeW50aGV0aWNUcmFpbGluZ0NvbW1lbnQsIEFzRXhwcmVzc2lvbiwgQXNzZXJ0aW9uRXhwcmVzc2lvbiwgQmluYXJ5RXhwcmVzc2lvbiwgQmxvY2ssIENhbGxFeHByZXNzaW9uLCBDYW5jZWxsYXRpb25Ub2tlbiwgQ2xhc3NEZWNsYXJhdGlvbiwgQ2xhc3NFbGVtZW50LCBDbGFzc0xpa2VEZWNsYXJhdGlvbiwgQ29tbWVudFJhbmdlLCBDb21waWxlckhvc3QsIENvbXBpbGVyT3B0aW9ucywgQ29uc3RydWN0b3JEZWNsYXJhdGlvbiwgY3JlYXRlQXJyYXlMaXRlcmFsLCBjcmVhdGVBcnJheVR5cGVOb2RlLCBjcmVhdGVBcnJvd0Z1bmN0aW9uLCBjcmVhdGVBc3NpZ25tZW50LCBjcmVhdGVCaW5hcnksIGNyZWF0ZUJsb2NrLCBjcmVhdGVDYWxsLCBjcmVhdGVDb21waWxlckhvc3QsIGNyZWF0ZUVsZW1lbnRBY2Nlc3MsIGNyZWF0ZUV4cG9ydFNwZWNpZmllciwgY3JlYXRlRnVuY3Rpb25EZWNsYXJhdGlvbiwgY3JlYXRlRnVuY3Rpb25FeHByZXNzaW9uLCBjcmVhdGVGdW5jdGlvblR5cGVOb2RlLCBjcmVhdGVJZGVudGlmaWVyLCBjcmVhdGVJZiwgY3JlYXRlSW5kZXhTaWduYXR1cmUsIGNyZWF0ZUtleXdvcmRUeXBlTm9kZSwgY3JlYXRlTGl0ZXJhbCwgY3JlYXRlTGl0ZXJhbFR5cGVOb2RlLCBjcmVhdGVOYW1lZEV4cG9ydHMsIGNyZWF0ZU5vZGVBcnJheSwgY3JlYXRlTm90RW1pdHRlZFN0YXRlbWVudCwgY3JlYXRlTnVsbCwgY3JlYXRlT2JqZWN0TGl0ZXJhbCwgY3JlYXRlUGFyYW1ldGVyLCBjcmVhdGVQYXJlbiwgY3JlYXRlUHJvZ3JhbSwgY3JlYXRlUHJvcGVydHksIGNyZWF0ZVByb3BlcnR5QWNjZXNzLCBjcmVhdGVQcm9wZXJ0eUFzc2lnbm1lbnQsIGNyZWF0ZVByb3BlcnR5U2lnbmF0dXJlLCBjcmVhdGVTb3VyY2VGaWxlLCBjcmVhdGVTdGF0ZW1lbnQsIGNyZWF0ZVRva2VuLCBjcmVhdGVUeXBlTGl0ZXJhbE5vZGUsIGNyZWF0ZVR5cGVSZWZlcmVuY2VOb2RlLCBjcmVhdGVVbmlvblR5cGVOb2RlLCBjcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uLCBjcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCwgY3JlYXRlVmFyaWFibGVTdGF0ZW1lbnQsIEN1c3RvbVRyYW5zZm9ybWVycywgRGVjbGFyYXRpb24sIERlY2xhcmF0aW9uU3RhdGVtZW50LCBEZWNsYXJhdGlvbldpdGhUeXBlUGFyYW1ldGVycywgRGVjb3JhdG9yLCBEaWFnbm9zdGljLCBEaWFnbm9zdGljQ2F0ZWdvcnksIEVsZW1lbnRBY2Nlc3NFeHByZXNzaW9uLCBFbWl0RmxhZ3MsIEVtaXRSZXN1bHQsIEVudGl0eU5hbWUsIEVudW1EZWNsYXJhdGlvbiwgRW51bU1lbWJlciwgRXhwb3J0RGVjbGFyYXRpb24sIEV4cG9ydFNwZWNpZmllciwgRXhwcmVzc2lvbiwgRXhwcmVzc2lvblN0YXRlbWVudCwgZmxhdHRlbkRpYWdub3N0aWNNZXNzYWdlVGV4dCwgZm9yRWFjaENoaWxkLCBmb3JtYXREaWFnbm9zdGljcywgRm9ybWF0RGlhZ25vc3RpY3NIb3N0LCBGdW5jdGlvbkRlY2xhcmF0aW9uLCBGdW5jdGlvbkxpa2VEZWNsYXJhdGlvbiwgR2V0QWNjZXNzb3JEZWNsYXJhdGlvbiwgZ2V0Q29tYmluZWRNb2RpZmllckZsYWdzLCBnZXRDb21iaW5lZE5vZGVGbGFncywgZ2V0TGVhZGluZ0NvbW1lbnRSYW5nZXMsIGdldExpbmVBbmRDaGFyYWN0ZXJPZlBvc2l0aW9uLCBnZXRNdXRhYmxlQ2xvbmUsIGdldE9yaWdpbmFsTm9kZSwgZ2V0UHJlRW1pdERpYWdub3N0aWNzLCBnZXRTeW50aGV0aWNMZWFkaW5nQ29tbWVudHMsIGdldFN5bnRoZXRpY1RyYWlsaW5nQ29tbWVudHMsIGdldFRyYWlsaW5nQ29tbWVudFJhbmdlcywgSGVyaXRhZ2VDbGF1c2UsIElkZW50aWZpZXIsIElmU3RhdGVtZW50LCBJbXBvcnREZWNsYXJhdGlvbiwgSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24sIEltcG9ydFNwZWNpZmllciwgSW5kZXhLaW5kLCBJbnRlcmZhY2VEZWNsYXJhdGlvbiwgaXNBcnJvd0Z1bmN0aW9uLCBpc0Fzc2VydGlvbkV4cHJlc3Npb24sIGlzQmluYXJ5RXhwcmVzc2lvbiwgaXNDYWxsRXhwcmVzc2lvbiwgaXNFeHBvcnRBc3NpZ25tZW50LCBpc0V4cG9ydERlY2xhcmF0aW9uLCBpc0V4cHJlc3Npb25TdGF0ZW1lbnQsIGlzRXh0ZXJuYWxNb2R1bGUsIGlzRXh0ZXJuYWxNb2R1bGVSZWZlcmVuY2UsIGlzRnVuY3Rpb25EZWNsYXJhdGlvbiwgaXNJZGVudGlmaWVyLCBpc0ltcG9ydERlY2xhcmF0aW9uLCBpc0ltcG9ydEVxdWFsc0RlY2xhcmF0aW9uLCBpc0ludGVyZmFjZURlY2xhcmF0aW9uLCBpc0xpdGVyYWxFeHByZXNzaW9uLCBpc0xpdGVyYWxUeXBlTm9kZSwgaXNNZXRob2RTaWduYXR1cmUsIGlzTW9kdWxlQmxvY2ssIGlzTW9kdWxlRGVjbGFyYXRpb24sIGlzTmFtZWRJbXBvcnRzLCBpc05hbWVzcGFjZUV4cG9ydERlY2xhcmF0aW9uLCBpc05hbWVzcGFjZUltcG9ydCwgaXNOb25OdWxsRXhwcmVzc2lvbiwgaXNPYmplY3RMaXRlcmFsRXhwcmVzc2lvbiwgaXNQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiwgaXNQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24sIGlzUHJvcGVydHlBc3NpZ25tZW50LCBpc1Byb3BlcnR5RGVjbGFyYXRpb24sIGlzUHJvcGVydHlTaWduYXR1cmUsIGlzUXVhbGlmaWVkTmFtZSwgaXNTb3VyY2VGaWxlLCBpc1N0cmluZ0xpdGVyYWwsIGlzVHlwZVJlZmVyZW5jZU5vZGUsIGlzVmFyaWFibGVEZWNsYXJhdGlvbiwgaXNWYXJpYWJsZVN0YXRlbWVudCwgTWV0aG9kRGVjbGFyYXRpb24sIE1vZGlmaWVyLCBNb2RpZmllckZsYWdzLCBNb2R1bGVCbG9jaywgTW9kdWxlRGVjbGFyYXRpb24sIE1vZHVsZUtpbmQsIE1vZHVsZVJlc29sdXRpb25Ib3N0LCBOYW1lZERlY2xhcmF0aW9uLCBOYW1lZEltcG9ydHMsIE5hbWVzcGFjZUV4cG9ydERlY2xhcmF0aW9uLCBOb2RlLCBOb2RlQXJyYXksIE5vZGVGbGFncywgTm9uTnVsbEV4cHJlc3Npb24sIE5vdEVtaXR0ZWRTdGF0ZW1lbnQsIE9iamVjdEZsYWdzLCBPYmplY3RMaXRlcmFsRWxlbWVudExpa2UsIE9iamVjdExpdGVyYWxFeHByZXNzaW9uLCBPYmplY3RUeXBlLCBQYXJhbWV0ZXJEZWNsYXJhdGlvbiwgcGFyc2VDb21tYW5kTGluZSwgcGFyc2VKc29uQ29uZmlnRmlsZUNvbnRlbnQsIFByb2dyYW0sIFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiwgUHJvcGVydHlBc3NpZ25tZW50LCBQcm9wZXJ0eURlY2xhcmF0aW9uLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2lnbmF0dXJlLCBRdWFsaWZpZWROYW1lLCByZWFkQ29uZmlnRmlsZSwgcmVzb2x2ZU1vZHVsZU5hbWUsIFNjcmlwdFRhcmdldCwgU2V0QWNjZXNzb3JEZWNsYXJhdGlvbiwgc2V0Q29tbWVudFJhbmdlLCBzZXRFbWl0RmxhZ3MsIHNldE9yaWdpbmFsTm9kZSwgc2V0U291cmNlTWFwUmFuZ2UsIHNldFN5bnRoZXRpY0xlYWRpbmdDb21tZW50cywgc2V0U3ludGhldGljVHJhaWxpbmdDb21tZW50cywgc2V0VGV4dFJhbmdlLCBTaWduYXR1cmUsIFNpZ25hdHVyZURlY2xhcmF0aW9uLCBTaWduYXR1cmVLaW5kLCBTb3VyY2VGaWxlLCBTdGF0ZW1lbnQsIFN0cmluZ0xpdGVyYWwsIFN5bWJvbCwgU3ltYm9sRmxhZ3MsIFN5bWJvbEZvcm1hdEZsYWdzLCBTeW1ib2xXcml0ZXIsIFN5bnRheEtpbmQsIFN5bnRoZXNpemVkQ29tbWVudCwgc3lzLCBUZXh0UmFuZ2UsIFRva2VuLCBUcmFuc2Zvcm1hdGlvbkNvbnRleHQsIFRyYW5zZm9ybWVyLCBUcmFuc2Zvcm1lckZhY3RvcnksIFR5cGUsIFR5cGVBbGlhc0RlY2xhcmF0aW9uLCBUeXBlQXNzZXJ0aW9uLCBUeXBlQ2hlY2tlciwgVHlwZUVsZW1lbnQsIFR5cGVGbGFncywgVHlwZU5vZGUsIFR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbiwgVHlwZVJlZmVyZW5jZSwgVHlwZVJlZmVyZW5jZU5vZGUsIFVuaW9uVHlwZSwgdXBkYXRlQXNFeHByZXNzaW9uLCB1cGRhdGVCbG9jaywgdXBkYXRlQ29uc3RydWN0b3IsIHVwZGF0ZUV4cG9ydERlY2xhcmF0aW9uLCB1cGRhdGVFeHByZXNzaW9uV2l0aFR5cGVBcmd1bWVudHMsIHVwZGF0ZUdldEFjY2Vzc29yLCB1cGRhdGVIZXJpdGFnZUNsYXVzZSwgdXBkYXRlTWV0aG9kLCB1cGRhdGVOYW1lZEV4cG9ydHMsIHVwZGF0ZU5vbk51bGxFeHByZXNzaW9uLCB1cGRhdGVQYXJhbWV0ZXIsIHVwZGF0ZVNldEFjY2Vzc29yLCB1cGRhdGVTb3VyY2VGaWxlTm9kZSwgdXBkYXRlVHlwZUFzc2VydGlvbiwgVmFyaWFibGVEZWNsYXJhdGlvbiwgVmFyaWFibGVTdGF0ZW1lbnQsIHZpc2l0RWFjaENoaWxkLCB2aXNpdEZ1bmN0aW9uQm9keSwgdmlzaXRMZXhpY2FsRW52aXJvbm1lbnQsIHZpc2l0Tm9kZSwgVmlzaXRvciwgdmlzaXRQYXJhbWV0ZXJMaXN0LCBXcml0ZUZpbGVDYWxsYmFja30gZnJvbSAndHlwZXNjcmlwdCc7XG5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lIFJlLWV4cG9ydGluZyBKU0RvY1NpZ25hdHVyZSBmb3IgYmFja3dhcmRzIGNvbXBhdC5cbmV4cG9ydCBjb25zdCBTeW50YXhLaW5kSlNEb2NTaWduYXR1cmUgPSB0cy5TeW50YXhLaW5kLkpTRG9jU2lnbmF0dXJlO1xuXG4vLyBnZXRFbWl0RmxhZ3MgaXMgbm93IHByaXZhdGUgc3RhcnRpbmcgaW4gVFMgMi41LlxuLy8gU28gd2UgZGVmaW5lIG91ciBvd24gbWV0aG9kIHRoYXQgY2FsbHMgdGhyb3VnaCB0byBUeXBlU2NyaXB0IHRvIGRlZmVhdCB0aGVcbi8vIHZpc2liaWxpdHkgY29uc3RyYWludC5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbWl0RmxhZ3Mobm9kZTogdHMuTm9kZSk6IHRzLkVtaXRGbGFnc3x1bmRlZmluZWQge1xuICByZXR1cm4gKHRzIGFzIGFueSkuZ2V0RW1pdEZsYWdzKG5vZGUpO1xufVxuXG4vLyBCZXR3ZWVuIFR5cGVTY3JpcHQgMi40IGFuZCAyLjUgdXBkYXRlUHJvcGVydHkgd2FzIG1vZGlmaWVkLiBJZiBjYWxsZWQgd2l0aCAyLjQgcmUtb3JkZXIgdGhlXG4vLyBwYXJhbWV0ZXJzLlxuZXhwb3J0IGxldCB1cGRhdGVQcm9wZXJ0eSA9IHRzLnVwZGF0ZVByb3BlcnR5O1xuXG5jb25zdCBbbWFqb3IsIG1pbm9yXSA9IHRzLnZlcnNpb24uc3BsaXQoJy4nKTtcbmlmIChtYWpvciA9PT0gJzInICYmIG1pbm9yID09PSAnNCcpIHtcbiAgY29uc3QgdXBkYXRlUHJvcGVydHkyNCA9IHRzLnVwZGF0ZVByb3BlcnR5IGFzIGFueSBhcyB0eXBlb2YgdHMyNC51cGRhdGVQcm9wZXJ0eTtcbiAgdXBkYXRlUHJvcGVydHkgPSAobm9kZTogdHMuUHJvcGVydHlEZWNsYXJhdGlvbiwgZGVjb3JhdG9yczogUmVhZG9ubHlBcnJheTx0cy5EZWNvcmF0b3I+fHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzOiBSZWFkb25seUFycmF5PHRzLk1vZGlmaWVyPnx1bmRlZmluZWQsIG5hbWU6IHN0cmluZ3x0cy5Qcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uVG9rZW46IHRzLlF1ZXN0aW9uVG9rZW58dW5kZWZpbmVkLCB0eXBlOiB0cy5UeXBlTm9kZXx1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemVyOiB0cy5FeHByZXNzaW9ufHVuZGVmaW5lZCk6IHRzLlByb3BlcnR5RGVjbGFyYXRpb24gPT4ge1xuICAgIHJldHVybiB1cGRhdGVQcm9wZXJ0eTI0KFxuICAgICAgICAgICAgICAgbm9kZSBhcyBhbnkgYXMgdHMyNC5Qcm9wZXJ0eURlY2xhcmF0aW9uLCBkZWNvcmF0b3JzIGFzIGFueSBhcyB0czI0LkRlY29yYXRvcltdLFxuICAgICAgICAgICAgICAgbW9kaWZpZXJzIGFzIGFueSwgbmFtZSBhcyBhbnksIHR5cGUgYXMgYW55LMKgaW5pdGlhbGl6ZXIgYXMgYW55KSBhcyBhbnk7XG4gIH07XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90eXBlc2NyaXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUVIOzs7Ozs7T0FNRztJQUVILCtFQUErRTtJQUUvRSwrQkFBaUM7SUFLakMseUNBQSt1STtJQUE3dEksa0RBQUEsMEJBQTBCLENBQUE7SUFBRSxtREFBQSwyQkFBMkIsQ0FBQTtJQUFvTywwQ0FBQSxrQkFBa0IsQ0FBQTtJQUFFLDJDQUFBLG1CQUFtQixDQUFBO0lBQUUsMkNBQUEsbUJBQW1CLENBQUE7SUFBRSx3Q0FBQSxnQkFBZ0IsQ0FBQTtJQUFFLG9DQUFBLFlBQVksQ0FBQTtJQUFFLG1DQUFBLFdBQVcsQ0FBQTtJQUFFLGtDQUFBLFVBQVUsQ0FBQTtJQUFFLDBDQUFBLGtCQUFrQixDQUFBO0lBQUUsMkNBQUEsbUJBQW1CLENBQUE7SUFBRSw2Q0FBQSxxQkFBcUIsQ0FBQTtJQUFFLGlEQUFBLHlCQUF5QixDQUFBO0lBQUUsZ0RBQUEsd0JBQXdCLENBQUE7SUFBRSw4Q0FBQSxzQkFBc0IsQ0FBQTtJQUFFLHdDQUFBLGdCQUFnQixDQUFBO0lBQUUsZ0NBQUEsUUFBUSxDQUFBO0lBQUUsNENBQUEsb0JBQW9CLENBQUE7SUFBRSw2Q0FBQSxxQkFBcUIsQ0FBQTtJQUFFLHFDQUFBLGFBQWEsQ0FBQTtJQUFFLDZDQUFBLHFCQUFxQixDQUFBO0lBQUUsMENBQUEsa0JBQWtCLENBQUE7SUFBRSx1Q0FBQSxlQUFlLENBQUE7SUFBRSxpREFBQSx5QkFBeUIsQ0FBQTtJQUFFLGtDQUFBLFVBQVUsQ0FBQTtJQUFFLDJDQUFBLG1CQUFtQixDQUFBO0lBQUUsdUNBQUEsZUFBZSxDQUFBO0lBQUUsbUNBQUEsV0FBVyxDQUFBO0lBQUUscUNBQUEsYUFBYSxDQUFBO0lBQUUsc0NBQUEsY0FBYyxDQUFBO0lBQUUsNENBQUEsb0JB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LElBQUksS0FBSyxLQUFLLEdBQUcsRUFBRTtRQUNsQyxJQUFNLGtCQUFnQixHQUFHLEVBQUUsQ0FBQyxjQUFtRCxDQUFDO1FBQ2hGLHNCQUFjLEdBQUcsVUFBQyxJQUE0QixFQUFFLFVBQWlELEVBQy9FLFNBQStDLEVBQUUsSUFBNEIsRUFDN0UsYUFBeUMsRUFBRSxJQUEyQixFQUN0RSxXQUFvQztZQUNwRCxPQUFPLGtCQUFnQixDQUNaLElBQXVDLEVBQUUsVUFBcUMsRUFDOUUsU0FBZ0IsRUFBRSxJQUFXLEVBQUUsSUFBVyxFQUFFLFdBQWtCLENBQVEsQ0FBQztRQUNwRixDQUFDLENBQUM7S0FDSCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IEFic3RyYWN0aW9uIG92ZXIgdGhlIFR5cGVTY3JpcHQgQVBJIHRoYXQgbWFrZXMgbXVsdGlwbGVcbiAqIHZlcnNpb25zIG9mIFR5cGVTY3JpcHQgYXBwZWFyIHRvIGJlIGludGVyb3BlcmFibGUuIEFueSB0aW1lIGEgYnJlYWtpbmcgY2hhbmdlXG4gKiBpbiBUeXBlU2NyaXB0IGFmZmVjdHMgVHNpY2tsZSBjb2RlLCB3ZSBzaG91bGQgZXh0ZW5kIHRoaXMgc2hpbSB0byBwcmVzZW50IGFuXG4gKiB1bmJyb2tlbiBBUEkuXG4gKiBBbGwgY29kZSBpbiB0c2lja2xlIHNob3VsZCBpbXBvcnQgZnJvbSB0aGlzIGxvY2F0aW9uLCBub3QgZnJvbSAndHlwZXNjcmlwdCcuXG4gKi9cblxuLy8gdHNsaW50OmRpc2FibGU6bm8tYW55IFdlIG5lZWQgdG8gZG8gdmFyaW91cyB1bnNhZmUgY2FzdHMgYmV0d2VlbiBUUyB2ZXJzaW9uc1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuLy8gTm90ZSwgdGhpcyBpbXBvcnQgZGVwZW5kcyBvbiBhIGdlbnJ1bGUgY29weWluZyB0aGUgLmQudHMgZmlsZSB0byB0aGlzIHBhY2thZ2VcbmltcG9ydCAqIGFzIHRzMjQgZnJvbSAnLi90eXBlc2NyaXB0LTIuNCc7XG5cbmV4cG9ydCB7X19TdHJpbmcsIGFkZFN5bnRoZXRpY0xlYWRpbmdDb21tZW50LCBhZGRTeW50aGV0aWNUcmFpbGluZ0NvbW1lbnQsIEFzRXhwcmVzc2lvbiwgQXNzZXJ0aW9uRXhwcmVzc2lvbiwgQmluYXJ5RXhwcmVzc2lvbiwgQmxvY2ssIEJ1bmRsZSwgQ2FsbEV4cHJlc3Npb24sIENhbmNlbGxhdGlvblRva2VuLCBDbGFzc0RlY2xhcmF0aW9uLCBDbGFzc0VsZW1lbnQsIENsYXNzTGlrZURlY2xhcmF0aW9uLCBDb21tZW50UmFuZ2UsIENvbXBpbGVySG9zdCwgQ29tcGlsZXJPcHRpb25zLCBDb25zdHJ1Y3RvckRlY2xhcmF0aW9uLCBjcmVhdGVBcnJheUxpdGVyYWwsIGNyZWF0ZUFycmF5VHlwZU5vZGUsIGNyZWF0ZUFycm93RnVuY3Rpb24sIGNyZWF0ZUFzc2lnbm1lbnQsIGNyZWF0ZUJpbmFyeSwgY3JlYXRlQmxvY2ssIGNyZWF0ZUNhbGwsIGNyZWF0ZUNvbXBpbGVySG9zdCwgY3JlYXRlRWxlbWVudEFjY2VzcywgY3JlYXRlRXhwb3J0U3BlY2lmaWVyLCBjcmVhdGVGdW5jdGlvbkRlY2xhcmF0aW9uLCBjcmVhdGVGdW5jdGlvbkV4cHJlc3Npb24sIGNyZWF0ZUZ1bmN0aW9uVHlwZU5vZGUsIGNyZWF0ZUlkZW50aWZpZXIsIGNyZWF0ZUlmLCBjcmVhdGVJbmRleFNpZ25hdHVyZSwgY3JlYXRlS2V5d29yZFR5cGVOb2RlLCBjcmVhdGVMaXRlcmFsLCBjcmVhdGVMaXRlcmFsVHlwZU5vZGUsIGNyZWF0ZU5hbWVkRXhwb3J0cywgY3JlYXRlTm9kZUFycmF5LCBjcmVhdGVOb3RFbWl0dGVkU3RhdGVtZW50LCBjcmVhdGVOdWxsLCBjcmVhdGVPYmplY3RMaXRlcmFsLCBjcmVhdGVQYXJhbWV0ZXIsIGNyZWF0ZVBhcmVuLCBjcmVhdGVQcm9ncmFtLCBjcmVhdGVQcm9wZXJ0eSwgY3JlYXRlUHJvcGVydHlBY2Nlc3MsIGNyZWF0ZVByb3BlcnR5QXNzaWdubWVudCwgY3JlYXRlUHJvcGVydHlTaWduYXR1cmUsIGNyZWF0ZVNvdXJjZUZpbGUsIGNyZWF0ZVN0YXRlbWVudCwgY3JlYXRlVG9rZW4sIGNyZWF0ZVR5cGVMaXRlcmFsTm9kZSwgY3JlYXRlVHlwZVJlZmVyZW5jZU5vZGUsIGNyZWF0ZVVuaW9uVHlwZU5vZGUsIGNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb24sIGNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0LCBjcmVhdGVWYXJpYWJsZVN0YXRlbWVudCwgQ3VzdG9tVHJhbnNmb3JtZXJzLCBEZWNsYXJhdGlvbiwgRGVjbGFyYXRpb25TdGF0ZW1lbnQsIERlY2xhcmF0aW9uV2l0aFR5cGVQYXJhbWV0ZXJzLCBEZWNvcmF0b3IsIERpYWdub3N0aWMsIERpYWdub3N0aWNDYXRlZ29yeSwgRWxlbWVudEFjY2Vzc0V4cHJlc3Npb24sIEVtaXRGbGFncywgRW1pdFJlc3VsdCwgRW50aXR5TmFtZSwgRW51bURlY2xhcmF0aW9uLCBFbnVtTWVtYmVyLCBFeHBvcnREZWNsYXJhdGlvbiwgRXhwb3J0U3BlY2lmaWVyLCBFeHByZXNzaW9uLCBFeHByZXNzaW9uU3RhdGVtZW50LCBFeHByZXNzaW9uV2l0aFR5cGVBcmd1bWVudHMsIGZsYXR0ZW5EaWFnbm9zdGljTWVzc2FnZVRleHQsIGZvckVhY2hDaGlsZCwgZm9ybWF0RGlhZ25vc3RpY3MsIEZvcm1hdERpYWdub3N0aWNzSG9zdCwgRnVuY3Rpb25EZWNsYXJhdGlvbiwgRnVuY3Rpb25MaWtlRGVjbGFyYXRpb24sIEdldEFjY2Vzc29yRGVjbGFyYXRpb24sIGdldENvbWJpbmVkTW9kaWZpZXJGbGFncywgZ2V0Q29tYmluZWROb2RlRmxhZ3MsIGdldExlYWRpbmdDb21tZW50UmFuZ2VzLCBnZXRMaW5lQW5kQ2hhcmFjdGVyT2ZQb3NpdGlvbiwgZ2V0TXV0YWJsZUNsb25lLCBnZXRPcmlnaW5hbE5vZGUsIGdldFByZUVtaXREaWFnbm9zdGljcywgZ2V0U3ludGhldGljTGVhZGluZ0NvbW1lbnRzLCBnZXRTeW50aGV0aWNUcmFpbGluZ0NvbW1lbnRzLCBnZXRUcmFpbGluZ0NvbW1lbnRSYW5nZXMsIEhlcml0YWdlQ2xhdXNlLCBJZGVudGlmaWVyLCBJZlN0YXRlbWVudCwgSW1wb3J0RGVjbGFyYXRpb24sIEltcG9ydEVxdWFsc0RlY2xhcmF0aW9uLCBJbXBvcnRTcGVjaWZpZXIsIEluZGV4S2luZCwgSW50ZXJmYWNlRGVjbGFyYXRpb24sIGlzQXJyb3dGdW5jdGlvbiwgaXNBc3NlcnRpb25FeHByZXNzaW9uLCBpc0JpbmFyeUV4cHJlc3Npb24sIGlzQ2FsbEV4cHJlc3Npb24sIGlzRXhwb3J0QXNzaWdubWVudCwgaXNFeHBvcnREZWNsYXJhdGlvbiwgaXNFeHByZXNzaW9uU3RhdGVtZW50LCBpc0V4dGVybmFsTW9kdWxlLCBpc0V4dGVybmFsTW9kdWxlUmVmZXJlbmNlLCBpc0Z1bmN0aW9uRGVjbGFyYXRpb24sIGlzSWRlbnRpZmllciwgaXNJbXBvcnREZWNsYXJhdGlvbiwgaXNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbiwgaXNJbnRlcmZhY2VEZWNsYXJhdGlvbiwgaXNMaXRlcmFsRXhwcmVzc2lvbiwgaXNMaXRlcmFsVHlwZU5vZGUsIGlzTWV0aG9kU2lnbmF0dXJlLCBpc01vZHVsZUJsb2NrLCBpc01vZHVsZURlY2xhcmF0aW9uLCBpc05hbWVkSW1wb3J0cywgaXNOYW1lc3BhY2VFeHBvcnREZWNsYXJhdGlvbiwgaXNOYW1lc3BhY2VJbXBvcnQsIGlzTm9uTnVsbEV4cHJlc3Npb24sIGlzT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24sIGlzUGFyZW50aGVzaXplZEV4cHJlc3Npb24sIGlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBpc1Byb3BlcnR5QXNzaWdubWVudCwgaXNQcm9wZXJ0eURlY2xhcmF0aW9uLCBpc1Byb3BlcnR5U2lnbmF0dXJlLCBpc1F1YWxpZmllZE5hbWUsIGlzU291cmNlRmlsZSwgaXNTdHJpbmdMaXRlcmFsLCBpc1R5cGVSZWZlcmVuY2VOb2RlLCBpc1ZhcmlhYmxlRGVjbGFyYXRpb24sIGlzVmFyaWFibGVTdGF0ZW1lbnQsIE1ldGhvZERlY2xhcmF0aW9uLCBNb2RpZmllciwgTW9kaWZpZXJGbGFncywgTW9kdWxlQmxvY2ssIE1vZHVsZURlY2xhcmF0aW9uLCBNb2R1bGVLaW5kLCBNb2R1bGVSZXNvbHV0aW9uSG9zdCwgTmFtZWREZWNsYXJhdGlvbiwgTmFtZWRJbXBvcnRzLCBOYW1lc3BhY2VFeHBvcnREZWNsYXJhdGlvbiwgTm9kZSwgTm9kZUFycmF5LCBOb2RlQnVpbGRlckZsYWdzLCBOb2RlRmxhZ3MsIE5vbk51bGxFeHByZXNzaW9uLCBOb3RFbWl0dGVkU3RhdGVtZW50LCBPYmplY3RGbGFncywgT2JqZWN0TGl0ZXJhbEVsZW1lbnRMaWtlLCBPYmplY3RMaXRlcmFsRXhwcmVzc2lvbiwgT2JqZWN0VHlwZSwgUGFyYW1ldGVyRGVjbGFyYXRpb24sIHBhcnNlQ29tbWFuZExpbmUsIHBhcnNlSnNvbkNvbmZpZ0ZpbGVDb250ZW50LCBQcm9ncmFtLCBQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24sIFByb3BlcnR5QXNzaWdubWVudCwgUHJvcGVydHlEZWNsYXJhdGlvbiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNpZ25hdHVyZSwgUXVhbGlmaWVkTmFtZSwgcmVhZENvbmZpZ0ZpbGUsIHJlc29sdmVNb2R1bGVOYW1lLCBTY3JpcHRUYXJnZXQsIFNldEFjY2Vzc29yRGVjbGFyYXRpb24sIHNldENvbW1lbnRSYW5nZSwgc2V0RW1pdEZsYWdzLCBzZXRPcmlnaW5hbE5vZGUsIHNldFNvdXJjZU1hcFJhbmdlLCBzZXRTeW50aGV0aWNMZWFkaW5nQ29tbWVudHMsIHNldFN5bnRoZXRpY1RyYWlsaW5nQ29tbWVudHMsIHNldFRleHRSYW5nZSwgU2lnbmF0dXJlLCBTaWduYXR1cmVEZWNsYXJhdGlvbiwgU2lnbmF0dXJlS2luZCwgU291cmNlRmlsZSwgU3RhdGVtZW50LCBTdHJpbmdMaXRlcmFsLCBTeW1ib2wsIFN5bWJvbEZsYWdzLCBTeW1ib2xGb3JtYXRGbGFncywgU3ludGF4S2luZCwgU3ludGhlc2l6ZWRDb21tZW50LCBzeXMsIFRleHRSYW5nZSwgVGhpc0V4cHJlc3Npb24sIFRva2VuLCBUcmFuc2Zvcm1hdGlvbkNvbnRleHQsIFRyYW5zZm9ybWVyLCBUcmFuc2Zvcm1lckZhY3RvcnksIFR5cGUsIFR5cGVBbGlhc0RlY2xhcmF0aW9uLCBUeXBlQXNzZXJ0aW9uLCBUeXBlQ2hlY2tlciwgVHlwZUVsZW1lbnQsIFR5cGVGbGFncywgVHlwZU5vZGUsIFR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbiwgVHlwZVJlZmVyZW5jZSwgVHlwZVJlZmVyZW5jZU5vZGUsIFVuaW9uVHlwZSwgdXBkYXRlQXNFeHByZXNzaW9uLCB1cGRhdGVCbG9jaywgdXBkYXRlQ29uc3RydWN0b3IsIHVwZGF0ZUV4cG9ydERlY2xhcmF0aW9uLCB1cGRhdGVFeHByZXNzaW9uV2l0aFR5cGVBcmd1bWVudHMsIHVwZGF0ZUdldEFjY2Vzc29yLCB1cGRhdGVIZXJpdGFnZUNsYXVzZSwgdXBkYXRlTWV0aG9kLCB1cGRhdGVOYW1lZEV4cG9ydHMsIHVwZGF0ZU5vbk51bGxFeHByZXNzaW9uLCB1cGRhdGVQYXJhbWV0ZXIsIHVwZGF0ZVByb3BlcnR5QWNjZXNzLCB1cGRhdGVTZXRBY2Nlc3NvciwgdXBkYXRlU291cmNlRmlsZU5vZGUsIHVwZGF0ZVR5cGVBc3NlcnRpb24sIFZhcmlhYmxlRGVjbGFyYXRpb24sIFZhcmlhYmxlU3RhdGVtZW50LCB2aXNpdEVhY2hDaGlsZCwgdmlzaXRGdW5jdGlvbkJvZHksIHZpc2l0TGV4aWNhbEVudmlyb25tZW50LCB2aXNpdE5vZGUsIFZpc2l0b3IsIHZpc2l0UGFyYW1ldGVyTGlzdCwgV3JpdGVGaWxlQ2FsbGJhY2t9IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZSBSZS1leHBvcnRpbmcgSlNEb2NTaWduYXR1cmUgZm9yIGJhY2t3YXJkcyBjb21wYXQuXG5leHBvcnQgY29uc3QgU3ludGF4S2luZEpTRG9jU2lnbmF0dXJlID0gdHMuU3ludGF4S2luZC5KU0RvY1NpZ25hdHVyZTtcblxuLy8gZ2V0RW1pdEZsYWdzIGlzIG5vdyBwcml2YXRlIHN0YXJ0aW5nIGluIFRTIDIuNS5cbi8vIFNvIHdlIGRlZmluZSBvdXIgb3duIG1ldGhvZCB0aGF0IGNhbGxzIHRocm91Z2ggdG8gVHlwZVNjcmlwdCB0byBkZWZlYXQgdGhlXG4vLyB2aXNpYmlsaXR5IGNvbnN0cmFpbnQuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW1pdEZsYWdzKG5vZGU6IHRzLk5vZGUpOiB0cy5FbWl0RmxhZ3N8dW5kZWZpbmVkIHtcbiAgcmV0dXJuICh0cyBhcyBhbnkpLmdldEVtaXRGbGFncyhub2RlKTtcbn1cblxuLy8gQmV0d2VlbiBUeXBlU2NyaXB0IDIuNCBhbmQgMi41IHVwZGF0ZVByb3BlcnR5IHdhcyBtb2RpZmllZC4gSWYgY2FsbGVkIHdpdGggMi40IHJlLW9yZGVyIHRoZVxuLy8gcGFyYW1ldGVycy5cbmV4cG9ydCBsZXQgdXBkYXRlUHJvcGVydHkgPSB0cy51cGRhdGVQcm9wZXJ0eTtcblxuY29uc3QgW21ham9yLCBtaW5vcl0gPSB0cy52ZXJzaW9uLnNwbGl0KCcuJyk7XG5pZiAobWFqb3IgPT09ICcyJyAmJiBtaW5vciA9PT0gJzQnKSB7XG4gIGNvbnN0IHVwZGF0ZVByb3BlcnR5MjQgPSB0cy51cGRhdGVQcm9wZXJ0eSBhcyBhbnkgYXMgdHlwZW9mIHRzMjQudXBkYXRlUHJvcGVydHk7XG4gIHVwZGF0ZVByb3BlcnR5ID0gKG5vZGU6IHRzLlByb3BlcnR5RGVjbGFyYXRpb24sIGRlY29yYXRvcnM6IFJlYWRvbmx5QXJyYXk8dHMuRGVjb3JhdG9yPnx1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyczogUmVhZG9ubHlBcnJheTx0cy5Nb2RpZmllcj58dW5kZWZpbmVkLCBuYW1lOiBzdHJpbmd8dHMuUHJvcGVydHlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblRva2VuOiB0cy5RdWVzdGlvblRva2VufHVuZGVmaW5lZCwgdHlwZTogdHMuVHlwZU5vZGV8dW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplcjogdHMuRXhwcmVzc2lvbnx1bmRlZmluZWQpOiB0cy5Qcm9wZXJ0eURlY2xhcmF0aW9uID0+IHtcbiAgICByZXR1cm4gdXBkYXRlUHJvcGVydHkyNChcbiAgICAgICAgICAgICAgIG5vZGUgYXMgYW55IGFzIHRzMjQuUHJvcGVydHlEZWNsYXJhdGlvbiwgZGVjb3JhdG9ycyBhcyBhbnkgYXMgdHMyNC5EZWNvcmF0b3JbXSxcbiAgICAgICAgICAgICAgIG1vZGlmaWVycyBhcyBhbnksIG5hbWUgYXMgYW55LCB0eXBlIGFzIGFueSzCoGluaXRpYWxpemVyIGFzIGFueSkgYXMgYW55O1xuICB9O1xufVxuIl19

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc