gitlab-ci-local 4.64.0 → 4.65.0

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.
@@ -1,7 +1,7 @@
1
1
  import { Utils } from "./utils.js";
2
2
  import fs from "fs-extra";
3
3
  import assert, { AssertionError } from "assert";
4
- import chalk from "chalk";
4
+ import chalk from "chalk-template";
5
5
  import { Parser } from "./parser.js";
6
6
  import axios from "axios";
7
7
  import path from "path";
@@ -384,4 +384,4 @@ export async function resolveIncludeLocal(pattern, cwd) {
384
384
  const re2js = RE2JS.compile(`^${pattern}`);
385
385
  return repoFiles.filter((f) => re2js.matches(f));
386
386
  }
387
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLWluY2x1ZGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGFyc2VyLWluY2x1ZGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDakMsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRzFCLE9BQU8sTUFBTSxFQUFFLEVBQUMsY0FBYyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzlDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ25DLE9BQU8sS0FBMkIsTUFBTSxPQUFPLENBQUM7QUFDaEQsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBdUI1QixNQUFNLE9BQU8sY0FBYztJQUNmLE1BQU0sQ0FBQyxLQUFLLEdBQVcsQ0FBQyxDQUFDO0lBRWpDLE1BQU0sQ0FBQyxVQUFVO1FBQ2IsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUVPLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBRSxVQUFlLEVBQUUsSUFBK0I7UUFDcEYsTUFBTSxFQUFDLFlBQVksRUFBQyxHQUFHLElBQUksQ0FBQztRQUM1QixLQUFLLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBTSxVQUFVLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNyRSxJQUFJLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQy9DLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLENBQUM7d0JBQ3ZCLEtBQUssRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU87cUJBQ2pDLENB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LENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLG1CQUFtQixDQUFFLE9BQWUsRUFBRSxHQUFXO0lBQ25FLE1BQU0sU0FBUyxHQUFHLE1BQU0sY0FBYyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRS9ELElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztRQUFFLE9BQU8sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUMsaUNBQWlDO0lBQ3hGLE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxPQUFPLEVBQUUsQ0FBQztJQUU3QiwwQ0FBMEM7SUFDMUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFekQsd0JBQXdCO0lBQ3hCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQztJQUN2QixPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFakQsc0NBQXNDO0lBQ3RDLE1BQU0sc0JBQXNCLEdBQUcsVUFBVSxDQUFDO0lBQzFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0lBRTNELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FyZ3Z9IGZyb20gXCIuL2FyZ3YuanNcIjtcbmltcG9ydCB7VXRpbHN9IGZyb20gXCIuL3V0aWxzLmpzXCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQge1dyaXRlU3RyZWFtc30gZnJvbSBcIi4vd3JpdGUtc3RyZWFtcy5qc1wiO1xuaW1wb3J0IHtHaXREYXRhfSBmcm9tIFwiLi9naXQtZGF0YS5qc1wiO1xuaW1wb3J0IGFzc2VydCwge0Fzc2VydGlvbkVycm9yfSBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQge1BhcnNlcn0gZnJvbSBcIi4vcGFyc2VyLmpzXCI7XG5pbXBvcnQgYXhpb3MsIHtBeGlvc1JlcXVlc3RDb25maWd9IGZyb20gXCJheGlvc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCBzZW12ZXIgZnJvbSBcInNlbXZlclwiO1xuaW1wb3J0IHtSRTJKU30gZnJvbSBcInJlMmpzXCI7XG5cbnR5cGUgUGFyc2VySW5jbHVkZXNJbml0T3B0aW9ucyA9IHtcbiAgICBhcmd2OiBBcmd2O1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIHN0YXRlRGlyOiBzdHJpbmc7XG4gICAgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXM7XG4gICAgZ2l0RGF0YTogR2l0RGF0YTtcbiAgICBmZXRjaEluY2x1ZGVzOiBib29sZWFuO1xuICAgIHZhcmlhYmxlczoge1trZXk6IHN0cmluZ106IHN0cmluZ307XG4gICAgZXhwYW5kVmFyaWFibGVzOiBib29sZWFuO1xuICAgIG1heGltdW1JbmNsdWRlczogbnVtYmVyO1xufTtcblxudHlwZSBQYXJzZWRDb21wb25lbnQgPSB7XG4gICAgZG9tYWluOiBzdHJpbmc7XG4gICAgcG9ydDogc3RyaW5nO1xuICAgIHByb2plY3RQYXRoOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHJlZjogc3RyaW5nO1xuICAgIGlzTG9jYWw6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgY2xhc3MgUGFyc2VySW5jbHVkZXMge1xuICAgIHByaXZhdGUgc3RhdGljIGNvdW50OiBudW1iZXIgPSAwO1xuXG4gICAgc3RhdGljIHJlc2V0Q291bnQgKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvdW50ID0gMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBub3JtYWxpemVUcmlnZ2VySW5jbHVkZSAoZ2l0bGFiRGF0YTogYW55LCBvcHRzOiBQYXJzZXJJbmNsdWRlc0luaXRPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHt3cml0ZVN0cmVhbXN9ID0gb3B0cztcbiAgICAgICAgZm9yIChjb25zdCBbam9iTmFtZSwgam9iRGF0YV0gb2YgT2JqZWN0LmVudHJpZXM8YW55PihnaXRsYWJEYXRhID8/IHt9KSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBqb2JEYXRhLnRyaWdnZXI/LmluY2x1ZGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBqb2JEYXRhLnRyaWdnZXIuaW5jbHVkZSA9IFt7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsOiBqb2JEYXRhLnRyaWdnZXIuaW5jbHVkZSxcbiAgICAgICAgICAgICAgICB9IF07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGpvYkRhdGEudHJpZ2dlcj8ucHJvamVjdCkge1xuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5tZW1vU3Rkb3V0KGNoYWxrYHtiZ1llbGxvd0JyaWdodCAgV0FSTiB9IFRoZSBqb2I6IFxcYHtibHVlQnJpZ2h0ICR7am9iTmFtZX19XFxgIHdpbGwgYmUgbm8tb3AuIE11bHRpLXByb2plY3QgcGlwZWxpbmUgaXMgbm90IHN1cHBvcnRlZCBieSBnaXRsYWItY2ktbG9jYWxcXG5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBpbml0IChnaXRsYWJEYXRhOiBhbnksIG9wdHM6IFBhcnNlckluY2x1ZGVzSW5pdE9wdGlvbnMpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgICAgIGNvbnN0IHthcmd2fSA9IG9wdHM7XG4gICAgICAgIHRoaXMuY291bnQrKztcbiAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgICAgdGhpcy5jb3VudCA8PSBvcHRzLm1heGltdW1JbmNsdWRlcyArIDEsIC8vIDFzdCBpbml0IGNhbGwgaXMgbm90IGNvdW50ZWRcbiAgICAgICAgICAgIGNoYWxrYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogTWF4aW11bSBvZiB7Ymx1ZUJyaWdodCAke29wdHMubWF4aW11bUluY2x1ZGVzfX0gbmVzdGVkIGluY2x1ZGVzIGFyZSBhbGxvd2VkIS4gVGhpcyBsaW1pdCBjYW4gYmUgaW5jcmVhc2VkIHdpdGggdGhlIC0tbWF4aW11bS1pbmNsdWRlcyBjbGkgZmxhZ3MuYCxcbiAgICAgICAgKTtcbiAgICAgICAgbGV0IGluY2x1ZGVEYXRhczogYW55W10gPSBbXTtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgY29uc3Qge3N0YXRlRGlyLCBjd2QsIGZldGNoSW5jbHVkZXMsIGdpdERhdGEsIGV4cGFuZFZhcmlhYmxlc30gPSBvcHRzO1xuICAgICAgICAvLyBjYWNoZSB0aGUgcGFyc2VkIGNvbXBvbmVudCwgYmVjYXVzZSBwYXJzZUluY2x1ZGVDb21wb25lbnQgaXMgZXhwZW5zaXZlIGFuZCB3ZSB3b3VsZCBjYWxsIGl0IHR3aWNlIG90aGVyd2lzZVxuICAgICAgICBjb25zdCBjb21wb25lbnRQYXJzZUNhY2hlID0gbmV3IE1hcDxudW1iZXIsIFBhcnNlZENvbXBvbmVudD4oKTtcblxuICAgICAgICBjb25zdCBpbmNsdWRlID0gdGhpcy5leHBhbmRJbmNsdWRlKGdpdGxhYkRhdGE/LmluY2x1ZGUsIG9wdHMudmFyaWFibGVzKTtcblxuICAgICAgICB0aGlzLm5vcm1hbGl6ZVRyaWdnZXJJbmNsdWRlKGdpdGxhYkRhdGEsIG9wdHMpO1xuICAgICAgICAvLyBGaW5kIGZpbGVzIHRvIGZldGNoIGZyb20gcmVtb3RlIGFuZCBwbGFjZSBpbiAuZ2l0bGFiLWNpLWxvY2FsL2luY2x1ZGVzXG4gICAgICAgIGZvciAoY29uc3QgW2luZGV4LCB2YWx1ZV0gb2YgaW5jbHVkZS5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZVtcInJ1bGVzXCJdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5jbHVkZV9ydWxlcyA9IHZhbHVlW1wicnVsZXNcIl07XG4gICAgICAgICAgICAgICAgY29uc3QgcnVsZXNSZXN1bHQgPSBVdGlscy5nZXRSdWxlc1Jlc3VsdCh7YXJndiwgY3dkLCBydWxlczogaW5jbHVkZV9ydWxlcywgdmFyaWFibGVzOiBvcHRzLnZhcmlhYmxlc30sIGdpdERhdGEpO1xuICAgICAgICAgICAgICAgIGlmIChydWxlc1Jlc3VsdC53aGVuID09PSBcIm5ldmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlW1wiZmlsZVwiXSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmlsZVZhbHVlIG9mIEFycmF5LmlzQXJyYXkodmFsdWVbXCJmaWxlXCJdKSA/IHZhbHVlW1wiZmlsZVwiXSA6IFt2YWx1ZVtcImZpbGVcIl1dKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5kb3dubG9hZEluY2x1ZGVQcm9qZWN0RmlsZShjd2QsIHN0YXRlRGlyLCB2YWx1ZVtcInByb2plY3RcIl0sIHZhbHVlW1wicmVmXCJdIHx8IFwiSEVBRFwiLCBmaWxlVmFsdWUsIGdpdERhdGEsIGZldGNoSW5jbHVkZXMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW1widGVtcGxhdGVcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7cHJvamVjdCwgcmVmLCBmaWxlLCBkb21haW59ID0gdGhpcy5jb3ZlcnRUZW1wbGF0ZVRvUHJvamVjdEZpbGUodmFsdWVbXCJ0ZW1wbGF0ZVwiXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsID0gYGh0dHBzOi8vJHtkb21haW59LyR7cHJvamVjdH0vLS9yYXcvJHtyZWZ9LyR7ZmlsZX1gO1xuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5kb3dubG9hZEluY2x1ZGVSZW1vdGUoY3dkLCBzdGF0ZURpciwgdXJsLCBmZXRjaEluY2x1ZGVzKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW1wicmVtb3RlXCJdKSB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLmRvd25sb2FkSW5jbHVkZVJlbW90ZShjd2QsIHN0YXRlRGlyLCB2YWx1ZVtcInJlbW90ZVwiXSwgZmV0Y2hJbmNsdWRlcykpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVtcImNvbXBvbmVudFwiXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucGFyc2VJbmNsdWRlQ29tcG9uZW50KHZhbHVlW1wiY29tcG9uZW50XCJdLCBnaXREYXRhKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRQYXJzZUNhY2hlLnNldChpbmRleCwgY29tcG9uZW50KTtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbXBvbmVudC5pc0xvY2FsKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLmRvd25sb2FkSW5jbHVkZUNvbXBvbmVudChjd2QsIHN0YXRlRGlyLCBjb21wb25lbnQucHJvamVjdFBhdGgsIGNvbXBvbmVudC5yZWYsIGNvbXBvbmVudC5uYW1lLCBnaXREYXRhLCBmZXRjaEluY2x1ZGVzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG5cbiAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIHZhbHVlXSBvZiBpbmNsdWRlLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlW1wicnVsZXNcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmNsdWRlX3J1bGVzID0gdmFsdWVbXCJydWxlc1wiXTtcbiAgICAgICAgICAgICAgICBjb25zdCBydWxlc1Jlc3VsdCA9IFV0aWxzLmdldFJ1bGVzUmVzdWx0KHthcmd2LCBjd2QsIHJ1bGVzOiBpbmNsdWRlX3J1bGVzLCB2YXJpYWJsZXM6IG9wdHMudmFyaWFibGVzfSwgZ2l0RGF0YSk7XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGVzUmVzdWx0LndoZW4gPT09IFwibmV2ZXJcIikge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWVbXCJsb2NhbFwiXSkge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlSW5jbHVkZUxvY2FsKHZhbHVlW1wibG9jYWxcIl0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgcmVzb2x2ZUluY2x1ZGVMb2NhbCh2YWx1ZVtcImxvY2FsXCJdLCBjd2QpO1xuICAgICAgICAgICAgICAgIGlmIChmaWxlcy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3Ioe21lc3NhZ2U6IGBMb2NhbCBpbmNsdWRlIGZpbGUgY2Fubm90IGJlIGZvdW5kICR7dmFsdWVbXCJsb2NhbFwiXX1gfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbG9jYWxGaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBQYXJzZXIubG9hZFlhbWwobG9jYWxGaWxlLCB7aW5wdXRzOiB2YWx1ZS5pbnB1dHMgPz8ge319LCBleHBhbmRWYXJpYWJsZXMpO1xuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlRGF0YXMgPSBpbmNsdWRlRGF0YXMuY29uY2F0KGF3YWl0IHRoaXMuaW5pdChjb250ZW50LCBvcHRzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVtcInByb2plY3RcIl0pIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbGVWYWx1ZSBvZiBBcnJheS5pc0FycmF5KHZhbHVlW1wiZmlsZVwiXSkgPyB2YWx1ZVtcImZpbGVcIl0gOiBbdmFsdWVbXCJmaWxlXCJdXSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWxlRG9jID0gYXdhaXQgUGFyc2VyLmxvYWRZYW1sKFxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7Y3dkfS8ke3N0YXRlRGlyfS9pbmNsdWRlcy8ke2dpdERhdGEucmVtb3RlLmhvc3R9LyR7dmFsdWVbXCJwcm9qZWN0XCJdfS8ke3ZhbHVlW1wicmVmXCJdIHx8IFwiSEVBRFwifS8ke2ZpbGVWYWx1ZX1gXG4gICAgICAgICAgICAgICAgICAgICAgICAsIHtpbnB1dHM6IHZhbHVlLmlucHV0cyB8fCB7fX1cbiAgICAgICAgICAgICAgICAgICAgICAgICwgZXhwYW5kVmFyaWFibGVzKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gRXhwYW5kIGxvY2FsIGluY2x1ZGVzIGluc2lkZSBhIFwicHJvamVjdFwiLWxpa2UgaW5jbHVkZVxuICAgICAgICAgICAgICAgICAgICBmaWxlRG9jW1wiaW5jbHVkZVwiXSA9IHRoaXMuZXhwYW5kSW5uZXJMb2NhbEluY2x1ZGVzKGZpbGVEb2NbXCJpbmNsdWRlXCJdLCB2YWx1ZVtcInByb2plY3RcIl0sIHZhbHVlW1wicmVmXCJdLCBvcHRzKTtcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZURhdGFzID0gaW5jbHVkZURhdGFzLmNvbmNhdChhd2FpdCB0aGlzLmluaXQoZmlsZURvYywgb3B0cykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVbXCJjb21wb25lbnRcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb21wb25lbnRQYXJzZUNhY2hlLmdldChpbmRleCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGNvbXBvbmVudCAhPT0gdW5kZWZpbmVkLCBgSW50ZXJuYWwgZXJyb3IsIGNvbXBvbmVudCBwYXJzZSBjYWNoZSBtaXNzaW5nIGVudHJ5IFske2luZGV4fV1gKTtcbiAgICAgICAgICAgICAgICAvLyBHaXRsYWIgYWxsb3dzIHR3byBkaWZmZXJlbnQgZmlsZSBwYXRocyB0byBpbmNsdWRlIGEgY29tcG9uZW50XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBbYCR7Y29tcG9uZW50Lm5hbWV9LnltbGAsIGAke2NvbXBvbmVudC5uYW1lfS90ZW1wbGF0ZS55bWxgXTtcblxuICAgICAgICAgICAgICAgIGxldCBmaWxlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGYgb2YgZmlsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNlYXJjaFBhdGggPSBgJHtjd2R9LyR7Zn1gO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbXBvbmVudC5pc0xvY2FsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hQYXRoID0gYCR7Y3dkfS8ke3N0YXRlRGlyfS9pbmNsdWRlcy8ke2dpdERhdGEucmVtb3RlLmhvc3R9LyR7Y29tcG9uZW50LnByb2plY3RQYXRofS8ke2NvbXBvbmVudC5yZWZ9LyR7Zn1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChmcy5leGlzdHNTeW5jKHNlYXJjaFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlID0gc2VhcmNoUGF0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3NlcnQoZmlsZSAhPT0gbnVsbCwgYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogY29tcG9uZW50OiBcXGAke3ZhbHVlW1wiY29tcG9uZW50XCJdfVxcYC4gT25lIG9mIHRoZSBmaWxlcyBbJHtmaWxlc31dIG11c3QgZXhpc3QgaW4gXFxgJHtjb21wb25lbnQuZG9tYWlufWAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbXBvbmVudC5wb3J0ID8gYDoke2NvbXBvbmVudC5wb3J0fWAgOiBcIlwiKSArIGAvJHtjb21wb25lbnQucHJvamVjdFBhdGh9XFxgYCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlRG9jID0gYXdhaXQgUGFyc2VyLmxvYWRZYW1sKGZpbGUsIHtpbnB1dHM6IHZhbHVlLmlucHV0cyB8fCB7fX0sIGV4cGFuZFZhcmlhYmxlcyk7XG4gICAgICAgICAgICAgICAgLy8gRXhwYW5kIGxvY2FsIGluY2x1ZGVzIGluc2lkZSB0byBhIFwicHJvamVjdFwiLWxpa2UgaW5jbHVkZVxuICAgICAgICAgICAgICAgIGZpbGVEb2NbXCJpbmNsdWRlXCJdID0gdGhpcy5leHBhbmRJbm5lckxvY2FsSW5jbHVkZXMoZmlsZURvY1tcImluY2x1ZGVcIl0sIGNvbXBvbmVudC5wcm9qZWN0UGF0aCwgY29tcG9uZW50LnJlZiwgb3B0cyk7XG4gICAgICAgICAgICAgICAgaW5jbHVkZURhdGFzID0gaW5jbHVkZURhdGFzLmNvbmNhdChhd2FpdCB0aGlzLmluaXQoZmlsZURvYywgb3B0cykpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVtcInRlbXBsYXRlXCJdKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qge3Byb2plY3QsIHJlZiwgZmlsZSwgZG9tYWlufSA9IHRoaXMuY292ZXJ0VGVtcGxhdGVUb1Byb2plY3RGaWxlKHZhbHVlW1widGVtcGxhdGVcIl0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZzVXJsID0gVXRpbHMuZnNVcmwoYGh0dHBzOi8vJHtkb21haW59LyR7cHJvamVjdH0vLS9yYXcvJHtyZWZ9LyR7ZmlsZX1gKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlRG9jID0gYXdhaXQgUGFyc2VyLmxvYWRZYW1sKFxuICAgICAgICAgICAgICAgICAgICBgJHtjd2R9LyR7c3RhdGVEaXJ9L2luY2x1ZGVzLyR7ZnNVcmx9YCwge2lucHV0czogdmFsdWUuaW5wdXRzIHx8IHt9fSwgZXhwYW5kVmFyaWFibGVzLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaW5jbHVkZURhdGFzID0gaW5jbHVkZURhdGFzLmNvbmNhdChhd2FpdCB0aGlzLmluaXQoZmlsZURvYywgb3B0cykpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVtcInJlbW90ZVwiXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZzVXJsID0gVXRpbHMuZnNVcmwodmFsdWVbXCJyZW1vdGVcIl0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVEb2MgPSBhd2FpdCBQYXJzZXIubG9hZFlhbWwoXG4gICAgICAgICAgICAgICAgICAgIGAke2N3ZH0vJHtzdGF0ZURpcn0vaW5jbHVkZXMvJHtmc1VybH1gLCB7aW5wdXRzOiB2YWx1ZS5pbnB1dHMgfHwge319LCBleHBhbmRWYXJpYWJsZXMsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpbmNsdWRlRGF0YXMgPSBpbmNsdWRlRGF0YXMuY29uY2F0KGF3YWl0IHRoaXMuaW5pdChmaWxlRG9jLCBvcHRzKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcih7bWVzc2FnZTogYERpZG4ndCB1bmRlcnN0YW5kIGluY2x1ZGUgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaW5jbHVkZURhdGFzLnB1c2goZ2l0bGFiRGF0YSk7XG4gICAgICAgIHJldHVybiBpbmNsdWRlRGF0YXM7XG4gICAgfVxuXG4gICAgc3RhdGljIGV4cGFuZEluY2x1ZGUgKGk6IGFueSwgdmFyaWFibGVzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSk6IGFueVtdIHtcbiAgICAgICAgbGV0IGluY2x1ZGUgPSBpIHx8IFtdO1xuICAgICAgICBpZiAoaW5jbHVkZSAmJiBpbmNsdWRlLmxlbmd0aCA9PSBudWxsKSB7XG4gICAgICAgICAgICBpbmNsdWRlID0gWyBpIF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBpbmNsdWRlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBpbmNsdWRlID0gW2luY2x1ZGVdO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIGVudHJ5XSBvZiBPYmplY3QuZW50cmllcyhpbmNsdWRlKSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIiAmJiAoZW50cnkuc3RhcnRzV2l0aChcImh0dHBzOlwiKSB8fCBlbnRyeS5zdGFydHNXaXRoKFwiaHR0cDpcIikpKSB7XG4gICAgICAgICAgICAgICAgaW5jbHVkZVtpbmRleF0gPSB7XCJyZW1vdGVcIjogZW50cnl9O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW50cnkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBpbmNsdWRlW2luZGV4XSA9IHtcImxvY2FsXCI6IGVudHJ5fTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5jbHVkZVtpbmRleF0gPSBlbnRyeTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBpbmNsdWRlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhlbnRyeSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZW50cnlba2V5XSA9IHZhbHVlLm1hcCgodikgPT4gVXRpbHMuZXhwYW5kVGV4dCh2LCB2YXJpYWJsZXMpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbnRyeVtrZXldID0gVXRpbHMuZXhwYW5kVGV4dCh2YWx1ZSwgdmFyaWFibGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5jbHVkZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY292ZXJ0VGVtcGxhdGVUb1Byb2plY3RGaWxlICh0ZW1wbGF0ZTogc3RyaW5nKToge3Byb2plY3Q6IHN0cmluZzsgcmVmOiBzdHJpbmc7IGZpbGU6IHN0cmluZzsgZG9tYWluOiBzdHJpbmd9IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRvbWFpbjogXCJnaXRsYWIuY29tXCIsXG4gICAgICAgICAgICBwcm9qZWN0OiBcImdpdGxhYi1vcmcvZ2l0bGFiXCIsXG4gICAgICAgICAgICByZWY6IFwiSEVBRFwiLFxuICAgICAgICAgICAgZmlsZTogYGxpYi9naXRsYWIvY2kvdGVtcGxhdGVzLyR7dGVtcGxhdGV9YCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2VJbmNsdWRlQ29tcG9uZW50IChjb21wb25lbnQ6IHN0cmluZywgZ2l0RGF0YTogR2l0RGF0YSk6IFBhcnNlZENvbXBvbmVudCB7XG4gICAgICAgIGFzc2VydCghY29tcG9uZW50LmluY2x1ZGVzKFwiOi8vXCIpLCBgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBjb21wb25lbnQ6IFxcYCR7Y29tcG9uZW50fVxcYCBzaG91bGQgbm90IGNvbnRhaW4gcHJvdG9jb2xgKTtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IC8oPzxkb21haW4+W14vOlxcc10rKSg6KD88cG9ydD5cXGQrKSk/XFwvKD88cHJvamVjdFBhdGg+LispXFwvKD88Y29tcG9uZW50TmFtZT5bXkBdKylAKD88cmVmPi4rKS87IC8vIGh0dHBzOi8vcmVnZXhyLmNvbS83djdobVxuICAgICAgICBjb25zdCBnaXRSZW1vdGVNYXRjaCA9IHBhdHRlcm4uZXhlYyhjb21wb25lbnQpO1xuXG4gICAgICAgIGlmIChnaXRSZW1vdGVNYXRjaD8uZ3JvdXBzID09IG51bGwpIHRocm93IG5ldyBFcnJvcihgVGhpcyBpcyBhIGJ1ZywgcGxlYXNlIGNyZWF0ZSBhIGdpdGh1YiBpc3N1ZSBpZiB0aGlzIGlzIHNvbWV0aGluZyB5b3UncmUgZXhwZWN0aW5nIHRvIHdvcmsuIGlucHV0OiAke2NvbXBvbmVudH1gKTtcblxuICAgICAgICBjb25zdCB7ZG9tYWluLCBwcm9qZWN0UGF0aCwgcG9ydH0gPSBnaXRSZW1vdGVNYXRjaC5ncm91cHM7XG4gICAgICAgIGxldCByZWYgPSBnaXRSZW1vdGVNYXRjaC5ncm91cHNbXCJyZWZcIl07XG4gICAgICAgIGNvbnN0IGlzTG9jYWxDb21wb25lbnQgPSBwcm9qZWN0UGF0aCA9PT0gYCR7Z2l0RGF0YS5yZW1vdGUuZ3JvdXB9LyR7Z2l0RGF0YS5yZW1vdGUucHJvamVjdH1gICYmIHJlZiA9PT0gZ2l0RGF0YS5jb21taXQuU0hBO1xuXG4gICAgICAgIGlmICghaXNMb2NhbENvbXBvbmVudCkge1xuICAgICAgICAgICAgY29uc3Qgc2VtYW50aWNWZXJzaW9uUmFuZ2VzUGF0dGVybiA9IC9eXFxkKyhcXC5cXGQrKT8kLztcbiAgICAgICAgICAgIGlmIChyZWYgPT0gXCJ+bGF0ZXN0XCIgfHwgc2VtYW50aWNWZXJzaW9uUmFuZ2VzUGF0dGVybi50ZXN0KHJlZikpIHtcbiAgICAgICAgICAgICAgICAvLyBodHRwczovL2RvY3MuZ2l0bGFiLmNvbS9jaS9jb21wb25lbnRzLyNzZW1hbnRpYy12ZXJzaW9uLXJhbmdlc1xuICAgICAgICAgICAgICAgIGxldCBzdGRvdXQ7XG4gICAgICAgICAgICAgICAgaWYgKGdpdERhdGEucmVtb3RlLnNjaGVtYSA9PSBcImdpdFwiIHx8IGdpdERhdGEucmVtb3RlLnNjaGVtYSA9PSBcInNzaFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ZG91dCA9IFV0aWxzLnN5bmNTcGF3bihbXCJnaXRcIiwgXCJscy1yZW1vdGVcIiwgXCItLXRhZ3NcIiwgYGdpdEAke2RvbWFpbn06JHtwcm9qZWN0UGF0aH1gXSkuc3Rkb3V0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ZG91dCA9IFV0aWxzLnN5bmNTcGF3bihbXCJnaXRcIiwgXCJscy1yZW1vdGVcIiwgXCItLXRhZ3NcIiwgYCR7Z2l0RGF0YS5yZW1vdGUuc2NoZW1hfTovLyR7ZG9tYWlufToke3BvcnQgPz8gNDQzfS8ke3Byb2plY3RQYXRofS5naXRgXSkuc3Rkb3V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3NlcnQoc3Rkb3V0KTtcbiAgICAgICAgICAgICAgICBjb25zdCB0YWdzID0gc3Rkb3V0XG4gICAgICAgICAgICAgICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChsaW5lKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGluZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdChcIlxcdFwiKVsxXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdChcIi9cIilbMl07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IF9yZWYgPSByZXNvbHZlU2VtYW50aWNWZXJzaW9uUmFuZ2UocmVmLCB0YWdzKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoX3JlZiwgYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogY29tcG9uZW50OiBcXGAke2NvbXBvbmVudH1cXGAgLSBUaGUgcmVmICgke3JlZn0pIGlzIGludmFsaWRgKTtcbiAgICAgICAgICAgICAgICByZWYgPSBfcmVmO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkb21haW46IGRvbWFpbixcbiAgICAgICAgICAgIHBvcnQ6IHBvcnQsXG4gICAgICAgICAgICBwcm9qZWN0UGF0aDogcHJvamVjdFBhdGgsXG4gICAgICAgICAgICBuYW1lOiBgdGVtcGxhdGVzLyR7Z2l0UmVtb3RlTWF0Y2guZ3JvdXBzW1wiY29tcG9uZW50TmFtZVwiXX1gLFxuICAgICAgICAgICAgcmVmOiByZWYsXG4gICAgICAgICAgICBpc0xvY2FsOiBpc0xvY2FsQ29tcG9uZW50LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIEV4cGFuZCBsb2NhbCBpbmNsdWRlcyBpbnNpZGUgdG8gYSBcInByb2plY3RcIi1saWtlIGluY2x1ZGVcbiAgICBzdGF0aWMgZXhwYW5kSW5uZXJMb2NhbEluY2x1ZGVzIChmaWxlSW5jbHVkZXM6IGFueSwgcHJvamVjdFBhdGg6IHN0cmluZywgcmVmOiBzdHJpbmcsIG9wdHM6IFBhcnNlckluY2x1ZGVzSW5pdE9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qge2FyZ3Z9ID0gb3B0cztcbiAgICAgICAgY29uc3QgdXBkYXRlZEluY2x1ZGVzID0gdGhpcy5leHBhbmRJbmNsdWRlKGZpbGVJbmNsdWRlcywgb3B0cy52YXJpYWJsZXMpO1xuICAgICAgICB1cGRhdGVkSW5jbHVkZXMuZm9yRWFjaCgoaW5uZXI6IGFueSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWlubmVyW1wibG9jYWxcIl0pIHJldHVybjtcbiAgICAgICAgICAgIGlmIChpbm5lcltcInJ1bGVzXCJdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcnVsZXNSZXN1bHQgPSBVdGlscy5nZXRSdWxlc1Jlc3VsdCh7YXJndiwgY3dkOiBvcHRzLmN3ZCwgdmFyaWFibGVzOiBvcHRzLnZhcmlhYmxlcywgcnVsZXM6IGlubmVyW1wicnVsZXNcIl19LCBvcHRzLmdpdERhdGEpO1xuICAgICAgICAgICAgICAgIGlmIChydWxlc1Jlc3VsdC53aGVuID09PSBcIm5ldmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZWRJbmNsdWRlc1tpXSA9IHtcbiAgICAgICAgICAgICAgICBwcm9qZWN0OiBwcm9qZWN0UGF0aCxcbiAgICAgICAgICAgICAgICBmaWxlOiBpbm5lcltcImxvY2FsXCJdLnJlcGxhY2UoL15cXC8vLCBcIlwiKSxcbiAgICAgICAgICAgICAgICByZWY6IHJlZixcbiAgICAgICAgICAgICAgICBpbnB1dHM6IGlubmVyLmlucHV0cyB8fCB7fSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdXBkYXRlZEluY2x1ZGVzO1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBkb3dubG9hZEluY2x1ZGVSZW1vdGUgKGN3ZDogc3RyaW5nLCBzdGF0ZURpcjogc3RyaW5nLCB1cmw6IHN0cmluZywgZmV0Y2hJbmNsdWRlczogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBmc1VybCA9IFV0aWxzLmZzVXJsKHVybCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBgJHtjd2R9LyR7c3RhdGVEaXJ9L2luY2x1ZGVzLyR7ZnNVcmx9YDtcbiAgICAgICAgICAgIGlmIChhd2FpdCBmcy5wYXRoRXhpc3RzKHRhcmdldCkgJiYgIWZldGNoSW5jbHVkZXMpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGF4aW9zQ29uZmlnOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1wiVXNlci1BZ2VudFwiOiBcImdpdGxhYi1jaS1sb2NhbFwifSxcbiAgICAgICAgICAgICAgICAuLi5VdGlscy5nZXRBeGlvc1Byb3h5Q29uZmlnKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgYXhpb3MuZ2V0KHVybCwgYXhpb3NDb25maWcpO1xuICAgICAgICAgICAgYXdhaXQgZnMub3V0cHV0RmlsZSh0YXJnZXQsIHJlcy5kYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKHttZXNzYWdlOiBgUmVtb3RlIGluY2x1ZGUgY291bGQgbm90IGJlIGZldGNoZWQgJHt1cmx9XFxuJHtlfWB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBkb3dubG9hZEluY2x1ZGVQcm9qZWN0RmlsZSAoY3dkOiBzdHJpbmcsIHN0YXRlRGlyOiBzdHJpbmcsIHByb2plY3Q6IHN0cmluZywgcmVmOiBzdHJpbmcsIGZpbGU6IHN0cmluZywgZ2l0RGF0YTogR2l0RGF0YSwgZmV0Y2hJbmNsdWRlczogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCByZW1vdGUgPSBnaXREYXRhLnJlbW90ZTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZEZpbGUgPSBmaWxlLnJlcGxhY2UoL15cXC8rLywgXCJcIik7XG4gICAgICAgIGxldCB0bXBEaXIgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gYCR7c3RhdGVEaXJ9L2luY2x1ZGVzLyR7cmVtb3RlLmhvc3R9LyR7cHJvamVjdH0vJHtyZWZ9YDtcbiAgICAgICAgICAgIGlmIChhd2FpdCBmcy5wYXRoRXhpc3RzKGAke2N3ZH0vJHt0YXJnZXR9LyR7bm9ybWFsaXplZEZpbGV9YCkgJiYgIWZldGNoSW5jbHVkZXMpIHJldHVybjtcblxuICAgICAgICAgICAgaWYgKHJlbW90ZS5zY2hlbWEuc3RhcnRzV2l0aChcImh0dHBcIikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHQgPSBcInRtcC1cIiArIE1hdGgucmFuZG9tKCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgZnMubWtkaXJwKHBhdGguZGlybmFtZShgJHtjd2R9LyR7dGFyZ2V0fS8ke25vcm1hbGl6ZWRGaWxlfWApKTtcbiAgICAgICAgICAgICAgICB0bXBEaXIgPSBgJHtjd2R9LyR7dGFyZ2V0fS4ke2V4dH1gO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZ2l0Q2xvbmVCcmFuY2ggPSAocmVmID09PSBcIkhFQURcIikgPyBcIlwiIDogYC0tYnJhbmNoICR7cmVmfWA7XG4gICAgICAgICAgICAgICAgYXdhaXQgVXRpbHMuYmFzaE11bHRpKFtcbiAgICAgICAgICAgICAgICAgICAgYGNkICR7Y3dkfS8ke3N0YXRlRGlyfWAsXG4gICAgICAgICAgICAgICAgICAgIGBnaXQgY2xvbmUgJHtnaXRDbG9uZUJyYW5jaH0gLW4gLS1kZXB0aD0xIC0tZmlsdGVyPXRyZWU6MCAke3JlbW90ZS5zY2hlbWF9Oi8vJHtyZW1vdGUuaG9zdH06JHtyZW1vdGUucG9ydH0vJHtwcm9qZWN0fS5naXQgJHt0bXBEaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgYGNkICR7dG1wRGlyfWAsXG4gICAgICAgICAgICAgICAgICAgIGBnaXQgc3BhcnNlLWNoZWNrb3V0IHNldCAtLW5vLWNvbmUgJHtub3JtYWxpemVkRmlsZX1gLFxuICAgICAgICAgICAgICAgICAgICBcImdpdCBjaGVja291dFwiLFxuICAgICAgICAgICAgICAgICAgICBgY2QgJHtjd2R9LyR7c3RhdGVEaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgYGNwICR7dG1wRGlyfS8ke25vcm1hbGl6ZWRGaWxlfSAke2N3ZH0vJHt0YXJnZXR9LyR7bm9ybWFsaXplZEZpbGV9YCxcbiAgICAgICAgICAgICAgICBdLCBjd2QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5ta2RpcnAoYCR7Y3dkfS8ke3RhcmdldH1gKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5iYXNoKGBzZXQgLWVvdSBwaXBlZmFpbDsgZ2l0IGFyY2hpdmUgLS1yZW1vdGU9c3NoOi8vZ2l0QCR7cmVtb3RlLmhvc3R9OiR7cmVtb3RlLnBvcnR9LyR7cHJvamVjdH0uZ2l0ICR7cmVmfSAke25vcm1hbGl6ZWRGaWxlfSB8IHRhciAtZiAtIC14QyAke3RhcmdldH0vYCwgY3dkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKHttZXNzYWdlOiBgUHJvamVjdCBpbmNsdWRlIGNvdWxkIG5vdCBiZSBmZXRjaGVkIHsgcHJvamVjdDogJHtwcm9qZWN0fSwgcmVmOiAke3JlZn0sIGZpbGU6ICR7bm9ybWFsaXplZEZpbGV9IH1cXG4ke2V9YH0pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKHRtcERpciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIGFsd2F5cyBjbGVhbnVwIHRlbXBvcmFyeSBkaXJlY3RvcnkgKGlmIGNyZWF0ZWQpXG4gICAgICAgICAgICAgICAgYXdhaXQgZnMucm0odG1wRGlyLCB7cmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGRvd25sb2FkSW5jbHVkZUNvbXBvbmVudCAoY3dkOiBzdHJpbmcsIHN0YXRlRGlyOiBzdHJpbmcsIHByb2plY3Q6IHN0cmluZywgcmVmOiBzdHJpbmcsIGNvbXBvbmVudE5hbWU6IHN0cmluZywgZ2l0RGF0YTogR2l0RGF0YSwgZmV0Y2hJbmNsdWRlczogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCByZW1vdGUgPSBnaXREYXRhLnJlbW90ZTtcbiAgICAgICAgY29uc3QgZmlsZXMgPSBbYCR7Y29tcG9uZW50TmFtZX0ueW1sYCwgYCR7Y29tcG9uZW50TmFtZX0vdGVtcGxhdGUueW1sYF07XG4gICAgICAgIGxldCB0bXBEaXIgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gYCR7c3RhdGVEaXJ9L2luY2x1ZGVzLyR7cmVtb3RlLmhvc3R9LyR7cHJvamVjdH0vJHtyZWZ9YDtcblxuICAgICAgICAgICAgaWYgKCFmZXRjaEluY2x1ZGVzICYmIChhd2FpdCBmcy5wYXRoRXhpc3RzKGAke2N3ZH0vJHt0YXJnZXR9LyR7ZmlsZXNbMF19YCkgfHwgYXdhaXQgZnMucGF0aEV4aXN0cyhgJHtjd2R9LyR7dGFyZ2V0fS8ke2ZpbGVzWzFdfWApKSkgcmV0dXJuO1xuXG4gICAgICAgICAgICBpZiAocmVtb3RlLnNjaGVtYS5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4dCA9IFwidG1wLVwiICsgTWF0aC5yYW5kb20oKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5ta2RpcnAocGF0aC5kaXJuYW1lKGAke2N3ZH0vJHt0YXJnZXR9L3RlbXBsYXRlc2ApKTtcbiAgICAgICAgICAgICAgICB0bXBEaXIgPSBgJHtjd2R9LyR7dGFyZ2V0fS4ke2V4dH1gO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZ2l0Q2xvbmVCcmFuY2ggPSAocmVmID09PSBcIkhFQURcIikgPyBcIlwiIDogYC0tYnJhbmNoICR7cmVmfWA7XG4gICAgICAgICAgICAgICAgYXdhaXQgVXRpbHMuYmFzaE11bHRpKFtcbiAgICAgICAgICAgICAgICAgICAgYGNkICR7Y3dkfS8ke3N0YXRlRGlyfWAsXG4gICAgICAgICAgICAgICAgICAgIGBnaXQgY2xvbmUgJHtnaXRDbG9uZUJyYW5jaH0gLW4gLS1kZXB0aD0xIC0tZmlsdGVyPXRyZWU6MCAke3JlbW90ZS5zY2hlbWF9Oi8vJHtyZW1vdGUuaG9zdH06JHtyZW1vdGUucG9ydH0vJHtwcm9qZWN0fS5naXQgJHt0bXBEaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgYGNkICR7dG1wRGlyfWAsXG4gICAgICAgICAgICAgICAgICAgIGBnaXQgc3BhcnNlLWNoZWNrb3V0IHNldCAtLW5vLWNvbmUgJHtmaWxlc1swXX0gJHtmaWxlc1sxXX1gLFxuICAgICAgICAgICAgICAgICAgICBcImdpdCBjaGVja291dFwiLFxuICAgICAgICAgICAgICAgICAgICBgY2QgJHtjd2R9LyR7c3RhdGVEaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgYG1rZGlyIC1wICR7dG1wRGlyfS90ZW1wbGF0ZXNgLCAvLyBjcmVhdGUgdGVtcGxhdGVzIHN1YmRpciAoaWYgaXQgZG9lc24ndCBleGlzdCksIGFzIHRoZSBjaGVjayBvdXQgbWF5IG5vdCBjcmVhdGUgaXRcbiAgICAgICAgICAgICAgICAgICAgYGNwIC1yICR7dG1wRGlyfS90ZW1wbGF0ZXMgJHtjd2R9LyR7dGFyZ2V0fWAsXG4gICAgICAgICAgICAgICAgXSwgY3dkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZ2l0IGFyY2hpdmUgZmFpbHMgaWYgdGhlIHBhdGhzIGRvIG5vdCBleGlzdCwgdG8gd29yayBhcm91bmQgdGhpcyB3ZSB1c2UgYSB3aWxkY2FyZCBcInRlbXBsYXRlcy9jb21wb25lbnQqLnltbFwiXG4gICAgICAgICAgICAgICAgLy8gdGhpcyByZXNvbHZlcyB0byBlaXRoZXIgXCJ0ZW1wbGF0ZXMvY29tcG9uZW50LnltbFwiIG9yIFwidGVtcGxhdGVzL2NvbXBvbmVudC90ZW1wbGF0ZS55bWxcIlxuICAgICAgICAgICAgICAgIC8vIGlmIGJvdGggZXhpc3QgXCJ0ZW1wbGF0ZXMvY29tcG9uZW50LnltbFwiIHdpbGwgYmUgcHVsbGVkXG4gICAgICAgICAgICAgICAgLy8gRHJhd2JhY2s6IGFsc28gcHVsbHMgYWxsIG90aGVyIC55bWwgZmlsZXMgZnJvbSB0ZW1wbGF0ZXMvY29tcG9uZW50LyBkaXJlY3RvcnlcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wb25lbnRXaWxkY2FyZCA9IGAke2NvbXBvbmVudE5hbWV9Ki55bWxgO1xuICAgICAgICAgICAgICAgIGF3YWl0IGZzLm1rZGlycChgJHtjd2R9LyR7dGFyZ2V0fWApO1xuICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLmJhc2goYHNldCAtZW91IHBpcGVmYWlsOyBnaXQgYXJjaGl2ZSAtLXJlbW90ZT1zc2g6Ly9naXRAJHtyZW1vdGUuaG9zdH06JHtyZW1vdGUucG9ydH0vJHtwcm9qZWN0fS5naXQgJHtyZWZ9ICR7Y29tcG9uZW50V2lsZGNhcmR9IHwgdGFyIC1mIC0gLXhDICR7dGFyZ2V0fS9gLCBjd2QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3Ioe21lc3NhZ2U6IGBDb21wb25lbnQgaW5jbHVkZSBjb3VsZCBub3QgYmUgZmV0Y2hlZCB7IHByb2plY3Q6ICR7cHJvamVjdH0sIHJlZjogJHtyZWZ9LCBmaWxlOiAke2ZpbGVzfSB9XFxuJHtlfWB9KTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmICh0bXBEaXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBhbHdheXMgY2xlYW51cCB0ZW1wb3JhcnkgZGlyZWN0b3J5IChpZiBjcmVhdGVkKVxuICAgICAgICAgICAgICAgIGF3YWl0IGZzLnJtKHRtcERpciwge3JlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWV9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyByZWFkb25seSBtZW1vTG9jYWxSZXBvRmlsZXMgPSAoKCkgPT4ge1xuICAgICAgICBjb25zdCBjYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgICAgICAgcmV0dXJuIGFzeW5jIChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBjYWNoZS5nZXQocGF0aCk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIHJlc3VsdDtcblxuICAgICAgICAgICAgcmVzdWx0ID0gKGF3YWl0IFV0aWxzLmdldFRyYWNrZWRGaWxlcyhwYXRoKSkubWFwKHAgPT4gYCR7cGF0aH0vJHtwfWApO1xuICAgICAgICAgICAgY2FjaGUuc2V0KHBhdGgsIHJlc3VsdCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9O1xuICAgIH0pKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUluY2x1ZGVMb2NhbCAoZmlsZVBhdGg6IHN0cmluZykge1xuICAgIGFzc2VydCghZmlsZVBhdGguc3RhcnRzV2l0aChcIi4vXCIpLCBgXFxgJHtmaWxlUGF0aH1cXGAgZm9yIGluY2x1ZGU6bG9jYWwgaXMgaW52YWxpZC4gR2l0bGFiIGRvZXMgbm90IHN1cHBvcnQgcmVsYXRpdmUgcGF0aCAoaWUuIGNhbm5vdCBzdGFydCB3aXRoIFxcYC4vXFxgKS5gKTtcbiAgICBhc3NlcnQoIWZpbGVQYXRoLmluY2x1ZGVzKFwiLi5cIiksIGBcXGAke2ZpbGVQYXRofVxcYCBmb3IgaW5jbHVkZTpsb2NhbCBpcyBpbnZhbGlkLiBHaXRsYWIgZG9lcyBub3Qgc3VwcG9ydCBkaXJlY3RvcnkgdHJhdmVyc2FsLmApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVNlbWFudGljVmVyc2lvblJhbmdlIChyYW5nZTogc3RyaW5nLCBnaXRUYWdzOiBzdHJpbmdbXSkge1xuICAgIC8qKiBzb3J0ZWQgbGlzdCBvZiB0YWdzIHRoYXRzIGNvbXBsaWFudCB0byBzZW1hbnRpYyB2ZXJzaW9uIHdoZXJlIGluZGV4IDAgaXMgdGhlIGxhdGVzdCAqL1xuICAgIGNvbnN0IHNhbml0aXplZFNlbXZlclRhZ3MgPSBzZW12ZXIucnNvcnQoXG4gICAgICAgIGdpdFRhZ3MuZmlsdGVyKHMgPT4gc2VtdmVyLnZhbGlkKHMpKSxcbiAgICApO1xuXG4gICAgY29uc3QgZm91bmQgPSBzYW5pdGl6ZWRTZW12ZXJUYWdzLmZpbmQodCA9PiB7XG4gICAgICAgIGlmIChyYW5nZSA9PSBcIn5sYXRlc3RcIikge1xuICAgICAgICAgICAgY29uc3Qgc2VtdmVyUGFyc2VkID0gc2VtdmVyLnBhcnNlKHQpO1xuICAgICAgICAgICAgYXNzZXJ0KHNlbXZlclBhcnNlZCk7XG4gICAgICAgICAgICByZXR1cm4gKHNlbXZlclBhcnNlZC5wcmVyZWxlYXNlLmxlbmd0aCA9PSAwICYmIHNlbXZlclBhcnNlZC5idWlsZC5sZW5ndGggPT0gMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc2VtdmVyLnNhdGlzZmllcyh0LCByYW5nZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlSW5jbHVkZUxvY2FsIChwYXR0ZXJuOiBzdHJpbmcsIGN3ZDogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVwb0ZpbGVzID0gYXdhaXQgUGFyc2VySW5jbHVkZXMubWVtb0xvY2FsUmVwb0ZpbGVzKGN3ZCk7XG5cbiAgICBpZiAoIXBhdHRlcm4uc3RhcnRzV2l0aChcIi9cIikpIHBhdHRlcm4gPSBgLyR7cGF0dGVybn1gOyAvLyBFbnN1cmUgcGF0dGVybiBzdGFydHMgd2l0aCBgL2BcbiAgICBwYXR0ZXJuID0gYCR7Y3dkfSR7cGF0dGVybn1gO1xuXG4gICAgLy8gZXNjYXBlIGFsbCBzcGVjaWFsIHJlZ2V4IG1ldGFjaGFyYWN0ZXJzXG4gICAgcGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csIFwiXFxcXCQmXCIpO1xuXG4gICAgLy8gYCoqYCBtYXRjaGVzIGFueXRoaW5nXG4gICAgY29uc3QgYW55dGhpbmcgPSBcIi4qP1wiO1xuICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2UoL1xcXFxcXCpcXFxcXFwqL2csIGFueXRoaW5nKTtcblxuICAgIC8vIGAqYCBtYXRjaGVzIGFueXRoaW5nIGV4Y2VwdCBmb3IgYC9gXG4gICAgY29uc3QgYW55dGhpbmdfYnV0X25vdF9zbGFzaCA9IFwiKFteL10pKj9cIjtcbiAgICBwYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKC9cXFxcXFwqL2csIGFueXRoaW5nX2J1dF9ub3Rfc2xhc2gpO1xuXG4gICAgY29uc3QgcmUyanMgPSBSRTJKUy5jb21waWxlKGBeJHtwYXR0ZXJufWApO1xuICAgIHJldHVybiByZXBvRmlsZXMuZmlsdGVyKChmOiBhbnkpID0+IHJlMmpzLm1hdGNoZXMoZikpO1xufVxuIl19
387
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLWluY2x1ZGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGFyc2VyLWluY2x1ZGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDakMsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRzFCLE9BQU8sTUFBTSxFQUFFLEVBQUMsY0FBYyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzlDLE9BQU8sS0FBSyxNQUFNLGdCQUFnQixDQUFDO0FBQ25DLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDbkMsT0FBTyxLQUEyQixNQUFNLE9BQU8sQ0FBQztBQUNoRCxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxPQUFPLENBQUM7QUF1QjVCLE1BQU0sT0FBTyxjQUFjO0lBQ2YsTUFBTSxDQUFDLEtBQUssR0FBVyxDQUFDLENBQUM7SUFFakMsTUFBTSxDQUFDLFVBQVU7UUFDYixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRU8sTUFBTSxDQUFDLHVCQUF1QixDQUFFLFVBQWUsRUFBRSxJQUErQjtRQUNwRixNQUFNLEVBQUMsWUFBWSxFQUFDLEdBQUcsSUFBSSxDQUFDO1FBQzVCLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFNLFVBQVUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3JFLElBQUksT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDL0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsQ0FBQzt3QkFDdkIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTztxQkFDakMs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dEMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsbUJBQW1CLENBQUUsT0FBZSxFQUFFLEdBQVc7SUFDbkUsTUFBTSxTQUFTLEdBQUcsTUFBTSxjQUFjLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFL0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQyxpQ0FBaUM7SUFDeEYsT0FBTyxHQUFHLEdBQUcsR0FBRyxHQUFHLE9BQU8sRUFBRSxDQUFDO0lBRTdCLDBDQUEwQztJQUMxQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUV6RCx3QkFBd0I7SUFDeEIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUVqRCxzQ0FBc0M7SUFDdEMsTUFBTSxzQkFBc0IsR0FBRyxVQUFVLENBQUM7SUFDMUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLHNCQUFzQixDQUFDLENBQUM7SUFFM0QsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDM0MsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXJndn0gZnJvbSBcIi4vYXJndi5qc1wiO1xuaW1wb3J0IHtVdGlsc30gZnJvbSBcIi4vdXRpbHMuanNcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCB7V3JpdGVTdHJlYW1zfSBmcm9tIFwiLi93cml0ZS1zdHJlYW1zLmpzXCI7XG5pbXBvcnQge0dpdERhdGF9IGZyb20gXCIuL2dpdC1kYXRhLmpzXCI7XG5pbXBvcnQgYXNzZXJ0LCB7QXNzZXJ0aW9uRXJyb3J9IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGstdGVtcGxhdGVcIjtcbmltcG9ydCB7UGFyc2VyfSBmcm9tIFwiLi9wYXJzZXIuanNcIjtcbmltcG9ydCBheGlvcywge0F4aW9zUmVxdWVzdENvbmZpZ30gZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHNlbXZlciBmcm9tIFwic2VtdmVyXCI7XG5pbXBvcnQge1JFMkpTfSBmcm9tIFwicmUyanNcIjtcblxudHlwZSBQYXJzZXJJbmNsdWRlc0luaXRPcHRpb25zID0ge1xuICAgIGFyZ3Y6IEFyZ3Y7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgc3RhdGVEaXI6IHN0cmluZztcbiAgICB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcztcbiAgICBnaXREYXRhOiBHaXREYXRhO1xuICAgIGZldGNoSW5jbHVkZXM6IGJvb2xlYW47XG4gICAgdmFyaWFibGVzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfTtcbiAgICBleHBhbmRWYXJpYWJsZXM6IGJvb2xlYW47XG4gICAgbWF4aW11bUluY2x1ZGVzOiBudW1iZXI7XG59O1xuXG50eXBlIFBhcnNlZENvbXBvbmVudCA9IHtcbiAgICBkb21haW46IHN0cmluZztcbiAgICBwb3J0OiBzdHJpbmc7XG4gICAgcHJvamVjdFBhdGg6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgcmVmOiBzdHJpbmc7XG4gICAgaXNMb2NhbDogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjbGFzcyBQYXJzZXJJbmNsdWRlcyB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgY291bnQ6IG51bWJlciA9IDA7XG5cbiAgICBzdGF0aWMgcmVzZXRDb3VudCAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY291bnQgPSAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIG5vcm1hbGl6ZVRyaWdnZXJJbmNsdWRlIChnaXRsYWJEYXRhOiBhbnksIG9wdHM6IFBhcnNlckluY2x1ZGVzSW5pdE9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qge3dyaXRlU3RyZWFtc30gPSBvcHRzO1xuICAgICAgICBmb3IgKGNvbnN0IFtqb2JOYW1lLCBqb2JEYXRhXSBvZiBPYmplY3QuZW50cmllczxhbnk+KGdpdGxhYkRhdGEgPz8ge30pKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGpvYkRhdGEudHJpZ2dlcj8uaW5jbHVkZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGpvYkRhdGEudHJpZ2dlci5pbmNsdWRlID0gW3tcbiAgICAgICAgICAgICAgICAgICAgbG9jYWw6IGpvYkRhdGEudHJpZ2dlci5pbmNsdWRlLFxuICAgICAgICAgICAgICAgIH0gXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoam9iRGF0YS50cmlnZ2VyPy5wcm9qZWN0KSB7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLm1lbW9TdGRvdXQoY2hhbGtge2JnWWVsbG93QnJpZ2h0ICBXQVJOIH0gVGhlIGpvYjogXFxge2JsdWVCcmlnaHQgJHtqb2JOYW1lfX1cXGAgd2lsbCBiZSBuby1vcC4gTXVsdGktcHJvamVjdCBwaXBlbGluZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IGdpdGxhYi1jaS1sb2NhbFxcbmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGluaXQgKGdpdGxhYkRhdGE6IGFueSwgb3B0czogUGFyc2VySW5jbHVkZXNJbml0T3B0aW9ucyk6IFByb21pc2U8YW55W10+IHtcbiAgICAgICAgY29uc3Qge2FyZ3Z9ID0gb3B0cztcbiAgICAgICAgdGhpcy5jb3VudCsrO1xuICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgICB0aGlzLmNvdW50IDw9IG9wdHMubWF4aW11bUluY2x1ZGVzICsgMSwgLy8gMXN0IGluaXQgY2FsbCBpcyBub3QgY291bnRlZFxuICAgICAgICAgICAgY2hhbGtgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBNYXhpbXVtIG9mIHtibHVlQnJpZ2h0ICR7b3B0cy5tYXhpbXVtSW5jbHVkZXN9fSBuZXN0ZWQgaW5jbHVkZXMgYXJlIGFsbG93ZWQhLiBUaGlzIGxpbWl0IGNhbiBiZSBpbmNyZWFzZWQgd2l0aCB0aGUgLS1tYXhpbXVtLWluY2x1ZGVzIGNsaSBmbGFncy5gLFxuICAgICAgICApO1xuICAgICAgICBsZXQgaW5jbHVkZURhdGFzOiBhbnlbXSA9IFtdO1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgICBjb25zdCB7c3RhdGVEaXIsIGN3ZCwgZmV0Y2hJbmNsdWRlcywgZ2l0RGF0YSwgZXhwYW5kVmFyaWFibGVzfSA9IG9wdHM7XG4gICAgICAgIC8vIGNhY2hlIHRoZSBwYXJzZWQgY29tcG9uZW50LCBiZWNhdXNlIHBhcnNlSW5jbHVkZUNvbXBvbmVudCBpcyBleHBlbnNpdmUgYW5kIHdlIHdvdWxkIGNhbGwgaXQgdHdpY2Ugb3RoZXJ3aXNlXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFBhcnNlQ2FjaGUgPSBuZXcgTWFwPG51bWJlciwgUGFyc2VkQ29tcG9uZW50PigpO1xuXG4gICAgICAgIGNvbnN0IGluY2x1ZGUgPSB0aGlzLmV4cGFuZEluY2x1ZGUoZ2l0bGFiRGF0YT8uaW5jbHVkZSwgb3B0cy52YXJpYWJsZXMpO1xuXG4gICAgICAgIHRoaXMubm9ybWFsaXplVHJpZ2dlckluY2x1ZGUoZ2l0bGFiRGF0YSwgb3B0cyk7XG4gICAgICAgIC8vIEZpbmQgZmlsZXMgdG8gZmV0Y2ggZnJvbSByZW1vdGUgYW5kIHBsYWNlIGluIC5naXRsYWItY2ktbG9jYWwvaW5jbHVkZXNcbiAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIHZhbHVlXSBvZiBpbmNsdWRlLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlW1wicnVsZXNcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmNsdWRlX3J1bGVzID0gdmFsdWVbXCJydWxlc1wiXTtcbiAgICAgICAgICAgICAgICBjb25zdCBydWxlc1Jlc3VsdCA9IFV0aWxzLmdldFJ1bGVzUmVzdWx0KHthcmd2LCBjd2QsIHJ1bGVzOiBpbmNsdWRlX3J1bGVzLCB2YXJpYWJsZXM6IG9wdHMudmFyaWFibGVzfSwgZ2l0RGF0YSk7XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGVzUmVzdWx0LndoZW4gPT09IFwibmV2ZXJcIikge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWVbXCJmaWxlXCJdKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWxlVmFsdWUgb2YgQXJyYXkuaXNBcnJheSh2YWx1ZVtcImZpbGVcIl0pID8gdmFsdWVbXCJmaWxlXCJdIDogW3ZhbHVlW1wiZmlsZVwiXV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLmRvd25sb2FkSW5jbHVkZVByb2plY3RGaWxlKGN3ZCwgc3RhdGVEaXIsIHZhbHVlW1wicHJvamVjdFwiXSwgdmFsdWVbXCJyZWZcIl0gfHwgXCJIRUFEXCIsIGZpbGVWYWx1ZSwgZ2l0RGF0YSwgZmV0Y2hJbmNsdWRlcykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVbXCJ0ZW1wbGF0ZVwiXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHtwcm9qZWN0LCByZWYsIGZpbGUsIGRvbWFpbn0gPSB0aGlzLmNvdmVydFRlbXBsYXRlVG9Qcm9qZWN0RmlsZSh2YWx1ZVtcInRlbXBsYXRlXCJdKTtcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBgaHR0cHM6Ly8ke2RvbWFpbn0vJHtwcm9qZWN0fS8tL3Jhdy8ke3JlZn0vJHtmaWxlfWA7XG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLmRvd25sb2FkSW5jbHVkZVJlbW90ZShjd2QsIHN0YXRlRGlyLCB1cmwsIGZldGNoSW5jbHVkZXMpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVbXCJyZW1vdGVcIl0pIHtcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuZG93bmxvYWRJbmNsdWRlUmVtb3RlKGN3ZCwgc3RhdGVEaXIsIHZhbHVlW1wicmVtb3RlXCJdLCBmZXRjaEluY2x1ZGVzKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW1wiY29tcG9uZW50XCJdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5wYXJzZUluY2x1ZGVDb21wb25lbnQodmFsdWVbXCJjb21wb25lbnRcIl0sIGdpdERhdGEpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudFBhcnNlQ2FjaGUuc2V0KGluZGV4LCBjb21wb25lbnQpO1xuICAgICAgICAgICAgICAgIGlmICghY29tcG9uZW50LmlzTG9jYWwpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuZG93bmxvYWRJbmNsdWRlQ29tcG9uZW50KGN3ZCwgc3RhdGVEaXIsIGNvbXBvbmVudC5wcm9qZWN0UGF0aCwgY29tcG9uZW50LnJlZiwgY29tcG9uZW50Lm5hbWUsIGdpdERhdGEsIGZldGNoSW5jbHVkZXMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblxuICAgICAgICBmb3IgKGNvbnN0IFtpbmRleCwgdmFsdWVdIG9mIGluY2x1ZGUuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAodmFsdWVbXCJydWxlc1wiXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluY2x1ZGVfcnVsZXMgPSB2YWx1ZVtcInJ1bGVzXCJdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJ1bGVzUmVzdWx0ID0gVXRpbHMuZ2V0UnVsZXNSZXN1bHQoe2FyZ3YsIGN3ZCwgcnVsZXM6IGluY2x1ZGVfcnVsZXMsIHZhcmlhYmxlczogb3B0cy52YXJpYWJsZXN9LCBnaXREYXRhKTtcbiAgICAgICAgICAgICAgICBpZiAocnVsZXNSZXN1bHQud2hlbiA9PT0gXCJuZXZlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZVtcImxvY2FsXCJdKSB7XG4gICAgICAgICAgICAgICAgdmFsaWRhdGVJbmNsdWRlTG9jYWwodmFsdWVbXCJsb2NhbFwiXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCByZXNvbHZlSW5jbHVkZUxvY2FsKHZhbHVlW1wibG9jYWxcIl0sIGN3ZCk7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcih7bWVzc2FnZTogYExvY2FsIGluY2x1ZGUgZmlsZSBjYW5ub3QgYmUgZm91bmQgJHt2YWx1ZVtcImxvY2FsXCJdfWB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBsb2NhbEZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IFBhcnNlci5sb2FkWWFtbChsb2NhbEZpbGUsIHtpbnB1dHM6IHZhbHVlLmlucHV0cyA/PyB7fX0sIGV4cGFuZFZhcmlhYmxlcyk7XG4gICAgICAgICAgICAgICAgICAgIGluY2x1ZGVEYXRhcyA9IGluY2x1ZGVEYXRhcy5jb25jYXQoYXdhaXQgdGhpcy5pbml0KGNvbnRlbnQsIG9wdHMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW1wicHJvamVjdFwiXSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmlsZVZhbHVlIG9mIEFycmF5LmlzQXJyYXkodmFsdWVbXCJmaWxlXCJdKSA/IHZhbHVlW1wiZmlsZVwiXSA6IFt2YWx1ZVtcImZpbGVcIl1dKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVEb2MgPSBhd2FpdCBQYXJzZXIubG9hZFlhbWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBgJHtjd2R9LyR7c3RhdGVEaXJ9L2luY2x1ZGVzLyR7Z2l0RGF0YS5yZW1vdGUuaG9zdH0vJHt2YWx1ZVtcInByb2plY3RcIl19LyR7dmFsdWVbXCJyZWZcIl0gfHwgXCJIRUFEXCJ9LyR7ZmlsZVZhbHVlfWBcbiAgICAgICAgICAgICAgICAgICAgICAgICwge2lucHV0czogdmFsdWUuaW5wdXRzIHx8IHt9fVxuICAgICAgICAgICAgICAgICAgICAgICAgLCBleHBhbmRWYXJpYWJsZXMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBFeHBhbmQgbG9jYWwgaW5jbHVkZXMgaW5zaWRlIGEgXCJwcm9qZWN0XCItbGlrZSBpbmNsdWRlXG4gICAgICAgICAgICAgICAgICAgIGZpbGVEb2NbXCJpbmNsdWRlXCJdID0gdGhpcy5leHBhbmRJbm5lckxvY2FsSW5jbHVkZXMoZmlsZURvY1tcImluY2x1ZGVcIl0sIHZhbHVlW1wicHJvamVjdFwiXSwgdmFsdWVbXCJyZWZcIl0sIG9wdHMpO1xuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlRGF0YXMgPSBpbmNsdWRlRGF0YXMuY29uY2F0KGF3YWl0IHRoaXMuaW5pdChmaWxlRG9jLCBvcHRzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVtcImNvbXBvbmVudFwiXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbXBvbmVudFBhcnNlQ2FjaGUuZ2V0KGluZGV4KTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoY29tcG9uZW50ICE9PSB1bmRlZmluZWQsIGBJbnRlcm5hbCBlcnJvciwgY29tcG9uZW50IHBhcnNlIGNhY2hlIG1pc3NpbmcgZW50cnkgWyR7aW5kZXh9XWApO1xuICAgICAgICAgICAgICAgIC8vIEdpdGxhYiBhbGxvd3MgdHdvIGRpZmZlcmVudCBmaWxlIHBhdGhzIHRvIGluY2x1ZGUgYSBjb21wb25lbnRcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlcyA9IFtgJHtjb21wb25lbnQubmFtZX0ueW1sYCwgYCR7Y29tcG9uZW50Lm5hbWV9L3RlbXBsYXRlLnltbGBdO1xuXG4gICAgICAgICAgICAgICAgbGV0IGZpbGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZiBvZiBmaWxlcykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgc2VhcmNoUGF0aCA9IGAke2N3ZH0vJHtmfWA7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY29tcG9uZW50LmlzTG9jYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFBhdGggPSBgJHtjd2R9LyR7c3RhdGVEaXJ9L2luY2x1ZGVzLyR7Z2l0RGF0YS5yZW1vdGUuaG9zdH0vJHtjb21wb25lbnQucHJvamVjdFBhdGh9LyR7Y29tcG9uZW50LnJlZn0vJHtmfWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoc2VhcmNoUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgPSBzZWFyY2hQYXRoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzc2VydChmaWxlICE9PSBudWxsLCBgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBjb21wb25lbnQ6IFxcYCR7dmFsdWVbXCJjb21wb25lbnRcIl19XFxgLiBPbmUgb2YgdGhlIGZpbGVzIFske2ZpbGVzfV0gbXVzdCBleGlzdCBpbiBcXGAke2NvbXBvbmVudC5kb21haW59YCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29tcG9uZW50LnBvcnQgPyBgOiR7Y29tcG9uZW50LnBvcnR9YCA6IFwiXCIpICsgYC8ke2NvbXBvbmVudC5wcm9qZWN0UGF0aH1cXGBgKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVEb2MgPSBhd2FpdCBQYXJzZXIubG9hZFlhbWwoZmlsZSwge2lucHV0czogdmFsdWUuaW5wdXRzIHx8IHt9fSwgZXhwYW5kVmFyaWFibGVzKTtcbiAgICAgICAgICAgICAgICAvLyBFeHBhbmQgbG9jYWwgaW5jbHVkZXMgaW5zaWRlIHRvIGEgXCJwcm9qZWN0XCItbGlrZSBpbmNsdWRlXG4gICAgICAgICAgICAgICAgZmlsZURvY1tcImluY2x1ZGVcIl0gPSB0aGlzLmV4cGFuZElubmVyTG9jYWxJbmNsdWRlcyhmaWxlRG9jW1wiaW5jbHVkZVwiXSwgY29tcG9uZW50LnByb2plY3RQYXRoLCBjb21wb25lbnQucmVmLCBvcHRzKTtcbiAgICAgICAgICAgICAgICBpbmNsdWRlRGF0YXMgPSBpbmNsdWRlRGF0YXMuY29uY2F0KGF3YWl0IHRoaXMuaW5pdChmaWxlRG9jLCBvcHRzKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW1widGVtcGxhdGVcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7cHJvamVjdCwgcmVmLCBmaWxlLCBkb21haW59ID0gdGhpcy5jb3ZlcnRUZW1wbGF0ZVRvUHJvamVjdEZpbGUodmFsdWVbXCJ0ZW1wbGF0ZVwiXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZnNVcmwgPSBVdGlscy5mc1VybChgaHR0cHM6Ly8ke2RvbWFpbn0vJHtwcm9qZWN0fS8tL3Jhdy8ke3JlZn0vJHtmaWxlfWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVEb2MgPSBhd2FpdCBQYXJzZXIubG9hZFlhbWwoXG4gICAgICAgICAgICAgICAgICAgIGAke2N3ZH0vJHtzdGF0ZURpcn0vaW5jbHVkZXMvJHtmc1VybH1gLCB7aW5wdXRzOiB2YWx1ZS5pbnB1dHMgfHwge319LCBleHBhbmRWYXJpYWJsZXMsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpbmNsdWRlRGF0YXMgPSBpbmNsdWRlRGF0YXMuY29uY2F0KGF3YWl0IHRoaXMuaW5pdChmaWxlRG9jLCBvcHRzKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW1wicmVtb3RlXCJdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZnNVcmwgPSBVdGlscy5mc1VybCh2YWx1ZVtcInJlbW90ZVwiXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZURvYyA9IGF3YWl0IFBhcnNlci5sb2FkWWFtbChcbiAgICAgICAgICAgICAgICAgICAgYCR7Y3dkfS8ke3N0YXRlRGlyfS9pbmNsdWRlcy8ke2ZzVXJsfWAsIHtpbnB1dHM6IHZhbHVlLmlucHV0cyB8fCB7fX0sIGV4cGFuZFZhcmlhYmxlcyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGluY2x1ZGVEYXRhcyA9IGluY2x1ZGVEYXRhcy5jb25jYXQoYXdhaXQgdGhpcy5pbml0KGZpbGVEb2MsIG9wdHMpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKHttZXNzYWdlOiBgRGlkbid0IHVuZGVyc3RhbmQgaW5jbHVkZSAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpbmNsdWRlRGF0YXMucHVzaChnaXRsYWJEYXRhKTtcbiAgICAgICAgcmV0dXJuIGluY2x1ZGVEYXRhcztcbiAgICB9XG5cbiAgICBzdGF0aWMgZXhwYW5kSW5jbHVkZSAoaTogYW55LCB2YXJpYWJsZXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9KTogYW55W10ge1xuICAgICAgICBsZXQgaW5jbHVkZSA9IGkgfHwgW107XG4gICAgICAgIGlmIChpbmNsdWRlICYmIGluY2x1ZGUubGVuZ3RoID09IG51bGwpIHtcbiAgICAgICAgICAgIGluY2x1ZGUgPSBbIGkgXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGluY2x1ZGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGluY2x1ZGUgPSBbaW5jbHVkZV07XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IFtpbmRleCwgZW50cnldIG9mIE9iamVjdC5lbnRyaWVzKGluY2x1ZGUpKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSBcInN0cmluZ1wiICYmIChlbnRyeS5zdGFydHNXaXRoKFwiaHR0cHM6XCIpIHx8IGVudHJ5LnN0YXJ0c1dpdGgoXCJodHRwOlwiKSkpIHtcbiAgICAgICAgICAgICAgICBpbmNsdWRlW2luZGV4XSA9IHtcInJlbW90ZVwiOiBlbnRyeX07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGluY2x1ZGVbaW5kZXhdID0ge1wibG9jYWxcIjogZW50cnl9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbmNsdWRlW2luZGV4XSA9IGVudHJ5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGluY2x1ZGUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGVudHJ5KSkge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBlbnRyeVtrZXldID0gdmFsdWUubWFwKCh2KSA9PiBVdGlscy5leHBhbmRUZXh0KHYsIHZhcmlhYmxlcykpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVudHJ5W2tleV0gPSBVdGlscy5leHBhbmRUZXh0KHZhbHVlLCB2YXJpYWJsZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbmNsdWRlO1xuICAgIH1cblxuICAgIHN0YXRpYyBjb3ZlcnRUZW1wbGF0ZVRvUHJvamVjdEZpbGUgKHRlbXBsYXRlOiBzdHJpbmcpOiB7cHJvamVjdDogc3RyaW5nOyByZWY6IHN0cmluZzsgZmlsZTogc3RyaW5nOyBkb21haW46IHN0cmluZ30ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZG9tYWluOiBcImdpdGxhYi5jb21cIixcbiAgICAgICAgICAgIHByb2plY3Q6IFwiZ2l0bGFiLW9yZy9naXRsYWJcIixcbiAgICAgICAgICAgIHJlZjogXCJIRUFEXCIsXG4gICAgICAgICAgICBmaWxlOiBgbGliL2dpdGxhYi9jaS90ZW1wbGF0ZXMvJHt0ZW1wbGF0ZX1gLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZUluY2x1ZGVDb21wb25lbnQgKGNvbXBvbmVudDogc3RyaW5nLCBnaXREYXRhOiBHaXREYXRhKTogUGFyc2VkQ29tcG9uZW50IHtcbiAgICAgICAgYXNzZXJ0KCFjb21wb25lbnQuaW5jbHVkZXMoXCI6Ly9cIiksIGBUaGlzIEdpdExhYiBDSSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQ6IGNvbXBvbmVudDogXFxgJHtjb21wb25lbnR9XFxgIHNob3VsZCBub3QgY29udGFpbiBwcm90b2NvbGApO1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gLyg/PGRvbWFpbj5bXi86XFxzXSspKDooPzxwb3J0PlxcZCspKT9cXC8oPzxwcm9qZWN0UGF0aD4uKylcXC8oPzxjb21wb25lbnROYW1lPlteQF0rKUAoPzxyZWY+LispLzsgLy8gaHR0cHM6Ly9yZWdleHIuY29tLzd2N2htXG4gICAgICAgIGNvbnN0IGdpdFJlbW90ZU1hdGNoID0gcGF0dGVybi5leGVjKGNvbXBvbmVudCk7XG5cbiAgICAgICAgaWYgKGdpdFJlbW90ZU1hdGNoPy5ncm91cHMgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKGBUaGlzIGlzIGEgYnVnLCBwbGVhc2UgY3JlYXRlIGEgZ2l0aHViIGlzc3VlIGlmIHRoaXMgaXMgc29tZXRoaW5nIHlvdSdyZSBleHBlY3RpbmcgdG8gd29yay4gaW5wdXQ6ICR7Y29tcG9uZW50fWApO1xuXG4gICAgICAgIGNvbnN0IHtkb21haW4sIHByb2plY3RQYXRoLCBwb3J0fSA9IGdpdFJlbW90ZU1hdGNoLmdyb3VwcztcbiAgICAgICAgbGV0IHJlZiA9IGdpdFJlbW90ZU1hdGNoLmdyb3Vwc1tcInJlZlwiXTtcbiAgICAgICAgY29uc3QgaXNMb2NhbENvbXBvbmVudCA9IHByb2plY3RQYXRoID09PSBgJHtnaXREYXRhLnJlbW90ZS5ncm91cH0vJHtnaXREYXRhLnJlbW90ZS5wcm9qZWN0fWAgJiYgcmVmID09PSBnaXREYXRhLmNvbW1pdC5TSEE7XG5cbiAgICAgICAgaWYgKCFpc0xvY2FsQ29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb25zdCBzZW1hbnRpY1ZlcnNpb25SYW5nZXNQYXR0ZXJuID0gL15cXGQrKFxcLlxcZCspPyQvO1xuICAgICAgICAgICAgaWYgKHJlZiA9PSBcIn5sYXRlc3RcIiB8fCBzZW1hbnRpY1ZlcnNpb25SYW5nZXNQYXR0ZXJuLnRlc3QocmVmKSkge1xuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZG9jcy5naXRsYWIuY29tL2NpL2NvbXBvbmVudHMvI3NlbWFudGljLXZlcnNpb24tcmFuZ2VzXG4gICAgICAgICAgICAgICAgbGV0IHN0ZG91dDtcbiAgICAgICAgICAgICAgICBpZiAoZ2l0RGF0YS5yZW1vdGUuc2NoZW1hID09IFwiZ2l0XCIgfHwgZ2l0RGF0YS5yZW1vdGUuc2NoZW1hID09IFwic3NoXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Rkb3V0ID0gVXRpbHMuc3luY1NwYXduKFtcImdpdFwiLCBcImxzLXJlbW90ZVwiLCBcIi0tdGFnc1wiLCBgZ2l0QCR7ZG9tYWlufToke3Byb2plY3RQYXRofWBdKS5zdGRvdXQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3Rkb3V0ID0gVXRpbHMuc3luY1NwYXduKFtcImdpdFwiLCBcImxzLXJlbW90ZVwiLCBcIi0tdGFnc1wiLCBgJHtnaXREYXRhLnJlbW90ZS5zY2hlbWF9Oi8vJHtkb21haW59OiR7cG9ydCA/PyA0NDN9LyR7cHJvamVjdFBhdGh9LmdpdGBdKS5zdGRvdXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzc2VydChzdGRvdXQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhZ3MgPSBzdGRvdXRcbiAgICAgICAgICAgICAgICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGxpbmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsaW5lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KFwiXFx0XCIpWzFdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KFwiL1wiKVsyXTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgX3JlZiA9IHJlc29sdmVTZW1hbnRpY1ZlcnNpb25SYW5nZShyZWYsIHRhZ3MpO1xuICAgICAgICAgICAgICAgIGFzc2VydChfcmVmLCBgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBjb21wb25lbnQ6IFxcYCR7Y29tcG9uZW50fVxcYCAtIFRoZSByZWYgKCR7cmVmfSkgaXMgaW52YWxpZGApO1xuICAgICAgICAgICAgICAgIHJlZiA9IF9yZWY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRvbWFpbjogZG9tYWluLFxuICAgICAgICAgICAgcG9ydDogcG9ydCxcbiAgICAgICAgICAgIHByb2plY3RQYXRoOiBwcm9qZWN0UGF0aCxcbiAgICAgICAgICAgIG5hbWU6IGB0ZW1wbGF0ZXMvJHtnaXRSZW1vdGVNYXRjaC5ncm91cHNbXCJjb21wb25lbnROYW1lXCJdfWAsXG4gICAgICAgICAgICByZWY6IHJlZixcbiAgICAgICAgICAgIGlzTG9jYWw6IGlzTG9jYWxDb21wb25lbnQsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gRXhwYW5kIGxvY2FsIGluY2x1ZGVzIGluc2lkZSB0byBhIFwicHJvamVjdFwiLWxpa2UgaW5jbHVkZVxuICAgIHN0YXRpYyBleHBhbmRJbm5lckxvY2FsSW5jbHVkZXMgKGZpbGVJbmNsdWRlczogYW55LCBwcm9qZWN0UGF0aDogc3RyaW5nLCByZWY6IHN0cmluZywgb3B0czogUGFyc2VySW5jbHVkZXNJbml0T3B0aW9ucykge1xuICAgICAgICBjb25zdCB7YXJndn0gPSBvcHRzO1xuICAgICAgICBjb25zdCB1cGRhdGVkSW5jbHVkZXMgPSB0aGlzLmV4cGFuZEluY2x1ZGUoZmlsZUluY2x1ZGVzLCBvcHRzLnZhcmlhYmxlcyk7XG4gICAgICAgIHVwZGF0ZWRJbmNsdWRlcy5mb3JFYWNoKChpbm5lcjogYW55LCBpOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGlmICghaW5uZXJbXCJsb2NhbFwiXSkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKGlubmVyW1wicnVsZXNcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBydWxlc1Jlc3VsdCA9IFV0aWxzLmdldFJ1bGVzUmVzdWx0KHthcmd2LCBjd2Q6IG9wdHMuY3dkLCB2YXJpYWJsZXM6IG9wdHMudmFyaWFibGVzLCBydWxlczogaW5uZXJbXCJydWxlc1wiXX0sIG9wdHMuZ2l0RGF0YSk7XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGVzUmVzdWx0LndoZW4gPT09IFwibmV2ZXJcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdXBkYXRlZEluY2x1ZGVzW2ldID0ge1xuICAgICAgICAgICAgICAgIHByb2plY3Q6IHByb2plY3RQYXRoLFxuICAgICAgICAgICAgICAgIGZpbGU6IGlubmVyW1wibG9jYWxcIl0ucmVwbGFjZSgvXlxcLy8sIFwiXCIpLFxuICAgICAgICAgICAgICAgIHJlZjogcmVmLFxuICAgICAgICAgICAgICAgIGlucHV0czogaW5uZXIuaW5wdXRzIHx8IHt9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB1cGRhdGVkSW5jbHVkZXM7XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGRvd25sb2FkSW5jbHVkZVJlbW90ZSAoY3dkOiBzdHJpbmcsIHN0YXRlRGlyOiBzdHJpbmcsIHVybDogc3RyaW5nLCBmZXRjaEluY2x1ZGVzOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGZzVXJsID0gVXRpbHMuZnNVcmwodXJsKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGAke2N3ZH0vJHtzdGF0ZURpcn0vaW5jbHVkZXMvJHtmc1VybH1gO1xuICAgICAgICAgICAgaWYgKGF3YWl0IGZzLnBhdGhFeGlzdHModGFyZ2V0KSAmJiAhZmV0Y2hJbmNsdWRlcykgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgYXhpb3NDb25maWc6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XCJVc2VyLUFnZW50XCI6IFwiZ2l0bGFiLWNpLWxvY2FsXCJ9LFxuICAgICAgICAgICAgICAgIC4uLlV0aWxzLmdldEF4aW9zUHJveHlDb25maWcoKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBheGlvcy5nZXQodXJsLCBheGlvc0NvbmZpZyk7XG4gICAgICAgICAgICBhd2FpdCBmcy5vdXRwdXRGaWxlKHRhcmdldCwgcmVzLmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3Ioe21lc3NhZ2U6IGBSZW1vdGUgaW5jbHVkZSBjb3VsZCBub3QgYmUgZmV0Y2hlZCAke3VybH1cXG4ke2V9YH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGRvd25sb2FkSW5jbHVkZVByb2plY3RGaWxlIChjd2Q6IHN0cmluZywgc3RhdGVEaXI6IHN0cmluZywgcHJvamVjdDogc3RyaW5nLCByZWY6IHN0cmluZywgZmlsZTogc3RyaW5nLCBnaXREYXRhOiBHaXREYXRhLCBmZXRjaEluY2x1ZGVzOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHJlbW90ZSA9IGdpdERhdGEucmVtb3RlO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkRmlsZSA9IGZpbGUucmVwbGFjZSgvXlxcLysvLCBcIlwiKTtcbiAgICAgICAgbGV0IHRtcERpciA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBgJHtzdGF0ZURpcn0vaW5jbHVkZXMvJHtyZW1vdGUuaG9zdH0vJHtwcm9qZWN0fS8ke3JlZn1gO1xuICAgICAgICAgICAgaWYgKGF3YWl0IGZzLnBhdGhFeGlzdHMoYCR7Y3dkfS8ke3RhcmdldH0vJHtub3JtYWxpemVkRmlsZX1gKSAmJiAhZmV0Y2hJbmNsdWRlcykgcmV0dXJuO1xuXG4gICAgICAgICAgICBpZiAocmVtb3RlLnNjaGVtYS5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4dCA9IFwidG1wLVwiICsgTWF0aC5yYW5kb20oKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5ta2RpcnAocGF0aC5kaXJuYW1lKGAke2N3ZH0vJHt0YXJnZXR9LyR7bm9ybWFsaXplZEZpbGV9YCkpO1xuICAgICAgICAgICAgICAgIHRtcERpciA9IGAke2N3ZH0vJHt0YXJnZXR9LiR7ZXh0fWA7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBnaXRDbG9uZUJyYW5jaCA9IChyZWYgPT09IFwiSEVBRFwiKSA/IFwiXCIgOiBgLS1icmFuY2ggJHtyZWZ9YDtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5iYXNoTXVsdGkoW1xuICAgICAgICAgICAgICAgICAgICBgY2QgJHtjd2R9LyR7c3RhdGVEaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgYGdpdCBjbG9uZSAke2dpdENsb25lQnJhbmNofSAtbiAtLWRlcHRoPTEgLS1maWx0ZXI9dHJlZTowICR7cmVtb3RlLnNjaGVtYX06Ly8ke3JlbW90ZS5ob3N0fToke3JlbW90ZS5wb3J0fS8ke3Byb2plY3R9LmdpdCAke3RtcERpcn1gLFxuICAgICAgICAgICAgICAgICAgICBgY2QgJHt0bXBEaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgYGdpdCBzcGFyc2UtY2hlY2tvdXQgc2V0IC0tbm8tY29uZSAke25vcm1hbGl6ZWRGaWxlfWAsXG4gICAgICAgICAgICAgICAgICAgIFwiZ2l0IGNoZWNrb3V0XCIsXG4gICAgICAgICAgICAgICAgICAgIGBjZCAke2N3ZH0vJHtzdGF0ZURpcn1gLFxuICAgICAgICAgICAgICAgICAgICBgY3AgJHt0bXBEaXJ9LyR7bm9ybWFsaXplZEZpbGV9ICR7Y3dkfS8ke3RhcmdldH0vJHtub3JtYWxpemVkRmlsZX1gLFxuICAgICAgICAgICAgICAgIF0sIGN3ZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IGZzLm1rZGlycChgJHtjd2R9LyR7dGFyZ2V0fWApO1xuICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLmJhc2goYHNldCAtZW91IHBpcGVmYWlsOyBnaXQgYXJjaGl2ZSAtLXJlbW90ZT1zc2g6Ly9naXRAJHtyZW1vdGUuaG9zdH06JHtyZW1vdGUucG9ydH0vJHtwcm9qZWN0fS5naXQgJHtyZWZ9ICR7bm9ybWFsaXplZEZpbGV9IHwgdGFyIC1mIC0gLXhDICR7dGFyZ2V0fS9gLCBjd2QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3Ioe21lc3NhZ2U6IGBQcm9qZWN0IGluY2x1ZGUgY291bGQgbm90IGJlIGZldGNoZWQgeyBwcm9qZWN0OiAke3Byb2plY3R9LCByZWY6ICR7cmVmfSwgZmlsZTogJHtub3JtYWxpemVkRmlsZX0gfVxcbiR7ZX1gfSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAodG1wRGlyICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gYWx3YXlzIGNsZWFudXAgdGVtcG9yYXJ5IGRpcmVjdG9yeSAoaWYgY3JlYXRlZClcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5ybSh0bXBEaXIsIHtyZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgZG93bmxvYWRJbmNsdWRlQ29tcG9uZW50IChjd2Q6IHN0cmluZywgc3RhdGVEaXI6IHN0cmluZywgcHJvamVjdDogc3RyaW5nLCByZWY6IHN0cmluZywgY29tcG9uZW50TmFtZTogc3RyaW5nLCBnaXREYXRhOiBHaXREYXRhLCBmZXRjaEluY2x1ZGVzOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHJlbW90ZSA9IGdpdERhdGEucmVtb3RlO1xuICAgICAgICBjb25zdCBmaWxlcyA9IFtgJHtjb21wb25lbnROYW1lfS55bWxgLCBgJHtjb21wb25lbnROYW1lfS90ZW1wbGF0ZS55bWxgXTtcbiAgICAgICAgbGV0IHRtcERpciA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBgJHtzdGF0ZURpcn0vaW5jbHVkZXMvJHtyZW1vdGUuaG9zdH0vJHtwcm9qZWN0fS8ke3JlZn1gO1xuXG4gICAgICAgICAgICBpZiAoIWZldGNoSW5jbHVkZXMgJiYgKGF3YWl0IGZzLnBhdGhFeGlzdHMoYCR7Y3dkfS8ke3RhcmdldH0vJHtmaWxlc1swXX1gKSB8fCBhd2FpdCBmcy5wYXRoRXhpc3RzKGAke2N3ZH0vJHt0YXJnZXR9LyR7ZmlsZXNbMV19YCkpKSByZXR1cm47XG5cbiAgICAgICAgICAgIGlmIChyZW1vdGUuc2NoZW1hLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXh0ID0gXCJ0bXAtXCIgKyBNYXRoLnJhbmRvbSgpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGZzLm1rZGlycChwYXRoLmRpcm5hbWUoYCR7Y3dkfS8ke3RhcmdldH0vdGVtcGxhdGVzYCkpO1xuICAgICAgICAgICAgICAgIHRtcERpciA9IGAke2N3ZH0vJHt0YXJnZXR9LiR7ZXh0fWA7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBnaXRDbG9uZUJyYW5jaCA9IChyZWYgPT09IFwiSEVBRFwiKSA/IFwiXCIgOiBgLS1icmFuY2ggJHtyZWZ9YDtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5iYXNoTXVsdGkoW1xuICAgICAgICAgICAgICAgICAgICBgY2QgJHtjd2R9LyR7c3RhdGVEaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgYGdpdCBjbG9uZSAke2dpdENsb25lQnJhbmNofSAtbiAtLWRlcHRoPTEgLS1maWx0ZXI9dHJlZTowICR7cmVtb3RlLnNjaGVtYX06Ly8ke3JlbW90ZS5ob3N0fToke3JlbW90ZS5wb3J0fS8ke3Byb2plY3R9LmdpdCAke3RtcERpcn1gLFxuICAgICAgICAgICAgICAgICAgICBgY2QgJHt0bXBEaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgYGdpdCBzcGFyc2UtY2hlY2tvdXQgc2V0IC0tbm8tY29uZSAke2ZpbGVzWzBdfSAke2ZpbGVzWzFdfWAsXG4gICAgICAgICAgICAgICAgICAgIFwiZ2l0IGNoZWNrb3V0XCIsXG4gICAgICAgICAgICAgICAgICAgIGBjZCAke2N3ZH0vJHtzdGF0ZURpcn1gLFxuICAgICAgICAgICAgICAgICAgICBgbWtkaXIgLXAgJHt0bXBEaXJ9L3RlbXBsYXRlc2AsIC8vIGNyZWF0ZSB0ZW1wbGF0ZXMgc3ViZGlyIChpZiBpdCBkb2Vzbid0IGV4aXN0KSwgYXMgdGhlIGNoZWNrIG91dCBtYXkgbm90IGNyZWF0ZSBpdFxuICAgICAgICAgICAgICAgICAgICBgY3AgLXIgJHt0bXBEaXJ9L3RlbXBsYXRlcyAke2N3ZH0vJHt0YXJnZXR9YCxcbiAgICAgICAgICAgICAgICBdLCBjd2QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBnaXQgYXJjaGl2ZSBmYWlscyBpZiB0aGUgcGF0aHMgZG8gbm90IGV4aXN0LCB0byB3b3JrIGFyb3VuZCB0aGlzIHdlIHVzZSBhIHdpbGRjYXJkIFwidGVtcGxhdGVzL2NvbXBvbmVudCoueW1sXCJcbiAgICAgICAgICAgICAgICAvLyB0aGlzIHJlc29sdmVzIHRvIGVpdGhlciBcInRlbXBsYXRlcy9jb21wb25lbnQueW1sXCIgb3IgXCJ0ZW1wbGF0ZXMvY29tcG9uZW50L3RlbXBsYXRlLnltbFwiXG4gICAgICAgICAgICAgICAgLy8gaWYgYm90aCBleGlzdCBcInRlbXBsYXRlcy9jb21wb25lbnQueW1sXCIgd2lsbCBiZSBwdWxsZWRcbiAgICAgICAgICAgICAgICAvLyBEcmF3YmFjazogYWxzbyBwdWxscyBhbGwgb3RoZXIgLnltbCBmaWxlcyBmcm9tIHRlbXBsYXRlcy9jb21wb25lbnQvIGRpcmVjdG9yeVxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudFdpbGRjYXJkID0gYCR7Y29tcG9uZW50TmFtZX0qLnltbGA7XG4gICAgICAgICAgICAgICAgYXdhaXQgZnMubWtkaXJwKGAke2N3ZH0vJHt0YXJnZXR9YCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgVXRpbHMuYmFzaChgc2V0IC1lb3UgcGlwZWZhaWw7IGdpdCBhcmNoaXZlIC0tcmVtb3RlPXNzaDovL2dpdEAke3JlbW90ZS5ob3N0fToke3JlbW90ZS5wb3J0fS8ke3Byb2plY3R9LmdpdCAke3JlZn0gJHtjb21wb25lbnRXaWxkY2FyZH0gfCB0YXIgLWYgLSAteEMgJHt0YXJnZXR9L2AsIGN3ZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcih7bWVzc2FnZTogYENvbXBvbmVudCBpbmNsdWRlIGNvdWxkIG5vdCBiZSBmZXRjaGVkIHsgcHJvamVjdDogJHtwcm9qZWN0fSwgcmVmOiAke3JlZn0sIGZpbGU6ICR7ZmlsZXN9IH1cXG4ke2V9YH0pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKHRtcERpciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIGFsd2F5cyBjbGVhbnVwIHRlbXBvcmFyeSBkaXJlY3RvcnkgKGlmIGNyZWF0ZWQpXG4gICAgICAgICAgICAgICAgYXdhaXQgZnMucm0odG1wRGlyLCB7cmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIHJlYWRvbmx5IG1lbW9Mb2NhbFJlcG9GaWxlcyA9ICgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZ1tdPigpO1xuICAgICAgICByZXR1cm4gYXN5bmMgKHBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGNhY2hlLmdldChwYXRoKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gcmVzdWx0O1xuXG4gICAgICAgICAgICByZXN1bHQgPSAoYXdhaXQgVXRpbHMuZ2V0VHJhY2tlZEZpbGVzKHBhdGgpKS5tYXAocCA9PiBgJHtwYXRofS8ke3B9YCk7XG4gICAgICAgICAgICBjYWNoZS5zZXQocGF0aCwgcmVzdWx0KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgfSkoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlSW5jbHVkZUxvY2FsIChmaWxlUGF0aDogc3RyaW5nKSB7XG4gICAgYXNzZXJ0KCFmaWxlUGF0aC5zdGFydHNXaXRoKFwiLi9cIiksIGBcXGAke2ZpbGVQYXRofVxcYCBmb3IgaW5jbHVkZTpsb2NhbCBpcyBpbnZhbGlkLiBHaXRsYWIgZG9lcyBub3Qgc3VwcG9ydCByZWxhdGl2ZSBwYXRoIChpZS4gY2Fubm90IHN0YXJ0IHdpdGggXFxgLi9cXGApLmApO1xuICAgIGFzc2VydCghZmlsZVBhdGguaW5jbHVkZXMoXCIuLlwiKSwgYFxcYCR7ZmlsZVBhdGh9XFxgIGZvciBpbmNsdWRlOmxvY2FsIGlzIGludmFsaWQuIEdpdGxhYiBkb2VzIG5vdCBzdXBwb3J0IGRpcmVjdG9yeSB0cmF2ZXJzYWwuYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU2VtYW50aWNWZXJzaW9uUmFuZ2UgKHJhbmdlOiBzdHJpbmcsIGdpdFRhZ3M6IHN0cmluZ1tdKSB7XG4gICAgLyoqIHNvcnRlZCBsaXN0IG9mIHRhZ3MgdGhhdHMgY29tcGxpYW50IHRvIHNlbWFudGljIHZlcnNpb24gd2hlcmUgaW5kZXggMCBpcyB0aGUgbGF0ZXN0ICovXG4gICAgY29uc3Qgc2FuaXRpemVkU2VtdmVyVGFncyA9IHNlbXZlci5yc29ydChcbiAgICAgICAgZ2l0VGFncy5maWx0ZXIocyA9PiBzZW12ZXIudmFsaWQocykpLFxuICAgICk7XG5cbiAgICBjb25zdCBmb3VuZCA9IHNhbml0aXplZFNlbXZlclRhZ3MuZmluZCh0ID0+IHtcbiAgICAgICAgaWYgKHJhbmdlID09IFwifmxhdGVzdFwiKSB7XG4gICAgICAgICAgICBjb25zdCBzZW12ZXJQYXJzZWQgPSBzZW12ZXIucGFyc2UodCk7XG4gICAgICAgICAgICBhc3NlcnQoc2VtdmVyUGFyc2VkKTtcbiAgICAgICAgICAgIHJldHVybiAoc2VtdmVyUGFyc2VkLnByZXJlbGVhc2UubGVuZ3RoID09IDAgJiYgc2VtdmVyUGFyc2VkLmJ1aWxkLmxlbmd0aCA9PSAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzZW12ZXIuc2F0aXNmaWVzKHQsIHJhbmdlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBmb3VuZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVJbmNsdWRlTG9jYWwgKHBhdHRlcm46IHN0cmluZywgY3dkOiBzdHJpbmcpIHtcbiAgICBjb25zdCByZXBvRmlsZXMgPSBhd2FpdCBQYXJzZXJJbmNsdWRlcy5tZW1vTG9jYWxSZXBvRmlsZXMoY3dkKTtcblxuICAgIGlmICghcGF0dGVybi5zdGFydHNXaXRoKFwiL1wiKSkgcGF0dGVybiA9IGAvJHtwYXR0ZXJufWA7IC8vIEVuc3VyZSBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGAvYFxuICAgIHBhdHRlcm4gPSBgJHtjd2R9JHtwYXR0ZXJufWA7XG5cbiAgICAvLyBlc2NhcGUgYWxsIHNwZWNpYWwgcmVnZXggbWV0YWNoYXJhY3RlcnNcbiAgICBwYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgXCJcXFxcJCZcIik7XG5cbiAgICAvLyBgKipgIG1hdGNoZXMgYW55dGhpbmdcbiAgICBjb25zdCBhbnl0aGluZyA9IFwiLio/XCI7XG4gICAgcGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZSgvXFxcXFxcKlxcXFxcXCovZywgYW55dGhpbmcpO1xuXG4gICAgLy8gYCpgIG1hdGNoZXMgYW55dGhpbmcgZXhjZXB0IGZvciBgL2BcbiAgICBjb25zdCBhbnl0aGluZ19idXRfbm90X3NsYXNoID0gXCIoW14vXSkqP1wiO1xuICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2UoL1xcXFxcXCovZywgYW55dGhpbmdfYnV0X25vdF9zbGFzaCk7XG5cbiAgICBjb25zdCByZTJqcyA9IFJFMkpTLmNvbXBpbGUoYF4ke3BhdHRlcm59YCk7XG4gICAgcmV0dXJuIHJlcG9GaWxlcy5maWx0ZXIoKGY6IGFueSkgPT4gcmUyanMubWF0Y2hlcyhmKSk7XG59XG4iXX0=
package/src/parser.js CHANGED
@@ -1,4 +1,4 @@
1
- import chalk from "chalk";
1
+ import chalk from "chalk-template";
2
2
  import path from "path";
