@cdktn/provider-generator 0.25.0-pre.36 → 0.25.0-pre.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/get/constructs-maker.js +2 -1
- package/build/get/generator/models/resource-model.d.ts +3 -1
- package/build/get/generator/models/resource-model.js +16 -10
- package/build/get/generator/provider-generator.d.ts +3 -1
- package/build/get/generator/provider-generator.js +2 -2
- package/build/get/generator/resource-parser.d.ts +3 -1
- package/build/get/generator/resource-parser.js +7 -4
- package/package.json +4 -4
- package/src/get/constructs-maker.ts +1 -0
- package/src/get/generator/models/resource-model.ts +27 -9
- package/src/get/generator/provider-generator.ts +5 -1
- package/src/get/generator/resource-parser.ts +10 -1
|
@@ -219,6 +219,7 @@ class ConstructsMaker {
|
|
|
219
219
|
const endTSTimer = (0, commons_2.logTimespan)(`Generate Typescript for ${target.name}`);
|
|
220
220
|
const generator = new provider_generator_1.TerraformProviderGenerator(this.code, schema, {
|
|
221
221
|
importExtension: (_a = this.options.languageOptions) === null || _a === void 0 ? void 0 : _a.importExtension,
|
|
222
|
+
targetVersions: this.options.targetVersions,
|
|
222
223
|
});
|
|
223
224
|
generator.generate(target);
|
|
224
225
|
this.versions = { ...this.versions, ...generator.versions };
|
|
@@ -629,4 +630,4 @@ const determineGoModuleName = async (dir) => {
|
|
|
629
630
|
throw new Error(`Could not determine the root Go module name. No go.mod found in ${dir} and any parent directories`);
|
|
630
631
|
};
|
|
631
632
|
exports.determineGoModuleName = determineGoModuleName;
|
|
632
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0cy1tYWtlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZXQvY29uc3RydWN0cy1tYWtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpR0Esb0RBOEtDO0FBL1FELCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsNkNBQStCO0FBQy9CLDJDQUE2QjtBQUM3Qix5Q0FBc0M7QUFDdEMsNENBQStDO0FBQy9DLDRDQVl3QjtBQUN4Qiw0Q0FBMkQ7QUFDM0QsdUVBQTRFO0FBQzVFLG1FQUErRDtBQUMvRCwrQkFBNEI7QUFDNUIsNERBQW9EO0FBRXBELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQztBQUNwRSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRXBEOzs7Ozs7O0dBT0c7QUFDSCxLQUFLLFVBQVUsdUJBQXVCLENBQUMsR0FBVztJQUNoRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsY0FBSSxFQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLEVBQUU7UUFDaEUsR0FBRyxFQUFFLEdBQUc7S0FDVCxDQUFDLENBQUM7SUFDSCwyRUFBMkU7SUFDM0UsNkVBQTZFO0lBQzdFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUVpQixDQUFDO0lBQ2xELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RSxnRkFBZ0Y7SUFDaEYsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFD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TUFBTSxLQUFLLEdBQUcsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzVELElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN0QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMseUNBQXlDO2dCQUM5RyxPQUFPLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLHNEQUFzRCxJQUFJLHNEQUFzRCxDQUNqSCxDQUFDO1FBQ0osQ0FBQztRQUNELDBFQUEwRTtRQUMxRSw4Q0FBOEM7UUFDOUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUN6QixVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN4QyxDQUFDLFFBQVEsVUFBVSxLQUFLLFdBQVcsRUFBRTtJQUVyQyxNQUFNLElBQUksS0FBSyxDQUNiLG1FQUFtRSxHQUFHLDZCQUE2QixDQUNwRyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBbkNXLFFBQUEscUJBQXFCLHlCQW1DaEMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBDb2RlTWFrZXIgfSBmcm9tIFwiY29kZW1ha2VyXCI7XG5pbXBvcnQgeyBleGVjLCBta2R0ZW1wIH0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQge1xuICBUZXJyYWZvcm1EZXBlbmRlbmN5Q29uc3RyYWludCxcbiAgbG9nZ2VyLFxuICBsb2dUaW1lc3BhbixcbiAgQ29uc3RydWN0c01ha2VyUHJvdmlkZXJUYXJnZXQsXG4gIENvbnN0cnVjdHNNYWtlck1vZHVsZVRhcmdldCxcbiAgQ29uc3RydWN0c01ha2VyVGFyZ2V0LFxuICBQcm92aWRlclNjaGVtYSxcbiAgTW9kdWxlU2NoZW1hLFxuICBFcnJvcnMsXG4gIHR5cGUgTGFuZ3VhZ2VPcHRpb25zLFxuICB0eXBlIFRlcnJhZm9ybVRhcmdldFZlcnNpb25zLFxufSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IERJU1BMQVlfVkVSU0lPTiwgTGFuZ3VhZ2UgfSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IFRlcnJhZm9ybVByb3ZpZGVyR2VuZXJhdG9yIH0gZnJvbSBcIi4vZ2VuZXJhdG9yL3Byb3ZpZGVyLWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgTW9kdWxlR2VuZXJhdG9yIH0gZnJvbSBcIi4vZ2VuZXJhdG9yL21vZHVsZS1nZW5lcmF0b3JcIjtcbmltcG9ydCB7IGdsb2IgfSBmcm9tIFwiZ2xvYlwiO1xuaW1wb3J0IHsgcmVhZFNjaGVtYSB9IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItc2NoZW1hXCI7XG5cbmNvbnN0IHBhY21ha01vZHVsZSA9IHJlcXVpcmUucmVzb2x2ZShcImpzaWktcGFjbWFrL2Jpbi9qc2lpLXBhY21ha1wiKTtcbmNvbnN0IGpzaWlNb2R1bGUgPSByZXF1aXJlLnJlc29sdmUoXCJqc2lpL2Jpbi9qc2lpXCIpO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGZpbGVzIGBucG0gcGFja2Agd291bGQgcHVibGlzaCBmb3IgdGhlIHBhY2thZ2UgYXQgYGRpcmAsIGFzIHBhdGhzIHJlbGF0aXZlIHRvIGBkaXJgLiBUaGlzIGlzIHRoZSBzZXRcbiAqIGpzaWkgbmVlZHMgdG8gY29tcGlsZSBhZ2FpbnN0IGEgZGVwZW5kZW5jeSDigJQgaXRzIHNvdXJjZXMgYW5kIGRlY2xhcmVkIG1ldGFkYXRhIOKAlCBhbmQgZXhjbHVkZXMgYnVpbGQgb3V0cHV0c1xuICogKGBkaXN0YCwgYC5wYWNrLXN0YWdpbmdgLCBgbm9kZV9tb2R1bGVzYCwgdHNidWlsZGluZm8sIC4uLikgdGhhdCBhIGJsYW5rZXQgZGlyZWN0b3J5IGNvcHkgd291bGQgb3RoZXJ3aXNlIHB1bGwgaW4uXG4gKlxuICogQHBhcmFtIGRpciAtIEFic29sdXRlIHBhdGggdG8gdGhlIHBhY2thZ2UgZGlyZWN0b3J5IHRvIGluc3BlY3QgKG11c3QgY29udGFpbiBhIHBhY2thZ2UuanNvbikuXG4gKiBAcmV0dXJucyBQdWJsaXNoYWJsZSBmaWxlIHBhdGhzLCByZWxhdGl2ZSB0byBgZGlyYCwgd2l0aCBgLi5gLWVzY2FwZSBwYXRocyAoZnJvbSBmb2xsb3dpbmcgcG5wbSBzeW1saW5rcykgZHJvcHBlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVB1Ymxpc2hhYmxlRmlsZXMoZGlyOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IHN0ZG91dCA9IGF3YWl0IGV4ZWMoXCJucG1cIiwgW1wicGFja1wiLCBcIi0tZHJ5LXJ1blwiLCBcIi0tanNvblwiXSwge1xuICAgIGN3ZDogZGlyLFxuICB9KTtcbiAgLy8gbnBtIDw9MTEgcmVwb3J0cyBhbiBhcnJheSBvZiBwYWNrZWQgcGFja2FnZXM7IG5wbSA+PTEyIHJlcG9ydHMgYW4gb2JqZWN0XG4gIC8vIGtleWVkIGJ5IHBhY2thZ2UgbmFtZS4gQWNjZXB0IGVpdGhlciBzbyB0aGUgYnVpbGQgaXMgbnBtLXZlcnNpb24gYWdub3N0aWMuXG4gIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3Rkb3V0KSBhc1xuICAgIHwgQXJyYXk8eyBmaWxlczogeyBwYXRoOiBzdHJpbmcgfVtdIH0+XG4gICAgfCBSZWNvcmQ8c3RyaW5nLCB7IGZpbGVzOiB7IHBhdGg6IHN0cmluZyB9W10gfT47XG4gIGNvbnN0IHBhY2tJbmZvID0gQXJyYXkuaXNBcnJheShwYXJzZWQpID8gcGFyc2VkWzBdIDogT2JqZWN0LnZhbHVlcyhwYXJzZWQpWzBdO1xuICAvLyBEcm9wIGAuLmAtZXNjYXBlIHBhdGhzIG5wbSBlbWl0cyB3aGVuIGZvbGxvd2luZyBwbnBtJ3Mgbm9kZV9tb2R1bGVzIHN5bWxpbmtzLlxuICByZXR1cm4gcGFja0luZm8uZmlsZXMubWFwKChmKSA9PiBmLnBhdGgpLmZpbHRlcigocCkgPT4gIXAuaW5jbHVkZXMoXCIuLlwiKSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVKU0lJT3B0aW9ucyB7XG4gIGVudHJ5cG9pbnQ6IHN0cmluZztcbiAgZGVwczogc3RyaW5nW107XG4gIG1vZHVsZUtleTogc3RyaW5nO1xuICBleHBvcnRzPzogUmVjb3JkPHN0cmluZywgRXhwb3J0RGVmaW5pdGlvbiB8IHN0cmluZz47XG4gIGpzaWk/OiBKc2lpT3V0cHV0T3B0aW9ucztcbiAgcHl0aG9uPzogUHl0aG9uT3V0cHV0T3B0aW9ucztcbiAgamF2YT86IEphdmFPdXRwdXRPcHRpb25zO1xuICBjc2hhcnA/OiBDU2hhcnBPdXRwdXRPcHRpb25zO1xuICBnb2xhbmc/OiBHb0xhbmdPdXRwdXRPcHRpb25zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEpzaWlPdXRwdXRPcHRpb25zIHtcbiAgcGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFB5dGhvbk91dHB1dE9wdGlvbnMge1xuICBvdXRkaXI6IHN0cmluZztcbiAgbW9kdWxlTmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEphdmFPdXRwdXRPcHRpb25zIHtcbiAgb3V0ZGlyOiBzdHJpbmc7XG4gIHBhY2thZ2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDU2hhcnBPdXRwdXRPcHRpb25zIHtcbiAgb3V0ZGlyOiBzdHJpbmc7XG4gIG5hbWVzcGFjZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdvTGFuZ091dHB1dE9wdGlvbnMge1xuICBvdXRkaXI6IHN0cmluZztcbiAgbW9kdWxlTmFtZTogc3RyaW5nO1xuICBwYWNrYWdlTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNlZSBodHRwczovL25vZGVqcy5vcmcvYXBpL3BhY2thZ2VzLmh0bWwjY29uZGl0aW9uYWwtZXhwb3J0cyBmb3IgbW9yZSBpbmZvcm1hdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydERlZmluaXRpb24ge1xuICBub2RlPzogc3RyaW5nO1xuICBpbXBvcnQ/OiBzdHJpbmc7XG4gIHJlcXVpcmU/OiBzdHJpbmc7XG4gIGRlZmF1bHQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUpzaWlMYW5ndWFnZShcbiAgY29kZTogQ29kZU1ha2VyLFxuICBvcHRzOiBHZW5lcmF0ZUpTSUlPcHRpb25zLFxuICBvdXRwdXRQYXRoOiBzdHJpbmcsXG4gIGRpc2FsbG93ZWRGaWxlR2xvYnM6IHN0cmluZ1tdID0gW10sXG4pIHtcbiAgYXdhaXQgbWtkdGVtcChhc3luYyAoc3RhZ2luZykgPT4ge1xuICAgIC8vIHRoaXMgaXMgbm90IHR5cGVzY3JpcHQsIHNvIHdlIGdlbmVyYXRlIGluIGEgc3RhZ2luZyBkaXJlY3RvcnkgYW5kXG4gICAgLy8gdXNlIGpzaWktc3JjbWFrIHRvIGNvbXBpbGUgYW5kIGV4dHJhY3QgdGhlIGxhbmd1YWdlLXNwZWNpZmljIHNvdXJjZVxuICAgIC8vIGludG8gb3VyIHByb2plY3QuXG4gICAgYXdhaXQgY29kZS5zYXZlKHN0YWdpbmcpO1xuXG4gICAgLy8gYXMgdGhlIGFib3ZlIGdlbmVyYXRlZCB0aGUgVHlwZXNjcmlwdCBjb2RlIGZvciBhbGwgcHJvdmlkZXJzIGFuZCBtb2R1bGVzLFxuICAgIC8vIHdlIG5lZWQgdG8gZmlsdGVyIG91dCB0aGUgb25lcyB3ZSBkb24ndCBuZWVkIHNvIHRoZXkgZG9uJ3QgZW5kIHVwIGluIHRoZSBKU0lJIGJ1bmRsZSBvdmVyIGFuZCBvdmVyIGFnYWluLlxuICAgIGNvbnN0IGZpbGVzVG9EZWxldGUgPSBkaXNhbGxvd2VkRmlsZUdsb2JzLmZsYXRNYXAoKHBhdHRlcm4pID0+XG4gICAgICBnbG9iLnN5bmMocGF0dGVybiwgeyBjd2Q6IHN0YWdpbmcgfSksXG4gICAgKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGZpbGVzVG9EZWxldGUubWFwKChmaWxlKSA9PiBmcy5yZW1vdmUocGF0aC5qb2luKHN0YWdpbmcsIGZpbGUpKSksXG4gICAgKTtcblxuICAgIC8vIENvbXBpbGUgd2l0aCBKU0lJXG4gICAgY29uc3QganNpaUFyZ3MgPSBbXCItLXNpbGVuY2Utd2FybmluZ3NcIiwgXCJyZXNlcnZlZC13b3JkXCJdO1xuICAgIGNvbnN0IGpzaWlFbnRyeXBvaW50ID0gb3B0cy5lbnRyeXBvaW50O1xuICAgIGNvbnN0IGJhc2VwYXRoID0gcGF0aC5qb2luKFxuICAgICAgcGF0aC5kaXJuYW1lKGpzaWlFbnRyeXBvaW50KSxcbiAgICAgIHBhdGguYmFzZW5hbWUoanNpaUVudHJ5cG9pbnQsIFwiLnRzXCIpLFxuICAgICk7XG5cbiAgICBjb25zdCBtb2R1bGVLZXkgPSBvcHRzLm1vZHVsZUtleS5yZXBsYWNlKC9cXC4vZywgXCJcIikucmVwbGFjZSgvXFwvL2csIFwiXCIpO1xuICAgIGNvbnN0IG1vZHVsZURpcnMgPSBvcHRzLmRlcHM7XG4gICAgY29uc3QgdGFyZ2V0czogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIGNvbnN0IGRlcHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGRpciBvZiBtb2R1bGVEaXJzKSB7XG4gICAgICAvLyByZWFkIG1vZHVsZSBtZXRhZGF0YVxuICAgICAgY29uc3QgbWV0YWRhdGEgPSBhd2FpdCBmcy5yZWFkSnNvbihwYXRoLmpvaW4oZGlyLCBcInBhY2thZ2UuanNvblwiKSk7XG4gICAgICBjb25zdCBtb2R1bGVOYW1lOiBzdHJpbmcgPSBtZXRhZGF0YS5uYW1lO1xuICAgICAgY29uc3QgbW9kdWxlVmVyc2lvbjogc3RyaW5nID0gbWV0YWRhdGEudmVyc2lvbjtcblxuICAgICAgY29uc3QgdGFyZ2V0ZGlyID0gcGF0aC5qb2luKFxuICAgICAgICBwYXRoLmpvaW4oc3RhZ2luZywgXCJub2RlX21vZHVsZXNcIiksXG4gICAgICAgIG1vZHVsZU5hbWUsXG4gICAgICApO1xuICAgICAgYXdhaXQgZnMubWtkaXJwKHRhcmdldGRpcik7XG4gICAgICAvLyBDb3B5IG9ubHkgdGhlIGRlcCdzIHB1Ymxpc2hhYmxlIGZpbGVzICh3aGF0IGBucG0gcGFja2Agd291bGQgc2hpcCkgaW50byB0aGUganNpaSBjb21waWxlIGJ1bmRsZS5cbiAgICAgIGZvciAoY29uc3QgcmVsUGF0aCBvZiBhd2FpdCByZXNvbHZlUHVibGlzaGFibGVGaWxlcyhkaXIpKSB7XG4gICAgICAgIGNvbnN0IHNyYyA9IHBhdGguam9pbihkaXIsIHJlbFBhdGgpO1xuICAgICAgICBjb25zdCBkc3QgPSBwYXRoLmpvaW4odGFyZ2V0ZGlyLCByZWxQYXRoKTtcbiAgICAgICAgYXdhaXQgZnMubWtkaXJwKHBhdGguZGlybmFtZShkc3QpKTtcbiAgICAgICAgYXdhaXQgZnMuY29weShzcmMsIGRzdCwgeyBkZXJlZmVyZW5jZTogdHJ1ZSB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gYWRkIHRvIFwiZGVwc1wiIGFuZCBcInBlZXIgZGVwc1wiXG4gICAgICBpZiAoIW1vZHVsZU5hbWUuc3RhcnRzV2l0aChcIkB0eXBlcy9cIikpIHtcbiAgICAgICAgZGVwc1ttb2R1bGVOYW1lXSA9IG1vZHVsZVZlcnNpb247XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHBrZyA9IHtcbiAgICAgIG5hbWU6IG1vZHVsZUtleSxcbiAgICAgIHZlcnNpb246IFwiMC4wLjBcIixcbiAgICAgIGF1dGhvcjogXCJnZW5lcmF0ZWRAZ2VuZXJhdGVkLmNvbVwiLFxuICAgICAgbWFpbjogYCR7YmFzZXBhdGh9LmpzYCxcbiAgICAgIHR5cGVzOiBgJHtiYXNlcGF0aH0uZC50c2AsXG4gICAgICBsaWNlbnNlOiBcIlVOTElDRU5TRURcIixcbiAgICAgIHJlcG9zaXRvcnk6IHsgdXJsOiBcImh0dHA6Ly9nZW5lcmF0ZWRcIiwgdHlwZTogXCJnaXRcIiB9LFxuICAgICAganNpaToge1xuICAgICAgICBvdXRkaXI6IFwiZGlzdFwiLFxuICAgICAgICB0YXJnZXRzOiB0YXJnZXRzLFxuICAgICAgfSxcbiAgICAgIGRlcGVuZGVuY2llczogZGVwcyxcbiAgICAgIHBlZXJEZXBlbmRlbmNpZXM6IGRlcHMsXG4gICAgfTtcblxuICAgIGlmIChvcHRzLmV4cG9ydHMpIHtcbiAgICAgIChwa2cgYXMgUmVjb3JkPHN0cmluZywgYW55PikuZXhwb3J0cyA9IG9wdHMuZXhwb3J0cztcbiAgICB9XG4gICAgaWYgKG9wdHMucHl0aG9uKSB7XG4gICAgICB0YXJnZXRzLnB5dGhvbiA9IHtcbiAgICAgICAgZGlzdE5hbWU6IFwiZ2VuZXJhdGVkXCIsXG4gICAgICAgIG1vZHVsZTogb3B0cy5weXRob24ubW9kdWxlTmFtZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuamF2YSkge1xuICAgICAgdGFyZ2V0cy5qYXZhID0ge1xuICAgICAgICBwYWNrYWdlOiBvcHRzLmphdmEucGFja2FnZSxcbiAgICAgICAgbWF2ZW46IHtcbiAgICAgICAgICBncm91cElkOiBcImdlbmVyYXRlZFwiLFxuICAgICAgICAgIGFydGlmYWN0SWQ6IFwiZ2VuZXJhdGVkXCIsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChvcHRzLmNzaGFycCkge1xuICAgICAgdGFyZ2V0cy5kb3RuZXQgPSB7XG4gICAgICAgIG5hbWVzcGFjZTogb3B0cy5jc2hhcnAubmFtZXNwYWNlLFxuICAgICAgICBwYWNrYWdlSWQ6IG9wdHMuY3NoYXJwLm5hbWVzcGFjZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuZ29sYW5nKSB7XG4gICAgICB0YXJnZXRzLmdvID0ge1xuICAgICAgICBtb2R1bGVOYW1lOiBvcHRzLmdvbGFuZy5tb2R1bGVOYW1lLFxuICAgICAgICBwYWNrYWdlTmFtZTogb3B0cy5nb2xhbmcucGFja2FnZU5hbWUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGF3YWl0IGZzLndyaXRlRmlsZShcbiAgICAgIHBhdGguam9pbihzdGFnaW5nLCBcInBhY2thZ2UuanNvblwiKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHBrZywgdW5kZWZpbmVkLCAyKSxcbiAgICApO1xuXG4gICAgY29uc3QgZW5kSnNpaVRpbWVyID0gbG9nVGltZXNwYW4oXCJqc2lpXCIpO1xuICAgIGF3YWl0IGV4ZWMoanNpaU1vZHVsZSwganNpaUFyZ3MsIHtcbiAgICAgIGN3ZDogc3RhZ2luZyxcbiAgICB9KTtcbiAgICBlbmRKc2lpVGltZXIoKTtcblxuICAgIC8vIGV4dHJhY3QgLmpzaWkgaWYgcmVxdWVzdGVkXG4gICAgaWYgKG9wdHMuanNpaSkge1xuICAgICAgYXdhaXQgZnMuY29weShwYXRoLmpvaW4oc3RhZ2luZywgXCIuanNpaVwiKSwgb3B0cy5qc2lpLnBhdGgpO1xuICAgIH1cblxuICAgIC8vIHJ1biBwYWNtYWsgdG8gZ2VuZXJhdGUgY29kZVxuICAgIGNvbnN0IGVuZEpzaWlQYWNtYWtUaW1lciA9IGxvZ1RpbWVzcGFuKFwianNpaS1wYWNtYWtcIik7XG4gICAgYXdhaXQgZXhlYyhwYWNtYWtNb2R1bGUsIFtcIi0tY29kZS1vbmx5XCJdLCB7IGN3ZDogc3RhZ2luZyB9KTtcbiAgICBlbmRKc2lpUGFjbWFrVGltZXIoKTtcblxuICAgIGlmIChvcHRzLnB5dGhvbikge1xuICAgICAgY29uc3QgcmVsZGlyID0gb3B0cy5weXRob24ubW9kdWxlTmFtZS5yZXBsYWNlKC9cXC4vZywgXCIvXCIpOyAvLyBqc2lpIHJlcGxhY2VzIFwiLlwiIHdpdGggXCIvXCJcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHBhdGgucmVzb2x2ZShcbiAgICAgICAgcGF0aC5qb2luKHN0YWdpbmcsIFwiZGlzdC9weXRob24vc3JjXCIsIHJlbGRpciksXG4gICAgICApO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gcGF0aC5qb2luKG9wdHMucHl0aG9uLm91dGRpciwgcmVsZGlyKTtcbiAgICAgIGF3YWl0IGZzLm1vdmUoc291cmNlLCB0YXJnZXQsIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmphdmEpIHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHBhdGgucmVzb2x2ZShwYXRoLmpvaW4oc3RhZ2luZywgXCJkaXN0L2phdmEvc3JjL1wiKSk7XG4gICAgICBjb25zdCB0YXJnZXQgPSBwYXRoLmpvaW4ob3B0cy5qYXZhLm91dGRpciwgXCJzcmMvXCIpO1xuICAgICAgLy8gUHJlLWNyZWF0ZSBzaGFyZWQgcGFja2FnZSBkaXJlY3Rvcmllcy5cbiAgICAgIGNvbnN0IHBhY2thZ2VEaXIgPSBvcHRzLmphdmEucGFja2FnZS5yZXBsYWNlKC9cXC4vZywgXCIvXCIpO1xuICAgICAgYXdhaXQgZnMubWtkaXJwKHBhdGguam9pbih0YXJnZXQsIFwibWFpbi9qYXZhXCIsIHBhY2thZ2VEaXIpKTtcbiAgICAgIGF3YWl0IGZzLm1rZGlycChwYXRoLmpvaW4odGFyZ2V0LCBcIm1haW4vcmVzb3VyY2VzXCIsIHBhY2thZ2VEaXIpKTtcbiAgICAgIGF3YWl0IGZzLmNvcHkoc291cmNlLCB0YXJnZXQsIHsgb3ZlcndyaXRlOiBmYWxzZSB9KTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5jc2hhcnApIHtcbiAgICAgIGNvbnN0IHJlbGRpciA9IG9wdHMuY3NoYXJwLm5hbWVzcGFjZTtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHBhdGgucmVzb2x2ZShwYXRoLmpvaW4oc3RhZ2luZywgXCJkaXN0L2RvdG5ldC9cIiwgcmVsZGlyKSk7XG4gICAgICBjb25zdCB0YXJnZXQgPSBwYXRoLmpvaW4ob3B0cy5jc2hhcnAub3V0ZGlyLCByZWxkaXIpO1xuICAgICAgYXdhaXQgZnMubW92ZShzb3VyY2UsIHRhcmdldCwgeyBvdmVyd3JpdGU6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuZ29sYW5nKSB7XG4gICAgICBjb25zdCByZWxkaXIgPSBvcHRzLmdvbGFuZy5wYWNrYWdlTmFtZTtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHBhdGgucmVzb2x2ZShwYXRoLmpvaW4oc3RhZ2luZywgXCJkaXN0L2dvL1wiLCByZWxkaXIpKTtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHBhdGguam9pbihvcHRzLmdvbGFuZy5vdXRkaXIsIHJlbGRpcik7XG4gICAgICBhd2FpdCBmcy5tb3ZlKHNvdXJjZSwgdGFyZ2V0LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICAgIC8vIHJlbW92ZSBnby5tb2QgYXMgdGhpcyB3b3VsZCBtYWtlIGl0IGEgc3VibW9kdWxlXG4gICAgICBhd2FpdCBmcy5yZW1vdmUocGF0aC5qb2luKHRhcmdldCwgXCJnby5tb2RcIikpO1xuICAgIH1cblxuICAgIFtcInZlcnNpb25zLmpzb25cIiwgXCJjb25zdHJhaW50cy5qc29uXCJdLmZvckVhY2goKGZpbGUpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZzLmNvcHlTeW5jKFxuICAgICAgICAgIHBhdGgucmVzb2x2ZShzdGFnaW5nLCBmaWxlKSxcbiAgICAgICAgICBwYXRoLnJlc29sdmUob3V0cHV0UGF0aCwgZmlsZSksXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgRmFpbGVkIHRvIGNvcHkgJHtmaWxlfTogJHtlfWApO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxudHlwZSBDb25zdHJhaW50RmlsZSA9IHtcbiAgcHJvdmlkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBjZGt0Zjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHByb2plY3QncyBkZWNsYXJlZCB0YXJnZXRWZXJzaW9ucyAoY2RrdGYuanNvbiksIHN0YW1wZWQgZm9yXG4gICAqIGRpYWdub3N0aWNzL2NhY2hlIGRlYnVnZ2luZy4gUHVyZWx5IGluZm9ybWF0aW9uYWwgLSBuZXZlciByZWFkIGJhY2sgdG9cbiAgICogZGVjaWRlIHdoZXRoZXIgY2FjaGVkIG91dHB1dCBpcyBzdGFsZSwgc2luY2UgaXQgZG9lc24ndCBhZmZlY3QgdGhlXG4gICAqIGdlbmVyYXRlZCBzdXJmYWNlICh0aGUgZnVsbCBzdXJmYWNlIGlzIGFsd2F5cyBnZW5lcmF0ZWQ7IG5hcnJvd2luZ1xuICAgKiBoYXBwZW5zIGF0IHN5bnRoKS5cbiAgICovXG4gIHRhcmdldFZlcnNpb25zPzogVGVycmFmb3JtVGFyZ2V0VmVyc2lvbnM7XG4gIC8qKlxuICAgKiBJZGVudGl0eSBvZiB0aGUgQ0xJICh0ZXJyYWZvcm0vb3BlbnRvZnUpIHRoYXQgZmV0Y2hlZCB0aGUgc2NoZW1hcyB1c2VkXG4gICAqIGZvciB0aGlzIGdlbmVyYXRpb24sIHN0YW1wZWQgZm9yIGRpYWdub3N0aWNzL2NhY2hlIGRlYnVnZ2luZy5cbiAgICovXG4gIGNsaT86IHsgbmFtZT86IHN0cmluZzsgdmVyc2lvbj86IHN0cmluZyB9O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBHZXRPcHRpb25zIHtcbiAgcmVhZG9ubHkgdGFyZ2V0TGFuZ3VhZ2U6IExhbmd1YWdlO1xuICByZWFkb25seSBjb2RlTWFrZXJPdXRwdXQ6IHN0cmluZztcbiAgcmVhZG9ubHkganNpaVBhcmFsbGVsaXNtPzogbnVtYmVyO1xuICAvKipcbiAgICogUGF0aCB0byBjb3B5IHRoZSBvdXRwdXQgLmpzaWkgZmlsZS5cbiAgICogQGRlZmF1bHQgLSBqc2lpIGZpbGUgaXMgbm90IGVtaXR0ZWRcbiAgICovXG4gIHJlYWRvbmx5IG91dHB1dEpzaWk/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBMYW5ndWFnZS1zcGVjaWZpYyBjb2RlIGdlbmVyYXRpb24gb3B0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IGxhbmd1YWdlT3B0aW9ucz86IExhbmd1YWdlT3B0aW9ucztcbiAgLyoqXG4gICAqIFRoZSBwcm9qZWN0J3MgZGVjbGFyZWQgdGFyZ2V0VmVyc2lvbnMgKGNka3RmLmpzb24pLiBVc2VkIHRvIGRyaXZlIHRoZVxuICAgKiBmZXRjaC10aW1lIGVtaXNzaW9uLWdhcCB3YXJuaW5nIGluIEBjZGt0bi9wcm92aWRlci1zY2hlbWEgYW5kIHRvIHN0YW1wXG4gICAqIHRoZSBnZW5lcmF0ZWQgY29uc3RyYWludHMuanNvbiBmb3IgZGlhZ25vc3RpY3MuIERvZXMgTk9UIGZpbHRlciBjb2RlZ2VuOlxuICAgKiB0aGUgZnVsbCBzdXJmYWNlIGlzIGFsd2F5cyBnZW5lcmF0ZWQsIG5hcnJvd2luZyBoYXBwZW5zIGF0IHN5bnRoLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0VmVyc2lvbnM/OiBUZXJyYWZvcm1UYXJnZXRWZXJzaW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIENvbnN0cnVjdHNNYWtlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29kZU1ha2VyT3V0ZGlyOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29kZTogQ29kZU1ha2VyO1xuICBwcml2YXRlIHZlcnNpb25zOiB7IFtwcm92aWRlck5hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9O1xuICAvKiogUmVzb3VyY2UgZGlyZWN0b3J5IG5hbWVzIGVtaXR0ZWQgcGVyIHByb3ZpZGVyIGZvbGRlciBkdXJpbmcgdGhpcyBydW4gKi9cbiAgcHVibGljIGVtaXR0ZWRSZXNvdXJjZUZvbGRlcnM6IHsgW3Byb3ZpZGVyTmFtZTogc3RyaW5nXTogc3RyaW5nW10gfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IEdldE9wdGlvbnMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzY2hlbWFDYWNoZVBhdGg/OiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXBvcnRUZWxlbWV0cnk6IChwYXlsb2FkOiB7XG4gICAgICB0YXJnZXRMYW5ndWFnZTogc3RyaW5nO1xuICAgICAgdHJhY2tpbmdQYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIH0pID0+IFByb21pc2U8dm9pZD4gPSBhc3luYyAoKSA9PiB7fSxcbiAgKSB7XG4gICAgdGhpcy5jb2RlTWFrZXJPdXRkaXIgPSBwYXRoLnJlc29sdmUodGhpcy5vcHRpb25zLmNvZGVNYWtlck91dHB1dCk7XG4gICAgZnMubWtkaXJwU3luYyh0aGlzLmNvZGVNYWtlck91dGRpcik7XG4gICAgdGhpcy5jb2RlID0gbmV3IENvZGVNYWtlcigpO1xuICAgIHRoaXMudmVyc2lvbnMgPSB7fTtcbiAgICB0aGlzLmVtaXR0ZWRSZXNvdXJjZUZvbGRlcnMgPSB7fTtcbiAgfVxuICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlVHlwZXNjcmlwdFByb3ZpZGVyKFxuICAgIHRhcmdldDogQ29uc3RydWN0c01ha2VyUHJvdmlkZXJUYXJnZXQsXG4gICAgc2NoZW1hOiBQcm92aWRlclNjaGVtYSxcbiAgKSB7XG4gICAgY29uc3QgZW5kVFNUaW1lciA9IGxvZ1RpbWVzcGFuKGBHZW5lcmF0ZSBUeXBlc2NyaXB0IGZvciAke3RhcmdldC5uYW1lfWApO1xuICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBUZXJyYWZvcm1Qcm92aWRlckdlbmVyYXRvcih0aGlzLmNvZGUsIHNjaGVtYSwge1xuICAgICAgaW1wb3J0RXh0ZW5zaW9uOiB0aGlzLm9wdGlvbnMubGFuZ3VhZ2VPcHRpb25zPy5pbXBvcnRFeHRlbnNpb24sXG4gICAgfSk7XG4gICAgZ2VuZXJhdG9yLmdlbmVyYXRlKHRhcmdldCk7XG5cbiAgICB0aGlzLnZlcnNpb25zID0geyAuLi50aGlzLnZlcnNpb25zLCAuLi5nZW5lcmF0b3IudmVyc2lvbnMgfTtcbiAgICB0aGlzLmVtaXR0ZWRSZXNvdXJjZUZvbGRlcnMgPSB7XG4gICAgICAuLi50aGlzLmVtaXR0ZWRSZXNvdXJjZUZvbGRlcnMsXG4gICAgICAuLi5nZW5lcmF0b3IuZW1pdHRlZFJlc291cmNlRm9sZGVycyxcbiAgICB9O1xuICAgIGVuZFRTVGltZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBmaWx0ZXJBbHJlYWR5R2VuZXJhdGVkKFxuICAgIGNvbnN0cmFpbnRzOiBUZXJyYWZvcm1EZXBlbmRlbmN5Q29uc3RyYWludFtdLFxuICApIHtcbiAgICBsZXQgY29uc3RyYWludHNGaWxlID0gXCJ7fVwiO1xuICAgIHRyeSB7XG4gICAgICBjb25zdHJhaW50c0ZpbGUgPSBhd2FpdCBmcy5yZWFkRmlsZShcbiAgICAgICAgcGF0aC5qb2luKHRoaXMuY29kZU1ha2VyT3V0ZGlyLCBcImNvbnN0cmFpbnRzLmpzb25cIiksXG4gICAgICAgIFwidXRmOFwiLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBDb3VsZCBub3QgZmluZCBjb25zdHJhaW50cy5qc29uIGZpbGUgd2hpbGUgZmlsdGVyaW5nOiAke2V9LiBUaGlzIG1lYW5zIG5vIHByb3ZpZGVycyB3ZXJlIGdlbmVyYXRlZCwgc28gYWxsIGNvbnN0cmFpbnRzIG5lZWQgdG8gYmUgZ2VuZXJhdGVkLmAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGNvbnN0cmFpbnRzO1xuICAgIH1cbiAgICBsb2dnZXIuZGVidWcoYEZvdW5kIGNvbnN0cmFpbnRzLmpzb24gZmlsZTogJHtjb25zdHJhaW50c0ZpbGV9YCk7XG5cbiAgICBsZXQgcHJldmlvdXNDb25zdHJhaW50czogUGFydGlhbDxDb25zdHJhaW50RmlsZT4gPSB7fTtcbiAgICB0cnkge1xuICAgICAgcHJldmlvdXNDb25zdHJhaW50cyA9IEpTT04ucGFyc2UoY29uc3RyYWludHNGaWxlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgYENvdWxkIG5vdCBwYXJzZSBjb25zdHJhaW50cy5qc29uIGZpbGUgd2hpbGUgZmlsdGVyaW5nOiAke2V9LiBHZW5lcmF0aW5nIGFsbCBjb25zdHJhaW50cy5gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBjb25zdHJhaW50cztcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgRm91bmQgcHJldmlvdXMgY29uc3RyYWludHM6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHByZXZpb3VzQ29uc3RyYWludHMsXG4gICAgICAgIG51bGwsXG4gICAgICAgIDIsXG4gICAgICApfWAsXG4gICAgKTtcblxuICAgIGlmIChcbiAgICAgICFwcmV2aW91c0NvbnN0cmFpbnRzLnByb3ZpZGVycyB8fFxuICAgICAgdHlwZW9mIHByZXZpb3VzQ29uc3RyYWludHMucHJvdmlkZXJzICE9PSBcIm9iamVjdFwiXG4gICAgKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgYENvdWxkIG5vdCBmaW5kIHByb3ZpZGVycyBpbiBjb25zdHJhaW50cy5qc29uIGZpbGUsIGdlbmVyYXRpbmcgYWxsIGNvbnN0cmFpbnRzLiBUaGUgY29uc3RyYWludHMgZmlsZSB3YXMgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICBwcmV2aW91c0NvbnN0cmFpbnRzLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgMixcbiAgICAgICAgKX1gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBjb25zdHJhaW50cztcbiAgICB9XG5cbiAgICBpZiAocHJldmlvdXNDb25zdHJhaW50cy5jZGt0ZiAhPT0gRElTUExBWV9WRVJTSU9OKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgYFRoZSBDREtUTiB2ZXJzaW9uIGhhcyBjaGFuZ2VkLCBnZW5lcmF0aW5nIGFsbCBjb25zdHJhaW50cy4gVGhlIHByZXZpb3VzIHZlcnNpb24gd2FzICR7cHJldmlvdXNDb25zdHJhaW50cy5jZGt0Zn0sIHRoZSBjdXJyZW50IHZlcnNpb24gaXMgJHtESVNQTEFZX1ZFUlNJT059YCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gY29uc3RyYWludHM7XG4gICAgfVxuXG4gICAgY29uc3QgY29uc3RyYWludHNUb0dlbmVyYXRlID0gY29uc3RyYWludHMuZmlsdGVyKChjb25zdHJhaW50KSA9PiB7XG4gICAgICBjb25zdCBjb25zdHJhaW50TWF0Y2hlcyA9XG4gICAgICAgIHByZXZpb3VzQ29uc3RyYWludHMucHJvdmlkZXJzIVtjb25zdHJhaW50LmZxbl0gPT09IGNvbnN0cmFpbnQudmVyc2lvbjtcbiAgICAgIGxldCBwcm92aWRlckZvbGRlckV4aXN0cyA9IGZhbHNlO1xuXG4gICAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy50YXJnZXRMYW5ndWFnZSkge1xuICAgICAgICBjYXNlIExhbmd1YWdlLlRZUEVTQ1JJUFQ6XG4gICAgICAgICAgcHJvdmlkZXJGb2xkZXJFeGlzdHMgPSBmcy5leGlzdHNTeW5jKFxuICAgICAgICAgICAgcGF0aC5qb2luKHRoaXMuY29kZU1ha2VyT3V0ZGlyLCBcInByb3ZpZGVyc1wiLCBjb25zdHJhaW50Lm5hbWUpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTGFuZ3VhZ2UuUFlUSE9OOlxuICAgICAgICBjYXNlIExhbmd1YWdlLkpBVkE6XG4gICAgICAgIGNhc2UgTGFuZ3VhZ2UuQ1NIQVJQOlxuICAgICAgICAgIHByb3ZpZGVyRm9sZGVyRXhpc3RzID0gZnMuZXhpc3RzU3luYyhcbiAgICAgICAgICAgIHBhdGguam9pbih0aGlzLmNvZGVNYWtlck91dGRpciwgY29uc3RyYWludC5uYW1lKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIExhbmd1YWdlLkdPOlxuICAgICAgICAgIHByb3ZpZGVyRm9sZGVyRXhpc3RzID0gZnMuZXhpc3RzU3luYyhcbiAgICAgICAgICAgIHBhdGguam9pbihcbiAgICAgICAgICAgICAgdGhpcy5jb2RlTWFrZXJPdXRkaXIsXG4gICAgICAgICAgICAgIGNvbnN0cmFpbnQubmFtZXNwYWNlIHx8IFwiaGFzaGljb3JwXCIsXG4gICAgICAgICAgICAgIGNvbnN0cmFpbnQubmFtZSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvdmlkZXJFeGlzdHMgPSBjb25zdHJhaW50TWF0Y2hlcyAmJiBwcm92aWRlckZvbGRlckV4aXN0cztcbiAgICAgIHJldHVybiAhcHJvdmlkZXJFeGlzdHM7XG4gICAgfSk7XG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgQ29uc3RyYWludHMgdG8gZ2VuZXJhdGU6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGNvbnN0cmFpbnRzVG9HZW5lcmF0ZSxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgMixcbiAgICAgICl9YCxcbiAgICApO1xuXG4gICAgcmV0dXJuIGNvbnN0cmFpbnRzVG9HZW5lcmF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2VuZXJhdGVUeXBlc2NyaXB0TW9kdWxlKFxuICAgIHRhcmdldDogQ29uc3RydWN0c01ha2VyTW9kdWxlVGFyZ2V0LFxuICAgIHNjaGVtYTogTW9kdWxlU2NoZW1hLFxuICApIHtcbiAgICBjb25zdCBlbmRUU1RpbWVyID0gbG9nVGltZXNwYW4oYEdlbmVyYXRlIFR5cGVzY3JpcHQgZm9yICR7dGFyZ2V0Lm5hbWV9YCk7XG4gICAgdGFyZ2V0LnNwZWMgPSBzY2hlbWE7XG4gICAgbmV3IE1vZHVsZUdlbmVyYXRvcih0aGlzLmNvZGUsIFt0YXJnZXRdKTtcbiAgICBlbmRUU1RpbWVyKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlVHlwZXNjcmlwdChcbiAgICB0YXJnZXQ6IENvbnN0cnVjdHNNYWtlclRhcmdldCxcbiAgICBzY2hlbWFzOiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIHJlYWRTY2hlbWE+PixcbiAgKSB7XG4gICAgaWYgKHRhcmdldC5pc01vZHVsZSkge1xuICAgICAgY29uc3Qgc2NoZW1hID0gc2NoZW1hcy5tb2R1bGVTY2hlbWE/Llt0YXJnZXQubW9kdWxlS2V5XTtcbiAgICAgIGlmICghc2NoZW1hKSB7XG4gICAgICAgIHRocm93IEVycm9ycy5JbnRlcm5hbChcbiAgICAgICAgICBgQ291bGQgbm90IGdlbmVyYXRlIHNjaGVtYSBmb3IgbW9kdWxlICR7dGFyZ2V0Lm1vZHVsZUtleX1gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLmdlbmVyYXRlVHlwZXNjcmlwdE1vZHVsZShcbiAgICAgICAgdGFyZ2V0IGFzIENvbnN0cnVjdHNNYWtlck1vZHVsZVRhcmdldCxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRhcmdldC5pc1Byb3ZpZGVyKSB7XG4gICAgICBpZiAoIXNjaGVtYXMucHJvdmlkZXJTY2hlbWEpIHtcbiAgICAgICAgdGhyb3cgRXJyb3JzLkludGVybmFsKGBDb3VsZCBub3QgZ2VuZXJhdGUgc2NoZW1hIGZvciBwcm92aWRlcnNgKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5nZW5lcmF0ZVR5cGVzY3JpcHRQcm92aWRlcihcbiAgICAgICAgdGFyZ2V0IGFzIENvbnN0cnVjdHNNYWtlclByb3ZpZGVyVGFyZ2V0LFxuICAgICAgICBzY2hlbWFzLnByb3ZpZGVyU2NoZW1hLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVW5rbm93biB0YXJnZXQgdHlwZSB1c2VkIHRvIGdlbmVyYXRlIGJpbmRpbmdzOiAke3RhcmdldC5uYW1lfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVtaXRzIGEgdmVyc2lvbnMuanNvbiBmaWxlIHdpdGggYSBtYXAgb2YgdGhlIHVzZWQgdmVyc2lvbiBmb3IgZWFjaCBwcm92aWRlciBmcXBuXG4gIHByaXZhdGUgdXBkYXRlVmVyc2lvbnNGaWxlKFxuICAgIGFsbG93ZWRDb25zdHJhaW50czogVGVycmFmb3JtRGVwZW5kZW5jeUNvbnN0cmFpbnRbXSxcbiAgKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYFVwZGF0aW5nIHZlcnNpb25zIGZpbGUgd2l0aCBnZW5lcmF0ZWQgdmVyc2lvbnMgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgdGhpcy52ZXJzaW9ucyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgMixcbiAgICAgICl9IHdpdGggYWxsb3dlZCBjb25zdHJhaW50cyAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBhbGxvd2VkQ29uc3RyYWludHMsXG4gICAgICAgIG51bGwsXG4gICAgICAgIDIsXG4gICAgICApfWAsXG4gICAgKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IFwidmVyc2lvbnMuanNvblwiO1xuICAgIGxldCBwcmV2aW91c1ZlcnNpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgdHJ5IHtcbiAgICAgIHByZXZpb3VzVmVyc2lvbnMgPSBKU09OLnBhcnNlKFxuICAgICAgICBmcy5yZWFkRmlsZVN5bmMocGF0aC5yZXNvbHZlKHRoaXMuY29kZU1ha2VyT3V0ZGlyLCBmaWxlUGF0aCksIFwidXRmOFwiKSxcbiAgICAgICk7XG5cbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYFJlYWQgZXhpc3RpbmcgdmVyc2lvbnMgZmlsZTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICBwcmV2aW91c1ZlcnNpb25zLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgMixcbiAgICAgICAgKX1gLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYENvdWxkIG5vdCByZWFkIHZlcnNpb25zIGZpbGUsIHRoaXMgaXMgZXhwZWN0ZWQgaWYgdGhlcmUgYXJlIG5vIHByZS1leGlzdGluZyBsb2NhbCBwcm92aWRlcnM6ICR7ZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB2ZXJzaW9ucyA9IGFsbG93ZWRDb25zdHJhaW50cy5yZWR1Y2UoKGFjYywgY29uc3RyYWludCkgPT4ge1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBPYmplY3QuZW50cmllcyhwcmV2aW91c1ZlcnNpb25zKS5maW5kKChbbmFtZV0pID0+XG4gICAgICAgIC8vIFRoaXMgY291bGQgYmUgbW9yZSByZWZpbmVkLCBidXQgaXQncyBnb29kIGVub3VnaCBmb3Igbm93XG4gICAgICAgIG5hbWUuZW5kc1dpdGgoY29uc3RyYWludC5mcW4pLFxuICAgICAgKTtcblxuICAgICAgaWYgKHByb3ZpZGVyKSB7XG4gICAgICAgIGNvbnN0IFtuYW1lLCB2ZXJzaW9uXSA9IHByb3ZpZGVyO1xuICAgICAgICByZXR1cm4geyAuLi5hY2MsIFtuYW1lXTogdmVyc2lvbiB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcblxuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBXcml0aW5nIHZlcnNpb25zIGZpbGUgKCR7ZmlsZVBhdGh9KTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgdmVyc2lvbnMsXG4gICAgICAgIG51bGwsXG4gICAgICAgIDIsXG4gICAgICApfWAsXG4gICAgKTtcblxuICAgIHRoaXMuY29kZS5vcGVuRmlsZShmaWxlUGF0aCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoSlNPTi5zdHJpbmdpZnkoeyAuLi52ZXJzaW9ucywgLi4udGhpcy52ZXJzaW9ucyB9LCBudWxsLCAyKSk7XG4gICAgdGhpcy5jb2RlLmNsb3NlRmlsZShmaWxlUGF0aCk7XG4gICAgcmV0dXJuIGZpbGVQYXRoO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlbW92ZUZvbGRlcnNUaGF0U2hvdWxkTm90RXhpc3QoXG4gICAgY29uc3RyYWludHNUaGF0U2hvdWxkRXhpc3Q6IFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50W10sXG4gICkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBSZW1vdmluZyBwcm92aWRlcnMgZXhjZXB0IGZvciAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBjb25zdHJhaW50c1RoYXRTaG91bGRFeGlzdCxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgMixcbiAgICAgICl9YCxcbiAgICApO1xuXG4gICAgLy8gQWxsIGxhbmd1YWdlcyBiZXNpZGVzIFRTIGtlZXAgdGhlaXIgcHJvdmlkZXJzIGluIHRoZSBzYW1lIGZvbGRlcnMgYXMgbW9kdWxlc1xuICAgIC8vIHRoaXMgbWFrZXMgaXQgaW1wb3NzaWJsZSBmb3IgdXMgdG8gZGlzdGluZ3Vpc2ggYSBubyBsb25nZXIgcmVxdWlyZWQgcHJvdmlkZXJcbiAgICAvLyBmcm9tIGEgbWFudWFsbHkgd3JpdHRlbiBjb25zdHJ1Y3Qgb3IgYSBtb2R1bGVcbiAgICBpZiAoIXRoaXMuaXNKYXZhc2NyaXB0VGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGZpbGVzSW5Qcm92aWRlcnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgcHJvdmlkZXJzRm9sZGVyID0gcGF0aC5yZXNvbHZlKHRoaXMuY29kZU1ha2VyT3V0ZGlyLCBcInByb3ZpZGVyc1wiKTtcbiAgICB0cnkge1xuICAgICAgZmlsZXNJblByb3ZpZGVycyA9IGF3YWl0IGZzLnJlYWRkaXIocHJvdmlkZXJzRm9sZGVyKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBFcnJvciBsaXN0aW5nIGZpbGVzIGluIHByb3ZpZGVycyBmb2xkZXIgJyR7cHJvdmlkZXJzRm9sZGVyfSc6ICR7ZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBmb2xkZXJzID0gZmlsZXNJblByb3ZpZGVycy5maWx0ZXIoKGZpbGUpID0+XG4gICAgICBmc1xuICAgICAgICAuc3RhdFN5bmMocGF0aC5yZXNvbHZlKHRoaXMuY29kZU1ha2VyT3V0ZGlyLCBcInByb3ZpZGVyc1wiLCBmaWxlKSlcbiAgICAgICAgLmlzRGlyZWN0b3J5KCksXG4gICAgKTtcblxuICAgIHJldHVybiBmb2xkZXJzLmZvckVhY2goKGZvbGRlcikgPT4ge1xuICAgICAgY29uc3Qgc2hvdWxkRXhpc3QgPSBjb25zdHJhaW50c1RoYXRTaG91bGRFeGlzdC5zb21lKFxuICAgICAgICAoY29uc3RyYWludCkgPT4gY29uc3RyYWludC5uYW1lID09PSBmb2xkZXIsXG4gICAgICApO1xuXG4gICAgICBpZiAoIXNob3VsZEV4aXN0KSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgUmVtb3ZpbmcgZm9sZGVyICR7Zm9sZGVyfSBmcm9tIHByb3ZpZGVyc2ApO1xuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmNvZGVNYWtlck91dGRpciwgXCJwcm92aWRlcnNcIiwgZm9sZGVyKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIHJlc291cmNlIGRpcmVjdG9yaWVzIHVuZGVyIGBwcm92aWRlcnMvYCB0aGF0IHRoaXMgcnVuIGRpZCBub3QgZW1pdCwgc28gZWFjaCBwcm92aWRlciBmb2xkZXIgaG9sZHNcbiAgICogZXhhY3RseSB0aGUgcmVzb3VyY2VzIGluIHRoZSB2ZXJzaW9uIGl0IHdhcyBnZW5lcmF0ZWQgYWdhaW5zdC5cbiAgICpcbiAgICogV2Fsa3Mgb25seSBwcm92aWRlcnMgcHJlc2VudCBpbiBgZW1pdHRlZFJlc291cmNlRm9sZGVyc2AsIGtlZXBpbmcgYW55IHByb3ZpZGVyIHRoaXMgcnVuIHNraXBwZWQuIFdpdGhpbiB0aG9zZSxcbiAgICogcmVtb3ZlcyBldmVyeSBzdWJkaXJlY3Rvcnkgbm90IGVtaXR0ZWQgYW5kIGxlYXZlcyBwcm92aWRlci1sZXZlbCBmaWxlcyAoYGluZGV4LnRzYCwgYGxhenktaW5kZXgudHNgKSBpbiBwbGFjZS5cbiAgICogRGVsZXRlcyBmaWxlcywgc28gaXQgbXVzdCBydW4gYWZ0ZXIgYHNhdmUoKWAgaGFzIHdyaXR0ZW4gdGhlIGN1cnJlbnQgcnVuJ3Mgb3V0cHV0LlxuICAgKlxuICAgKiBUeXBlU2NyaXB0IG9ubHk6IGBwcm92aWRlcnMvPG5hbWU+LzxyZXNvdXJjZT4vYCBtYXBzIG9uZS10by1vbmUgb250byB0aGUgZW1pdHRlZCBpbmRleCBleHBvcnRzLiBPdGhlciBsYW5ndWFnZXNcbiAgICogY28tbG9jYXRlIHByb3ZpZGVycyBhbmQgbW9kdWxlcyBpbiB0aGUgc2FtZSBmb2xkZXJzLCB3aGljaCBtYWtlcyBhIGRyb3BwZWQgcmVzb3VyY2UgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhXG4gICAqIGhhbmQtd3JpdHRlbiBjb25zdHJ1Y3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVtb3ZlT3JwaGFuZWRSZXNvdXJjZUZvbGRlcnMoKSB7XG4gICAgaWYgKCF0aGlzLmlzSmF2YXNjcmlwdFRhcmdldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW3Byb3ZpZGVyLCBlbWl0dGVkRm9sZGVyc10gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICB0aGlzLmVtaXR0ZWRSZXNvdXJjZUZvbGRlcnMsXG4gICAgKSkge1xuICAgICAgY29uc3QgcHJvdmlkZXJGb2xkZXIgPSBwYXRoLnJlc29sdmUoXG4gICAgICAgIHRoaXMuY29kZU1ha2VyT3V0ZGlyLFxuICAgICAgICBcInByb3ZpZGVyc1wiLFxuICAgICAgICBwcm92aWRlcixcbiAgICAgICk7XG5cbiAgICAgIGxldCBlbnRyaWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZW50cmllcyA9IGF3YWl0IGZzLnJlYWRkaXIocHJvdmlkZXJGb2xkZXIpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgICAgYENvdWxkIG5vdCBsaXN0IHJlc291cmNlIGZvbGRlcnMgaW4gJyR7cHJvdmlkZXJGb2xkZXJ9JzogJHtlfWAsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBleHBlY3RlZCA9IG5ldyBTZXQoZW1pdHRlZEZvbGRlcnMpO1xuICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgIGlmIChleHBlY3RlZC5oYXMoZW50cnkpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbnRyeVBhdGggPSBwYXRoLnJlc29sdmUocHJvdmlkZXJGb2xkZXIsIGVudHJ5KTtcbiAgICAgICAgaWYgKCFmcy5zdGF0U3luYyhlbnRyeVBhdGgpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAvLyBMZWF2ZSBpbmRleC50cyAvIGxhenktaW5kZXgudHMgYW5kIGFueSBvdGhlciBwcm92aWRlci1sZXZlbCBmaWxlcyBhbG9uZS5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBgUmVtb3Zpbmcgb3JwaGFuZWQgcmVzb3VyY2UgZm9sZGVyICcke2VudHJ5fScgZnJvbSBwcm92aWRlciAnJHtwcm92aWRlcn0nOiBpdCB3YXMgbm90IGVtaXR0ZWQgZm9yIHRoZSBjdXJyZW50IHByb3ZpZGVyIHZlcnNpb25gLFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCBmcy5yZW1vdmUoZW50cnlQYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBlbWl0cyBhIGNvbnN0cmFpbnRzLmpzb24gZmlsZSB3aXRoIGEgbWFwIG9mIHRoZSB1c2VkIHByb3ZpZGVyIGZxcG5zIGFuZCB2ZXJzaW9uIGNvbnN0cmFpbnRzXG4gIC8vIHRoaXMgaXMgdXNlZCBmb3IgY2FjaGluZyBwdXJwb3Nlc1xuICBwcml2YXRlIGVtaXRDb25zdHJhaW50c0ZpbGUoXG4gICAgYWxsb3dlZENvbnN0cmFpbnRzOiBUZXJyYWZvcm1EZXBlbmRlbmN5Q29uc3RyYWludFtdLFxuICAgIHByb3ZpZGVyU2NoZW1hPzogUHJvdmlkZXJTY2hlbWEsXG4gICkge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gXCJjb25zdHJhaW50cy5qc29uXCI7XG5cbiAgICBjb25zdCBjb250ZW50OiBDb25zdHJhaW50RmlsZSA9IHtcbiAgICAgIGNka3RmOiBESVNQTEFZX1ZFUlNJT04sXG4gICAgICBwcm92aWRlcnM6IGFsbG93ZWRDb25zdHJhaW50c1xuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5mcW4ubG9jYWxlQ29tcGFyZShiLmZxbikpXG4gICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgKGNhcnJ5LCBpdGVtKSA9PiAoe1xuICAgICAgICAgICAgLi4uY2FycnksXG4gICAgICAgICAgICBbaXRlbS5mcW5dOiBpdGVtLnZlcnNpb24sXG4gICAgICAgICAgfSksXG4gICAgICAgICAge30sXG4gICAgICAgICksXG4gICAgfTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMudGFyZ2V0VmVyc2lvbnMpIHtcbiAgICAgIGNvbnRlbnQudGFyZ2V0VmVyc2lvbnMgPSB0aGlzLm9wdGlvbnMudGFyZ2V0VmVyc2lvbnM7XG4gICAgfVxuXG4gICAgaWYgKHByb3ZpZGVyU2NoZW1hPy5jbGlfbmFtZSB8fCBwcm92aWRlclNjaGVtYT8uY2xpX3ZlcnNpb24pIHtcbiAgICAgIGNvbnRlbnQuY2xpID0ge1xuICAgICAgICBuYW1lOiBwcm92aWRlclNjaGVtYS5jbGlfbmFtZSxcbiAgICAgICAgdmVyc2lvbjogcHJvdmlkZXJTY2hlbWEuY2xpX3ZlcnNpb24sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuY29kZS5vcGVuRmlsZShmaWxlUGF0aCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoSlNPTi5zdHJpbmdpZnkoY29udGVudCwgbnVsbCwgMikpO1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICAgIHJldHVybiBmaWxlUGF0aDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2VuZXJhdGVKc2lpTGFuZ3VhZ2UodGFyZ2V0OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQpIHtcbiAgICAvLyBNb2R1bGUgZGVwZW5kZW5jaWVzIHdlIGNvbXBpbGUgYWdhaW5zdC4gU3RhdGljIHJlcXVpcmUucmVzb2x2ZSBjYWxscyBzb1xuICAgIC8vIGtuaXAgLyBwbnBtIHN0cmljdCBpc29sYXRpb24gY2FuIHNlZSB0aGUgZGVwcy5cbiAgICBjb25zdCBkZXBzID0gW1xuICAgICAgcGF0aC5kaXJuYW1lKHJlcXVpcmUucmVzb2x2ZShcIkB0eXBlcy9ub2RlL3BhY2thZ2UuanNvblwiKSksXG4gICAgICBwYXRoLmRpcm5hbWUocmVxdWlyZS5yZXNvbHZlKFwiY29uc3RydWN0cy9wYWNrYWdlLmpzb25cIikpLFxuICAgICAgcGF0aC5kaXJuYW1lKHJlcXVpcmUucmVzb2x2ZShcImNka3RuL3BhY2thZ2UuanNvblwiKSksXG4gICAgXTtcbiAgICBjb25zdCBvcHRzOiBHZW5lcmF0ZUpTSUlPcHRpb25zID0ge1xuICAgICAgZW50cnlwb2ludDogdGFyZ2V0LmZpbGVOYW1lLFxuICAgICAgZGVwcyxcbiAgICAgIG1vZHVsZUtleTogdGFyZ2V0Lm1vZHVsZUtleSxcbiAgICAgIGV4cG9ydHM6IHRhcmdldC5pc1Byb3ZpZGVyIC8vIE1vZHVsZXMgYXJlIHNtYWxsIGVub3VnaCB0aGF0IHdlIGRvbid0IG5lZWQgdGhpcyBvcHRpbWl6YXRpb25cbiAgICAgICAgPyB7XG4gICAgICAgICAgICBcIi5cIjoge1xuICAgICAgICAgICAgICBpbXBvcnQ6IGAuL3Byb3ZpZGVycy8ke3RhcmdldC5uYW1lfS9pbmRleC5qc2AsXG4gICAgICAgICAgICAgIHJlcXVpcmU6IGAuL3Byb3ZpZGVycy8ke3RhcmdldC5uYW1lfS9sYXp5LWluZGV4LmpzYCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9O1xuXG4gICAgLy8gdXNlZCBmb3IgdGVzdGluZy5cbiAgICBpZiAodGhpcy5vcHRpb25zLm91dHB1dEpzaWkpIHtcbiAgICAgIG9wdHMuanNpaSA9IHsgcGF0aDogdGhpcy5vcHRpb25zLm91dHB1dEpzaWkgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1B5dGhvblRhcmdldCkge1xuICAgICAgb3B0cy5weXRob24gPSB7XG4gICAgICAgIG91dGRpcjogdGhpcy5jb2RlTWFrZXJPdXRkaXIsXG4gICAgICAgIG1vZHVsZU5hbWU6IHRhcmdldC5zcmNNYWtOYW1lLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0phdmFUYXJnZXQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5vcHRpb25zLmNvZGVNYWtlck91dHB1dC5pbmNsdWRlcyhcIi9cIikgfHxcbiAgICAgICAgdGhpcy5vcHRpb25zLmNvZGVNYWtlck91dHB1dC5pbmNsdWRlcyhcIlxcXFxcIilcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBFcnJvcnMuVXNhZ2UoXG4gICAgICAgICAgYFdoZW4gdXNpbmcgSmF2YSB0aGUgXCJjb2RlTWFrZXJPdXRwdXRcIiBvcHRpb24gaW4gdGhlIGNka3RmLmpzb24gbXVzdCBiZSB0aGUgb3JnYW5pemF0aW9uIGlkZW50aWZpZXIgZm9yIHlvdXIgcHJvamVjdCAoZS5nLiBjb20ubXktY29tcGFueSksIG5vdCBhIHBhdGguIFRoZSBnZW5lcmF0ZWQgSmF2YSBjb2RlIHdpbGwgYmUgcGxhY2VkIGluIGEgc3ViZGlyZWN0b3J5IG9mIHRoZSBnaXZlbiBkaXJlY3RvcnkuIElmIHlvdSBhcmUgbWlncmF0aW5nIGZyb20gYSA8IDAuMTkgdmVyc2lvbiBvZiBjZGt0ZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGNvZGVtYWtlck91dHB1dCB0byBcImltcG9ydHNcIi5gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBvcHRzLmphdmEgPSB7XG4gICAgICAgIG91dGRpcjogXCIuXCIsIC8vIGdlbmVyYXRlZCBqYXZhIGZpbGVzIGFyZW4ndCBwYWNrYWdlZCwgc28ganVzdCBpbmNsdWRlIGRpcmVjdGx5IGluIGFwcFxuICAgICAgICBwYWNrYWdlOiBgJHt0aGlzLm9wdGlvbnMuY29kZU1ha2VyT3V0cHV0fS4ke3RhcmdldC5zcmNNYWtOYW1lfWAsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzQ3NoYXJwVGFyZ2V0KSB7XG4gICAgICBvcHRzLmNzaGFycCA9IHtcbiAgICAgICAgb3V0ZGlyOiB0aGlzLmNvZGVNYWtlck91dGRpcixcbiAgICAgICAgbmFtZXNwYWNlOiB0YXJnZXQuc3JjTWFrTmFtZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNHb1RhcmdldCkge1xuICAgICAgLy8gVE9ETzogY2hlY2sgaWYgbmVlZGVkIGZvciBtb2R1bGVzIHNvbWVob3dcbiAgICAgIC8vIGNvbnN0IHRhcmdldFR5cGUgPSB0YXJnZXQuaXNQcm92aWRlciA/ICdwcm92aWRlcicgOiAnbW9kdWxlJztcblxuICAgICAgLy8ganNpaS1zcmNtYWMgd2lsbCBwcm9kdWNlIGEgZm9sZGVyIGluc2lkZSB0aGlzIGRpciBuYW1lZCBhZnRlciBcInBhY2thZ2VOYW1lXCJcbiAgICAgIC8vIHNvIHRoaXMgcmVzdWx0cyBpbiBlLmcuIC5nZW4vaGFzaGljb3JwL3JhbmRvbVxuICAgICAgY29uc3Qgb3V0ZGlyID0gcGF0aC5qb2luKHRoaXMuY29kZU1ha2VyT3V0ZGlyLCB0YXJnZXQubmFtZXNwYWNlID8/IFwiXCIpO1xuXG4gICAgICBvcHRzLmdvbGFuZyA9IHtcbiAgICAgICAgb3V0ZGlyLFxuICAgICAgICBtb2R1bGVOYW1lOiBhd2FpdCBkZXRlcm1pbmVHb01vZHVsZU5hbWUob3V0ZGlyKSwgLy8gZS5nLiBgZ2l0aHViLmNvbS9vcmcvdXNlcnByb2plY3QvLmdlbi9oYXNoaWNvcnBgXG4gICAgICAgIHBhY2thZ2VOYW1lOiB0YXJnZXQuc3JjTWFrTmFtZSwgLy8gcGFja2FnZSB3aWxsIGJlIG5hbWVkIGUuZy4gcmFuZG9tIGZvciBoYXNoaWNvcnAvcmFuZG9tXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfT1BUSU9OUyAmJlxuICAgICAgIXByb2Nlc3MuZW52Lk5PREVfT1BUSU9OUy5pbmNsdWRlcyhgLS1tYXgtb2xkLXNwYWNlLXNpemVgKVxuICAgICkge1xuICAgICAgbG9nZ2VyLndhcm4oYGZvdW5kIE5PREVfT1BUSU9OUyBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aXRob3V0IGEgc2V0dGluZyBmb3IgLS1tYXgtb2xkLXNwYWNlLXNpemUuXG5UaGUgcHJvdmlkZXIgZ2VuZXJhdGlvbiBuZWVkcyBhIHN1YnN0YW50aWFsIGFtb3VudCBvZiBtZW1vcnkgKH4xM0dCKSBmb3Igc29tZSBwcm92aWRlcnMgYW5kIGxhbmd1YWdlcy5cblNvIGNka3RuLWNsaSBzZXRzIGl0IHRvIE5PREVfT1BUSU9OUz1cIi0tbWF4LW9sZC1zcGFjZS1zaXplPTE2Mzg0XCIgYnkgZGVmYXVsdC4gQXMgeW91ciBlbnZpcm9ubWVudCBhbHJlYWR5IGNvbnRhaW5zXG5hIE5PREVfT1BUSU9OUyB2YXJpYWJsZSwgd2Ugd29uJ3Qgb3ZlcnJpZGUgaXQuIEhlbmNlLCB0aGUgcHJvdmlkZXIgZ2VuZXJhdGlvbiBtaWdodCBmYWlsIHdpdGggYW4gb3V0IG9mIG1lbW9yeSBlcnJvci5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW5jcmVhc2UgbWVtb3J5IHRvIGFsbG93IGdlbmVyYXRpbmcgbGFyZ2UgcHJvdmlkZXJzIChpLmUuIGF3cyBvciBhenVyZXJtIGZvciBHbylcbiAgICAgIC8vIHNyY21hayBpcyBnb2luZyB0byBzcGF3biBhIGNoaWxkcHJvY2VzcyAoZm9yIGpzaWktcGFjbWFrKSB3aGljaCBpcyBnb2luZyB0byBiZSBhZmZlY3RlZCBieSB0aGlzIGVudiB2YXJcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfT1BUSU9OUyA9IFwiLS1tYXgtb2xkLXNwYWNlLXNpemU9MTYzODRcIjtcbiAgICB9XG5cbiAgICBjb25zdCBqc2lpVGltZXIgPSBsb2dUaW1lc3BhbihcIkpTSUlcIik7XG4gICAgYXdhaXQgZ2VuZXJhdGVKc2lpTGFuZ3VhZ2UodGhpcy5jb2RlLCBvcHRzLCB0aGlzLmNvZGVNYWtlck91dGRpciwgW1xuICAgICAgdGFyZ2V0LmlzTW9kdWxlID8gXCJwcm92aWRlcnMvKipcIiA6IFwibW9kdWxlcy8qKlwiLFxuICAgIF0pO1xuICAgIGpzaWlUaW1lcigpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFNjaGVtYXModGFyZ2V0czogVGVycmFmb3JtRGVwZW5kZW5jeUNvbnN0cmFpbnRbXSkge1xuICAgIHJldHVybiBhd2FpdCByZWFkU2NoZW1hKFxuICAgICAgdGFyZ2V0cyxcbiAgICAgIHRoaXMuc2NoZW1hQ2FjaGVQYXRoLFxuICAgICAgdGhpcy5vcHRpb25zLnRhcmdldFZlcnNpb25zLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2VuZXJhdGUoXG4gICAgYWxsQ29uc3RyYWludHM6IFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50W10sXG4gICAgY29uc3RyYWludHNUb0dlbmVyYXRlID0gYWxsQ29uc3RyYWludHMsXG4gICkge1xuICAgIGNvbnN0IHRhcmdldHMgPSBjb25zdHJhaW50c1RvR2VuZXJhdGUubWFwKChjb25zdHJhaW50KSA9PlxuICAgICAgQ29uc3RydWN0c01ha2VyVGFyZ2V0LmZyb20oY29uc3RyYWludCwgdGhpcy5vcHRpb25zLnRhcmdldExhbmd1YWdlKSxcbiAgICApO1xuXG4gICAgY29uc3QgZW5kU2NoZW1hVGltZXIgPSBsb2dUaW1lc3BhbihcIkdhdGhlcmluZyBzY2hlbWFcIik7XG4gICAgY29uc3Qgc2NoZW1hcyA9IGF3YWl0IHRoaXMuZ2V0U2NoZW1hcyhjb25zdHJhaW50c1RvR2VuZXJhdGUpO1xuICAgIGVuZFNjaGVtYVRpbWVyKCk7XG5cbiAgICBjb25zdCBlbmRHZW5lcmF0ZVRpbWVyID0gbG9nVGltZXNwYW4oXCJHZW5lcmF0ZSBUU1wiKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHRhcmdldHMubWFwKCh0YXJnZXQpID0+IHRoaXMuZ2VuZXJhdGVUeXBlc2NyaXB0KHRhcmdldCwgc2NoZW1hcykpLFxuICAgICk7XG4gICAgZW5kR2VuZXJhdGVUaW1lcigpO1xuXG4gICAgdGhpcy51cGRhdGVWZXJzaW9uc0ZpbGUoYWxsQ29uc3RyYWludHMpO1xuICAgIHRoaXMuZW1pdENvbnN0cmFpbnRzRmlsZShhbGxDb25zdHJhaW50cywgc2NoZW1hcy5wcm92aWRlclNjaGVtYSk7XG5cbiAgICBpZiAodGhpcy5pc0phdmFzY3JpcHRUYXJnZXQpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2F2ZSgpO1xuICAgICAgYXdhaXQgdGhpcy5yZW1vdmVPcnBoYW5lZFJlc291cmNlRm9sZGVycygpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc0phdmFzY3JpcHRUYXJnZXQgfHwgdGhpcy5vcHRpb25zLm91dHB1dEpzaWkpIHtcbiAgICAgIGNvbnN0IG51bWJlck9mV29ya2VycyA9IE1hdGgubWF4KFxuICAgICAgICAxLFxuICAgICAgICB0aGlzLm9wdGlvbnMuanNpaVBhcmFsbGVsaXNtID09PSAtMVxuICAgICAgICAgID8gdGFyZ2V0cy5sZW5ndGhcbiAgICAgICAgICA6IHRoaXMub3B0aW9ucy5qc2lpUGFyYWxsZWxpc20gfHwgMSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHdvcmsgPSBbLi4udGFyZ2V0c107XG4gICAgICBjb25zdCB3b3JrZXJzID0gbmV3IEFycmF5KG51bWJlck9mV29ya2VycykuZmlsbChhc3luYyAoKSA9PiB7XG4gICAgICAgIGxldCB0YXJnZXQ6IENvbnN0cnVjdHNNYWtlclRhcmdldCB8IHVuZGVmaW5lZDtcbiAgICAgICAgd2hpbGUgKCh0YXJnZXQgPSB3b3JrLnBvcCgpKSkge1xuICAgICAgICAgIGNvbnN0IGVuZEpzaWlUYXJnZXQgPSBsb2dUaW1lc3BhbihcbiAgICAgICAgICAgIGBHZW5lcmF0aW5nIEpTSUkgYmluZGluZ3MgZm9yICR7dGFyZ2V0Lm5hbWV9YCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGF3YWl0IHRoaXMuZ2VuZXJhdGVKc2lpTGFuZ3VhZ2UodGFyZ2V0KTtcbiAgICAgICAgICBlbmRKc2lpVGFyZ2V0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbCh3b3JrZXJzLm1hcCgoZm4pID0+IGZuKCkpKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICBhd2FpdCB0aGlzLnJlcG9ydFRlbGVtZXRyeSh7XG4gICAgICAgIHRyYWNraW5nUGF5bG9hZDogdGFyZ2V0LnRyYWNraW5nUGF5bG9hZCxcbiAgICAgICAgdGFyZ2V0TGFuZ3VhZ2U6IHRhcmdldC50YXJnZXRMYW5ndWFnZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzUHl0aG9uVGFyZ2V0KSB7XG4gICAgICBjb25zdCBlbmRQeXRob25UaW1lciA9IGxvZ1RpbWVzcGFuKFwiUHl0aG9uIHBvc3QtcHJvY2Vzc2luZ1wiKTtcbiAgICAgIC8vIFJlbW92ZSBmcm9tIC4gaW1wb3J0IC4uLiBzdGF0ZW1lbnRzIGZyb20gcm9vdCBsZXZlbCBfX2luaXRfXy5weVxuICAgICAgLy8gVGhpcyByZW1vdmVzIHJvb3QtbGV2ZWwgaW1wb3J0cyBvZiBuYW1lc3BhY2VzLCBidXQgc2F2ZXMgMjVzIHN5bnRoIHRpbWUgZm9yIHRoZSBhd3MgcHJvdmlkZXIgYWxvbmVcbiAgICAgIGNvbnN0IGFsbEluaXRQeVBhdGhzID0gZ2xvYlxuICAgICAgICAuc3luYyhcIioqL19faW5pdF9fLnB5XCIsIHtcbiAgICAgICAgICBjd2Q6IHRoaXMuY29kZU1ha2VyT3V0ZGlyLFxuICAgICAgICB9KVxuICAgICAgICAvLyBzb3J0IGJ5IGRlcHRoLCBzbyB3ZSBzdGFydCB3aXRoIHRoZSBzaGFsbG93ZXN0IGZpbGVzXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnNwbGl0KFwiL1wiKS5sZW5ndGggLSBiLnNwbGl0KFwiL1wiKS5sZW5ndGgpO1xuXG4gICAgICBjb25zdCB2aXNpdGVkRGlyZWN0b3JpZXM6IHN0cmluZ1tdID0gW107XG4gICAgICBmb3IgKGNvbnN0IGluaXRQeVBhdGggb2YgYWxsSW5pdFB5UGF0aHMpIHtcbiAgICAgICAgY29uc3QgZGlyZWN0b3J5UGF0aCA9IHBhdGguZGlybmFtZShpbml0UHlQYXRoKTtcbiAgICAgICAgaWYgKHZpc2l0ZWREaXJlY3Rvcmllcy5zb21lKChkaXIpID0+IGRpcmVjdG9yeVBhdGguc3RhcnRzV2l0aChkaXIpKSkge1xuICAgICAgICAgIC8vIHdlIGFscmVhZHkgcHJvY2Vzc2VkIHRoaXMgZGlyZWN0b3J5XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmlzaXRlZERpcmVjdG9yaWVzLnB1c2goZGlyZWN0b3J5UGF0aCk7XG5cbiAgICAgICAgY29uc3QgYWJzb2x1dGVJbml0UHlQYXRoID0gcGF0aC5qb2luKHRoaXMuY29kZU1ha2VyT3V0ZGlyLCBpbml0UHlQYXRoKTtcbiAgICAgICAgY29uc3QgaW5pdFB5ID0gYXdhaXQgZnMucmVhZEZpbGUoYWJzb2x1dGVJbml0UHlQYXRoLCBcInV0ZjhcIik7XG4gICAgICAgIGNvbnN0IGluaXRQeVdpdGhvdXRJbXBvcnRzID0gaW5pdFB5LnJlcGxhY2UoL2Zyb20gXFwuIGltcG9ydCAuKlxcbi9nLCBcIlwiKTtcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKGFic29sdXRlSW5pdFB5UGF0aCwgaW5pdFB5V2l0aG91dEltcG9ydHMpO1xuICAgICAgfVxuXG4gICAgICBlbmRQeXRob25UaW1lcigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2F2ZShvdXRkaXIgPSB0aGlzLmNvZGVNYWtlck91dGRpcikge1xuICAgIGF3YWl0IHRoaXMuY29kZS5zYXZlKG91dGRpcik7XG4gIH1cblxuICBwcml2YXRlIGdldCBpc0phdmFzY3JpcHRUYXJnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50YXJnZXRMYW5ndWFnZSA9PT0gTGFuZ3VhZ2UuVFlQRVNDUklQVDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzUHl0aG9uVGFyZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudGFyZ2V0TGFuZ3VhZ2UgPT09IExhbmd1YWdlLlBZVEhPTjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzSmF2YVRhcmdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRhcmdldExhbmd1YWdlID09PSBMYW5ndWFnZS5KQVZBO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaXNDc2hhcnBUYXJnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50YXJnZXRMYW5ndWFnZSA9PT0gTGFuZ3VhZ2UuQ1NIQVJQO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaXNHb1RhcmdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRhcmdldExhbmd1YWdlID09PSBMYW5ndWFnZS5HTztcbiAgfVxufVxuXG4vKipcbiAqIHNlYXJjaGVzIGZvciB0aGUgY2xvc2VzdCBgZ28ubW9kYCBmaWxlIGFuZCByZXR1cm5zIHRoZSBuZXN0ZWQgZ28gbW9kdWxlIG5hbWUgZm9yIGBkaXJgXG4gKiBlLmcuICgvZGlyLy5nZW4vKSA9PiBjZGsudGYvc3RhY2svLmdlbiBpZiB0aGUgcGFyZW50IGRpciBvZiAuZ2VuIGhhcyBhIGdvLm1vZCBmb3IgXCJtb2R1bGUgY2RrLnRmL3N0YWNrXCJcbiAqXG4gKiBAcGFyYW0gZGlyIHRoZSBkaXJlY3RvcnkgdG8gc3RhcnQgdGhlIHNlYXJjaCBmcm9tIChzZWFyY2hlcyB1cHdhcmRzKVxuICogQHJldHVybnMgdGhlIHBhY2thZ2UgbmFtZSBmb3IgYGRpcmBcbiAqIEB0aHJvd3MgYW4gRXJyb3IgaWYgbm8gZ28ubW9kIHdhcyBmb3VuZFxuICovXG5leHBvcnQgY29uc3QgZGV0ZXJtaW5lR29Nb2R1bGVOYW1lID0gYXN5bmMgKGRpcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgbGV0IHByZXZpb3VzRGlyO1xuICBsZXQgY3VycmVudERpciA9IHBhdGgucmVzb2x2ZShkaXIpO1xuXG4gIGRvIHtcbiAgICBsZXQgZmlsZXM6IHN0cmluZ1tdID0gW107XG4gICAgdHJ5IHtcbiAgICAgIGZpbGVzID0gYXdhaXQgZnMucmVhZGRpcihjdXJyZW50RGlyKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIC8vIGRpcmVjdG9yeSBtaWdodCBub3QgZXhpc3QgeWV0LCBidXQgd2Ugc3RpbGwgd2FsayB1cHdhcmRzIGZyb20gdGhlcmUsIHNvIGlnbm9yZSAnRU5PRU5UJ1xuICAgICAgaWYgKGUuY29kZSAhPT0gXCJFTk9FTlRcIikge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZmlsZXMuaW5jbHVkZXMoXCJnby5tb2RcIikpIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBwYXRoLnJlc29sdmUoY3VycmVudERpciwgXCJnby5tb2RcIik7XG4gICAgICBjb25zdCBnb21vZCA9IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGUpO1xuICAgICAgY29uc3QgbWF0Y2ggPSAvXm1vZHVsZVxccyooXFxTKilcXHMqJC9tLmV4ZWMoZ29tb2QudG9TdHJpbmcoKSk7XG4gICAgICBpZiAobWF0Y2ggJiYgbWF0Y2hbMV0pIHtcbiAgICAgICAgY29uc3QgY2hpbGRkaXIgPSBwYXRoLnJlbGF0aXZlKGN1cnJlbnREaXIsIGRpcikucmVwbGFjZSgvXFxcXC9nLCBcIi9cIik7IC8vIHJlcGxhY2UgJ1xcJyB3aXRoICcvJyBmb3Igd2luZG93cyBwYXRoc1xuICAgICAgICByZXR1cm4gY2hpbGRkaXIubGVuZ3RoID4gMCA/IGAke21hdGNoWzFdfS8ke2NoaWxkZGlyfWAgOiBtYXRjaFsxXTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIHJvb3QgR28gbW9kdWxlIG5hbWUuIEZvdW5kICR7ZmlsZX0gYnV0IGZhaWxlZCB0byByZWdleCBtYXRjaCB0aGUgbW9kdWxlIG5hbWUgZGlyZWN0aXZlYCxcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIGdvIHVwIG9uZSBkaXJlY3RvcnkuIEFzIGRpcm5hbWUoJy8nKSB3aWxsIHJldHVybiAnLycgd2UgY2FuY2VsIHRoZSBsb29wXG4gICAgLy8gYXMgc29vbiBhcyB0aGUgZGlyIGRvZXMgbm90IGNoYW5nZSBhbnltb3JlLlxuICAgIHByZXZpb3VzRGlyID0gY3VycmVudERpcjtcbiAgICBjdXJyZW50RGlyID0gcGF0aC5kaXJuYW1lKGN1cnJlbnREaXIpO1xuICB9IHdoaWxlIChjdXJyZW50RGlyICE9PSBwcmV2aW91c0Rpcik7XG5cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSByb290IEdvIG1vZHVsZSBuYW1lLiBObyBnby5tb2QgZm91bmQgaW4gJHtkaXJ9IGFuZCBhbnkgcGFyZW50IGRpcmVjdG9yaWVzYCxcbiAgKTtcbn07XG4iXX0=
|
|
633
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0cy1tYWtlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZXQvY29uc3RydWN0cy1tYWtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpR0Esb0RBOEtDO0FBL1FELCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsNkNBQStCO0FBQy9CLDJDQUE2QjtBQUM3Qix5Q0FBc0M7QUFDdEMsNENBQStDO0FBQy9DLDRDQVl3QjtBQUN4Qiw0Q0FBMkQ7QUFDM0QsdUVBQTRFO0FBQzVFLG1FQUErRDtBQUMvRCwrQkFBNEI7QUFDNUIsNERBQW9EO0FBRXBELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQztBQUNwRSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRXBEOzs7Ozs7O0dBT0c7QUFDSCxLQUFLLFVBQVUsdUJBQXVCLENBQUMsR0FBVztJQUNoRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsY0FBSSxFQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLEVBQUU7UUFDaEUsR0FBRyxFQUFFLEdBQUc7S0FDVCxDQUFDLENBQUM7SUFDSCwyRUFBMkU7SUFDM0UsNkVBQTZFO0lBQzdFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUVpQixDQUFDO0lBQ2xELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RSxnRkFBZ0Y7SUFDaEYsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFD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RUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QyxNQUFNLEtBQUssR0FBRyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDNUQsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyx5Q0FBeUM7Z0JBQzlHLE9BQU8sUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEUsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQ2Isc0RBQXNELElBQUksc0RBQXNELENBQ2pILENBQUM7UUFDSixDQUFDO1FBQ0QsMEVBQTBFO1FBQzFFLDhDQUE4QztRQUM5QyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQ3pCLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3hDLENBQUMsUUFBUSxVQUFVLEtBQUssV0FBVyxFQUFFO0lBRXJDLE1BQU0sSUFBSSxLQUFLLENBQ2IsbUVBQW1FLEdBQUcsNkJBQTZCLENBQ3BHLENBQUM7QUFDSixDQUFDLENBQUM7QUFuQ1csUUFBQSxxQkFBcUIseUJBbUNoQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IENvZGVNYWtlciB9IGZyb20gXCJjb2RlbWFrZXJcIjtcbmltcG9ydCB7IGV4ZWMsIG1rZHRlbXAgfSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7XG4gIFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50LFxuICBsb2dnZXIsXG4gIGxvZ1RpbWVzcGFuLFxuICBDb25zdHJ1Y3RzTWFrZXJQcm92aWRlclRhcmdldCxcbiAgQ29uc3RydWN0c01ha2VyTW9kdWxlVGFyZ2V0LFxuICBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gIFByb3ZpZGVyU2NoZW1hLFxuICBNb2R1bGVTY2hlbWEsXG4gIEVycm9ycyxcbiAgdHlwZSBMYW5ndWFnZU9wdGlvbnMsXG4gIHR5cGUgVGVycmFmb3JtVGFyZ2V0VmVyc2lvbnMsXG59IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgRElTUExBWV9WRVJTSU9OLCBMYW5ndWFnZSB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgVGVycmFmb3JtUHJvdmlkZXJHZW5lcmF0b3IgfSBmcm9tIFwiLi9nZW5lcmF0b3IvcHJvdmlkZXItZ2VuZXJhdG9yXCI7XG5pbXBvcnQgeyBNb2R1bGVHZW5lcmF0b3IgfSBmcm9tIFwiLi9nZW5lcmF0b3IvbW9kdWxlLWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgZ2xvYiB9IGZyb20gXCJnbG9iXCI7XG5pbXBvcnQgeyByZWFkU2NoZW1hIH0gZnJvbSBcIkBjZGt0bi9wcm92aWRlci1zY2hlbWFcIjtcblxuY29uc3QgcGFjbWFrTW9kdWxlID0gcmVxdWlyZS5yZXNvbHZlKFwianNpaS1wYWNtYWsvYmluL2pzaWktcGFjbWFrXCIpO1xuY29uc3QganNpaU1vZHVsZSA9IHJlcXVpcmUucmVzb2x2ZShcImpzaWkvYmluL2pzaWlcIik7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZmlsZXMgYG5wbSBwYWNrYCB3b3VsZCBwdWJsaXNoIGZvciB0aGUgcGFja2FnZSBhdCBgZGlyYCwgYXMgcGF0aHMgcmVsYXRpdmUgdG8gYGRpcmAuIFRoaXMgaXMgdGhlIHNldFxuICoganNpaSBuZWVkcyB0byBjb21waWxlIGFnYWluc3QgYSBkZXBlbmRlbmN5IOKAlCBpdHMgc291cmNlcyBhbmQgZGVjbGFyZWQgbWV0YWRhdGEg4oCUIGFuZCBleGNsdWRlcyBidWlsZCBvdXRwdXRzXG4gKiAoYGRpc3RgLCBgLnBhY2stc3RhZ2luZ2AsIGBub2RlX21vZHVsZXNgLCB0c2J1aWxkaW5mbywgLi4uKSB0aGF0IGEgYmxhbmtldCBkaXJlY3RvcnkgY29weSB3b3VsZCBvdGhlcndpc2UgcHVsbCBpbi5cbiAqXG4gKiBAcGFyYW0gZGlyIC0gQWJzb2x1dGUgcGF0aCB0byB0aGUgcGFja2FnZSBkaXJlY3RvcnkgdG8gaW5zcGVjdCAobXVzdCBjb250YWluIGEgcGFja2FnZS5qc29uKS5cbiAqIEByZXR1cm5zIFB1Ymxpc2hhYmxlIGZpbGUgcGF0aHMsIHJlbGF0aXZlIHRvIGBkaXJgLCB3aXRoIGAuLmAtZXNjYXBlIHBhdGhzIChmcm9tIGZvbGxvd2luZyBwbnBtIHN5bWxpbmtzKSBkcm9wcGVkLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlUHVibGlzaGFibGVGaWxlcyhkaXI6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgZXhlYyhcIm5wbVwiLCBbXCJwYWNrXCIsIFwiLS1kcnktcnVuXCIsIFwiLS1qc29uXCJdLCB7XG4gICAgY3dkOiBkaXIsXG4gIH0pO1xuICAvLyBucG0gPD0xMSByZXBvcnRzIGFuIGFycmF5IG9mIHBhY2tlZCBwYWNrYWdlczsgbnBtID49MTIgcmVwb3J0cyBhbiBvYmplY3RcbiAgLy8ga2V5ZWQgYnkgcGFja2FnZSBuYW1lLiBBY2NlcHQgZWl0aGVyIHNvIHRoZSBidWlsZCBpcyBucG0tdmVyc2lvbiBhZ25vc3RpYy5cbiAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShzdGRvdXQpIGFzXG4gICAgfCBBcnJheTx7IGZpbGVzOiB7IHBhdGg6IHN0cmluZyB9W10gfT5cbiAgICB8IFJlY29yZDxzdHJpbmcsIHsgZmlsZXM6IHsgcGF0aDogc3RyaW5nIH1bXSB9PjtcbiAgY29uc3QgcGFja0luZm8gPSBBcnJheS5pc0FycmF5KHBhcnNlZCkgPyBwYXJzZWRbMF0gOiBPYmplY3QudmFsdWVzKHBhcnNlZClbMF07XG4gIC8vIERyb3AgYC4uYC1lc2NhcGUgcGF0aHMgbnBtIGVtaXRzIHdoZW4gZm9sbG93aW5nIHBucG0ncyBub2RlX21vZHVsZXMgc3ltbGlua3MuXG4gIHJldHVybiBwYWNrSW5mby5maWxlcy5tYXAoKGYpID0+IGYucGF0aCkuZmlsdGVyKChwKSA9PiAhcC5pbmNsdWRlcyhcIi4uXCIpKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZUpTSUlPcHRpb25zIHtcbiAgZW50cnlwb2ludDogc3RyaW5nO1xuICBkZXBzOiBzdHJpbmdbXTtcbiAgbW9kdWxlS2V5OiBzdHJpbmc7XG4gIGV4cG9ydHM/OiBSZWNvcmQ8c3RyaW5nLCBFeHBvcnREZWZpbml0aW9uIHwgc3RyaW5nPjtcbiAganNpaT86IEpzaWlPdXRwdXRPcHRpb25zO1xuICBweXRob24/OiBQeXRob25PdXRwdXRPcHRpb25zO1xuICBqYXZhPzogSmF2YU91dHB1dE9wdGlvbnM7XG4gIGNzaGFycD86IENTaGFycE91dHB1dE9wdGlvbnM7XG4gIGdvbGFuZz86IEdvTGFuZ091dHB1dE9wdGlvbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSnNpaU91dHB1dE9wdGlvbnMge1xuICBwYXRoOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHl0aG9uT3V0cHV0T3B0aW9ucyB7XG4gIG91dGRpcjogc3RyaW5nO1xuICBtb2R1bGVOYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSmF2YU91dHB1dE9wdGlvbnMge1xuICBvdXRkaXI6IHN0cmluZztcbiAgcGFja2FnZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENTaGFycE91dHB1dE9wdGlvbnMge1xuICBvdXRkaXI6IHN0cmluZztcbiAgbmFtZXNwYWNlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR29MYW5nT3V0cHV0T3B0aW9ucyB7XG4gIG91dGRpcjogc3RyaW5nO1xuICBtb2R1bGVOYW1lOiBzdHJpbmc7XG4gIHBhY2thZ2VOYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VlIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvcGFja2FnZXMuaHRtbCNjb25kaXRpb25hbC1leHBvcnRzIGZvciBtb3JlIGluZm9ybWF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0RGVmaW5pdGlvbiB7XG4gIG5vZGU/OiBzdHJpbmc7XG4gIGltcG9ydD86IHN0cmluZztcbiAgcmVxdWlyZT86IHN0cmluZztcbiAgZGVmYXVsdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlSnNpaUxhbmd1YWdlKFxuICBjb2RlOiBDb2RlTWFrZXIsXG4gIG9wdHM6IEdlbmVyYXRlSlNJSU9wdGlvbnMsXG4gIG91dHB1dFBhdGg6IHN0cmluZyxcbiAgZGlzYWxsb3dlZEZpbGVHbG9iczogc3RyaW5nW10gPSBbXSxcbikge1xuICBhd2FpdCBta2R0ZW1wKGFzeW5jIChzdGFnaW5nKSA9PiB7XG4gICAgLy8gdGhpcyBpcyBub3QgdHlwZXNjcmlwdCwgc28gd2UgZ2VuZXJhdGUgaW4gYSBzdGFnaW5nIGRpcmVjdG9yeSBhbmRcbiAgICAvLyB1c2UganNpaS1zcmNtYWsgdG8gY29tcGlsZSBhbmQgZXh0cmFjdCB0aGUgbGFuZ3VhZ2Utc3BlY2lmaWMgc291cmNlXG4gICAgLy8gaW50byBvdXIgcHJvamVjdC5cbiAgICBhd2FpdCBjb2RlLnNhdmUoc3RhZ2luZyk7XG5cbiAgICAvLyBhcyB0aGUgYWJvdmUgZ2VuZXJhdGVkIHRoZSBUeXBlc2NyaXB0IGNvZGUgZm9yIGFsbCBwcm92aWRlcnMgYW5kIG1vZHVsZXMsXG4gICAgLy8gd2UgbmVlZCB0byBmaWx0ZXIgb3V0IHRoZSBvbmVzIHdlIGRvbid0IG5lZWQgc28gdGhleSBkb24ndCBlbmQgdXAgaW4gdGhlIEpTSUkgYnVuZGxlIG92ZXIgYW5kIG92ZXIgYWdhaW4uXG4gICAgY29uc3QgZmlsZXNUb0RlbGV0ZSA9IGRpc2FsbG93ZWRGaWxlR2xvYnMuZmxhdE1hcCgocGF0dGVybikgPT5cbiAgICAgIGdsb2Iuc3luYyhwYXR0ZXJuLCB7IGN3ZDogc3RhZ2luZyB9KSxcbiAgICApO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgZmlsZXNUb0RlbGV0ZS5tYXAoKGZpbGUpID0+IGZzLnJlbW92ZShwYXRoLmpvaW4oc3RhZ2luZywgZmlsZSkpKSxcbiAgICApO1xuXG4gICAgLy8gQ29tcGlsZSB3aXRoIEpTSUlcbiAgICBjb25zdCBqc2lpQXJncyA9IFtcIi0tc2lsZW5jZS13YXJuaW5nc1wiLCBcInJlc2VydmVkLXdvcmRcIl07XG4gICAgY29uc3QganNpaUVudHJ5cG9pbnQgPSBvcHRzLmVudHJ5cG9pbnQ7XG4gICAgY29uc3QgYmFzZXBhdGggPSBwYXRoLmpvaW4oXG4gICAgICBwYXRoLmRpcm5hbWUoanNpaUVudHJ5cG9pbnQpLFxuICAgICAgcGF0aC5iYXNlbmFtZShqc2lpRW50cnlwb2ludCwgXCIudHNcIiksXG4gICAgKTtcblxuICAgIGNvbnN0IG1vZHVsZUtleSA9IG9wdHMubW9kdWxlS2V5LnJlcGxhY2UoL1xcLi9nLCBcIlwiKS5yZXBsYWNlKC9cXC8vZywgXCJcIik7XG4gICAgY29uc3QgbW9kdWxlRGlycyA9IG9wdHMuZGVwcztcbiAgICBjb25zdCB0YXJnZXRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgY29uc3QgZGVwczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGZvciAoY29uc3QgZGlyIG9mIG1vZHVsZURpcnMpIHtcbiAgICAgIC8vIHJlYWQgbW9kdWxlIG1ldGFkYXRhXG4gICAgICBjb25zdCBtZXRhZGF0YSA9IGF3YWl0IGZzLnJlYWRKc29uKHBhdGguam9pbihkaXIsIFwicGFja2FnZS5qc29uXCIpKTtcbiAgICAgIGNvbnN0IG1vZHVsZU5hbWU6IHN0cmluZyA9IG1ldGFkYXRhLm5hbWU7XG4gICAgICBjb25zdCBtb2R1bGVWZXJzaW9uOiBzdHJpbmcgPSBtZXRhZGF0YS52ZXJzaW9uO1xuXG4gICAgICBjb25zdCB0YXJnZXRkaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIHBhdGguam9pbihzdGFnaW5nLCBcIm5vZGVfbW9kdWxlc1wiKSxcbiAgICAgICAgbW9kdWxlTmFtZSxcbiAgICAgICk7XG4gICAgICBhd2FpdCBmcy5ta2RpcnAodGFyZ2V0ZGlyKTtcbiAgICAgIC8vIENvcHkgb25seSB0aGUgZGVwJ3MgcHVibGlzaGFibGUgZmlsZXMgKHdoYXQgYG5wbSBwYWNrYCB3b3VsZCBzaGlwKSBpbnRvIHRoZSBqc2lpIGNvbXBpbGUgYnVuZGxlLlxuICAgICAgZm9yIChjb25zdCByZWxQYXRoIG9mIGF3YWl0IHJlc29sdmVQdWJsaXNoYWJsZUZpbGVzKGRpcikpIHtcbiAgICAgICAgY29uc3Qgc3JjID0gcGF0aC5qb2luKGRpciwgcmVsUGF0aCk7XG4gICAgICAgIGNvbnN0IGRzdCA9IHBhdGguam9pbih0YXJnZXRkaXIsIHJlbFBhdGgpO1xuICAgICAgICBhd2FpdCBmcy5ta2RpcnAocGF0aC5kaXJuYW1lKGRzdCkpO1xuICAgICAgICBhd2FpdCBmcy5jb3B5KHNyYywgZHN0LCB7IGRlcmVmZXJlbmNlOiB0cnVlIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBhZGQgdG8gXCJkZXBzXCIgYW5kIFwicGVlciBkZXBzXCJcbiAgICAgIGlmICghbW9kdWxlTmFtZS5zdGFydHNXaXRoKFwiQHR5cGVzL1wiKSkge1xuICAgICAgICBkZXBzW21vZHVsZU5hbWVdID0gbW9kdWxlVmVyc2lvbjtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcGtnID0ge1xuICAgICAgbmFtZTogbW9kdWxlS2V5LFxuICAgICAgdmVyc2lvbjogXCIwLjAuMFwiLFxuICAgICAgYXV0aG9yOiBcImdlbmVyYXRlZEBnZW5lcmF0ZWQuY29tXCIsXG4gICAgICBtYWluOiBgJHtiYXNlcGF0aH0uanNgLFxuICAgICAgdHlwZXM6IGAke2Jhc2VwYXRofS5kLnRzYCxcbiAgICAgIGxpY2Vuc2U6IFwiVU5MSUNFTlNFRFwiLFxuICAgICAgcmVwb3NpdG9yeTogeyB1cmw6IFwiaHR0cDovL2dlbmVyYXRlZFwiLCB0eXBlOiBcImdpdFwiIH0sXG4gICAgICBqc2lpOiB7XG4gICAgICAgIG91dGRpcjogXCJkaXN0XCIsXG4gICAgICAgIHRhcmdldHM6IHRhcmdldHMsXG4gICAgICB9LFxuICAgICAgZGVwZW5kZW5jaWVzOiBkZXBzLFxuICAgICAgcGVlckRlcGVuZGVuY2llczogZGVwcyxcbiAgICB9O1xuXG4gICAgaWYgKG9wdHMuZXhwb3J0cykge1xuICAgICAgKHBrZyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KS5leHBvcnRzID0gb3B0cy5leHBvcnRzO1xuICAgIH1cbiAgICBpZiAob3B0cy5weXRob24pIHtcbiAgICAgIHRhcmdldHMucHl0aG9uID0ge1xuICAgICAgICBkaXN0TmFtZTogXCJnZW5lcmF0ZWRcIixcbiAgICAgICAgbW9kdWxlOiBvcHRzLnB5dGhvbi5tb2R1bGVOYW1lLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5qYXZhKSB7XG4gICAgICB0YXJnZXRzLmphdmEgPSB7XG4gICAgICAgIHBhY2thZ2U6IG9wdHMuamF2YS5wYWNrYWdlLFxuICAgICAgICBtYXZlbjoge1xuICAgICAgICAgIGdyb3VwSWQ6IFwiZ2VuZXJhdGVkXCIsXG4gICAgICAgICAgYXJ0aWZhY3RJZDogXCJnZW5lcmF0ZWRcIixcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuY3NoYXJwKSB7XG4gICAgICB0YXJnZXRzLmRvdG5ldCA9IHtcbiAgICAgICAgbmFtZXNwYWNlOiBvcHRzLmNzaGFycC5uYW1lc3BhY2UsXG4gICAgICAgIHBhY2thZ2VJZDogb3B0cy5jc2hhcnAubmFtZXNwYWNlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5nb2xhbmcpIHtcbiAgICAgIHRhcmdldHMuZ28gPSB7XG4gICAgICAgIG1vZHVsZU5hbWU6IG9wdHMuZ29sYW5nLm1vZHVsZU5hbWUsXG4gICAgICAgIHBhY2thZ2VOYW1lOiBvcHRzLmdvbGFuZy5wYWNrYWdlTmFtZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKFxuICAgICAgcGF0aC5qb2luKHN0YWdpbmcsIFwicGFja2FnZS5qc29uXCIpLFxuICAgICAgSlNPTi5zdHJpbmdpZnkocGtnLCB1bmRlZmluZWQsIDIpLFxuICAgICk7XG5cbiAgICBjb25zdCBlbmRKc2lpVGltZXIgPSBsb2dUaW1lc3BhbihcImpzaWlcIik7XG4gICAgYXdhaXQgZXhlYyhqc2lpTW9kdWxlLCBqc2lpQXJncywge1xuICAgICAgY3dkOiBzdGFnaW5nLFxuICAgIH0pO1xuICAgIGVuZEpzaWlUaW1lcigpO1xuXG4gICAgLy8gZXh0cmFjdCAuanNpaSBpZiByZXF1ZXN0ZWRcbiAgICBpZiAob3B0cy5qc2lpKSB7XG4gICAgICBhd2FpdCBmcy5jb3B5KHBhdGguam9pbihzdGFnaW5nLCBcIi5qc2lpXCIpLCBvcHRzLmpzaWkucGF0aCk7XG4gICAgfVxuXG4gICAgLy8gcnVuIHBhY21hayB0byBnZW5lcmF0ZSBjb2RlXG4gICAgY29uc3QgZW5kSnNpaVBhY21ha1RpbWVyID0gbG9nVGltZXNwYW4oXCJqc2lpLXBhY21ha1wiKTtcbiAgICBhd2FpdCBleGVjKHBhY21ha01vZHVsZSwgW1wiLS1jb2RlLW9ubHlcIl0sIHsgY3dkOiBzdGFnaW5nIH0pO1xuICAgIGVuZEpzaWlQYWNtYWtUaW1lcigpO1xuXG4gICAgaWYgKG9wdHMucHl0aG9uKSB7XG4gICAgICBjb25zdCByZWxkaXIgPSBvcHRzLnB5dGhvbi5tb2R1bGVOYW1lLnJlcGxhY2UoL1xcLi9nLCBcIi9cIik7IC8vIGpzaWkgcmVwbGFjZXMgXCIuXCIgd2l0aCBcIi9cIlxuICAgICAgY29uc3Qgc291cmNlID0gcGF0aC5yZXNvbHZlKFxuICAgICAgICBwYXRoLmpvaW4oc3RhZ2luZywgXCJkaXN0L3B5dGhvbi9zcmNcIiwgcmVsZGlyKSxcbiAgICAgICk7XG4gICAgICBjb25zdCB0YXJnZXQgPSBwYXRoLmpvaW4ob3B0cy5weXRob24ub3V0ZGlyLCByZWxkaXIpO1xuICAgICAgYXdhaXQgZnMubW92ZShzb3VyY2UsIHRhcmdldCwgeyBvdmVyd3JpdGU6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuamF2YSkge1xuICAgICAgY29uc3Qgc291cmNlID0gcGF0aC5yZXNvbHZlKHBhdGguam9pbihzdGFnaW5nLCBcImRpc3QvamF2YS9zcmMvXCIpKTtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHBhdGguam9pbihvcHRzLmphdmEub3V0ZGlyLCBcInNyYy9cIik7XG4gICAgICAvLyBQcmUtY3JlYXRlIHNoYXJlZCBwYWNrYWdlIGRpcmVjdG9yaWVzLlxuICAgICAgY29uc3QgcGFja2FnZURpciA9IG9wdHMuamF2YS5wYWNrYWdlLnJlcGxhY2UoL1xcLi9nLCBcIi9cIik7XG4gICAgICBhd2FpdCBmcy5ta2RpcnAocGF0aC5qb2luKHRhcmdldCwgXCJtYWluL2phdmFcIiwgcGFja2FnZURpcikpO1xuICAgICAgYXdhaXQgZnMubWtkaXJwKHBhdGguam9pbih0YXJnZXQsIFwibWFpbi9yZXNvdXJjZXNcIiwgcGFja2FnZURpcikpO1xuICAgICAgYXdhaXQgZnMuY29weShzb3VyY2UsIHRhcmdldCwgeyBvdmVyd3JpdGU6IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmNzaGFycCkge1xuICAgICAgY29uc3QgcmVsZGlyID0gb3B0cy5jc2hhcnAubmFtZXNwYWNlO1xuICAgICAgY29uc3Qgc291cmNlID0gcGF0aC5yZXNvbHZlKHBhdGguam9pbihzdGFnaW5nLCBcImRpc3QvZG90bmV0L1wiLCByZWxkaXIpKTtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHBhdGguam9pbihvcHRzLmNzaGFycC5vdXRkaXIsIHJlbGRpcik7XG4gICAgICBhd2FpdCBmcy5tb3ZlKHNvdXJjZSwgdGFyZ2V0LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5nb2xhbmcpIHtcbiAgICAgIGNvbnN0IHJlbGRpciA9IG9wdHMuZ29sYW5nLnBhY2thZ2VOYW1lO1xuICAgICAgY29uc3Qgc291cmNlID0gcGF0aC5yZXNvbHZlKHBhdGguam9pbihzdGFnaW5nLCBcImRpc3QvZ28vXCIsIHJlbGRpcikpO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gcGF0aC5qb2luKG9wdHMuZ29sYW5nLm91dGRpciwgcmVsZGlyKTtcbiAgICAgIGF3YWl0IGZzLm1vdmUoc291cmNlLCB0YXJnZXQsIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xuICAgICAgLy8gcmVtb3ZlIGdvLm1vZCBhcyB0aGlzIHdvdWxkIG1ha2UgaXQgYSBzdWJtb2R1bGVcbiAgICAgIGF3YWl0IGZzLnJlbW92ZShwYXRoLmpvaW4odGFyZ2V0LCBcImdvLm1vZFwiKSk7XG4gICAgfVxuXG4gICAgW1widmVyc2lvbnMuanNvblwiLCBcImNvbnN0cmFpbnRzLmpzb25cIl0uZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZnMuY29weVN5bmMoXG4gICAgICAgICAgcGF0aC5yZXNvbHZlKHN0YWdpbmcsIGZpbGUpLFxuICAgICAgICAgIHBhdGgucmVzb2x2ZShvdXRwdXRQYXRoLCBmaWxlKSxcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBGYWlsZWQgdG8gY29weSAke2ZpbGV9OiAke2V9YCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG50eXBlIENvbnN0cmFpbnRGaWxlID0ge1xuICBwcm92aWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGNka3RmOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcHJvamVjdCdzIGRlY2xhcmVkIHRhcmdldFZlcnNpb25zIChjZGt0Zi5qc29uKSwgc3RhbXBlZCBmb3JcbiAgICogZGlhZ25vc3RpY3MvY2FjaGUgZGVidWdnaW5nLiBQdXJlbHkgaW5mb3JtYXRpb25hbCAtIG5ldmVyIHJlYWQgYmFjayB0b1xuICAgKiBkZWNpZGUgd2hldGhlciBjYWNoZWQgb3V0cHV0IGlzIHN0YWxlLCBzaW5jZSBpdCBkb2Vzbid0IGFmZmVjdCB0aGVcbiAgICogZ2VuZXJhdGVkIHN1cmZhY2UgKHRoZSBmdWxsIHN1cmZhY2UgaXMgYWx3YXlzIGdlbmVyYXRlZDsgbmFycm93aW5nXG4gICAqIGhhcHBlbnMgYXQgc3ludGgpLlxuICAgKi9cbiAgdGFyZ2V0VmVyc2lvbnM/OiBUZXJyYWZvcm1UYXJnZXRWZXJzaW9ucztcbiAgLyoqXG4gICAqIElkZW50aXR5IG9mIHRoZSBDTEkgKHRlcnJhZm9ybS9vcGVudG9mdSkgdGhhdCBmZXRjaGVkIHRoZSBzY2hlbWFzIHVzZWRcbiAgICogZm9yIHRoaXMgZ2VuZXJhdGlvbiwgc3RhbXBlZCBmb3IgZGlhZ25vc3RpY3MvY2FjaGUgZGVidWdnaW5nLlxuICAgKi9cbiAgY2xpPzogeyBuYW1lPzogc3RyaW5nOyB2ZXJzaW9uPzogc3RyaW5nIH07XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEdldE9wdGlvbnMge1xuICByZWFkb25seSB0YXJnZXRMYW5ndWFnZTogTGFuZ3VhZ2U7XG4gIHJlYWRvbmx5IGNvZGVNYWtlck91dHB1dDogc3RyaW5nO1xuICByZWFkb25seSBqc2lpUGFyYWxsZWxpc20/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBQYXRoIHRvIGNvcHkgdGhlIG91dHB1dCAuanNpaSBmaWxlLlxuICAgKiBAZGVmYXVsdCAtIGpzaWkgZmlsZSBpcyBub3QgZW1pdHRlZFxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0SnNpaT86IHN0cmluZztcbiAgLyoqXG4gICAqIExhbmd1YWdlLXNwZWNpZmljIGNvZGUgZ2VuZXJhdGlvbiBvcHRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgbGFuZ3VhZ2VPcHRpb25zPzogTGFuZ3VhZ2VPcHRpb25zO1xuICAvKipcbiAgICogVGhlIHByb2plY3QncyBkZWNsYXJlZCB0YXJnZXRWZXJzaW9ucyAoY2RrdGYuanNvbikuIFVzZWQgdG8gZHJpdmUgdGhlXG4gICAqIGZldGNoLXRpbWUgZW1pc3Npb24tZ2FwIHdhcm5pbmcgaW4gQGNka3RuL3Byb3ZpZGVyLXNjaGVtYSBhbmQgdG8gc3RhbXBcbiAgICogdGhlIGdlbmVyYXRlZCBjb25zdHJhaW50cy5qc29uIGZvciBkaWFnbm9zdGljcy4gRG9lcyBOT1QgZmlsdGVyIGNvZGVnZW46XG4gICAqIHRoZSBmdWxsIHN1cmZhY2UgaXMgYWx3YXlzIGdlbmVyYXRlZCwgbmFycm93aW5nIGhhcHBlbnMgYXQgc3ludGguXG4gICAqL1xuICByZWFkb25seSB0YXJnZXRWZXJzaW9ucz86IFRlcnJhZm9ybVRhcmdldFZlcnNpb25zO1xufVxuXG5leHBvcnQgY2xhc3MgQ29uc3RydWN0c01ha2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjb2RlTWFrZXJPdXRkaXI6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBjb2RlOiBDb2RlTWFrZXI7XG4gIHByaXZhdGUgdmVyc2lvbnM6IHsgW3Byb3ZpZGVyTmFtZTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH07XG4gIC8qKiBSZXNvdXJjZSBkaXJlY3RvcnkgbmFtZXMgZW1pdHRlZCBwZXIgcHJvdmlkZXIgZm9sZGVyIGR1cmluZyB0aGlzIHJ1biAqL1xuICBwdWJsaWMgZW1pdHRlZFJlc291cmNlRm9sZGVyczogeyBbcHJvdmlkZXJOYW1lOiBzdHJpbmddOiBzdHJpbmdbXSB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogR2V0T3B0aW9ucyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNjaGVtYUNhY2hlUGF0aD86IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlcG9ydFRlbGVtZXRyeTogKHBheWxvYWQ6IHtcbiAgICAgIHRhcmdldExhbmd1YWdlOiBzdHJpbmc7XG4gICAgICB0cmFja2luZ1BheWxvYWQ6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgfSkgPT4gUHJvbWlzZTx2b2lkPiA9IGFzeW5jICgpID0+IHt9LFxuICApIHtcbiAgICB0aGlzLmNvZGVNYWtlck91dGRpciA9IHBhdGgucmVzb2x2ZSh0aGlzLm9wdGlvbnMuY29kZU1ha2VyT3V0cHV0KTtcbiAgICBmcy5ta2RpcnBTeW5jKHRoaXMuY29kZU1ha2VyT3V0ZGlyKTtcbiAgICB0aGlzLmNvZGUgPSBuZXcgQ29kZU1ha2VyKCk7XG4gICAgdGhpcy52ZXJzaW9ucyA9IHt9O1xuICAgIHRoaXMuZW1pdHRlZFJlc291cmNlRm9sZGVycyA9IHt9O1xuICB9XG4gIHByaXZhdGUgYXN5bmMgZ2VuZXJhdGVUeXBlc2NyaXB0UHJvdmlkZXIoXG4gICAgdGFyZ2V0OiBDb25zdHJ1Y3RzTWFrZXJQcm92aWRlclRhcmdldCxcbiAgICBzY2hlbWE6IFByb3ZpZGVyU2NoZW1hLFxuICApIHtcbiAgICBjb25zdCBlbmRUU1RpbWVyID0gbG9nVGltZXNwYW4oYEdlbmVyYXRlIFR5cGVzY3JpcHQgZm9yICR7dGFyZ2V0Lm5hbWV9YCk7XG4gICAgY29uc3QgZ2VuZXJhdG9yID0gbmV3IFRlcnJhZm9ybVByb3ZpZGVyR2VuZXJhdG9yKHRoaXMuY29kZSwgc2NoZW1hLCB7XG4gICAgICBpbXBvcnRFeHRlbnNpb246IHRoaXMub3B0aW9ucy5sYW5ndWFnZU9wdGlvbnM/LmltcG9ydEV4dGVuc2lvbixcbiAgICAgIHRhcmdldFZlcnNpb25zOiB0aGlzLm9wdGlvbnMudGFyZ2V0VmVyc2lvbnMsXG4gICAgfSk7XG4gICAgZ2VuZXJhdG9yLmdlbmVyYXRlKHRhcmdldCk7XG5cbiAgICB0aGlzLnZlcnNpb25zID0geyAuLi50aGlzLnZlcnNpb25zLCAuLi5nZW5lcmF0b3IudmVyc2lvbnMgfTtcbiAgICB0aGlzLmVtaXR0ZWRSZXNvdXJjZUZvbGRlcnMgPSB7XG4gICAgICAuLi50aGlzLmVtaXR0ZWRSZXNvdXJjZUZvbGRlcnMsXG4gICAgICAuLi5nZW5lcmF0b3IuZW1pdHRlZFJlc291cmNlRm9sZGVycyxcbiAgICB9O1xuICAgIGVuZFRTVGltZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBmaWx0ZXJBbHJlYWR5R2VuZXJhdGVkKFxuICAgIGNvbnN0cmFpbnRzOiBUZXJyYWZvcm1EZXBlbmRlbmN5Q29uc3RyYWludFtdLFxuICApIHtcbiAgICBsZXQgY29uc3RyYWludHNGaWxlID0gXCJ7fVwiO1xuICAgIHRyeSB7XG4gICAgICBjb25zdHJhaW50c0ZpbGUgPSBhd2FpdCBmcy5yZWFkRmlsZShcbiAgICAgICAgcGF0aC5qb2luKHRoaXMuY29kZU1ha2VyT3V0ZGlyLCBcImNvbnN0cmFpbnRzLmpzb25cIiksXG4gICAgICAgIFwidXRmOFwiLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBDb3VsZCBub3QgZmluZCBjb25zdHJhaW50cy5qc29uIGZpbGUgd2hpbGUgZmlsdGVyaW5nOiAke2V9LiBUaGlzIG1lYW5zIG5vIHByb3ZpZGVycyB3ZXJlIGdlbmVyYXRlZCwgc28gYWxsIGNvbnN0cmFpbnRzIG5lZWQgdG8gYmUgZ2VuZXJhdGVkLmAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGNvbnN0cmFpbnRzO1xuICAgIH1cbiAgICBsb2dnZXIuZGVidWcoYEZvdW5kIGNvbnN0cmFpbnRzLmpzb24gZmlsZTogJHtjb25zdHJhaW50c0ZpbGV9YCk7XG5cbiAgICBsZXQgcHJldmlvdXNDb25zdHJhaW50czogUGFydGlhbDxDb25zdHJhaW50RmlsZT4gPSB7fTtcbiAgICB0cnkge1xuICAgICAgcHJldmlvdXNDb25zdHJhaW50cyA9IEpTT04ucGFyc2UoY29uc3RyYWludHNGaWxlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgYENvdWxkIG5vdCBwYXJzZSBjb25zdHJhaW50cy5qc29uIGZpbGUgd2hpbGUgZmlsdGVyaW5nOiAke2V9LiBHZW5lcmF0aW5nIGFsbCBjb25zdHJhaW50cy5gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBjb25zdHJhaW50cztcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgRm91bmQgcHJldmlvdXMgY29uc3RyYWludHM6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHByZXZpb3VzQ29uc3RyYWludHMsXG4gICAgICAgIG51bGwsXG4gICAgICAgIDIsXG4gICAgICApfWAsXG4gICAgKTtcblxuICAgIGlmIChcbiAgICAgICFwcmV2aW91c0NvbnN0cmFpbnRzLnByb3ZpZGVycyB8fFxuICAgICAgdHlwZW9mIHByZXZpb3VzQ29uc3RyYWludHMucHJvdmlkZXJzICE9PSBcIm9iamVjdFwiXG4gICAgKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgYENvdWxkIG5vdCBmaW5kIHByb3ZpZGVycyBpbiBjb25zdHJhaW50cy5qc29uIGZpbGUsIGdlbmVyYXRpbmcgYWxsIGNvbnN0cmFpbnRzLiBUaGUgY29uc3RyYWludHMgZmlsZSB3YXMgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICBwcmV2aW91c0NvbnN0cmFpbnRzLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgMixcbiAgICAgICAgKX1gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBjb25zdHJhaW50cztcbiAgICB9XG5cbiAgICBpZiAocHJldmlvdXNDb25zdHJhaW50cy5jZGt0ZiAhPT0gRElTUExBWV9WRVJTSU9OKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgYFRoZSBDREtUTiB2ZXJzaW9uIGhhcyBjaGFuZ2VkLCBnZW5lcmF0aW5nIGFsbCBjb25zdHJhaW50cy4gVGhlIHByZXZpb3VzIHZlcnNpb24gd2FzICR7cHJldmlvdXNDb25zdHJhaW50cy5jZGt0Zn0sIHRoZSBjdXJyZW50IHZlcnNpb24gaXMgJHtESVNQTEFZX1ZFUlNJT059YCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gY29uc3RyYWludHM7XG4gICAgfVxuXG4gICAgY29uc3QgY29uc3RyYWludHNUb0dlbmVyYXRlID0gY29uc3RyYWludHMuZmlsdGVyKChjb25zdHJhaW50KSA9PiB7XG4gICAgICBjb25zdCBjb25zdHJhaW50TWF0Y2hlcyA9XG4gICAgICAgIHByZXZpb3VzQ29uc3RyYWludHMucHJvdmlkZXJzIVtjb25zdHJhaW50LmZxbl0gPT09IGNvbnN0cmFpbnQudmVyc2lvbjtcbiAgICAgIGxldCBwcm92aWRlckZvbGRlckV4aXN0cyA9IGZhbHNlO1xuXG4gICAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy50YXJnZXRMYW5ndWFnZSkge1xuICAgICAgICBjYXNlIExhbmd1YWdlLlRZUEVTQ1JJUFQ6XG4gICAgICAgICAgcHJvdmlkZXJGb2xkZXJFeGlzdHMgPSBmcy5leGlzdHNTeW5jKFxuICAgICAgICAgICAgcGF0aC5qb2luKHRoaXMuY29kZU1ha2VyT3V0ZGlyLCBcInByb3ZpZGVyc1wiLCBjb25zdHJhaW50Lm5hbWUpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTGFuZ3VhZ2UuUFlUSE9OOlxuICAgICAgICBjYXNlIExhbmd1YWdlLkpBVkE6XG4gICAgICAgIGNhc2UgTGFuZ3VhZ2UuQ1NIQVJQOlxuICAgICAgICAgIHByb3ZpZGVyRm9sZGVyRXhpc3RzID0gZnMuZXhpc3RzU3luYyhcbiAgICAgICAgICAgIHBhdGguam9pbih0aGlzLmNvZGVNYWtlck91dGRpciwgY29uc3RyYWludC5uYW1lKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIExhbmd1YWdlLkdPOlxuICAgICAgICAgIHByb3ZpZGVyRm9sZGVyRXhpc3RzID0gZnMuZXhpc3RzU3luYyhcbiAgICAgICAgICAgIHBhdGguam9pbihcbiAgICAgICAgICAgICAgdGhpcy5jb2RlTWFrZXJPdXRkaXIsXG4gICAgICAgICAgICAgIGNvbnN0cmFpbnQubmFtZXNwYWNlIHx8IFwiaGFzaGljb3JwXCIsXG4gICAgICAgICAgICAgIGNvbnN0cmFpbnQubmFtZSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvdmlkZXJFeGlzdHMgPSBjb25zdHJhaW50TWF0Y2hlcyAmJiBwcm92aWRlckZvbGRlckV4aXN0cztcbiAgICAgIHJldHVybiAhcHJvdmlkZXJFeGlzdHM7XG4gICAgfSk7XG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgQ29uc3RyYWludHMgdG8gZ2VuZXJhdGU6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGNvbnN0cmFpbnRzVG9HZW5lcmF0ZSxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgMixcbiAgICAgICl9YCxcbiAgICApO1xuXG4gICAgcmV0dXJuIGNvbnN0cmFpbnRzVG9HZW5lcmF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2VuZXJhdGVUeXBlc2NyaXB0TW9kdWxlKFxuICAgIHRhcmdldDogQ29uc3RydWN0c01ha2VyTW9kdWxlVGFyZ2V0LFxuICAgIHNjaGVtYTogTW9kdWxlU2NoZW1hLFxuICApIHtcbiAgICBjb25zdCBlbmRUU1RpbWVyID0gbG9nVGltZXNwYW4oYEdlbmVyYXRlIFR5cGVzY3JpcHQgZm9yICR7dGFyZ2V0Lm5hbWV9YCk7XG4gICAgdGFyZ2V0LnNwZWMgPSBzY2hlbWE7XG4gICAgbmV3IE1vZHVsZUdlbmVyYXRvcih0aGlzLmNvZGUsIFt0YXJnZXRdKTtcbiAgICBlbmRUU1RpbWVyKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlVHlwZXNjcmlwdChcbiAgICB0YXJnZXQ6IENvbnN0cnVjdHNNYWtlclRhcmdldCxcbiAgICBzY2hlbWFzOiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIHJlYWRTY2hlbWE+PixcbiAgKSB7XG4gICAgaWYgKHRhcmdldC5pc01vZHVsZSkge1xuICAgICAgY29uc3Qgc2NoZW1hID0gc2NoZW1hcy5tb2R1bGVTY2hlbWE/Llt0YXJnZXQubW9kdWxlS2V5XTtcbiAgICAgIGlmICghc2NoZW1hKSB7XG4gICAgICAgIHRocm93IEVycm9ycy5JbnRlcm5hbChcbiAgICAgICAgICBgQ291bGQgbm90IGdlbmVyYXRlIHNjaGVtYSBmb3IgbW9kdWxlICR7dGFyZ2V0Lm1vZHVsZUtleX1gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLmdlbmVyYXRlVHlwZXNjcmlwdE1vZHVsZShcbiAgICAgICAgdGFyZ2V0IGFzIENvbnN0cnVjdHNNYWtlck1vZHVsZVRhcmdldCxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRhcmdldC5pc1Byb3ZpZGVyKSB7XG4gICAgICBpZiAoIXNjaGVtYXMucHJvdmlkZXJTY2hlbWEpIHtcbiAgICAgICAgdGhyb3cgRXJyb3JzLkludGVybmFsKGBDb3VsZCBub3QgZ2VuZXJhdGUgc2NoZW1hIGZvciBwcm92aWRlcnNgKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5nZW5lcmF0ZVR5cGVzY3JpcHRQcm92aWRlcihcbiAgICAgICAgdGFyZ2V0IGFzIENvbnN0cnVjdHNNYWtlclByb3ZpZGVyVGFyZ2V0LFxuICAgICAgICBzY2hlbWFzLnByb3ZpZGVyU2NoZW1hLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVW5rbm93biB0YXJnZXQgdHlwZSB1c2VkIHRvIGdlbmVyYXRlIGJpbmRpbmdzOiAke3RhcmdldC5uYW1lfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVtaXRzIGEgdmVyc2lvbnMuanNvbiBmaWxlIHdpdGggYSBtYXAgb2YgdGhlIHVzZWQgdmVyc2lvbiBmb3IgZWFjaCBwcm92aWRlciBmcXBuXG4gIHByaXZhdGUgdXBkYXRlVmVyc2lvbnNGaWxlKFxuICAgIGFsbG93ZWRDb25zdHJhaW50czogVGVycmFmb3JtRGVwZW5kZW5jeUNvbnN0cmFpbnRbXSxcbiAgKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYFVwZGF0aW5nIHZlcnNpb25zIGZpbGUgd2l0aCBnZW5lcmF0ZWQgdmVyc2lvbnMgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgdGhpcy52ZXJzaW9ucyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgMixcbiAgICAgICl9IHdpdGggYWxsb3dlZCBjb25zdHJhaW50cyAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBhbGxvd2VkQ29uc3RyYWludHMsXG4gICAgICAgIG51bGwsXG4gICAgICAgIDIsXG4gICAgICApfWAsXG4gICAgKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IFwidmVyc2lvbnMuanNvblwiO1xuICAgIGxldCBwcmV2aW91c1ZlcnNpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgdHJ5IHtcbiAgICAgIHByZXZpb3VzVmVyc2lvbnMgPSBKU09OLnBhcnNlKFxuICAgICAgICBmcy5yZWFkRmlsZVN5bmMocGF0aC5yZXNvbHZlKHRoaXMuY29kZU1ha2VyT3V0ZGlyLCBmaWxlUGF0aCksIFwidXRmOFwiKSxcbiAgICAgICk7XG5cbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYFJlYWQgZXhpc3RpbmcgdmVyc2lvbnMgZmlsZTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICBwcmV2aW91c1ZlcnNpb25zLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgMixcbiAgICAgICAgKX1gLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYENvdWxkIG5vdCByZWFkIHZlcnNpb25zIGZpbGUsIHRoaXMgaXMgZXhwZWN0ZWQgaWYgdGhlcmUgYXJlIG5vIHByZS1leGlzdGluZyBsb2NhbCBwcm92aWRlcnM6ICR7ZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB2ZXJzaW9ucyA9IGFsbG93ZWRDb25zdHJhaW50cy5yZWR1Y2UoKGFjYywgY29uc3RyYWludCkgPT4ge1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBPYmplY3QuZW50cmllcyhwcmV2aW91c1ZlcnNpb25zKS5maW5kKChbbmFtZV0pID0+XG4gICAgICAgIC8vIFRoaXMgY291bGQgYmUgbW9yZSByZWZpbmVkLCBidXQgaXQncyBnb29kIGVub3VnaCBmb3Igbm93XG4gICAgICAgIG5hbWUuZW5kc1dpdGgoY29uc3RyYWludC5mcW4pLFxuICAgICAgKTtcblxuICAgICAgaWYgKHByb3ZpZGVyKSB7XG4gICAgICAgIGNvbnN0IFtuYW1lLCB2ZXJzaW9uXSA9IHByb3ZpZGVyO1xuICAgICAgICByZXR1cm4geyAuLi5hY2MsIFtuYW1lXTogdmVyc2lvbiB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcblxuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBXcml0aW5nIHZlcnNpb25zIGZpbGUgKCR7ZmlsZVBhdGh9KTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgdmVyc2lvbnMsXG4gICAgICAgIG51bGwsXG4gICAgICAgIDIsXG4gICAgICApfWAsXG4gICAgKTtcblxuICAgIHRoaXMuY29kZS5vcGVuRmlsZShmaWxlUGF0aCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoSlNPTi5zdHJpbmdpZnkoeyAuLi52ZXJzaW9ucywgLi4udGhpcy52ZXJzaW9ucyB9LCBudWxsLCAyKSk7XG4gICAgdGhpcy5jb2RlLmNsb3NlRmlsZShmaWxlUGF0aCk7XG4gICAgcmV0dXJuIGZpbGVQYXRoO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlbW92ZUZvbGRlcnNUaGF0U2hvdWxkTm90RXhpc3QoXG4gICAgY29uc3RyYWludHNUaGF0U2hvdWxkRXhpc3Q6IFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50W10sXG4gICkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBSZW1vdmluZyBwcm92aWRlcnMgZXhjZXB0IGZvciAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBjb25zdHJhaW50c1RoYXRTaG91bGRFeGlzdCxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgMixcbiAgICAgICl9YCxcbiAgICApO1xuXG4gICAgLy8gQWxsIGxhbmd1YWdlcyBiZXNpZGVzIFRTIGtlZXAgdGhlaXIgcHJvdmlkZXJzIGluIHRoZSBzYW1lIGZvbGRlcnMgYXMgbW9kdWxlc1xuICAgIC8vIHRoaXMgbWFrZXMgaXQgaW1wb3NzaWJsZSBmb3IgdXMgdG8gZGlzdGluZ3Vpc2ggYSBubyBsb25nZXIgcmVxdWlyZWQgcHJvdmlkZXJcbiAgICAvLyBmcm9tIGEgbWFudWFsbHkgd3JpdHRlbiBjb25zdHJ1Y3Qgb3IgYSBtb2R1bGVcbiAgICBpZiAoIXRoaXMuaXNKYXZhc2NyaXB0VGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGZpbGVzSW5Qcm92aWRlcnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgcHJvdmlkZXJzRm9sZGVyID0gcGF0aC5yZXNvbHZlKHRoaXMuY29kZU1ha2VyT3V0ZGlyLCBcInByb3ZpZGVyc1wiKTtcbiAgICB0cnkge1xuICAgICAgZmlsZXNJblByb3ZpZGVycyA9IGF3YWl0IGZzLnJlYWRkaXIocHJvdmlkZXJzRm9sZGVyKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBFcnJvciBsaXN0aW5nIGZpbGVzIGluIHByb3ZpZGVycyBmb2xkZXIgJyR7cHJvdmlkZXJzRm9sZGVyfSc6ICR7ZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBmb2xkZXJzID0gZmlsZXNJblByb3ZpZGVycy5maWx0ZXIoKGZpbGUpID0+XG4gICAgICBmc1xuICAgICAgICAuc3RhdFN5bmMocGF0aC5yZXNvbHZlKHRoaXMuY29kZU1ha2VyT3V0ZGlyLCBcInByb3ZpZGVyc1wiLCBmaWxlKSlcbiAgICAgICAgLmlzRGlyZWN0b3J5KCksXG4gICAgKTtcblxuICAgIHJldHVybiBmb2xkZXJzLmZvckVhY2goKGZvbGRlcikgPT4ge1xuICAgICAgY29uc3Qgc2hvdWxkRXhpc3QgPSBjb25zdHJhaW50c1RoYXRTaG91bGRFeGlzdC5zb21lKFxuICAgICAgICAoY29uc3RyYWludCkgPT4gY29uc3RyYWludC5uYW1lID09PSBmb2xkZXIsXG4gICAgICApO1xuXG4gICAgICBpZiAoIXNob3VsZEV4aXN0KSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgUmVtb3ZpbmcgZm9sZGVyICR7Zm9sZGVyfSBmcm9tIHByb3ZpZGVyc2ApO1xuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmNvZGVNYWtlck91dGRpciwgXCJwcm92aWRlcnNcIiwgZm9sZGVyKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIHJlc291cmNlIGRpcmVjdG9yaWVzIHVuZGVyIGBwcm92aWRlcnMvYCB0aGF0IHRoaXMgcnVuIGRpZCBub3QgZW1pdCwgc28gZWFjaCBwcm92aWRlciBmb2xkZXIgaG9sZHNcbiAgICogZXhhY3RseSB0aGUgcmVzb3VyY2VzIGluIHRoZSB2ZXJzaW9uIGl0IHdhcyBnZW5lcmF0ZWQgYWdhaW5zdC5cbiAgICpcbiAgICogV2Fsa3Mgb25seSBwcm92aWRlcnMgcHJlc2VudCBpbiBgZW1pdHRlZFJlc291cmNlRm9sZGVyc2AsIGtlZXBpbmcgYW55IHByb3ZpZGVyIHRoaXMgcnVuIHNraXBwZWQuIFdpdGhpbiB0aG9zZSxcbiAgICogcmVtb3ZlcyBldmVyeSBzdWJkaXJlY3Rvcnkgbm90IGVtaXR0ZWQgYW5kIGxlYXZlcyBwcm92aWRlci1sZXZlbCBmaWxlcyAoYGluZGV4LnRzYCwgYGxhenktaW5kZXgudHNgKSBpbiBwbGFjZS5cbiAgICogRGVsZXRlcyBmaWxlcywgc28gaXQgbXVzdCBydW4gYWZ0ZXIgYHNhdmUoKWAgaGFzIHdyaXR0ZW4gdGhlIGN1cnJlbnQgcnVuJ3Mgb3V0cHV0LlxuICAgKlxuICAgKiBUeXBlU2NyaXB0IG9ubHk6IGBwcm92aWRlcnMvPG5hbWU+LzxyZXNvdXJjZT4vYCBtYXBzIG9uZS10by1vbmUgb250byB0aGUgZW1pdHRlZCBpbmRleCBleHBvcnRzLiBPdGhlciBsYW5ndWFnZXNcbiAgICogY28tbG9jYXRlIHByb3ZpZGVycyBhbmQgbW9kdWxlcyBpbiB0aGUgc2FtZSBmb2xkZXJzLCB3aGljaCBtYWtlcyBhIGRyb3BwZWQgcmVzb3VyY2UgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhXG4gICAqIGhhbmQtd3JpdHRlbiBjb25zdHJ1Y3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVtb3ZlT3JwaGFuZWRSZXNvdXJjZUZvbGRlcnMoKSB7XG4gICAgaWYgKCF0aGlzLmlzSmF2YXNjcmlwdFRhcmdldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW3Byb3ZpZGVyLCBlbWl0dGVkRm9sZGVyc10gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICB0aGlzLmVtaXR0ZWRSZXNvdXJjZUZvbGRlcnMsXG4gICAgKSkge1xuICAgICAgY29uc3QgcHJvdmlkZXJGb2xkZXIgPSBwYXRoLnJlc29sdmUoXG4gICAgICAgIHRoaXMuY29kZU1ha2VyT3V0ZGlyLFxuICAgICAgICBcInByb3ZpZGVyc1wiLFxuICAgICAgICBwcm92aWRlcixcbiAgICAgICk7XG5cbiAgICAgIGxldCBlbnRyaWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZW50cmllcyA9IGF3YWl0IGZzLnJlYWRkaXIocHJvdmlkZXJGb2xkZXIpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgICAgYENvdWxkIG5vdCBsaXN0IHJlc291cmNlIGZvbGRlcnMgaW4gJyR7cHJvdmlkZXJGb2xkZXJ9JzogJHtlfWAsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBleHBlY3RlZCA9IG5ldyBTZXQoZW1pdHRlZEZvbGRlcnMpO1xuICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgIGlmIChleHBlY3RlZC5oYXMoZW50cnkpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbnRyeVBhdGggPSBwYXRoLnJlc29sdmUocHJvdmlkZXJGb2xkZXIsIGVudHJ5KTtcbiAgICAgICAgaWYgKCFmcy5zdGF0U3luYyhlbnRyeVBhdGgpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAvLyBMZWF2ZSBpbmRleC50cyAvIGxhenktaW5kZXgudHMgYW5kIGFueSBvdGhlciBwcm92aWRlci1sZXZlbCBmaWxlcyBhbG9uZS5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBgUmVtb3Zpbmcgb3JwaGFuZWQgcmVzb3VyY2UgZm9sZGVyICcke2VudHJ5fScgZnJvbSBwcm92aWRlciAnJHtwcm92aWRlcn0nOiBpdCB3YXMgbm90IGVtaXR0ZWQgZm9yIHRoZSBjdXJyZW50IHByb3ZpZGVyIHZlcnNpb25gLFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCBmcy5yZW1vdmUoZW50cnlQYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBlbWl0cyBhIGNvbnN0cmFpbnRzLmpzb24gZmlsZSB3aXRoIGEgbWFwIG9mIHRoZSB1c2VkIHByb3ZpZGVyIGZxcG5zIGFuZCB2ZXJzaW9uIGNvbnN0cmFpbnRzXG4gIC8vIHRoaXMgaXMgdXNlZCBmb3IgY2FjaGluZyBwdXJwb3Nlc1xuICBwcml2YXRlIGVtaXRDb25zdHJhaW50c0ZpbGUoXG4gICAgYWxsb3dlZENvbnN0cmFpbnRzOiBUZXJyYWZvcm1EZXBlbmRlbmN5Q29uc3RyYWludFtdLFxuICAgIHByb3ZpZGVyU2NoZW1hPzogUHJvdmlkZXJTY2hlbWEsXG4gICkge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gXCJjb25zdHJhaW50cy5qc29uXCI7XG5cbiAgICBjb25zdCBjb250ZW50OiBDb25zdHJhaW50RmlsZSA9IHtcbiAgICAgIGNka3RmOiBESVNQTEFZX1ZFUlNJT04sXG4gICAgICBwcm92aWRlcnM6IGFsbG93ZWRDb25zdHJhaW50c1xuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5mcW4ubG9jYWxlQ29tcGFyZShiLmZxbikpXG4gICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgKGNhcnJ5LCBpdGVtKSA9PiAoe1xuICAgICAgICAgICAgLi4uY2FycnksXG4gICAgICAgICAgICBbaXRlbS5mcW5dOiBpdGVtLnZlcnNpb24sXG4gICAgICAgICAgfSksXG4gICAgICAgICAge30sXG4gICAgICAgICksXG4gICAgfTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMudGFyZ2V0VmVyc2lvbnMpIHtcbiAgICAgIGNvbnRlbnQudGFyZ2V0VmVyc2lvbnMgPSB0aGlzLm9wdGlvbnMudGFyZ2V0VmVyc2lvbnM7XG4gICAgfVxuXG4gICAgaWYgKHByb3ZpZGVyU2NoZW1hPy5jbGlfbmFtZSB8fCBwcm92aWRlclNjaGVtYT8uY2xpX3ZlcnNpb24pIHtcbiAgICAgIGNvbnRlbnQuY2xpID0ge1xuICAgICAgICBuYW1lOiBwcm92aWRlclNjaGVtYS5jbGlfbmFtZSxcbiAgICAgICAgdmVyc2lvbjogcHJvdmlkZXJTY2hlbWEuY2xpX3ZlcnNpb24sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuY29kZS5vcGVuRmlsZShmaWxlUGF0aCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoSlNPTi5zdHJpbmdpZnkoY29udGVudCwgbnVsbCwgMikpO1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICAgIHJldHVybiBmaWxlUGF0aDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2VuZXJhdGVKc2lpTGFuZ3VhZ2UodGFyZ2V0OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQpIHtcbiAgICAvLyBNb2R1bGUgZGVwZW5kZW5jaWVzIHdlIGNvbXBpbGUgYWdhaW5zdC4gU3RhdGljIHJlcXVpcmUucmVzb2x2ZSBjYWxscyBzb1xuICAgIC8vIGtuaXAgLyBwbnBtIHN0cmljdCBpc29sYXRpb24gY2FuIHNlZSB0aGUgZGVwcy5cbiAgICBjb25zdCBkZXBzID0gW1xuICAgICAgcGF0aC5kaXJuYW1lKHJlcXVpcmUucmVzb2x2ZShcIkB0eXBlcy9ub2RlL3BhY2thZ2UuanNvblwiKSksXG4gICAgICBwYXRoLmRpcm5hbWUocmVxdWlyZS5yZXNvbHZlKFwiY29uc3RydWN0cy9wYWNrYWdlLmpzb25cIikpLFxuICAgICAgcGF0aC5kaXJuYW1lKHJlcXVpcmUucmVzb2x2ZShcImNka3RuL3BhY2thZ2UuanNvblwiKSksXG4gICAgXTtcbiAgICBjb25zdCBvcHRzOiBHZW5lcmF0ZUpTSUlPcHRpb25zID0ge1xuICAgICAgZW50cnlwb2ludDogdGFyZ2V0LmZpbGVOYW1lLFxuICAgICAgZGVwcyxcbiAgICAgIG1vZHVsZUtleTogdGFyZ2V0Lm1vZHVsZUtleSxcbiAgICAgIGV4cG9ydHM6IHRhcmdldC5pc1Byb3ZpZGVyIC8vIE1vZHVsZXMgYXJlIHNtYWxsIGVub3VnaCB0aGF0IHdlIGRvbid0IG5lZWQgdGhpcyBvcHRpbWl6YXRpb25cbiAgICAgICAgPyB7XG4gICAgICAgICAgICBcIi5cIjoge1xuICAgICAgICAgICAgICBpbXBvcnQ6IGAuL3Byb3ZpZGVycy8ke3RhcmdldC5uYW1lfS9pbmRleC5qc2AsXG4gICAgICAgICAgICAgIHJlcXVpcmU6IGAuL3Byb3ZpZGVycy8ke3RhcmdldC5uYW1lfS9sYXp5LWluZGV4LmpzYCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9O1xuXG4gICAgLy8gdXNlZCBmb3IgdGVzdGluZy5cbiAgICBpZiAodGhpcy5vcHRpb25zLm91dHB1dEpzaWkpIHtcbiAgICAgIG9wdHMuanNpaSA9IHsgcGF0aDogdGhpcy5vcHRpb25zLm91dHB1dEpzaWkgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1B5dGhvblRhcmdldCkge1xuICAgICAgb3B0cy5weXRob24gPSB7XG4gICAgICAgIG91dGRpcjogdGhpcy5jb2RlTWFrZXJPdXRkaXIsXG4gICAgICAgIG1vZHVsZU5hbWU6IHRhcmdldC5zcmNNYWtOYW1lLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0phdmFUYXJnZXQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5vcHRpb25zLmNvZGVNYWtlck91dHB1dC5pbmNsdWRlcyhcIi9cIikgfHxcbiAgICAgICAgdGhpcy5vcHRpb25zLmNvZGVNYWtlck91dHB1dC5pbmNsdWRlcyhcIlxcXFxcIilcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBFcnJvcnMuVXNhZ2UoXG4gICAgICAgICAgYFdoZW4gdXNpbmcgSmF2YSB0aGUgXCJjb2RlTWFrZXJPdXRwdXRcIiBvcHRpb24gaW4gdGhlIGNka3RmLmpzb24gbXVzdCBiZSB0aGUgb3JnYW5pemF0aW9uIGlkZW50aWZpZXIgZm9yIHlvdXIgcHJvamVjdCAoZS5nLiBjb20ubXktY29tcGFueSksIG5vdCBhIHBhdGguIFRoZSBnZW5lcmF0ZWQgSmF2YSBjb2RlIHdpbGwgYmUgcGxhY2VkIGluIGEgc3ViZGlyZWN0b3J5IG9mIHRoZSBnaXZlbiBkaXJlY3RvcnkuIElmIHlvdSBhcmUgbWlncmF0aW5nIGZyb20gYSA8IDAuMTkgdmVyc2lvbiBvZiBjZGt0ZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGNvZGVtYWtlck91dHB1dCB0byBcImltcG9ydHNcIi5gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBvcHRzLmphdmEgPSB7XG4gICAgICAgIG91dGRpcjogXCIuXCIsIC8vIGdlbmVyYXRlZCBqYXZhIGZpbGVzIGFyZW4ndCBwYWNrYWdlZCwgc28ganVzdCBpbmNsdWRlIGRpcmVjdGx5IGluIGFwcFxuICAgICAgICBwYWNrYWdlOiBgJHt0aGlzLm9wdGlvbnMuY29kZU1ha2VyT3V0cHV0fS4ke3RhcmdldC5zcmNNYWtOYW1lfWAsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzQ3NoYXJwVGFyZ2V0KSB7XG4gICAgICBvcHRzLmNzaGFycCA9IHtcbiAgICAgICAgb3V0ZGlyOiB0aGlzLmNvZGVNYWtlck91dGRpcixcbiAgICAgICAgbmFtZXNwYWNlOiB0YXJnZXQuc3JjTWFrTmFtZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNHb1RhcmdldCkge1xuICAgICAgLy8gVE9ETzogY2hlY2sgaWYgbmVlZGVkIGZvciBtb2R1bGVzIHNvbWVob3dcbiAgICAgIC8vIGNvbnN0IHRhcmdldFR5cGUgPSB0YXJnZXQuaXNQcm92aWRlciA/ICdwcm92aWRlcicgOiAnbW9kdWxlJztcblxuICAgICAgLy8ganNpaS1zcmNtYWMgd2lsbCBwcm9kdWNlIGEgZm9sZGVyIGluc2lkZSB0aGlzIGRpciBuYW1lZCBhZnRlciBcInBhY2thZ2VOYW1lXCJcbiAgICAgIC8vIHNvIHRoaXMgcmVzdWx0cyBpbiBlLmcuIC5nZW4vaGFzaGljb3JwL3JhbmRvbVxuICAgICAgY29uc3Qgb3V0ZGlyID0gcGF0aC5qb2luKHRoaXMuY29kZU1ha2VyT3V0ZGlyLCB0YXJnZXQubmFtZXNwYWNlID8/IFwiXCIpO1xuXG4gICAgICBvcHRzLmdvbGFuZyA9IHtcbiAgICAgICAgb3V0ZGlyLFxuICAgICAgICBtb2R1bGVOYW1lOiBhd2FpdCBkZXRlcm1pbmVHb01vZHVsZU5hbWUob3V0ZGlyKSwgLy8gZS5nLiBgZ2l0aHViLmNvbS9vcmcvdXNlcnByb2plY3QvLmdlbi9oYXNoaWNvcnBgXG4gICAgICAgIHBhY2thZ2VOYW1lOiB0YXJnZXQuc3JjTWFrTmFtZSwgLy8gcGFja2FnZSB3aWxsIGJlIG5hbWVkIGUuZy4gcmFuZG9tIGZvciBoYXNoaWNvcnAvcmFuZG9tXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfT1BUSU9OUyAmJlxuICAgICAgIXByb2Nlc3MuZW52Lk5PREVfT1BUSU9OUy5pbmNsdWRlcyhgLS1tYXgtb2xkLXNwYWNlLXNpemVgKVxuICAgICkge1xuICAgICAgbG9nZ2VyLndhcm4oYGZvdW5kIE5PREVfT1BUSU9OUyBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aXRob3V0IGEgc2V0dGluZyBmb3IgLS1tYXgtb2xkLXNwYWNlLXNpemUuXG5UaGUgcHJvdmlkZXIgZ2VuZXJhdGlvbiBuZWVkcyBhIHN1YnN0YW50aWFsIGFtb3VudCBvZiBtZW1vcnkgKH4xM0dCKSBmb3Igc29tZSBwcm92aWRlcnMgYW5kIGxhbmd1YWdlcy5cblNvIGNka3RuLWNsaSBzZXRzIGl0IHRvIE5PREVfT1BUSU9OUz1cIi0tbWF4LW9sZC1zcGFjZS1zaXplPTE2Mzg0XCIgYnkgZGVmYXVsdC4gQXMgeW91ciBlbnZpcm9ubWVudCBhbHJlYWR5IGNvbnRhaW5zXG5hIE5PREVfT1BUSU9OUyB2YXJpYWJsZSwgd2Ugd29uJ3Qgb3ZlcnJpZGUgaXQuIEhlbmNlLCB0aGUgcHJvdmlkZXIgZ2VuZXJhdGlvbiBtaWdodCBmYWlsIHdpdGggYW4gb3V0IG9mIG1lbW9yeSBlcnJvci5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW5jcmVhc2UgbWVtb3J5IHRvIGFsbG93IGdlbmVyYXRpbmcgbGFyZ2UgcHJvdmlkZXJzIChpLmUuIGF3cyBvciBhenVyZXJtIGZvciBHbylcbiAgICAgIC8vIHNyY21hayBpcyBnb2luZyB0byBzcGF3biBhIGNoaWxkcHJvY2VzcyAoZm9yIGpzaWktcGFjbWFrKSB3aGljaCBpcyBnb2luZyB0byBiZSBhZmZlY3RlZCBieSB0aGlzIGVudiB2YXJcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfT1BUSU9OUyA9IFwiLS1tYXgtb2xkLXNwYWNlLXNpemU9MTYzODRcIjtcbiAgICB9XG5cbiAgICBjb25zdCBqc2lpVGltZXIgPSBsb2dUaW1lc3BhbihcIkpTSUlcIik7XG4gICAgYXdhaXQgZ2VuZXJhdGVKc2lpTGFuZ3VhZ2UodGhpcy5jb2RlLCBvcHRzLCB0aGlzLmNvZGVNYWtlck91dGRpciwgW1xuICAgICAgdGFyZ2V0LmlzTW9kdWxlID8gXCJwcm92aWRlcnMvKipcIiA6IFwibW9kdWxlcy8qKlwiLFxuICAgIF0pO1xuICAgIGpzaWlUaW1lcigpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFNjaGVtYXModGFyZ2V0czogVGVycmFmb3JtRGVwZW5kZW5jeUNvbnN0cmFpbnRbXSkge1xuICAgIHJldHVybiBhd2FpdCByZWFkU2NoZW1hKFxuICAgICAgdGFyZ2V0cyxcbiAgICAgIHRoaXMuc2NoZW1hQ2FjaGVQYXRoLFxuICAgICAgdGhpcy5vcHRpb25zLnRhcmdldFZlcnNpb25zLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2VuZXJhdGUoXG4gICAgYWxsQ29uc3RyYWludHM6IFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50W10sXG4gICAgY29uc3RyYWludHNUb0dlbmVyYXRlID0gYWxsQ29uc3RyYWludHMsXG4gICkge1xuICAgIGNvbnN0IHRhcmdldHMgPSBjb25zdHJhaW50c1RvR2VuZXJhdGUubWFwKChjb25zdHJhaW50KSA9PlxuICAgICAgQ29uc3RydWN0c01ha2VyVGFyZ2V0LmZyb20oY29uc3RyYWludCwgdGhpcy5vcHRpb25zLnRhcmdldExhbmd1YWdlKSxcbiAgICApO1xuXG4gICAgY29uc3QgZW5kU2NoZW1hVGltZXIgPSBsb2dUaW1lc3BhbihcIkdhdGhlcmluZyBzY2hlbWFcIik7XG4gICAgY29uc3Qgc2NoZW1hcyA9IGF3YWl0IHRoaXMuZ2V0U2NoZW1hcyhjb25zdHJhaW50c1RvR2VuZXJhdGUpO1xuICAgIGVuZFNjaGVtYVRpbWVyKCk7XG5cbiAgICBjb25zdCBlbmRHZW5lcmF0ZVRpbWVyID0gbG9nVGltZXNwYW4oXCJHZW5lcmF0ZSBUU1wiKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHRhcmdldHMubWFwKCh0YXJnZXQpID0+IHRoaXMuZ2VuZXJhdGVUeXBlc2NyaXB0KHRhcmdldCwgc2NoZW1hcykpLFxuICAgICk7XG4gICAgZW5kR2VuZXJhdGVUaW1lcigpO1xuXG4gICAgdGhpcy51cGRhdGVWZXJzaW9uc0ZpbGUoYWxsQ29uc3RyYWludHMpO1xuICAgIHRoaXMuZW1pdENvbnN0cmFpbnRzRmlsZShhbGxDb25zdHJhaW50cywgc2NoZW1hcy5wcm92aWRlclNjaGVtYSk7XG5cbiAgICBpZiAodGhpcy5pc0phdmFzY3JpcHRUYXJnZXQpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2F2ZSgpO1xuICAgICAgYXdhaXQgdGhpcy5yZW1vdmVPcnBoYW5lZFJlc291cmNlRm9sZGVycygpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc0phdmFzY3JpcHRUYXJnZXQgfHwgdGhpcy5vcHRpb25zLm91dHB1dEpzaWkpIHtcbiAgICAgIGNvbnN0IG51bWJlck9mV29ya2VycyA9IE1hdGgubWF4KFxuICAgICAgICAxLFxuICAgICAgICB0aGlzLm9wdGlvbnMuanNpaVBhcmFsbGVsaXNtID09PSAtMVxuICAgICAgICAgID8gdGFyZ2V0cy5sZW5ndGhcbiAgICAgICAgICA6IHRoaXMub3B0aW9ucy5qc2lpUGFyYWxsZWxpc20gfHwgMSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHdvcmsgPSBbLi4udGFyZ2V0c107XG4gICAgICBjb25zdCB3b3JrZXJzID0gbmV3IEFycmF5KG51bWJlck9mV29ya2VycykuZmlsbChhc3luYyAoKSA9PiB7XG4gICAgICAgIGxldCB0YXJnZXQ6IENvbnN0cnVjdHNNYWtlclRhcmdldCB8IHVuZGVmaW5lZDtcbiAgICAgICAgd2hpbGUgKCh0YXJnZXQgPSB3b3JrLnBvcCgpKSkge1xuICAgICAgICAgIGNvbnN0IGVuZEpzaWlUYXJnZXQgPSBsb2dUaW1lc3BhbihcbiAgICAgICAgICAgIGBHZW5lcmF0aW5nIEpTSUkgYmluZGluZ3MgZm9yICR7dGFyZ2V0Lm5hbWV9YCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGF3YWl0IHRoaXMuZ2VuZXJhdGVKc2lpTGFuZ3VhZ2UodGFyZ2V0KTtcbiAgICAgICAgICBlbmRKc2lpVGFyZ2V0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbCh3b3JrZXJzLm1hcCgoZm4pID0+IGZuKCkpKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICBhd2FpdCB0aGlzLnJlcG9ydFRlbGVtZXRyeSh7XG4gICAgICAgIHRyYWNraW5nUGF5bG9hZDogdGFyZ2V0LnRyYWNraW5nUGF5bG9hZCxcbiAgICAgICAgdGFyZ2V0TGFuZ3VhZ2U6IHRhcmdldC50YXJnZXRMYW5ndWFnZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzUHl0aG9uVGFyZ2V0KSB7XG4gICAgICBjb25zdCBlbmRQeXRob25UaW1lciA9IGxvZ1RpbWVzcGFuKFwiUHl0aG9uIHBvc3QtcHJvY2Vzc2luZ1wiKTtcbiAgICAgIC8vIFJlbW92ZSBmcm9tIC4gaW1wb3J0IC4uLiBzdGF0ZW1lbnRzIGZyb20gcm9vdCBsZXZlbCBfX2luaXRfXy5weVxuICAgICAgLy8gVGhpcyByZW1vdmVzIHJvb3QtbGV2ZWwgaW1wb3J0cyBvZiBuYW1lc3BhY2VzLCBidXQgc2F2ZXMgMjVzIHN5bnRoIHRpbWUgZm9yIHRoZSBhd3MgcHJvdmlkZXIgYWxvbmVcbiAgICAgIGNvbnN0IGFsbEluaXRQeVBhdGhzID0gZ2xvYlxuICAgICAgICAuc3luYyhcIioqL19faW5pdF9fLnB5XCIsIHtcbiAgICAgICAgICBjd2Q6IHRoaXMuY29kZU1ha2VyT3V0ZGlyLFxuICAgICAgICB9KVxuICAgICAgICAvLyBzb3J0IGJ5IGRlcHRoLCBzbyB3ZSBzdGFydCB3aXRoIHRoZSBzaGFsbG93ZXN0IGZpbGVzXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnNwbGl0KFwiL1wiKS5sZW5ndGggLSBiLnNwbGl0KFwiL1wiKS5sZW5ndGgpO1xuXG4gICAgICBjb25zdCB2aXNpdGVkRGlyZWN0b3JpZXM6IHN0cmluZ1tdID0gW107XG4gICAgICBmb3IgKGNvbnN0IGluaXRQeVBhdGggb2YgYWxsSW5pdFB5UGF0aHMpIHtcbiAgICAgICAgY29uc3QgZGlyZWN0b3J5UGF0aCA9IHBhdGguZGlybmFtZShpbml0UHlQYXRoKTtcbiAgICAgICAgaWYgKHZpc2l0ZWREaXJlY3Rvcmllcy5zb21lKChkaXIpID0+IGRpcmVjdG9yeVBhdGguc3RhcnRzV2l0aChkaXIpKSkge1xuICAgICAgICAgIC8vIHdlIGFscmVhZHkgcHJvY2Vzc2VkIHRoaXMgZGlyZWN0b3J5XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmlzaXRlZERpcmVjdG9yaWVzLnB1c2goZGlyZWN0b3J5UGF0aCk7XG5cbiAgICAgICAgY29uc3QgYWJzb2x1dGVJbml0UHlQYXRoID0gcGF0aC5qb2luKHRoaXMuY29kZU1ha2VyT3V0ZGlyLCBpbml0UHlQYXRoKTtcbiAgICAgICAgY29uc3QgaW5pdFB5ID0gYXdhaXQgZnMucmVhZEZpbGUoYWJzb2x1dGVJbml0UHlQYXRoLCBcInV0ZjhcIik7XG4gICAgICAgIGNvbnN0IGluaXRQeVdpdGhvdXRJbXBvcnRzID0gaW5pdFB5LnJlcGxhY2UoL2Zyb20gXFwuIGltcG9ydCAuKlxcbi9nLCBcIlwiKTtcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKGFic29sdXRlSW5pdFB5UGF0aCwgaW5pdFB5V2l0aG91dEltcG9ydHMpO1xuICAgICAgfVxuXG4gICAgICBlbmRQeXRob25UaW1lcigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2F2ZShvdXRkaXIgPSB0aGlzLmNvZGVNYWtlck91dGRpcikge1xuICAgIGF3YWl0IHRoaXMuY29kZS5zYXZlKG91dGRpcik7XG4gIH1cblxuICBwcml2YXRlIGdldCBpc0phdmFzY3JpcHRUYXJnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50YXJnZXRMYW5ndWFnZSA9PT0gTGFuZ3VhZ2UuVFlQRVNDUklQVDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzUHl0aG9uVGFyZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudGFyZ2V0TGFuZ3VhZ2UgPT09IExhbmd1YWdlLlBZVEhPTjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzSmF2YVRhcmdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRhcmdldExhbmd1YWdlID09PSBMYW5ndWFnZS5KQVZBO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaXNDc2hhcnBUYXJnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50YXJnZXRMYW5ndWFnZSA9PT0gTGFuZ3VhZ2UuQ1NIQVJQO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaXNHb1RhcmdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRhcmdldExhbmd1YWdlID09PSBMYW5ndWFnZS5HTztcbiAgfVxufVxuXG4vKipcbiAqIHNlYXJjaGVzIGZvciB0aGUgY2xvc2VzdCBgZ28ubW9kYCBmaWxlIGFuZCByZXR1cm5zIHRoZSBuZXN0ZWQgZ28gbW9kdWxlIG5hbWUgZm9yIGBkaXJgXG4gKiBlLmcuICgvZGlyLy5nZW4vKSA9PiBjZGsudGYvc3RhY2svLmdlbiBpZiB0aGUgcGFyZW50IGRpciBvZiAuZ2VuIGhhcyBhIGdvLm1vZCBmb3IgXCJtb2R1bGUgY2RrLnRmL3N0YWNrXCJcbiAqXG4gKiBAcGFyYW0gZGlyIHRoZSBkaXJlY3RvcnkgdG8gc3RhcnQgdGhlIHNlYXJjaCBmcm9tIChzZWFyY2hlcyB1cHdhcmRzKVxuICogQHJldHVybnMgdGhlIHBhY2thZ2UgbmFtZSBmb3IgYGRpcmBcbiAqIEB0aHJvd3MgYW4gRXJyb3IgaWYgbm8gZ28ubW9kIHdhcyBmb3VuZFxuICovXG5leHBvcnQgY29uc3QgZGV0ZXJtaW5lR29Nb2R1bGVOYW1lID0gYXN5bmMgKGRpcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgbGV0IHByZXZpb3VzRGlyO1xuICBsZXQgY3VycmVudERpciA9IHBhdGgucmVzb2x2ZShkaXIpO1xuXG4gIGRvIHtcbiAgICBsZXQgZmlsZXM6IHN0cmluZ1tdID0gW107XG4gICAgdHJ5IHtcbiAgICAgIGZpbGVzID0gYXdhaXQgZnMucmVhZGRpcihjdXJyZW50RGlyKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIC8vIGRpcmVjdG9yeSBtaWdodCBub3QgZXhpc3QgeWV0LCBidXQgd2Ugc3RpbGwgd2FsayB1cHdhcmRzIGZyb20gdGhlcmUsIHNvIGlnbm9yZSAnRU5PRU5UJ1xuICAgICAgaWYgKGUuY29kZSAhPT0gXCJFTk9FTlRcIikge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZmlsZXMuaW5jbHVkZXMoXCJnby5tb2RcIikpIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBwYXRoLnJlc29sdmUoY3VycmVudERpciwgXCJnby5tb2RcIik7XG4gICAgICBjb25zdCBnb21vZCA9IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGUpO1xuICAgICAgY29uc3QgbWF0Y2ggPSAvXm1vZHVsZVxccyooXFxTKilcXHMqJC9tLmV4ZWMoZ29tb2QudG9TdHJpbmcoKSk7XG4gICAgICBpZiAobWF0Y2ggJiYgbWF0Y2hbMV0pIHtcbiAgICAgICAgY29uc3QgY2hpbGRkaXIgPSBwYXRoLnJlbGF0aXZlKGN1cnJlbnREaXIsIGRpcikucmVwbGFjZSgvXFxcXC9nLCBcIi9cIik7IC8vIHJlcGxhY2UgJ1xcJyB3aXRoICcvJyBmb3Igd2luZG93cyBwYXRoc1xuICAgICAgICByZXR1cm4gY2hpbGRkaXIubGVuZ3RoID4gMCA/IGAke21hdGNoWzFdfS8ke2NoaWxkZGlyfWAgOiBtYXRjaFsxXTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIHJvb3QgR28gbW9kdWxlIG5hbWUuIEZvdW5kICR7ZmlsZX0gYnV0IGZhaWxlZCB0byByZWdleCBtYXRjaCB0aGUgbW9kdWxlIG5hbWUgZGlyZWN0aXZlYCxcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIGdvIHVwIG9uZSBkaXJlY3RvcnkuIEFzIGRpcm5hbWUoJy8nKSB3aWxsIHJldHVybiAnLycgd2UgY2FuY2VsIHRoZSBsb29wXG4gICAgLy8gYXMgc29vbiBhcyB0aGUgZGlyIGRvZXMgbm90IGNoYW5nZSBhbnltb3JlLlxuICAgIHByZXZpb3VzRGlyID0gY3VycmVudERpcjtcbiAgICBjdXJyZW50RGlyID0gcGF0aC5kaXJuYW1lKGN1cnJlbnREaXIpO1xuICB9IHdoaWxlIChjdXJyZW50RGlyICE9PSBwcmV2aW91c0Rpcik7XG5cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSByb290IEdvIG1vZHVsZSBuYW1lLiBObyBnby5tb2QgZm91bmQgaW4gJHtkaXJ9IGFuZCBhbnkgcGFyZW50IGRpcmVjdG9yaWVzYCxcbiAgKTtcbn07XG4iXX0=
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { FQPN, ProviderName } from "@cdktn/provider-schema";
|
|
2
2
|
import { AttributeModel } from "./attribute-model";
|
|
3
3
|
import { Struct, ConfigStruct } from "./struct";
|
|
4
|
-
import { Schema } from "@cdktn/commons";
|
|
4
|
+
import { Schema, TerraformTargetVersions } from "@cdktn/commons";
|
|
5
5
|
import { ProviderFunctionsModel } from "./provider-function-model";
|
|
6
6
|
export declare const STRUCT_SHARDING_THRESHOLD = 400;
|
|
7
7
|
interface ResourceModelOptions {
|
|
@@ -16,6 +16,7 @@ interface ResourceModelOptions {
|
|
|
16
16
|
schema: Schema;
|
|
17
17
|
terraformSchemaType: string;
|
|
18
18
|
configStructName: string;
|
|
19
|
+
targetVersions?: TerraformTargetVersions;
|
|
19
20
|
}
|
|
20
21
|
type DefinitionPath = string;
|
|
21
22
|
export declare class ResourceModel {
|
|
@@ -25,6 +26,7 @@ export declare class ResourceModel {
|
|
|
25
26
|
baseName: string;
|
|
26
27
|
provider: ProviderName;
|
|
27
28
|
fqpn: FQPN;
|
|
29
|
+
private readonly targetVersions?;
|
|
28
30
|
providerVersionConstraint?: string;
|
|
29
31
|
providerVersion?: string;
|
|
30
32
|
terraformProviderSource?: string;
|
|
@@ -10,6 +10,7 @@ const codemaker_1 = require("codemaker");
|
|
|
10
10
|
const path_1 = __importDefault(require("path"));
|
|
11
11
|
const provider_schema_1 = require("@cdktn/provider-schema");
|
|
12
12
|
const struct_1 = require("./struct");
|
|
13
|
+
const commons_1 = require("@cdktn/commons");
|
|
13
14
|
// Limit is 1200 to prevent stack size error.
|
|
14
15
|
// Could increase now that calculation is more accurate;
|
|
15
16
|
// however, probably better to have smaller
|
|
@@ -24,6 +25,7 @@ class ResourceModel {
|
|
|
24
25
|
this.attributes = options.attributes;
|
|
25
26
|
this.schema = options.schema;
|
|
26
27
|
this.fqpn = options.fqpn;
|
|
28
|
+
this.targetVersions = options.targetVersions;
|
|
27
29
|
this.provider = (0, provider_schema_1.parseFQPN)(options.fqpn).name;
|
|
28
30
|
this.terraformProviderName = this.provider;
|
|
29
31
|
this.fileName = options.fileName;
|
|
@@ -54,16 +56,20 @@ class ResourceModel {
|
|
|
54
56
|
return this.escapeSchema(JSON.stringify(this.schema, undefined, 2));
|
|
55
57
|
}
|
|
56
58
|
get linkToDocs() {
|
|
57
|
-
|
|
59
|
+
// Keyed off the project's declared targets, not the FQPN hostname: that
|
|
60
|
+
// hostname reflects whichever CLI fetched the schema, which would make the
|
|
61
|
+
// generated link differ between a terraform and a tofu `cdktn get`.
|
|
62
|
+
const registry = (0, commons_1.registryForTargetVersions)(this.targetVersions);
|
|
63
|
+
const { namespace, name } = (0, provider_schema_1.parseFQPN)(this.fqpn);
|
|
58
64
|
const version = this.providerVersion || "latest";
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
return
|
|
65
|
+
const kind = this.isProvider
|
|
66
|
+
? "provider"
|
|
67
|
+
: this.isDataSource
|
|
68
|
+
? "data-source"
|
|
69
|
+
: this.isEphemeralResource
|
|
70
|
+
? "ephemeral-resource"
|
|
71
|
+
: "resource";
|
|
72
|
+
return registry.docsUrl(namespace, name, version, kind, this.terraformDocName);
|
|
67
73
|
}
|
|
68
74
|
get isProvider() {
|
|
69
75
|
return this.terraformSchemaType === "provider";
|
|
@@ -112,4 +118,4 @@ class ResourceModel {
|
|
|
112
118
|
}
|
|
113
119
|
}
|
|
114
120
|
exports.ResourceModel = ResourceModel;
|
|
115
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2V0L2dlbmVyYXRvci9tb2RlbHMvcmVzb3VyY2UtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyx5Q0FBd0M7QUFDeEMsZ0RBQXdCO0FBQ3hCLDREQUF1RTtBQUV2RSxxQ0FBZ0Q7QUFJaEQsNkNBQTZDO0FBQzdDLHdEQUF3RDtBQUN4RCwyQ0FBMkM7QUFDOUIsUUFBQSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7QUFpQjdDLE1BQWEsYUFBYTtJQWdDeEIsWUFBWSxPQUE2QjtRQUZsQyw0QkFBdUIsR0FBNEMsRUFBRSxDQUFDO1FBRzNFLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDakMsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDckMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQzdCLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUEsMkJBQVMsRUFBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzdDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxPQUFP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RU8sWUFBWSxDQUFDLE1BQWM7UUFDakMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1QyxDQUFDO0NBQ0Y7QUF4SkQsc0NBd0pDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IHRvU25ha2VDYXNlIH0gZnJvbSBcImNvZGVtYWtlclwiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IEZRUE4sIHBhcnNlRlFQTiwgUHJvdmlkZXJOYW1lIH0gZnJvbSBcIkBjZGt0bi9wcm92aWRlci1zY2hlbWFcIjtcbmltcG9ydCB7IEF0dHJpYnV0ZU1vZGVsIH0gZnJvbSBcIi4vYXR0cmlidXRlLW1vZGVsXCI7XG5pbXBvcnQgeyBTdHJ1Y3QsIENvbmZpZ1N0cnVjdCB9IGZyb20gXCIuL3N0cnVjdFwiO1xuaW1wb3J0IHsgU2NoZW1hIH0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQgeyBQcm92aWRlckZ1bmN0aW9uc01vZGVsIH0gZnJvbSBcIi4vcHJvdmlkZXItZnVuY3Rpb24tbW9kZWxcIjtcblxuLy8gTGltaXQgaXMgMTIwMCB0byBwcmV2ZW50IHN0YWNrIHNpemUgZXJyb3IuXG4vLyBDb3VsZCBpbmNyZWFzZSBub3cgdGhhdCBjYWxjdWxhdGlvbiBpcyBtb3JlIGFjY3VyYXRlO1xuLy8gaG93ZXZlciwgcHJvYmFibHkgYmV0dGVyIHRvIGhhdmUgc21hbGxlclxuZXhwb3J0IGNvbnN0IFNUUlVDVF9TSEFSRElOR19USFJFU0hPTEQgPSA0MDA7XG5cbmludGVyZmFjZSBSZXNvdXJjZU1vZGVsT3B0aW9ucyB7XG4gIHRlcnJhZm9ybVR5cGU6IHN0cmluZztcbiAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gIGJhc2VOYW1lOiBzdHJpbmc7XG4gIGZpbGVOYW1lOiBzdHJpbmc7XG4gIGZpbGVQYXRoOiBzdHJpbmc7XG4gIGF0dHJpYnV0ZXM6IEF0dHJpYnV0ZU1vZGVsW107XG4gIHN0cnVjdHM6IFN0cnVjdFtdO1xuICBmcXBuOiBGUVBOO1xuICBzY2hlbWE6IFNjaGVtYTtcbiAgdGVycmFmb3JtU2NoZW1hVHlwZTogc3RyaW5nO1xuICBjb25maWdTdHJ1Y3ROYW1lOiBzdHJpbmc7XG59XG5cbnR5cGUgRGVmaW5pdGlvblBhdGggPSBzdHJpbmc7XG5leHBvcnQgY2xhc3MgUmVzb3VyY2VNb2RlbCB7XG4gIHB1YmxpYyBjbGFzc05hbWU6IHN0cmluZztcbiAgcHVibGljIGZpbGVQYXRoOiBzdHJpbmc7XG4gIHB1YmxpYyB0ZXJyYWZvcm1UeXBlOiBzdHJpbmc7XG4gIHB1YmxpYyBiYXNlTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcHJvdmlkZXI6IFByb3ZpZGVyTmFtZTtcbiAgcHVibGljIGZxcG46IEZRUE47XG4gIHB1YmxpYyBwcm92aWRlclZlcnNpb25Db25zdHJhaW50Pzogc3RyaW5nO1xuICBwdWJsaWMgcHJvdmlkZXJWZXJzaW9uPzogc3RyaW5nO1xuICBwdWJsaWMgdGVycmFmb3JtUHJvdmlkZXJTb3VyY2U/OiBzdHJpbmc7XG4gIC8qXG4gICAqIHVzdWFsbHkgc2FtZSBhcyBwcm92aWRlciwgYnV0IGNhbiBiZSBvdmVycmlkZGVuIGlmIHVzZXIgcGlja3MgYSBkaWZmZXJlbnQgbmFtZVxuICAgKiB0byBiZSBhYmxlIHRvIHVzZSB0d28gcHJvdmlkZXJzIHdpdGggdGhlIHNhbWUgbmFtZVxuICAgKi9cbiAgcHVibGljIHRlcnJhZm9ybVByb3ZpZGVyTmFtZTogc3RyaW5nO1xuICAvKlxuICAgKiBPbmx5IHNldCAoYnkgcHJvdmlkZXItZ2VuZXJhdG9yLnRzKSB3aGVuIGlzUHJvdmlkZXIgaXMgdHJ1ZSBhbmQgdGhlXG4gICAqIHByb3ZpZGVyIHNjaGVtYSBkZWNsYXJlcyBwcm92aWRlci1kZWZpbmVkIGZ1bmN0aW9ucyAtIGRyaXZlcyB3aGV0aGVyXG4gICAqIFJlc291cmNlRW1pdHRlciBlbWl0cyB0aGUgbWVtb2l6ZWQgYGZ1bmN0aW9uc2AgZ2V0dGVyIGFuZCBpdHNcbiAgICogY3Jvc3MtZGlyZWN0b3J5IGltcG9ydCBvZiB0aGUgc2libGluZyBwcm92aWRlci1mdW5jdGlvbnMvaW5kZXgudHMgZmlsZS5cbiAgICovXG4gIHB1YmxpYyBwcm92aWRlckZ1bmN0aW9uc01vZGVsPzogUHJvdmlkZXJGdW5jdGlvbnNNb2RlbDtcbiAgcHVibGljIGZpbGVOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVNb2RlbFtdO1xuICBwdWJsaWMgc2NoZW1hOiBTY2hlbWE7XG4gIHByaXZhdGUgX3N0cnVjdHM6IFN0cnVjdFtdO1xuICBwcml2YXRlIGRlcGVuZGVuY2llczogc3RyaW5nW107XG4gIHByaXZhdGUgdGVycmFmb3JtU2NoZW1hVHlwZTogc3RyaW5nO1xuICBwcml2YXRlIGNvbmZpZ1N0cnVjdE5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHN0cnVjdHNSZXF1aXJlU2hhcmRpbmc6IGJvb2xlYW47XG4gIHB1YmxpYyByZWN1cnNpdmVBdHRyaWJ1dGVQYXRoczogeyBbdXNhZ2VQYXRoOiBzdHJpbmddOiBEZWZpbml0aW9uUGF0aCB9ID0ge307XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogUmVzb3VyY2VNb2RlbE9wdGlvbnMpIHtcbiAgICB0aGlzLmNsYXNzTmFtZSA9IG9wdGlvbnMuY2xhc3NOYW1lO1xuICAgIHRoaXMuZmlsZVBhdGggPSBvcHRpb25zLmZpbGVQYXRoO1xuICAgIHRoaXMudGVycmFmb3JtVHlwZSA9IG9wdGlvbnMudGVycmFmb3JtVHlwZTtcbiAgICB0aGlzLmJhc2VOYW1lID0gb3B0aW9ucy5iYXNlTmFtZTtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBvcHRpb25zLmF0dHJpYnV0ZXM7XG4gICAgdGhpcy5zY2hlbWEgPSBvcHRpb25zLnNjaGVtYTtcbiAgICB0aGlzLmZxcG4gPSBvcHRpb25zLmZxcG47XG4gICAgdGhpcy5wcm92aWRlciA9IHBhcnNlRlFQTihvcHRpb25zLmZxcG4pLm5hbWU7XG4gICAgdGhpcy50ZXJyYWZvcm1Qcm92aWRlck5hbWUgPSB0aGlzLnByb3ZpZGVyO1xuICAgIHRoaXMuZmlsZU5hbWUgPSBvcHRpb25zLmZpbGVOYW1lO1xuICAgIHRoaXMuX3N0cnVjdHMgPSBvcHRpb25zLnN0cnVjdHM7XG4gICAgdGhpcy50ZXJyYWZvcm1TY2hlbWFUeXBlID0gb3B0aW9ucy50ZXJyYWZvcm1TY2hlbWFUeXBlO1xuICAgIHRoaXMuY29uZmlnU3RydWN0TmFtZSA9IG9wdGlvbnMuY29uZmlnU3RydWN0TmFtZTtcbiAgICB0aGlzLmRlcGVuZGVuY2llcyA9IFtcbiAgICAgIGBpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztgLFxuICAgICAgYGltcG9ydCAqIGFzIGNka3RuIGZyb20gJ2Nka3RuJztgLFxuICAgIF07XG5cbiAgICB0aGlzLnN0cnVjdHNSZXF1aXJlU2hhcmRpbmcgPVxuICAgICAgdGhpcy5fc3RydWN0cy5yZWR1Y2UoKHBhcnRpYWxTdW0sIHMpID0+IHBhcnRpYWxTdW0gKyBzLmV4cG9ydENvdW50LCAwKSA+XG4gICAgICBTVFJVQ1RfU0hBUkRJTkdfVEhSRVNIT0xEO1xuICB9XG5cbiAgcHVibGljIGdldCBzdHJ1Y3RzKCk6IFN0cnVjdFtdIHtcbiAgICByZXR1cm4gW3RoaXMuY29uZmlnU3RydWN0LCAuLi50aGlzLl9zdHJ1Y3RzXTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29uZmlnU3RydWN0KCkge1xuICAgIHJldHVybiBuZXcgQ29uZmlnU3RydWN0KFxuICAgICAgdGhpcy5jb25maWdTdHJ1Y3ROYW1lLFxuICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgdGhpcy5pc0VwaGVtZXJhbFJlc291cmNlID8gXCJUZXJyYWZvcm1FcGhlbWVyYWxNZXRhQXJndW1lbnRzXCIgOiB1bmRlZmluZWQsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3ludGhlc2l6YWJsZUF0dHJpYnV0ZXMoKTogQXR0cmlidXRlTW9kZWxbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnU3RydWN0LmFzc2lnbmFibGVBdHRyaWJ1dGVzO1xuICB9XG5cbiAgcHVibGljIGdldCBpbXBvcnRTdGF0ZW1lbnRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5kZXBlbmRlbmNpZXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNjaGVtYUFzSnNvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVzY2FwZVNjaGVtYShKU09OLnN0cmluZ2lmeSh0aGlzLnNjaGVtYSwgdW5kZWZpbmVkLCAyKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxpbmtUb0RvY3MoKTogc3RyaW5nIHtcbiAgICBjb25zdCB7IGhvc3RuYW1lLCBuYW1lc3BhY2UsIG5hbWUgfSA9IHBhcnNlRlFQTih0aGlzLmZxcG4pO1xuICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLnByb3ZpZGVyVmVyc2lvbiB8fCBcImxhdGVzdFwiO1xuICAgIGNvbnN0IGJhc2UgPSBgaHR0cHM6Ly8ke2hvc3RuYW1lfS9wcm92aWRlcnMvJHtuYW1lc3BhY2V9LyR7bmFtZX0vJHt2ZXJzaW9ufS9kb2NzYDtcbiAgICBpZiAodGhpcy5pc1Byb3ZpZGVyKSByZXR1cm4gYmFzZTtcbiAgICBpZiAodGhpcy5pc0RhdGFTb3VyY2UpXG4gICAgICByZXR1cm4gYCR7YmFzZX0vZGF0YS1zb3VyY2VzLyR7dGhpcy50ZXJyYWZvcm1Eb2NOYW1lfWA7XG4gICAgaWYgKHRoaXMuaXNFcGhlbWVyYWxSZXNvdXJjZSlcbiAgICAgIHJldHVybiBgJHtiYXNlfS9lcGhlbWVyYWwtcmVzb3VyY2VzLyR7dGhpcy50ZXJyYWZvcm1Eb2NOYW1lfWA7XG4gICAgcmV0dXJuIGAke2Jhc2V9L3Jlc291cmNlcy8ke3RoaXMudGVycmFmb3JtRG9jTmFtZX1gO1xuICB9XG5cbiAgcHVibGljIGdldCBpc1Byb3ZpZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlcnJhZm9ybVNjaGVtYVR5cGUgPT09IFwicHJvdmlkZXJcIjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNEYXRhU291cmNlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlcnJhZm9ybVNjaGVtYVR5cGUgPT09IFwiZGF0YV9zb3VyY2VcIjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNFcGhlbWVyYWxSZXNvdXJjZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZXJyYWZvcm1TY2hlbWFUeXBlID09PSBcImVwaGVtZXJhbF9yZXNvdXJjZVwiO1xuICB9XG5cbiAgcHVibGljIGdldCBwYXJlbnRDbGFzc05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pc1Byb3ZpZGVyXG4gICAgICA/IFwiVGVycmFmb3JtUHJvdmlkZXJcIlxuICAgICAgOiB0aGlzLmlzRGF0YVNvdXJjZVxuICAgICAgICA/IFwiVGVycmFmb3JtRGF0YVNvdXJjZVwiXG4gICAgICAgIDogdGhpcy5pc0VwaGVtZXJhbFJlc291cmNlXG4gICAgICAgICAgPyBcIlRlcnJhZm9ybUVwaGVtZXJhbFJlc291cmNlXCJcbiAgICAgICAgICA6IFwiVGVycmFmb3JtUmVzb3VyY2VcIjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGVycmFmb3JtUmVzb3VyY2VUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXNQcm92aWRlclxuICAgICAgPyB0aGlzLnRlcnJhZm9ybVByb3ZpZGVyTmFtZVxuICAgICAgOiB0aGlzLmlzRGF0YVNvdXJjZVxuICAgICAgICA/IHRoaXMudGVycmFmb3JtVHlwZS5yZXBsYWNlKC9eZGF0YV8vLCBcIlwiKVxuICAgICAgICA6IHRoaXMuaXNFcGhlbWVyYWxSZXNvdXJjZVxuICAgICAgICAgID8gdGhpcy50ZXJyYWZvcm1UeXBlLnJlcGxhY2UoL15lcGhlbWVyYWxfLywgXCJcIilcbiAgICAgICAgICA6IHRoaXMudGVycmFmb3JtVHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGVycmFmb3JtRG9jTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0b1NuYWtlQ2FzZShcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2VUeXBlLnJlcGxhY2UoXG4gICAgICAgIG5ldyBSZWdFeHAoYF4ke3RoaXMucHJvdmlkZXJ9X2AsIFwiaVwiKSxcbiAgICAgICAgXCJcIixcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcmVmZXJlbmNlZFR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWdTdHJ1Y3QucmVmZXJlbmNlZFR5cGVzO1xuICB9XG5cbiAgcHVibGljIGdldCBzdHJ1Y3RzRm9sZGVyTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtwYXRoLmJhc2VuYW1lKHRoaXMuZmlsZU5hbWUsIFwiLnRzXCIpfS1zdHJ1Y3RzYDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RydWN0c0ZvbGRlclBhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGF0aC5qb2luKHRoaXMubmFtZXNwYWNlRm9sZGVyUGF0aCwgdGhpcy5zdHJ1Y3RzRm9sZGVyTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG5hbWVzcGFjZUZvbGRlclBhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5maWxlUGF0aC5zcGxpdChcIi9cIikuc2xpY2UoMCwgLTEpLmpvaW4oXCIvXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSBlc2NhcGVTY2hlbWEoc2NoZW1hOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzY2hlbWEucmVwbGFjZSgvKFxcKlxcLykvZ2ksIGAqXFxcXC9gKTtcbiAgfVxufVxuIl19
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2V0L2dlbmVyYXRvci9tb2RlbHMvcmVzb3VyY2UtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyx5Q0FBd0M7QUFDeEMsZ0RBQXdCO0FBQ3hCLDREQUF1RTtBQUV2RSxxQ0FBZ0Q7QUFDaEQsNENBSXdCO0FBR3hCLDZDQUE2QztBQUM3Qyx3REFBd0Q7QUFDeEQsMkNBQTJDO0FBQzlCLFFBQUEseUJBQXlCLEdBQUcsR0FBRyxDQUFDO0FBa0I3QyxNQUFhLGFBQWE7SUFpQ3hCLFlBQVksT0FBNkI7UUFGbEMsNEJBQXVCLEdBQTRDLEVBQUUsQ0FBQztRQUczRSxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUMzQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDakMsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM3QixJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO1FBQzdDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBQSwyQkFBUyxFQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDN0MsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDM0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxP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LENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVPLFlBQVksQ0FBQyxNQUFjO1FBQ2pDLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDNUMsQ0FBQztDQUNGO0FBcktELHNDQXFLQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyB0b1NuYWtlQ2FzZSB9IGZyb20gXCJjb2RlbWFrZXJcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBGUVBOLCBwYXJzZUZRUE4sIFByb3ZpZGVyTmFtZSB9IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItc2NoZW1hXCI7XG5pbXBvcnQgeyBBdHRyaWJ1dGVNb2RlbCB9IGZyb20gXCIuL2F0dHJpYnV0ZS1tb2RlbFwiO1xuaW1wb3J0IHsgU3RydWN0LCBDb25maWdTdHJ1Y3QgfSBmcm9tIFwiLi9zdHJ1Y3RcIjtcbmltcG9ydCB7XG4gIFNjaGVtYSxcbiAgVGVycmFmb3JtVGFyZ2V0VmVyc2lvbnMsXG4gIHJlZ2lzdHJ5Rm9yVGFyZ2V0VmVyc2lvbnMsXG59IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgUHJvdmlkZXJGdW5jdGlvbnNNb2RlbCB9IGZyb20gXCIuL3Byb3ZpZGVyLWZ1bmN0aW9uLW1vZGVsXCI7XG5cbi8vIExpbWl0IGlzIDEyMDAgdG8gcHJldmVudCBzdGFjayBzaXplIGVycm9yLlxuLy8gQ291bGQgaW5jcmVhc2Ugbm93IHRoYXQgY2FsY3VsYXRpb24gaXMgbW9yZSBhY2N1cmF0ZTtcbi8vIGhvd2V2ZXIsIHByb2JhYmx5IGJldHRlciB0byBoYXZlIHNtYWxsZXJcbmV4cG9ydCBjb25zdCBTVFJVQ1RfU0hBUkRJTkdfVEhSRVNIT0xEID0gNDAwO1xuXG5pbnRlcmZhY2UgUmVzb3VyY2VNb2RlbE9wdGlvbnMge1xuICB0ZXJyYWZvcm1UeXBlOiBzdHJpbmc7XG4gIGNsYXNzTmFtZTogc3RyaW5nO1xuICBiYXNlTmFtZTogc3RyaW5nO1xuICBmaWxlTmFtZTogc3RyaW5nO1xuICBmaWxlUGF0aDogc3RyaW5nO1xuICBhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVNb2RlbFtdO1xuICBzdHJ1Y3RzOiBTdHJ1Y3RbXTtcbiAgZnFwbjogRlFQTjtcbiAgc2NoZW1hOiBTY2hlbWE7XG4gIHRlcnJhZm9ybVNjaGVtYVR5cGU6IHN0cmluZztcbiAgY29uZmlnU3RydWN0TmFtZTogc3RyaW5nO1xuICB0YXJnZXRWZXJzaW9ucz86IFRlcnJhZm9ybVRhcmdldFZlcnNpb25zO1xufVxuXG50eXBlIERlZmluaXRpb25QYXRoID0gc3RyaW5nO1xuZXhwb3J0IGNsYXNzIFJlc291cmNlTW9kZWwge1xuICBwdWJsaWMgY2xhc3NOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBmaWxlUGF0aDogc3RyaW5nO1xuICBwdWJsaWMgdGVycmFmb3JtVHlwZTogc3RyaW5nO1xuICBwdWJsaWMgYmFzZU5hbWU6IHN0cmluZztcbiAgcHVibGljIHByb3ZpZGVyOiBQcm92aWRlck5hbWU7XG4gIHB1YmxpYyBmcXBuOiBGUVBOO1xuICBwcml2YXRlIHJlYWRvbmx5IHRhcmdldFZlcnNpb25zPzogVGVycmFmb3JtVGFyZ2V0VmVyc2lvbnM7XG4gIHB1YmxpYyBwcm92aWRlclZlcnNpb25Db25zdHJhaW50Pzogc3RyaW5nO1xuICBwdWJsaWMgcHJvdmlkZXJWZXJzaW9uPzogc3RyaW5nO1xuICBwdWJsaWMgdGVycmFmb3JtUHJvdmlkZXJTb3VyY2U/OiBzdHJpbmc7XG4gIC8qXG4gICAqIHVzdWFsbHkgc2FtZSBhcyBwcm92aWRlciwgYnV0IGNhbiBiZSBvdmVycmlkZGVuIGlmIHVzZXIgcGlja3MgYSBkaWZmZXJlbnQgbmFtZVxuICAgKiB0byBiZSBhYmxlIHRvIHVzZSB0d28gcHJvdmlkZXJzIHdpdGggdGhlIHNhbWUgbmFtZVxuICAgKi9cbiAgcHVibGljIHRlcnJhZm9ybVByb3ZpZGVyTmFtZTogc3RyaW5nO1xuICAvKlxuICAgKiBPbmx5IHNldCAoYnkgcHJvdmlkZXItZ2VuZXJhdG9yLnRzKSB3aGVuIGlzUHJvdmlkZXIgaXMgdHJ1ZSBhbmQgdGhlXG4gICAqIHByb3ZpZGVyIHNjaGVtYSBkZWNsYXJlcyBwcm92aWRlci1kZWZpbmVkIGZ1bmN0aW9ucyAtIGRyaXZlcyB3aGV0aGVyXG4gICAqIFJlc291cmNlRW1pdHRlciBlbWl0cyB0aGUgbWVtb2l6ZWQgYGZ1bmN0aW9uc2AgZ2V0dGVyIGFuZCBpdHNcbiAgICogY3Jvc3MtZGlyZWN0b3J5IGltcG9ydCBvZiB0aGUgc2libGluZyBwcm92aWRlci1mdW5jdGlvbnMvaW5kZXgudHMgZmlsZS5cbiAgICovXG4gIHB1YmxpYyBwcm92aWRlckZ1bmN0aW9uc01vZGVsPzogUHJvdmlkZXJGdW5jdGlvbnNNb2RlbDtcbiAgcHVibGljIGZpbGVOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVNb2RlbFtdO1xuICBwdWJsaWMgc2NoZW1hOiBTY2hlbWE7XG4gIHByaXZhdGUgX3N0cnVjdHM6IFN0cnVjdFtdO1xuICBwcml2YXRlIGRlcGVuZGVuY2llczogc3RyaW5nW107XG4gIHByaXZhdGUgdGVycmFmb3JtU2NoZW1hVHlwZTogc3RyaW5nO1xuICBwcml2YXRlIGNvbmZpZ1N0cnVjdE5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHN0cnVjdHNSZXF1aXJlU2hhcmRpbmc6IGJvb2xlYW47XG4gIHB1YmxpYyByZWN1cnNpdmVBdHRyaWJ1dGVQYXRoczogeyBbdXNhZ2VQYXRoOiBzdHJpbmddOiBEZWZpbml0aW9uUGF0aCB9ID0ge307XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogUmVzb3VyY2VNb2RlbE9wdGlvbnMpIHtcbiAgICB0aGlzLmNsYXNzTmFtZSA9IG9wdGlvbnMuY2xhc3NOYW1lO1xuICAgIHRoaXMuZmlsZVBhdGggPSBvcHRpb25zLmZpbGVQYXRoO1xuICAgIHRoaXMudGVycmFmb3JtVHlwZSA9IG9wdGlvbnMudGVycmFmb3JtVHlwZTtcbiAgICB0aGlzLmJhc2VOYW1lID0gb3B0aW9ucy5iYXNlTmFtZTtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBvcHRpb25zLmF0dHJpYnV0ZXM7XG4gICAgdGhpcy5zY2hlbWEgPSBvcHRpb25zLnNjaGVtYTtcbiAgICB0aGlzLmZxcG4gPSBvcHRpb25zLmZxcG47XG4gICAgdGhpcy50YXJnZXRWZXJzaW9ucyA9IG9wdGlvbnMudGFyZ2V0VmVyc2lvbnM7XG4gICAgdGhpcy5wcm92aWRlciA9IHBhcnNlRlFQTihvcHRpb25zLmZxcG4pLm5hbWU7XG4gICAgdGhpcy50ZXJyYWZvcm1Qcm92aWRlck5hbWUgPSB0aGlzLnByb3ZpZGVyO1xuICAgIHRoaXMuZmlsZU5hbWUgPSBvcHRpb25zLmZpbGVOYW1lO1xuICAgIHRoaXMuX3N0cnVjdHMgPSBvcHRpb25zLnN0cnVjdHM7XG4gICAgdGhpcy50ZXJyYWZvcm1TY2hlbWFUeXBlID0gb3B0aW9ucy50ZXJyYWZvcm1TY2hlbWFUeXBlO1xuICAgIHRoaXMuY29uZmlnU3RydWN0TmFtZSA9IG9wdGlvbnMuY29uZmlnU3RydWN0TmFtZTtcbiAgICB0aGlzLmRlcGVuZGVuY2llcyA9IFtcbiAgICAgIGBpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztgLFxuICAgICAgYGltcG9ydCAqIGFzIGNka3RuIGZyb20gJ2Nka3RuJztgLFxuICAgIF07XG5cbiAgICB0aGlzLnN0cnVjdHNSZXF1aXJlU2hhcmRpbmcgPVxuICAgICAgdGhpcy5fc3RydWN0cy5yZWR1Y2UoKHBhcnRpYWxTdW0sIHMpID0+IHBhcnRpYWxTdW0gKyBzLmV4cG9ydENvdW50LCAwKSA+XG4gICAgICBTVFJVQ1RfU0hBUkRJTkdfVEhSRVNIT0xEO1xuICB9XG5cbiAgcHVibGljIGdldCBzdHJ1Y3RzKCk6IFN0cnVjdFtdIHtcbiAgICByZXR1cm4gW3RoaXMuY29uZmlnU3RydWN0LCAuLi50aGlzLl9zdHJ1Y3RzXTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29uZmlnU3RydWN0KCkge1xuICAgIHJldHVybiBuZXcgQ29uZmlnU3RydWN0KFxuICAgICAgdGhpcy5jb25maWdTdHJ1Y3ROYW1lLFxuICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgdGhpcy5pc0VwaGVtZXJhbFJlc291cmNlID8gXCJUZXJyYWZvcm1FcGhlbWVyYWxNZXRhQXJndW1lbnRzXCIgOiB1bmRlZmluZWQsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3ludGhlc2l6YWJsZUF0dHJpYnV0ZXMoKTogQXR0cmlidXRlTW9kZWxbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnU3RydWN0LmFzc2lnbmFibGVBdHRyaWJ1dGVzO1xuICB9XG5cbiAgcHVibGljIGdldCBpbXBvcnRTdGF0ZW1lbnRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5kZXBlbmRlbmNpZXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNjaGVtYUFzSnNvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVzY2FwZVNjaGVtYShKU09OLnN0cmluZ2lmeSh0aGlzLnNjaGVtYSwgdW5kZWZpbmVkLCAyKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxpbmtUb0RvY3MoKTogc3RyaW5nIHtcbiAgICAvLyBLZXllZCBvZmYgdGhlIHByb2plY3QncyBkZWNsYXJlZCB0YXJnZXRzLCBub3QgdGhlIEZRUE4gaG9zdG5hbWU6IHRoYXRcbiAgICAvLyBob3N0bmFtZSByZWZsZWN0cyB3aGljaGV2ZXIgQ0xJIGZldGNoZWQgdGhlIHNjaGVtYSwgd2hpY2ggd291bGQgbWFrZSB0aGVcbiAgICAvLyBnZW5lcmF0ZWQgbGluayBkaWZmZXIgYmV0d2VlbiBhIHRlcnJhZm9ybSBhbmQgYSB0b2Z1IGBjZGt0biBnZXRgLlxuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gcmVnaXN0cnlGb3JUYXJnZXRWZXJzaW9ucyh0aGlzLnRhcmdldFZlcnNpb25zKTtcbiAgICBjb25zdCB7IG5hbWVzcGFjZSwgbmFtZSB9ID0gcGFyc2VGUVBOKHRoaXMuZnFwbik7XG4gICAgY29uc3QgdmVyc2lvbiA9IHRoaXMucHJvdmlkZXJWZXJzaW9uIHx8IFwibGF0ZXN0XCI7XG4gICAgY29uc3Qga2luZCA9IHRoaXMuaXNQcm92aWRlclxuICAgICAgPyBcInByb3ZpZGVyXCJcbiAgICAgIDogdGhpcy5pc0RhdGFTb3VyY2VcbiAgICAgICAgPyBcImRhdGEtc291cmNlXCJcbiAgICAgICAgOiB0aGlzLmlzRXBoZW1lcmFsUmVzb3VyY2VcbiAgICAgICAgICA/IFwiZXBoZW1lcmFsLXJlc291cmNlXCJcbiAgICAgICAgICA6IFwicmVzb3VyY2VcIjtcbiAgICByZXR1cm4gcmVnaXN0cnkuZG9jc1VybChcbiAgICAgIG5hbWVzcGFjZSxcbiAgICAgIG5hbWUsXG4gICAgICB2ZXJzaW9uLFxuICAgICAga2luZCxcbiAgICAgIHRoaXMudGVycmFmb3JtRG9jTmFtZSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBpc1Byb3ZpZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlcnJhZm9ybVNjaGVtYVR5cGUgPT09IFwicHJvdmlkZXJcIjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNEYXRhU291cmNlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlcnJhZm9ybVNjaGVtYVR5cGUgPT09IFwiZGF0YV9zb3VyY2VcIjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNFcGhlbWVyYWxSZXNvdXJjZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZXJyYWZvcm1TY2hlbWFUeXBlID09PSBcImVwaGVtZXJhbF9yZXNvdXJjZVwiO1xuICB9XG5cbiAgcHVibGljIGdldCBwYXJlbnRDbGFzc05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pc1Byb3ZpZGVyXG4gICAgICA/IFwiVGVycmFmb3JtUHJvdmlkZXJcIlxuICAgICAgOiB0aGlzLmlzRGF0YVNvdXJjZVxuICAgICAgICA/IFwiVGVycmFmb3JtRGF0YVNvdXJjZVwiXG4gICAgICAgIDogdGhpcy5pc0VwaGVtZXJhbFJlc291cmNlXG4gICAgICAgICAgPyBcIlRlcnJhZm9ybUVwaGVtZXJhbFJlc291cmNlXCJcbiAgICAgICAgICA6IFwiVGVycmFmb3JtUmVzb3VyY2VcIjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGVycmFmb3JtUmVzb3VyY2VUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXNQcm92aWRlclxuICAgICAgPyB0aGlzLnRlcnJhZm9ybVByb3ZpZGVyTmFtZVxuICAgICAgOiB0aGlzLmlzRGF0YVNvdXJjZVxuICAgICAgICA/IHRoaXMudGVycmFmb3JtVHlwZS5yZXBsYWNlKC9eZGF0YV8vLCBcIlwiKVxuICAgICAgICA6IHRoaXMuaXNFcGhlbWVyYWxSZXNvdXJjZVxuICAgICAgICAgID8gdGhpcy50ZXJyYWZvcm1UeXBlLnJlcGxhY2UoL15lcGhlbWVyYWxfLywgXCJcIilcbiAgICAgICAgICA6IHRoaXMudGVycmFmb3JtVHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGVycmFmb3JtRG9jTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0b1NuYWtlQ2FzZShcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2VUeXBlLnJlcGxhY2UoXG4gICAgICAgIG5ldyBSZWdFeHAoYF4ke3RoaXMucHJvdmlkZXJ9X2AsIFwiaVwiKSxcbiAgICAgICAgXCJcIixcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcmVmZXJlbmNlZFR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWdTdHJ1Y3QucmVmZXJlbmNlZFR5cGVzO1xuICB9XG5cbiAgcHVibGljIGdldCBzdHJ1Y3RzRm9sZGVyTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtwYXRoLmJhc2VuYW1lKHRoaXMuZmlsZU5hbWUsIFwiLnRzXCIpfS1zdHJ1Y3RzYDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RydWN0c0ZvbGRlclBhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGF0aC5qb2luKHRoaXMubmFtZXNwYWNlRm9sZGVyUGF0aCwgdGhpcy5zdHJ1Y3RzRm9sZGVyTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG5hbWVzcGFjZUZvbGRlclBhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5maWxlUGF0aC5zcGxpdChcIi9cIikuc2xpY2UoMCwgLTEpLmpvaW4oXCIvXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSBlc2NhcGVTY2hlbWEoc2NoZW1hOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzY2hlbWEucmVwbGFjZSgvKFxcKlxcLykvZ2ksIGAqXFxcXC9gKTtcbiAgfVxufVxuIl19
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CodeMaker } from "codemaker";
|
|
2
|
-
import { ConstructsMakerTarget, ProviderSchema } from "@cdktn/commons";
|
|
2
|
+
import { ConstructsMakerTarget, ProviderSchema, TerraformTargetVersions } from "@cdktn/commons";
|
|
3
3
|
import { FQPN } from "@cdktn/provider-schema";
|
|
4
4
|
import { ResourceModel } from "./models";
|
|
5
5
|
export interface TerraformProviderGeneratorOptions {
|
|
@@ -8,6 +8,8 @@ export interface TerraformProviderGeneratorOptions {
|
|
|
8
8
|
* Defaults to "" (CommonJS).
|
|
9
9
|
*/
|
|
10
10
|
readonly importExtension?: string;
|
|
11
|
+
/** Project's declared targetVersions; selects the docs registry. */
|
|
12
|
+
readonly targetVersions?: TerraformTargetVersions;
|
|
11
13
|
}
|
|
12
14
|
interface ProviderData {
|
|
13
15
|
name: string;
|
|
@@ -66,7 +66,6 @@ class TerraformProviderGenerator {
|
|
|
66
66
|
var _a;
|
|
67
67
|
this.code = code;
|
|
68
68
|
this.schema = schema;
|
|
69
|
-
this.resourceParser = new resource_parser_1.ResourceParser();
|
|
70
69
|
this.versions = {};
|
|
71
70
|
/**
|
|
72
71
|
* Resource directory names emitted per provider folder Used to prune directories
|
|
@@ -75,6 +74,7 @@ class TerraformProviderGenerator {
|
|
|
75
74
|
this.emittedResourceFolders = {};
|
|
76
75
|
this.code.indentation = 2;
|
|
77
76
|
this.importExtension = (_a = options.importExtension) !== null && _a !== void 0 ? _a : "";
|
|
77
|
+
this.resourceParser = new resource_parser_1.ResourceParser(options.targetVersions);
|
|
78
78
|
this.resourceEmitter = new emitter_1.ResourceEmitter(this.code, this.importExtension);
|
|
79
79
|
this.structEmitter = new emitter_1.StructEmitter(this.code, this.importExtension);
|
|
80
80
|
this.providerFunctionsEmitter = new emitter_1.ProviderFunctionsEmitter(this.code);
|
|
@@ -275,4 +275,4 @@ class TerraformProviderGenerator {
|
|
|
275
275
|
}
|
|
276
276
|
}
|
|
277
277
|
exports.TerraformProviderGenerator = TerraformProviderGenerator;
|
|
278
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2dldC9nZW5lcmF0b3IvcHJvdmlkZXItZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMseUNBQW1EO0FBQ25ELDRDQU93QjtBQUN4Qiw0REFBdUU7QUFDdkUscUNBS2tCO0FBQ2xCLHVEQUFtRDtBQUNuRCx1Q0FJbUI7QUFnQm5CLE1BQU0sVUFBVSxHQUFHLENBQ2pCLE1BQTZCLEVBQzdCLG1CQUEyQixFQUNsQixFQUFFO0lBQ1gsSUFBSSxNQUFNLENBQUMsUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRWxDLE1BQU0sUUFBUSxHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVoRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDMUIsT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLG1CQUFtQixDQUFDO0lBQy9DLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBRWpELElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN6QyxNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixtQkFBbUIsRUFBRSxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUVELDJDQUEyQztRQUMzQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQixNQUFNLFlBQVksR0FBRztnQkFDbkIsV0FBVztnQkFDWCxRQUFRLEVBQUUsdUJBQXVCO2dCQUNqQyxTQUFTLEVBQUUsV0FBVztnQkFDdEIsSUFBSSxFQUFFLEVBQUU7YUFDVCxDQUFDO1lBQ0YsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLE1B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O0lBQ2xCLENBQUM7SUFFTyxjQUFjLENBQUMsUUFBdUI7UUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakIsUUFBUSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuQixDQUFDO0NBQ0Y7QUFsVkQsZ0VBa1ZDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IENvZGVNYWtlciwgdG9DYW1lbENhc2UgfSBmcm9tIFwiY29kZW1ha2VyXCI7XG5pbXBvcnQge1xuICBDb25zdHJ1Y3RzTWFrZXJQcm92aWRlclRhcmdldCxcbiAgQ29uc3RydWN0c01ha2VyVGFyZ2V0LFxuICBMQU5HVUFHRVMsXG4gIGxvZ2dlcixcbiAgUHJvdmlkZXJTY2hlbWEsXG4gIFRlcnJhZm9ybVByb3ZpZGVyQ29uc3RyYWludCxcbn0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQgeyBGUVBOLCBwYXJzZUZRUE4sIFByb3ZpZGVyTmFtZSB9IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItc2NoZW1hXCI7XG5pbXBvcnQge1xuICBQcm92aWRlckZ1bmN0aW9uc01vZGVsLFxuICBSZXNvdXJjZU1vZGVsLFxuICBhc3NlcnROb0Z1bmN0aW9uc0dldHRlckNvbGxpc2lvbixcbiAgYnVpbGRQcm92aWRlckZ1bmN0aW9uc01vZGVsLFxufSBmcm9tIFwiLi9tb2RlbHNcIjtcbmltcG9ydCB7IFJlc291cmNlUGFyc2VyIH0gZnJvbSBcIi4vcmVzb3VyY2UtcGFyc2VyXCI7XG5pbXBvcnQge1xuICBQcm92aWRlckZ1bmN0aW9uc0VtaXR0ZXIsXG4gIFJlc291cmNlRW1pdHRlcixcbiAgU3RydWN0RW1pdHRlcixcbn0gZnJvbSBcIi4vZW1pdHRlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRlcnJhZm9ybVByb3ZpZGVyR2VuZXJhdG9yT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBGaWxlIGV4dGVuc2lvbiB0byB3cml0ZSBvbiBlbWl0dGVkIHJlbGF0aXZlIGltcG9ydHMuXG4gICAqIERlZmF1bHRzIHRvIFwiXCIgKENvbW1vbkpTKS5cbiAgICovXG4gIHJlYWRvbmx5IGltcG9ydEV4dGVuc2lvbj86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFByb3ZpZGVyRGF0YSB7XG4gIG5hbWU6IHN0cmluZztcbiAgc291cmNlOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbn1cblxuY29uc3QgaXNNYXRjaGluZyA9IChcbiAgdGFyZ2V0OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gIHRlcnJhZm9ybVNjaGVtYU5hbWU6IHN0cmluZyxcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAodGFyZ2V0LmlzTW9kdWxlKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgZWxlbWVudHMgPSB0ZXJyYWZvcm1TY2hlbWFOYW1lLnNwbGl0KFwiL1wiKTtcblxuICBpZiAoZWxlbWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHRhcmdldC5zb3VyY2UgPT09IHRlcnJhZm9ybVNjaGVtYU5hbWU7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgW2hvc3RuYW1lLCBuYW1lc3BhY2UsIHByb3ZpZGVyXSA9IGVsZW1lbnRzO1xuXG4gICAgaWYgKCFob3N0bmFtZSB8fCAhbmFtZXNwYWNlIHx8ICFwcm92aWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW4ndCBoYW5kbGUgJHt0ZXJyYWZvcm1TY2hlbWFOYW1lfWApO1xuICAgIH1cblxuICAgIC8vIElmIHRhcmdldC5zb3VyY2UgaXMgc2V0LCB0cnkgdG8gbWF0Y2ggaXRcbiAgICBpZiAodGFyZ2V0LnNvdXJjZSkge1xuICAgICAgY29uc3QgdGFyZ2V0U291cmNlID0ge1xuICAgICAgICAvLyBkZWZhdWx0c1xuICAgICAgICBob3N0bmFtZTogXCJyZWdpc3RyeS50ZXJyYWZvcm0uaW9cIixcbiAgICAgICAgbmFtZXNwYWNlOiBcImhhc2hpY29ycFwiLFxuICAgICAgICBuYW1lOiBcIlwiLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnRzID0gdGFyZ2V0LnNvdXJjZS5zcGxpdChcIi9cIik7XG4gICAgICAvLyBPbmx5IGEgMy1wYXJ0IHNvdXJjZSBleHBsaWNpdGx5IHBpbnMgYSByZWdpc3RyeSBob3N0bmFtZS4gU2hvcnRoYW5kXG4gICAgICAvLyBzb3VyY2VzIChlLmcuIFwiaGFzaGljb3JwL2F3c2NjXCIpIG9taXQgaXQsIHNvIHdlIG11c3Qgbm90IGFzc3VtZSBhXG4gICAgICAvLyBkZWZhdWx0OiBUZXJyYWZvcm0gcmVzb2x2ZXMgdGhlbSB1bmRlciByZWdpc3RyeS50ZXJyYWZvcm0uaW8gd2hpbGVcbiAgICAgIC8vIE9wZW5Ub2Z1IHJlc29sdmVzIHRoZW0gdW5kZXIgcmVnaXN0cnkub3BlbnRvZnUub3JnLiBDb21wYXJpbmcgYWdhaW5zdCBhXG4gICAgICAvLyBoYXJkLWNvZGVkIGRlZmF1bHQgd291bGQgbWFrZSBzY2hlbWEgbG9va3VwIGZhaWwgdW5kZXIgT3BlblRvZnUgZXZlblxuICAgICAgLy8gdGhvdWdoIHRoZSBwcm92aWRlciB3YXMgaW5zdGFsbGVkIGNvcnJlY3RseS5cbiAgICAgIGNvbnN0IGV4cGxpY2l0SG9zdG5hbWUgPSB0YXJnZXRFbGVtZW50cy5sZW5ndGggPT09IDM7XG4gICAgICBzd2l0Y2ggKHRhcmdldEVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDE6IC8vIG9ubHkgbmFtZSBzZXRcbiAgICAgICAgICB0YXJnZXRTb3VyY2UubmFtZSA9IHRhcmdldEVsZW1lbnRzWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogLy8gbmFtZXNwYWNlIGFuZCBuYW1lIHNldFxuICAgICAgICAgIHRhcmdldFNvdXJjZS5uYW1lc3BhY2UgPSB0YXJnZXRFbGVtZW50c1swXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIHRhcmdldFNvdXJjZS5uYW1lID0gdGFyZ2V0RWxlbWVudHNbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOiAvLyBob3N0bmFtZSwgbmFtZXNwYWNlIGFuZCBuYW1lIHNldFxuICAgICAgICAgIHRhcmdldFNvdXJjZS5ob3N0bmFtZSA9IHRhcmdldEVsZW1lbnRzWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgdGFyZ2V0U291cmNlLm5hbWVzcGFjZSA9IHRhcmdldEVsZW1lbnRzWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgdGFyZ2V0U291cmNlLm5hbWUgPSB0YXJnZXRFbGVtZW50c1syXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBjYW4ndCBoYW5kbGUgJHt0YXJnZXQuc291cmNlfS4gRXhwZWN0ZWQgc3RyaW5nIHdpdGggMSwgMiBvciAzIGVsZW1lbnRzIHNlcGFyYXRlZCBieSAnLydgLFxuICAgICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgICghZXhwbGljaXRIb3N0bmFtZSB8fCB0YXJnZXRTb3VyY2UuaG9zdG5hbWUgPT09IGhvc3RuYW1lKSAmJlxuICAgICAgICB0YXJnZXRTb3VyY2UubmFtZXNwYWNlID09PSBuYW1lc3BhY2UgJiZcbiAgICAgICAgdGFyZ2V0U291cmNlLm5hbWUgPT09IHByb3ZpZGVyXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEVsc2UsIHRyeSB0byBtYXRjaCB0YXJnZXQubmFtZSB0byB0aGUgcHJvdmlkZXIgbmFtZVxuXG4gICAgcmV0dXJuIHRhcmdldC5uYW1lID09PSBwcm92aWRlcjtcbiAgfVxufTtcblxuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlckNvbnN0cmFpbnRzIHtcbiAgW2Zxbjogc3RyaW5nXTogUHJvdmlkZXJEYXRhO1xufVxuXG5leHBvcnQgY2xhc3MgVGVycmFmb3JtUHJvdmlkZXJHZW5lcmF0b3Ige1xuICBwcml2YXRlIHJlc291cmNlUGFyc2VyID0gbmV3IFJlc291cmNlUGFyc2VyKCk7XG4gIHByaXZhdGUgcmVzb3VyY2VFbWl0dGVyOiBSZXNvdXJjZUVtaXR0ZXI7XG4gIHByaXZhdGUgc3RydWN0RW1pdHRlcjogU3RydWN0RW1pdHRlcjtcbiAgcHJpdmF0ZSBwcm92aWRlckZ1bmN0aW9uc0VtaXR0ZXI6IFByb3ZpZGVyRnVuY3Rpb25zRW1pdHRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBpbXBvcnRFeHRlbnNpb246IHN0cmluZztcbiAgcHVibGljIHZlcnNpb25zOiB7IFtmcXBuOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSA9IHt9O1xuICAvKipcbiAgICogUmVzb3VyY2UgZGlyZWN0b3J5IG5hbWVzIGVtaXR0ZWQgcGVyIHByb3ZpZGVyIGZvbGRlciBVc2VkIHRvIHBydW5lIGRpcmVjdG9yaWVzXG4gICAqIGxlZnQgb3ZlciBmcm9tIGEgcHJldmlvdXMgcHJvdmlkZXIgdmVyc2lvbi5cbiAgICovXG4gIHB1YmxpYyBlbWl0dGVkUmVzb3VyY2VGb2xkZXJzOiB7IFtwcm92aWRlcjogc3RyaW5nXTogc3RyaW5nW10gfSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29kZTogQ29kZU1ha2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2NoZW1hOiBQcm92aWRlclNjaGVtYSxcbiAgICBvcHRpb25zOiBUZXJyYWZvcm1Qcm92aWRlckdlbmVyYXRvck9wdGlvbnMgPSB7fSxcbiAgKSB7XG4gICAgdGhpcy5jb2RlLmluZGVudGF0aW9uID0gMjtcbiAgICB0aGlzLmltcG9ydEV4dGVuc2lvbiA9IG9wdGlvbnMuaW1wb3J0RXh0ZW5zaW9uID8/IFwiXCI7XG4gICAgdGhpcy5yZXNvdXJjZUVtaXR0ZXIgPSBuZXcgUmVzb3VyY2VFbWl0dGVyKHRoaXMuY29kZSwgdGhpcy5pbXBvcnRFeHRlbnNpb24pO1xuICAgIHRoaXMuc3RydWN0RW1pdHRlciA9IG5ldyBTdHJ1Y3RFbWl0dGVyKHRoaXMuY29kZSwgdGhpcy5pbXBvcnRFeHRlbnNpb24pO1xuICAgIHRoaXMucHJvdmlkZXJGdW5jdGlvbnNFbWl0dGVyID0gbmV3IFByb3ZpZGVyRnVuY3Rpb25zRW1pdHRlcih0aGlzLmNvZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQcm92aWRlckJ5Q29uc3RyYWludChcbiAgICBwcm92aWRlckNvbnN0cmFpbnQ6IENvbnN0cnVjdHNNYWtlclRhcmdldCxcbiAgKTogRlFQTiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2NoZW1hLnByb3ZpZGVyX3NjaGVtYXMgfHwge30pLmZpbmQoKGZxcG4pID0+XG4gICAgICBpc01hdGNoaW5nKHByb3ZpZGVyQ29uc3RyYWludCwgZnFwbiksXG4gICAgKSBhcyBGUVBOIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGdlbmVyYXRlKHByb3ZpZGVyQ29uc3RyYWludDogQ29uc3RydWN0c01ha2VyVGFyZ2V0KSB7XG4gICAgY29uc3QgZnFwbiA9IHRoaXMuZ2V0UHJvdmlkZXJCeUNvbnN0cmFpbnQocHJvdmlkZXJDb25zdHJhaW50KTtcbiAgICBpZiAoIWZxcG4pIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYENvdWxkIG5vdCBmaW5kIHByb3ZpZGVyIGNvbnN0cmFpbnQgZm9yICR7cHJvdmlkZXJDb25zdHJhaW50fSBpbiBzY2hlbWE6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICAyLFxuICAgICAgICApfWAsXG4gICAgICApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGZpbmQgcHJvdmlkZXIgd2l0aCBjb25zdHJhaW50ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgcHJvdmlkZXJDb25zdHJhaW50LFxuICAgICAgICApfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3ZpZGVyVmVyc2lvbiA9IHRoaXMuc2NoZW1hLnByb3ZpZGVyX3ZlcnNpb25zPy5bZnFwbl07XG4gICAgdGhpcy5lbWl0UHJvdmlkZXIoZnFwbiwgcHJvdmlkZXJWZXJzaW9uLCBwcm92aWRlckNvbnN0cmFpbnQpO1xuICAgIHRoaXMudmVyc2lvbnNbZnFwbl0gPSBwcm92aWRlclZlcnNpb247XG4gIH1cblxuICBwdWJsaWMgZ2VuZXJhdGVBbGwoKSB7XG4gICAgZm9yIChjb25zdCBmcXBuIG9mIE9iamVjdC5rZXlzKHRoaXMuc2NoZW1hLnByb3ZpZGVyX3NjaGVtYXMgfHwge30pKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlKFxuICAgICAgICBuZXcgQ29uc3RydWN0c01ha2VyUHJvdmlkZXJUYXJnZXQoXG4gICAgICAgICAgbmV3IFRlcnJhZm9ybVByb3ZpZGVyQ29uc3RyYWludChmcXBuKSxcbiAgICAgICAgICBMQU5HVUFHRVNbMF0sXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzYXZlKG91dGRpcjogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5jb2RlLnNhdmUob3V0ZGlyKTtcbiAgfVxuXG4gIHB1YmxpYyBidWlsZFJlc291cmNlTW9kZWxzKFxuICAgIGZxcG46IEZRUE4sXG4gICAgY29uc3RyYWludD86IENvbnN0cnVjdHNNYWtlclRhcmdldCxcbiAgKTogUmVzb3VyY2VNb2RlbFtdIHtcbiAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuc2NoZW1hLnByb3ZpZGVyX3NjaGVtYXM/LltmcXBuXTtcbiAgICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbiBub3QgZmluZCBwcm92aWRlciAnJHtmcXBufScgaW4gc2NoZW1hYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2VzID0gT2JqZWN0LmVudHJpZXMocHJvdmlkZXIucmVzb3VyY2Vfc2NoZW1hcyB8fCB7fSkubWFwKFxuICAgICAgKFt0eXBlLCByZXNvdXJjZV0pID0+XG4gICAgICAgIHRoaXMucmVzb3VyY2VQYXJzZXIucGFyc2UoZnFwbiwgdHlwZSwgcmVzb3VyY2UsIFwicmVzb3VyY2VcIiwgY29uc3RyYWludCksXG4gICAgKTtcblxuICAgIGNvbnN0IGRhdGFTb3VyY2VzID0gT2JqZWN0LmVudHJpZXMocHJvdmlkZXIuZGF0YV9zb3VyY2Vfc2NoZW1hcyB8fCB7fSkubWFwKFxuICAgICAgKFt0eXBlLCByZXNvdXJjZV0pID0+XG4gICAgICAgIHRoaXMucmVzb3VyY2VQYXJzZXIucGFyc2UoXG4gICAgICAgICAgZnFwbixcbiAgICAgICAgICBgZGF0YV8ke3R5cGV9YCxcbiAgICAgICAgICByZXNvdXJjZSxcbiAgICAgICAgICBcImRhdGFfc291cmNlXCIsXG4gICAgICAgICAgY29uc3RyYWludCxcbiAgICAgICAgKSxcbiAgICApO1xuXG4gICAgY29uc3QgZXBoZW1lcmFsUmVzb3VyY2VzID0gT2JqZWN0LmVudHJpZXMoXG4gICAgICBwcm92aWRlci5lcGhlbWVyYWxfcmVzb3VyY2Vfc2NoZW1hcyB8fCB7fSxcbiAgICApLm1hcCgoW3R5cGUsIHJlc291cmNlXSkgPT5cbiAgICAgIHRoaXMucmVzb3VyY2VQYXJzZXIucGFyc2UoXG4gICAgICAgIGZxcG4sXG4gICAgICAgIGBlcGhlbWVyYWxfJHt0eXBlfWAsXG4gICAgICAgIHJlc291cmNlLFxuICAgICAgICBcImVwaGVtZXJhbF9yZXNvdXJjZVwiLFxuICAgICAgICBjb25zdHJhaW50LFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgLy8gQ1JJVElDQUw6IGVwaGVtZXJhbCByZXNvdXJjZXMgbXVzdCBiZSBhcHBlbmRlZCBBRlRFUiByZXNvdXJjZXMgYW5kIGRhdGFcbiAgICAvLyBzb3VyY2VzIC0gdW5pcXVlQ2xhc3NOYW1lIGRlZHVwIGlzIG9yZGVyLWRlcGVuZGVudCBhbmQgZXhpc3RpbmdcbiAgICAvLyBwcmVidWlsdCBzbmFwc2hvdHMgbXVzdCBub3QgY2h1cm4uXG4gICAgcmV0dXJuIChbXSBhcyBSZXNvdXJjZU1vZGVsW10pLmNvbmNhdChcbiAgICAgIC4uLnJlc291cmNlcyxcbiAgICAgIC4uLmRhdGFTb3VyY2VzLFxuICAgICAgLi4uZXBoZW1lcmFsUmVzb3VyY2VzLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2xhc3NOYW1lRm9yUmVzb3VyY2UodGVycmFmb3JtVHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VQYXJzZXIuZ2V0Q2xhc3NOYW1lRm9yUmVzb3VyY2UodGVycmFmb3JtVHlwZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TmFtZXNwYWNlTmFtZUZvclJlc291cmNlKHRlcnJhZm9ybVR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlUGFyc2VyLmdldE5hbWVzcGFjZU5hbWVGb3JSZXNvdXJjZSh0ZXJyYWZvcm1UeXBlKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFByb3ZpZGVyKFxuICAgIGZxcG46IEZRUE4sXG4gICAgcHJvdmlkZXJWZXJzaW9uPzogc3RyaW5nLFxuICAgIGNvbnN0cmFpbnQ/OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gICkge1xuICAgIGNvbnN0IG5hbWUgPSBjb25zdHJhaW50Py5uYW1lXG4gICAgICA/IChjb25zdHJhaW50Lm5hbWUgYXMgUHJvdmlkZXJOYW1lKVxuICAgICAgOiBwYXJzZUZRUE4oZnFwbikubmFtZTtcbiAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuc2NoZW1hLnByb3ZpZGVyX3NjaGVtYXM/LltmcXBuXTtcbiAgICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbiBub3QgZmluZCBwcm92aWRlciAnJHtmcXBufScgaW4gc2NoZW1hYCk7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZXM6IHN0cmluZ1tdID0gW107XG4gICAgdGhpcy5idWlsZFJlc291cmNlTW9kZWxzKGZxcG4sIGNvbnN0cmFpbnQpLmZvckVhY2goKHJlc291cmNlTW9kZWwpID0+IHtcbiAgICAgIGlmIChjb25zdHJhaW50KSB7XG4gICAgICAgIHJlc291cmNlTW9kZWwucHJvdmlkZXJWZXJzaW9uQ29uc3RyYWludCA9IGNvbnN0cmFpbnQudmVyc2lvbjtcbiAgICAgICAgcmVzb3VyY2VNb2RlbC50ZXJyYWZvcm1Qcm92aWRlclNvdXJjZSA9IGNvbnN0cmFpbnQuc291cmNlO1xuICAgICAgfVxuICAgICAgcmVzb3VyY2VNb2RlbC5wcm92aWRlclZlcnNpb24gPSBwcm92aWRlclZlcnNpb247XG5cbiAgICAgIGlmIChyZXNvdXJjZU1vZGVsLnN0cnVjdHNSZXF1aXJlU2hhcmRpbmcpIHtcbiAgICAgICAgZmlsZXMucHVzaCh0aGlzLmVtaXRSZXNvdXJjZVdpdGhDb21wbGV4U3RydWN0KHJlc291cmNlTW9kZWwpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbGVzLnB1c2godGhpcy5lbWl0UmVzb3VyY2UocmVzb3VyY2VNb2RlbCkpO1xuICAgICAgfVxuICAgICAgdGhpcy5lbWl0UmVzb3VyY2VSZWFkbWUocmVzb3VyY2VNb2RlbCk7XG4gICAgfSk7XG5cbiAgICAvLyBCdWlsdCBiZWZvcmUgdGhlIHByb3ZpZGVyIGNsYXNzIGlzIGVtaXR0ZWQgKHJhdGhlciB0aGFuIGFmdGVyLCBhc1xuICAgIC8vIHJlc291cmNlcy9kYXRhIHNvdXJjZXMvZXBoZW1lcmFsIHJlc291cmNlcyBhYm92ZSBhbHJlYWR5IGFyZSkgc28gdGhhdFxuICAgIC8vIHRoZSBtb2RlbCBjYW4gYmUgYXR0YWNoZWQgdG8gcHJvdmlkZXJSZXNvdXJjZSBhbmQgcGlja2VkIHVwIGJ5XG4gICAgLy8gUmVzb3VyY2VFbWl0dGVyIHdoaWxlIGl0IHN0aWxsIGVtaXRzIHRoZSBwcm92aWRlciBjbGFzcyBmaWxlIGJlbG93IC1cbiAgICAvLyBzZWUgdGhlIGVuZ2luZWVyaW5nIGJyaWVmIGZvciB3aHkgdGhpcyBvcmRlcmluZyBtYXR0ZXJzLlxuICAgIGNvbnN0IHByb3ZpZGVyRnVuY3Rpb25zTW9kZWwgPSBidWlsZFByb3ZpZGVyRnVuY3Rpb25zTW9kZWwoXG4gICAgICBuYW1lLFxuICAgICAgcHJvdmlkZXIuZnVuY3Rpb25zLFxuICAgICk7XG5cbiAgICBpZiAocHJvdmlkZXIucHJvdmlkZXIpIHtcbiAgICAgIGNvbnN0IHByb3ZpZGVyUmVzb3VyY2UgPSB0aGlzLnJlc291cmNlUGFyc2VyLnBhcnNlKFxuICAgICAgICBmcXBuLFxuICAgICAgICBgcHJvdmlkZXJgLFxuICAgICAgICBwcm92aWRlci5wcm92aWRlcixcbiAgICAgICAgXCJwcm92aWRlclwiLFxuICAgICAgICBjb25zdHJhaW50LFxuICAgICAgKTtcbiAgICAgIGlmIChjb25zdHJhaW50KSB7XG4gICAgICAgIHByb3ZpZGVyUmVzb3VyY2UucHJvdmlkZXJWZXJzaW9uQ29uc3RyYWludCA9IGNvbnN0cmFpbnQudmVyc2lvbjtcbiAgICAgICAgcHJvdmlkZXJSZXNvdXJjZS50ZXJyYWZvcm1Qcm92aWRlclNvdXJjZSA9IGNvbnN0cmFpbnQuc291cmNlO1xuICAgICAgICBwcm92aWRlclJlc291cmNlLnRlcnJhZm9ybVByb3ZpZGVyTmFtZSA9IGNvbnN0cmFpbnQubmFtZTtcbiAgICAgIH1cbiAgICAgIHByb3ZpZGVyUmVzb3VyY2UucHJvdmlkZXJWZXJzaW9uID0gcHJvdmlkZXJWZXJzaW9uO1xuXG4gICAgICBpZiAocHJvdmlkZXJGdW5jdGlvbnNNb2RlbCkge1xuICAgICAgICBhc3NlcnROb0Z1bmN0aW9uc0dldHRlckNvbGxpc2lvbihcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHByb3ZpZGVyUmVzb3VyY2UuYXR0cmlidXRlcy5tYXAoKGF0dCkgPT4gYXR0Lm5hbWUpLFxuICAgICAgICApO1xuICAgICAgICBwcm92aWRlclJlc291cmNlLnByb3ZpZGVyRnVuY3Rpb25zTW9kZWwgPSBwcm92aWRlckZ1bmN0aW9uc01vZGVsO1xuICAgICAgfVxuXG4gICAgICBmaWxlcy5wdXNoKHRoaXMuZW1pdFJlc291cmNlKHByb3ZpZGVyUmVzb3VyY2UpKTtcbiAgICAgIHRoaXMuZW1pdFJlc291cmNlUmVhZG1lKHByb3ZpZGVyUmVzb3VyY2UpO1xuICAgIH1cblxuICAgIGlmIChwcm92aWRlckZ1bmN0aW9uc01vZGVsKSB7XG4gICAgICBmaWxlcy5wdXNoKHRoaXMuZW1pdFByb3ZpZGVyRnVuY3Rpb25zKG5hbWUsIHByb3ZpZGVyRnVuY3Rpb25zTW9kZWwpKTtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXRJbmRleEZpbGUobmFtZSwgZmlsZXMpO1xuICAgIHRoaXMuZW1pdExhenlJbmRleEZpbGUobmFtZSwgZmlsZXMpO1xuXG4gICAgLy8gUmVjb3JkIGV4YWN0bHkgd2hhdCB0aGlzIHJ1biBlbWl0dGVkLCBkZXJpdmVkIHRoZSBzYW1lIHdheSB0aGUgaW5kZXhcbiAgICAvLyBmaWxlcyBkZXJpdmUgdGhlaXIgZXhwb3J0cywgc28gcHJ1bmluZyBjYW4gbmV2ZXIgZGlzYWdyZWUgd2l0aCB0aGVtLlxuICAgIHRoaXMuZW1pdHRlZFJlc291cmNlRm9sZGVyc1tuYW1lXSA9IGZpbGVzLm1hcCgoZmlsZSkgPT5cbiAgICAgIHRoaXMucmVzb3VyY2VGb2xkZXJOYW1lKG5hbWUsIGZpbGUpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogTWFwIGFuIGVtaXR0ZWQgZmlsZSBwYXRoIHRvIHRoZSByZXNvdXJjZSBkaXJlY3RvcnkgbmFtZSBpdCBsaXZlcyBpbiwgZS5nLlxuICAgKiBgcHJvdmlkZXJzL21vbmdvZGJhdGxhcy90ZWFtcy9pbmRleC50c2AgLT4gYHRlYW1zYC5cbiAgICovXG4gIHByaXZhdGUgcmVzb3VyY2VGb2xkZXJOYW1lKHByb3ZpZGVyOiBQcm92aWRlck5hbWUsIGZpbGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGZpbGUucmVwbGFjZShgcHJvdmlkZXJzLyR7cHJvdmlkZXJ9L2AsIFwiXCIpLnJlcGxhY2UoXCIvaW5kZXgudHNcIiwgXCJcIik7XG4gIH1cblxuICBwcml2YXRlIGVtaXRQcm92aWRlckZ1bmN0aW9ucyhcbiAgICBwcm92aWRlcjogUHJvdmlkZXJOYW1lLFxuICAgIG1vZGVsOiBQcm92aWRlckZ1bmN0aW9uc01vZGVsLFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gYHByb3ZpZGVycy8ke3Byb3ZpZGVyfS9wcm92aWRlci1mdW5jdGlvbnMvaW5kZXgudHNgO1xuICAgIHRoaXMuY29kZS5vcGVuRmlsZShmaWxlUGF0aCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYC8vIGdlbmVyYXRlZCBmcm9tIHByb3ZpZGVyIGZ1bmN0aW9uIHNjaGVtYWApO1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5wcm92aWRlckZ1bmN0aW9uc0VtaXR0ZXIuZW1pdChtb2RlbCk7XG4gICAgdGhpcy5jb2RlLmNsb3NlRmlsZShmaWxlUGF0aCk7XG4gICAgcmV0dXJuIGZpbGVQYXRoO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UmVzb3VyY2VSZWFkbWUocmVzb3VyY2U6IFJlc291cmNlTW9kZWwpOiB2b2lkIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGAke3Jlc291cmNlLm5hbWVzcGFjZUZvbGRlclBhdGh9L1JFQURNRS5tZGA7XG4gICAgdGhpcy5jb2RlLm9wZW5GaWxlKGZpbGVQYXRoKTtcbiAgICB0aGlzLmNvZGUubGluZShgIyBcXGAke3Jlc291cmNlLnRlcnJhZm9ybVR5cGV9XFxgYCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICBjb25zdCB0eXBlID0gcmVzb3VyY2UuaXNQcm92aWRlclxuICAgICAgPyByZXNvdXJjZS5wcm92aWRlclxuICAgICAgOiByZXNvdXJjZS50ZXJyYWZvcm1UeXBlO1xuICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgYFJlZmVyIHRvIHRoZSBUZXJyYWZvcm0gUmVnaXN0cnkgZm9yIGRvY3M6IFtcXGAke3R5cGV9XFxgXSgke3Jlc291cmNlLmxpbmtUb0RvY3N9KS5gLFxuICAgICk7XG4gICAgdGhpcy5jb2RlLmNsb3NlRmlsZShmaWxlUGF0aCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRJbmRleEZpbGUocHJvdmlkZXI6IFByb3ZpZGVyTmFtZSwgZmlsZXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgY29uc3QgZm9sZGVyID0gYHByb3ZpZGVycy8ke3Byb3ZpZGVyfWA7XG4gICAgY29uc3QgZmlsZVBhdGggPSBgJHtmb2xkZXJ9L2luZGV4LnRzYDtcbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoZmlsZVBhdGgpO1xuICAgIHRoaXMuY29kZS5saW5lKFwiLy8gZ2VuZXJhdGVkIGJ5IGNka3RuIGdldFwiKTtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIGNvbnN0IGRpck5hbWUgPSB0aGlzLnJlc291cmNlRm9sZGVyTmFtZShwcm92aWRlciwgZmlsZSk7XG4gICAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICAgYGV4cG9ydCAqIGFzICR7dG9DYW1lbENhc2UoZGlyTmFtZSl9IGZyb20gJy4vJHtkaXJOYW1lfS9pbmRleCR7dGhpcy5pbXBvcnRFeHRlbnNpb259JztgLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VGaWxlKGZpbGVQYXRoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdExhenlJbmRleEZpbGUocHJvdmlkZXI6IFByb3ZpZGVyTmFtZSwgZmlsZXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgY29uc3QgZm9sZGVyID0gYHByb3ZpZGVycy8ke3Byb3ZpZGVyfWA7XG4gICAgY29uc3QgZmlsZVBhdGggPSBgJHtmb2xkZXJ9L2xhenktaW5kZXgudHNgO1xuICAgIHRoaXMuY29kZS5vcGVuRmlsZShmaWxlUGF0aCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoXCIvLyBnZW5lcmF0ZWQgYnkgY2RrdG4gZ2V0XCIpO1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgY29uc3QgZGlyTmFtZSA9IHRoaXMucmVzb3VyY2VGb2xkZXJOYW1lKHByb3ZpZGVyLCBmaWxlKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICBgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICcke3RvQ2FtZWxDYXNlKFxuICAgICAgICAgIGRpck5hbWUsXG4gICAgICAgICl9JywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlcXVpcmUoJy4vJHtkaXJOYW1lfScpOyB9IH0pO2AsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UmVzb3VyY2UocmVzb3VyY2U6IFJlc291cmNlTW9kZWwpOiBzdHJpbmcge1xuICAgIHRoaXMuY29kZS5vcGVuRmlsZShyZXNvdXJjZS5maWxlUGF0aCk7XG4gICAgdGhpcy5lbWl0RmlsZUhlYWRlcihyZXNvdXJjZSk7XG4gICAgdGhpcy5zdHJ1Y3RFbWl0dGVyLmVtaXQocmVzb3VyY2UpO1xuICAgIHRoaXMucmVzb3VyY2VFbWl0dGVyLmVtaXQocmVzb3VyY2UpO1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUocmVzb3VyY2UuZmlsZVBhdGgpO1xuXG4gICAgcmV0dXJuIHJlc291cmNlLmZpbGVQYXRoO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UmVzb3VyY2VXaXRoQ29tcGxleFN0cnVjdChyZXNvdXJjZTogUmVzb3VyY2VNb2RlbCkge1xuICAgIGNvbnN0IGdlbmVyYXRlZEZpbGVzID0gW107XG5cbiAgICAvLyBkcm9wIHRoZSBsYXN0IHNlZ21lbnQgb2YgdGhlIGZpbGVwYXRoXG4gICAgY29uc3QgZmlsZVBhdGggPSByZXNvdXJjZS5maWxlUGF0aDtcbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoZmlsZVBhdGgpO1xuICAgIHRoaXMuY29kZS5saW5lKGAvLyBnZW5lcmF0ZWQgZnJvbSB0ZXJyYWZvcm0gcmVzb3VyY2Ugc2NoZW1hYCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcblxuICAgIGlmIChyZXNvdXJjZS5zdHJ1Y3RzUmVxdWlyZVNoYXJkaW5nKSB7XG4gICAgICBjb25zdCBzdHJ1Y3RzU3BlY2lmaWVyID0gYC4vJHtyZXNvdXJjZS5zdHJ1Y3RzRm9sZGVyTmFtZX0vaW5kZXgke3RoaXMuaW1wb3J0RXh0ZW5zaW9ufWA7XG4gICAgICBpZiAocmVzb3VyY2UucmVmZXJlbmNlZFR5cGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAgICAgYGltcG9ydCB7ICR7cmVzb3VyY2UucmVmZXJlbmNlZFR5cGVzLmpvaW4oXG4gICAgICAgICAgICBcIiwgXFxuXCIsXG4gICAgICAgICAgKX19IGZyb20gJyR7c3RydWN0c1NwZWNpZmllcn0nO2AsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29kZS5saW5lKGBleHBvcnQgKiBmcm9tICcke3N0cnVjdHNTcGVjaWZpZXJ9JztgKTtcblxuICAgICAgcmVzb3VyY2UuaW1wb3J0U3RhdGVtZW50cy5mb3JFYWNoKChzdGF0ZW1lbnQpID0+XG4gICAgICAgIHRoaXMuY29kZS5saW5lKHN0YXRlbWVudCksXG4gICAgICApO1xuXG4gICAgICB0aGlzLnN0cnVjdEVtaXR0ZXIuZW1pdEludGVyZmFjZShyZXNvdXJjZSwgcmVzb3VyY2UuY29uZmlnU3RydWN0KTtcbiAgICAgIHRoaXMucmVzb3VyY2VFbWl0dGVyLmVtaXQocmVzb3VyY2UpO1xuXG4gICAgICB0aGlzLmNvZGUuY2xvc2VGaWxlKGZpbGVQYXRoKTtcblxuICAgICAgdGhpcy5zdHJ1Y3RFbWl0dGVyLmVtaXQocmVzb3VyY2UpO1xuICAgICAgZ2VuZXJhdGVkRmlsZXMucHVzaChyZXNvdXJjZS5maWxlTmFtZSk7XG4gICAgICBnZW5lcmF0ZWRGaWxlcy5wdXNoKHJlc291cmNlLnN0cnVjdHNGb2xkZXJOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzb3VyY2UuaW1wb3J0U3RhdGVtZW50cy5mb3JFYWNoKChzdGF0ZW1lbnQpID0+XG4gICAgICAgIHRoaXMuY29kZS5saW5lKHN0YXRlbWVudCksXG4gICAgICApO1xuXG4gICAgICB0aGlzLnN0cnVjdEVtaXR0ZXIuZW1pdChyZXNvdXJjZSk7XG4gICAgICB0aGlzLnJlc291cmNlRW1pdHRlci5lbWl0KHJlc291cmNlKTtcbiAgICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICAgICAgZ2VuZXJhdGVkRmlsZXMucHVzaChyZXNvdXJjZS5maWxlTmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbGVQYXRoO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0RmlsZUhlYWRlcihyZXNvdXJjZTogUmVzb3VyY2VNb2RlbCkge1xuICAgIHRoaXMuY29kZS5saW5lKGAvLyAke3Jlc291cmNlLmxpbmtUb0RvY3N9YCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYC8vIGdlbmVyYXRlZCBmcm9tIHRlcnJhZm9ybSByZXNvdXJjZSBzY2hlbWFgKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIHJlc291cmNlLmltcG9ydFN0YXRlbWVudHMuZm9yRWFjaCgoc3RhdGVtZW50KSA9PiB0aGlzLmNvZGUubGluZShzdGF0ZW1lbnQpKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIHRoaXMuY29kZS5saW5lKFwiLy8gQ29uZmlndXJhdGlvblwiKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICB9XG59XG4iXX0=
|
|
278
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2dldC9nZW5lcmF0b3IvcHJvdmlkZXItZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMseUNBQW1EO0FBQ25ELDRDQVF3QjtBQUN4Qiw0REFBdUU7QUFDdkUscUNBS2tCO0FBQ2xCLHVEQUFtRDtBQUNuRCx1Q0FJbUI7QUFrQm5CLE1BQU0sVUFBVSxHQUFHLENBQ2pCLE1BQTZCLEVBQzdCLG1CQUEyQixFQUNsQixFQUFFO0lBQ1gsSUFBSSxNQUFNLENBQUMsUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRWxDLE1BQU0sUUFBUSxHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVoRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDMUIsT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLG1CQUFtQixDQUFDO0lBQy9DLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBRWpELElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN6QyxNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixtQkFBbUIsRUFBRSxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUVELDJDQUEyQztRQUMzQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQixNQUFNLFlBQVksR0FBRztnQkFDbkIsV0FBVztnQkFDWCxRQUFRLEVBQUUsdUJBQXVCO2dCQUNqQyxTQUFTLEVBQUUsV0FBVztnQkFDdEIsSUFBSSxFQUFFLEVBQUU7YUFDVCxDQUFDO1lBQ0YsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEQsc0VBQXNFO1lBQ3RFLG9FQUFvRTtZQUNwRSxxRUFBcUU7WUFDckUsMEVBQTBFO1lBQzFFLHVFQUF1RTtZQUN2RSwrQ0FBK0M7WUFDL0MsTUFBTSxnQkFBZ0IsR0FBRyxjQUFjLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztZQUNyRCxRQUFRLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDOUIsS0FBSyxDQUFDLEVBQUUsZ0JBQWdCO29CQUN0QixZQUFZLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDcEQsTUFBTTtnQkFDUixLQUFLLENBQUMsRUFBRSx5QkFBeUI7b0JBQy9CLFlBQVksQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUN6RCxZQUFZLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDcEQsTUFBTTtnQkFDUixLQUFLLENBQUMsRUFBRSxtQ0FBbUM7b0JBQ3pDLFlBQVksQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUN4RCxZQUFZLENBQUMsU0FBUyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDekQsWUFBWSxDQUFDLElBQUksR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ3BELE1BQU07Z0JBQ1I7b0JBQ0UsTUFBTSxJQUFJLEtBQUssQ0FDYixnQkFBZ0IsTUFBTSxDQUFDLE1BQU0sNERBQTRELENBQzFGLENBQUM7WUFDTixDQUFDO1lBRUQsT0FBTyxDQUNMLENBQUMsQ0FBQyxnQkFBZ0IsSUFBSSxZQUFZLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQztnQkFDekQsWUFBWSxDQUFDLFNBQVMsS0FBSyxTQUFTO2dCQUNwQyxZQUFZLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FDL0IsQ0FBQztRQUNKLENBQUM7UUFFRCxzREFBc0Q7UUFFdEQsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQztJQUNsQyxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBTUYsTUFBYSwwQkFBMEI7SUFhckMsWUFDbUIsSUFBZSxFQUNmLE1BQXNCLEVBQ3ZDLFVBQTZDLEVBQUU7O1FBRjlCLFNBQUksR0FBSixJQUFJLENBQVc7UUFDZixXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQVRsQyxhQUFRLEdBQTJDLEVBQUUsQ0FBQztRQUM3RDs7O1dBR0c7UUFDSSwyQkFBc0IsR0FBcUMsRUFBRSxDQUFDO1FBT25FLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsZUFBZSxHQUFHLE1BQUEsT0FBTyxDQUFDLGVBQWUsbUNBQUksRUFBRSxDQUFDO1FBQ3JELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxnQ0FBYyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUkseUJBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksdUJBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxrQ0FBd0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVPLHVCQUF1QixDQUM3QixrQkFBeUM7UUFFekMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDbkUsVUFBVSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxDQUNqQixDQUFDO0lBQ3hCLENBQUM7SUFFTSxRQUFRLENBQUMsa0JBQXlDOztRQUN2RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixnQkFBTSxDQUFDLEtBQUssQ0FDViwwQ0FBMEMsa0JBQWtCLGVBQWUsSUFBSSxDQUFDLFNBQVMsQ0FDdkYsSUFBSSxDQUFDLE1BQU0sRUFDWCxJQUFJLEVBQ0osQ0FBQyxDQUNGLEVBQUUsQ0FDSixDQUFDO1lBQ0YsTUFBTSxJQUFJLEtBQUssQ0FDYiwyQ0FBMkMsSUFBSSxDQUFDLFNBQVMsQ0FDdkQsa0JBQWtCLENBQ25CLEVBQUUsQ0FDSixDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sZUFBZSxHQUFHLE1BQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsMENBQUcsSUFBSSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxlQUFlLENBQUM7SUFDeEMsQ0FBQztJQUVNLFdBQVc7UUFDaEIsS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNuRSxJQUFJLENBQUMsUUFBUSxDQUNYLElBQUksdUNBQTZCLENBQy9CLElBQUkscUNBQTJCLENBQUMsSUFBSSxDQUFDLEVBQ3JDLG1CQUFTLENBQUMsQ0FBQyxDQUFDLENBQ2IsQ0FDRixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQWM7UUFDOUIsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU0sbUJBQW1CLENBQ3hCLElBQVUsRUFDVixVQUFrQzs7UUFFbEMsTUFBTSxRQUFRLEdBQUcsTUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQiwwQ0FBRyxJQUFJLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixJQUFJLGFBQWEsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQ25FLENBQUMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUNuQixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQzFFLENBQUM7UUFFRixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQ3hFLENBQUMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUNuQixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FDdkIsSUFBSSxFQUNKLFFBQVEsSUFBSSxFQUFFLEVBQ2QsUUFBUSxFQUNSLGFBQWEsRUFDYixVQUFVLENBQ1gsQ0FDSixDQUFDO1FBRUYsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUN2QyxRQUFRLENBQUMsMEJBQTBCLElBQUksRUFBRSxDQUMxQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQ3ZCLElBQUksRUFDSixhQUFhLElBQUksRUFBRSxFQUNuQixRQUFRLEVBQ1Isb0JBQW9CLEVBQ3BCLFVBQVUsQ0FDWCxDQUNGLENBQUM7UUFFRiwwRUFBMEU7UUFDMUUsa0VBQWtFO1FBQ2xFLHFDQUFxQztRQUNyQyxPQUFRLEVBQXNCLENBQUMsTUFBTSxDQUNuQyxHQUFHLFNBQVMsRUFDWixHQUFHLFdBQVcsRUFDZCxHQUFHLGtCQUFrQixDQUN0QixDQUFDO0lBQ0osQ0FBQztJQUVNLHVCQUF1QixDQUFDLGFBQXFCO1FBQ2xELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRU0sMkJBQTJCLENBQUMsYUFBcUI7UUFDdEQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLDJCQUEyQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFTyxZQUFZLENBQ2xCLElBQVUsRUFDVixlQUF3QixFQUN4QixVQUFrQzs7UUFFbEMsTUFBTSxJQUFJLEdBQUcsQ0FBQSxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsSUFBSTtZQUMzQixDQUFDLENBQUUsVUFBVSxDQUFDLElBQXFCO1lBQ25DLENBQUMsQ0FBQyxJQUFBLDJCQUFTLEVBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3pCLE1BQU0sUUFBUSxHQUFHLE1BQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsMENBQUcsSUFBSSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsSUFBSSxhQUFhLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUU7WUFDbkUsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDZixhQUFhLENBQUMseUJBQXlCLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztnQkFDN0QsYUFBYSxDQUFDLHVCQUF1QixHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDNUQsQ0FBQztZQUNELGFBQWEsQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO1lBRWhELElBQUksYUFBYSxDQUFDLHNCQUFzQixFQUFFLENBQUM7Z0JBQ3pDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDaEUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQy9DLENBQUM7WUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFFSCxvRUFBb0U7UUFDcEUsd0VBQXdFO1FBQ3hFLGlFQUFpRTtRQUNqRSx1RUFBdUU7UUFDdkUsMkRBQTJEO1FBQzNELE1BQU0sc0JBQXNCLEdBQUcsSUFBQSxvQ0FBMkIsRUFDeEQsSUFBSSxFQUNKLFFBQVEsQ0FBQyxTQUFTLENBQ25CLENBQUM7UUFFRixJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUNoRCxJQUFJLEVBQ0osVUFBVSxFQUNWLFFBQVEsQ0FBQyxRQUFRLEVBQ2pCLFVBQVUsRUFDVixVQUFVLENBQ1gsQ0FBQztZQUNGLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsZ0JBQWdCLENBQUMseUJBQXlCLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztnQkFDaEUsZ0JBQWdCLENBQUMsdUJBQXVCLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztnQkFDN0QsZ0JBQWdCLENBQUMscUJBQXFCLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztZQUMzRCxDQUFDO1lBQ0QsZ0JBQWdCLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztZQUVuRCxJQUFJLHNCQUFzQixFQUFFLENBQUM7Z0JBQzNCLElBQUEseUNBQWdDLEVBQzlCLElBQUksRUFDSixnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQ25ELENBQUM7Z0JBQ0YsZ0JBQWdCLENBQUMsc0JBQXNCLEdBQUcsc0JBQXNCLENBQUM7WUFDbkUsQ0FBQztZQUVELEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUVELElBQUksc0JBQXNCLEVBQUUsQ0FBQztZQUMzQixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXBDLHVFQUF1RTtRQUN2RSx1RUFBdUU7UUFDdkUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNyRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUNwQyxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNLLGtCQUFrQixDQUFDLFFBQXNCLEVBQUUsSUFBWTtRQUM3RCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxRQUFRLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFTyxxQkFBcUIsQ0FDM0IsUUFBc0IsRUFDdEIsS0FBNkI7UUFFN0IsTUFBTSxRQUFRLEdBQUcsYUFBYSxRQUFRLDhCQUE4QixDQUFDO1FBQ3JFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLDRDQUE0QyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlCLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxRQUF1QjtRQUNoRCxNQUFNLFFBQVEsR0FBRyxHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsWUFBWSxDQUFDO1FBQzdELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sUUFBUSxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsVUFBVTtZQUM5QixDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVE7WUFDbkIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ1osZ0RBQWdELElBQUksT0FBTyxRQUFRLENBQUMsVUFBVSxJQUFJLENBQ25GLENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU8sYUFBYSxDQUFDLFFBQXNCLEVBQUUsS0FBZTtRQUMzRCxNQUFNLE1BQU0sR0FBRyxhQUFhLFFBQVEsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sUUFBUSxHQUFHLEdBQUcsTUFBTSxXQUFXLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUM1QyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ1osZUFBZSxJQUFBLHVCQUFXLEVBQUMsT0FBTyxDQUFDLFlBQVksT0FBTyxTQUFTLElBQUksQ0FBQyxlQUFlLElBQUksQ0FDeEYsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxRQUFzQixFQUFFLEtBQWU7UUFDL0QsTUFBTSxNQUFNLEdBQUcsYUFBYSxRQUFRLEVBQUUsQ0FBQztRQUN2QyxNQUFNLFFBQVEsR0FBRyxHQUFHLE1BQU0sZ0JBQWdCLENBQUM7UUFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUM1QyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ1osbUNBQW1DLElBQUEsdUJBQVcsRUFDNUMsT0FBTyxDQUNSLDZDQUE2QyxPQUFPLFdBQVcsQ0FDakUsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFTyxZQUFZLENBQUMsUUFBdUI7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXZDLE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQztJQUMzQixDQUFDO0lBRU8sNkJBQTZCLENBQUMsUUFBdUI7UUFDM0QsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBRTFCLHdDQUF3QztRQUN4QyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLDZDQUE2QyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVqQixJQUFJLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxRQUFRLENBQUMsaUJBQWlCLFNBQVMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3hGLElBQUksUUFBUSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNaLFlBQVksUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQ3ZDLE1BQU0sQ0FDUCxXQUFXLGdCQUFnQixJQUFJLENBQ2pDLENBQUM7WUFDSixDQUFDO1lBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLGdCQUFnQixJQUFJLENBQUMsQ0FBQztZQUV2RCxRQUFRLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQzFCLENBQUM7WUFFRixJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2xFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRXBDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRTlCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDbEQsQ0FBQzthQUFNLENBQUM7WUFDTixRQUFRLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQzFCLENBQUM7WUFFRixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5QixjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVPLGNBQWMsQ0FBQyxRQUF1QjtRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLDZDQUE2QyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQixRQUFRLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ25CLENBQUM7Q0FDRjtBQW5WRCxnRUFtVkMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IHsgQ29kZU1ha2VyLCB0b0NhbWVsQ2FzZSB9IGZyb20gXCJjb2RlbWFrZXJcIjtcbmltcG9ydCB7XG4gIENvbnN0cnVjdHNNYWtlclByb3ZpZGVyVGFyZ2V0LFxuICBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gIExBTkdVQUdFUyxcbiAgbG9nZ2VyLFxuICBQcm92aWRlclNjaGVtYSxcbiAgVGVycmFmb3JtUHJvdmlkZXJDb25zdHJhaW50LFxuICBUZXJyYWZvcm1UYXJnZXRWZXJzaW9ucyxcbn0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQgeyBGUVBOLCBwYXJzZUZRUE4sIFByb3ZpZGVyTmFtZSB9IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItc2NoZW1hXCI7XG5pbXBvcnQge1xuICBQcm92aWRlckZ1bmN0aW9uc01vZGVsLFxuICBSZXNvdXJjZU1vZGVsLFxuICBhc3NlcnROb0Z1bmN0aW9uc0dldHRlckNvbGxpc2lvbixcbiAgYnVpbGRQcm92aWRlckZ1bmN0aW9uc01vZGVsLFxufSBmcm9tIFwiLi9tb2RlbHNcIjtcbmltcG9ydCB7IFJlc291cmNlUGFyc2VyIH0gZnJvbSBcIi4vcmVzb3VyY2UtcGFyc2VyXCI7XG5pbXBvcnQge1xuICBQcm92aWRlckZ1bmN0aW9uc0VtaXR0ZXIsXG4gIFJlc291cmNlRW1pdHRlcixcbiAgU3RydWN0RW1pdHRlcixcbn0gZnJvbSBcIi4vZW1pdHRlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRlcnJhZm9ybVByb3ZpZGVyR2VuZXJhdG9yT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBGaWxlIGV4dGVuc2lvbiB0byB3cml0ZSBvbiBlbWl0dGVkIHJlbGF0aXZlIGltcG9ydHMuXG4gICAqIERlZmF1bHRzIHRvIFwiXCIgKENvbW1vbkpTKS5cbiAgICovXG4gIHJlYWRvbmx5IGltcG9ydEV4dGVuc2lvbj86IHN0cmluZztcbiAgLyoqIFByb2plY3QncyBkZWNsYXJlZCB0YXJnZXRWZXJzaW9uczsgc2VsZWN0cyB0aGUgZG9jcyByZWdpc3RyeS4gKi9cbiAgcmVhZG9ubHkgdGFyZ2V0VmVyc2lvbnM/OiBUZXJyYWZvcm1UYXJnZXRWZXJzaW9ucztcbn1cblxuaW50ZXJmYWNlIFByb3ZpZGVyRGF0YSB7XG4gIG5hbWU6IHN0cmluZztcbiAgc291cmNlOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbn1cblxuY29uc3QgaXNNYXRjaGluZyA9IChcbiAgdGFyZ2V0OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gIHRlcnJhZm9ybVNjaGVtYU5hbWU6IHN0cmluZyxcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAodGFyZ2V0LmlzTW9kdWxlKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgZWxlbWVudHMgPSB0ZXJyYWZvcm1TY2hlbWFOYW1lLnNwbGl0KFwiL1wiKTtcblxuICBpZiAoZWxlbWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHRhcmdldC5zb3VyY2UgPT09IHRlcnJhZm9ybVNjaGVtYU5hbWU7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgW2hvc3RuYW1lLCBuYW1lc3BhY2UsIHByb3ZpZGVyXSA9IGVsZW1lbnRzO1xuXG4gICAgaWYgKCFob3N0bmFtZSB8fCAhbmFtZXNwYWNlIHx8ICFwcm92aWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW4ndCBoYW5kbGUgJHt0ZXJyYWZvcm1TY2hlbWFOYW1lfWApO1xuICAgIH1cblxuICAgIC8vIElmIHRhcmdldC5zb3VyY2UgaXMgc2V0LCB0cnkgdG8gbWF0Y2ggaXRcbiAgICBpZiAodGFyZ2V0LnNvdXJjZSkge1xuICAgICAgY29uc3QgdGFyZ2V0U291cmNlID0ge1xuICAgICAgICAvLyBkZWZhdWx0c1xuICAgICAgICBob3N0bmFtZTogXCJyZWdpc3RyeS50ZXJyYWZvcm0uaW9cIixcbiAgICAgICAgbmFtZXNwYWNlOiBcImhhc2hpY29ycFwiLFxuICAgICAgICBuYW1lOiBcIlwiLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnRzID0gdGFyZ2V0LnNvdXJjZS5zcGxpdChcIi9cIik7XG4gICAgICAvLyBPbmx5IGEgMy1wYXJ0IHNvdXJjZSBleHBsaWNpdGx5IHBpbnMgYSByZWdpc3RyeSBob3N0bmFtZS4gU2hvcnRoYW5kXG4gICAgICAvLyBzb3VyY2VzIChlLmcuIFwiaGFzaGljb3JwL2F3c2NjXCIpIG9taXQgaXQsIHNvIHdlIG11c3Qgbm90IGFzc3VtZSBhXG4gICAgICAvLyBkZWZhdWx0OiBUZXJyYWZvcm0gcmVzb2x2ZXMgdGhlbSB1bmRlciByZWdpc3RyeS50ZXJyYWZvcm0uaW8gd2hpbGVcbiAgICAgIC8vIE9wZW5Ub2Z1IHJlc29sdmVzIHRoZW0gdW5kZXIgcmVnaXN0cnkub3BlbnRvZnUub3JnLiBDb21wYXJpbmcgYWdhaW5zdCBhXG4gICAgICAvLyBoYXJkLWNvZGVkIGRlZmF1bHQgd291bGQgbWFrZSBzY2hlbWEgbG9va3VwIGZhaWwgdW5kZXIgT3BlblRvZnUgZXZlblxuICAgICAgLy8gdGhvdWdoIHRoZSBwcm92aWRlciB3YXMgaW5zdGFsbGVkIGNvcnJlY3RseS5cbiAgICAgIGNvbnN0IGV4cGxpY2l0SG9zdG5hbWUgPSB0YXJnZXRFbGVtZW50cy5sZW5ndGggPT09IDM7XG4gICAgICBzd2l0Y2ggKHRhcmdldEVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDE6IC8vIG9ubHkgbmFtZSBzZXRcbiAgICAgICAgICB0YXJnZXRTb3VyY2UubmFtZSA9IHRhcmdldEVsZW1lbnRzWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogLy8gbmFtZXNwYWNlIGFuZCBuYW1lIHNldFxuICAgICAgICAgIHRhcmdldFNvdXJjZS5uYW1lc3BhY2UgPSB0YXJnZXRFbGVtZW50c1swXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIHRhcmdldFNvdXJjZS5uYW1lID0gdGFyZ2V0RWxlbWVudHNbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOiAvLyBob3N0bmFtZSwgbmFtZXNwYWNlIGFuZCBuYW1lIHNldFxuICAgICAgICAgIHRhcmdldFNvdXJjZS5ob3N0bmFtZSA9IHRhcmdldEVsZW1lbnRzWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgdGFyZ2V0U291cmNlLm5hbWVzcGFjZSA9IHRhcmdldEVsZW1lbnRzWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgdGFyZ2V0U291cmNlLm5hbWUgPSB0YXJnZXRFbGVtZW50c1syXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBjYW4ndCBoYW5kbGUgJHt0YXJnZXQuc291cmNlfS4gRXhwZWN0ZWQgc3RyaW5nIHdpdGggMSwgMiBvciAzIGVsZW1lbnRzIHNlcGFyYXRlZCBieSAnLydgLFxuICAgICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgICghZXhwbGljaXRIb3N0bmFtZSB8fCB0YXJnZXRTb3VyY2UuaG9zdG5hbWUgPT09IGhvc3RuYW1lKSAmJlxuICAgICAgICB0YXJnZXRTb3VyY2UubmFtZXNwYWNlID09PSBuYW1lc3BhY2UgJiZcbiAgICAgICAgdGFyZ2V0U291cmNlLm5hbWUgPT09IHByb3ZpZGVyXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEVsc2UsIHRyeSB0byBtYXRjaCB0YXJnZXQubmFtZSB0byB0aGUgcHJvdmlkZXIgbmFtZVxuXG4gICAgcmV0dXJuIHRhcmdldC5uYW1lID09PSBwcm92aWRlcjtcbiAgfVxufTtcblxuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlckNvbnN0cmFpbnRzIHtcbiAgW2Zxbjogc3RyaW5nXTogUHJvdmlkZXJEYXRhO1xufVxuXG5leHBvcnQgY2xhc3MgVGVycmFmb3JtUHJvdmlkZXJHZW5lcmF0b3Ige1xuICBwcml2YXRlIHJlc291cmNlUGFyc2VyOiBSZXNvdXJjZVBhcnNlcjtcbiAgcHJpdmF0ZSByZXNvdXJjZUVtaXR0ZXI6IFJlc291cmNlRW1pdHRlcjtcbiAgcHJpdmF0ZSBzdHJ1Y3RFbWl0dGVyOiBTdHJ1Y3RFbWl0dGVyO1xuICBwcml2YXRlIHByb3ZpZGVyRnVuY3Rpb25zRW1pdHRlcjogUHJvdmlkZXJGdW5jdGlvbnNFbWl0dGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGltcG9ydEV4dGVuc2lvbjogc3RyaW5nO1xuICBwdWJsaWMgdmVyc2lvbnM6IHsgW2ZxcG46IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9ID0ge307XG4gIC8qKlxuICAgKiBSZXNvdXJjZSBkaXJlY3RvcnkgbmFtZXMgZW1pdHRlZCBwZXIgcHJvdmlkZXIgZm9sZGVyIFVzZWQgdG8gcHJ1bmUgZGlyZWN0b3JpZXNcbiAgICogbGVmdCBvdmVyIGZyb20gYSBwcmV2aW91cyBwcm92aWRlciB2ZXJzaW9uLlxuICAgKi9cbiAgcHVibGljIGVtaXR0ZWRSZXNvdXJjZUZvbGRlcnM6IHsgW3Byb3ZpZGVyOiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge307XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb2RlOiBDb2RlTWFrZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzY2hlbWE6IFByb3ZpZGVyU2NoZW1hLFxuICAgIG9wdGlvbnM6IFRlcnJhZm9ybVByb3ZpZGVyR2VuZXJhdG9yT3B0aW9ucyA9IHt9LFxuICApIHtcbiAgICB0aGlzLmNvZGUuaW5kZW50YXRpb24gPSAyO1xuICAgIHRoaXMuaW1wb3J0RXh0ZW5zaW9uID0gb3B0aW9ucy5pbXBvcnRFeHRlbnNpb24gPz8gXCJcIjtcbiAgICB0aGlzLnJlc291cmNlUGFyc2VyID0gbmV3IFJlc291cmNlUGFyc2VyKG9wdGlvbnMudGFyZ2V0VmVyc2lvbnMpO1xuICAgIHRoaXMucmVzb3VyY2VFbWl0dGVyID0gbmV3IFJlc291cmNlRW1pdHRlcih0aGlzLmNvZGUsIHRoaXMuaW1wb3J0RXh0ZW5zaW9uKTtcbiAgICB0aGlzLnN0cnVjdEVtaXR0ZXIgPSBuZXcgU3RydWN0RW1pdHRlcih0aGlzLmNvZGUsIHRoaXMuaW1wb3J0RXh0ZW5zaW9uKTtcbiAgICB0aGlzLnByb3ZpZGVyRnVuY3Rpb25zRW1pdHRlciA9IG5ldyBQcm92aWRlckZ1bmN0aW9uc0VtaXR0ZXIodGhpcy5jb2RlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UHJvdmlkZXJCeUNvbnN0cmFpbnQoXG4gICAgcHJvdmlkZXJDb25zdHJhaW50OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gICk6IEZRUE4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnNjaGVtYS5wcm92aWRlcl9zY2hlbWFzIHx8IHt9KS5maW5kKChmcXBuKSA9PlxuICAgICAgaXNNYXRjaGluZyhwcm92aWRlckNvbnN0cmFpbnQsIGZxcG4pLFxuICAgICkgYXMgRlFQTiB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBnZW5lcmF0ZShwcm92aWRlckNvbnN0cmFpbnQ6IENvbnN0cnVjdHNNYWtlclRhcmdldCkge1xuICAgIGNvbnN0IGZxcG4gPSB0aGlzLmdldFByb3ZpZGVyQnlDb25zdHJhaW50KHByb3ZpZGVyQ29uc3RyYWludCk7XG4gICAgaWYgKCFmcXBuKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBDb3VsZCBub3QgZmluZCBwcm92aWRlciBjb25zdHJhaW50IGZvciAke3Byb3ZpZGVyQ29uc3RyYWludH0gaW4gc2NoZW1hOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgMixcbiAgICAgICAgKX1gLFxuICAgICAgKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCBmaW5kIHByb3ZpZGVyIHdpdGggY29uc3RyYWludCAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHByb3ZpZGVyQ29uc3RyYWludCxcbiAgICAgICAgKX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm92aWRlclZlcnNpb24gPSB0aGlzLnNjaGVtYS5wcm92aWRlcl92ZXJzaW9ucz8uW2ZxcG5dO1xuICAgIHRoaXMuZW1pdFByb3ZpZGVyKGZxcG4sIHByb3ZpZGVyVmVyc2lvbiwgcHJvdmlkZXJDb25zdHJhaW50KTtcbiAgICB0aGlzLnZlcnNpb25zW2ZxcG5dID0gcHJvdmlkZXJWZXJzaW9uO1xuICB9XG5cbiAgcHVibGljIGdlbmVyYXRlQWxsKCkge1xuICAgIGZvciAoY29uc3QgZnFwbiBvZiBPYmplY3Qua2V5cyh0aGlzLnNjaGVtYS5wcm92aWRlcl9zY2hlbWFzIHx8IHt9KSkge1xuICAgICAgdGhpcy5nZW5lcmF0ZShcbiAgICAgICAgbmV3IENvbnN0cnVjdHNNYWtlclByb3ZpZGVyVGFyZ2V0KFxuICAgICAgICAgIG5ldyBUZXJyYWZvcm1Qcm92aWRlckNvbnN0cmFpbnQoZnFwbiksXG4gICAgICAgICAgTEFOR1VBR0VTWzBdLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2F2ZShvdXRkaXI6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuY29kZS5zYXZlKG91dGRpcik7XG4gIH1cblxuICBwdWJsaWMgYnVpbGRSZXNvdXJjZU1vZGVscyhcbiAgICBmcXBuOiBGUVBOLFxuICAgIGNvbnN0cmFpbnQ/OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gICk6IFJlc291cmNlTW9kZWxbXSB7XG4gICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLnNjaGVtYS5wcm92aWRlcl9zY2hlbWFzPy5bZnFwbl07XG4gICAgaWYgKCFwcm92aWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IGZpbmQgcHJvdmlkZXIgJyR7ZnFwbn0nIGluIHNjaGVtYWApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlcyA9IE9iamVjdC5lbnRyaWVzKHByb3ZpZGVyLnJlc291cmNlX3NjaGVtYXMgfHwge30pLm1hcChcbiAgICAgIChbdHlwZSwgcmVzb3VyY2VdKSA9PlxuICAgICAgICB0aGlzLnJlc291cmNlUGFyc2VyLnBhcnNlKGZxcG4sIHR5cGUsIHJlc291cmNlLCBcInJlc291cmNlXCIsIGNvbnN0cmFpbnQpLFxuICAgICk7XG5cbiAgICBjb25zdCBkYXRhU291cmNlcyA9IE9iamVjdC5lbnRyaWVzKHByb3ZpZGVyLmRhdGFfc291cmNlX3NjaGVtYXMgfHwge30pLm1hcChcbiAgICAgIChbdHlwZSwgcmVzb3VyY2VdKSA9PlxuICAgICAgICB0aGlzLnJlc291cmNlUGFyc2VyLnBhcnNlKFxuICAgICAgICAgIGZxcG4sXG4gICAgICAgICAgYGRhdGFfJHt0eXBlfWAsXG4gICAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgICAgXCJkYXRhX3NvdXJjZVwiLFxuICAgICAgICAgIGNvbnN0cmFpbnQsXG4gICAgICAgICksXG4gICAgKTtcblxuICAgIGNvbnN0IGVwaGVtZXJhbFJlc291cmNlcyA9IE9iamVjdC5lbnRyaWVzKFxuICAgICAgcHJvdmlkZXIuZXBoZW1lcmFsX3Jlc291cmNlX3NjaGVtYXMgfHwge30sXG4gICAgKS5tYXAoKFt0eXBlLCByZXNvdXJjZV0pID0+XG4gICAgICB0aGlzLnJlc291cmNlUGFyc2VyLnBhcnNlKFxuICAgICAgICBmcXBuLFxuICAgICAgICBgZXBoZW1lcmFsXyR7dHlwZX1gLFxuICAgICAgICByZXNvdXJjZSxcbiAgICAgICAgXCJlcGhlbWVyYWxfcmVzb3VyY2VcIixcbiAgICAgICAgY29uc3RyYWludCxcbiAgICAgICksXG4gICAgKTtcblxuICAgIC8vIENSSVRJQ0FMOiBlcGhlbWVyYWwgcmVzb3VyY2VzIG11c3QgYmUgYXBwZW5kZWQgQUZURVIgcmVzb3VyY2VzIGFuZCBkYXRhXG4gICAgLy8gc291cmNlcyAtIHVuaXF1ZUNsYXNzTmFtZSBkZWR1cCBpcyBvcmRlci1kZXBlbmRlbnQgYW5kIGV4aXN0aW5nXG4gICAgLy8gcHJlYnVpbHQgc25hcHNob3RzIG11c3Qgbm90IGNodXJuLlxuICAgIHJldHVybiAoW10gYXMgUmVzb3VyY2VNb2RlbFtdKS5jb25jYXQoXG4gICAgICAuLi5yZXNvdXJjZXMsXG4gICAgICAuLi5kYXRhU291cmNlcyxcbiAgICAgIC4uLmVwaGVtZXJhbFJlc291cmNlcyxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldENsYXNzTmFtZUZvclJlc291cmNlKHRlcnJhZm9ybVR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlUGFyc2VyLmdldENsYXNzTmFtZUZvclJlc291cmNlKHRlcnJhZm9ybVR5cGUpO1xuICB9XG5cbiAgcHVibGljIGdldE5hbWVzcGFjZU5hbWVGb3JSZXNvdXJjZSh0ZXJyYWZvcm1UeXBlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZVBhcnNlci5nZXROYW1lc3BhY2VOYW1lRm9yUmVzb3VyY2UodGVycmFmb3JtVHlwZSk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRQcm92aWRlcihcbiAgICBmcXBuOiBGUVBOLFxuICAgIHByb3ZpZGVyVmVyc2lvbj86IHN0cmluZyxcbiAgICBjb25zdHJhaW50PzogQ29uc3RydWN0c01ha2VyVGFyZ2V0LFxuICApIHtcbiAgICBjb25zdCBuYW1lID0gY29uc3RyYWludD8ubmFtZVxuICAgICAgPyAoY29uc3RyYWludC5uYW1lIGFzIFByb3ZpZGVyTmFtZSlcbiAgICAgIDogcGFyc2VGUVBOKGZxcG4pLm5hbWU7XG4gICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLnNjaGVtYS5wcm92aWRlcl9zY2hlbWFzPy5bZnFwbl07XG4gICAgaWYgKCFwcm92aWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IGZpbmQgcHJvdmlkZXIgJyR7ZnFwbn0nIGluIHNjaGVtYWApO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHRoaXMuYnVpbGRSZXNvdXJjZU1vZGVscyhmcXBuLCBjb25zdHJhaW50KS5mb3JFYWNoKChyZXNvdXJjZU1vZGVsKSA9PiB7XG4gICAgICBpZiAoY29uc3RyYWludCkge1xuICAgICAgICByZXNvdXJjZU1vZGVsLnByb3ZpZGVyVmVyc2lvbkNvbnN0cmFpbnQgPSBjb25zdHJhaW50LnZlcnNpb247XG4gICAgICAgIHJlc291cmNlTW9kZWwudGVycmFmb3JtUHJvdmlkZXJTb3VyY2UgPSBjb25zdHJhaW50LnNvdXJjZTtcbiAgICAgIH1cbiAgICAgIHJlc291cmNlTW9kZWwucHJvdmlkZXJWZXJzaW9uID0gcHJvdmlkZXJWZXJzaW9uO1xuXG4gICAgICBpZiAocmVzb3VyY2VNb2RlbC5zdHJ1Y3RzUmVxdWlyZVNoYXJkaW5nKSB7XG4gICAgICAgIGZpbGVzLnB1c2godGhpcy5lbWl0UmVzb3VyY2VXaXRoQ29tcGxleFN0cnVjdChyZXNvdXJjZU1vZGVsKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWxlcy5wdXNoKHRoaXMuZW1pdFJlc291cmNlKHJlc291cmNlTW9kZWwpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZW1pdFJlc291cmNlUmVhZG1lKHJlc291cmNlTW9kZWwpO1xuICAgIH0pO1xuXG4gICAgLy8gQnVpbHQgYmVmb3JlIHRoZSBwcm92aWRlciBjbGFzcyBpcyBlbWl0dGVkIChyYXRoZXIgdGhhbiBhZnRlciwgYXNcbiAgICAvLyByZXNvdXJjZXMvZGF0YSBzb3VyY2VzL2VwaGVtZXJhbCByZXNvdXJjZXMgYWJvdmUgYWxyZWFkeSBhcmUpIHNvIHRoYXRcbiAgICAvLyB0aGUgbW9kZWwgY2FuIGJlIGF0dGFjaGVkIHRvIHByb3ZpZGVyUmVzb3VyY2UgYW5kIHBpY2tlZCB1cCBieVxuICAgIC8vIFJlc291cmNlRW1pdHRlciB3aGlsZSBpdCBzdGlsbCBlbWl0cyB0aGUgcHJvdmlkZXIgY2xhc3MgZmlsZSBiZWxvdyAtXG4gICAgLy8gc2VlIHRoZSBlbmdpbmVlcmluZyBicmllZiBmb3Igd2h5IHRoaXMgb3JkZXJpbmcgbWF0dGVycy5cbiAgICBjb25zdCBwcm92aWRlckZ1bmN0aW9uc01vZGVsID0gYnVpbGRQcm92aWRlckZ1bmN0aW9uc01vZGVsKFxuICAgICAgbmFtZSxcbiAgICAgIHByb3ZpZGVyLmZ1bmN0aW9ucyxcbiAgICApO1xuXG4gICAgaWYgKHByb3ZpZGVyLnByb3ZpZGVyKSB7XG4gICAgICBjb25zdCBwcm92aWRlclJlc291cmNlID0gdGhpcy5yZXNvdXJjZVBhcnNlci5wYXJzZShcbiAgICAgICAgZnFwbixcbiAgICAgICAgYHByb3ZpZGVyYCxcbiAgICAgICAgcHJvdmlkZXIucHJvdmlkZXIsXG4gICAgICAgIFwicHJvdmlkZXJcIixcbiAgICAgICAgY29uc3RyYWludCxcbiAgICAgICk7XG4gICAgICBpZiAoY29uc3RyYWludCkge1xuICAgICAgICBwcm92aWRlclJlc291cmNlLnByb3ZpZGVyVmVyc2lvbkNvbnN0cmFpbnQgPSBjb25zdHJhaW50LnZlcnNpb247XG4gICAgICAgIHByb3ZpZGVyUmVzb3VyY2UudGVycmFmb3JtUHJvdmlkZXJTb3VyY2UgPSBjb25zdHJhaW50LnNvdXJjZTtcbiAgICAgICAgcHJvdmlkZXJSZXNvdXJjZS50ZXJyYWZvcm1Qcm92aWRlck5hbWUgPSBjb25zdHJhaW50Lm5hbWU7XG4gICAgICB9XG4gICAgICBwcm92aWRlclJlc291cmNlLnByb3ZpZGVyVmVyc2lvbiA9IHByb3ZpZGVyVmVyc2lvbjtcblxuICAgICAgaWYgKHByb3ZpZGVyRnVuY3Rpb25zTW9kZWwpIHtcbiAgICAgICAgYXNzZXJ0Tm9GdW5jdGlvbnNHZXR0ZXJDb2xsaXNpb24oXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBwcm92aWRlclJlc291cmNlLmF0dHJpYnV0ZXMubWFwKChhdHQpID0+IGF0dC5uYW1lKSxcbiAgICAgICAgKTtcbiAgICAgICAgcHJvdmlkZXJSZXNvdXJjZS5wcm92aWRlckZ1bmN0aW9uc01vZGVsID0gcHJvdmlkZXJGdW5jdGlvbnNNb2RlbDtcbiAgICAgIH1cblxuICAgICAgZmlsZXMucHVzaCh0aGlzLmVtaXRSZXNvdXJjZShwcm92aWRlclJlc291cmNlKSk7XG4gICAgICB0aGlzLmVtaXRSZXNvdXJjZVJlYWRtZShwcm92aWRlclJlc291cmNlKTtcbiAgICB9XG5cbiAgICBpZiAocHJvdmlkZXJGdW5jdGlvbnNNb2RlbCkge1xuICAgICAgZmlsZXMucHVzaCh0aGlzLmVtaXRQcm92aWRlckZ1bmN0aW9ucyhuYW1lLCBwcm92aWRlckZ1bmN0aW9uc01vZGVsKSk7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0SW5kZXhGaWxlKG5hbWUsIGZpbGVzKTtcbiAgICB0aGlzLmVtaXRMYXp5SW5kZXhGaWxlKG5hbWUsIGZpbGVzKTtcblxuICAgIC8vIFJlY29yZCBleGFjdGx5IHdoYXQgdGhpcyBydW4gZW1pdHRlZCwgZGVyaXZlZCB0aGUgc2FtZSB3YXkgdGhlIGluZGV4XG4gICAgLy8gZmlsZXMgZGVyaXZlIHRoZWlyIGV4cG9ydHMsIHNvIHBydW5pbmcgY2FuIG5ldmVyIGRpc2FncmVlIHdpdGggdGhlbS5cbiAgICB0aGlzLmVtaXR0ZWRSZXNvdXJjZUZvbGRlcnNbbmFtZV0gPSBmaWxlcy5tYXAoKGZpbGUpID0+XG4gICAgICB0aGlzLnJlc291cmNlRm9sZGVyTmFtZShuYW1lLCBmaWxlKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcCBhbiBlbWl0dGVkIGZpbGUgcGF0aCB0byB0aGUgcmVzb3VyY2UgZGlyZWN0b3J5IG5hbWUgaXQgbGl2ZXMgaW4sIGUuZy5cbiAgICogYHByb3ZpZGVycy9tb25nb2RiYXRsYXMvdGVhbXMvaW5kZXgudHNgIC0+IGB0ZWFtc2AuXG4gICAqL1xuICBwcml2YXRlIHJlc291cmNlRm9sZGVyTmFtZShwcm92aWRlcjogUHJvdmlkZXJOYW1lLCBmaWxlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBmaWxlLnJlcGxhY2UoYHByb3ZpZGVycy8ke3Byb3ZpZGVyfS9gLCBcIlwiKS5yZXBsYWNlKFwiL2luZGV4LnRzXCIsIFwiXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UHJvdmlkZXJGdW5jdGlvbnMoXG4gICAgcHJvdmlkZXI6IFByb3ZpZGVyTmFtZSxcbiAgICBtb2RlbDogUHJvdmlkZXJGdW5jdGlvbnNNb2RlbCxcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGBwcm92aWRlcnMvJHtwcm92aWRlcn0vcHJvdmlkZXItZnVuY3Rpb25zL2luZGV4LnRzYDtcbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoZmlsZVBhdGgpO1xuICAgIHRoaXMuY29kZS5saW5lKGAvLyBnZW5lcmF0ZWQgZnJvbSBwcm92aWRlciBmdW5jdGlvbiBzY2hlbWFgKTtcbiAgICB0aGlzLmNvZGUubGluZSgpO1xuICAgIHRoaXMucHJvdmlkZXJGdW5jdGlvbnNFbWl0dGVyLmVtaXQobW9kZWwpO1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICAgIHJldHVybiBmaWxlUGF0aDtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFJlc291cmNlUmVhZG1lKHJlc291cmNlOiBSZXNvdXJjZU1vZGVsKTogdm9pZCB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBgJHtyZXNvdXJjZS5uYW1lc3BhY2VGb2xkZXJQYXRofS9SRUFETUUubWRgO1xuICAgIHRoaXMuY29kZS5vcGVuRmlsZShmaWxlUGF0aCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYCMgXFxgJHtyZXNvdXJjZS50ZXJyYWZvcm1UeXBlfVxcYGApO1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgY29uc3QgdHlwZSA9IHJlc291cmNlLmlzUHJvdmlkZXJcbiAgICAgID8gcmVzb3VyY2UucHJvdmlkZXJcbiAgICAgIDogcmVzb3VyY2UudGVycmFmb3JtVHlwZTtcbiAgICB0aGlzLmNvZGUubGluZShcbiAgICAgIGBSZWZlciB0byB0aGUgVGVycmFmb3JtIFJlZ2lzdHJ5IGZvciBkb2NzOiBbXFxgJHt0eXBlfVxcYF0oJHtyZXNvdXJjZS5saW5rVG9Eb2NzfSkuYCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0SW5kZXhGaWxlKHByb3ZpZGVyOiBQcm92aWRlck5hbWUsIGZpbGVzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGNvbnN0IGZvbGRlciA9IGBwcm92aWRlcnMvJHtwcm92aWRlcn1gO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gYCR7Zm9sZGVyfS9pbmRleC50c2A7XG4gICAgdGhpcy5jb2RlLm9wZW5GaWxlKGZpbGVQYXRoKTtcbiAgICB0aGlzLmNvZGUubGluZShcIi8vIGdlbmVyYXRlZCBieSBjZGt0biBnZXRcIik7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICBjb25zdCBkaXJOYW1lID0gdGhpcy5yZXNvdXJjZUZvbGRlck5hbWUocHJvdmlkZXIsIGZpbGUpO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAgIGBleHBvcnQgKiBhcyAke3RvQ2FtZWxDYXNlKGRpck5hbWUpfSBmcm9tICcuLyR7ZGlyTmFtZX0vaW5kZXgke3RoaXMuaW1wb3J0RXh0ZW5zaW9ufSc7YCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuY29kZS5saW5lKCk7XG4gICAgdGhpcy5jb2RlLmNsb3NlRmlsZShmaWxlUGF0aCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRMYXp5SW5kZXhGaWxlKHByb3ZpZGVyOiBQcm92aWRlck5hbWUsIGZpbGVzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGNvbnN0IGZvbGRlciA9IGBwcm92aWRlcnMvJHtwcm92aWRlcn1gO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gYCR7Zm9sZGVyfS9sYXp5LWluZGV4LnRzYDtcbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoZmlsZVBhdGgpO1xuICAgIHRoaXMuY29kZS5saW5lKFwiLy8gZ2VuZXJhdGVkIGJ5IGNka3RuIGdldFwiKTtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIGNvbnN0IGRpck5hbWUgPSB0aGlzLnJlc291cmNlRm9sZGVyTmFtZShwcm92aWRlciwgZmlsZSk7XG4gICAgICB0aGlzLmNvZGUubGluZShcbiAgICAgICAgYE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnJHt0b0NhbWVsQ2FzZShcbiAgICAgICAgICBkaXJOYW1lLFxuICAgICAgICApfScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiByZXF1aXJlKCcuLyR7ZGlyTmFtZX0nKTsgfSB9KTtgLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VGaWxlKGZpbGVQYXRoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFJlc291cmNlKHJlc291cmNlOiBSZXNvdXJjZU1vZGVsKTogc3RyaW5nIHtcbiAgICB0aGlzLmNvZGUub3BlbkZpbGUocmVzb3VyY2UuZmlsZVBhdGgpO1xuICAgIHRoaXMuZW1pdEZpbGVIZWFkZXIocmVzb3VyY2UpO1xuICAgIHRoaXMuc3RydWN0RW1pdHRlci5lbWl0KHJlc291cmNlKTtcbiAgICB0aGlzLnJlc291cmNlRW1pdHRlci5lbWl0KHJlc291cmNlKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VGaWxlKHJlc291cmNlLmZpbGVQYXRoKTtcblxuICAgIHJldHVybiByZXNvdXJjZS5maWxlUGF0aDtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFJlc291cmNlV2l0aENvbXBsZXhTdHJ1Y3QocmVzb3VyY2U6IFJlc291cmNlTW9kZWwpIHtcbiAgICBjb25zdCBnZW5lcmF0ZWRGaWxlcyA9IFtdO1xuXG4gICAgLy8gZHJvcCB0aGUgbGFzdCBzZWdtZW50IG9mIHRoZSBmaWxlcGF0aFxuICAgIGNvbnN0IGZpbGVQYXRoID0gcmVzb3VyY2UuZmlsZVBhdGg7XG4gICAgdGhpcy5jb2RlLm9wZW5GaWxlKGZpbGVQYXRoKTtcbiAgICB0aGlzLmNvZGUubGluZShgLy8gZ2VuZXJhdGVkIGZyb20gdGVycmFmb3JtIHJlc291cmNlIHNjaGVtYWApO1xuICAgIHRoaXMuY29kZS5saW5lKCk7XG5cbiAgICBpZiAocmVzb3VyY2Uuc3RydWN0c1JlcXVpcmVTaGFyZGluZykge1xuICAgICAgY29uc3Qgc3RydWN0c1NwZWNpZmllciA9IGAuLyR7cmVzb3VyY2Uuc3RydWN0c0ZvbGRlck5hbWV9L2luZGV4JHt0aGlzLmltcG9ydEV4dGVuc2lvbn1gO1xuICAgICAgaWYgKHJlc291cmNlLnJlZmVyZW5jZWRUeXBlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuY29kZS5saW5lKFxuICAgICAgICAgIGBpbXBvcnQgeyAke3Jlc291cmNlLnJlZmVyZW5jZWRUeXBlcy5qb2luKFxuICAgICAgICAgICAgXCIsIFxcblwiLFxuICAgICAgICAgICl9fSBmcm9tICcke3N0cnVjdHNTcGVjaWZpZXJ9JztgLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNvZGUubGluZShgZXhwb3J0ICogZnJvbSAnJHtzdHJ1Y3RzU3BlY2lmaWVyfSc7YCk7XG5cbiAgICAgIHJlc291cmNlLmltcG9ydFN0YXRlbWVudHMuZm9yRWFjaCgoc3RhdGVtZW50KSA9PlxuICAgICAgICB0aGlzLmNvZGUubGluZShzdGF0ZW1lbnQpLFxuICAgICAgKTtcblxuICAgICAgdGhpcy5zdHJ1Y3RFbWl0dGVyLmVtaXRJbnRlcmZhY2UocmVzb3VyY2UsIHJlc291cmNlLmNvbmZpZ1N0cnVjdCk7XG4gICAgICB0aGlzLnJlc291cmNlRW1pdHRlci5lbWl0KHJlc291cmNlKTtcblxuICAgICAgdGhpcy5jb2RlLmNsb3NlRmlsZShmaWxlUGF0aCk7XG5cbiAgICAgIHRoaXMuc3RydWN0RW1pdHRlci5lbWl0KHJlc291cmNlKTtcbiAgICAgIGdlbmVyYXRlZEZpbGVzLnB1c2gocmVzb3VyY2UuZmlsZU5hbWUpO1xuICAgICAgZ2VuZXJhdGVkRmlsZXMucHVzaChyZXNvdXJjZS5zdHJ1Y3RzRm9sZGVyTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc291cmNlLmltcG9ydFN0YXRlbWVudHMuZm9yRWFjaCgoc3RhdGVtZW50KSA9PlxuICAgICAgICB0aGlzLmNvZGUubGluZShzdGF0ZW1lbnQpLFxuICAgICAgKTtcblxuICAgICAgdGhpcy5zdHJ1Y3RFbWl0dGVyLmVtaXQocmVzb3VyY2UpO1xuICAgICAgdGhpcy5yZXNvdXJjZUVtaXR0ZXIuZW1pdChyZXNvdXJjZSk7XG4gICAgICB0aGlzLmNvZGUuY2xvc2VGaWxlKGZpbGVQYXRoKTtcbiAgICAgIGdlbmVyYXRlZEZpbGVzLnB1c2gocmVzb3VyY2UuZmlsZU5hbWUpO1xuICAgIH1cblxuICAgIHJldHVybiBmaWxlUGF0aDtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdEZpbGVIZWFkZXIocmVzb3VyY2U6IFJlc291cmNlTW9kZWwpIHtcbiAgICB0aGlzLmNvZGUubGluZShgLy8gJHtyZXNvdXJjZS5saW5rVG9Eb2NzfWApO1xuICAgIHRoaXMuY29kZS5saW5lKGAvLyBnZW5lcmF0ZWQgZnJvbSB0ZXJyYWZvcm0gcmVzb3VyY2Ugc2NoZW1hYCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICByZXNvdXJjZS5pbXBvcnRTdGF0ZW1lbnRzLmZvckVhY2goKHN0YXRlbWVudCkgPT4gdGhpcy5jb2RlLmxpbmUoc3RhdGVtZW50KSk7XG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgICB0aGlzLmNvZGUubGluZShcIi8vIENvbmZpZ3VyYXRpb25cIik7XG4gICAgdGhpcy5jb2RlLmxpbmUoKTtcbiAgfVxufVxuIl19
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { ConstructsMakerTarget, Schema } from "@cdktn/commons";
|
|
1
|
+
import { ConstructsMakerTarget, Schema, TerraformTargetVersions } from "@cdktn/commons";
|
|
2
2
|
import { FQPN } from "@cdktn/provider-schema";
|
|
3
3
|
import { ResourceModel } from "./models";
|
|
4
4
|
export declare function sanitizeClassOrNamespaceName(baseName: string, isProvider?: boolean): string;
|
|
5
5
|
export declare class ResourceParser {
|
|
6
|
+
private readonly targetVersions?;
|
|
6
7
|
private uniqueClassnames;
|
|
7
8
|
private uniqueBaseNames;
|
|
8
9
|
private resources;
|
|
10
|
+
constructor(targetVersions?: TerraformTargetVersions | undefined);
|
|
9
11
|
parse(fqpn: FQPN, type: string, schema: Schema, terraformType: string, constraint?: ConstructsMakerTarget): ResourceModel;
|
|
10
12
|
getClassNameForResource(terraformType: string): string;
|
|
11
13
|
getNamespaceNameForResource(terraformType: string): string;
|
|
@@ -82,9 +82,10 @@ function deduplicateAttributesWithSameName(attributes) {
|
|
|
82
82
|
});
|
|
83
83
|
}
|
|
84
84
|
class Parser {
|
|
85
|
-
constructor(classNames, usedBaseNames) {
|
|
85
|
+
constructor(classNames, usedBaseNames, targetVersions) {
|
|
86
86
|
this.classNames = classNames;
|
|
87
87
|
this.usedBaseNames = usedBaseNames;
|
|
88
|
+
this.targetVersions = targetVersions;
|
|
88
89
|
this.structs = new Array();
|
|
89
90
|
}
|
|
90
91
|
uniqueClassName(className) {
|
|
@@ -210,6 +211,7 @@ class Parser {
|
|
|
210
211
|
terraformSchemaType,
|
|
211
212
|
structs: this.structs,
|
|
212
213
|
configStructName,
|
|
214
|
+
targetVersions: this.targetVersions,
|
|
213
215
|
});
|
|
214
216
|
return resourceModel;
|
|
215
217
|
}
|
|
@@ -494,7 +496,8 @@ class Parser {
|
|
|
494
496
|
}
|
|
495
497
|
}
|
|
496
498
|
class ResourceParser {
|
|
497
|
-
constructor() {
|
|
499
|
+
constructor(targetVersions) {
|
|
500
|
+
this.targetVersions = targetVersions;
|
|
498
501
|
this.uniqueClassnames = [];
|
|
499
502
|
this.uniqueBaseNames = new Map();
|
|
500
503
|
this.resources = {};
|
|
@@ -503,7 +506,7 @@ class ResourceParser {
|
|
|
503
506
|
if (this.resources[type]) {
|
|
504
507
|
return this.resources[type];
|
|
505
508
|
}
|
|
506
|
-
const parser = new Parser(this.uniqueClassnames, this.uniqueBaseNames);
|
|
509
|
+
const parser = new Parser(this.uniqueClassnames, this.uniqueBaseNames, this.targetVersions);
|
|
507
510
|
const resource = parser.resourceFrom(fqpn, type, schema, terraformType, constraint);
|
|
508
511
|
this.resources[type] = resource;
|
|
509
512
|
return resource;
|
|
@@ -528,4 +531,4 @@ class ResourceParser {
|
|
|
528
531
|
}
|
|
529
532
|
}
|
|
530
533
|
exports.ResourceParser = ResourceParser;
|
|
531
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtcGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2dldC9nZW5lcmF0b3IvcmVzb3VyY2UtcGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQStFQSxvRUFvQkM7QUFuR0QsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyx5Q0FBbUU7QUFDbkUsNENBVXdCO0FBQ3hCLDREQUF1RTtBQUN2RSxxQ0FZa0I7QUFDbEIscURBQXdEO0FBQ3hELDZEQUEyRDtBQUUzRCxzRUFBc0U7QUFDdEUseUpBQXlKO0FBQ3pKLE1BQU0sZ0NBQWdDLEdBQUc7SUFDdkMsWUFBWTtJQUNaLFdBQVc7SUFDWCxLQUFLO0lBQ0wsU0FBUztJQUNULFNBQVM7SUFDVCxXQUFXO0lBQ1gsUUFBUTtJQUNSLFFBQVE7SUFDUixPQUFPO0lBQ1AsT0FBTztDQUNSLENBQUM7QUFFRixNQUFNLHlCQUF5QixHQUFHO0lBQ2hDLG1IQUFtSDtJQUNuSCxTQUFTO0lBQ1QsMkJBQTJCO0lBQzNCLFNBQVM7Q0FDVixDQUFDO0FBRUYsTUFBTSw4QkFBOEIsR0FBRyxDQUFDLFNBQWlCLEVBQVcsRUFBRTtJQUNwRSxPQUFPO1FBQ0wsUUFBUTtRQUNSLFFBQVE7UUFDUixVQUFVO1FBQ1YsR0FBRyxnQ0FBZ0M7UUFDbkMsR0FBRyx5QkFBeUI7S0FDN0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDdEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLFNBQWlCLEVBQVcsRUFBRTtJQUMvRCxPQUFPLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxRQUFzQixFQUFFLFFBQWdCLEVBQVUsRUFBRTtJQUN2RSxJQUFJLFFBQVEsS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUN6QixP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QztJQUNsQixDQUFDO0lBRUQsMERBQTBEO0lBQ25ELHVCQUF1QixDQUFDLGFBQXFCO1FBQ2xELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0MsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRUQsOERBQThEO0lBQ3ZELDJCQUEyQixDQUFDLGFBQXFCO1FBQ3RELGtGQUFrRjtRQUNsRixJQUFJLGFBQWEsS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3ZDLGFBQWEsR0FBRyxlQUFlLENBQUM7UUFDbEMsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsYUFBYSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEQsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDOUUsQ0FBQztDQUNGO0FBaERELHdDQWdEQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyB0b0NhbWVsQ2FzZSwgdG9QYXNjYWxDYXNlLCB0b1NuYWtlQ2FzZSB9IGZyb20gXCJjb2RlbWFrZXJcIjtcbmltcG9ydCB7XG4gIEF0dHJpYnV0ZSxcbiAgQXR0cmlidXRlTmVzdGVkVHlwZSxcbiAgQXR0cmlidXRlVHlwZSxcbiAgQmxvY2ssXG4gIEJsb2NrVHlwZSxcbiAgQ29uc3RydWN0c01ha2VyVGFyZ2V0LFxuICBpc0F0dHJpYnV0ZU5lc3RlZFR5cGUsXG4gIGlzTmVzdGVkVHlwZUF0dHJpYnV0ZSxcbiAgU2NoZW1hLFxufSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IFByb3ZpZGVyTmFtZSwgRlFQTiwgcGFyc2VGUVBOIH0gZnJvbSBcIkBjZGt0bi9wcm92aWRlci1zY2hlbWFcIjtcbmltcG9ydCB7XG4gIFJlc291cmNlTW9kZWwsXG4gIEF0dHJpYnV0ZVR5cGVNb2RlbCxcbiAgU3RydWN0LFxuICBTY29wZSxcbiAgQXR0cmlidXRlTW9kZWwsXG4gIFNpbXBsZUF0dHJpYnV0ZVR5cGVNb2RlbCxcbiAgTGlzdEF0dHJpYnV0ZVR5cGVNb2RlbCxcbiAgU2V0QXR0cmlidXRlVHlwZU1vZGVsLFxuICBNYXBBdHRyaWJ1dGVUeXBlTW9kZWwsXG4gIFN0cnVjdEF0dHJpYnV0ZVR5cGVNb2RlbCxcbiAgU2tpcHBlZEF0dHJpYnV0ZVR5cGVNb2RlbCxcbn0gZnJvbSBcIi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBkZXRlY3RBdHRyaWJ1dGVMb29wcyB9IGZyb20gXCIuL2xvb3AtZGV0ZWN0aW9uXCI7XG5pbXBvcnQgeyBzaG91bGRTa2lwQXR0cmlidXRlIH0gZnJvbSBcIi4vc2tpcHBlZC1hdHRyaWJ1dGVzXCI7XG5cbi8vIENhbid0IGJlIHVzZWQgaW4gZXhwcmVzc2lvbnMgbGlrZSBcImV4cG9ydCAqIGFzIDxrZXl3b3JkPiBmcm9tIC4uLiBcIlxuLy8gZmlsdGVyZWQgZnJvbSBhbGwga2V5d29yZHMgZnJvbTogaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2Jsb2IvNTAzNjA0Yzg4NGJkMDU1N2M4NTFiMTFiNjk5ZWY5OGNkYjY1YjkzYi9zcmMvY29tcGlsZXIvdHlwZXMudHMjTDExNC1MMTk3XG5jb25zdCBSRVNFUlZFRF9LRVlXT1JEU19GT1JfTkFNRVNQQUNFUyA9IFtcbiAgXCJpbXBsZW1lbnRzXCIsXG4gIFwiaW50ZXJmYWNlXCIsXG4gIFwibGV0XCIsXG4gIFwicGFja2FnZVwiLFxuICBcInByaXZhdGVcIixcbiAgXCJwcm90ZWN0ZWRcIixcbiAgXCJwdWJsaWNcIixcbiAgXCJzdGF0aWNcIixcbiAgXCJ5aWVsZFwiLFxuICBcImF3YWl0XCIsXG5dO1xuXG5jb25zdCBDT0xMSURJTkdfTkFNRVNQQUNFX05BTUVTID0gW1xuICAvLyBlLmcuIGhhc2hpY29ycC9jb25zdWwg4oCTIGNvbGxpZGVzIHdpdGggdGhlIExJQ0VOU0UgZmlsZSBvbiBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW1zIGluIHRoZSBHbyBwYWNrYWdlICgjMjYyNylcbiAgXCJsaWNlbnNlXCIsXG4gIC8vIGNvbGxpZGVzIGZvciBHbyBwYWNrYWdlc1xuICBcInZlcnNpb25cIixcbl07XG5cbmNvbnN0IGlzUmVzZXJ2ZWRDbGFzc09yTmFtZXNwYWNlTmFtZSA9IChjbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gW1xuICAgIFwic3RyaW5nXCIsXG4gICAgXCJvYmplY3RcIixcbiAgICBcImZ1bmN0aW9uXCIsXG4gICAgLi4uUkVTRVJWRURfS0VZV09SRFNfRk9SX05BTUVTUEFDRVMsXG4gICAgLi4uQ09MTElESU5HX05BTUVTUEFDRV9OQU1FUyxcbiAgXS5pbmNsdWRlcyhjbGFzc05hbWUudG9Mb3dlckNhc2UoKSk7XG59O1xuXG5jb25zdCBpc1Jlc2VydmVkU3RydWN0Q2xhc3NOYW1lID0gKGNsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBjbGFzc05hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChcImxpc3RcIik7XG59O1xuXG5jb25zdCBnZXRGaWxlTmFtZSA9IChwcm92aWRlcjogUHJvdmlkZXJOYW1lLCBiYXNlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgaWYgKGJhc2VOYW1lID09PSBcImluZGV4XCIpIHtcbiAgICByZXR1cm4gXCJpbmRleC1yZXNvdXJjZS9pbmRleC50c1wiO1xuICB9XG5cbiAgaWYgKGJhc2VOYW1lID09PSBgJHtwcm92aWRlcn1fcHJvdmlkZXJgKSB7XG4gICAgcmV0dXJuIFwicHJvdmlkZXIvaW5kZXgudHNcIjtcbiAgfVxuXG4gIHJldHVybiBgJHt0b1NuYWtlQ2FzZShiYXNlTmFtZSkucmVwbGFjZSgvXy9nLCBcIi1cIil9L2luZGV4LnRzYDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZUNsYXNzT3JOYW1lc3BhY2VOYW1lKFxuICBiYXNlTmFtZTogc3RyaW5nLFxuICBpc1Byb3ZpZGVyID0gZmFsc2UsXG4pIHtcbiAgY29uc3QgcmVzb3VyY2VJc05hbWVkUHJvdmlkZXIgPSAhaXNQcm92aWRlciAmJiBiYXNlTmFtZSA9PT0gXCJwcm92aWRlclwiO1xuICAvLyBBIHJlc291cmNlIG5hbWVkIGA8cHJvdmlkZXI+X3Byb3ZpZGVyX2Z1bmN0aW9uc2AgbWFwcyB0byB0aGUgc2FtZVxuICAvLyBwcm92aWRlcnMvPHByb3ZpZGVyPi9wcm92aWRlci1mdW5jdGlvbnMvIGRpcmVjdG9yeSB0aGF0IHRoZSBwcm92aWRlcidzXG4gIC8vIGZ1bmN0aW9ucyBzdWJtb2R1bGUgaXMgZW1pdHRlZCB0bywgYW5kIHdvdWxkIHNpbGVudGx5IG92ZXJ3cml0ZSBpdC5cbiAgY29uc3QgcmVzb3VyY2VJc05hbWVkUHJvdmlkZXJGdW5jdGlvbnMgPVxuICAgICFpc1Byb3ZpZGVyICYmIGJhc2VOYW1lID09PSBcInByb3ZpZGVyX2Z1bmN0aW9uc1wiO1xuXG4gIGlmIChcbiAgICBpc1Jlc2VydmVkQ2xhc3NPck5hbWVzcGFjZU5hbWUoYmFzZU5hbWUpIHx8XG4gICAgcmVzb3VyY2VJc05hbWVkUHJvdmlkZXIgfHxcbiAgICByZXNvdXJjZUlzTmFtZWRQcm92aWRlckZ1bmN0aW9uc1xuICApIHtcbiAgICByZXR1cm4gYCR7YmFzZU5hbWV9X3Jlc291cmNlYDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZU5hbWU7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmUgYXR0cmlidXRlcyB0aGF0IG1heSBjb25mbGljdCBhZnRlciBiZWluZyBzbmFrZSBjYXNlZFxuICogRXhhbXBsZTogb2NpX2NvcmVfaXBzZWNfY29ubmVjdGlvbl90dW5uZWxfbWFuYWdlbWVudCAoaGFzaGljb3JwL29jaUA9NS4yMS4wKSBoYXMgYmdwX2lwdjZfc3RhdGUgYW5kIGJncF9pcHY2c3RhdGVcbiAqICh3aGljaCBib3RoIHJlc3VsdCBpbiBcImJncElwdjZTdGF0ZVwiIHdoZW4gY2FtZWwtY2FzZWQsIHdpdGggdGhlIHNlY29uZCBvbmUgYmVpbmcgZGVwcmVjYXRlZDogdHJ1ZSlcbiAqIEFzIHdlIGN1cnJlbnRseSBkb24ndCBoYW5kbGUgYW55IGRlcHJlY2F0ZWQgb25lcyBhdCBhbGwsIHdlJ2xsIGp1c3QgZGVsZXRlIG9uZSBvZiB0aGUgdHdvIGF0dHJpYnV0ZXMgZm9yIG5vd1xuICogQHBhcmFtIGF0dHJpYnV0ZXNcbiAqL1xuZnVuY3Rpb24gZGVkdXBsaWNhdGVBdHRyaWJ1dGVzV2l0aFNhbWVOYW1lKFxuICBhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVNb2RlbFtdLFxuKTogQXR0cmlidXRlTW9kZWxbXSB7XG4gIHJldHVybiBhdHRyaWJ1dGVzLmZpbHRlcigoYXR0ciwgaWR4KSA9PiB7XG4gICAgY29uc3QgaGFzT3RoZXJXaXRoU2FtZU5hbWUgPSBhdHRyaWJ1dGVzXG4gICAgICAuc2xpY2UoaWR4ICsgMSkgLy8gb25seSBzZWFyY2ggYWZ0ZXIgdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGF0dHJpYnV0ZSB0byBhdm9pZCBkZWxldGluZyBib3RoXG4gICAgICAuc29tZSgob3RoZXIpID0+IG90aGVyLm5hbWUgPT09IGF0dHIubmFtZSAmJiBvdGhlciAhPT0gYXR0cik7XG4gICAgcmV0dXJuICFoYXNPdGhlcldpdGhTYW1lTmFtZTtcbiAgfSk7XG59XG5cbmNsYXNzIFBhcnNlciB7XG4gIHByaXZhdGUgc3RydWN0cyA9IG5ldyBBcnJheTxTdHJ1Y3Q+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjbGFzc05hbWVzOiBzdHJpbmdbXSxcbiAgICBwcml2YXRlIHVzZWRCYXNlTmFtZXM6IE1hcDxzdHJpbmcsIHN0cmluZz4sXG4gICkge31cblxuICBwcml2YXRlIHVuaXF1ZUNsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuY2xhc3NOYW1lcy5pbmNsdWRlcyhjbGFzc05hbWUpKSB7XG4gICAgICBjbGFzc05hbWUgPSBgJHtjbGFzc05hbWV9QWA7XG4gICAgfVxuICAgIHRoaXMuY2xhc3NOYW1lcy5wdXNoKGNsYXNzTmFtZSk7XG4gICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmUgYmFzZSBuYW1lcyBhcmUgdW5pcXVlIGNhc2UtaW5zZW5zaXRpdmVseS5cbiAgICpcbiAgICogQWZmZWN0ZWQgbGFuZ3VhZ2VzOlxuICAgKiAtIEdvOiBKU0lJLWdlbmVyYXRlZCBHbyBwYWNrYWdlIG5hbWVzIGFyZSBmdWxseSBsb3dlcmNhc2VkLCBzb1xuICAgKiAgIGBsb2FkLWJhbGFuY2VyLWJhY2tlbmRzZXRgIGFuZCBgbG9hZC1iYWxhbmNlci1iYWNrZW5kLXNldGAgYm90aFxuICAgKiAgIGJlY29tZSBwYWNrYWdlIGBsb2FkYmFsYW5jZXJiYWNrZW5kc2V0YCwgY2F1c2luZyBhIGhhcmQgYnVpbGQgZmFpbHVyZTpcbiAgICogICBcImNhc2UtaW5zZW5zaXRpdmUgZmlsZSBuYW1lIGNvbGxpc2lvblwiLlxuICAgKiAtIEMjOiBKU0lJIGdlbmVyYXRlcyBQYXNjYWxDYXNlIGRpcmVjdG9yaWVzIGxpa2VcbiAgICogICBgTG9hZEJhbGFuY2VyQmFja2VuZHNldC9gIGFuZCBgTG9hZEJhbGFuY2VyQmFja2VuZFNldC9gIHdoaWNoIHRoZSBDI1xuICAgKiAgIGNvbXBpbGVyIHRyZWF0cyBjYXNlLWluc2Vuc2l0aXZlbHksIGNhdXNpbmcgQ1MyMDAyIGFuZCBDUzAyMzQgZXJyb3JzLlxuICAgKi9cbiAgcHJpdmF0ZSB1bmlxdWVCYXNlTmFtZShiYXNlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXNjYWxOYW1lID0gdG9QYXNjYWxDYXNlKGJhc2VOYW1lKTtcbiAgICBjb25zdCBrZXkgPSBwYXNjYWxOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLnVzZWRCYXNlTmFtZXMuZ2V0KGtleSk7XG5cbiAgICBpZiAoZXhpc3RpbmcgIT09IHVuZGVmaW5lZCAmJiBleGlzdGluZyAhPT0gcGFzY2FsTmFtZSkge1xuICAgICAgYmFzZU5hbWUgPSBgJHtiYXNlTmFtZX1BYDtcbiAgICAgIHJldHVybiB0aGlzLnVuaXF1ZUJhc2VOYW1lKGJhc2VOYW1lKTtcbiAgICB9XG5cbiAgICB0aGlzLnVzZWRCYXNlTmFtZXMuc2V0KGtleSwgcGFzY2FsTmFtZSk7XG4gICAgcmV0dXJuIGJhc2VOYW1lO1xuICB9XG5cbiAgcHVibGljIHJlc291cmNlRnJvbShcbiAgICBmcXBuOiBGUVBOLFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBzY2hlbWE6IFNjaGVtYSxcbiAgICB0ZXJyYWZvcm1TY2hlbWFUeXBlOiBzdHJpbmcsXG4gICAgY29uc3RyYWludD86IENvbnN0cnVjdHNNYWtlclRhcmdldCxcbiAgKTogUmVzb3VyY2VNb2RlbCB7XG4gICAgbGV0IGJhc2VOYW1lID0gdHlwZTtcblxuICAgIGNvbnN0IHByb3ZpZGVyTmFtZUZyb21Db25zdHJhaW50ID0gY29uc3RyYWludFxuICAgICAgPyAoY29uc3RyYWludC5uYW1lIGFzIFByb3ZpZGVyTmFtZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByb3ZpZGVyTmFtZUZyb21GUVBOID0gcGFyc2VGUVBOKGZxcG4pLm5hbWU7XG5cbiAgICBpZiAoYmFzZU5hbWUuc3RhcnRzV2l0aChgJHtwcm92aWRlck5hbWVGcm9tRlFQTn1fYCkpIHtcbiAgICAgIGJhc2VOYW1lID0gYmFzZU5hbWUuc3Vic3RyKHByb3ZpZGVyTmFtZUZyb21GUVBOLmxlbmd0aCArIDEpO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3ZpZGVyTmFtZSA9IHByb3ZpZGVyTmFtZUZyb21Db25zdHJhaW50XG4gICAgICA/IHByb3ZpZGVyTmFtZUZyb21Db25zdHJhaW50XG4gICAgICA6IHByb3ZpZGVyTmFtZUZyb21GUVBOO1xuXG4gICAgY29uc3QgaXNQcm92aWRlciA9IHRlcnJhZm9ybVNjaGVtYVR5cGUgPT09IFwicHJvdmlkZXJcIjtcbiAgICBpZiAoaXNQcm92aWRlcikge1xuICAgICAgYmFzZU5hbWUgPSBgJHtwcm92aWRlck5hbWV9XyR7YmFzZU5hbWV9YDtcbiAgICAgIGlmICghKFwiYXR0cmlidXRlc1wiIGluIHNjaGVtYS5ibG9jaykpIHtcbiAgICAgICAgc2NoZW1hLmJsb2NrID0ge1xuICAgICAgICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgICAgICAgIGJsb2NrX3R5cGVzOiAoc2NoZW1hLmJsb2NrIGFzIEJsb2NrKS5ibG9ja190eXBlcyB8fCB7fSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIC8vIHNvbWVob3cgbWlzc2luZyBmcm9tIHByb3ZpZGVyIHNjaGVtYVxuICAgICAgc2NoZW1hLmJsb2NrLmF0dHJpYnV0ZXNbXCJhbGlhc1wiXSA9IHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiQWxpYXMgbmFtZVwiLFxuICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBiYXNlTmFtZSA9IHNhbml0aXplQ2xhc3NPck5hbWVzcGFjZU5hbWUoYmFzZU5hbWUsIGlzUHJvdmlkZXIpO1xuICAgIGJhc2VOYW1lID0gdGhpcy51bmlxdWVCYXNlTmFtZShiYXNlTmFtZSk7XG5cbiAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLnVuaXF1ZUNsYXNzTmFtZSh0b1Bhc2NhbENhc2UoYmFzZU5hbWUpKTtcbiAgICAvLyBhdm9pZCBuYW1pbmcgY29sbGlzaW9uIC0gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9oYXNoaWNvcnAvdGVycmFmb3JtLWNkay9pc3N1ZXMvMjk5XG4gICAgY29uc3QgY29uZmlnU3RydWN0TmFtZSA9IHRoaXMudW5pcXVlQ2xhc3NOYW1lKGAke2NsYXNzTmFtZX1Db25maWdgKTtcbiAgICBjb25zdCBmaWxlTmFtZSA9IGdldEZpbGVOYW1lKHByb3ZpZGVyTmFtZSwgYmFzZU5hbWUpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSBgcHJvdmlkZXJzLyR7dG9TbmFrZUNhc2UocHJvdmlkZXJOYW1lKX0vJHtmaWxlTmFtZX1gO1xuICAgIGxldCBhdHRyaWJ1dGVzID0gdGhpcy5yZW5kZXJBdHRyaWJ1dGVzRm9yQmxvY2soXG4gICAgICBuZXcgU2NvcGUoe1xuICAgICAgICBuYW1lOiBiYXNlTmFtZSxcbiAgICAgICAgaXNQcm92aWRlcixcbiAgICAgICAgcGFyZW50OiBpc1Byb3ZpZGVyXG4gICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICA6IG5ldyBTY29wZSh7IG5hbWU6IHByb3ZpZGVyTmFtZSwgaXNQcm92aWRlcjogdHJ1ZSB9KSxcbiAgICAgIH0pLFxuICAgICAgc2NoZW1hLmJsb2NrLFxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBnZXRTdHJ1Y3RBdHRyaWJ1dGUoXG4gICAgICBhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVNb2RlbFtdLFxuICAgICAgcGF0aDogc3RyaW5nLFxuICAgICk6IEF0dHJpYnV0ZU1vZGVsIHtcbiAgICAgIGNvbnN0IFtmaXJzdCwgLi4ucmVzdF0gPSBwYXRoLnNwbGl0KFwiLlwiKTtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXMuZmluZCgoYXR0KSA9PiB7XG4gICAgICAgIHJldHVybiBhdHQudGVycmFmb3JtTmFtZSA9PT0gZmlyc3Q7XG4gICAgICB9KTtcbiAgICAgIGlmICghYXR0cmlidXRlKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEV4cGVjdGVkIHRvIGZpbmQgcmVjdXJzaXZlIGF0dHJpYnV0ZSBhdCBwYXRoOiAke3BhdGh9YCxcbiAgICAgICAgKTtcbiAgICAgIGlmICghYXR0cmlidXRlLnR5cGUuc3RydWN0KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEV4cGVjdGVkIHRvIGZpbmQgc3RydWN0IHR5cGUgYXR0cmlidXRlIGF0IHBhdGg6ICR7cGF0aH0gYnV0IGdvdCAke2F0dHJpYnV0ZS50eXBlLnN0b3JlZENsYXNzVHlwZX1gLFxuICAgICAgICApO1xuICAgICAgaWYgKHJlc3QubGVuZ3RoID09PSAwKSByZXR1cm4gYXR0cmlidXRlO1xuICAgICAgcmV0dXJuIGdldFN0cnVjdEF0dHJpYnV0ZShcbiAgICAgICAgYXR0cmlidXRlLnR5cGUuc3RydWN0LmF0dHJpYnV0ZXMsXG4gICAgICAgIHJlc3Quam9pbihcIi5cIiksXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEludHJvZHVjZSByZWN1cnNpb24gZm9yIHNvbWUgYXR0cmlidXRlc1xuICAgIGNvbnN0IHJlY3Vyc2l2ZUF0dHJpYnV0ZVBhdGhzID0gZGV0ZWN0QXR0cmlidXRlTG9vcHMoYXR0cmlidXRlcyk7XG5cbiAgICBPYmplY3QuZW50cmllcyhyZWN1cnNpdmVBdHRyaWJ1dGVQYXRocykuZm9yRWFjaChcbiAgICAgIChbYXR0cmlidXRlUGF0aCwgc3RydWN0UGF0aF0pID0+IHtcbiAgICAgICAgLy8gVE9ETzogYnVpbGQgdGhpcyB0byBiZSBhIGJpdCBtb3JlIGRlZmVuc2l2ZSAoZS5nLiByZW1vdmUgISBvcGVyYXRvcilcbiAgICAgICAgY29uc3QgcmVjdXJzaW9uVGFyZ2V0U3RydWN0QXR0cmlidXRlID0gZ2V0U3RydWN0QXR0cmlidXRlKFxuICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgc3RydWN0UGF0aCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcGFydHMgPSBhdHRyaWJ1dGVQYXRoLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlTmFtZSA9IHBhcnRzLnBvcCgpO1xuICAgICAgICBjb25zdCBwYXJlbnRBdHRyaWJ1dGUgPSBnZXRTdHJ1Y3RBdHRyaWJ1dGUoYXR0cmlidXRlcywgcGFydHMuam9pbihcIi5cIikpO1xuICAgICAgICBjb25zdCBpbmRleFRvUmVwbGFjZSA9XG4gICAgICAgICAgcGFyZW50QXR0cmlidXRlLnR5cGUuc3RydWN0IS5hdHRyaWJ1dGVzLmZpbmRJbmRleChcbiAgICAgICAgICAgIChhdHQpID0+IGF0dC50ZXJyYWZvcm1OYW1lID09PSBhdHRyaWJ1dGVOYW1lLFxuICAgICAgICAgICk7XG4gICAgICAgIGlmIChpbmRleFRvUmVwbGFjZSA9PT0gLTEpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgZmluZCBhdHRyaWJ1dGUgYXQgcGF0aCBcIiArIGF0dHJpYnV0ZVBhdGgpO1xuICAgICAgICBjb25zdCBwcmV2aW91c0F0dHJpYnV0ZSA9XG4gICAgICAgICAgcGFyZW50QXR0cmlidXRlLnR5cGUuc3RydWN0IS5hdHRyaWJ1dGVzW2luZGV4VG9SZXBsYWNlXTtcblxuICAgICAgICBwYXJlbnRBdHRyaWJ1dGUudHlwZS5zdHJ1Y3QhLmF0dHJpYnV0ZXNbaW5kZXhUb1JlcGxhY2VdID1cbiAgICAgICAgICByZWN1cnNpb25UYXJnZXRTdHJ1Y3RBdHRyaWJ1dGU7IC8vIGludHJvZHVjZSByZWN1cnNpb25cblxuICAgICAgICAvLyB1Z2x5LCBwbHMgY8y2Ycy2bMy2bMy2IHJlZmFjdG9yIG1lIG1heWJlXG4gICAgICAgIC8vIHdlIHN0b3JlIGFsbCBzdHJ1Y3RzIGluIHRoaXMuc3RydWN0cyDigJMgbm93IHdlIG5lZWQgdG8gZGlzcG9zZSBhbGwgc3RydWN0cyB0aGF0IGFyZSBwYXJ0IG9mIHByZXZpb3VzQXR0cmlidXRlXG4gICAgICAgIGNvbnN0IGRpc3Bvc2VTdHJ1Y3RzID0gKGF0dHI6IEF0dHJpYnV0ZU1vZGVsKSA9PiB7XG4gICAgICAgICAgaWYgKGF0dHIudHlwZS5zdHJ1Y3QpIHtcbiAgICAgICAgICAgIGF0dHIudHlwZS5zdHJ1Y3QuYXR0cmlidXRlcy5mb3JFYWNoKGRpc3Bvc2VTdHJ1Y3RzKTtcbiAgICAgICAgICAgIHRoaXMuc3RydWN0cyA9IHRoaXMuc3RydWN0cy5maWx0ZXIoKHMpID0+IHMgIT09IGF0dHIudHlwZS5zdHJ1Y3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBkaXNwb3NlU3RydWN0cyhwcmV2aW91c0F0dHJpYnV0ZSk7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICBhdHRyaWJ1dGVzID0gZGVkdXBsaWNhdGVBdHRyaWJ1dGVzV2l0aFNhbWVOYW1lKGF0dHJpYnV0ZXMpO1xuXG4gICAgY29uc3QgcmVzb3VyY2VNb2RlbCA9IG5ldyBSZXNvdXJjZU1vZGVsKHtcbiAgICAgIHRlcnJhZm9ybVR5cGU6IHR5cGUsXG4gICAgICBiYXNlTmFtZSxcbiAgICAgIGZpbGVOYW1lLFxuICAgICAgZmlsZVBhdGgsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBzY2hlbWEsXG4gICAgICBmcXBuLFxuICAgICAgYXR0cmlidXRlcyxcbiAgICAgIHRlcnJhZm9ybVNjaGVtYVR5cGUsXG4gICAgICBzdHJ1Y3RzOiB0aGlzLnN0cnVjdHMsXG4gICAgICBjb25maWdTdHJ1Y3ROYW1lLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc291cmNlTW9kZWw7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckF0dHJpYnV0ZVR5cGUoXG4gICAgc2NvcGU6IFNjb3BlW10sXG4gICAgYXR0cmlidXRlVHlwZTogQXR0cmlidXRlVHlwZSB8IEF0dHJpYnV0ZU5lc3RlZFR5cGUsXG4gICAgcGFyZW50S2luZD86IHN0cmluZyxcbiAgKTogQXR0cmlidXRlVHlwZU1vZGVsIHtcbiAgICBjb25zdCBwYXJlbnQgPSBzY29wZVtzY29wZS5sZW5ndGggLSAxXTtcbiAgICBpZiAoc2hvdWxkU2tpcEF0dHJpYnV0ZShwYXJlbnQuYmFzZU5hbWUpKSB7XG4gICAgICByZXR1cm4gbmV3IE1hcEF0dHJpYnV0ZVR5cGVNb2RlbChuZXcgU2ltcGxlQXR0cmlidXRlVHlwZU1vZGVsKFwiYW55XCIpKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGF0dHJpYnV0ZVR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHN3aXRjaCAoYXR0cmlidXRlVHlwZSkge1xuICAgICAgICBjYXNlIFwiYm9vbFwiOlxuICAgICAgICAgIHJldHVybiBuZXcgU2ltcGxlQXR0cmlidXRlVHlwZU1vZGVsKFwiYm9vbGVhblwiKTtcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgIHJldHVybiBuZXcgU2ltcGxlQXR0cmlidXRlVHlwZU1vZGVsKFwic3RyaW5nXCIpO1xuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgcmV0dXJuIG5ldyBTaW1wbGVBdHRyaWJ1dGVUeXBlTW9kZWwoXCJudW1iZXJcIik7XG4gICAgICAgIGNhc2UgXCJkeW5hbWljXCI6XG4gICAgICAgICAgcmV0dXJuIG5ldyBNYXBBdHRyaWJ1dGVUeXBlTW9kZWwobmV3IFNpbXBsZUF0dHJpYnV0ZVR5cGVNb2RlbChcImFueVwiKSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHByaW1pdGl2ZSB0eXBlICR7YXR0cmlidXRlVHlwZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShhdHRyaWJ1dGVUeXBlKSkge1xuICAgICAgaWYgKGF0dHJpYnV0ZVR5cGUubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCBhcnJheWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBba2luZCwgdHlwZV0gPSBhdHRyaWJ1dGVUeXBlO1xuXG4gICAgICBpZiAoa2luZCA9PT0gXCJzZXRcIiB8fCBraW5kID09PSBcImxpc3RcIikge1xuICAgICAgICBjb25zdCBlbGVtZW50VHlwZSA9IHRoaXMucmVuZGVyQXR0cmlidXRlVHlwZShcbiAgICAgICAgICBzY29wZSxcbiAgICAgICAgICB0eXBlIGFzIEF0dHJpYnV0ZVR5cGUsXG4gICAgICAgICAgW2tpbmQsIHBhcmVudEtpbmRdLmpvaW4oXCJcIiksXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBraW5kID09PSBcImxpc3RcIlxuICAgICAgICAgID8gbmV3IExpc3RBdHRyaWJ1dGVUeXBlTW9kZWwoZWxlbWVudFR5cGUsIGZhbHNlLCBmYWxzZSlcbiAgICAgICAgICA6IG5ldyBTZXRBdHRyaWJ1dGVUeXBlTW9kZWwoZWxlbWVudFR5cGUsIGZhbHNlLCBmYWxzZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChraW5kID09PSBcIm1hcFwiKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMucmVuZGVyQXR0cmlidXRlVHlwZShcbiAgICAgICAgICBzY29wZSxcbiAgICAgICAgICB0eXBlIGFzIEF0dHJpYnV0ZVR5cGUsXG4gICAgICAgICAgW2tpbmQsIHBhcmVudEtpbmRdLmpvaW4oXCJcIiksXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBuZXcgTWFwQXR0cmlidXRlVHlwZU1vZGVsKHZhbHVlVHlwZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChraW5kID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGNvbnN0IG9iakF0dHJpYnV0ZXMgPSB0eXBlIGFzIHsgW25hbWU6IHN0cmluZ106IEF0dHJpYnV0ZVR5cGUgfTtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlczogeyBbbmFtZTogc3RyaW5nXTogQXR0cmlidXRlIH0gPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqQXR0cmlidXRlcykpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzW25hbWVdID0geyB0eXBlIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RydWN0ID0gdGhpcy5hZGRBbm9ueW1vdXNTdHJ1Y3QoXG4gICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICBwYXJlbnRLaW5kID8/IGtpbmQsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBuZXcgU3RydWN0QXR0cmlidXRlVHlwZU1vZGVsKHN0cnVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzQXR0cmlidXRlTmVzdGVkVHlwZShhdHRyaWJ1dGVUeXBlKSkge1xuICAgICAgbGV0IHN0cnVjdCA9IHVuZGVmaW5lZDtcbiAgICAgIGxldCB0eXBlTW9kZWwgPSB1bmRlZmluZWQ7XG4gICAgICBzd2l0Y2ggKGF0dHJpYnV0ZVR5cGUubmVzdGluZ19tb2RlKSB7XG4gICAgICAgIGNhc2UgXCJsaXN0XCI6XG4gICAgICAgICAgc3RydWN0ID0gdGhpcy5hZGRBbm9ueW1vdXNTdHJ1Y3QoXG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZVR5cGUuYXR0cmlidXRlcyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZVR5cGUubmVzdGluZ19tb2RlLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdHlwZU1vZGVsID0gbmV3IExpc3RBdHRyaWJ1dGVUeXBlTW9kZWwoXG4gICAgICAgICAgICBuZXcgU3RydWN0QXR0cmlidXRlVHlwZU1vZGVsKHN0cnVjdCksXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJzZXRcIjpcbiAgICAgICAgICBzdHJ1Y3QgPSB0aGlzLmFkZEFub255bW91c1N0cnVjdChcbiAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgICAgYXR0cmlidXRlVHlwZS5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgYXR0cmlidXRlVHlwZS5uZXN0aW5nX21vZGUsXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0eXBlTW9kZWwgPSBuZXcgU2V0QXR0cmlidXRlVHlwZU1vZGVsKFxuICAgICAgICAgICAgbmV3IFN0cnVjdEF0dHJpYnV0ZVR5cGVNb2RlbChzdHJ1Y3QpLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibWFwXCI6XG4gICAgICAgICAgc3RydWN0ID0gdGhpcy5hZGRBbm9ueW1vdXNTdHJ1Y3QoXG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZVR5cGUuYXR0cmlidXRlcyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZVR5cGUubmVzdGluZ19tb2RlLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdHlwZU1vZGVsID0gbmV3IE1hcEF0dHJpYnV0ZVR5cGVNb2RlbChcbiAgICAgICAgICAgIG5ldyBTdHJ1Y3RBdHRyaWJ1dGVUeXBlTW9kZWwoc3RydWN0KSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwic2luZ2xlXCI6XG4gICAgICAgICAgc3RydWN0ID0gdGhpcy5hZGRBbm9ueW1vdXNTdHJ1Y3QoXG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZVR5cGUuYXR0cmlidXRlcyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZVR5cGUubmVzdGluZ19tb2RlLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdHlwZU1vZGVsID0gbmV3IFN0cnVjdEF0dHJpYnV0ZVR5cGVNb2RlbChzdHJ1Y3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYG5lc3RlZF90eXBlIHdpdGggbmVzdGluZ19tb2RlIFwiJHtcbiAgICAgICAgICAgICAgYXR0cmlidXRlVHlwZS5uZXN0aW5nX21vZGVcbiAgICAgICAgICAgIH1cIiBub3Qgc3VwcG9ydGVkIChhdHRyaWJ1dGUgc2NvcGU6ICR7c2NvcGVcbiAgICAgICAgICAgICAgLm1hcCgocykgPT4gcy5mdWxsTmFtZSlcbiAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHR5cGVNb2RlbDtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gdHlwZSAke0pTT04uc3RyaW5naWZ5KGF0dHJpYnV0ZVR5cGUpfWApO1xuICB9XG5cbiAgcHVibGljIHJlbmRlckF0dHJpYnV0ZXNGb3JCbG9jayhwYXJlbnRUeXBlOiBTY29wZSwgYmxvY2s6IEJsb2NrKSB7XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IG5ldyBBcnJheTxBdHRyaWJ1dGVNb2RlbD4oKTtcblxuICAgIGZvciAoY29uc3QgW3RlcnJhZm9ybUF0dHJpYnV0ZU5hbWUsIGF0dF0gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICBibG9jay5hdHRyaWJ1dGVzIHx8IHt9LFxuICAgICkpIHtcbiAgICAgIGxldCB0eXBlOiBBdHRyaWJ1dGVUeXBlTW9kZWw7XG4gICAgICBsZXQgZm9yY2VQbGFpbkdldHRlclR5cGUgPSBmYWxzZTtcbiAgICAgIGlmIChzaG91bGRTa2lwQXR0cmlidXRlKHBhcmVudFR5cGUuZnVsbE5hbWUodGVycmFmb3JtQXR0cmlidXRlTmFtZSkpKSB7XG4gICAgICAgIHR5cGUgPSBuZXcgU2tpcHBlZEF0dHJpYnV0ZVR5cGVNb2RlbCgpO1xuICAgICAgICBmb3JjZVBsYWluR2V0dGVyVHlwZSA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0eXBlID0gdGhpcy5yZW5kZXJBdHRyaWJ1dGVUeXBlKFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIHBhcmVudFR5cGUsXG4gICAgICAgICAgICBuZXcgU2NvcGUoe1xuICAgICAgICAgICAgICBuYW1lOiB0ZXJyYWZvcm1BdHRyaWJ1dGVOYW1lLFxuICAgICAgICAgICAgICBwYXJlbnQ6IHBhcmVudFR5cGUsXG4gICAgICAgICAgICAgIGlzUHJvdmlkZXI6IHBhcmVudFR5cGUuaXNQcm92aWRlcixcbiAgICAgICAgICAgICAgaXNDb21wdXRlZDogISFhdHQuY29tcHV0ZWQsXG4gICAgICAgICAgICAgIGlzT3B0aW9uYWw6ICEhYXR0Lm9wdGlvbmFsLFxuICAgICAgICAgICAgICBpc1JlcXVpcmVkOiAhIWF0dC5yZXF1aXJlZCxcbiAgICAgICAgICAgICAgaXNOZXN0ZWRUeXBlOiBpc05lc3RlZFR5cGVBdHRyaWJ1dGUoYXR0KSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgYXR0LnR5cGUgfHwgYXR0Lm5lc3RlZF90eXBlLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuYW1lID0gdG9DYW1lbENhc2UodGVycmFmb3JtQXR0cmlidXRlTmFtZSk7XG5cbiAgICAgIGF0dHJpYnV0ZXMucHVzaChcbiAgICAgICAgbmV3IEF0dHJpYnV0ZU1vZGVsKHtcbiAgICAgICAgICB0ZXJyYWZvcm1GdWxsTmFtZTogcGFyZW50VHlwZS5mdWxsTmFtZSh0ZXJyYWZvcm1BdHRyaWJ1dGVOYW1lKSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogYXR0LmRlc2NyaXB0aW9uLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgc3RvcmFnZU5hbWU6IGBfJHtuYW1lfWAsXG4gICAgICAgICAgY29tcHV0ZWQ6ICEhYXR0LmNvbXB1dGVkLFxuICAgICAgICAgIG9wdGlvbmFsOiAhIWF0dC5vcHRpb25hbCxcbiAgICAgICAgICB0ZXJyYWZvcm1OYW1lOiB0ZXJyYWZvcm1BdHRyaWJ1dGVOYW1lLFxuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgcHJvdmlkZXI6IHBhcmVudFR5cGUuaXNQcm92aWRlcixcbiAgICAgICAgICByZXF1aXJlZDogISFhdHQucmVxdWlyZWQsXG4gICAgICAgICAgZm9yY2VQbGFpbkdldHRlclR5cGUsXG4gICAgICAgICAgaXNXcml0ZU9ubHk6ICEhYXR0LndyaXRlX29ubHksXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtibG9ja1R5cGVOYW1lLCBibG9ja1R5cGVdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgICAgYmxvY2suYmxvY2tfdHlwZXMgfHwge30sXG4gICAgKSkge1xuICAgICAgaWYgKHNob3VsZFNraXBBdHRyaWJ1dGUocGFyZW50VHlwZS5mdWxsTmFtZShibG9ja1R5cGVOYW1lKSkpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRvQ2FtZWxDYXNlKGJsb2NrVHlwZU5hbWUpO1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBuZXcgU2NvcGUoe1xuICAgICAgICAgIG5hbWU6IGJsb2NrVHlwZU5hbWUsXG4gICAgICAgICAgcGFyZW50OiBwYXJlbnRUeXBlLFxuICAgICAgICAgIGlzUHJvdmlkZXI6IHBhcmVudFR5cGUuaXNQcm92aWRlcixcbiAgICAgICAgfSk7XG4gICAgICAgIGF0dHJpYnV0ZXMucHVzaChcbiAgICAgICAgICBuZXcgQXR0cmlidXRlTW9kZWwoe1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHRlcnJhZm9ybU5hbWU6IGJsb2NrVHlwZU5hbWUsXG4gICAgICAgICAgICB0ZXJyYWZvcm1GdWxsTmFtZTogcGFyZW50LmZ1bGxOYW1lKGJsb2NrVHlwZU5hbWUpLFxuICAgICAgICAgICAgdHlwZTogbmV3IFNraXBwZWRBdHRyaWJ1dGVUeXBlTW9kZWwoKSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgJHtibG9ja1R5cGVOYW1lfSBibG9ja2AsXG4gICAgICAgICAgICBzdG9yYWdlTmFtZTogYF8ke25hbWV9YCxcbiAgICAgICAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHJvdmlkZXI6IHBhcmVudFR5cGUuaXNQcm92aWRlcixcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBjcmVhdGUgYSBzdHJ1Y3QgZm9yIHRoaXMgYmxvY2tcbiAgICAgIGxldCBibG9ja0F0dHJpYnV0ZXMgPSB0aGlzLnJlbmRlckF0dHJpYnV0ZXNGb3JCbG9jayhcbiAgICAgICAgbmV3IFNjb3BlKHtcbiAgICAgICAgICBuYW1lOiBgJHtwYXJlbnRUeXBlLm5hbWV9XyR7YmxvY2tUeXBlTmFtZX1gLFxuICAgICAgICAgIHBhcmVudDogcGFyZW50VHlwZSxcbiAgICAgICAgICBpc1Byb3ZpZGVyOiBwYXJlbnRUeXBlLmlzUHJvdmlkZXIsXG4gICAgICAgICAgaW5CbG9ja1R5cGU6IHRydWUsXG4gICAgICAgIH0pLFxuICAgICAgICBibG9ja1R5cGUuYmxvY2ssXG4gICAgICApO1xuXG4gICAgICBibG9ja0F0dHJpYnV0ZXMgPSBkZWR1cGxpY2F0ZUF0dHJpYnV0ZXNXaXRoU2FtZU5hbWUoYmxvY2tBdHRyaWJ1dGVzKTtcblxuICAgICAgY29uc3QgYmxvY2tTdHJ1Y3QgPSB0aGlzLmFkZFN0cnVjdChcbiAgICAgICAgW1xuICAgICAgICAgIHBhcmVudFR5cGUsXG4gICAgICAgICAgbmV3IFNjb3BlKHtcbiAgICAgICAgICAgIG5hbWU6IGJsb2NrVHlwZU5hbWUsXG4gICAgICAgICAgICBwYXJlbnQ6IHBhcmVudFR5cGUsXG4gICAgICAgICAgICBpc1Byb3ZpZGVyOiBwYXJlbnRUeXBlLmlzUHJvdmlkZXIsXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICAgIGJsb2NrQXR0cmlidXRlcyxcbiAgICAgICAgYmxvY2tUeXBlLm5lc3RpbmdfbW9kZSxcbiAgICAgICAgKGJsb2NrVHlwZS5uZXN0aW5nX21vZGUgPT09IFwibGlzdFwiIHx8XG4gICAgICAgICAgYmxvY2tUeXBlLm5lc3RpbmdfbW9kZSA9PT0gXCJzZXRcIikgJiZcbiAgICAgICAgICBibG9ja1R5cGUubWF4X2l0ZW1zID09PSAxLFxuICAgICAgKTtcblxuICAgICAgLy8gZGVmaW5lIHRoZSBhdHRyaWJ1dGVcbiAgICAgIGF0dHJpYnV0ZXMucHVzaChcbiAgICAgICAgYXR0cmlidXRlRm9yQmxvY2tUeXBlKFxuICAgICAgICAgIGJsb2NrVHlwZU5hbWUsXG4gICAgICAgICAgYmxvY2tUeXBlLFxuICAgICAgICAgIGJsb2NrU3RydWN0LFxuICAgICAgICAgIHBhcmVudFR5cGUuaXNQcm92aWRlcixcbiAgICAgICAgICBwYXJlbnRUeXBlLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXR0cmlidXRlcztcblxuICAgIGZ1bmN0aW9uIGF0dHJpYnV0ZUZvckJsb2NrVHlwZShcbiAgICAgIHRlcnJhZm9ybU5hbWU6IHN0cmluZyxcbiAgICAgIGJsb2NrVHlwZTogQmxvY2tUeXBlLFxuICAgICAgc3RydWN0OiBTdHJ1Y3QsXG4gICAgICBpc1Byb3ZpZGVyOiBib29sZWFuLFxuICAgICAgcGFyZW50OiBTY29wZSxcbiAgICApOiBBdHRyaWJ1dGVNb2RlbCB7XG4gICAgICBjb25zdCBuYW1lID0gdG9DYW1lbENhc2UodGVycmFmb3JtTmFtZSk7XG4gICAgICBsZXQgb3B0aW9uYWw6IGJvb2xlYW47XG4gICAgICBsZXQgcmVxdWlyZWQ6IGJvb2xlYW47XG5cbiAgICAgIHN3aXRjaCAoYmxvY2tUeXBlLm5lc3RpbmdfbW9kZSkge1xuICAgICAgICBjYXNlIFwic2luZ2xlXCI6XG4gICAgICAgICAgb3B0aW9uYWwgPSAhc3RydWN0LmF0dHJpYnV0ZXMuc29tZSgoeCkgPT4gIXgub3B0aW9uYWwpO1xuICAgICAgICAgIHJlcXVpcmVkID0gIXN0cnVjdC5hdHRyaWJ1dGVzLnNvbWUoKHgpID0+ICF4LnJlcXVpcmVkKTtcblxuICAgICAgICAgIC8vIFRoaXMgaXMgZm9yIGJ1ZyAjMzU3MCBhcyBib3RoIG9wdGlvbmFsIGFuZCByZXF1aXJlZCBldmFsdWF0ZSB0byBmYWxzZSB1bmRlciBzb21lIGNpcmN1bXN0YW5jZXNcbiAgICAgICAgICAvLyAodGhpcyB0aGVuIGNhdXNlcyB0aGUgY29tcHV0ZWQgYmxvY2sgdG8gbm90IGJlIHBhcnQgb2YgYXNzaWduYWJsZUF0dHJpYnV0ZXMgYW5kIHRodXMgc2tpcHBlZCBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUpXG4gICAgICAgICAgLy8gSGVuY2U6IElmIGJvdGggb3B0aW9uYWwgYW5kIHJlcXVpcmVkIGFyZSBmYWxzZSwgc2V0IG9wdGlvbmFsIHRvIHRydWUgSUYgYXQgbGVhc3Qgb25lXG4gICAgICAgICAgLy8gYXR0cmlidXRlIGluIHRoZSBibG9jayBoYXMgb3B0aW9uYWwgPSB0cnVlIG9yIHJlcXVpcmVkID0gdHJ1ZSwgYXMgdGhpcyB3b3VsZCBtZWFuIHRoYXQgYXQgbGVhc3Qgc29tZXRoaW5nIGNhbiBiZSBzZXRcbiAgICAgICAgICAvLyBhbmQgdGhlIGJsb2NrIGlzIG5vdCBhbGwgY29tcHV0ZWQuXG4gICAgICAgICAgaWYgKCFvcHRpb25hbCAmJiAhcmVxdWlyZWQpIHtcbiAgICAgICAgICAgIG9wdGlvbmFsID0gc3RydWN0LmF0dHJpYnV0ZXMuc29tZSgoeCkgPT4geC5vcHRpb25hbCB8fCB4LnJlcXVpcmVkKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbmV3IEF0dHJpYnV0ZU1vZGVsKHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB0ZXJyYWZvcm1OYW1lLFxuICAgICAgICAgICAgdGVycmFmb3JtRnVsbE5hbWU6IHBhcmVudC5mdWxsTmFtZSh0ZXJyYWZvcm1OYW1lKSxcbiAgICAgICAgICAgIHR5cGU6IG5ldyBTdHJ1Y3RBdHRyaWJ1dGVUeXBlTW9kZWwoc3RydWN0KSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgJHt0ZXJyYWZvcm1OYW1lfSBibG9ja2AsXG4gICAgICAgICAgICBzdG9yYWdlTmFtZTogYF8ke25hbWV9YCxcbiAgICAgICAgICAgIG9wdGlvbmFsLFxuICAgICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHJvdmlkZXI6IGlzUHJvdmlkZXIsXG4gICAgICAgICAgICByZXF1aXJlZCxcbiAgICAgICAgICB9KTtcblxuICAgICAgICBjYXNlIFwibWFwXCI6XG4gICAgICAgICAgcmV0dXJuIG5ldyBBdHRyaWJ1dGVNb2RlbCh7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdGVycmFmb3JtTmFtZSxcbiAgICAgICAgICAgIHRlcnJhZm9ybUZ1bGxOYW1lOiBwYXJlbnQuZnVsbE5hbWUodGVycmFmb3JtTmFtZSksXG4gICAgICAgICAgICB0eXBlOiBuZXcgTWFwQXR0cmlidXRlVHlwZU1vZGVsKFxuICAgICAgICAgICAgICBuZXcgU3RydWN0QXR0cmlidXRlVHlwZU1vZGVsKHN0cnVjdCksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke3RlcnJhZm9ybU5hbWV9IGJsb2NrYCxcbiAgICAgICAgICAgIHN0b3JhZ2VOYW1lOiBgXyR7bmFtZX1gLFxuICAgICAgICAgICAgb3B0aW9uYWw6IGZhbHNlLFxuICAgICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHJvdmlkZXI6IGlzUHJvdmlkZXIsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgY2FzZSBcImxpc3RcIjpcbiAgICAgICAgY2FzZSBcInNldFwiOlxuICAgICAgICAgIG9wdGlvbmFsID1cbiAgICAgICAgICAgIGJsb2NrVHlwZS5taW5faXRlbXMgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBibG9ja1R5cGUubWluX2l0ZW1zIDwgMTtcbiAgICAgICAgICByZXF1aXJlZCA9XG4gICAgICAgICAgICBibG9ja1R5cGUubWluX2l0ZW1zID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IGJsb2NrVHlwZS5taW5faXRlbXMgPiAwO1xuICAgICAgICAgIHJldHVybiBuZXcgQXR0cmlidXRlTW9kZWwoe1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHRlcnJhZm9ybU5hbWU6IHRlcnJhZm9ybU5hbWUsXG4gICAgICAgICAgICB0ZXJyYWZvcm1GdWxsTmFtZTogcGFyZW50LmZ1bGxOYW1lKHRlcnJhZm9ybU5hbWUpLFxuICAgICAgICAgICAgdHlwZTpcbiAgICAgICAgICAgICAgYmxvY2tUeXBlLm5lc3RpbmdfbW9kZSA9PT0gXCJsaXN0XCJcbiAgICAgICAgICAgICAgICA/IG5ldyBMaXN0QXR0cmlidXRlVHlwZU1vZGVsKFxuICAgICAgICAgICAgICAgICAgICBuZXcgU3RydWN0QXR0cmlidXRlVHlwZU1vZGVsKHN0cnVjdCksXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrVHlwZS5tYXhfaXRlbXMgPT09IDEsXG4gICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBuZXcgU2V0QXR0cmlidXRlVHlwZU1vZGVsKFxuICAgICAgICAgICAgICAgICAgICBuZXcgU3RydWN0QXR0cmlidXRlVHlwZU1vZGVsKHN0cnVjdCksXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrVHlwZS5tYXhfaXRlbXMgPT09IDEsXG4gICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke3RlcnJhZm9ybU5hbWV9IGJsb2NrYCxcbiAgICAgICAgICAgIHN0b3JhZ2VOYW1lOiBgXyR7bmFtZX1gLFxuICAgICAgICAgICAgb3B0aW9uYWwsXG4gICAgICAgICAgICBjb21wdXRlZDogZmFsc2UsXG4gICAgICAgICAgICBwcm92aWRlcjogaXNQcm92aWRlcixcbiAgICAgICAgICAgIHJlcXVpcmVkLFxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGFkZEFub255bW91c1N0cnVjdChcbiAgICBzY29wZTogU2NvcGVbXSxcbiAgICBhdHRyczogeyBbbmFtZTogc3RyaW5nXTogQXR0cmlidXRlIH0gfCB1bmRlZmluZWQsXG4gICAgbmVzdGluZ19tb2RlOiBzdHJpbmcsXG4gICkge1xuICAgIGxldCBhdHRyaWJ1dGVzID0gbmV3IEFycmF5PEF0dHJpYnV0ZU1vZGVsPigpO1xuICAgIGNvbnN0IHBhcmVudCA9IHNjb3BlW3Njb3BlLmxlbmd0aCAtIDFdO1xuICAgIGlmIChhdHRycykge1xuICAgICAgZm9yIChjb25zdCBbdGVycmFmb3JtTmFtZSwgYXR0XSBvZiBPYmplY3QuZW50cmllcyhhdHRycyB8fCB7fSkpIHtcbiAgICAgICAgLy8gbmVzdGVkIHR5cGVzIHN1cHBvcnQgY29tcHV0ZWQsIG9wdGlvbmFsIGFuZCByZXF1aXJlZCBvbiBhdHRyaWJ1dGUgbGV2ZWxcbiAgICAgICAgLy8gaWYgcGFyZW50IGlzIGNvbXB1dGVkLCBjaGlsZCBhbHdheXMgaXMgY29tcHV0ZWQgYXMgd2VsbFxuICAgICAgICBjb25zdCBjb21wdXRlZCA9XG4gICAgICAgICAgISFwYXJlbnQuaXNDb21wdXRlZCB8fCAocGFyZW50LmlzTmVzdGVkVHlwZSAmJiAhIWF0dC5jb21wdXRlZCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbmFsID0gcGFyZW50LmlzTmVzdGVkVHlwZVxuICAgICAgICAgID8gISFhdHQub3B0aW9uYWxcbiAgICAgICAgICA6ICEhcGFyZW50LmlzT3B0aW9uYWw7XG4gICAgICAgIGNvbnN0IHJlcXVpcmVkID0gcGFyZW50LmlzTmVzdGVkVHlwZVxuICAgICAgICAgID8gISFhdHQucmVxdWlyZWRcbiAgICAgICAgICA6ICEhcGFyZW50LmlzUmVxdWlyZWQ7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0b0NhbWVsQ2FzZSh0ZXJyYWZvcm1OYW1lKTtcbiAgICAgICAgY29uc3QgdHlwZSA9IHRoaXMucmVuZGVyQXR0cmlidXRlVHlwZShcbiAgICAgICAgICBbXG4gICAgICAgICAgICAuLi5zY29wZSxcbiAgICAgICAgICAgIG5ldyBTY29wZSh7XG4gICAgICAgICAgICAgIG5hbWU6IHRlcnJhZm9ybU5hbWUsXG4gICAgICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICAgICAgaXNQcm92aWRlcjogcGFyZW50LmlzUHJvdmlkZXIsXG4gICAgICAgICAgICAgIGlzQ29tcHV0ZWQ6IGNvbXB1dGVkLFxuICAgICAgICAgICAgICBpc09wdGlvbmFsOiBvcHRpb25hbCxcbiAgICAgICAgICAgICAgaXNSZXF1aXJlZDogcmVxdWlyZWQsXG4gICAgICAgICAgICAgIGlzTmVzdGVkVHlwZTogcGFyZW50LmlzTmVzdGVkVHlwZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgYXR0LnR5cGUgfHwgYXR0Lm5lc3RlZF90eXBlLFxuICAgICAgICApO1xuICAgICAgICBhdHRyaWJ1dGVzLnB1c2goXG4gICAgICAgICAgbmV3IEF0dHJpYnV0ZU1vZGVsKHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBzdG9yYWdlTmFtZTogYF8ke25hbWV9YCxcbiAgICAgICAgICAgIGNvbXB1dGVkOiBjb21wdXRlZCxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBhdHQuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBvcHRpb25hbDogb3B0aW9uYWwsXG4gICAgICAgICAgICB0ZXJyYWZvcm1OYW1lLFxuICAgICAgICAgICAgdGVycmFmb3JtRnVsbE5hbWU6IHBhcmVudC5mdWxsTmFtZSh0ZXJyYWZvcm1OYW1lKSxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBwcm92aWRlcjogcGFyZW50LmlzUHJvdmlkZXIsXG4gICAgICAgICAgICByZXF1aXJlZDogcmVxdWlyZWQsXG4gICAgICAgICAgICBpc1dyaXRlT25seTogISFhdHQud3JpdGVfb25seSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhdHRyaWJ1dGVzID0gZGVkdXBsaWNhdGVBdHRyaWJ1dGVzV2l0aFNhbWVOYW1lKGF0dHJpYnV0ZXMpO1xuXG4gICAgcmV0dXJuIHRoaXMuYWRkU3RydWN0KHNjb3BlLCBhdHRyaWJ1dGVzLCBuZXN0aW5nX21vZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRTdHJ1Y3QoXG4gICAgc2NvcGU6IFNjb3BlW10sXG4gICAgYXR0cmlidXRlczogQXR0cmlidXRlTW9kZWxbXSxcbiAgICBuZXN0aW5nX21vZGU6IHN0cmluZyxcbiAgICBpc1NpbmdsZUl0ZW0gPSBmYWxzZSxcbiAgKSB7XG4gICAgY29uc3QgcG9zc2libGVOYW1lID0gdG9QYXNjYWxDYXNlKFxuICAgICAgc2NvcGUubWFwKCh4KSA9PiB0b1NuYWtlQ2FzZSh4Lm5hbWUpKS5qb2luKFwiX1wiKSxcbiAgICApO1xuICAgIGNvbnN0IG5hbWUgPSB0aGlzLnVuaXF1ZUNsYXNzTmFtZShcbiAgICAgIGlzUmVzZXJ2ZWRTdHJ1Y3RDbGFzc05hbWUocG9zc2libGVOYW1lKVxuICAgICAgICA/IGAke3Bvc3NpYmxlTmFtZX1TdHJ1Y3RgXG4gICAgICAgIDogcG9zc2libGVOYW1lLFxuICAgICk7XG5cbiAgICBjb25zdCBwYXJlbnQgPSBzY29wZVtzY29wZS5sZW5ndGggLSAxXTtcbiAgICAvLyBibG9ja1R5cGUubmVzdGluZ19tb2RlID0+IGxpc3Qvc2V0ICYgYmxvY2tUeXBlLm1heF9pdGVtcyA9PT0gMSxcbiAgICBjb25zdCBpc0NsYXNzID0gKHBhcmVudC5pc0NvbXB1dGVkICYmICFwYXJlbnQuaXNPcHRpb25hbCkgfHwgaXNTaW5nbGVJdGVtO1xuICAgIGNvbnN0IGlzQW5vbnltb3VzID0gdHJ1ZTtcbiAgICBjb25zdCBzID0gbmV3IFN0cnVjdChcbiAgICAgIG5hbWUsXG4gICAgICBhdHRyaWJ1dGVzLFxuICAgICAgaXNDbGFzcyxcbiAgICAgIGlzQW5vbnltb3VzLFxuICAgICAgaXNTaW5nbGVJdGVtLFxuICAgICAgbmVzdGluZ19tb2RlLFxuICAgICk7XG4gICAgdGhpcy5zdHJ1Y3RzLnB1c2gocyk7XG4gICAgcmV0dXJuIHM7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlc291cmNlUGFyc2VyIHtcbiAgcHJpdmF0ZSB1bmlxdWVDbGFzc25hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIHVuaXF1ZUJhc2VOYW1lczogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSByZXNvdXJjZXM6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTW9kZWw+ID0ge307XG5cbiAgcHVibGljIHBhcnNlKFxuICAgIGZxcG46IEZRUE4sXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIHNjaGVtYTogU2NoZW1hLFxuICAgIHRlcnJhZm9ybVR5cGU6IHN0cmluZyxcbiAgICBjb25zdHJhaW50PzogQ29uc3RydWN0c01ha2VyVGFyZ2V0LFxuICApOiBSZXNvdXJjZU1vZGVsIHtcbiAgICBpZiAodGhpcy5yZXNvdXJjZXNbdHlwZV0pIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc291cmNlc1t0eXBlXTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgUGFyc2VyKHRoaXMudW5pcXVlQ2xhc3NuYW1lcywgdGhpcy51bmlxdWVCYXNlTmFtZXMpO1xuICAgIGNvbnN0IHJlc291cmNlID0gcGFyc2VyLnJlc291cmNlRnJvbShcbiAgICAgIGZxcG4sXG4gICAgICB0eXBlLFxuICAgICAgc2NoZW1hLFxuICAgICAgdGVycmFmb3JtVHlwZSxcbiAgICAgIGNvbnN0cmFpbnQsXG4gICAgKTtcbiAgICB0aGlzLnJlc291cmNlc1t0eXBlXSA9IHJlc291cmNlO1xuICAgIHJldHVybiByZXNvdXJjZTtcbiAgfVxuXG4gIC8vIFVzZWQgYnkgY29udmVydCB0byBkZXRlcm1pbmUgdGhlIHJpZ2h0IG5hbWUgZm9yIGEgY2xhc3NcbiAgcHVibGljIGdldENsYXNzTmFtZUZvclJlc291cmNlKHRlcnJhZm9ybVR5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5yZXNvdXJjZXNbdGVycmFmb3JtVHlwZV07XG4gICAgcmV0dXJuIHJlc291cmNlID8gcmVzb3VyY2UuY2xhc3NOYW1lIDogXCJcIjtcbiAgfVxuXG4gIC8vIFVzZWQgYnkgY29udmVydCB0byBkZXRlcm1pbmUgdGhlIHJpZ2h0IG5hbWUgZm9yIGEgbmFtZXNwYWNlXG4gIHB1YmxpYyBnZXROYW1lc3BhY2VOYW1lRm9yUmVzb3VyY2UodGVycmFmb3JtVHlwZTogc3RyaW5nKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlIGV4dGVybmFsIHByb3ZpZGVyIHNpbmNlIHRoZSBuYW1lIG9mIHJlc291cmNlIGRvZXNuJ3QgaGF2ZSBhIHByZWZpeFxuICAgIGlmICh0ZXJyYWZvcm1UeXBlID09PSBcImRhdGFfZXh0ZXJuYWxfXCIpIHtcbiAgICAgIHRlcnJhZm9ybVR5cGUgPSBcImRhdGFfZXh0ZXJuYWxcIjtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2VzW3RlcnJhZm9ybVR5cGVdO1xuICAgIGlmICghcmVzb3VyY2UpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICBjb25zdCBmb2xkZXIgPSBgcHJvdmlkZXJzLyR7cmVzb3VyY2UucHJvdmlkZXJ9YDtcbiAgICByZXR1cm4gcmVzb3VyY2UuZmlsZVBhdGgucmVwbGFjZShgJHtmb2xkZXJ9L2AsIFwiXCIpLnJlcGxhY2UoXCIvaW5kZXgudHNcIiwgXCJcIik7XG4gIH1cbn1cbiJdfQ==
|
|
534
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtcGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2dldC9nZW5lcmF0b3IvcmVzb3VyY2UtcGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWdGQSxvRUFvQkM7QUFwR0QsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyx5Q0FBbUU7QUFDbkUsNENBV3dCO0FBQ3hCLDREQUF1RTtBQUN2RSxxQ0FZa0I7QUFDbEIscURBQXdEO0FBQ3hELDZEQUEyRDtBQUUzRCxzRUFBc0U7QUFDdEUseUpBQXlKO0FBQ3pKLE1BQU0sZ0NBQWdDLEdBQUc7SUFDdkMsWUFBWTtJQUNaLFdBQVc7SUFDWCxLQUFLO0lBQ0wsU0FBUztJQUNULFNBQVM7SUFDVCxXQUFXO0lBQ1gsUUFBUTtJQUNSLFFBQVE7SUFDUixPQUFPO0lBQ1AsT0FBTztDQUNSLENBQUM7QUFFRixNQUFNLHlCQUF5QixHQUFHO0lBQ2hDLG1IQUFtSDtJQUNuSCxTQUFTO0lBQ1QsMkJBQTJCO0lBQzNCLFNBQVM7Q0FDVixDQUFDO0FBRUYsTUFBTSw4QkFBOEIsR0FBRyxDQUFDLFNBQWlCLEVBQVcsRUFBRTtJQUNwRSxPQUFPO1FBQ0wsUUFBUTtRQUNSLFFBQVE7UUFDUixVQUFVO1FBQ1YsR0FBRyxnQ0FBZ0M7UUFDbkMsR0FBRyx5QkFBeUI7S0FDN0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDdEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLFNBQWlCLEVBQVcsRUFBRTtJQUMvRCxPQUFPLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxRQUFzQixFQUFFLFFBQWdCLEVBQVUsRUFBRTtJQUN2RSxJQUFJLFFBQVEsS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUN6QixP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QUFZLENBQ2xDLElBQUksRUFDSixJQUFJLEVBQ0osTUFBTSxFQUNOLGFBQWEsRUFDYixVQUFVLENBQ1gsQ0FBQztRQUNGLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQ2hDLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCwwREFBMEQ7SUFDbkQsdUJBQXVCLENBQUMsYUFBcUI7UUFDbEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMvQyxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCw4REFBOEQ7SUFDdkQsMkJBQTJCLENBQUMsYUFBcUI7UUFDdEQsa0ZBQWtGO1FBQ2xGLElBQUksYUFBYSxLQUFLLGdCQUFnQixFQUFFLENBQUM7WUFDdkMsYUFBYSxHQUFHLGVBQWUsQ0FBQztRQUNsQyxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxhQUFhLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoRCxPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM5RSxDQUFDO0NBQ0Y7QUF0REQsd0NBc0RDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IHRvQ2FtZWxDYXNlLCB0b1Bhc2NhbENhc2UsIHRvU25ha2VDYXNlIH0gZnJvbSBcImNvZGVtYWtlclwiO1xuaW1wb3J0IHtcbiAgQXR0cmlidXRlLFxuICBBdHRyaWJ1dGVOZXN0ZWRUeXBlLFxuICBBdHRyaWJ1dGVUeXBlLFxuICBCbG9jayxcbiAgQmxvY2tUeXBlLFxuICBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gIGlzQXR0cmlidXRlTmVzdGVkVHlwZSxcbiAgaXNOZXN0ZWRUeXBlQXR0cmlidXRlLFxuICBTY2hlbWEsXG4gIFRlcnJhZm9ybVRhcmdldFZlcnNpb25zLFxufSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IFByb3ZpZGVyTmFtZSwgRlFQTiwgcGFyc2VGUVBOIH0gZnJvbSBcIkBjZGt0bi9wcm92aWRlci1zY2hlbWFcIjtcbmltcG9ydCB7XG4gIFJlc291cmNlTW9kZWwsXG4gIEF0dHJpYnV0ZVR5cGVNb2RlbCxcbiAgU3RydWN0LFxuICBTY29wZSxcbiAgQXR0cmlidXRlTW9kZWwsXG4gIFNpbXBsZUF0dHJpYnV0ZVR5cGVNb2RlbCxcbiAgTGlzdEF0dHJpYnV0ZVR5cGVNb2RlbCxcbiAgU2V0QXR0cmlidXRlVHlwZU1vZGVsLFxuICBNYXBBdHRyaWJ1dGVUeXBlTW9kZWwsXG4gIFN0cnVjdEF0dHJpYnV0ZVR5cGVNb2RlbCxcbiAgU2tpcHBlZEF0dHJpYnV0ZVR5cGVNb2RlbCxcbn0gZnJvbSBcIi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBkZXRlY3RBdHRyaWJ1dGVMb29wcyB9IGZyb20gXCIuL2xvb3AtZGV0ZWN0aW9uXCI7XG5pbXBvcnQgeyBzaG91bGRTa2lwQXR0cmlidXRlIH0gZnJvbSBcIi4vc2tpcHBlZC1hdHRyaWJ1dGVzXCI7XG5cbi8vIENhbid0IGJlIHVzZWQgaW4gZXhwcmVzc2lvbnMgbGlrZSBcImV4cG9ydCAqIGFzIDxrZXl3b3JkPiBmcm9tIC4uLiBcIlxuLy8gZmlsdGVyZWQgZnJvbSBhbGwga2V5d29yZHMgZnJvbTogaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2Jsb2IvNTAzNjA0Yzg4NGJkMDU1N2M4NTFiMTFiNjk5ZWY5OGNkYjY1YjkzYi9zcmMvY29tcGlsZXIvdHlwZXMudHMjTDExNC1MMTk3XG5jb25zdCBSRVNFUlZFRF9LRVlXT1JEU19GT1JfTkFNRVNQQUNFUyA9IFtcbiAgXCJpbXBsZW1lbnRzXCIsXG4gIFwiaW50ZXJmYWNlXCIsXG4gIFwibGV0XCIsXG4gIFwicGFja2FnZVwiLFxuICBcInByaXZhdGVcIixcbiAgXCJwcm90ZWN0ZWRcIixcbiAgXCJwdWJsaWNcIixcbiAgXCJzdGF0aWNcIixcbiAgXCJ5aWVsZFwiLFxuICBcImF3YWl0XCIsXG5dO1xuXG5jb25zdCBDT0xMSURJTkdfTkFNRVNQQUNFX05BTUVTID0gW1xuICAvLyBlLmcuIGhhc2hpY29ycC9jb25zdWwg4oCTIGNvbGxpZGVzIHdpdGggdGhlIExJQ0VOU0UgZmlsZSBvbiBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW1zIGluIHRoZSBHbyBwYWNrYWdlICgjMjYyNylcbiAgXCJsaWNlbnNlXCIsXG4gIC8vIGNvbGxpZGVzIGZvciBHbyBwYWNrYWdlc1xuICBcInZlcnNpb25cIixcbl07XG5cbmNvbnN0IGlzUmVzZXJ2ZWRDbGFzc09yTmFtZXNwYWNlTmFtZSA9IChjbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gW1xuICAgIFwic3RyaW5nXCIsXG4gICAgXCJvYmplY3RcIixcbiAgICBcImZ1bmN0aW9uXCIsXG4gICAgLi4uUkVTRVJWRURfS0VZV09SRFNfRk9SX05BTUVTUEFDRVMsXG4gICAgLi4uQ09MTElESU5HX05BTUVTUEFDRV9OQU1FUyxcbiAgXS5pbmNsdWRlcyhjbGFzc05hbWUudG9Mb3dlckNhc2UoKSk7XG59O1xuXG5jb25zdCBpc1Jlc2VydmVkU3RydWN0Q2xhc3NOYW1lID0gKGNsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBjbGFzc05hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChcImxpc3RcIik7XG59O1xuXG5jb25zdCBnZXRGaWxlTmFtZSA9IChwcm92aWRlcjogUHJvdmlkZXJOYW1lLCBiYXNlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgaWYgKGJhc2VOYW1lID09PSBcImluZGV4XCIpIHtcbiAgICByZXR1cm4gXCJpbmRleC1yZXNvdXJjZS9pbmRleC50c1wiO1xuICB9XG5cbiAgaWYgKGJhc2VOYW1lID09PSBgJHtwcm92aWRlcn1fcHJvdmlkZXJgKSB7XG4gICAgcmV0dXJuIFwicHJvdmlkZXIvaW5kZXgudHNcIjtcbiAgfVxuXG4gIHJldHVybiBgJHt0b1NuYWtlQ2FzZShiYXNlTmFtZSkucmVwbGFjZSgvXy9nLCBcIi1cIil9L2luZGV4LnRzYDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZUNsYXNzT3JOYW1lc3BhY2VOYW1lKFxuICBiYXNlTmFtZTogc3RyaW5nLFxuICBpc1Byb3ZpZGVyID0gZmFsc2UsXG4pIHtcbiAgY29uc3QgcmVzb3VyY2VJc05hbWVkUHJvdmlkZXIgPSAhaXNQcm92aWRlciAmJiBiYXNlTmFtZSA9PT0gXCJwcm92aWRlclwiO1xuICAvLyBBIHJlc291cmNlIG5hbWVkIGA8cHJvdmlkZXI+X3Byb3ZpZGVyX2Z1bmN0aW9uc2AgbWFwcyB0byB0aGUgc2FtZVxuICAvLyBwcm92aWRlcnMvPHByb3ZpZGVyPi9wcm92aWRlci1mdW5jdGlvbnMvIGRpcmVjdG9yeSB0aGF0IHRoZSBwcm92aWRlcidzXG4gIC8vIGZ1bmN0aW9ucyBzdWJtb2R1bGUgaXMgZW1pdHRlZCB0bywgYW5kIHdvdWxkIHNpbGVudGx5IG92ZXJ3cml0ZSBpdC5cbiAgY29uc3QgcmVzb3VyY2VJc05hbWVkUHJvdmlkZXJGdW5jdGlvbnMgPVxuICAgICFpc1Byb3ZpZGVyICYmIGJhc2VOYW1lID09PSBcInByb3ZpZGVyX2Z1bmN0aW9uc1wiO1xuXG4gIGlmIChcbiAgICBpc1Jlc2VydmVkQ2xhc3NPck5hbWVzcGFjZU5hbWUoYmFzZU5hbWUpIHx8XG4gICAgcmVzb3VyY2VJc05hbWVkUHJvdmlkZXIgfHxcbiAgICByZXNvdXJjZUlzTmFtZWRQcm92aWRlckZ1bmN0aW9uc1xuICApIHtcbiAgICByZXR1cm4gYCR7YmFzZU5hbWV9X3Jlc291cmNlYDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZU5hbWU7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmUgYXR0cmlidXRlcyB0aGF0IG1heSBjb25mbGljdCBhZnRlciBiZWluZyBzbmFrZSBjYXNlZFxuICogRXhhbXBsZTogb2NpX2NvcmVfaXBzZWNfY29ubmVjdGlvbl90dW5uZWxfbWFuYWdlbWVudCAoaGFzaGljb3JwL29jaUA9NS4yMS4wKSBoYXMgYmdwX2lwdjZfc3RhdGUgYW5kIGJncF9pcHY2c3RhdGVcbiAqICh3aGljaCBib3RoIHJlc3VsdCBpbiBcImJncElwdjZTdGF0ZVwiIHdoZW4gY2FtZWwtY2FzZWQsIHdpdGggdGhlIHNlY29uZCBvbmUgYmVpbmcgZGVwcmVjYXRlZDogdHJ1ZSlcbiAqIEFzIHdlIGN1cnJlbnRseSBkb24ndCBoYW5kbGUgYW55IGRlcHJlY2F0ZWQgb25lcyBhdCBhbGwsIHdlJ2xsIGp1c3QgZGVsZXRlIG9uZSBvZiB0aGUgdHdvIGF0dHJpYnV0ZXMgZm9yIG5vd1xuICogQHBhcmFtIGF0dHJpYnV0ZXNcbiAqL1xuZnVuY3Rpb24gZGVkdXBsaWNhdGVBdHRyaWJ1dGVzV2l0aFNhbWVOYW1lKFxuICBhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVNb2RlbFtdLFxuKTogQXR0cmlidXRlTW9kZWxbXSB7XG4gIHJldHVybiBhdHRyaWJ1dGVzLmZpbHRlcigoYXR0ciwgaWR4KSA9PiB7XG4gICAgY29uc3QgaGFzT3RoZXJXaXRoU2FtZU5hbWUgPSBhdHRyaWJ1dGVzXG4gICAgICAuc2xpY2UoaWR4ICsgMSkgLy8gb25seSBzZWFyY2ggYWZ0ZXIgdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGF0dHJpYnV0ZSB0byBhdm9pZCBkZWxldGluZyBib3RoXG4gICAgICAuc29tZSgob3RoZXIpID0+IG90aGVyLm5hbWUgPT09IGF0dHIubmFtZSAmJiBvdGhlciAhPT0gYXR0cik7XG4gICAgcmV0dXJuICFoYXNPdGhlcldpdGhTYW1lTmFtZTtcbiAgfSk7XG59XG5cbmNsYXNzIFBhcnNlciB7XG4gIHByaXZhdGUgc3RydWN0cyA9IG5ldyBBcnJheTxTdHJ1Y3Q+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjbGFzc05hbWVzOiBzdHJpbmdbXSxcbiAgICBwcml2YXRlIHVzZWRCYXNlTmFtZXM6IE1hcDxzdHJpbmcsIHN0cmluZz4sXG4gICAgcHJpdmF0ZSB0YXJnZXRWZXJzaW9ucz86IFRlcnJhZm9ybVRhcmdldFZlcnNpb25zLFxuICApIHt9XG5cbiAgcHJpdmF0ZSB1bmlxdWVDbGFzc05hbWUoY2xhc3NOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmNsYXNzTmFtZXMuaW5jbHVkZXMoY2xhc3NOYW1lKSkge1xuICAgICAgY2xhc3NOYW1lID0gYCR7Y2xhc3NOYW1lfUFgO1xuICAgIH1cbiAgICB0aGlzLmNsYXNzTmFtZXMucHVzaChjbGFzc05hbWUpO1xuICAgIHJldHVybiBjbGFzc05hbWU7XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlIGJhc2UgbmFtZXMgYXJlIHVuaXF1ZSBjYXNlLWluc2Vuc2l0aXZlbHkuXG4gICAqXG4gICAqIEFmZmVjdGVkIGxhbmd1YWdlczpcbiAgICogLSBHbzogSlNJSS1nZW5lcmF0ZWQgR28gcGFja2FnZSBuYW1lcyBhcmUgZnVsbHkgbG93ZXJjYXNlZCwgc29cbiAgICogICBgbG9hZC1iYWxhbmNlci1iYWNrZW5kc2V0YCBhbmQgYGxvYWQtYmFsYW5jZXItYmFja2VuZC1zZXRgIGJvdGhcbiAgICogICBiZWNvbWUgcGFja2FnZSBgbG9hZGJhbGFuY2VyYmFja2VuZHNldGAsIGNhdXNpbmcgYSBoYXJkIGJ1aWxkIGZhaWx1cmU6XG4gICAqICAgXCJjYXNlLWluc2Vuc2l0aXZlIGZpbGUgbmFtZSBjb2xsaXNpb25cIi5cbiAgICogLSBDIzogSlNJSSBnZW5lcmF0ZXMgUGFzY2FsQ2FzZSBkaXJlY3RvcmllcyBsaWtlXG4gICAqICAgYExvYWRCYWxhbmNlckJhY2tlbmRzZXQvYCBhbmQgYExvYWRCYWxhbmNlckJhY2tlbmRTZXQvYCB3aGljaCB0aGUgQyNcbiAgICogICBjb21waWxlciB0cmVhdHMgY2FzZS1pbnNlbnNpdGl2ZWx5LCBjYXVzaW5nIENTMjAwMiBhbmQgQ1MwMjM0IGVycm9ycy5cbiAgICovXG4gIHByaXZhdGUgdW5pcXVlQmFzZU5hbWUoYmFzZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFzY2FsTmFtZSA9IHRvUGFzY2FsQ2FzZShiYXNlTmFtZSk7XG4gICAgY29uc3Qga2V5ID0gcGFzY2FsTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy51c2VkQmFzZU5hbWVzLmdldChrZXkpO1xuXG4gICAgaWYgKGV4aXN0aW5nICE9PSB1bmRlZmluZWQgJiYgZXhpc3RpbmcgIT09IHBhc2NhbE5hbWUpIHtcbiAgICAgIGJhc2VOYW1lID0gYCR7YmFzZU5hbWV9QWA7XG4gICAgICByZXR1cm4gdGhpcy51bmlxdWVCYXNlTmFtZShiYXNlTmFtZSk7XG4gICAgfVxuXG4gICAgdGhpcy51c2VkQmFzZU5hbWVzLnNldChrZXksIHBhc2NhbE5hbWUpO1xuICAgIHJldHVybiBiYXNlTmFtZTtcbiAgfVxuXG4gIHB1YmxpYyByZXNvdXJjZUZyb20oXG4gICAgZnFwbjogRlFQTixcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgc2NoZW1hOiBTY2hlbWEsXG4gICAgdGVycmFmb3JtU2NoZW1hVHlwZTogc3RyaW5nLFxuICAgIGNvbnN0cmFpbnQ/OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gICk6IFJlc291cmNlTW9kZWwge1xuICAgIGxldCBiYXNlTmFtZSA9IHR5cGU7XG5cbiAgICBjb25zdCBwcm92aWRlck5hbWVGcm9tQ29uc3RyYWludCA9IGNvbnN0cmFpbnRcbiAgICAgID8gKGNvbnN0cmFpbnQubmFtZSBhcyBQcm92aWRlck5hbWUpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwcm92aWRlck5hbWVGcm9tRlFQTiA9IHBhcnNlRlFQTihmcXBuKS5uYW1lO1xuXG4gICAgaWYgKGJhc2VOYW1lLnN0YXJ0c1dpdGgoYCR7cHJvdmlkZXJOYW1lRnJvbUZRUE59X2ApKSB7XG4gICAgICBiYXNlTmFtZSA9IGJhc2VOYW1lLnN1YnN0cihwcm92aWRlck5hbWVGcm9tRlFQTi5sZW5ndGggKyAxKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm92aWRlck5hbWUgPSBwcm92aWRlck5hbWVGcm9tQ29uc3RyYWludFxuICAgICAgPyBwcm92aWRlck5hbWVGcm9tQ29uc3RyYWludFxuICAgICAgOiBwcm92aWRlck5hbWVGcm9tRlFQTjtcblxuICAgIGNvbnN0IGlzUHJvdmlkZXIgPSB0ZXJyYWZvcm1TY2hlbWFUeXBlID09PSBcInByb3ZpZGVyXCI7XG4gICAgaWYgKGlzUHJvdmlkZXIpIHtcbiAgICAgIGJhc2VOYW1lID0gYCR7cHJvdmlkZXJOYW1lfV8ke2Jhc2VOYW1lfWA7XG4gICAgICBpZiAoIShcImF0dHJpYnV0ZXNcIiBpbiBzY2hlbWEuYmxvY2spKSB7XG4gICAgICAgIHNjaGVtYS5ibG9jayA9IHtcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICAgICAgICBibG9ja190eXBlczogKHNjaGVtYS5ibG9jayBhcyBCbG9jaykuYmxvY2tfdHlwZXMgfHwge30sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBzb21laG93IG1pc3NpbmcgZnJvbSBwcm92aWRlciBzY2hlbWFcbiAgICAgIHNjaGVtYS5ibG9jay5hdHRyaWJ1dGVzW1wiYWxpYXNcIl0gPSB7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIkFsaWFzIG5hbWVcIixcbiAgICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgYmFzZU5hbWUgPSBzYW5pdGl6ZUNsYXNzT3JOYW1lc3BhY2VOYW1lKGJhc2VOYW1lLCBpc1Byb3ZpZGVyKTtcbiAgICBiYXNlTmFtZSA9IHRoaXMudW5pcXVlQmFzZU5hbWUoYmFzZU5hbWUpO1xuXG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy51bmlxdWVDbGFzc05hbWUodG9QYXNjYWxDYXNlKGJhc2VOYW1lKSk7XG4gICAgLy8gYXZvaWQgbmFtaW5nIGNvbGxpc2lvbiAtIHNlZSBodHRwczovL2dpdGh1Yi5jb20vaGFzaGljb3JwL3RlcnJhZm9ybS1jZGsvaXNzdWVzLzI5OVxuICAgIGNvbnN0IGNvbmZpZ1N0cnVjdE5hbWUgPSB0aGlzLnVuaXF1ZUNsYXNzTmFtZShgJHtjbGFzc05hbWV9Q29uZmlnYCk7XG4gICAgY29uc3QgZmlsZU5hbWUgPSBnZXRGaWxlTmFtZShwcm92aWRlck5hbWUsIGJhc2VOYW1lKTtcblxuICAgIGNvbnN0IGZpbGVQYXRoID0gYHByb3ZpZGVycy8ke3RvU25ha2VDYXNlKHByb3ZpZGVyTmFtZSl9LyR7ZmlsZU5hbWV9YDtcbiAgICBsZXQgYXR0cmlidXRlcyA9IHRoaXMucmVuZGVyQXR0cmlidXRlc0ZvckJsb2NrKFxuICAgICAgbmV3IFNjb3BlKHtcbiAgICAgICAgbmFtZTogYmFzZU5hbWUsXG4gICAgICAgIGlzUHJvdmlkZXIsXG4gICAgICAgIHBhcmVudDogaXNQcm92aWRlclxuICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgOiBuZXcgU2NvcGUoeyBuYW1lOiBwcm92aWRlck5hbWUsIGlzUHJvdmlkZXI6IHRydWUgfSksXG4gICAgICB9KSxcbiAgICAgIHNjaGVtYS5ibG9jayxcbiAgICApO1xuXG4gICAgZnVuY3Rpb24gZ2V0U3RydWN0QXR0cmlidXRlKFxuICAgICAgYXR0cmlidXRlczogQXR0cmlidXRlTW9kZWxbXSxcbiAgICAgIHBhdGg6IHN0cmluZyxcbiAgICApOiBBdHRyaWJ1dGVNb2RlbCB7XG4gICAgICBjb25zdCBbZmlyc3QsIC4uLnJlc3RdID0gcGF0aC5zcGxpdChcIi5cIik7XG4gICAgICBjb25zdCBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLmZpbmQoKGF0dCkgPT4ge1xuICAgICAgICByZXR1cm4gYXR0LnRlcnJhZm9ybU5hbWUgPT09IGZpcnN0O1xuICAgICAgfSk7XG4gICAgICBpZiAoIWF0dHJpYnV0ZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCB0byBmaW5kIHJlY3Vyc2l2ZSBhdHRyaWJ1dGUgYXQgcGF0aDogJHtwYXRofWAsXG4gICAgICAgICk7XG4gICAgICBpZiAoIWF0dHJpYnV0ZS50eXBlLnN0cnVjdClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCB0byBmaW5kIHN0cnVjdCB0eXBlIGF0dHJpYnV0ZSBhdCBwYXRoOiAke3BhdGh9IGJ1dCBnb3QgJHthdHRyaWJ1dGUudHlwZS5zdG9yZWRDbGFzc1R5cGV9YCxcbiAgICAgICAgKTtcbiAgICAgIGlmIChyZXN0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGF0dHJpYnV0ZTtcbiAgICAgIHJldHVybiBnZXRTdHJ1Y3RBdHRyaWJ1dGUoXG4gICAgICAgIGF0dHJpYnV0ZS50eXBlLnN0cnVjdC5hdHRyaWJ1dGVzLFxuICAgICAgICByZXN0LmpvaW4oXCIuXCIpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBJbnRyb2R1Y2UgcmVjdXJzaW9uIGZvciBzb21lIGF0dHJpYnV0ZXNcbiAgICBjb25zdCByZWN1cnNpdmVBdHRyaWJ1dGVQYXRocyA9IGRldGVjdEF0dHJpYnV0ZUxvb3BzKGF0dHJpYnV0ZXMpO1xuXG4gICAgT2JqZWN0LmVudHJpZXMocmVjdXJzaXZlQXR0cmlidXRlUGF0aHMpLmZvckVhY2goXG4gICAgICAoW2F0dHJpYnV0ZVBhdGgsIHN0cnVjdFBhdGhdKSA9PiB7XG4gICAgICAgIC8vIFRPRE86IGJ1aWxkIHRoaXMgdG8gYmUgYSBiaXQgbW9yZSBkZWZlbnNpdmUgKGUuZy4gcmVtb3ZlICEgb3BlcmF0b3IpXG4gICAgICAgIGNvbnN0IHJlY3Vyc2lvblRhcmdldFN0cnVjdEF0dHJpYnV0ZSA9IGdldFN0cnVjdEF0dHJpYnV0ZShcbiAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgIHN0cnVjdFBhdGgsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gYXR0cmlidXRlUGF0aC5zcGxpdChcIi5cIik7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZU5hbWUgPSBwYXJ0cy5wb3AoKTtcbiAgICAgICAgY29uc3QgcGFyZW50QXR0cmlidXRlID0gZ2V0U3RydWN0QXR0cmlidXRlKGF0dHJpYnV0ZXMsIHBhcnRzLmpvaW4oXCIuXCIpKTtcbiAgICAgICAgY29uc3QgaW5kZXhUb1JlcGxhY2UgPVxuICAgICAgICAgIHBhcmVudEF0dHJpYnV0ZS50eXBlLnN0cnVjdCEuYXR0cmlidXRlcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoYXR0KSA9PiBhdHQudGVycmFmb3JtTmFtZSA9PT0gYXR0cmlidXRlTmFtZSxcbiAgICAgICAgICApO1xuICAgICAgICBpZiAoaW5kZXhUb1JlcGxhY2UgPT09IC0xKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgYXR0cmlidXRlIGF0IHBhdGggXCIgKyBhdHRyaWJ1dGVQYXRoKTtcbiAgICAgICAgY29uc3QgcHJldmlvdXNBdHRyaWJ1dGUgPVxuICAgICAgICAgIHBhcmVudEF0dHJpYnV0ZS50eXBlLnN0cnVjdCEuYXR0cmlidXRlc1tpbmRleFRvUmVwbGFjZV07XG5cbiAgICAgICAgcGFyZW50QXR0cmlidXRlLnR5cGUuc3RydWN0IS5hdHRyaWJ1dGVzW2luZGV4VG9SZXBsYWNlXSA9XG4gICAgICAgICAgcmVjdXJzaW9uVGFyZ2V0U3RydWN0QXR0cmlidXRlOyAvLyBpbnRyb2R1Y2UgcmVjdXJzaW9uXG5cbiAgICAgICAgLy8gdWdseSwgcGxzIGPMtmHMtmzMtmzMtiByZWZhY3RvciBtZSBtYXliZVxuICAgICAgICAvLyB3ZSBzdG9yZSBhbGwgc3RydWN0cyBpbiB0aGlzLnN0cnVjdHMg4oCTIG5vdyB3ZSBuZWVkIHRvIGRpc3Bvc2UgYWxsIHN0cnVjdHMgdGhhdCBhcmUgcGFydCBvZiBwcmV2aW91c0F0dHJpYnV0ZVxuICAgICAgICBjb25zdCBkaXNwb3NlU3RydWN0cyA9IChhdHRyOiBBdHRyaWJ1dGVNb2RlbCkgPT4ge1xuICAgICAgICAgIGlmIChhdHRyLnR5cGUuc3RydWN0KSB7XG4gICAgICAgICAgICBhdHRyLnR5cGUuc3RydWN0LmF0dHJpYnV0ZXMuZm9yRWFjaChkaXNwb3NlU3RydWN0cyk7XG4gICAgICAgICAgICB0aGlzLnN0cnVjdHMgPSB0aGlzLnN0cnVjdHMuZmlsdGVyKChzKSA9PiBzICE9PSBhdHRyLnR5cGUuc3RydWN0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZGlzcG9zZVN0cnVjdHMocHJldmlvdXNBdHRyaWJ1dGUpO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgYXR0cmlidXRlcyA9IGRlZHVwbGljYXRlQXR0cmlidXRlc1dpdGhTYW1lTmFtZShhdHRyaWJ1dGVzKTtcblxuICAgIGNvbnN0IHJlc291cmNlTW9kZWwgPSBuZXcgUmVzb3VyY2VNb2RlbCh7XG4gICAgICB0ZXJyYWZvcm1UeXBlOiB0eXBlLFxuICAgICAgYmFzZU5hbWUsXG4gICAgICBmaWxlTmFtZSxcbiAgICAgIGZpbGVQYXRoLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgc2NoZW1hLFxuICAgICAgZnFwbixcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICB0ZXJyYWZvcm1TY2hlbWFUeXBlLFxuICAgICAgc3RydWN0czogdGhpcy5zdHJ1Y3RzLFxuICAgICAgY29uZmlnU3RydWN0TmFtZSxcbiAgICAgIHRhcmdldFZlcnNpb25zOiB0aGlzLnRhcmdldFZlcnNpb25zLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc291cmNlTW9kZWw7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckF0dHJpYnV0ZVR5cGUoXG4gICAgc2NvcGU6IFNjb3BlW10sXG4gICAgYXR0cmlidXRlVHlwZTogQXR0cmlidXRlVHlwZSB8IEF0dHJpYnV0ZU5lc3RlZFR5cGUsXG4gICAgcGFyZW50S2luZD86IHN0cmluZyxcbiAgKTogQXR0cmlidXRlVHlwZU1vZGVsIHtcbiAgICBjb25zdCBwYXJlbnQgPSBzY29wZVtzY29wZS5sZW5ndGggLSAxXTtcbiAgICBpZiAoc2hvdWxkU2tpcEF0dHJpYnV0ZShwYXJlbnQuYmFzZU5hbWUpKSB7XG4gICAgICByZXR1cm4gbmV3IE1hcEF0dHJpYnV0ZVR5cGVNb2RlbChuZXcgU2ltcGxlQXR0cmlidXRlVHlwZU1vZGVsKFwiYW55XCIpKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGF0dHJpYnV0ZVR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHN3aXRjaCAoYXR0cmlidXRlVHlwZSkge1xuICAgICAgICBjYXNlIFwiYm9vbFwiOlxuICAgICAgICAgIHJldHVybiBuZXcgU2ltcGxlQXR0cmlidXRlVHlwZU1vZGVsKFwiYm9vbGVhblwiKTtcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgIHJldHVybiBuZXcgU2ltcGxlQXR0cmlidXRlVHlwZU1vZGVsKFwic3RyaW5nXCIpO1xuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgcmV0dXJuIG5ldyBTaW1wbGVBdHRyaWJ1dGVUeXBlTW9kZWwoXCJudW1iZXJcIik7XG4gICAgICAgIGNhc2UgXCJkeW5hbWljXCI6XG4gICAgICAgICAgcmV0dXJuIG5ldyBNYXBBdHRyaWJ1dGVUeXBlTW9kZWwobmV3IFNpbXBsZUF0dHJpYnV0ZVR5cGVNb2RlbChcImFueVwiKSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHByaW1pdGl2ZSB0eXBlICR7YXR0cmlidXRlVHlwZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShhdHRyaWJ1dGVUeXBlKSkge1xuICAgICAgaWYgKGF0dHJpYnV0ZVR5cGUubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCBhcnJheWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBba2luZCwgdHlwZV0gPSBhdHRyaWJ1dGVUeXBlO1xuXG4gICAgICBpZiAoa2luZCA9PT0gXCJzZXRcIiB8fCBraW5kID09PSBcImxpc3RcIikge1xuICAgICAgICBjb25zdCBlbGVtZW50VHlwZSA9IHRoaXMucmVuZGVyQXR0cmlidXRlVHlwZShcbiAgICAgICAgICBzY29wZSxcbiAgICAgICAgICB0eXBlIGFzIEF0dHJpYnV0ZVR5cGUsXG4gICAgICAgICAgW2tpbmQsIHBhcmVudEtpbmRdLmpvaW4oXCJcIiksXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBraW5kID09PSBcImxpc3RcIlxuICAgICAgICAgID8gbmV3IExpc3RBdHRyaWJ1dGVUeXBlTW9kZWwoZWxlbWVudFR5cGUsIGZhbHNlLCBmYWxzZSlcbiAgICAgICAgICA6IG5ldyBTZXRBdHRyaWJ1dGVUeXBlTW9kZWwoZWxlbWVudFR5cGUsIGZhbHNlLCBmYWxzZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChraW5kID09PSBcIm1hcFwiKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMucmVuZGVyQXR0cmlidXRlVHlwZShcbiAgICAgICAgICBzY29wZSxcbiAgICAgICAgICB0eXBlIGFzIEF0dHJpYnV0ZVR5cGUsXG4gICAgICAgICAgW2tpbmQsIHBhcmVudEtpbmRdLmpvaW4oXCJcIiksXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBuZXcgTWFwQXR0cmlidXRlVHlwZU1vZGVsKHZhbHVlVHlwZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChraW5kID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGNvbnN0IG9iakF0dHJpYnV0ZXMgPSB0eXBlIGFzIHsgW25hbWU6IHN0cmluZ106IEF0dHJpYnV0ZVR5cGUgfTtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlczogeyBbbmFtZTogc3RyaW5nXTogQXR0cmlidXRlIH0gPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqQXR0cmlidXRlcykpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzW25hbWVdID0geyB0eXBlIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RydWN0ID0gdGhpcy5hZGRBbm9ueW1vdXNTdHJ1Y3QoXG4gICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICBwYXJlbnRLaW5kID8/IGtpbmQsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBuZXcgU3RydWN0QXR0cmlidXRlVHlwZU1vZGVsKHN0cnVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzQXR0cmlidXRlTmVzdGVkVHlwZShhdHRyaWJ1dGVUeXBlKSkge1xuICAgICAgbGV0IHN0cnVjdCA9IHVuZGVmaW5lZDtcbiAgICAgIGxldCB0eXBlTW9kZWwgPSB1bmRlZmluZWQ7XG4gICAgICBzd2l0Y2ggKGF0dHJpYnV0ZVR5cGUubmVzdGluZ19tb2RlKSB7XG4gICAgICAgIGNhc2UgXCJsaXN0XCI6XG4gICAgICAgICAgc3RydWN0ID0gdGhpcy5hZGRBbm9ueW1vdXNTdHJ1Y3QoXG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZVR5cGUuYXR0cmlidXRlcyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZVR5cGUubmVzdGluZ19tb2RlLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdHlwZU1vZGVsID0gbmV3IExpc3RBdHRyaWJ1dGVUeXBlTW9kZWwoXG4gICAgICAgICAgICBuZXcgU3RydWN0QXR0cmlidXRlVHlwZU1vZGVsKHN0cnVjdCksXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJzZXRcIjpcbiAgICAgICAgICBzdHJ1Y3QgPSB0aGlzLmFkZEFub255bW91c1N0cnVjdChcbiAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgICAgYXR0cmlidXRlVHlwZS5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgYXR0cmlidXRlVHlwZS5uZXN0aW5nX21vZGUsXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0eXBlTW9kZWwgPSBuZXcgU2V0QXR0cmlidXRlVHlwZU1vZGVsKFxuICAgICAgICAgICAgbmV3IFN0cnVjdEF0dHJpYnV0ZVR5cGVNb2RlbChzdHJ1Y3QpLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibWFwXCI6XG4gICAgICAgICAgc3RydWN0ID0gdGhpcy5hZGRBbm9ueW1vdXNTdHJ1Y3QoXG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZVR5cGUuYXR0cmlidXRlcyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZVR5cGUubmVzdGluZ19tb2RlLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdHlwZU1vZGVsID0gbmV3IE1hcEF0dHJpYnV0ZVR5cGVNb2RlbChcbiAgICAgICAgICAgIG5ldyBTdHJ1Y3RBdHRyaWJ1dGVUeXBlTW9kZWwoc3RydWN0KSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwic2luZ2xlXCI6XG4gICAgICAgICAgc3RydWN0ID0gdGhpcy5hZGRBbm9ueW1vdXNTdHJ1Y3QoXG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZVR5cGUuYXR0cmlidXRlcyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZVR5cGUubmVzdGluZ19tb2RlLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdHlwZU1vZGVsID0gbmV3IFN0cnVjdEF0dHJpYnV0ZVR5cGVNb2RlbChzdHJ1Y3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYG5lc3RlZF90eXBlIHdpdGggbmVzdGluZ19tb2RlIFwiJHtcbiAgICAgICAgICAgICAgYXR0cmlidXRlVHlwZS5uZXN0aW5nX21vZGVcbiAgICAgICAgICAgIH1cIiBub3Qgc3VwcG9ydGVkIChhdHRyaWJ1dGUgc2NvcGU6ICR7c2NvcGVcbiAgICAgICAgICAgICAgLm1hcCgocykgPT4gcy5mdWxsTmFtZSlcbiAgICAgICAgICAgICAgLmpvaW4oXCIsXCIpfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHR5cGVNb2RlbDtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gdHlwZSAke0pTT04uc3RyaW5naWZ5KGF0dHJpYnV0ZVR5cGUpfWApO1xuICB9XG5cbiAgcHVibGljIHJlbmRlckF0dHJpYnV0ZXNGb3JCbG9jayhwYXJlbnRUeXBlOiBTY29wZSwgYmxvY2s6IEJsb2NrKSB7XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IG5ldyBBcnJheTxBdHRyaWJ1dGVNb2RlbD4oKTtcblxuICAgIGZvciAoY29uc3QgW3RlcnJhZm9ybUF0dHJpYnV0ZU5hbWUsIGF0dF0gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICBibG9jay5hdHRyaWJ1dGVzIHx8IHt9LFxuICAgICkpIHtcbiAgICAgIGxldCB0eXBlOiBBdHRyaWJ1dGVUeXBlTW9kZWw7XG4gICAgICBsZXQgZm9yY2VQbGFpbkdldHRlclR5cGUgPSBmYWxzZTtcbiAgICAgIGlmIChzaG91bGRTa2lwQXR0cmlidXRlKHBhcmVudFR5cGUuZnVsbE5hbWUodGVycmFmb3JtQXR0cmlidXRlTmFtZSkpKSB7XG4gICAgICAgIHR5cGUgPSBuZXcgU2tpcHBlZEF0dHJpYnV0ZVR5cGVNb2RlbCgpO1xuICAgICAgICBmb3JjZVBsYWluR2V0dGVyVHlwZSA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0eXBlID0gdGhpcy5yZW5kZXJBdHRyaWJ1dGVUeXBlKFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIHBhcmVudFR5cGUsXG4gICAgICAgICAgICBuZXcgU2NvcGUoe1xuICAgICAgICAgICAgICBuYW1lOiB0ZXJyYWZvcm1BdHRyaWJ1dGVOYW1lLFxuICAgICAgICAgICAgICBwYXJlbnQ6IHBhcmVudFR5cGUsXG4gICAgICAgICAgICAgIGlzUHJvdmlkZXI6IHBhcmVudFR5cGUuaXNQcm92aWRlcixcbiAgICAgICAgICAgICAgaXNDb21wdXRlZDogISFhdHQuY29tcHV0ZWQsXG4gICAgICAgICAgICAgIGlzT3B0aW9uYWw6ICEhYXR0Lm9wdGlvbmFsLFxuICAgICAgICAgICAgICBpc1JlcXVpcmVkOiAhIWF0dC5yZXF1aXJlZCxcbiAgICAgICAgICAgICAgaXNOZXN0ZWRUeXBlOiBpc05lc3RlZFR5cGVBdHRyaWJ1dGUoYXR0KSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgYXR0LnR5cGUgfHwgYXR0Lm5lc3RlZF90eXBlLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuYW1lID0gdG9DYW1lbENhc2UodGVycmFmb3JtQXR0cmlidXRlTmFtZSk7XG5cbiAgICAgIGF0dHJpYnV0ZXMucHVzaChcbiAgICAgICAgbmV3IEF0dHJpYnV0ZU1vZGVsKHtcbiAgICAgICAgICB0ZXJyYWZvcm1GdWxsTmFtZTogcGFyZW50VHlwZS5mdWxsTmFtZSh0ZXJyYWZvcm1BdHRyaWJ1dGVOYW1lKSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogYXR0LmRlc2NyaXB0aW9uLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgc3RvcmFnZU5hbWU6IGBfJHtuYW1lfWAsXG4gICAgICAgICAgY29tcHV0ZWQ6ICEhYXR0LmNvbXB1dGVkLFxuICAgICAgICAgIG9wdGlvbmFsOiAhIWF0dC5vcHRpb25hbCxcbiAgICAgICAgICB0ZXJyYWZvcm1OYW1lOiB0ZXJyYWZvcm1BdHRyaWJ1dGVOYW1lLFxuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgcHJvdmlkZXI6IHBhcmVudFR5cGUuaXNQcm92aWRlcixcbiAgICAgICAgICByZXF1aXJlZDogISFhdHQucmVxdWlyZWQsXG4gICAgICAgICAgZm9yY2VQbGFpbkdldHRlclR5cGUsXG4gICAgICAgICAgaXNXcml0ZU9ubHk6ICEhYXR0LndyaXRlX29ubHksXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtibG9ja1R5cGVOYW1lLCBibG9ja1R5cGVdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgICAgYmxvY2suYmxvY2tfdHlwZXMgfHwge30sXG4gICAgKSkge1xuICAgICAgaWYgKHNob3VsZFNraXBBdHRyaWJ1dGUocGFyZW50VHlwZS5mdWxsTmFtZShibG9ja1R5cGVOYW1lKSkpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRvQ2FtZWxDYXNlKGJsb2NrVHlwZU5hbWUpO1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBuZXcgU2NvcGUoe1xuICAgICAgICAgIG5hbWU6IGJsb2NrVHlwZU5hbWUsXG4gICAgICAgICAgcGFyZW50OiBwYXJlbnRUeXBlLFxuICAgICAgICAgIGlzUHJvdmlkZXI6IHBhcmVudFR5cGUuaXNQcm92aWRlcixcbiAgICAgICAgfSk7XG4gICAgICAgIGF0dHJpYnV0ZXMucHVzaChcbiAgICAgICAgICBuZXcgQXR0cmlidXRlTW9kZWwoe1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHRlcnJhZm9ybU5hbWU6IGJsb2NrVHlwZU5hbWUsXG4gICAgICAgICAgICB0ZXJyYWZvcm1GdWxsTmFtZTogcGFyZW50LmZ1bGxOYW1lKGJsb2NrVHlwZU5hbWUpLFxuICAgICAgICAgICAgdHlwZTogbmV3IFNraXBwZWRBdHRyaWJ1dGVUeXBlTW9kZWwoKSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgJHtibG9ja1R5cGVOYW1lfSBibG9ja2AsXG4gICAgICAgICAgICBzdG9yYWdlTmFtZTogYF8ke25hbWV9YCxcbiAgICAgICAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHJvdmlkZXI6IHBhcmVudFR5cGUuaXNQcm92aWRlcixcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBjcmVhdGUgYSBzdHJ1Y3QgZm9yIHRoaXMgYmxvY2tcbiAgICAgIGxldCBibG9ja0F0dHJpYnV0ZXMgPSB0aGlzLnJlbmRlckF0dHJpYnV0ZXNGb3JCbG9jayhcbiAgICAgICAgbmV3IFNjb3BlKHtcbiAgICAgICAgICBuYW1lOiBgJHtwYXJlbnRUeXBlLm5hbWV9XyR7YmxvY2tUeXBlTmFtZX1gLFxuICAgICAgICAgIHBhcmVudDogcGFyZW50VHlwZSxcbiAgICAgICAgICBpc1Byb3ZpZGVyOiBwYXJlbnRUeXBlLmlzUHJvdmlkZXIsXG4gICAgICAgICAgaW5CbG9ja1R5cGU6IHRydWUsXG4gICAgICAgIH0pLFxuICAgICAgICBibG9ja1R5cGUuYmxvY2ssXG4gICAgICApO1xuXG4gICAgICBibG9ja0F0dHJpYnV0ZXMgPSBkZWR1cGxpY2F0ZUF0dHJpYnV0ZXNXaXRoU2FtZU5hbWUoYmxvY2tBdHRyaWJ1dGVzKTtcblxuICAgICAgY29uc3QgYmxvY2tTdHJ1Y3QgPSB0aGlzLmFkZFN0cnVjdChcbiAgICAgICAgW1xuICAgICAgICAgIHBhcmVudFR5cGUsXG4gICAgICAgICAgbmV3IFNjb3BlKHtcbiAgICAgICAgICAgIG5hbWU6IGJsb2NrVHlwZU5hbWUsXG4gICAgICAgICAgICBwYXJlbnQ6IHBhcmVudFR5cGUsXG4gICAgICAgICAgICBpc1Byb3ZpZGVyOiBwYXJlbnRUeXBlLmlzUHJvdmlkZXIsXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICAgIGJsb2NrQXR0cmlidXRlcyxcbiAgICAgICAgYmxvY2tUeXBlLm5lc3RpbmdfbW9kZSxcbiAgICAgICAgKGJsb2NrVHlwZS5uZXN0aW5nX21vZGUgPT09IFwibGlzdFwiIHx8XG4gICAgICAgICAgYmxvY2tUeXBlLm5lc3RpbmdfbW9kZSA9PT0gXCJzZXRcIikgJiZcbiAgICAgICAgICBibG9ja1R5cGUubWF4X2l0ZW1zID09PSAxLFxuICAgICAgKTtcblxuICAgICAgLy8gZGVmaW5lIHRoZSBhdHRyaWJ1dGVcbiAgICAgIGF0dHJpYnV0ZXMucHVzaChcbiAgICAgICAgYXR0cmlidXRlRm9yQmxvY2tUeXBlKFxuICAgICAgICAgIGJsb2NrVHlwZU5hbWUsXG4gICAgICAgICAgYmxvY2tUeXBlLFxuICAgICAgICAgIGJsb2NrU3RydWN0LFxuICAgICAgICAgIHBhcmVudFR5cGUuaXNQcm92aWRlcixcbiAgICAgICAgICBwYXJlbnRUeXBlLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXR0cmlidXRlcztcblxuICAgIGZ1bmN0aW9uIGF0dHJpYnV0ZUZvckJsb2NrVHlwZShcbiAgICAgIHRlcnJhZm9ybU5hbWU6IHN0cmluZyxcbiAgICAgIGJsb2NrVHlwZTogQmxvY2tUeXBlLFxuICAgICAgc3RydWN0OiBTdHJ1Y3QsXG4gICAgICBpc1Byb3ZpZGVyOiBib29sZWFuLFxuICAgICAgcGFyZW50OiBTY29wZSxcbiAgICApOiBBdHRyaWJ1dGVNb2RlbCB7XG4gICAgICBjb25zdCBuYW1lID0gdG9DYW1lbENhc2UodGVycmFmb3JtTmFtZSk7XG4gICAgICBsZXQgb3B0aW9uYWw6IGJvb2xlYW47XG4gICAgICBsZXQgcmVxdWlyZWQ6IGJvb2xlYW47XG5cbiAgICAgIHN3aXRjaCAoYmxvY2tUeXBlLm5lc3RpbmdfbW9kZSkge1xuICAgICAgICBjYXNlIFwic2luZ2xlXCI6XG4gICAgICAgICAgb3B0aW9uYWwgPSAhc3RydWN0LmF0dHJpYnV0ZXMuc29tZSgoeCkgPT4gIXgub3B0aW9uYWwpO1xuICAgICAgICAgIHJlcXVpcmVkID0gIXN0cnVjdC5hdHRyaWJ1dGVzLnNvbWUoKHgpID0+ICF4LnJlcXVpcmVkKTtcblxuICAgICAgICAgIC8vIFRoaXMgaXMgZm9yIGJ1ZyAjMzU3MCBhcyBib3RoIG9wdGlvbmFsIGFuZCByZXF1aXJlZCBldmFsdWF0ZSB0byBmYWxzZSB1bmRlciBzb21lIGNpcmN1bXN0YW5jZXNcbiAgICAgICAgICAvLyAodGhpcyB0aGVuIGNhdXNlcyB0aGUgY29tcHV0ZWQgYmxvY2sgdG8gbm90IGJlIHBhcnQgb2YgYXNzaWduYWJsZUF0dHJpYnV0ZXMgYW5kIHRodXMgc2tpcHBlZCBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUpXG4gICAgICAgICAgLy8gSGVuY2U6IElmIGJvdGggb3B0aW9uYWwgYW5kIHJlcXVpcmVkIGFyZSBmYWxzZSwgc2V0IG9wdGlvbmFsIHRvIHRydWUgSUYgYXQgbGVhc3Qgb25lXG4gICAgICAgICAgLy8gYXR0cmlidXRlIGluIHRoZSBibG9jayBoYXMgb3B0aW9uYWwgPSB0cnVlIG9yIHJlcXVpcmVkID0gdHJ1ZSwgYXMgdGhpcyB3b3VsZCBtZWFuIHRoYXQgYXQgbGVhc3Qgc29tZXRoaW5nIGNhbiBiZSBzZXRcbiAgICAgICAgICAvLyBhbmQgdGhlIGJsb2NrIGlzIG5vdCBhbGwgY29tcHV0ZWQuXG4gICAgICAgICAgaWYgKCFvcHRpb25hbCAmJiAhcmVxdWlyZWQpIHtcbiAgICAgICAgICAgIG9wdGlvbmFsID0gc3RydWN0LmF0dHJpYnV0ZXMuc29tZSgoeCkgPT4geC5vcHRpb25hbCB8fCB4LnJlcXVpcmVkKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbmV3IEF0dHJpYnV0ZU1vZGVsKHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB0ZXJyYWZvcm1OYW1lLFxuICAgICAgICAgICAgdGVycmFmb3JtRnVsbE5hbWU6IHBhcmVudC5mdWxsTmFtZSh0ZXJyYWZvcm1OYW1lKSxcbiAgICAgICAgICAgIHR5cGU6IG5ldyBTdHJ1Y3RBdHRyaWJ1dGVUeXBlTW9kZWwoc3RydWN0KSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgJHt0ZXJyYWZvcm1OYW1lfSBibG9ja2AsXG4gICAgICAgICAgICBzdG9yYWdlTmFtZTogYF8ke25hbWV9YCxcbiAgICAgICAgICAgIG9wdGlvbmFsLFxuICAgICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHJvdmlkZXI6IGlzUHJvdmlkZXIsXG4gICAgICAgICAgICByZXF1aXJlZCxcbiAgICAgICAgICB9KTtcblxuICAgICAgICBjYXNlIFwibWFwXCI6XG4gICAgICAgICAgcmV0dXJuIG5ldyBBdHRyaWJ1dGVNb2RlbCh7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdGVycmFmb3JtTmFtZSxcbiAgICAgICAgICAgIHRlcnJhZm9ybUZ1bGxOYW1lOiBwYXJlbnQuZnVsbE5hbWUodGVycmFmb3JtTmFtZSksXG4gICAgICAgICAgICB0eXBlOiBuZXcgTWFwQXR0cmlidXRlVHlwZU1vZGVsKFxuICAgICAgICAgICAgICBuZXcgU3RydWN0QXR0cmlidXRlVHlwZU1vZGVsKHN0cnVjdCksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke3RlcnJhZm9ybU5hbWV9IGJsb2NrYCxcbiAgICAgICAgICAgIHN0b3JhZ2VOYW1lOiBgXyR7bmFtZX1gLFxuICAgICAgICAgICAgb3B0aW9uYWw6IGZhbHNlLFxuICAgICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHJvdmlkZXI6IGlzUHJvdmlkZXIsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgY2FzZSBcImxpc3RcIjpcbiAgICAgICAgY2FzZSBcInNldFwiOlxuICAgICAgICAgIG9wdGlvbmFsID1cbiAgICAgICAgICAgIGJsb2NrVHlwZS5taW5faXRlbXMgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBibG9ja1R5cGUubWluX2l0ZW1zIDwgMTtcbiAgICAgICAgICByZXF1aXJlZCA9XG4gICAgICAgICAgICBibG9ja1R5cGUubWluX2l0ZW1zID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IGJsb2NrVHlwZS5taW5faXRlbXMgPiAwO1xuICAgICAgICAgIHJldHVybiBuZXcgQXR0cmlidXRlTW9kZWwoe1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHRlcnJhZm9ybU5hbWU6IHRlcnJhZm9ybU5hbWUsXG4gICAgICAgICAgICB0ZXJyYWZvcm1GdWxsTmFtZTogcGFyZW50LmZ1bGxOYW1lKHRlcnJhZm9ybU5hbWUpLFxuICAgICAgICAgICAgdHlwZTpcbiAgICAgICAgICAgICAgYmxvY2tUeXBlLm5lc3RpbmdfbW9kZSA9PT0gXCJsaXN0XCJcbiAgICAgICAgICAgICAgICA/IG5ldyBMaXN0QXR0cmlidXRlVHlwZU1vZGVsKFxuICAgICAgICAgICAgICAgICAgICBuZXcgU3RydWN0QXR0cmlidXRlVHlwZU1vZGVsKHN0cnVjdCksXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrVHlwZS5tYXhfaXRlbXMgPT09IDEsXG4gICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBuZXcgU2V0QXR0cmlidXRlVHlwZU1vZGVsKFxuICAgICAgICAgICAgICAgICAgICBuZXcgU3RydWN0QXR0cmlidXRlVHlwZU1vZGVsKHN0cnVjdCksXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrVHlwZS5tYXhfaXRlbXMgPT09IDEsXG4gICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke3RlcnJhZm9ybU5hbWV9IGJsb2NrYCxcbiAgICAgICAgICAgIHN0b3JhZ2VOYW1lOiBgXyR7bmFtZX1gLFxuICAgICAgICAgICAgb3B0aW9uYWwsXG4gICAgICAgICAgICBjb21wdXRlZDogZmFsc2UsXG4gICAgICAgICAgICBwcm92aWRlcjogaXNQcm92aWRlcixcbiAgICAgICAgICAgIHJlcXVpcmVkLFxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGFkZEFub255bW91c1N0cnVjdChcbiAgICBzY29wZTogU2NvcGVbXSxcbiAgICBhdHRyczogeyBbbmFtZTogc3RyaW5nXTogQXR0cmlidXRlIH0gfCB1bmRlZmluZWQsXG4gICAgbmVzdGluZ19tb2RlOiBzdHJpbmcsXG4gICkge1xuICAgIGxldCBhdHRyaWJ1dGVzID0gbmV3IEFycmF5PEF0dHJpYnV0ZU1vZGVsPigpO1xuICAgIGNvbnN0IHBhcmVudCA9IHNjb3BlW3Njb3BlLmxlbmd0aCAtIDFdO1xuICAgIGlmIChhdHRycykge1xuICAgICAgZm9yIChjb25zdCBbdGVycmFmb3JtTmFtZSwgYXR0XSBvZiBPYmplY3QuZW50cmllcyhhdHRycyB8fCB7fSkpIHtcbiAgICAgICAgLy8gbmVzdGVkIHR5cGVzIHN1cHBvcnQgY29tcHV0ZWQsIG9wdGlvbmFsIGFuZCByZXF1aXJlZCBvbiBhdHRyaWJ1dGUgbGV2ZWxcbiAgICAgICAgLy8gaWYgcGFyZW50IGlzIGNvbXB1dGVkLCBjaGlsZCBhbHdheXMgaXMgY29tcHV0ZWQgYXMgd2VsbFxuICAgICAgICBjb25zdCBjb21wdXRlZCA9XG4gICAgICAgICAgISFwYXJlbnQuaXNDb21wdXRlZCB8fCAocGFyZW50LmlzTmVzdGVkVHlwZSAmJiAhIWF0dC5jb21wdXRlZCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbmFsID0gcGFyZW50LmlzTmVzdGVkVHlwZVxuICAgICAgICAgID8gISFhdHQub3B0aW9uYWxcbiAgICAgICAgICA6ICEhcGFyZW50LmlzT3B0aW9uYWw7XG4gICAgICAgIGNvbnN0IHJlcXVpcmVkID0gcGFyZW50LmlzTmVzdGVkVHlwZVxuICAgICAgICAgID8gISFhdHQucmVxdWlyZWRcbiAgICAgICAgICA6ICEhcGFyZW50LmlzUmVxdWlyZWQ7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0b0NhbWVsQ2FzZSh0ZXJyYWZvcm1OYW1lKTtcbiAgICAgICAgY29uc3QgdHlwZSA9IHRoaXMucmVuZGVyQXR0cmlidXRlVHlwZShcbiAgICAgICAgICBbXG4gICAgICAgICAgICAuLi5zY29wZSxcbiAgICAgICAgICAgIG5ldyBTY29wZSh7XG4gICAgICAgICAgICAgIG5hbWU6IHRlcnJhZm9ybU5hbWUsXG4gICAgICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICAgICAgaXNQcm92aWRlcjogcGFyZW50LmlzUHJvdmlkZXIsXG4gICAgICAgICAgICAgIGlzQ29tcHV0ZWQ6IGNvbXB1dGVkLFxuICAgICAgICAgICAgICBpc09wdGlvbmFsOiBvcHRpb25hbCxcbiAgICAgICAgICAgICAgaXNSZXF1aXJlZDogcmVxdWlyZWQsXG4gICAgICAgICAgICAgIGlzTmVzdGVkVHlwZTogcGFyZW50LmlzTmVzdGVkVHlwZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgYXR0LnR5cGUgfHwgYXR0Lm5lc3RlZF90eXBlLFxuICAgICAgICApO1xuICAgICAgICBhdHRyaWJ1dGVzLnB1c2goXG4gICAgICAgICAgbmV3IEF0dHJpYnV0ZU1vZGVsKHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBzdG9yYWdlTmFtZTogYF8ke25hbWV9YCxcbiAgICAgICAgICAgIGNvbXB1dGVkOiBjb21wdXRlZCxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBhdHQuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBvcHRpb25hbDogb3B0aW9uYWwsXG4gICAgICAgICAgICB0ZXJyYWZvcm1OYW1lLFxuICAgICAgICAgICAgdGVycmFmb3JtRnVsbE5hbWU6IHBhcmVudC5mdWxsTmFtZSh0ZXJyYWZvcm1OYW1lKSxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBwcm92aWRlcjogcGFyZW50LmlzUHJvdmlkZXIsXG4gICAgICAgICAgICByZXF1aXJlZDogcmVxdWlyZWQsXG4gICAgICAgICAgICBpc1dyaXRlT25seTogISFhdHQud3JpdGVfb25seSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhdHRyaWJ1dGVzID0gZGVkdXBsaWNhdGVBdHRyaWJ1dGVzV2l0aFNhbWVOYW1lKGF0dHJpYnV0ZXMpO1xuXG4gICAgcmV0dXJuIHRoaXMuYWRkU3RydWN0KHNjb3BlLCBhdHRyaWJ1dGVzLCBuZXN0aW5nX21vZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRTdHJ1Y3QoXG4gICAgc2NvcGU6IFNjb3BlW10sXG4gICAgYXR0cmlidXRlczogQXR0cmlidXRlTW9kZWxbXSxcbiAgICBuZXN0aW5nX21vZGU6IHN0cmluZyxcbiAgICBpc1NpbmdsZUl0ZW0gPSBmYWxzZSxcbiAgKSB7XG4gICAgY29uc3QgcG9zc2libGVOYW1lID0gdG9QYXNjYWxDYXNlKFxuICAgICAgc2NvcGUubWFwKCh4KSA9PiB0b1NuYWtlQ2FzZSh4Lm5hbWUpKS5qb2luKFwiX1wiKSxcbiAgICApO1xuICAgIGNvbnN0IG5hbWUgPSB0aGlzLnVuaXF1ZUNsYXNzTmFtZShcbiAgICAgIGlzUmVzZXJ2ZWRTdHJ1Y3RDbGFzc05hbWUocG9zc2libGVOYW1lKVxuICAgICAgICA/IGAke3Bvc3NpYmxlTmFtZX1TdHJ1Y3RgXG4gICAgICAgIDogcG9zc2libGVOYW1lLFxuICAgICk7XG5cbiAgICBjb25zdCBwYXJlbnQgPSBzY29wZVtzY29wZS5sZW5ndGggLSAxXTtcbiAgICAvLyBibG9ja1R5cGUubmVzdGluZ19tb2RlID0+IGxpc3Qvc2V0ICYgYmxvY2tUeXBlLm1heF9pdGVtcyA9PT0gMSxcbiAgICBjb25zdCBpc0NsYXNzID0gKHBhcmVudC5pc0NvbXB1dGVkICYmICFwYXJlbnQuaXNPcHRpb25hbCkgfHwgaXNTaW5nbGVJdGVtO1xuICAgIGNvbnN0IGlzQW5vbnltb3VzID0gdHJ1ZTtcbiAgICBjb25zdCBzID0gbmV3IFN0cnVjdChcbiAgICAgIG5hbWUsXG4gICAgICBhdHRyaWJ1dGVzLFxuICAgICAgaXNDbGFzcyxcbiAgICAgIGlzQW5vbnltb3VzLFxuICAgICAgaXNTaW5nbGVJdGVtLFxuICAgICAgbmVzdGluZ19tb2RlLFxuICAgICk7XG4gICAgdGhpcy5zdHJ1Y3RzLnB1c2gocyk7XG4gICAgcmV0dXJuIHM7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlc291cmNlUGFyc2VyIHtcbiAgcHJpdmF0ZSB1bmlxdWVDbGFzc25hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIHVuaXF1ZUJhc2VOYW1lczogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSByZXNvdXJjZXM6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTW9kZWw+ID0ge307XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB0YXJnZXRWZXJzaW9ucz86IFRlcnJhZm9ybVRhcmdldFZlcnNpb25zKSB7fVxuXG4gIHB1YmxpYyBwYXJzZShcbiAgICBmcXBuOiBGUVBOLFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBzY2hlbWE6IFNjaGVtYSxcbiAgICB0ZXJyYWZvcm1UeXBlOiBzdHJpbmcsXG4gICAgY29uc3RyYWludD86IENvbnN0cnVjdHNNYWtlclRhcmdldCxcbiAgKTogUmVzb3VyY2VNb2RlbCB7XG4gICAgaWYgKHRoaXMucmVzb3VyY2VzW3R5cGVdKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvdXJjZXNbdHlwZV07XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcihcbiAgICAgIHRoaXMudW5pcXVlQ2xhc3NuYW1lcyxcbiAgICAgIHRoaXMudW5pcXVlQmFzZU5hbWVzLFxuICAgICAgdGhpcy50YXJnZXRWZXJzaW9ucyxcbiAgICApO1xuICAgIGNvbnN0IHJlc291cmNlID0gcGFyc2VyLnJlc291cmNlRnJvbShcbiAgICAgIGZxcG4sXG4gICAgICB0eXBlLFxuICAgICAgc2NoZW1hLFxuICAgICAgdGVycmFmb3JtVHlwZSxcbiAgICAgIGNvbnN0cmFpbnQsXG4gICAgKTtcbiAgICB0aGlzLnJlc291cmNlc1t0eXBlXSA9IHJlc291cmNlO1xuICAgIHJldHVybiByZXNvdXJjZTtcbiAgfVxuXG4gIC8vIFVzZWQgYnkgY29udmVydCB0byBkZXRlcm1pbmUgdGhlIHJpZ2h0IG5hbWUgZm9yIGEgY2xhc3NcbiAgcHVibGljIGdldENsYXNzTmFtZUZvclJlc291cmNlKHRlcnJhZm9ybVR5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5yZXNvdXJjZXNbdGVycmFmb3JtVHlwZV07XG4gICAgcmV0dXJuIHJlc291cmNlID8gcmVzb3VyY2UuY2xhc3NOYW1lIDogXCJcIjtcbiAgfVxuXG4gIC8vIFVzZWQgYnkgY29udmVydCB0byBkZXRlcm1pbmUgdGhlIHJpZ2h0IG5hbWUgZm9yIGEgbmFtZXNwYWNlXG4gIHB1YmxpYyBnZXROYW1lc3BhY2VOYW1lRm9yUmVzb3VyY2UodGVycmFmb3JtVHlwZTogc3RyaW5nKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlIGV4dGVybmFsIHByb3ZpZGVyIHNpbmNlIHRoZSBuYW1lIG9mIHJlc291cmNlIGRvZXNuJ3QgaGF2ZSBhIHByZWZpeFxuICAgIGlmICh0ZXJyYWZvcm1UeXBlID09PSBcImRhdGFfZXh0ZXJuYWxfXCIpIHtcbiAgICAgIHRlcnJhZm9ybVR5cGUgPSBcImRhdGFfZXh0ZXJuYWxcIjtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2VzW3RlcnJhZm9ybVR5cGVdO1xuICAgIGlmICghcmVzb3VyY2UpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICBjb25zdCBmb2xkZXIgPSBgcHJvdmlkZXJzLyR7cmVzb3VyY2UucHJvdmlkZXJ9YDtcbiAgICByZXR1cm4gcmVzb3VyY2UuZmlsZVBhdGgucmVwbGFjZShgJHtmb2xkZXJ9L2AsIFwiXCIpLnJlcGxhY2UoXCIvaW5kZXgudHNcIiwgXCJcIik7XG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cdktn/provider-generator",
|
|
3
|
-
"version": "0.25.0-pre.
|
|
3
|
+
"version": "0.25.0-pre.38",
|
|
4
4
|
"description": "Exposes API to generate Terraform CDK provider bindings",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -35,9 +35,9 @@
|
|
|
35
35
|
"glob": "13.0.6",
|
|
36
36
|
"jsii": "~6.0.0",
|
|
37
37
|
"jsii-pacmak": "1.140.0",
|
|
38
|
-
"@cdktn/commons": "0.25.0-pre.
|
|
39
|
-
"@cdktn/provider-schema": "0.25.0-pre.
|
|
40
|
-
"cdktn": "0.25.0-pre.
|
|
38
|
+
"@cdktn/commons": "0.25.0-pre.38",
|
|
39
|
+
"@cdktn/provider-schema": "0.25.0-pre.38",
|
|
40
|
+
"cdktn": "0.25.0-pre.38"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@types/fs-extra": "11.0.4",
|
|
@@ -339,6 +339,7 @@ export class ConstructsMaker {
|
|
|
339
339
|
const endTSTimer = logTimespan(`Generate Typescript for ${target.name}`);
|
|
340
340
|
const generator = new TerraformProviderGenerator(this.code, schema, {
|
|
341
341
|
importExtension: this.options.languageOptions?.importExtension,
|
|
342
|
+
targetVersions: this.options.targetVersions,
|
|
342
343
|
});
|
|
343
344
|
generator.generate(target);
|
|
344
345
|
|
|
@@ -5,7 +5,11 @@ import path from "path";
|
|
|
5
5
|
import { FQPN, parseFQPN, ProviderName } from "@cdktn/provider-schema";
|
|
6
6
|
import { AttributeModel } from "./attribute-model";
|
|
7
7
|
import { Struct, ConfigStruct } from "./struct";
|
|
8
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
Schema,
|
|
10
|
+
TerraformTargetVersions,
|
|
11
|
+
registryForTargetVersions,
|
|
12
|
+
} from "@cdktn/commons";
|
|
9
13
|
import { ProviderFunctionsModel } from "./provider-function-model";
|
|
10
14
|
|
|
11
15
|
// Limit is 1200 to prevent stack size error.
|
|
@@ -25,6 +29,7 @@ interface ResourceModelOptions {
|
|
|
25
29
|
schema: Schema;
|
|
26
30
|
terraformSchemaType: string;
|
|
27
31
|
configStructName: string;
|
|
32
|
+
targetVersions?: TerraformTargetVersions;
|
|
28
33
|
}
|
|
29
34
|
|
|
30
35
|
type DefinitionPath = string;
|
|
@@ -35,6 +40,7 @@ export class ResourceModel {
|
|
|
35
40
|
public baseName: string;
|
|
36
41
|
public provider: ProviderName;
|
|
37
42
|
public fqpn: FQPN;
|
|
43
|
+
private readonly targetVersions?: TerraformTargetVersions;
|
|
38
44
|
public providerVersionConstraint?: string;
|
|
39
45
|
public providerVersion?: string;
|
|
40
46
|
public terraformProviderSource?: string;
|
|
@@ -68,6 +74,7 @@ export class ResourceModel {
|
|
|
68
74
|
this.attributes = options.attributes;
|
|
69
75
|
this.schema = options.schema;
|
|
70
76
|
this.fqpn = options.fqpn;
|
|
77
|
+
this.targetVersions = options.targetVersions;
|
|
71
78
|
this.provider = parseFQPN(options.fqpn).name;
|
|
72
79
|
this.terraformProviderName = this.provider;
|
|
73
80
|
this.fileName = options.fileName;
|
|
@@ -109,15 +116,26 @@ export class ResourceModel {
|
|
|
109
116
|
}
|
|
110
117
|
|
|
111
118
|
public get linkToDocs(): string {
|
|
112
|
-
|
|
119
|
+
// Keyed off the project's declared targets, not the FQPN hostname: that
|
|
120
|
+
// hostname reflects whichever CLI fetched the schema, which would make the
|
|
121
|
+
// generated link differ between a terraform and a tofu `cdktn get`.
|
|
122
|
+
const registry = registryForTargetVersions(this.targetVersions);
|
|
123
|
+
const { namespace, name } = parseFQPN(this.fqpn);
|
|
113
124
|
const version = this.providerVersion || "latest";
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
125
|
+
const kind = this.isProvider
|
|
126
|
+
? "provider"
|
|
127
|
+
: this.isDataSource
|
|
128
|
+
? "data-source"
|
|
129
|
+
: this.isEphemeralResource
|
|
130
|
+
? "ephemeral-resource"
|
|
131
|
+
: "resource";
|
|
132
|
+
return registry.docsUrl(
|
|
133
|
+
namespace,
|
|
134
|
+
name,
|
|
135
|
+
version,
|
|
136
|
+
kind,
|
|
137
|
+
this.terraformDocName,
|
|
138
|
+
);
|
|
121
139
|
}
|
|
122
140
|
|
|
123
141
|
public get isProvider(): boolean {
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
logger,
|
|
9
9
|
ProviderSchema,
|
|
10
10
|
TerraformProviderConstraint,
|
|
11
|
+
TerraformTargetVersions,
|
|
11
12
|
} from "@cdktn/commons";
|
|
12
13
|
import { FQPN, parseFQPN, ProviderName } from "@cdktn/provider-schema";
|
|
13
14
|
import {
|
|
@@ -29,6 +30,8 @@ export interface TerraformProviderGeneratorOptions {
|
|
|
29
30
|
* Defaults to "" (CommonJS).
|
|
30
31
|
*/
|
|
31
32
|
readonly importExtension?: string;
|
|
33
|
+
/** Project's declared targetVersions; selects the docs registry. */
|
|
34
|
+
readonly targetVersions?: TerraformTargetVersions;
|
|
32
35
|
}
|
|
33
36
|
|
|
34
37
|
interface ProviderData {
|
|
@@ -107,7 +110,7 @@ export interface ProviderConstraints {
|
|
|
107
110
|
}
|
|
108
111
|
|
|
109
112
|
export class TerraformProviderGenerator {
|
|
110
|
-
private resourceParser
|
|
113
|
+
private resourceParser: ResourceParser;
|
|
111
114
|
private resourceEmitter: ResourceEmitter;
|
|
112
115
|
private structEmitter: StructEmitter;
|
|
113
116
|
private providerFunctionsEmitter: ProviderFunctionsEmitter;
|
|
@@ -126,6 +129,7 @@ export class TerraformProviderGenerator {
|
|
|
126
129
|
) {
|
|
127
130
|
this.code.indentation = 2;
|
|
128
131
|
this.importExtension = options.importExtension ?? "";
|
|
132
|
+
this.resourceParser = new ResourceParser(options.targetVersions);
|
|
129
133
|
this.resourceEmitter = new ResourceEmitter(this.code, this.importExtension);
|
|
130
134
|
this.structEmitter = new StructEmitter(this.code, this.importExtension);
|
|
131
135
|
this.providerFunctionsEmitter = new ProviderFunctionsEmitter(this.code);
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
isAttributeNestedType,
|
|
12
12
|
isNestedTypeAttribute,
|
|
13
13
|
Schema,
|
|
14
|
+
TerraformTargetVersions,
|
|
14
15
|
} from "@cdktn/commons";
|
|
15
16
|
import { ProviderName, FQPN, parseFQPN } from "@cdktn/provider-schema";
|
|
16
17
|
import {
|
|
@@ -123,6 +124,7 @@ class Parser {
|
|
|
123
124
|
constructor(
|
|
124
125
|
private classNames: string[],
|
|
125
126
|
private usedBaseNames: Map<string, string>,
|
|
127
|
+
private targetVersions?: TerraformTargetVersions,
|
|
126
128
|
) {}
|
|
127
129
|
|
|
128
130
|
private uniqueClassName(className: string): string {
|
|
@@ -294,6 +296,7 @@ class Parser {
|
|
|
294
296
|
terraformSchemaType,
|
|
295
297
|
structs: this.structs,
|
|
296
298
|
configStructName,
|
|
299
|
+
targetVersions: this.targetVersions,
|
|
297
300
|
});
|
|
298
301
|
|
|
299
302
|
return resourceModel;
|
|
@@ -727,6 +730,8 @@ export class ResourceParser {
|
|
|
727
730
|
private uniqueBaseNames: Map<string, string> = new Map();
|
|
728
731
|
private resources: Record<string, ResourceModel> = {};
|
|
729
732
|
|
|
733
|
+
constructor(private readonly targetVersions?: TerraformTargetVersions) {}
|
|
734
|
+
|
|
730
735
|
public parse(
|
|
731
736
|
fqpn: FQPN,
|
|
732
737
|
type: string,
|
|
@@ -738,7 +743,11 @@ export class ResourceParser {
|
|
|
738
743
|
return this.resources[type];
|
|
739
744
|
}
|
|
740
745
|
|
|
741
|
-
const parser = new Parser(
|
|
746
|
+
const parser = new Parser(
|
|
747
|
+
this.uniqueClassnames,
|
|
748
|
+
this.uniqueBaseNames,
|
|
749
|
+
this.targetVersions,
|
|
750
|
+
);
|
|
742
751
|
const resource = parser.resourceFrom(
|
|
743
752
|
fqpn,
|
|
744
753
|
type,
|