3
3
  import deepExtend from "deep-extend";
4
4
  import fs from "fs-extra";
@@ -354,4 +354,4 @@ function getExpectedInputType(ctx) {
354
354
  const { interpolationKey, inputsSpecification } = ctx;
355
355
  return inputsSpecification.spec.inputs[interpolationKey]?.type || "string";
356
356
  }
357
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxVQUFVLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMxQixPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLFlBQVksTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUM3QixPQUFPLEtBQUssWUFBWSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDakMsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6QyxPQUFPLEtBQUssUUFBUSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFHN0QsT0FBTyxFQUFDLElBQUksSUFBSSx1QkFBdUIsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBRTFFLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQztBQUN4QixNQUFNLDhCQUE4QixHQUFHLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFVLENBQUM7QUFHekYsTUFBTSxPQUFPLE1BQU07SUFFUCxPQUFPLEdBQWEsRUFBRSxDQUFDO0lBQ3ZCLFdB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QixDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQy9ELE1BQU0sQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFLEtBQUssQ0FBQSwwREFBMEQsY0FBYyxzQkFBc0IsZ0JBQWdCLGtEQUFrRCxDQUFDLENBQUM7SUFDeE0sT0FBTyxVQUFVLENBQUM7QUFDdEIsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUUsR0FBUTtJQUNuQyxNQUFNLEVBQUMsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUMsR0FBRyxHQUFHLENBQUM7SUFDcEQsT0FBTyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsSUFBSSxJQUFJLFFBQVEsQ0FBQztBQUMvRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCBkZWVwRXh0ZW5kIGZyb20gXCJkZWVwLWV4dGVuZFwiO1xuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0ICogYXMgeWFtbCBmcm9tIFwianMteWFtbFwiO1xuaW1wb3J0IHByZXR0eUhydGltZSBmcm9tIFwicHJldHR5LWhydGltZVwiO1xuaW1wb3J0IHtKb2J9IGZyb20gXCIuL2pvYi5qc1wiO1xuaW1wb3J0ICogYXMgRGF0YUV4cGFuZGVyIGZyb20gXCIuL2RhdGEtZXhwYW5kZXIuanNcIjtcbmltcG9ydCB7VXRpbHN9IGZyb20gXCIuL3V0aWxzLmpzXCI7XG5pbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7VmFsaWRhdG9yfSBmcm9tIFwiLi92YWxpZGF0b3IuanNcIjtcbmltcG9ydCAqIGFzIHBhcmFsbGVsIGZyb20gXCIuL3BhcmFsbGVsLmpzXCI7XG5pbXBvcnQge0dpdERhdGF9IGZyb20gXCIuL2dpdC1kYXRhLmpzXCI7XG5pbXBvcnQge1BhcnNlckluY2x1ZGVzfSBmcm9tIFwiLi9wYXJzZXItaW5jbHVkZXMuanNcIjtcbmltcG9ydCB7UHJvZHVjZXJzfSBmcm9tIFwiLi9wcm9kdWNlcnMuanNcIjtcbmltcG9ydCB7VmFyaWFibGVzRnJvbUZpbGVzfSBmcm9tIFwiLi92YXJpYWJsZXMtZnJvbS1maWxlcy5qc1wiO1xuaW1wb3J0IHtBcmd2fSBmcm9tIFwiLi9hcmd2LmpzXCI7XG5pbXBvcnQge1dyaXRlU3RyZWFtc30gZnJvbSBcIi4vd3JpdGUtc3RyZWFtcy5qc1wiO1xuaW1wb3J0IHtpbml0IGFzIGluaXRQcmVkZWZpbmVkVmFyaWFibGVzfSBmcm9tIFwiLi9wcmVkZWZpbmVkLXZhcmlhYmxlcy5qc1wiO1xuXG5jb25zdCBNQVhfRlVOQ1RJT05TID0gMztcbmNvbnN0IElOQ0xVREVfSU5QVVRTX1NVUFBPUlRFRF9UWVBFUyA9IFtcInN0cmluZ1wiLCBcImJvb2xlYW5cIiwgXCJudW1iZXJcIiwgXCJhcnJheVwiXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIElucHV0VHlwZSA9IHR5cGVvZiBJTkNMVURFX0lOUFVUU19TVVBQT1JURURfVFlQRVNbbnVtYmVyXTtcblxuZXhwb3J0IGNsYXNzIFBhcnNlciB7XG5cbiAgICBwcml2YXRlIF9zdGFnZXM6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBfZ2l0bGFiRGF0YTogYW55O1xuICAgIHByaXZhdGUgX2pvYk5hbWVQYWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgcmVhZG9ubHkgam9iczogSm9iW107XG4gICAgcmVhZG9ubHkgYXJndjogQXJndjtcbiAgICByZWFkb25seSB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcztcbiAgICByZWFkb25seSBwaXBlbGluZUlpZDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGV4cGFuZFZhcmlhYmxlczogYm9vbGVhbjtcblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IgKGFyZ3Y6IEFyZ3YsIHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBwaXBlbGluZUlpZDogbnVtYmVyLCBqb2JzOiBKb2JbXSwgZXhwYW5kVmFyaWFibGVzOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuYXJndiA9IGFyZ3Y7XG4gICAgICAgIHRoaXMud3JpdGVTdHJlYW1zID0gd3JpdGVTdHJlYW1zO1xuICAgICAgICB0aGlzLnBpcGVsaW5lSWlkID0gcGlwZWxpbmVJaWQ7XG4gICAgICAgIHRoaXMuam9icyA9IGpvYnM7XG4gICAgICAgIHRoaXMuZXhwYW5kVmFyaWFibGVzID0gZXhwYW5kVmFyaWFibGVzO1xuICAgIH1cblxuICAgIGdldCBzdGFnZXMgKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YWdlcztcbiAgICB9XG5cbiAgICBnZXQgZ2l0bGFiRGF0YSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9naXRsYWJEYXRhO1xuICAgIH1cblxuICAgIGdldCBqb2JOYW1lUGFkICgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fam9iTmFtZVBhZCA/PyAwO1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBjcmVhdGUgKGFyZ3Y6IEFyZ3YsIHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBwaXBlbGluZUlpZDogbnVtYmVyLCBqb2JzOiBKb2JbXSwgZXhwYW5kVmFyaWFibGVzOiBib29sZWFuID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgUGFyc2VyKGFyZ3YsIHdyaXRlU3RyZWFtcywgcGlwZWxpbmVJaWQsIGpvYnMsIGV4cGFuZFZhcmlhYmxlcyk7XG4gICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICBhd2FpdCBwYXJzZXIuaW5pdCgpO1xuICAgICAgICBjb25zdCB3YXJuaW5ncyA9IGF3YWl0IFZhbGlkYXRvci5ydW4ocGFyc2VyLmpvYnMsIHBhcnNlci5zdGFnZXMpO1xuXG4gICAgICAgIGZvciAoY29uc3Qgam9iIG9mIHBhcnNlci5qb2JzKSB7XG4gICAgICAgICAgICBpZiAoam9iLmFydGlmYWN0cyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGpvYi5kZWxldGVBcnRpZmFjdHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcnNpbmdUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgIGNvbnN0IHBhdGhUb0V4cGFuZGVkR2l0TGFiQ2kgPSBwYXRoLmpvaW4oYXJndi5jd2QsIGFyZ3Yuc3RhdGVEaXIsIFwiZXhwYW5kZWQtZ2l0bGFiLWNpLnltbFwiKTtcbiAgICAgICAgZnMubWtkaXJwU3luYyhwYXRoLmpvaW4oYXJndi5jd2QsIGFyZ3Yuc3RhdGVEaXIpKTtcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhwYXRoVG9FeHBhbmRlZEdpdExhYkNpLCB5YW1sLmR1bXAocGFyc2VyLmdpdGxhYkRhdGEpKTtcbiAgICAgICAgaWYgKGFyZ3YuY2hpbGRQaXBlbGluZURlcHRoID09IDApIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtge2dyZXkgcGFyc2luZyBhbmQgZG93bmxvYWRzIGZpbmlzaGVkIGluICR7cHJldHR5SHJ0aW1lKHBhcnNpbmdUaW1lKX0ufVxcbmApO1xuXG4gICAgICAgIGZvciAoY29uc3Qgd2FybmluZyBvZiB3YXJuaW5ncykge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7eWVsbG93ICR7d2FybmluZ319XFxuYCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAjIFNlY29uZCBsYXllciBvZiBjaGVjayBmb3IgZXJyb3JzIHRoYXQgYXJlIG5vdCBjYXVnaHQgaW4gVmFsaWRhdG9yLnJ1blxuICAgICAgICBpZiAocGFyc2VyLmFyZ3YuanNvblNjaGVtYVZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgVmFsaWRhdG9yLmpzb25TY2hlbWFWYWxpZGF0aW9uKHtcbiAgICAgICAgICAgICAgICBwYXRoVG9FeHBhbmRlZEdpdExhYkNpLFxuICAgICAgICAgICAgICAgIGdpdExhYkNpQ29uZmlnOiBwYXJzZXIuZ2l0bGFiRGF0YSxcbiAgICAgICAgICAgICAgICBhcmd2LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXJndi5jaGlsZFBpcGVsaW5lRGVwdGggPT0gMCkgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7Z3JleSBqc29uIHNjaGVtYSB2YWxpZGF0ZWQgaW4gJHtwcmV0dHlIcnRpbWUocHJvY2Vzcy5ocnRpbWUodGltZSkpfX1cXG5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VyO1xuICAgIH1cblxuICAgIGFzeW5jIGluaXQgKCkge1xuICAgICAgICBjb25zdCBhcmd2ID0gdGhpcy5hcmd2O1xuICAgICAgICBjb25zdCBjd2QgPSBhcmd2LmN3ZDtcbiAgICAgICAgY29uc3Qgc3RhdGVEaXIgPSBhcmd2LnN0YXRlRGlyO1xuICAgICAgICBjb25zdCB3cml0ZVN0cmVhbXMgPSB0aGlzLndyaXRlU3RyZWFtcztcbiAgICAgICAgY29uc3QgZmlsZSA9IGFyZ3YuZmlsZTtcbiAgICAgICAgY29uc3QgcGlwZWxpbmVJaWQgPSB0aGlzLnBpcGVsaW5lSWlkO1xuICAgICAgICBjb25zdCBmZXRjaEluY2x1ZGVzID0gYXJndi5mZXRjaEluY2x1ZGVzO1xuICAgICAgICBjb25zdCBnaXREYXRhID0gYXdhaXQgR2l0RGF0YS5pbml0KGN3ZCwgd3JpdGVTdHJlYW1zKTtcbiAgICAgICAgY29uc3QgdmFyaWFibGVzRnJvbUZpbGVzID0gYXdhaXQgVmFyaWFibGVzRnJvbUZpbGVzLmluaXQoYXJndiwgd3JpdGVTdHJlYW1zLCBnaXREYXRhKTtcbiAgICAgICAgY29uc3QgZW52TWF0Y2hlZFZhcmlhYmxlcyA9IFV0aWxzLmZpbmRFbnZNYXRjaGVkVmFyaWFibGVzKHZhcmlhYmxlc0Zyb21GaWxlcyk7XG4gICAgICAgIGNvbnN0IHByZWRlZmluZWRWYXJpYWJsZXMgPSBpbml0UHJlZGVmaW5lZFZhcmlhYmxlcyh7Z2l0RGF0YSwgYXJndiwgZW52TWF0Y2hlZFZhcmlhYmxlc30pO1xuICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSB7Li4ucHJlZGVmaW5lZFZhcmlhYmxlcywgLi4uZW52TWF0Y2hlZFZhcmlhYmxlcywgLi4uYXJndi52YXJpYWJsZX07XG4gICAgICAgIGNvbnN0IGV4cGFuZGVkID0gVXRpbHMuZXhwYW5kVmFyaWFibGVzKHZhcmlhYmxlcyk7XG5cbiAgICAgICAgbGV0IHlhbWxEYXRhTGlzdDogYW55W10gPSBbe3N0YWdlczogW1wiLnByZVwiLCBcImJ1aWxkXCIsIFwidGVzdFwiLCBcImRlcGxveVwiLCBcIi5wb3N0XCJdfV07XG4gICAgICAgIGNvbnN0IGdpdGxhYkNpRGF0YSA9IGF3YWl0IFBhcnNlci5sb2FkWWFtbChgJHtjd2R9LyR7ZmlsZX1gLCB7fSwgdGhpcy5leHBhbmRWYXJpYWJsZXMpO1xuXG4gICAgICAgIHlhbWxEYXRhTGlzdCA9IHlhbWxEYXRhTGlzdC5jb25jYXQoYXdhaXQgUGFyc2VySW5jbHVkZXMuaW5pdChnaXRsYWJDaURhdGEsIHthcmd2LCBjd2QsIHN0YXRlRGlyLCB3cml0ZVN0cmVhbXMsIGdpdERhdGEsIGZldGNoSW5jbHVkZXMsIHZhcmlhYmxlczogZXhwYW5kZWQsIGV4cGFuZFZhcmlhYmxlczogdGhpcy5leHBhbmRWYXJpYWJsZXMsIG1heGltdW1JbmNsdWRlczogYXJndi5tYXhpbXVtSW5jbHVkZXN9KSk7XG4gICAgICAgIFBhcnNlckluY2x1ZGVzLnJlc2V0Q291bnQoKTtcblxuICAgICAgICBjb25zdCBnaXRsYWJDaUxvY2FsRGF0YSA9IGF3YWl0IFBhcnNlci5sb2FkWWFtbChgJHtjd2R9Ly5naXRsYWItY2ktbG9jYWwueW1sYCwge30sIHRoaXMuZXhwYW5kVmFyaWFibGVzKTtcbiAgICAgICAgeWFtbERhdGFMaXN0ID0geWFtbERhdGFMaXN0LmNvbmNhdChhd2FpdCBQYXJzZXJJbmNsdWRlcy5pbml0KGdpdGxhYkNpTG9jYWxEYXRhLCB7YXJndiwgY3dkLCBzdGF0ZURpciwgd3JpdGVTdHJlYW1zLCBnaXREYXRhLCBmZXRjaEluY2x1ZGVzLCB2YXJpYWJsZXM6IGV4cGFuZGVkLCBleHBhbmRWYXJpYWJsZXM6IHRoaXMuZXhwYW5kVmFyaWFibGVzLCBtYXhpbXVtSW5jbHVkZXM6IGFyZ3YubWF4aW11bUluY2x1ZGVzfSkpO1xuICAgICAgICBQYXJzZXJJbmNsdWRlcy5yZXNldENvdW50KCk7XG5cbiAgICAgICAgY29uc3QgZ2l0bGFiRGF0YTogYW55ID0gZGVlcEV4dGVuZCh7fSwgLi4ueWFtbERhdGFMaXN0KTtcblxuICAgICAgICAvLyBFeHBhbmQgdmFyaW91cyBmaWVsZHMgaW4gZ2l0bGFiRGF0YVxuICAgICAgICBEYXRhRXhwYW5kZXIuam9iRXh0ZW5kcyhnaXRsYWJEYXRhKTtcbiAgICAgICAgRGF0YUV4cGFuZGVyLnJlZmVyZW5jZShnaXRsYWJEYXRhLCBnaXRsYWJEYXRhKTtcbiAgICAgICAgRGF0YUV4cGFuZGVyLmZsYXR0ZW5MaXN0cyhnaXRsYWJEYXRhKTtcbiAgICAgICAgRGF0YUV4cGFuZGVyLnRyYW5zZm9ybURlcHJlY2F0ZWRHbG9iYWxEZWZhdWx0U3ludGF4KGdpdGxhYkRhdGEpO1xuICAgICAgICBEYXRhRXhwYW5kZXIuaW5oZXJpdERlZmF1bHQoZ2l0bGFiRGF0YSk7XG4gICAgICAgIERhdGFFeHBhbmRlci5ub3JtYWxpemUoZ2l0bGFiRGF0YSk7XG5cbiAgICAgICAgYXNzZXJ0KGdpdGxhYkRhdGEuc3RhZ2VzICYmIEFycmF5LmlzQXJyYXkoZ2l0bGFiRGF0YS5zdGFnZXMpLCBjaGFsa2B7eWVsbG93IHN0YWdlczp9IG11c3QgYmUgYW4gYXJyYXlgKTtcbiAgICAgICAgaWYgKCFnaXRsYWJEYXRhLnN0YWdlcy5pbmNsdWRlcyhcIi5wcmVcIikpIHtcbiAgICAgICAgICAgIGdpdGxhYkRhdGEuc3RhZ2VzLnVuc2hpZnQoXCIucHJlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZ2l0bGFiRGF0YS5zdGFnZXMuaW5jbHVkZXMoXCIucG9zdFwiKSkge1xuICAgICAgICAgICAgZ2l0bGFiRGF0YS5zdGFnZXMucHVzaChcIi5wb3N0XCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3N0YWdlcyA9IGdpdGxhYkRhdGEuc3RhZ2VzO1xuXG4gICAgICAgIC8vIENoZWNrIGpvYiB2YXJpYWJsZXMgZm9yIGludmFsaWQgaGFzaCBvZiBrZXkgdmFsdWUgcGFpcnMsIGFuZCBjYXN0IG51bWJlcnMgdG8gc3RyaW5nc1xuICAgICAgICBVdGlscy5mb3JFYWNoUmVhbEpvYihnaXRsYWJEYXRhLCAoam9iTmFtZSwgam9iRGF0YSkgPT4ge1xuICAgICAgICAgICAgYXNzZXJ0KGpvYkRhdGEud2hlbiAhPT0gXCJuZXZlclwiLFxuICAgICAgICAgICAgICAgIGNoYWxrYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogam9iczoke2pvYk5hbWV9IHdoZW46bmV2ZXIgY2FuIG9ubHkgYmUgdXNlZCBpbiBhIHJ1bGVzIHNlY3Rpb24gb3Igd29ya2Zsb3c6cnVsZXNgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGpvYkRhdGEudmFyaWFibGVzID8/IHt9KSkge1xuICAgICAgICAgICAgICAgIGpvYkRhdGEudmFyaWFibGVzW2tleV0gPSBVdGlscy5ub3JtYWxpemVWYXJpYWJsZXModmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IChqb2JEYXRhLnNlcnZpY2VzID8/IFtdKS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZpY2UgPSBqb2JEYXRhLnNlcnZpY2VzW2ldO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNlcnZpY2UudmFyaWFibGVzIHx8IHt9KSkge1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFsa2B7Ymx1ZUJyaWdodCAke2pvYk5hbWV9LnNlcnZpY2VzWyR7aX1dfSBoYXMgaW52YWxpZCB2YXJpYWJsZXMgaGFzaCBvZiBrZXkgdmFsdWUgcGFpcnMuICR7a2V5fT0ke3ZhbHVlfWAsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGpvYkRhdGEuc2VydmljZXNbaV0udmFyaWFibGVzW2tleV0gPSBTdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fZ2l0bGFiRGF0YSA9IGdpdGxhYkRhdGE7XG5cbiAgICAgICAgLy8gR2VuZXJhdGUgam9icyBhbmQgcHV0IHRoZW0gaW50byBzdGFnZXNcbiAgICAgICAgVXRpbHMuZm9yRWFjaFJlYWxKb2IoZ2l0bGFiRGF0YSwgKGpvYk5hbWUsIGpvYkRhdGEpID0+IHtcbiAgICAgICAgICAgIGFzc2VydChnaXREYXRhICE9IG51bGwsIFwiZ2l0RGF0YSBtdXN0IGJlIHNldFwiKTtcbiAgICAgICAgICAgIGFzc2VydCh2YXJpYWJsZXNGcm9tRmlsZXMgIT0gbnVsbCwgXCJob21lVmFyaWFibGVzIG11c3QgYmUgc2V0XCIpO1xuXG4gICAgICAgICAgICBsZXQgbm9kZUluZGV4ID0gMTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFsbGVsTWF0cml4VmFyaWFibGVzTGlzdCA9IHBhcmFsbGVsLm1hdHJpeFZhcmlhYmxlc0xpc3Qoam9iRGF0YSwgam9iTmFtZSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhcmFsbGVsTWF0cml4VmFyaWFibGVzIG9mIHBhcmFsbGVsTWF0cml4VmFyaWFibGVzTGlzdCkge1xuICAgICAgICAgICAgICAgIGxldCBtYXRyaXhKb2JOYW1lID0gam9iTmFtZTtcbiAgICAgICAgICAgICAgICBpZiAocGFyYWxsZWxNYXRyaXhWYXJpYWJsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0cml4Sm9iTmFtZSA9IGAke2pvYk5hbWV9OiBbJHtPYmplY3QudmFsdWVzKHBhcmFsbGVsTWF0cml4VmFyaWFibGVzID8/IFtdKS5qb2luKFwiLFwiKX1dYDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFsbGVsLmlzUGxhaW5QYXJhbGxlbChqb2JEYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBtYXRyaXhKb2JOYW1lID0gYCR7am9iTmFtZX06IFske25vZGVJbmRleH0vJHtwYXJhbGxlbE1hdHJpeFZhcmlhYmxlc0xpc3QubGVuZ3RofV1gO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGpvYiA9IG5ldyBKb2Ioe1xuICAgICAgICAgICAgICAgICAgICBhcmd2LFxuICAgICAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGpvYkRhdGEsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IG1hdHJpeEpvYk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGJhc2VOYW1lOiBqb2JOYW1lLFxuICAgICAgICAgICAgICAgICAgICBnbG9iYWxWYXJpYWJsZXM6IGdpdGxhYkRhdGEudmFyaWFibGVzLFxuICAgICAgICAgICAgICAgICAgICBwaXBlbGluZUlpZDogcGlwZWxpbmVJaWQsXG4gICAgICAgICAgICAgICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXM6IHsuLi5wcmVkZWZpbmVkVmFyaWFibGVzfSwgLy8gTk9URTogcGFzcyBieSB2YWx1ZSBiZWNhdXNlIHByZWRlZmluZWRWYXJpYWJsZXMgaXMgbXV0YXRlZCBpbiB0aGUgY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgZ2l0RGF0YSxcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzRnJvbUZpbGVzLFxuICAgICAgICAgICAgICAgICAgICBtYXRyaXhWYXJpYWJsZXM6IHBhcmFsbGVsTWF0cml4VmFyaWFibGVzLFxuICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXg6IChqb2JEYXRhLnBhcmFsbGVsICE9IG51bGwpID8gbm9kZUluZGV4IDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbm9kZXNUb3RhbDogcGFyYWxsZWxNYXRyaXhWYXJpYWJsZXNMaXN0Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgZXhwYW5kVmFyaWFibGVzOiB0aGlzLmV4cGFuZFZhcmlhYmxlcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZFN0YWdlID0gdGhpcy5zdGFnZXMuaW5jbHVkZXMoam9iLnN0YWdlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZm91bmRTdGFnZSwgY2hhbGtge3llbGxvdyBzdGFnZToke2pvYi5zdGFnZX19IG5vdCBmb3VuZCBmb3Ige2JsdWVCcmlnaHQgJHtqb2IubmFtZX19YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5qb2JzLnB1c2goam9iKTtcbiAgICAgICAgICAgICAgICBub2RlSW5kZXgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQWRkIHNvbWUgcGFkZGluZyBzbyB0aGF0IGpvYiBsb2dzIGFyZSBuaWNlbHkgYWxpZ25lZFxuICAgICAgICAvLyBhbGxvdyB1c2VycyB0byBvdmVycmlkZSB0aGlzIGluIGNhc2UgdGhleSBoYXZlIHJlYWxseSBsb25nIGpvYiBuYW1lIChzZWUgIzg0MClcbiAgICAgICAgaWYgKHRoaXMuYXJndi5tYXhKb2JOYW1lUGFkZGluZyAhPT0gbnVsbCAmJiB0aGlzLmFyZ3YubWF4Sm9iTmFtZVBhZGRpbmcgPD0gMCkge1xuICAgICAgICAgICAgdGhpcy5fam9iTmFtZVBhZCA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBqb2JzID0gdGhpcy5hcmd2LmpvYi5sZW5ndGggIT09IDAgPyB0aGlzLmFyZ3Yuam9iIDogdGhpcy5qb2JzO1xuICAgICAgICAgICAgam9icy5mb3JFYWNoKChqb2IpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgam9iTmVlZHNMZW5ndGg6IG51bWJlcltdID0gW107XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hcmd2Lm5lZWRzICYmIHRoaXMuYXJndi5qb2IubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuam9icy5maW5kKGogPT4gai5iYXNlTmFtZSA9PT0gam9iKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kPy5uZWVkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgam9iTmVlZHNMZW5ndGggPSBmb3VuZC5uZWVkcy5tYXAoZiA9PiBmLmpvYi5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGpvYkxlbmd0aCA9IHR5cGVvZiBqb2IgPT0gXCJzdHJpbmdcIiA/IGpvYi5sZW5ndGggOiBqb2IubmFtZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5fam9iTmFtZVBhZCA9IE1hdGgubWF4KGpvYkxlbmd0aCwgdGhpcy5fam9iTmFtZVBhZCA/PyAwLCAuLi5qb2JOZWVkc0xlbmd0aCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFyZ3YubWF4Sm9iTmFtZVBhZGRpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9qb2JOYW1lUGFkID0gTWF0aC5taW4odGhpcy5hcmd2Lm1heEpvYk5hbWVQYWRkaW5nID8/IDAsIHRoaXMuX2pvYk5hbWVQYWQgPz8gMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgam9iTmFtZVBhZCBvbiBhbGwgam9ic1xuICAgICAgICB0aGlzLmpvYnMuZm9yRWFjaCgoam9iKSA9PiB7XG4gICAgICAgICAgICBqb2Iuam9iTmFtZVBhZCA9IHRoaXMuam9iTmFtZVBhZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gR2VuZXJhdGUgcHJvZHVjZXJzIGZvciBlYWNoIGpvYlxuICAgICAgICB0aGlzLmpvYnMuZm9yRWFjaCgoam9iKSA9PiB7XG4gICAgICAgICAgICBqb2IucHJvZHVjZXJzID0gUHJvZHVjZXJzLmluaXQodGhpcy5qb2JzLCB0aGlzLnN0YWdlcywgam9iKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGxvYWRZYW1sIChmaWxlUGF0aDogc3RyaW5nLCBjdHg6IGFueSA9IHt9LCBleHBhbmRWYXJpYWJsZXM6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgeW1sUGF0aCA9IGAke2ZpbGVQYXRofWA7XG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyh5bWxQYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShgJHtmaWxlUGF0aH1gLCBcInV0ZjhcIik7XG4gICAgICAgIGNvbnN0IGZpbGVTcGxpdCA9IGZpbGVDb250ZW50LnNwbGl0KC9cXHI/XFxuL2cpO1xuICAgICAgICBjb25zdCBmaWxlU3BsaXRDbG9uZSA9IGZpbGVTcGxpdC5zbGljZSgpO1xuXG4gICAgICAgIGxldCBpbnRlcmFjdGl2ZU1hdGNoID0gbnVsbDtcbiAgICAgICAgbGV0IGRlc2NyaXB0aW9uTWF0Y2ggPSBudWxsO1xuICAgICAgICBsZXQgaW5qZWN0U1NIQWdlbnQgPSBudWxsO1xuICAgICAgICBsZXQgbm9BcnRpZmFjdHNUb1NvdXJjZU1hdGNoID0gbnVsbDtcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgaWYgKGV4cGFuZFZhcmlhYmxlcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGZpbGVTcGxpdCkge1xuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlTWF0Y2ggPSBpbnRlcmFjdGl2ZU1hdGNoID8/IC8jXFxzP0BcXHM/W0lpXW50ZXJhY3RpdmUvLmV4ZWMobGluZSk7XG4gICAgICAgICAgICAgICAgaW5qZWN0U1NIQWdlbnQgPSBpbmplY3RTU0hBZ2VudCA/PyAvI1xccz9AXFxzP1tJaV1uamVjdFNTSEFnZW50Ly5leGVjKGxpbmUpO1xuICAgICAgICAgICAgICAgIG5vQXJ0aWZhY3RzVG9Tb3VyY2VNYXRjaCA9IG5vQXJ0aWZhY3RzVG9Tb3VyY2VNYXRjaCA/PyAvI1xccz9AXFxzP05vQXJ0aWZhY3RzVG9Tb3VyY2UvaS5leGVjKGxpbmUpO1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uTWF0Y2ggPSBkZXNjcmlwdGlvbk1hdGNoID8/IC8jXFxzP0BcXHM/W0RkXWVzY3JpcHRpb24gKD88ZGVzY3JpcHRpb24+LiopLy5leGVjKGxpbmUpO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgam9iTWF0Y2ggPSAvXFx3Oi8uZXhlYyhsaW5lKTtcbiAgICAgICAgICAgICAgICBpZiAoam9iTWF0Y2ggJiYgKGludGVyYWN0aXZlTWF0Y2ggfHwgZGVzY3JpcHRpb25NYXRjaCB8fCBpbmplY3RTU0hBZ2VudCB8fCBub0FydGlmYWN0c1RvU291cmNlTWF0Y2gpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnRlcmFjdGl2ZU1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlU3BsaXRDbG9uZS5zcGxpY2UoaW5kZXggKyAxLCAwLCBcIiAgZ2NsSW50ZXJhY3RpdmU6IHRydWVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmplY3RTU0hBZ2VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVNwbGl0Q2xvbmUuc3BsaWNlKGluZGV4ICsgMSwgMCwgXCIgIGdjbEluamVjdFNTSEFnZW50OiB0cnVlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobm9BcnRpZmFjdHNUb1NvdXJjZU1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlU3BsaXRDbG9uZS5zcGxpY2UoaW5kZXggKyAxLCAwLCBcIiAgZ2NsQXJ0aWZhY3RzVG9Tb3VyY2U6IGZhbHNlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRpb25NYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVNwbGl0Q2xvbmUuc3BsaWNlKGluZGV4ICsgMSwgMCwgYCAgZ2NsRGVzY3JpcHRpb246ICR7ZGVzY3JpcHRpb25NYXRjaD8uZ3JvdXBzPy5kZXNjcmlwdGlvbiA/PyBcIlwifWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZU1hdGNoID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb25NYXRjaCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGluamVjdFNTSEFnZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgbm9BcnRpZmFjdHNUb1NvdXJjZU1hdGNoID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZVR5cGUgPSBuZXcgeWFtbC5UeXBlKFwiIXJlZmVyZW5jZVwiLCB7XG4gICAgICAgICAgICBraW5kOiBcInNlcXVlbmNlXCIsXG4gICAgICAgICAgICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtyZWZlcmVuY2VEYXRhOiBkYXRhfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzY2hlbWEgPSB5YW1sLkRFRkFVTFRfU0NIRU1BLmV4dGVuZChbcmVmZXJlbmNlVHlwZV0pO1xuICAgICAgICBsZXQgZmlsZURhdGE7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZpbGVEYXRhID0geWFtbC5sb2FkQWxsKGZpbGVTcGxpdENsb25lLmpvaW4oXCJcXG5cIiksIG51bGwsIHtzY2hlbWF9KSBhcyBhbnlbXTtcbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIHlhbWwuWUFNTEV4Y2VwdGlvbiAmJiBlLnJlYXNvbiA9PT0gXCJkdXBsaWNhdGVkIG1hcHBpbmcga2V5XCIpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsa2B7YmxhY2suYmdZZWxsb3dCcmlnaHQgIFdBUk4gfSBkdXBsaWNhdGVkIG1hcHBpbmcga2V5IGRldGVjdGVkISBWYWx1ZXMgd2lsbCBiZSBvdmVyd3JpdHRlbiFgKTtcbiAgICAgICAgICAgICAgICBmaWxlRGF0YSA9IHlhbWwubG9hZEFsbChmaWxlU3BsaXRDbG9uZS5qb2luKFwiXFxuXCIpLCBudWxsLCB7c2NoZW1hLCBqc29uOiB0cnVlfSkgYXMgYW55W107XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZURhdGEubGVuZ3RoIDw9IDEpIHJldHVybiBmaWxlRGF0YVswXTtcblxuICAgICAgICBpZiAoaXNHaXRsYWJTcGVjRmlsZShmaWxlRGF0YVswXSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0c1NwZWNpZmljYXRpb246IGFueSA9IGZpbGVEYXRhWzBdO1xuICAgICAgICAgICAgY29uc3QgdW5pbnRlcnBvbGF0ZWRDb25maWd1cmF0aW9uczogYW55ID0gZmlsZURhdGFbMV07XG5cbiAgICAgICAgICAgIGNvbnN0IGludGVycG9sYXRlZENvbmZpZ3VyYXRpb25zID0gSlNPTi5zdHJpbmdpZnkodW5pbnRlcnBvbGF0ZWRDb25maWd1cmF0aW9ucylcbiAgICAgICAgICAgICAgICAucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgLyg/PGZpcnN0Q2hhcj4uKT8oPzxzZWNvbmRDaGFyPi4pP1xcJFxcW1xcW1xccyppbnB1dHMuKD88aW50ZXJwb2xhdGlvbktleT5bXFx3LV0rKVxccypcXHw/XFxzKig/PGludGVycG9sYXRpb25GdW5jdGlvbnM+Lio/KVxccypcXF1cXF0oPzxsYXN0Q2hhcj5bXiRdKT8vZyAvLyBodHRwczovL3JlZ2V4ci5jb20vODFjMTZcbiAgICAgICAgICAgICAgICAgICAgLCAoXzogc3RyaW5nLCBmaXJzdENoYXI6IHN0cmluZywgc2Vjb25kQ2hhcjogc3RyaW5nLCBpbnRlcnBvbGF0aW9uS2V5OiBzdHJpbmcsIGludGVycG9sYXRpb25GdW5jdGlvbnM6IHN0cmluZywgbGFzdENoYXI6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29uZmlnRmlsZVBhdGggPSBwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIGZpbGVQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGlvbktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnBvbGF0aW9uRnVuY3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0c1NwZWNpZmljYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3R4LFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Q2hhciA/Pz0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZENoYXIgPz89IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0Q2hhciA/Pz0gXCJcIjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qge2lucHV0VmFsdWUsIGlucHV0VHlwZX0gPSBwYXJzZUluY2x1ZGVJbnB1dHMoY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFR3b0NoYXIgPSBmaXJzdENoYXIgKyBzZWNvbmRDaGFyO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChpbnB1dFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChzZWNvbmRDaGFyID09IFwiXFxcIlwiICYmIGxhc3RDaGFyID09IFwiXFxcIlwiKSAmJiBmaXJzdENoYXIgIT0gXCJcXFxcXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdENoYXIgKyBKU09OLnN0cmluZ2lmeShpbnB1dFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IFRoaXMgYmVoYXZlcyBzbGlnaHRseSBkaWZmZXJlbnRseSBmcm9tIGdpdGxhYi5jb20uIEkgY2FuJ3QgY29tZSB1cCB3aXRoIHByYWN0aWNhbCB1c2UgY2FzZSBzbyBpIGRvbid0IHRoaW5rIGl0J3Mgd29ydGggdGhlIGVmZm9ydCB0byBtaW1pYyB0aGlzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdFR3b0NoYXIgKyBKU09OLnN0cmluZ2lmeShKU09OLnN0cmluZ2lmeShpbnB1dFZhbHVlKSkuc2xpY2UoMSwgLTEpICsgbGFzdENoYXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RUd29DaGFyICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGlucHV0VmFsdWUpIC8vIGVuc3VyZSBhIHZhbGlkIGpzb24gc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKDEsIC0xKSArIC8vIHJlbW92ZSB0aGUgc3Vycm91bmRpbmcgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaGFyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoc2Vjb25kQ2hhciA9PSBcIlxcXCJcIiAmJiBsYXN0Q2hhciA9PSBcIlxcXCJcIikgJiYgZmlyc3RDaGFyICE9IFwiXFxcXFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RDaGFyICsgaW5wdXRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RUd29DaGFyICsgaW5wdXRWYWx1ZSArIGxhc3RDaGFyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc3dpdGNoU3RhdGVtZW50RXhoYXVzdGl2ZUNoZWNrKGlucHV0VHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoaW50ZXJwb2xhdGVkQ29uZmlndXJhdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWxlRGF0YVswXTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGlzR2l0bGFiU3BlY0ZpbGUgKGZpbGVEYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gXCJzcGVjXCIgaW4gZmlsZURhdGE7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSW50ZXJwb2xhdGlvbktleSAoY3R4OiBhbnkpIHtcbiAgICBjb25zdCB7Y29uZmlnRmlsZVBhdGgsIGludGVycG9sYXRpb25LZXksIGlucHV0c1NwZWNpZmljYXRpb259ID0gY3R4O1xuICAgIGNvbnN0IGludmFsaWRJbnRlcnBvbGF0aW9uS2V5RXJyID0gY2hhbGtgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBcXGB7Ymx1ZUJyaWdodCAke2NvbmZpZ0ZpbGVQYXRofX1cXGA6IHVua25vd24gaW50ZXJwb2xhdGlvbiBrZXk6IFxcYCR7aW50ZXJwb2xhdGlvbktleX1cXGAuYDtcbiAgICBhc3NlcnQoaW5wdXRzU3BlY2lmaWNhdGlvbi5zcGVjLmlucHV0cz8uW2ludGVycG9sYXRpb25LZXldICE9PSB1bmRlZmluZWQsIGludmFsaWRJbnRlcnBvbGF0aW9uS2V5RXJyKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJbnRlcnBvbGF0aW9uRnVuY3Rpb25zIChjdHg6IGFueSkge1xuICAgIGNvbnN0IHtpbnRlcnBvbGF0aW9uRnVuY3Rpb25zLCBjb25maWdGaWxlUGF0aH0gPSBjdHg7XG4gICAgaWYgKGludGVycG9sYXRpb25GdW5jdGlvbnMgIT0gXCJcIikge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsa2B7YmxhY2suYmdZZWxsb3dCcmlnaHQgIFdBUk4gfSBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9ucyBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCB2aWEgZ2l0bGFiLWNpLWxvY2FsLiBGdW5jdGlvbnMgd2lsbCBqdXN0IGJlIGEgbm8tb3AuYCk7XG4gICAgfVxuICAgIGFzc2VydChpbnRlcnBvbGF0aW9uRnVuY3Rpb25zLnNwbGl0KFwifFwiKS5sZW5ndGggPD0gTUFYX0ZVTkNUSU9OUywgY2hhbGtgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBcXGB7Ymx1ZUJyaWdodCAke2NvbmZpZ0ZpbGVQYXRofX1cXGA6IHRvbyBtYW55IGZ1bmN0aW9ucyBpbiBpbnRlcnBvbGF0aW9uIGJsb2NrLmApO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUlucHV0IChjdHg6IGFueSkge1xuICAgIGNvbnN0IHtjb25maWdGaWxlUGF0aCwgaW50ZXJwb2xhdGlvbktleSwgaW5wdXRzU3BlY2lmaWNhdGlvbn0gPSBjdHg7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9IGdldElucHV0VmFsdWUoY3R4KTtcblxuICAgIGNvbnN0IG9wdGlvbnMgPSBpbnB1dHNTcGVjaWZpY2F0aW9uLnNwZWMuaW5wdXRzW2ludGVycG9sYXRpb25LZXldPy5vcHRpb25zO1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgIGFzc2VydChvcHRpb25zLmluY2x1ZGVzKGlucHV0VmFsdWUpLFxuICAgICAgICAgICAgY2hhbGtgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBcXGB7Ymx1ZUJyaWdodCAke2NvbmZpZ0ZpbGVQYXRofX1cXGA6IFxcYHtibHVlQnJpZ2h0ICR7aW50ZXJwb2xhdGlvbktleX19XFxgIGlucHV0OiBcXGB7Ymx1ZUJyaWdodCAke2lucHV0VmFsdWV9fVxcYCBjYW5ub3QgYmUgdXNlZCBiZWNhdXNlIGl0IGlzIG5vdCBpbiB0aGUgbGlzdCBvZiBhbGxvd2VkIG9wdGlvbnMuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhwZWN0ZWRJbnB1dFR5cGUgPSBnZXRFeHBlY3RlZElucHV0VHlwZShjdHgpO1xuICAgIGFzc2VydChJTkNMVURFX0lOUFVUU19TVVBQT1JURURfVFlQRVMuaW5jbHVkZXMoZXhwZWN0ZWRJbnB1dFR5cGUpLFxuICAgICAgICBjaGFsa2BUaGlzIEdpdExhYiBDSSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQ6IFxcYHtibHVlQnJpZ2h0ICR7Y29uZmlnRmlsZVBhdGh9fVxcYDogaGVhZGVyOnNwZWM6aW5wdXRzOntibHVlQnJpZ2h0ICR7aW50ZXJwb2xhdGlvbktleX19IGlucHV0IHR5cGUgdW5rbm93biB2YWx1ZToge2JsdWVCcmlnaHQgJHtleHBlY3RlZElucHV0VHlwZX19LmApO1xuXG4gICAgY29uc3QgaW5wdXRUeXBlID0gQXJyYXkuaXNBcnJheShpbnB1dFZhbHVlKSA/IFwiYXJyYXlcIiA6IHR5cGVvZiBpbnB1dFZhbHVlO1xuICAgIGFzc2VydChpbnB1dFR5cGUgPT09IGV4cGVjdGVkSW5wdXRUeXBlLFxuICAgICAgICBjaGFsa2BUaGlzIEdpdExhYiBDSSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQ6IFxcYHtibHVlQnJpZ2h0ICR7Y29uZmlnRmlsZVBhdGh9fVxcYDogXFxge2JsdWVCcmlnaHQgJHtpbnRlcnBvbGF0aW9uS2V5fX1cXGAgaW5wdXQ6IHByb3ZpZGVkIHZhbHVlIGlzIG5vdCBhIHtibHVlQnJpZ2h0ICR7ZXhwZWN0ZWRJbnB1dFR5cGV9fS5gKTtcblxuICAgIGNvbnN0IHJlZ2V4ID0gaW5wdXRzU3BlY2lmaWNhdGlvbi5zcGVjLmlucHV0c1tpbnRlcnBvbGF0aW9uS2V5XT8ucmVnZXg7XG4gICAgaWYgKHJlZ2V4KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrYHtibGFjay5iZ1llbGxvd0JyaWdodCAgV0FSTiB9IHNwZWM6aW5wdXRzOnJlZ2V4IGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIHZpYSBnaXRsYWItY2ktbG9jYWwuIFRoaXMgd2lsbCBqdXN0IGJlIGEgbm8tb3AuYCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUluY2x1ZGVJbnB1dHMgKGN0eDogYW55KToge2lucHV0VmFsdWU6IGFueTsgaW5wdXRUeXBlOiBJbnB1dFR5cGV9IHtcbiAgICB2YWxpZGF0ZUludGVycG9sYXRpb25LZXkoY3R4KTtcbiAgICB2YWxpZGF0ZUludGVycG9sYXRpb25GdW5jdGlvbnMoY3R4KTtcbiAgICB2YWxpZGF0ZUlucHV0KGN0eCk7XG4gICAgcmV0dXJuIHtpbnB1dFZhbHVlOiBnZXRJbnB1dFZhbHVlKGN0eCksIGlucHV0VHlwZTogZ2V0RXhwZWN0ZWRJbnB1dFR5cGUoY3R4KX07XG59XG5cbmZ1bmN0aW9uIGdldElucHV0VmFsdWUgKGN0eDogYW55KSB7XG4gICAgY29uc3Qge2lucHV0cywgaW50ZXJwb2xhdGlvbktleSwgY29uZmlnRmlsZVBhdGgsIGlucHV0c1NwZWNpZmljYXRpb259ID0gY3R4O1xuICAgIGNvbnN0IGlucHV0VmFsdWUgPSBpbnB1dHM/LltpbnRlcnBvbGF0aW9uS2V5XSA/P1xuICAgICAgICBpbnB1dHNTcGVjaWZpY2F0aW9uLnNwZWMuaW5wdXRzW2ludGVycG9sYXRpb25LZXldPy5kZWZhdWx0O1xuICAgIGFzc2VydChpbnB1dFZhbHVlICE9PSB1bmRlZmluZWQsIGNoYWxrYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogXFxge2JsdWVCcmlnaHQgJHtjb25maWdGaWxlUGF0aH19XFxgOiBcXGB7Ymx1ZUJyaWdodCAke2ludGVycG9sYXRpb25LZXl9fVxcYCBpbnB1dDogcmVxdWlyZWQgdmFsdWUgaGFzIG5vdCBiZWVuIHByb3ZpZGVkLmApO1xuICAgIHJldHVybiBpbnB1dFZhbHVlO1xufVxuXG5mdW5jdGlvbiBnZXRFeHBlY3RlZElucHV0VHlwZSAoY3R4OiBhbnkpOiBJbnB1dFR5cGUge1xuICAgIGNvbnN0IHtpbnRlcnBvbGF0aW9uS2V5LCBpbnB1dHNTcGVjaWZpY2F0aW9ufSA9IGN0eDtcbiAgICByZXR1cm4gaW5wdXRzU3BlY2lmaWNhdGlvbi5zcGVjLmlucHV0c1tpbnRlcnBvbGF0aW9uS2V5XT8udHlwZSB8fCBcInN0cmluZ1wiO1xufVxuIl19
357
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLGdCQUFnQixDQUFDO0FBQ25DLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUN4QixPQUFPLFVBQVUsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzFCLE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBQ2hDLE9BQU8sWUFBWSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxZQUFZLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNqQyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3pDLE9BQU8sS0FBSyxRQUFRLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6QyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUc3RCxPQUFPLEVBQUMsSUFBSSxJQUFJLHVCQUF1QixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFFMUUsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQVUsQ0FBQztBQUd6RixNQUFNLE9BQU8sTUFBTTtJQUVQLE9BQU8sR0FBYSxFQUFFLENBQUM7SUFDdkIs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QWdCLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDL0QsTUFBTSxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUUsS0FBSyxDQUFBLDBEQUEwRCxjQUFjLHNCQUFzQixnQkFBZ0Isa0RBQWtELENBQUMsQ0FBQztJQUN4TSxPQUFPLFVBQVUsQ0FBQztBQUN0QixDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBRSxHQUFRO0lBQ25DLE1BQU0sRUFBQyxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBQyxHQUFHLEdBQUcsQ0FBQztJQUNwRCxPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxJQUFJLElBQUksUUFBUSxDQUFDO0FBQy9FLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrLXRlbXBsYXRlXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IGRlZXBFeHRlbmQgZnJvbSBcImRlZXAtZXh0ZW5kXCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gXCJqcy15YW1sXCI7XG5pbXBvcnQgcHJldHR5SHJ0aW1lIGZyb20gXCJwcmV0dHktaHJ0aW1lXCI7XG5pbXBvcnQge0pvYn0gZnJvbSBcIi4vam9iLmpzXCI7XG5pbXBvcnQgKiBhcyBEYXRhRXhwYW5kZXIgZnJvbSBcIi4vZGF0YS1leHBhbmRlci5qc1wiO1xuaW1wb3J0IHtVdGlsc30gZnJvbSBcIi4vdXRpbHMuanNcIjtcbmltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHtWYWxpZGF0b3J9IGZyb20gXCIuL3ZhbGlkYXRvci5qc1wiO1xuaW1wb3J0ICogYXMgcGFyYWxsZWwgZnJvbSBcIi4vcGFyYWxsZWwuanNcIjtcbmltcG9ydCB7R2l0RGF0YX0gZnJvbSBcIi4vZ2l0LWRhdGEuanNcIjtcbmltcG9ydCB7UGFyc2VySW5jbHVkZXN9IGZyb20gXCIuL3BhcnNlci1pbmNsdWRlcy5qc1wiO1xuaW1wb3J0IHtQcm9kdWNlcnN9IGZyb20gXCIuL3Byb2R1Y2Vycy5qc1wiO1xuaW1wb3J0IHtWYXJpYWJsZXNGcm9tRmlsZXN9IGZyb20gXCIuL3ZhcmlhYmxlcy1mcm9tLWZpbGVzLmpzXCI7XG5pbXBvcnQge0FyZ3Z9IGZyb20gXCIuL2FyZ3YuanNcIjtcbmltcG9ydCB7V3JpdGVTdHJlYW1zfSBmcm9tIFwiLi93cml0ZS1zdHJlYW1zLmpzXCI7XG5pbXBvcnQge2luaXQgYXMgaW5pdFByZWRlZmluZWRWYXJpYWJsZXN9IGZyb20gXCIuL3ByZWRlZmluZWQtdmFyaWFibGVzLmpzXCI7XG5cbmNvbnN0IE1BWF9GVU5DVElPTlMgPSAzO1xuY29uc3QgSU5DTFVERV9JTlBVVFNfU1VQUE9SVEVEX1RZUEVTID0gW1wic3RyaW5nXCIsIFwiYm9vbGVhblwiLCBcIm51bWJlclwiLCBcImFycmF5XCJdIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgSW5wdXRUeXBlID0gdHlwZW9mIElOQ0xVREVfSU5QVVRTX1NVUFBPUlRFRF9UWVBFU1tudW1iZXJdO1xuXG5leHBvcnQgY2xhc3MgUGFyc2VyIHtcblxuICAgIHByaXZhdGUgX3N0YWdlczogc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIF9naXRsYWJEYXRhOiBhbnk7XG4gICAgcHJpdmF0ZSBfam9iTmFtZVBhZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICByZWFkb25seSBqb2JzOiBKb2JbXTtcbiAgICByZWFkb25seSBhcmd2OiBBcmd2O1xuICAgIHJlYWRvbmx5IHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zO1xuICAgIHJlYWRvbmx5IHBpcGVsaW5lSWlkOiBudW1iZXI7XG4gICAgcmVhZG9ubHkgZXhwYW5kVmFyaWFibGVzOiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3RvciAoYXJndjogQXJndiwgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIHBpcGVsaW5lSWlkOiBudW1iZXIsIGpvYnM6IEpvYltdLCBleHBhbmRWYXJpYWJsZXM6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5hcmd2ID0gYXJndjtcbiAgICAgICAgdGhpcy53cml0ZVN0cmVhbXMgPSB3cml0ZVN0cmVhbXM7XG4gICAgICAgIHRoaXMucGlwZWxpbmVJaWQgPSBwaXBlbGluZUlpZDtcbiAgICAgICAgdGhpcy5qb2JzID0gam9icztcbiAgICAgICAgdGhpcy5leHBhbmRWYXJpYWJsZXMgPSBleHBhbmRWYXJpYWJsZXM7XG4gICAgfVxuXG4gICAgZ2V0IHN0YWdlcyAoKTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhZ2VzO1xuICAgIH1cblxuICAgIGdldCBnaXRsYWJEYXRhICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dpdGxhYkRhdGE7XG4gICAgfVxuXG4gICAgZ2V0IGpvYk5hbWVQYWQgKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9qb2JOYW1lUGFkID8/IDA7XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGNyZWF0ZSAoYXJndjogQXJndiwgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIHBpcGVsaW5lSWlkOiBudW1iZXIsIGpvYnM6IEpvYltdLCBleHBhbmRWYXJpYWJsZXM6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBQYXJzZXIoYXJndiwgd3JpdGVTdHJlYW1zLCBwaXBlbGluZUlpZCwgam9icywgZXhwYW5kVmFyaWFibGVzKTtcbiAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgIGF3YWl0IHBhcnNlci5pbml0KCk7XG4gICAgICAgIGNvbnN0IHdhcm5pbmdzID0gYXdhaXQgVmFsaWRhdG9yLnJ1bihwYXJzZXIuam9icywgcGFyc2VyLnN0YWdlcyk7XG5cbiAgICAgICAgZm9yIChjb25zdCBqb2Igb2YgcGFyc2VyLmpvYnMpIHtcbiAgICAgICAgICAgIGlmIChqb2IuYXJ0aWZhY3RzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgam9iLmRlbGV0ZUFydGlmYWN0cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyc2luZ1RpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcbiAgICAgICAgY29uc3QgcGF0aFRvRXhwYW5kZWRHaXRMYWJDaSA9IHBhdGguam9pbihhcmd2LmN3ZCwgYXJndi5zdGF0ZURpciwgXCJleHBhbmRlZC1naXRsYWItY2kueW1sXCIpO1xuICAgICAgICBmcy5ta2RpcnBTeW5jKHBhdGguam9pbihhcmd2LmN3ZCwgYXJndi5zdGF0ZURpcikpO1xuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGhUb0V4cGFuZGVkR2l0TGFiQ2ksIHlhbWwuZHVtcChwYXJzZXIuZ2l0bGFiRGF0YSkpO1xuICAgICAgICBpZiAoYXJndi5jaGlsZFBpcGVsaW5lRGVwdGggPT0gMCkgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7Z3JleSBwYXJzaW5nIGFuZCBkb3dubG9hZHMgZmluaXNoZWQgaW4gJHtwcmV0dHlIcnRpbWUocGFyc2luZ1RpbWUpfS59XFxuYCk7XG5cbiAgICAgICAgZm9yIChjb25zdCB3YXJuaW5nIG9mIHdhcm5pbmdzKSB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHt5ZWxsb3cgJHt3YXJuaW5nfX1cXG5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vICMgU2Vjb25kIGxheWVyIG9mIGNoZWNrIGZvciBlcnJvcnMgdGhhdCBhcmUgbm90IGNhdWdodCBpbiBWYWxpZGF0b3IucnVuXG4gICAgICAgIGlmIChwYXJzZXIuYXJndi5qc29uU2NoZW1hVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgICAgICBWYWxpZGF0b3IuanNvblNjaGVtYVZhbGlkYXRpb24oe1xuICAgICAgICAgICAgICAgIHBhdGhUb0V4cGFuZGVkR2l0TGFiQ2ksXG4gICAgICAgICAgICAgICAgZ2l0TGFiQ2lDb25maWc6IHBhcnNlci5naXRsYWJEYXRhLFxuICAgICAgICAgICAgICAgIGFyZ3YsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChhcmd2LmNoaWxkUGlwZWxpbmVEZXB0aCA9PSAwKSB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHtncmV5IGpzb24gc2NoZW1hIHZhbGlkYXRlZCBpbiAke3ByZXR0eUhydGltZShwcm9jZXNzLmhydGltZSh0aW1lKSl9fVxcbmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZXI7XG4gICAgfVxuXG4gICAgYXN5bmMgaW5pdCAoKSB7XG4gICAgICAgIGNvbnN0IGFyZ3YgPSB0aGlzLmFyZ3Y7XG4gICAgICAgIGNvbnN0IGN3ZCA9IGFyZ3YuY3dkO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IGFyZ3Yuc3RhdGVEaXI7XG4gICAgICAgIGNvbnN0IHdyaXRlU3RyZWFtcyA9IHRoaXMud3JpdGVTdHJlYW1zO1xuICAgICAgICBjb25zdCBmaWxlID0gYXJndi5maWxlO1xuICAgICAgICBjb25zdCBwaXBlbGluZUlpZCA9IHRoaXMucGlwZWxpbmVJaWQ7XG4gICAgICAgIGNvbnN0IGZldGNoSW5jbHVkZXMgPSBhcmd2LmZldGNoSW5jbHVkZXM7XG4gICAgICAgIGNvbnN0IGdpdERhdGEgPSBhd2FpdCBHaXREYXRhLmluaXQoY3dkLCB3cml0ZVN0cmVhbXMpO1xuICAgICAgICBjb25zdCB2YXJpYWJsZXNGcm9tRmlsZXMgPSBhd2FpdCBWYXJpYWJsZXNGcm9tRmlsZXMuaW5pdChhcmd2LCB3cml0ZVN0cmVhbXMsIGdpdERhdGEpO1xuICAgICAgICBjb25zdCBlbnZNYXRjaGVkVmFyaWFibGVzID0gVXRpbHMuZmluZEVudk1hdGNoZWRWYXJpYWJsZXModmFyaWFibGVzRnJvbUZpbGVzKTtcbiAgICAgICAgY29uc3QgcHJlZGVmaW5lZFZhcmlhYmxlcyA9IGluaXRQcmVkZWZpbmVkVmFyaWFibGVzKHtnaXREYXRhLCBhcmd2LCBlbnZNYXRjaGVkVmFyaWFibGVzfSk7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IHsuLi5wcmVkZWZpbmVkVmFyaWFibGVzLCAuLi5lbnZNYXRjaGVkVmFyaWFibGVzLCAuLi5hcmd2LnZhcmlhYmxlfTtcbiAgICAgICAgY29uc3QgZXhwYW5kZWQgPSBVdGlscy5leHBhbmRWYXJpYWJsZXModmFyaWFibGVzKTtcblxuICAgICAgICBsZXQgeWFtbERhdGFMaXN0OiBhbnlbXSA9IFt7c3RhZ2VzOiBbXCIucHJlXCIsIFwiYnVpbGRcIiwgXCJ0ZXN0XCIsIFwiZGVwbG95XCIsIFwiLnBvc3RcIl19XTtcbiAgICAgICAgY29uc3QgZ2l0bGFiQ2lEYXRhID0gYXdhaXQgUGFyc2VyLmxvYWRZYW1sKGAke2N3ZH0vJHtmaWxlfWAsIHt9LCB0aGlzLmV4cGFuZFZhcmlhYmxlcyk7XG5cbiAgICAgICAgeWFtbERhdGFMaXN0ID0geWFtbERhdGFMaXN0LmNvbmNhdChhd2FpdCBQYXJzZXJJbmNsdWRlcy5pbml0KGdpdGxhYkNpRGF0YSwge2FyZ3YsIGN3ZCwgc3RhdGVEaXIsIHdyaXRlU3RyZWFtcywgZ2l0RGF0YSwgZmV0Y2hJbmNsdWRlcywgdmFyaWFibGVzOiBleHBhbmRlZCwgZXhwYW5kVmFyaWFibGVzOiB0aGlzLmV4cGFuZFZhcmlhYmxlcywgbWF4aW11bUluY2x1ZGVzOiBhcmd2Lm1heGltdW1JbmNsdWRlc30pKTtcbiAgICAgICAgUGFyc2VySW5jbHVkZXMucmVzZXRDb3VudCgpO1xuXG4gICAgICAgIGNvbnN0IGdpdGxhYkNpTG9jYWxEYXRhID0gYXdhaXQgUGFyc2VyLmxvYWRZYW1sKGAke2N3ZH0vLmdpdGxhYi1jaS1sb2NhbC55bWxgLCB7fSwgdGhpcy5leHBhbmRWYXJpYWJsZXMpO1xuICAgICAgICB5YW1sRGF0YUxpc3QgPSB5YW1sRGF0YUxpc3QuY29uY2F0KGF3YWl0IFBhcnNlckluY2x1ZGVzLmluaXQoZ2l0bGFiQ2lMb2NhbERhdGEsIHthcmd2LCBjd2QsIHN0YXRlRGlyLCB3cml0ZVN0cmVhbXMsIGdpdERhdGEsIGZldGNoSW5jbHVkZXMsIHZhcmlhYmxlczogZXhwYW5kZWQsIGV4cGFuZFZhcmlhYmxlczogdGhpcy5leHBhbmRWYXJpYWJsZXMsIG1heGltdW1JbmNsdWRlczogYXJndi5tYXhpbXVtSW5jbHVkZXN9KSk7XG4gICAgICAgIFBhcnNlckluY2x1ZGVzLnJlc2V0Q291bnQoKTtcblxuICAgICAgICBjb25zdCBnaXRsYWJEYXRhOiBhbnkgPSBkZWVwRXh0ZW5kKHt9LCAuLi55YW1sRGF0YUxpc3QpO1xuXG4gICAgICAgIC8vIEV4cGFuZCB2YXJpb3VzIGZpZWxkcyBpbiBnaXRsYWJEYXRhXG4gICAgICAgIERhdGFFeHBhbmRlci5qb2JFeHRlbmRzKGdpdGxhYkRhdGEpO1xuICAgICAgICBEYXRhRXhwYW5kZXIucmVmZXJlbmNlKGdpdGxhYkRhdGEsIGdpdGxhYkRhdGEpO1xuICAgICAgICBEYXRhRXhwYW5kZXIuZmxhdHRlbkxpc3RzKGdpdGxhYkRhdGEpO1xuICAgICAgICBEYXRhRXhwYW5kZXIudHJhbnNmb3JtRGVwcmVjYXRlZEdsb2JhbERlZmF1bHRTeW50YXgoZ2l0bGFiRGF0YSk7XG4gICAgICAgIERhdGFFeHBhbmRlci5pbmhlcml0RGVmYXVsdChnaXRsYWJEYXRhKTtcbiAgICAgICAgRGF0YUV4cGFuZGVyLm5vcm1hbGl6ZShnaXRsYWJEYXRhKTtcblxuICAgICAgICBhc3NlcnQoZ2l0bGFiRGF0YS5zdGFnZXMgJiYgQXJyYXkuaXNBcnJheShnaXRsYWJEYXRhLnN0YWdlcyksIGNoYWxrYHt5ZWxsb3cgc3RhZ2VzOn0gbXVzdCBiZSBhbiBhcnJheWApO1xuICAgICAgICBpZiAoIWdpdGxhYkRhdGEuc3RhZ2VzLmluY2x1ZGVzKFwiLnByZVwiKSkge1xuICAgICAgICAgICAgZ2l0bGFiRGF0YS5zdGFnZXMudW5zaGlmdChcIi5wcmVcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFnaXRsYWJEYXRhLnN0YWdlcy5pbmNsdWRlcyhcIi5wb3N0XCIpKSB7XG4gICAgICAgICAgICBnaXRsYWJEYXRhLnN0YWdlcy5wdXNoKFwiLnBvc3RcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc3RhZ2VzID0gZ2l0bGFiRGF0YS5zdGFnZXM7XG5cbiAgICAgICAgLy8gQ2hlY2sgam9iIHZhcmlhYmxlcyBmb3IgaW52YWxpZCBoYXNoIG9mIGtleSB2YWx1ZSBwYWlycywgYW5kIGNhc3QgbnVtYmVycyB0byBzdHJpbmdzXG4gICAgICAgIFV0aWxzLmZvckVhY2hSZWFsSm9iKGdpdGxhYkRhdGEsIChqb2JOYW1lLCBqb2JEYXRhKSA9PiB7XG4gICAgICAgICAgICBhc3NlcnQoam9iRGF0YS53aGVuICE9PSBcIm5ldmVyXCIsXG4gICAgICAgICAgICAgICAgY2hhbGtgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBqb2JzOiR7am9iTmFtZX0gd2hlbjpuZXZlciBjYW4gb25seSBiZSB1c2VkIGluIGEgcnVsZXMgc2VjdGlvbiBvciB3b3JrZmxvdzpydWxlc2AsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoam9iRGF0YS52YXJpYWJsZXMgPz8ge30pKSB7XG4gICAgICAgICAgICAgICAgam9iRGF0YS52YXJpYWJsZXNba2V5XSA9IFV0aWxzLm5vcm1hbGl6ZVZhcmlhYmxlcyh2YWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgKGpvYkRhdGEuc2VydmljZXMgPz8gW10pLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VydmljZSA9IGpvYkRhdGEuc2VydmljZXNbaV07XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc2VydmljZS52YXJpYWJsZXMgfHwge30pKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYWxrYHtibHVlQnJpZ2h0ICR7am9iTmFtZX0uc2VydmljZXNbJHtpfV19IGhhcyBpbnZhbGlkIHZhcmlhYmxlcyBoYXNoIG9mIGtleSB2YWx1ZSBwYWlycy4gJHtrZXl9PSR7dmFsdWV9YCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgam9iRGF0YS5zZXJ2aWNlc1tpXS52YXJpYWJsZXNba2V5XSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9naXRsYWJEYXRhID0gZ2l0bGFiRGF0YTtcblxuICAgICAgICAvLyBHZW5lcmF0ZSBqb2JzIGFuZCBwdXQgdGhlbSBpbnRvIHN0YWdlc1xuICAgICAgICBVdGlscy5mb3JFYWNoUmVhbEpvYihnaXRsYWJEYXRhLCAoam9iTmFtZSwgam9iRGF0YSkgPT4ge1xuICAgICAgICAgICAgYXNzZXJ0KGdpdERhdGEgIT0gbnVsbCwgXCJnaXREYXRhIG11c3QgYmUgc2V0XCIpO1xuICAgICAgICAgICAgYXNzZXJ0KHZhcmlhYmxlc0Zyb21GaWxlcyAhPSBudWxsLCBcImhvbWVWYXJpYWJsZXMgbXVzdCBiZSBzZXRcIik7XG5cbiAgICAgICAgICAgIGxldCBub2RlSW5kZXggPSAxO1xuICAgICAgICAgICAgY29uc3QgcGFyYWxsZWxNYXRyaXhWYXJpYWJsZXNMaXN0ID0gcGFyYWxsZWwubWF0cml4VmFyaWFibGVzTGlzdChqb2JEYXRhLCBqb2JOYW1lKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFyYWxsZWxNYXRyaXhWYXJpYWJsZXMgb2YgcGFyYWxsZWxNYXRyaXhWYXJpYWJsZXNMaXN0KSB7XG4gICAgICAgICAgICAgICAgbGV0IG1hdHJpeEpvYk5hbWUgPSBqb2JOYW1lO1xuICAgICAgICAgICAgICAgIGlmIChwYXJhbGxlbE1hdHJpeFZhcmlhYmxlcykge1xuICAgICAgICAgICAgICAgICAgICBtYXRyaXhKb2JOYW1lID0gYCR7am9iTmFtZX06IFske09iamVjdC52YWx1ZXMocGFyYWxsZWxNYXRyaXhWYXJpYWJsZXMgPz8gW10pLmpvaW4oXCIsXCIpfV1gO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYWxsZWwuaXNQbGFpblBhcmFsbGVsKGpvYkRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdHJpeEpvYk5hbWUgPSBgJHtqb2JOYW1lfTogWyR7bm9kZUluZGV4fS8ke3BhcmFsbGVsTWF0cml4VmFyaWFibGVzTGlzdC5sZW5ndGh9XWA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgam9iID0gbmV3IEpvYih7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3YsXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogam9iRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogbWF0cml4Sm9iTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgYmFzZU5hbWU6IGpvYk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGdsb2JhbFZhcmlhYmxlczogZ2l0bGFiRGF0YS52YXJpYWJsZXMsXG4gICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lSWlkOiBwaXBlbGluZUlpZCxcbiAgICAgICAgICAgICAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlczogey4uLnByZWRlZmluZWRWYXJpYWJsZXN9LCAvLyBOT1RFOiBwYXNzIGJ5IHZhbHVlIGJlY2F1c2UgcHJlZGVmaW5lZFZhcmlhYmxlcyBpcyBtdXRhdGVkIGluIHRoZSBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICBnaXREYXRhLFxuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXNGcm9tRmlsZXMsXG4gICAgICAgICAgICAgICAgICAgIG1hdHJpeFZhcmlhYmxlczogcGFyYWxsZWxNYXRyaXhWYXJpYWJsZXMsXG4gICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleDogKGpvYkRhdGEucGFyYWxsZWwgIT0gbnVsbCkgPyBub2RlSW5kZXggOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBub2Rlc1RvdGFsOiBwYXJhbGxlbE1hdHJpeFZhcmlhYmxlc0xpc3QubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICBleHBhbmRWYXJpYWJsZXM6IHRoaXMuZXhwYW5kVmFyaWFibGVzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kU3RhZ2UgPSB0aGlzLnN0YWdlcy5pbmNsdWRlcyhqb2Iuc3RhZ2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChmb3VuZFN0YWdlLCBjaGFsa2B7eWVsbG93IHN0YWdlOiR7am9iLnN0YWdlfX0gbm90IGZvdW5kIGZvciB7Ymx1ZUJyaWdodCAke2pvYi5uYW1lfX1gKTtcbiAgICAgICAgICAgICAgICB0aGlzLmpvYnMucHVzaChqb2IpO1xuICAgICAgICAgICAgICAgIG5vZGVJbmRleCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBBZGQgc29tZSBwYWRkaW5nIHNvIHRoYXQgam9iIGxvZ3MgYXJlIG5pY2VseSBhbGlnbmVkXG4gICAgICAgIC8vIGFsbG93IHVzZXJzIHRvIG92ZXJyaWRlIHRoaXMgaW4gY2FzZSB0aGV5IGhhdmUgcmVhbGx5IGxvbmcgam9iIG5hbWUgKHNlZSAjODQwKVxuICAgICAgICBpZiAodGhpcy5hcmd2Lm1heEpvYk5hbWVQYWRkaW5nICE9PSBudWxsICYmIHRoaXMuYXJndi5tYXhKb2JOYW1lUGFkZGluZyA8PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9qb2JOYW1lUGFkID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGpvYnMgPSB0aGlzLmFyZ3Yuam9iLmxlbmd0aCAhPT0gMCA/IHRoaXMuYXJndi5qb2IgOiB0aGlzLmpvYnM7XG4gICAgICAgICAgICBqb2JzLmZvckVhY2goKGpvYikgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBqb2JOZWVkc0xlbmd0aDogbnVtYmVyW10gPSBbXTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFyZ3YubmVlZHMgJiYgdGhpcy5hcmd2LmpvYi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5qb2JzLmZpbmQoaiA9PiBqLmJhc2VOYW1lID09PSBqb2IpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQ/Lm5lZWRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBqb2JOZWVkc0xlbmd0aCA9IGZvdW5kLm5lZWRzLm1hcChmID0+IGYuam9iLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgam9iTGVuZ3RoID0gdHlwZW9mIGpvYiA9PSBcInN0cmluZ1wiID8gam9iLmxlbmd0aCA6IGpvYi5uYW1lLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB0aGlzLl9qb2JOYW1lUGFkID0gTWF0aC5tYXgoam9iTGVuZ3RoLCB0aGlzLl9qb2JOYW1lUGFkID8/IDAsIC4uLmpvYk5lZWRzTGVuZ3RoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuYXJndi5tYXhKb2JOYW1lUGFkZGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2pvYk5hbWVQYWQgPSBNYXRoLm1pbih0aGlzLmFyZ3YubWF4Sm9iTmFtZVBhZGRpbmcgPz8gMCwgdGhpcy5fam9iTmFtZVBhZCA/PyAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCBqb2JOYW1lUGFkIG9uIGFsbCBqb2JzXG4gICAgICAgIHRoaXMuam9icy5mb3JFYWNoKChqb2IpID0+IHtcbiAgICAgICAgICAgIGpvYi5qb2JOYW1lUGFkID0gdGhpcy5qb2JOYW1lUGFkO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBHZW5lcmF0ZSBwcm9kdWNlcnMgZm9yIGVhY2ggam9iXG4gICAgICAgIHRoaXMuam9icy5mb3JFYWNoKChqb2IpID0+IHtcbiAgICAgICAgICAgIGpvYi5wcm9kdWNlcnMgPSBQcm9kdWNlcnMuaW5pdCh0aGlzLmpvYnMsIHRoaXMuc3RhZ2VzLCBqb2IpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgbG9hZFlhbWwgKGZpbGVQYXRoOiBzdHJpbmcsIGN0eDogYW55ID0ge30sIGV4cGFuZFZhcmlhYmxlczogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCB5bWxQYXRoID0gYCR7ZmlsZVBhdGh9YDtcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHltbFBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlQ29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKGAke2ZpbGVQYXRofWAsIFwidXRmOFwiKTtcbiAgICAgICAgY29uc3QgZmlsZVNwbGl0ID0gZmlsZUNvbnRlbnQuc3BsaXQoL1xccj9cXG4vZyk7XG4gICAgICAgIGNvbnN0IGZpbGVTcGxpdENsb25lID0gZmlsZVNwbGl0LnNsaWNlKCk7XG5cbiAgICAgICAgbGV0IGludGVyYWN0aXZlTWF0Y2ggPSBudWxsO1xuICAgICAgICBsZXQgZGVzY3JpcHRpb25NYXRjaCA9IG51bGw7XG4gICAgICAgIGxldCBpbmplY3RTU0hBZ2VudCA9IG51bGw7XG4gICAgICAgIGxldCBub0FydGlmYWN0c1RvU291cmNlTWF0Y2ggPSBudWxsO1xuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICBpZiAoZXhwYW5kVmFyaWFibGVzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgZmlsZVNwbGl0KSB7XG4gICAgICAgICAgICAgICAgaW50ZXJhY3RpdmVNYXRjaCA9IGludGVyYWN0aXZlTWF0Y2ggPz8gLyNcXHM/QFxccz9bSWldbnRlcmFjdGl2ZS8uZXhlYyhsaW5lKTtcbiAgICAgICAgICAgICAgICBpbmplY3RTU0hBZ2VudCA9IGluamVjdFNTSEFnZW50ID8/IC8jXFxzP0BcXHM/W0lpXW5qZWN0U1NIQWdlbnQvLmV4ZWMobGluZSk7XG4gICAgICAgICAgICAgICAgbm9BcnRpZmFjdHNUb1NvdXJjZU1hdGNoID0gbm9BcnRpZmFjdHNUb1NvdXJjZU1hdGNoID8/IC8jXFxzP0BcXHM/Tm9BcnRpZmFjdHNUb1NvdXJjZS9pLmV4ZWMobGluZSk7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb25NYXRjaCA9IGRlc2NyaXB0aW9uTWF0Y2ggPz8gLyNcXHM/QFxccz9bRGRdZXNjcmlwdGlvbiAoPzxkZXNjcmlwdGlvbj4uKikvLmV4ZWMobGluZSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBqb2JNYXRjaCA9IC9cXHc6Ly5leGVjKGxpbmUpO1xuICAgICAgICAgICAgICAgIGlmIChqb2JNYXRjaCAmJiAoaW50ZXJhY3RpdmVNYXRjaCB8fCBkZXNjcmlwdGlvbk1hdGNoIHx8IGluamVjdFNTSEFnZW50IHx8IG5vQXJ0aWZhY3RzVG9Tb3VyY2VNYXRjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGludGVyYWN0aXZlTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVTcGxpdENsb25lLnNwbGljZShpbmRleCArIDEsIDAsIFwiICBnY2xJbnRlcmFjdGl2ZTogdHJ1ZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGluamVjdFNTSEFnZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlU3BsaXRDbG9uZS5zcGxpY2UoaW5kZXggKyAxLCAwLCBcIiAgZ2NsSW5qZWN0U1NIQWdlbnQ6IHRydWVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChub0FydGlmYWN0c1RvU291cmNlTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVTcGxpdENsb25lLnNwbGljZShpbmRleCArIDEsIDAsIFwiICBnY2xBcnRpZmFjdHNUb1NvdXJjZTogZmFsc2VcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbk1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlU3BsaXRDbG9uZS5zcGxpY2UoaW5kZXggKyAxLCAwLCBgICBnY2xEZXNjcmlwdGlvbjogJHtkZXNjcmlwdGlvbk1hdGNoPy5ncm91cHM/LmRlc2NyaXB0aW9uID8/IFwiXCJ9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlTWF0Y2ggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbk1hdGNoID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaW5qZWN0U1NIQWdlbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBub0FydGlmYWN0c1RvU291cmNlTWF0Y2ggPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVmZXJlbmNlVHlwZSA9IG5ldyB5YW1sLlR5cGUoXCIhcmVmZXJlbmNlXCIsIHtcbiAgICAgICAgICAgIGtpbmQ6IFwic2VxdWVuY2VcIixcbiAgICAgICAgICAgIGNvbnN0cnVjdDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge3JlZmVyZW5jZURhdGE6IGRhdGF9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHlhbWwuREVGQVVMVF9TQ0hFTUEuZXh0ZW5kKFtyZWZlcmVuY2VUeXBlXSk7XG4gICAgICAgIGxldCBmaWxlRGF0YTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZmlsZURhdGEgPSB5YW1sLmxvYWRBbGwoZmlsZVNwbGl0Q2xvbmUuam9pbihcIlxcblwiKSwgbnVsbCwge3NjaGVtYX0pIGFzIGFueVtdO1xuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgeWFtbC5ZQU1MRXhjZXB0aW9uICYmIGUucmVhc29uID09PSBcImR1cGxpY2F0ZWQgbWFwcGluZyBrZXlcIikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrYHtibGFjay5iZ1llbGxvd0JyaWdodCAgV0FSTiB9IGR1cGxpY2F0ZWQgbWFwcGluZyBrZXkgZGV0ZWN0ZWQhIFZhbHVlcyB3aWxsIGJlIG92ZXJ3cml0dGVuIWApO1xuICAgICAgICAgICAgICAgIGZpbGVEYXRhID0geWFtbC5sb2FkQWxsKGZpbGVTcGxpdENsb25lLmpvaW4oXCJcXG5cIiksIG51bGwsIHtzY2hlbWEsIGpzb246IHRydWV9KSBhcyBhbnlbXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlRGF0YS5sZW5ndGggPD0gMSkgcmV0dXJuIGZpbGVEYXRhWzBdO1xuXG4gICAgICAgIGlmIChpc0dpdGxhYlNwZWNGaWxlKGZpbGVEYXRhWzBdKSkge1xuICAgICAgICAgICAgY29uc3QgaW5wdXRzU3BlY2lmaWNhdGlvbjogYW55ID0gZmlsZURhdGFbMF07XG4gICAgICAgICAgICBjb25zdCB1bmludGVycG9sYXRlZENvbmZpZ3VyYXRpb25zOiBhbnkgPSBmaWxlRGF0YVsxXTtcblxuICAgICAgICAgICAgY29uc3QgaW50ZXJwb2xhdGVkQ29uZmlndXJhdGlvbnMgPSBKU09OLnN0cmluZ2lmeSh1bmludGVycG9sYXRlZENvbmZpZ3VyYXRpb25zKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAvKD88Zmlyc3RDaGFyPi4pPyg/PHNlY29uZENoYXI+Lik/XFwkXFxbXFxbXFxzKmlucHV0cy4oPzxpbnRlcnBvbGF0aW9uS2V5PltcXHctXSspXFxzKlxcfD9cXHMqKD88aW50ZXJwb2xhdGlvbkZ1bmN0aW9ucz4uKj8pXFxzKlxcXVxcXSg/PGxhc3RDaGFyPlteJF0pPy9nIC8vIGh0dHBzOi8vcmVnZXhyLmNvbS84MWMxNlxuICAgICAgICAgICAgICAgICAgICAsIChfOiBzdHJpbmcsIGZpcnN0Q2hhcjogc3RyaW5nLCBzZWNvbmRDaGFyOiBzdHJpbmcsIGludGVycG9sYXRpb25LZXk6IHN0cmluZywgaW50ZXJwb2xhdGlvbkZ1bmN0aW9uczogc3RyaW5nLCBsYXN0Q2hhcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25maWdGaWxlUGF0aCA9IHBhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgZmlsZVBhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnBvbGF0aW9uS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycG9sYXRpb25GdW5jdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRzU3BlY2lmaWNhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdHgsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDaGFyID8/PSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kQ2hhciA/Pz0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaGFyID8/PSBcIlwiO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7aW5wdXRWYWx1ZSwgaW5wdXRUeXBlfSA9IHBhcnNlSW5jbHVkZUlucHV0cyhjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0VHdvQ2hhciA9IGZpcnN0Q2hhciArIHNlY29uZENoYXI7XG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGlucHV0VHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHNlY29uZENoYXIgPT0gXCJcXFwiXCIgJiYgbGFzdENoYXIgPT0gXCJcXFwiXCIpICYmIGZpcnN0Q2hhciAhPSBcIlxcXFxcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0Q2hhciArIEpTT04uc3RyaW5naWZ5KGlucHV0VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogVGhpcyBiZWhhdmVzIHNsaWdodGx5IGRpZmZlcmVudGx5IGZyb20gZ2l0bGFiLmNvbS4gSSBjYW4ndCBjb21lIHVwIHdpdGggcHJhY3RpY2FsIHVzZSBjYXNlIHNvIGkgZG9uJ3QgdGhpbmsgaXQncyB3b3J0aCB0aGUgZWZmb3J0IHRvIG1pbWljIHRoaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0VHdvQ2hhciArIEpTT04uc3RyaW5naWZ5KEpTT04uc3RyaW5naWZ5KGlucHV0VmFsdWUpKS5zbGljZSgxLCAtMSkgKyBsYXN0Q2hhcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdFR3b0NoYXIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoaW5wdXRWYWx1ZSkgLy8gZW5zdXJlIGEgdmFsaWQganNvbiBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMSwgLTEpICsgLy8gcmVtb3ZlIHRoZSBzdXJyb3VuZGluZyBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENoYXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChzZWNvbmRDaGFyID09IFwiXFxcIlwiICYmIGxhc3RDaGFyID09IFwiXFxcIlwiKSAmJiBmaXJzdENoYXIgIT0gXCJcXFxcXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdENoYXIgKyBpbnB1dFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdFR3b0NoYXIgKyBpbnB1dFZhbHVlICsgbGFzdENoYXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zd2l0Y2hTdGF0ZW1lbnRFeGhhdXN0aXZlQ2hlY2soaW5wdXRUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShpbnRlcnBvbGF0ZWRDb25maWd1cmF0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbGVEYXRhWzBdO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNHaXRsYWJTcGVjRmlsZSAoZmlsZURhdGE6IGFueSkge1xuICAgIHJldHVybiBcInNwZWNcIiBpbiBmaWxlRGF0YTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJbnRlcnBvbGF0aW9uS2V5IChjdHg6IGFueSkge1xuICAgIGNvbnN0IHtjb25maWdGaWxlUGF0aCwgaW50ZXJwb2xhdGlvbktleSwgaW5wdXRzU3BlY2lmaWNhdGlvbn0gPSBjdHg7XG4gICAgY29uc3QgaW52YWxpZEludGVycG9sYXRpb25LZXlFcnIgPSBjaGFsa2BUaGlzIEdpdExhYiBDSSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQ6IFxcYHtibHVlQnJpZ2h0ICR7Y29uZmlnRmlsZVBhdGh9fVxcYDogdW5rbm93biBpbnRlcnBvbGF0aW9uIGtleTogXFxgJHtpbnRlcnBvbGF0aW9uS2V5fVxcYC5gO1xuICAgIGFzc2VydChpbnB1dHNTcGVjaWZpY2F0aW9uLnNwZWMuaW5wdXRzPy5baW50ZXJwb2xhdGlvbktleV0gIT09IHVuZGVmaW5lZCwgaW52YWxpZEludGVycG9sYXRpb25LZXlFcnIpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUludGVycG9sYXRpb25GdW5jdGlvbnMgKGN0eDogYW55KSB7XG4gICAgY29uc3Qge2ludGVycG9sYXRpb25GdW5jdGlvbnMsIGNvbmZpZ0ZpbGVQYXRofSA9IGN0eDtcbiAgICBpZiAoaW50ZXJwb2xhdGlvbkZ1bmN0aW9ucyAhPSBcIlwiKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrYHtibGFjay5iZ1llbGxvd0JyaWdodCAgV0FSTiB9IGludGVycG9sYXRpb24gZnVuY3Rpb25zIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIHZpYSBnaXRsYWItY2ktbG9jYWwuIEZ1bmN0aW9ucyB3aWxsIGp1c3QgYmUgYSBuby1vcC5gKTtcbiAgICB9XG4gICAgYXNzZXJ0KGludGVycG9sYXRpb25GdW5jdGlvbnMuc3BsaXQoXCJ8XCIpLmxlbmd0aCA8PSBNQVhfRlVOQ1RJT05TLCBjaGFsa2BUaGlzIEdpdExhYiBDSSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQ6IFxcYHtibHVlQnJpZ2h0ICR7Y29uZmlnRmlsZVBhdGh9fVxcYDogdG9vIG1hbnkgZnVuY3Rpb25zIGluIGludGVycG9sYXRpb24gYmxvY2suYCk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSW5wdXQgKGN0eDogYW55KSB7XG4gICAgY29uc3Qge2NvbmZpZ0ZpbGVQYXRoLCBpbnRlcnBvbGF0aW9uS2V5LCBpbnB1dHNTcGVjaWZpY2F0aW9ufSA9IGN0eDtcbiAgICBjb25zdCBpbnB1dFZhbHVlID0gZ2V0SW5wdXRWYWx1ZShjdHgpO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IGlucHV0c1NwZWNpZmljYXRpb24uc3BlYy5pbnB1dHNbaW50ZXJwb2xhdGlvbktleV0/Lm9wdGlvbnM7XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgYXNzZXJ0KG9wdGlvbnMuaW5jbHVkZXMoaW5wdXRWYWx1ZSksXG4gICAgICAgICAgICBjaGFsa2BUaGlzIEdpdExhYiBDSSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQ6IFxcYHtibHVlQnJpZ2h0ICR7Y29uZmlnRmlsZVBhdGh9fVxcYDogXFxge2JsdWVCcmlnaHQgJHtpbnRlcnBvbGF0aW9uS2V5fX1cXGAgaW5wdXQ6IFxcYHtibHVlQnJpZ2h0ICR7aW5wdXRWYWx1ZX19XFxgIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2UgaXQgaXMgbm90IGluIHRoZSBsaXN0IG9mIGFsbG93ZWQgb3B0aW9ucy5gKTtcbiAgICB9XG5cbiAgICBjb25zdCBleHBlY3RlZElucHV0VHlwZSA9IGdldEV4cGVjdGVkSW5wdXRUeXBlKGN0eCk7XG4gICAgYXNzZXJ0KElOQ0xVREVfSU5QVVRTX1NVUFBPUlRFRF9UWVBFUy5pbmNsdWRlcyhleHBlY3RlZElucHV0VHlwZSksXG4gICAgICAgIGNoYWxrYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogXFxge2JsdWVCcmlnaHQgJHtjb25maWdGaWxlUGF0aH19XFxgOiBoZWFkZXI6c3BlYzppbnB1dHM6e2JsdWVCcmlnaHQgJHtpbnRlcnBvbGF0aW9uS2V5fX0gaW5wdXQgdHlwZSB1bmtub3duIHZhbHVlOiB7Ymx1ZUJyaWdodCAke2V4cGVjdGVkSW5wdXRUeXBlfX0uYCk7XG5cbiAgICBjb25zdCBpbnB1dFR5cGUgPSBBcnJheS5pc0FycmF5KGlucHV0VmFsdWUpID8gXCJhcnJheVwiIDogdHlwZW9mIGlucHV0VmFsdWU7XG4gICAgYXNzZXJ0KGlucHV0VHlwZSA9PT0gZXhwZWN0ZWRJbnB1dFR5cGUsXG4gICAgICAgIGNoYWxrYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogXFxge2JsdWVCcmlnaHQgJHtjb25maWdGaWxlUGF0aH19XFxgOiBcXGB7Ymx1ZUJyaWdodCAke2ludGVycG9sYXRpb25LZXl9fVxcYCBpbnB1dDogcHJvdmlkZWQgdmFsdWUgaXMgbm90IGEge2JsdWVCcmlnaHQgJHtleHBlY3RlZElucHV0VHlwZX19LmApO1xuXG4gICAgY29uc3QgcmVnZXggPSBpbnB1dHNTcGVjaWZpY2F0aW9uLnNwZWMuaW5wdXRzW2ludGVycG9sYXRpb25LZXldPy5yZWdleDtcbiAgICBpZiAocmVnZXgpIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGtge2JsYWNrLmJnWWVsbG93QnJpZ2h0ICBXQVJOIH0gc3BlYzppbnB1dHM6cmVnZXggaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgdmlhIGdpdGxhYi1jaS1sb2NhbC4gVGhpcyB3aWxsIGp1c3QgYmUgYSBuby1vcC5gKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlSW5jbHVkZUlucHV0cyAoY3R4OiBhbnkpOiB7aW5wdXRWYWx1ZTogYW55OyBpbnB1dFR5cGU6IElucHV0VHlwZX0ge1xuICAgIHZhbGlkYXRlSW50ZXJwb2xhdGlvbktleShjdHgpO1xuICAgIHZhbGlkYXRlSW50ZXJwb2xhdGlvbkZ1bmN0aW9ucyhjdHgpO1xuICAgIHZhbGlkYXRlSW5wdXQoY3R4KTtcbiAgICByZXR1cm4ge2lucHV0VmFsdWU6IGdldElucHV0VmFsdWUoY3R4KSwgaW5wdXRUeXBlOiBnZXRFeHBlY3RlZElucHV0VHlwZShjdHgpfTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5wdXRWYWx1ZSAoY3R4OiBhbnkpIHtcbiAgICBjb25zdCB7aW5wdXRzLCBpbnRlcnBvbGF0aW9uS2V5LCBjb25maWdGaWxlUGF0aCwgaW5wdXRzU3BlY2lmaWNhdGlvbn0gPSBjdHg7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9IGlucHV0cz8uW2ludGVycG9sYXRpb25LZXldID8/XG4gICAgICAgIGlucHV0c1NwZWNpZmljYXRpb24uc3BlYy5pbnB1dHNbaW50ZXJwb2xhdGlvbktleV0/LmRlZmF1bHQ7XG4gICAgYXNzZXJ0KGlucHV0VmFsdWUgIT09IHVuZGVmaW5lZCwgY2hhbGtgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBcXGB7Ymx1ZUJyaWdodCAke2NvbmZpZ0ZpbGVQYXRofX1cXGA6IFxcYHtibHVlQnJpZ2h0ICR7aW50ZXJwb2xhdGlvbktleX19XFxgIGlucHV0OiByZXF1aXJlZCB2YWx1ZSBoYXMgbm90IGJlZW4gcHJvdmlkZWQuYCk7XG4gICAgcmV0dXJuIGlucHV0VmFsdWU7XG59XG5cbmZ1bmN0aW9uIGdldEV4cGVjdGVkSW5wdXRUeXBlIChjdHg6IGFueSk6IElucHV0VHlwZSB7XG4gICAgY29uc3Qge2ludGVycG9sYXRpb25LZXksIGlucHV0c1NwZWNpZmljYXRpb259ID0gY3R4O1xuICAgIHJldHVybiBpbnB1dHNTcGVjaWZpY2F0aW9uLnNwZWMuaW5wdXRzW2ludGVycG9sYXRpb25LZXldPy50eXBlIHx8IFwic3RyaW5nXCI7XG59XG4iXX0=