gitlab-ci-local 4.62.0 → 4.63.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.
package/src/job.js CHANGED
@@ -671,8 +671,8 @@ export class Job {
671
671
  if (this.argv.privileged) {
672
672
  dockerCmd += "--privileged ";
673
673
  }
674
- if (this.argv.device) {
675
- dockerCmd += `--device=${this.argv.device} `;
674
+ for (const device of this.argv.device) {
675
+ dockerCmd += `--device ${device} `;
676
676
  }
677
677
  if (this.argv.ulimit !== null) {
678
678
  dockerCmd += `--ulimit nofile=${this.argv.ulimit} `;
@@ -1188,8 +1188,8 @@ export class Job {
1188
1188
  if (this.argv.privileged) {
1189
1189
  dockerCmd += "--privileged ";
1190
1190
  }
1191
- if (this.argv.device) {
1192
- dockerCmd += `--device=${this.argv.device} `;
1191
+ for (const device of this.argv.device) {
1192
+ dockerCmd += `--device ${device} `;
1193
1193
  }
1194
1194
  if (this.argv.ulimit !== null) {
1195
1195
  dockerCmd += `--ulimit nofile=${this.argv.ulimit} `;
@@ -1345,4 +1345,4 @@ export async function cleanupJobResources(jobs) {
1345
1345
  }
1346
1346
  await Promise.all(promises);
1347
1347
  }
1348
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiam9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDMUIsT0FBTyxZQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBR2pDLE9BQU8sTUFBTSxFQUFFLEVBQUMsY0FBYyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzlDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFakMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sRUFBQywyQkFBMkIsRUFBRSw2QkFBNkIsRUFBRSx3QkFBd0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ3hILE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDckMsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFDaEMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNuQyxPQUFPLEVBQUMsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxZQUFZLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE1BQU0sNEJBQTRCLEdBQUcsNkJBQTZCLENBQUM7QUEwQ25FLE1BQU0sYUFBYSxHQUFHLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUU7SUFDckQsSUFBSSxFQUFFLFNBQVM7SUFDZixLQUFLLEVBQUUsU0FBUztJQUNoQixJQUFJLEVBQUUsU0FBUztJQUNmLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLE1B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Q0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDRCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDaEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCAqIGFzIGRvdGVudiBmcm9tIFwiZG90ZW52XCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgcHJldHR5SHJ0aW1lIGZyb20gXCJwcmV0dHktaHJ0aW1lXCI7XG5pbXBvcnQgc3BsaXQyIGZyb20gXCJzcGxpdDJcIjtcbmltcG9ydCB7VXRpbHN9IGZyb20gXCIuL3V0aWxzLmpzXCI7XG5pbXBvcnQge1dyaXRlU3RyZWFtc30gZnJvbSBcIi4vd3JpdGUtc3RyZWFtcy5qc1wiO1xuaW1wb3J0IHtHaXREYXRhfSBmcm9tIFwiLi9naXQtZGF0YS5qc1wiO1xuaW1wb3J0IGFzc2VydCwge0Fzc2VydGlvbkVycm9yfSBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQge011dGV4fSBmcm9tIFwiLi9tdXRleC5qc1wiO1xuaW1wb3J0IHtBcmd2fSBmcm9tIFwiLi9hcmd2LmpzXCI7XG5pbXBvcnQgZXhlY2EgZnJvbSBcImV4ZWNhXCI7XG5pbXBvcnQge0NJQ0RWYXJpYWJsZX0gZnJvbSBcIi4vdmFyaWFibGVzLWZyb20tZmlsZXMuanNcIjtcbmltcG9ydCB7R2l0bGFiUnVubmVyQ1BVc1ByZXNldFZhbHVlLCBHaXRsYWJSdW5uZXJNZW1vcnlQcmVzZXRWYWx1ZSwgR2l0bGFiUnVubmVyUHJlc2V0VmFsdWVzfSBmcm9tIFwiLi9naXRsYWItcHJlc2V0LmpzXCI7XG5pbXBvcnQge2hhbmRsZXJ9IGZyb20gXCIuL2hhbmRsZXIuanNcIjtcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSBcImpzLXlhbWxcIjtcbmltcG9ydCB7UGFyc2VyfSBmcm9tIFwiLi9wYXJzZXIuanNcIjtcbmltcG9ydCB7cmVzb2x2ZUluY2x1ZGVMb2NhbCwgdmFsaWRhdGVJbmNsdWRlTG9jYWx9IGZyb20gXCIuL3BhcnNlci1pbmNsdWRlcy5qc1wiO1xuaW1wb3J0IGdsb2JieSBmcm9tIFwiZ2xvYmJ5XCI7XG5pbXBvcnQgdGVybWluYWxMaW5rIGZyb20gXCJ0ZXJtaW5hbC1saW5rXCI7XG5cbmNvbnN0IEdDTF9TSEVMTF9QUk9NUFRfUExBQ0VIT0xERVIgPSBcIjxnY2xTaGVsbFByb21wdFBsYWNlaG9sZGVyPlwiO1xuaW50ZXJmYWNlIEpvYk9wdGlvbnMge1xuICAgIGFyZ3Y6IEFyZ3Y7XG4gICAgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXM7XG4gICAgZGF0YTogYW55O1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBiYXNlTmFtZTogc3RyaW5nO1xuICAgIHBpcGVsaW5lSWlkOiBudW1iZXI7XG4gICAgZ2l0RGF0YTogR2l0RGF0YTtcbiAgICBnbG9iYWxWYXJpYWJsZXM6IHtbbmFtZTogc3RyaW5nXTogc3RyaW5nfTtcbiAgICB2YXJpYWJsZXNGcm9tRmlsZXM6IHtbbmFtZTogc3RyaW5nXTogQ0lDRFZhcmlhYmxlfTtcbiAgICBwcmVkZWZpbmVkVmFyaWFibGVzOiB7W25hbWU6IHN0cmluZ106IGFueX07XG4gICAgbWF0cml4VmFyaWFibGVzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSB8IG51bGw7XG4gICAgbm9kZUluZGV4OiBudW1iZXIgfCBudWxsO1xuICAgIG5vZGVzVG90YWw6IG51bWJlcjtcbiAgICBleHBhbmRWYXJpYWJsZXM6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBDYWNoZSB7XG4gICAgcG9saWN5OiBcInB1bGxcIiB8IFwicHVsbC1wdXNoXCIgfCBcInB1c2hcIjtcbiAgICBrZXk6IHN0cmluZyB8IHtmaWxlczogc3RyaW5nW119O1xuICAgIHBhdGhzOiBzdHJpbmdbXTtcbiAgICB3aGVuOiBcIm9uX3N1Y2Nlc3NcIiB8IFwib25fZmFpbHVyZVwiIHwgXCJhbHdheXNcIjtcbn1cblxuaW50ZXJmYWNlIFNlcnZpY2Uge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBlbnRyeXBvaW50OiBzdHJpbmdbXSB8IG51bGw7XG4gICAgY29tbWFuZDogc3RyaW5nW10gfCBudWxsO1xuICAgIGFsaWFzOiBzdHJpbmcgfCBudWxsO1xuICAgIHZhcmlhYmxlczoge1tuYW1lOiBzdHJpbmddOiBzdHJpbmd9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5lZWQge1xuICAgIGpvYjogc3RyaW5nO1xuICAgIGFydGlmYWN0czogYm9vbGVhbjtcbiAgICBvcHRpb25hbD86IGJvb2xlYW47XG4gICAgcmVmPzogc3RyaW5nO1xuICAgIHBpcGVsaW5lPzogc3RyaW5nO1xuICAgIHByb2plY3Q/OiBzdHJpbmc7XG59XG5cbmNvbnN0IGRhdGVGb3JtYXR0ZXIgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh1bmRlZmluZWQsIHtcbiAgICB5ZWFyOiB1bmRlZmluZWQsXG4gICAgbW9udGg6IHVuZGVmaW5lZCxcbiAgICBob3VyOiBcIm51bWVyaWNcIixcbiAgICBtaW51dGU6IFwibnVtZXJpY1wiLFxuICAgIHNlY29uZDogXCJudW1lcmljXCIsXG4gICAgaG91cjEyOiBmYWxzZSxcbn0pO1xuXG5leHBvcnQgdHlwZSBKb2JSdWxlID0ge1xuICAgIGlmPzogc3RyaW5nO1xuICAgIHdoZW4/OiBzdHJpbmc7XG4gICAgY2hhbmdlcz86IHN0cmluZ1tdIHwge3BhdGhzOiBzdHJpbmdbXX07XG4gICAgZXhpc3RzPzogc3RyaW5nW107XG4gICAgYWxsb3dfZmFpbHVyZT86IGJvb2xlYW47XG4gICAgdmFyaWFibGVzPzoge1tuYW1lOiBzdHJpbmddOiBzdHJpbmd9O1xufTtcblxuZXhwb3J0IGNsYXNzIEpvYiB7XG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUpvYklkICgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlYWRvbmx5IGlsbGVnYWxKb2JOYW1lcyA9IG5ldyBTZXQoW1xuICAgICAgICBcImluY2x1ZGVcIiwgXCJsb2NhbF9jb25maWd1cmF0aW9uXCIsIFwiaW1hZ2VcIiwgXCJzZXJ2aWNlc1wiLFxuICAgICAgICBcInN0YWdlc1wiLCBcImJlZm9yZV9zY3JpcHRcIiwgXCJkZWZhdWx0XCIsXG4gICAgICAgIFwiYWZ0ZXJfc2NyaXB0XCIsIFwidmFyaWFibGVzXCIsIFwiY2FjaGVcIiwgXCJ3b3JrZmxvd1wiLCBcInBhZ2U6ZGVwbG95XCIsXG4gICAgXSk7XG5cbiAgICByZWFkb25seSBhcmd2OiBBcmd2O1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgICByZWFkb25seSBiYXNlTmFtZTogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGRlcGVuZGVuY2llczogc3RyaW5nW10gfCBudWxsO1xuICAgIHJlYWRvbmx5IGVudmlyb25tZW50Pzoge25hbWU6IHN0cmluZzsgdXJsOiBzdHJpbmcgfCBudWxsOyBkZXBsb3ltZW50X3RpZXI6IHN0cmluZyB8IG51bGw7IGFjdGlvbjogc3RyaW5nIHwgbnVsbH07XG4gICAgcmVhZG9ubHkgam9iSWQ6IG51bWJlcjtcbiAgICByZWFkb25seSBydWxlcz86IEpvYlJ1bGVbXTtcblxuICAgIHJlYWRvbmx5IGFsbG93RmFpbHVyZTogYm9vbGVhbiB8IHtcbiAgICAgICAgZXhpdF9jb2RlczogbnVtYmVyIHwgbnVtYmVyW107XG4gICAgfTtcbiAgICByZWFkb25seSB3aGVuOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgZXhpc3RzOiBzdHJpbmdbXTtcbiAgICByZWFkb25seSBwaXBlbGluZUlpZDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGdpdERhdGE6IEdpdERhdGE7XG4gICAgcmVhZG9ubHkgaW5oZXJpdDoge1xuICAgICAgICB2YXJpYWJsZXM/OiBib29sZWFuIHwgc3RyaW5nW107XG4gICAgfTtcblxuICAgIHByaXZhdGUgX2RvdGVudlZhcmlhYmxlczoge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcbiAgICBwcml2YXRlIF9wcmVzY3JpcHRzRXhpdENvZGU6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX2FmdGVyU2NyaXB0c0V4aXRDb2RlID0gMDtcbiAgICBwcml2YXRlIF9jb3ZlcmFnZVBlcmNlbnQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX3J1bm5pbmcgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9jb250YWluZXJJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfc2VydmljZU5ldHdvcmtJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfbG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0OiBOb2RlSlMuVGltZW91dCA9IC0xIGFzIGFueTtcbiAgICBwcml2YXRlIF9wcm9kdWNlcnM6IHtuYW1lOiBzdHJpbmc7IGRvdGVudjogc3RyaW5nIHwgbnVsbH1bXSB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX2pvYk5hbWVQYWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX2NpUHJvamVjdERpcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfc3RhcnRUaW1lPzogW251bWJlciwgbnVtYmVyXTtcbiAgICBwcml2YXRlIF9lbmRUaW1lPzogW251bWJlciwgbnVtYmVyXTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVzVG9SbTogc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9nbG9iYWxWYXJpYWJsZXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0ge307XG4gICAgcHJpdmF0ZSByZWFkb25seSBfdmFyaWFibGVzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSA9IHt9O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbnRhaW5lcnNUb0NsZWFuOiBzdHJpbmdbXSA9IFtdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbnRhaW5lclZvbHVtZU5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgam9iRGF0YTogYW55O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXM7XG5cbiAgICBjb25zdHJ1Y3RvciAob3B0OiBKb2JPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGpvYkRhdGEgPSBvcHQuZGF0YTtcbiAgICAgICAgY29uc3Qgam9iVmFyaWFibGVzID0gam9iRGF0YS52YXJpYWJsZXMgPz8ge307XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlc0Zyb21GaWxlcyA9IG9wdC52YXJpYWJsZXNGcm9tRmlsZXM7XG4gICAgICAgIGNvbnN0IGFyZ3YgPSBvcHQuYXJndjtcbiAgICAgICAgY29uc3QgY3dkID0gYXJndi5jd2Q7XG4gICAgICAgIGNvbnN0IGFyZ3ZWYXJpYWJsZXMgPSBhcmd2LnZhcmlhYmxlO1xuICAgICAgICBjb25zdCBleHBhbmRWYXJpYWJsZXMgPSBvcHQuZXhwYW5kVmFyaWFibGVzID8/IHRydWU7XG5cbiAgICAgICAgdGhpcy5hcmd2ID0gYXJndjtcbiAgICAgICAgdGhpcy53cml0ZVN0cmVhbXMgPSBvcHQud3JpdGVTdHJlYW1zO1xuICAgICAgICB0aGlzLmdpdERhdGEgPSBvcHQuZ2l0RGF0YTtcbiAgICAgICAgdGhpcy5uYW1lID0gb3B0Lm5hbWU7XG4gICAgICAgIHRoaXMuYmFzZU5hbWUgPSBvcHQuYmFzZU5hbWU7XG4gICAgICAgIHRoaXMuam9iSWQgPSB0aGlzLmdlbmVyYXRlSm9iSWQoKTtcbiAgICAgICAgdGhpcy5qb2JEYXRhID0gb3B0LmRhdGE7XG4gICAgICAgIHRoaXMucGlwZWxpbmVJaWQgPSBvcHQucGlwZWxpbmVJaWQ7XG4gICAgICAgIHRoaXMuX2dsb2JhbFZhcmlhYmxlcyA9IG9wdC5nbG9iYWxWYXJpYWJsZXM7XG5cbiAgICAgICAgdGhpcy5pbmhlcml0ID0ge307XG4gICAgICAgIHRoaXMuaW5oZXJpdC52YXJpYWJsZXMgPSB0aGlzLmpvYkRhdGEuaW5oZXJpdD8udmFyaWFibGVzID8/IHRydWU7XG5cbiAgICAgICAgdGhpcy53aGVuID0gam9iRGF0YS53aGVuIHx8IFwib25fc3VjY2Vzc1wiO1xuICAgICAgICB0aGlzLmV4aXN0cyA9IGpvYkRhdGEuZXhpc3RzIHx8IFtdO1xuICAgICAgICB0aGlzLmFsbG93RmFpbHVyZSA9IGpvYkRhdGEuYWxsb3dfZmFpbHVyZSA/PyBmYWxzZTtcbiAgICAgICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBqb2JEYXRhLmRlcGVuZGVuY2llcyB8fCBudWxsO1xuICAgICAgICB0aGlzLnJ1bGVzID0gam9iRGF0YS5ydWxlcyB8fCBudWxsO1xuICAgICAgICB0aGlzLmVudmlyb25tZW50ID0gdHlwZW9mIGpvYkRhdGEuZW52aXJvbm1lbnQgPT09IFwic3RyaW5nXCIgPyB7bmFtZTogam9iRGF0YS5lbnZpcm9ubWVudH0gOiBqb2JEYXRhLmVudmlyb25tZW50O1xuXG4gICAgICAgIGNvbnN0IG1hdHJpeFZhcmlhYmxlcyA9IG9wdC5tYXRyaXhWYXJpYWJsZXMgPz8ge307XG4gICAgICAgIGNvbnN0IGZpbGVWYXJpYWJsZXMgPSBVdGlscy5maW5kRW52TWF0Y2hlZFZhcmlhYmxlcyh2YXJpYWJsZXNGcm9tRmlsZXMsIHRoaXMuZmlsZVZhcmlhYmxlc0Rpcik7XG4gICAgICAgIGNvbnN0IHByZWRlZmluZWRWYXJpYWJsZXMgPSB0aGlzLl9wcmVkZWZpbmVkVmFyaWFibGVzKG9wdCk7XG4gICAgICAgIHRoaXMuX3ZhcmlhYmxlcyA9IHsuLi5wcmVkZWZpbmVkVmFyaWFibGVzLCAuLi50aGlzLmdsb2JhbFZhcmlhYmxlcywgLi4uam9iVmFyaWFibGVzLCAuLi5tYXRyaXhWYXJpYWJsZXMsIC4uLmZpbGVWYXJpYWJsZXMsIC4uLmFyZ3ZWYXJpYWJsZXN9O1xuXG4gICAgICAgIGlmICh0aGlzLnJ1bGVzICYmIGV4cGFuZFZhcmlhYmxlcykge1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWQgPSBVdGlscy5leHBhbmRWYXJpYWJsZXModGhpcy5fdmFyaWFibGVzKTtcblxuICAgICAgICAgICAgLy8gRXhwYW5kIHZhcmlhYmxlcyBpbiBydWxlczpjaGFuZ2VzXG4gICAgICAgICAgICB0aGlzLnJ1bGVzLmZvckVhY2goKHJ1bGUsIHJ1bGVJZHgsIHJ1bGVzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hhbmdlcyA9IEFycmF5LmlzQXJyYXkocnVsZS5jaGFuZ2VzKSA/IHJ1bGUuY2hhbmdlcyA6IHJ1bGUuY2hhbmdlcz8ucGF0aHM7XG4gICAgICAgICAgICAgICAgaWYgKCFjaGFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjaGFuZ2VzLmZvckVhY2goKGNoYW5nZSwgY2hhbmdlSWR4LCBjaGFuZ2VzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZXNbY2hhbmdlSWR4XSA9IFV0aWxzLmV4cGFuZFRleHQoY2hhbmdlLCBleHBhbmRlZCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcnVsZXNbcnVsZUlkeF0uY2hhbmdlcyA9IGNoYW5nZXM7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gRXhwYW5kIHZhcmlhYmxlcyBpbiBydWxlczpleGlzdHNcbiAgICAgICAgICAgIHRoaXMucnVsZXMuZm9yRWFjaCgocnVsZSwgcnVsZUlkeCwgcnVsZXMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdHMgPSBBcnJheS5pc0FycmF5KHJ1bGUuZXhpc3RzKSA/IHJ1bGUuZXhpc3RzIDogbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV4aXN0cy5mb3JFYWNoKChleGlzdCwgZXhpc3RJZCwgZXhpc3RzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV4aXN0c1tleGlzdElkXSA9IFV0aWxzLmV4cGFuZFRleHQoZXhpc3QsIGV4cGFuZGVkKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBydWxlc1tydWxlSWR4XS5leGlzdHMgPSBleGlzdHM7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBydWxlVmFyaWFibGVzOiB7W25hbWU6IHN0cmluZ106IHN0cmluZ30gfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIFNldCB7d2hlbiwgYWxsb3dGYWlsdXJlfSBiYXNlZCBvbiBydWxlcyByZXN1bHRcbiAgICAgICAgaWYgKHRoaXMucnVsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGVSZXN1bHQgPSBVdGlscy5nZXRSdWxlc1Jlc3VsdCh7YXJndiwgY3dkLCBydWxlczogdGhpcy5ydWxlcywgdmFyaWFibGVzOiB0aGlzLl92YXJpYWJsZXN9LCB0aGlzLmdpdERhdGEsIHRoaXMud2hlbiwgdGhpcy5hbGxvd0ZhaWx1cmUpO1xuICAgICAgICAgICAgdGhpcy53aGVuID0gcnVsZVJlc3VsdC53aGVuO1xuICAgICAgICAgICAgdGhpcy5hbGxvd0ZhaWx1cmUgPSBydWxlUmVzdWx0LmFsbG93RmFpbHVyZTtcbiAgICAgICAgICAgIHJ1bGVWYXJpYWJsZXMgPSBydWxlUmVzdWx0LnZhcmlhYmxlcztcbiAgICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlcyA9IHsuLi50aGlzLl92YXJpYWJsZXMsIC4uLnJ1bGVWYXJpYWJsZXMsIC4uLmFyZ3ZWYXJpYWJsZXN9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmluZCBlbnZpcm9ubWVudCBtYXRjaGVkIHZhcmlhYmxlc1xuICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudCAmJiBleHBhbmRWYXJpYWJsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gVXRpbHMuZXhwYW5kVmFyaWFibGVzKHRoaXMuX3ZhcmlhYmxlcyk7XG4gICAgICAgICAgICB0aGlzLmVudmlyb25tZW50Lm5hbWUgPSBVdGlscy5leHBhbmRUZXh0KHRoaXMuZW52aXJvbm1lbnQubmFtZSwgZXhwYW5kZWQpO1xuICAgICAgICAgICAgdGhpcy5lbnZpcm9ubWVudC51cmwgPSBVdGlscy5leHBhbmRUZXh0KHRoaXMuZW52aXJvbm1lbnQudXJsLCBleHBhbmRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW52TWF0Y2hlZFZhcmlhYmxlcyA9IFV0aWxzLmZpbmRFbnZNYXRjaGVkVmFyaWFibGVzKHZhcmlhYmxlc0Zyb21GaWxlcywgdGhpcy5maWxlVmFyaWFibGVzRGlyLCB0aGlzLmVudmlyb25tZW50KTtcblxuICAgICAgICBjb25zdCB1c2VyRGVmaW5lZFZhcmlhYmxlcyA9IHsuLi50aGlzLmdsb2JhbFZhcmlhYmxlcywgLi4uam9iVmFyaWFibGVzLCAuLi5tYXRyaXhWYXJpYWJsZXMsIC4uLnJ1bGVWYXJpYWJsZXMsIC4uLmVudk1hdGNoZWRWYXJpYWJsZXMsIC4uLmFyZ3ZWYXJpYWJsZXN9O1xuICAgICAgICB0aGlzLmRpc2NvdXJhZ2VPdmVycmlkaW5nT2ZQcmVkZWZpbmVkVmFyaWFibGVzKHByZWRlZmluZWRWYXJpYWJsZXMsIHVzZXJEZWZpbmVkVmFyaWFibGVzKTtcblxuICAgICAgICAvLyBNZXJnZSBhbmQgZXhwYW5kIGFmdGVyIGZpbmRpbmcgZW52IG1hdGNoZWQgdmFyaWFibGVzXG4gICAgICAgIHRoaXMuX3ZhcmlhYmxlcyA9IHsuLi5wcmVkZWZpbmVkVmFyaWFibGVzLCAuLi51c2VyRGVmaW5lZFZhcmlhYmxlc307XG4gICAgICAgIC8vIERlbGV0ZSB2YXJpYWJsZXMgdGhlIHVzZXIgaW50ZW50aW9uYWxseSB3YW50cyB1bnNldFxuICAgICAgICBmb3IgKGNvbnN0IHVuc2V0VmFyaWFibGUgb2YgYXJndi51bnNldFZhcmlhYmxlcykge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3ZhcmlhYmxlc1t1bnNldFZhcmlhYmxlXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTZXQgR0NMX1BST0pFQ1RfRElSX09OX0hPU1QgaWYgZG9ja2VyIGltYWdlXG4gICAgICAgIGlmICh0aGlzLmltYWdlTmFtZSh0aGlzLl92YXJpYWJsZXMpKSB7XG4gICAgICAgICAgICB0aGlzLl92YXJpYWJsZXMgPSB7Li4udGhpcy5fdmFyaWFibGVzLCAuLi57R0NMX1BST0pFQ1RfRElSX09OX0hPU1Q6IGN3ZH19O1xuICAgICAgICB9XG5cbiAgICAgICAgYXNzZXJ0KHRoaXMuc2NyaXB0cyB8fCB0aGlzLnRyaWdnZXIsIGNoYWxrYHtibHVlQnJpZ2h0ICR7dGhpcy5uYW1lfX0gbXVzdCBoYXZlIHNjcmlwdCBzcGVjaWZpZWRgKTtcblxuICAgICAgICBhc3NlcnQoISh0aGlzLmludGVyYWN0aXZlICYmICF0aGlzLmFyZ3Yuc2hlbGxFeGVjdXRvck5vSW1hZ2UpLCBjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0gQEludGVyYWN0aXZlIGRlY29yYXRvciBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tbm8tc2hlbGwtZXhlY3V0b3Itbm8taW1hZ2VgKTtcblxuICAgICAgICBpZiAodGhpcy5pbnRlcmFjdGl2ZSAmJiAodGhpcy53aGVuICE9PSBcIm1hbnVhbFwiIHx8IHRoaXMuaW1hZ2VOYW1lKHRoaXMuX3ZhcmlhYmxlcykgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3Ioe21lc3NhZ2U6IGAke3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0gQEludGVyYWN0aXZlIGRlY29yYXRvciBjYW5ub3QgaGF2ZSBpbWFnZTogYW5kIG11c3QgYmUgd2hlbjptYW51YWxgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pbmplY3RTU0hBZ2VudCAmJiB0aGlzLmltYWdlTmFtZSh0aGlzLl92YXJpYWJsZXMpID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3Ioe21lc3NhZ2U6IGAke3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0gQEluamVjdFNTSEFnZW50IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBpbWFnZTpgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleHBhbmRlZCA9IFV0aWxzLmV4cGFuZFZhcmlhYmxlcyh0aGlzLl92YXJpYWJsZXMpO1xuICAgICAgICBmb3IgKGNvbnN0IFtpLCBjXSBvZiBPYmplY3QuZW50cmllczxhbnk+KHRoaXMuY2FjaGUpKSB7XG4gICAgICAgICAgICBjLnBvbGljeSA9IFV0aWxzLmV4cGFuZFRleHQoYy5wb2xpY3ksIGV4cGFuZGVkKTtcbiAgICAgICAgICAgIGFzc2VydChbXCJwdWxsXCIsIFwicHVzaFwiLCBcInB1bGwtcHVzaFwiXS5pbmNsdWRlcyhjLnBvbGljeSksIGNoYWxrYHtibHVlICR7dGhpcy5uYW1lfX0gY2FjaGVbJHtpfV0ucG9saWN5IGlzIG5vdCAncHVsbCcsICdwdXNoJyBvciAncHVsbC1wdXNoJ2ApO1xuICAgICAgICAgICAgYXNzZXJ0KFtcIm9uX3N1Y2Nlc3NcIiwgXCJvbl9mYWlsdXJlXCIsIFwiYWx3YXlzXCJdLmluY2x1ZGVzKGMud2hlbiksIGNoYWxrYHtibHVlICR7dGhpcy5uYW1lfX0gY2FjaGVbJHtpfV0ud2hlbiBpcyBub3QgJ29uX3N1Y2Nlc3MnLCAnb25fZmFpbHVyZScgb3IgJ2Fsd2F5cydgKTtcbiAgICAgICAgICAgIGFzc2VydChBcnJheS5pc0FycmF5KGMucGF0aHMpLCBjaGFsa2B7Ymx1ZSAke3RoaXMubmFtZX19IGNhY2hlWyR7aX1dLnBhdGhzIG11c3QgYmUgYXJyYXlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgW2ksIHNdIG9mIE9iamVjdC5lbnRyaWVzPGFueT4odGhpcy5zZXJ2aWNlcykpIHtcbiAgICAgICAgICAgIGFzc2VydChzLm5hbWUsIGNoYWxrYHtibHVlICR7dGhpcy5uYW1lfX0gc2VydmljZXNbJHtpfV0ubmFtZSBpcyB1bmRlZmluZWRgKTtcbiAgICAgICAgICAgIGFzc2VydCghcy5jb21tYW5kIHx8IEFycmF5LmlzQXJyYXkocy5jb21tYW5kKSwgY2hhbGtge2JsdWUgJHt0aGlzLm5hbWV9fSBzZXJ2aWNlc1ske2l9XS5jb21tYW5kIG11c3QgYmUgYW4gYXJyYXlgKTtcbiAgICAgICAgICAgIGFzc2VydCghcy5lbnRyeXBvaW50IHx8IEFycmF5LmlzQXJyYXkocy5lbnRyeXBvaW50KSwgY2hhbGtge2JsdWUgJHt0aGlzLm5hbWV9fSBzZXJ2aWNlc1ske2l9XS5lbnRyeXBvaW50IG11c3QgYmUgYW4gYXJyYXlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFzc2VydCghdGhpcy5hcnRpZmFjdHM/LnBhdGhzIHx8IEFycmF5LmlzQXJyYXkodGhpcy5hcnRpZmFjdHMucGF0aHMpLCBjaGFsa2B7Ymx1ZSAke3RoaXMubmFtZX19IGFydGlmYWN0cy5wYXRocyBtdXN0IGJlIGFuIGFycmF5YCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VOYW1lKHRoaXMuX3ZhcmlhYmxlcykgJiYgYXJndi5tb3VudENhY2hlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jYWNoZSkge1xuICAgICAgICAgICAgICAgIGMucGF0aHMuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gVXRpbHMuZXhwYW5kVGV4dChwLCBleHBhbmRlZCk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydCghcGF0aC5pbmNsdWRlcyhcIipcIiksIGNoYWxrYHtibHVlICR7dGhpcy5uYW1lfX0gY2Fubm90IGhhdmUgKiBpbiBjYWNoZSBwYXRocywgd2hlbiAtLW1vdW50LWNhY2hlIGlzIGVuYWJsZWRgKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBXYXJuIHdoZW4gb3ZlcnJpZGluZyBvZiBwcmVkZWZpbmVkIHZhcmlhYmxlcyBpcyBkZXRlY3RlZFxuICAgICAqL1xuICAgIHByaXZhdGUgZGlzY291cmFnZU92ZXJyaWRpbmdPZlByZWRlZmluZWRWYXJpYWJsZXMgKHByZWRlZmluZWRWYXJpYWJsZXM6IHtbbmFtZTogc3RyaW5nXTogc3RyaW5nfSwgdXNlckRlZmluZWRWYXJpYWJsZXM6IHtbbmFtZTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAgICAgICBjb25zdCBwcmVkZWZpbmVkVmFyaWFibGVzS2V5cyA9IE9iamVjdC5rZXlzKHByZWRlZmluZWRWYXJpYWJsZXMpO1xuICAgICAgICBjb25zdCB1c2VyRGVmaW5lZFZhcmlhYmxlc0tleXMgPSBPYmplY3Qua2V5cyh1c2VyRGVmaW5lZFZhcmlhYmxlcyk7XG5cbiAgICAgICAgY29uc3Qgb3ZlcnJpZGluZ09mUHJlZGVmaW5lZFZhcmlhYmxlcyA9IHVzZXJEZWZpbmVkVmFyaWFibGVzS2V5cy5maWx0ZXIoZWxlID0+IHByZWRlZmluZWRWYXJpYWJsZXNLZXlzLmluY2x1ZGVzKGVsZSkpO1xuICAgICAgICBpZiAob3ZlcnJpZGluZ09mUHJlZGVmaW5lZFZhcmlhYmxlcy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGlua1RvR2l0bGFiID0gXCJodHRwczovL2dpdGxhYi5jb20vZ2l0bGFiLW9yZy9naXRsYWIvLS9ibG9iL3YxNy43LjEtZWUvZG9jL2NpL3ZhcmlhYmxlcy9wcmVkZWZpbmVkX3ZhcmlhYmxlcy5tZD9wbGFpbj0xJnJlZl90eXBlPXRhZ3MjTDE1LTE2XCI7XG4gICAgICAgIHRoaXMud3JpdGVTdHJlYW1zLm1lbW9TdGRvdXQoY2hhbGtge2JnWWVsbG93QnJpZ2h0ICBXQVJOIH0gJHt0ZXJtaW5hbExpbmsoXCJBdm9pZCBvdmVycmlkaW5nIHByZWRlZmluZWQgdmFyaWFibGVzXCIsIGxpbmtUb0dpdGxhYil9IFt7Ym9sZCAke292ZXJyaWRpbmdPZlByZWRlZmluZWRWYXJpYWJsZXN9fV0gYXMgaXQgY2FuIGNhdXNlIHRoZSBwaXBlbGluZSB0byBiZWhhdmUgdW5leHBlY3RlZGx5LlxcbmApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgcHJlZGVmaW5lZFZhcmlhYmxlcyB0aGF0J3MgZW5yaWNoZWQgd2l0aCB0aGUgYWRkaXRpb25hbCBpbmZvIHRoYXQncyBvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbnN0cnVjdGluZ1xuICAgICAqL1xuICAgIHByaXZhdGUgX3ByZWRlZmluZWRWYXJpYWJsZXMgKG9wdDogSm9iT3B0aW9ucykge1xuICAgICAgICBjb25zdCBhcmd2ID0gdGhpcy5hcmd2O1xuICAgICAgICBjb25zdCBjd2QgPSBhcmd2LmN3ZDtcbiAgICAgICAgY29uc3Qgc3RhdGVEaXIgPSB0aGlzLmFyZ3Yuc3RhdGVEaXI7XG4gICAgICAgIGNvbnN0IGdpdERhdGEgPSB0aGlzLmdpdERhdGE7XG5cbiAgICAgICAgbGV0IGNpQnVpbGRzRGlyOiBzdHJpbmc7XG4gICAgICAgIGlmICh0aGlzLmpvYkRhdGFbXCJpbWFnZVwiXSkge1xuICAgICAgICAgICAgY2lCdWlsZHNEaXIgPSBcIi9idWlsZHNcIjtcbiAgICAgICAgICAgIHRoaXMuY2lQcm9qZWN0RGlyID0gYCR7Y2lCdWlsZHNEaXJ9LyR7Z2l0RGF0YS5yZW1vdGUuZ3JvdXB9LyR7Z2l0RGF0YS5yZW1vdGUucHJvamVjdH1gO1xuICAgICAgICB9IGVsc2UgaWYgKGFyZ3Yuc2hlbGxJc29sYXRpb24pIHtcbiAgICAgICAgICAgIGNpQnVpbGRzRGlyID0gYCR7Y3dkfS8ke3N0YXRlRGlyfS9idWlsZHMvJHt0aGlzLnNhZmVKb2JOYW1lfWA7XG4gICAgICAgICAgICB0aGlzLmNpUHJvamVjdERpciA9IGNpQnVpbGRzRGlyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2lCdWlsZHNEaXIgPSBjd2Q7XG4gICAgICAgICAgICB0aGlzLmNpUHJvamVjdERpciA9IGNpQnVpbGRzRGlyO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJlZGVmaW5lZFZhcmlhYmxlcyA9IG9wdC5wcmVkZWZpbmVkVmFyaWFibGVzO1xuXG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9KT0JfSURcIl0gPSBgJHt0aGlzLmpvYklkfWA7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9QSVBFTElORV9JRFwiXSA9IGAke3RoaXMucGlwZWxpbmVJaWQgKyAxMDAwfWA7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9QSVBFTElORV9JSURcIl0gPSBgJHt0aGlzLnBpcGVsaW5lSWlkfWA7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9KT0JfTkFNRVwiXSA9IGAke3RoaXMubmFtZX1gO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfSk9CX05BTUVfU0xVR1wiXSA9IGAke3RoaXMubmFtZS5yZXBsYWNlKC9bXmEtelxcZF0rL2lnLCBcIi1cIikucmVwbGFjZSgvXi0vLCBcIlwiKS5zbGljZSgwLCA2MykucmVwbGFjZSgvLSQvLCBcIlwiKS50b0xvd2VyQ2FzZSgpfWA7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9KT0JfU1RBR0VcIl0gPSBgJHt0aGlzLnN0YWdlfWA7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9CVUlMRFNfRElSXCJdID0gY2lCdWlsZHNEaXI7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9QUk9KRUNUX0RJUlwiXSA9IHRoaXMuY2lQcm9qZWN0RGlyO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfSk9CX1VSTFwiXSA9IGAke3ByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9TRVJWRVJfVVJMXCJdfS8ke2dpdERhdGEucmVtb3RlLmdyb3VwfS8ke2dpdERhdGEucmVtb3RlLnByb2plY3R9Ly0vam9icy8ke3RoaXMuam9iSWR9YDsgLy8gQ2hhbmdlcyBvbiByZXJ1bi5cbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX1BJUEVMSU5FX1VSTFwiXSA9IGAke3ByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9TRVJWRVJfVVJMXCJdfS8ke2dpdERhdGEucmVtb3RlLmdyb3VwfS8ke2dpdERhdGEucmVtb3RlLnByb2plY3R9L3BpcGVsaW5lcy8ke3RoaXMucGlwZWxpbmVJaWR9YDtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX0VOVklST05NRU5UX05BTUVcIl0gPSB0aGlzLmVudmlyb25tZW50Py5uYW1lID8/IFwiXCI7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9FTlZJUk9OTUVOVF9TTFVHXCJdID0gdGhpcy5lbnZpcm9ubWVudD8ubmFtZT8ucmVwbGFjZSgvW15hLXpcXGRdKy9pZywgXCItXCIpLnJlcGxhY2UoL14tLywgXCJcIikuc2xpY2UoMCwgMjMpLnJlcGxhY2UoLy0kLywgXCJcIikudG9Mb3dlckNhc2UoKSA/PyBcIlwiO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfRU5WSVJPTk1FTlRfVVJMXCJdID0gdGhpcy5lbnZpcm9ubWVudD8udXJsID8/IFwiXCI7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9FTlZJUk9OTUVOVF9USUVSXCJdID0gdGhpcy5lbnZpcm9ubWVudD8uZGVwbG95bWVudF90aWVyID8/IFwiXCI7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9FTlZJUk9OTUVOVF9BQ1RJT05cIl0gPSB0aGlzLmVudmlyb25tZW50Py5hY3Rpb24gPz8gXCJcIjtcblxuICAgICAgICBpZiAob3B0Lm5vZGVJbmRleCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX05PREVfSU5ERVhcIl0gPSBgJHtvcHQubm9kZUluZGV4fWA7XG4gICAgICAgIH1cbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX05PREVfVE9UQUxcIl0gPSBgJHtvcHQubm9kZXNUb3RhbH1gO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfUkVHSVNUUllcIl0gPSBgbG9jYWwtcmVnaXN0cnkuJHt0aGlzLmdpdERhdGEucmVtb3RlLmhvc3R9YDtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX1JFR0lTVFJZX0lNQUdFXCJdID0gYCRDSV9SRUdJU1RSWS8ke3ByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9QUk9KRUNUX1BBVEhcIl0udG9Mb3dlckNhc2UoKX1gO1xuICAgICAgICByZXR1cm4gcHJlZGVmaW5lZFZhcmlhYmxlcztcbiAgICB9XG5cbiAgICBnZXQgam9iU3RhdHVzICgpIHtcbiAgICAgICAgaWYgKHRoaXMucHJlU2NyaXB0c0V4aXRDb2RlID09IG51bGwpIHJldHVybiBcInBlbmRpbmdcIjtcbiAgICAgICAgaWYgKHRoaXMucHJlU2NyaXB0c0V4aXRDb2RlID09IDApIHJldHVybiBcInN1Y2Nlc3NcIjtcblxuICAgICAgICBsZXQgYWxsb3dlZEV4aXRDb2RlcyA9IFswXTtcbiAgICAgICAgY29uc3QgYWxsb3dGYWlsdXJlID0gdGhpcy5hbGxvd0ZhaWx1cmU7XG4gICAgICAgIHN3aXRjaCAodHlwZW9mIGFsbG93RmFpbHVyZSkge1xuICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgICAgICBpZiAoYWxsb3dGYWlsdXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRFeGl0Q29kZXMgPSBbdGhpcy5wcmVTY3JpcHRzRXhpdENvZGVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgICAgICBpZiAoISBBcnJheS5pc0FycmF5KGFsbG93RmFpbHVyZS5leGl0X2NvZGVzKSkge1xuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkRXhpdENvZGVzID0gW2FsbG93RmFpbHVyZS5leGl0X2NvZGVzXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkRXhpdENvZGVzID0gYWxsb3dGYWlsdXJlLmV4aXRfY29kZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdHlwZTogICR7dHlwZW9mIGFsbG93RmFpbHVyZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhbGxvd2VkRXhpdENvZGVzLmluY2x1ZGVzKHRoaXMucHJlU2NyaXB0c0V4aXRDb2RlKSA/IFwid2FybmluZ1wiIDogXCJmYWlsZWRcIjtcbiAgICB9XG5cbiAgICBnZXQgYXJ0aWZhY3RzVG9Tb3VyY2UgKCkge1xuICAgICAgICBpZiAodGhpcy5qb2JEYXRhW1wiZ2NsQXJ0aWZhY3RzVG9Tb3VyY2VcIl0gIT0gbnVsbCkgcmV0dXJuIHRoaXMuam9iRGF0YVtcImdjbEFydGlmYWN0c1RvU291cmNlXCJdO1xuICAgICAgICByZXR1cm4gdGhpcy5hcmd2LmFydGlmYWN0c1RvU291cmNlO1xuICAgIH1cblxuICAgIGdldCBwcmV0dHlEdXJhdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLl9lbmRUaW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJldHR5SHJ0aW1lKHRoaXMuX2VuZFRpbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0VGltZSA/XG4gICAgICAgICAgICBwcmV0dHlIcnRpbWUocHJvY2Vzcy5ocnRpbWUodGhpcy5fc3RhcnRUaW1lKSkgOlxuICAgICAgICAgICAgXCIwIG1zXCI7XG4gICAgfVxuXG4gICAgZ2V0IGZvcm1hdHRlZEpvYk5hbWUgKCkge1xuICAgICAgICBsZXQgcHJlZml4ID0gXCJcIjtcbiAgICAgICAgaWYgKHRoaXMuYXJndi5jaGlsZFBpcGVsaW5lRGVwdGggPiAwKSBwcmVmaXggPSBcIlxcdFwiLnJlcGVhdCh0aGlzLmFyZ3YuY2hpbGRQaXBlbGluZURlcHRoKSArIGBbJHt0aGlzLmFyZ3YudmFyaWFibGUuR0NMX1RSSUdHRVJFUn1dIC0+IGA7XG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcFByZWZpeCA9IHRoaXMuYXJndi5zaG93VGltZXN0YW1wcyA/XG4gICAgICAgICAgICBgWyR7ZGF0ZUZvcm1hdHRlci5mb3JtYXQobmV3IERhdGUoKSl9ICR7dGhpcy5wcmV0dHlEdXJhdGlvbi5wYWRTdGFydCg3KX1dIGAgOlxuICAgICAgICAgICAgXCJcIjtcblxuICAgICAgICAvLyBbMTY6MzM6MTkgMS4zNyBtaW5dIG15LWpvYiAgICAgPiBoZWxsbyB3b3JsZFxuICAgICAgICByZXR1cm4gY2hhbGtgJHt0aW1lc3RhbXBQcmVmaXh9e2JsdWVCcmlnaHQgJHtwcmVmaXh9JHt0aGlzLm5hbWUucGFkRW5kKHRoaXMuam9iTmFtZVBhZCl9fWA7XG4gICAgfVxuXG4gICAgZ2V0IHNhZmVKb2JOYW1lICgpIHtcbiAgICAgICAgcmV0dXJuIFV0aWxzLnNhZmVEb2NrZXJTdHJpbmcodGhpcy5uYW1lKTtcbiAgICB9XG5cbiAgICBnZXQgbmVlZHMgKCk6IE5lZWRbXSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wibmVlZHNcIl0gPz8gbnVsbDtcbiAgICB9XG5cbiAgICBnZXQgYnVpbGRWb2x1bWVOYW1lICgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYGdjbC0ke3RoaXMuc2FmZUpvYk5hbWV9LSR7dGhpcy5qb2JJZH0tYnVpbGRgO1xuICAgIH1cblxuICAgIGdldCB0bXBWb2x1bWVOYW1lICgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYGdjbC0ke3RoaXMuc2FmZUpvYk5hbWV9LSR7dGhpcy5qb2JJZH0tdG1wYDtcbiAgICB9XG5cbiAgICBnZXQgc2VydmljZXMgKCk6IFNlcnZpY2VbXSB7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VzOiBTZXJ2aWNlW10gPSBbXTtcbiAgICAgICAgaWYgKCF0aGlzLmpvYkRhdGFbXCJzZXJ2aWNlc1wiXSkgcmV0dXJuIFtdO1xuXG4gICAgICAgIGZvciAoY29uc3Qgc2VydmljZSBvZiBPYmplY3QudmFsdWVzPGFueT4odGhpcy5qb2JEYXRhW1wic2VydmljZXNcIl0pKSB7XG4gICAgICAgICAgICBjb25zdCBleHBhbmRlZCA9IFV0aWxzLmV4cGFuZFZhcmlhYmxlcyh7Li4udGhpcy5fdmFyaWFibGVzLCAuLi50aGlzLl9kb3RlbnZWYXJpYWJsZXMsIC4uLnNlcnZpY2VbXCJ2YXJpYWJsZXNcIl19KTtcbiAgICAgICAgICAgIGxldCBzZXJ2aWNlTmFtZSA9IFV0aWxzLmV4cGFuZFRleHQoc2VydmljZVtcIm5hbWVcIl0sIGV4cGFuZGVkKTtcbiAgICAgICAgICAgIGlmIChzZXJ2aWNlTmFtZSA9PSBcIlwiKSBjb250aW51ZTtcbiAgICAgICAgICAgIHNlcnZpY2VOYW1lID0gc2VydmljZU5hbWUuaW5jbHVkZXMoXCI6XCIpID8gc2VydmljZU5hbWUgOiBgJHtzZXJ2aWNlTmFtZX06bGF0ZXN0YDtcbiAgICAgICAgICAgIHNlcnZpY2VzLnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6IHNlcnZpY2VOYW1lLFxuICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQ6IHNlcnZpY2VbXCJlbnRyeXBvaW50XCJdID8/IG51bGwsXG4gICAgICAgICAgICAgICAgY29tbWFuZDogc2VydmljZVtcImNvbW1hbmRcIl0gPz8gbnVsbCxcbiAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IGV4cGFuZGVkLFxuICAgICAgICAgICAgICAgIGFsaWFzOiBVdGlscy5leHBhbmRUZXh0KHNlcnZpY2VbXCJhbGlhc1wiXSwgZXhwYW5kZWQpID8/IG51bGwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VydmljZXM7XG4gICAgfVxuXG4gICAgc2V0IGNpUHJvamVjdERpciAoY2lQcm9qZWN0RGlyOiBzdHJpbmcpIHtcbiAgICAgICAgYXNzZXJ0KHRoaXMuX2NpUHJvamVjdERpciA9PSBudWxsLCBcInRoaXMuX2NpUHJvamVjdERpciBjYW4gb25seSBiZSBzZXQgb25jZVwiKTtcbiAgICAgICAgdGhpcy5fY2lQcm9qZWN0RGlyID0gY2lQcm9qZWN0RGlyO1xuICAgIH1cbiAgICBnZXQgY2lQcm9qZWN0RGlyICgpIHtcbiAgICAgICAgYXNzZXJ0KHRoaXMuX2NpUHJvamVjdERpciwgXCJhdHRlbXB0ZWQgdG8gYWNjZXNzIHRoaXMuX2NpUHJvamVjdERpciBiZWZvcmUgaXQgaXMgaW5pdGlhbGl6ZWRcIik7XG4gICAgICAgIHJldHVybiB0aGlzLl9jaVByb2plY3REaXI7XG4gICAgfVxuXG4gICAgc2V0IGpvYk5hbWVQYWQgKGpvYk5hbWVQYWQ6IG51bWJlcikge1xuICAgICAgICBhc3NlcnQodGhpcy5fam9iTmFtZVBhZCA9PSBudWxsLCBcInRoaXMuX2pvYk5hbWVQYWQgY2FuIG9ubHkgYmUgc2V0IG9uY2VcIik7XG4gICAgICAgIHRoaXMuX2pvYk5hbWVQYWQgPSBqb2JOYW1lUGFkO1xuICAgIH1cblxuICAgIGdldCBqb2JOYW1lUGFkICgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fam9iTmFtZVBhZCA/PyAwO1xuICAgIH1cblxuICAgIGdldCBwcm9kdWNlcnMgKCk6IHtuYW1lOiBzdHJpbmc7IGRvdGVudjogc3RyaW5nIHwgbnVsbH1bXSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvZHVjZXJzO1xuICAgIH1cblxuICAgIHNldCBwcm9kdWNlcnMgKHByb2R1Y2Vyczoge25hbWU6IHN0cmluZzsgZG90ZW52OiBzdHJpbmcgfCBudWxsfVtdIHwgbnVsbCkge1xuICAgICAgICBhc3NlcnQodGhpcy5fcHJvZHVjZXJzID09IG51bGwsIFwidGhpcy5fcHJvZHVjZXJzIGNhbiBvbmx5IGJlIHNldCBvbmNlXCIpO1xuICAgICAgICB0aGlzLl9wcm9kdWNlcnMgPSBwcm9kdWNlcnM7XG4gICAgfVxuXG4gICAgZ2V0IHN0YWdlICgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wic3RhZ2VcIl0gfHwgXCJ0ZXN0XCI7XG4gICAgfVxuXG4gICAgZ2V0IGludGVyYWN0aXZlICgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcImdjbEludGVyYWN0aXZlXCJdIHx8IGZhbHNlO1xuICAgIH1cblxuICAgIGdldCBpbmplY3RTU0hBZ2VudCAoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJnY2xJbmplY3RTU0hBZ2VudFwiXSB8fCBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgZGVzY3JpcHRpb24gKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJnY2xEZXNjcmlwdGlvblwiXSA/PyBcIlwiO1xuICAgIH1cblxuICAgIGdldCBhcnRpZmFjdHMgKCk6IHtwYXRoczogc3RyaW5nW107IGV4Y2x1ZGU/OiBzdHJpbmdbXTsgcmVwb3J0cz86IHtkb3RlbnY/OiBzdHJpbmd9OyB3aGVuPzogc3RyaW5nfSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wiYXJ0aWZhY3RzXCJdO1xuICAgIH1cblxuICAgIGRlbGV0ZUFydGlmYWN0cyAoKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmpvYkRhdGFbXCJhcnRpZmFjdHNcIl07XG4gICAgfVxuXG4gICAgZ2V0IGNhY2hlICgpOiBDYWNoZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcImNhY2hlXCJdIHx8IFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRVbmlxdWVDYWNoZU5hbWUgKGN3ZDogc3RyaW5nLCBleHBhbmRlZDoge1trZXk6IHN0cmluZ106IHN0cmluZ30sIGNhY2hlSW5kZXg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBnZXRDYWNoZVByZWZpeCA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcmVmaXggPSB0aGlzLmpvYkRhdGFbXCJjYWNoZVwiXVtpbmRleF1bXCJrZXlcIl1bXCJwcmVmaXhcIl07XG4gICAgICAgICAgICBpZiAocHJlZml4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2luZGV4fV8ke1V0aWxzLmV4cGFuZFRleHQocHJlZml4LCBleHBhbmRlZCl9LWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbGVuYW1lcyA9IHRoaXMuam9iRGF0YVtcImNhY2hlXCJdW2luZGV4XVtcImtleVwiXVtcImZpbGVzXCJdLm1hcCgocDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwYW5kUCA9IFV0aWxzLmV4cGFuZFRleHQocCwgZXhwYW5kZWQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBleHBhbmRQLnNwbGl0KFwiLlwiKVswXTtcbiAgICAgICAgICAgIH0pLmpvaW4oXCJfXCIpO1xuICAgICAgICAgICAgcmV0dXJuIGAke2luZGV4fV8ke2ZpbGVuYW1lc30tYDtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmpvYkRhdGFbXCJjYWNoZVwiXVtjYWNoZUluZGV4XS5rZXk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIgfHwga2V5ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBVdGlscy5leHBhbmRUZXh0KGtleSA/PyBcImRlZmF1bHRcIiwgZXhwYW5kZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZXMgPSBrZXlbXCJmaWxlc1wiXS5tYXAoKGY6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgbGV0IHBhdGggPSBVdGlscy5leHBhbmRUZXh0KGYsIGV4cGFuZGVkKTtcbiAgICAgICAgICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoYCR7dGhpcy5jaVByb2plY3REaXJ9L2ApKSB7XG4gICAgICAgICAgICAgICAgcGF0aCA9IHBhdGguc2xpY2UoYCR7dGhpcy5jaVByb2plY3REaXJ9L2AubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBgJHtjd2R9LyR7cGF0aH1gO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGdldENhY2hlUHJlZml4KGNhY2hlSW5kZXgpICsgYXdhaXQgVXRpbHMuY2hlY2tzdW1GaWxlcyhjd2QsIGZpbGVzKTtcbiAgICB9XG5cbiAgICBnZXQgYmVmb3JlU2NyaXB0cyAoKTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCBiZWZvcmVTY3JpcHRzID0gdGhpcy5qb2JEYXRhW1wiYmVmb3JlX3NjcmlwdFwiXSB8fCBbXTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBiZWZvcmVTY3JpcHRzID09PSBcInN0cmluZ1wiID8gW2JlZm9yZVNjcmlwdHNdIDogYmVmb3JlU2NyaXB0cztcbiAgICB9XG5cbiAgICBnZXQgYWZ0ZXJTY3JpcHRzICgpOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IGFmdGVyU2NyaXB0cyA9IHRoaXMuam9iRGF0YVtcImFmdGVyX3NjcmlwdFwiXSB8fCBbXTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBhZnRlclNjcmlwdHMgPT09IFwic3RyaW5nXCIgPyBbYWZ0ZXJTY3JpcHRzXSA6IGFmdGVyU2NyaXB0cztcbiAgICB9XG5cbiAgICBnZXQgc2NyaXB0cyAoKTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCBzY3JpcHQgPSB0aGlzLmpvYkRhdGFbXCJzY3JpcHRcIl07XG4gICAgICAgIHJldHVybiB0eXBlb2Ygc2NyaXB0ID09PSBcInN0cmluZ1wiID8gW3NjcmlwdF0gOiBzY3JpcHQ7XG4gICAgfVxuXG4gICAgZ2V0IHRyaWdnZXIgKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJ0cmlnZ2VyXCJdO1xuICAgIH1cblxuICAgIGFzeW5jIHN0YXJ0VHJpZ2dlclBpcGVsaW5lICgpIHtcbiAgICAgICAgdGhpcy53cml0ZVN0cmVhbXMubWVtb1N0ZG91dChjaGFsa2B7YmdZZWxsb3dCcmlnaHQgIFdBUk4gfSBkb3duc3RyZWFtIHBpcGVsaW5lIGlzIGV4cGVyaW1lbnRhbCBpbiBnaXRsYWItY2ktbG9jYWxcXG5gKTtcbiAgICAgICAgYXdhaXQgdGhpcy5mZXRjaFRyaWdnZXJJbmNsdWRlKCk7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlc0ZvckRvd25zdHJlYW1QaXBlbGluZSA9IE9iamVjdC5lbnRyaWVzKHsuLi50aGlzLmdsb2JhbFZhcmlhYmxlcywgLi4udGhpcy5qb2JEYXRhLnZhcmlhYmxlc30pLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9PSR7dmFsdWV9YCk7XG5cbiAgICAgICAgY29uc3QgZ2NsVHJpZ2dlcmVyID0gdGhpcy5hcmd2LnZhcmlhYmxlW1wiR0NMX1RSSUdHRVJFUlwiXSA/XG4gICAgICAgICAgICBgJHt0aGlzLmFyZ3YudmFyaWFibGVbXCJHQ0xfVFJJR0dFUkVSXCJdfSAtPiAke3RoaXMubmFtZX1gIDpcbiAgICAgICAgICAgIHRoaXMubmFtZTtcbiAgICAgICAgYXdhaXQgaGFuZGxlcih7XG4gICAgICAgICAgICAuLi5PYmplY3QuZnJvbUVudHJpZXModGhpcy5hcmd2Lm1hcCksXG4gICAgICAgICAgICBmaWxlOiBgJHt0aGlzLmFyZ3Yuc3RhdGVEaXJ9L2luY2x1ZGVzL3RyaWdnZXJzLyR7dGhpcy5uYW1lfS55bWxgLFxuICAgICAgICAgICAgdmFyaWFibGU6IFtcbiAgICAgICAgICAgICAgICBjaGFsa2BHQ0xfVFJJR0dFUkVSPSR7Z2NsVHJpZ2dlcmVyfWAsXG4gICAgICAgICAgICAgICAgXCJDSV9QSVBFTElORV9TT1VSQ0U9cGFyZW50X3BpcGVsaW5lXCIsXG4gICAgICAgICAgICBdLmNvbmNhdCh2YXJpYWJsZXNGb3JEb3duc3RyZWFtUGlwZWxpbmUpLFxuICAgICAgICB9LCB0aGlzLndyaXRlU3RyZWFtcywgW10sIHRoaXMuYXJndi5jaGlsZFBpcGVsaW5lRGVwdGggKyAxKTtcbiAgICB9XG5cbiAgICBnZXQgcHJlU2NyaXB0c0V4aXRDb2RlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZTtcbiAgICB9XG5cbiAgICBnZXQgYWZ0ZXJTY3JpcHRzRXhpdENvZGUgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWZ0ZXJTY3JpcHRzRXhpdENvZGU7XG4gICAgfVxuXG4gICAgZ2V0IHN0YXJ0ZWQgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVubmluZyB8fCB0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUgIT09IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0IGZpbmlzaGVkICgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLl9ydW5uaW5nICYmIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICBnZXQgY292ZXJhZ2VQZXJjZW50ICgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvdmVyYWdlUGVyY2VudDtcbiAgICB9XG5cbiAgICBnZXQgZmlsZVZhcmlhYmxlc0RpciAoKSB7XG4gICAgICAgIHJldHVybiBgL3RtcC9naXRsYWItY2ktbG9jYWwtZmlsZS12YXJpYWJsZXMtJHt0aGlzLl92YXJpYWJsZXNbXCJDSV9QUk9KRUNUX1BBVEhfU0xVR1wiXX0tJHt0aGlzLmpvYklkfWA7XG4gICAgfVxuXG4gICAgZ2V0IGdsb2JhbFZhcmlhYmxlcyAoKSB7XG4gICAgICAgIGlmICh0aGlzLmluaGVyaXQudmFyaWFibGVzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5pbmhlcml0LnZhcmlhYmxlcykpIHtcbiAgICAgICAgICAgIGNvbnN0IGluaGVyaXRWYXJpYWJsZXMgPSB0aGlzLmluaGVyaXQudmFyaWFibGVzO1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyh0aGlzLl9nbG9iYWxWYXJpYWJsZXMpLmZpbHRlcigoW2tdKSA9PiBpbmhlcml0VmFyaWFibGVzLmluY2x1ZGVzKGspKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dsb2JhbFZhcmlhYmxlcztcbiAgICB9XG5cbiAgICBhc3luYyBzdGFydCAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLnRyaWdnZXIpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RhcnRUcmlnZ2VyUGlwZWxpbmUoKTtcbiAgICAgICAgICAgIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSA9IDA7IC8vIE5PVEU6IHNvIHRoYXQgYHRoaXMuZmluaXNoZWRgIHdpbGwgaW1wbGljaXRseSBiZSBzZXQgdG8gdHJ1ZVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcnVubmluZyA9IHRydWU7XG5cbiAgICAgICAgY29uc3QgYXJndiA9IHRoaXMuYXJndjtcbiAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgdGhpcy5fdmFyaWFibGVzW1wiQ0lfSk9CX1NUQVJURURfQVRcIl0gPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCIuXCIpWzBdICsgXCJaXCI7XG4gICAgICAgIGNvbnN0IHdyaXRlU3RyZWFtcyA9IHRoaXMud3JpdGVTdHJlYW1zO1xuICAgICAgICB0aGlzLl9kb3RlbnZWYXJpYWJsZXMgPSBhd2FpdCB0aGlzLmluaXRQcm9kdWNlclJlcG9ydHNEb3RlbnZWYXJpYWJsZXMod3JpdGVTdHJlYW1zLCBVdGlscy5leHBhbmRWYXJpYWJsZXModGhpcy5fdmFyaWFibGVzKSk7XG4gICAgICAgIGNvbnN0IGV4cGFuZGVkID0gVXRpbHMudW5zY2FwZSQkVmFyaWFibGVzKFV0aWxzLmV4cGFuZFZhcmlhYmxlcyh7Li4udGhpcy5fdmFyaWFibGVzLCAuLi50aGlzLl9kb3RlbnZWYXJpYWJsZXN9KSk7XG4gICAgICAgIGNvbnN0IGltYWdlTmFtZSA9IHRoaXMuaW1hZ2VOYW1lKGV4cGFuZGVkKTtcbiAgICAgICAgY29uc3QgaGVscGVySW1hZ2VOYW1lID0gYXJndi5oZWxwZXJJbWFnZTtcbiAgICAgICAgY29uc3Qgc2FmZUpvYk5hbWUgPSB0aGlzLnNhZmVKb2JOYW1lO1xuXG4gICAgICAgIGNvbnN0IG91dHB1dExvZ0ZpbGVQYXRoID0gYCR7YXJndi5jd2R9LyR7YXJndi5zdGF0ZURpcn0vb3V0cHV0LyR7c2FmZUpvYk5hbWV9LmxvZ2A7XG4gICAgICAgIGF3YWl0IGZzLmVuc3VyZUZpbGUob3V0cHV0TG9nRmlsZVBhdGgpO1xuICAgICAgICBhd2FpdCBmcy50cnVuY2F0ZShvdXRwdXRMb2dGaWxlUGF0aCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmludGVyYWN0aXZlKSB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBzdGFydGluZ30gJHtpbWFnZU5hbWUgPz8gXCJzaGVsbFwifSAoe3llbGxvdyAke3RoaXMuc3RhZ2V9fSlcXG5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbWFnZU5hbWUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHVsbEltYWdlKHdyaXRlU3RyZWFtcywgaW1hZ2VOYW1lKTtcblxuICAgICAgICAgICAgY29uc3QgYnVpbGRWb2x1bWVOYW1lID0gdGhpcy5idWlsZFZvbHVtZU5hbWU7XG4gICAgICAgICAgICBjb25zdCB0bXBWb2x1bWVOYW1lID0gdGhpcy50bXBWb2x1bWVOYW1lO1xuICAgICAgICAgICAgY29uc3QgZmlsZVZhcmlhYmxlc0RpciA9IHRoaXMuZmlsZVZhcmlhYmxlc0RpcjtcblxuICAgICAgICAgICAgY29uc3Qgdm9sdW1lUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgIHZvbHVtZVByb21pc2VzLnB1c2goVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcInZvbHVtZVwiLCBcImNyZWF0ZVwiLCBgJHtidWlsZFZvbHVtZU5hbWV9YF0sIGFyZ3YuY3dkKSk7XG4gICAgICAgICAgICB2b2x1bWVQcm9taXNlcy5wdXNoKFV0aWxzLnNwYXduKFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJ2b2x1bWVcIiwgXCJjcmVhdGVcIiwgYCR7dG1wVm9sdW1lTmFtZX1gXSwgYXJndi5jd2QpKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lclZvbHVtZU5hbWVzLnB1c2goYnVpbGRWb2x1bWVOYW1lKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lclZvbHVtZU5hbWVzLnB1c2godG1wVm9sdW1lTmFtZSk7XG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh2b2x1bWVQcm9taXNlcyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG5cbiAgICAgICAgICAgIGxldCBjaG93bk9wdCA9IFwiMDowXCI7XG4gICAgICAgICAgICBsZXQgY2htb2RPcHQgPSBcImErcndcIjtcbiAgICAgICAgICAgIGlmICghdGhpcy5hcmd2LnVtYXNrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBVdGlscy5zcGF3bihbdGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUsIFwicnVuXCIsIFwiLS1ybVwiLCBcIi0tZW50cnlwb2ludFwiLCBcInNoXCIsIGltYWdlTmFtZSwgXCItY1wiLCBcImVjaG8gXFxcIiQoaWQgLXUpOiQoaWQgLWcpXFxcIlwiXSk7XG4gICAgICAgICAgICAgICAgY2hvd25PcHQgPSBzdGRvdXQ7XG4gICAgICAgICAgICAgICAgaWYgKGNob3duT3B0ID09IFwiMDowXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2htb2RPcHQgPSBcImctd1wiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoZWxwZXJJbWFnZU5hbWUpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnB1bGxJbWFnZSh3cml0ZVN0cmVhbXMsIGhlbHBlckltYWdlTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7c3Rkb3V0OiBjb250YWluZXJJZH0gPSBhd2FpdCBVdGlscy5zcGF3bihbXG4gICAgICAgICAgICAgICAgdGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUsIFwiY3JlYXRlXCIsIFwiLS11c2VyPTA6MFwiLCBgLS12b2x1bWU9JHtidWlsZFZvbHVtZU5hbWV9OiR7dGhpcy5jaVByb2plY3REaXJ9YCwgYC0tdm9sdW1lPSR7dG1wVm9sdW1lTmFtZX06JHt0aGlzLmZpbGVWYXJpYWJsZXNEaXJ9YCwgYCR7aGVscGVySW1hZ2VOYW1lfWAsXG4gICAgICAgICAgICAgICAgLi4uW1wic2hcIiwgXCItY1wiLCBgY2hvd24gJHtjaG93bk9wdH0gLVIgJHt0aGlzLmNpUHJvamVjdERpcn0gJiYgY2htb2QgJHtjaG1vZE9wdH0gLVIgJHt0aGlzLmNpUHJvamVjdERpcn0gJiYgY2hvd24gJHtjaG93bk9wdH0gLVIgL3RtcC8gJiYgY2htb2QgJHtjaG1vZE9wdH0gLVIgL3RtcC9gXSxcbiAgICAgICAgICAgIF0sIGFyZ3YuY3dkKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lcnNUb0NsZWFuLnB1c2goY29udGFpbmVySWQpO1xuICAgICAgICAgICAgaWYgKGF3YWl0IGZzLnBhdGhFeGlzdHMoZmlsZVZhcmlhYmxlc0RpcikpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbdGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUsIFwiY3BcIiwgYCR7ZmlsZVZhcmlhYmxlc0Rpcn0vLmAsIGAke2NvbnRhaW5lcklkfToke2ZpbGVWYXJpYWJsZXNEaXJ9YF0sIGFyZ3YuY3dkKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hMb25nUnVubmluZ1NpbGVudFRpbWVvdXQod3JpdGVTdHJlYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJjcFwiLCBgJHthcmd2LnN0YXRlRGlyfS9idWlsZHMvLmRvY2tlci8uYCwgYCR7Y29udGFpbmVySWR9OiR7dGhpcy5jaVByb2plY3REaXJ9YF0sIGFyZ3YuY3dkKTtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJzdGFydFwiLCBcIi0tYXR0YWNoXCIsIGNvbnRhaW5lcklkXSwgYXJndi5jd2QpO1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcInJtXCIsIFwiLXZmXCIsIGNvbnRhaW5lcklkXSwgYXJndi5jd2QpO1xuICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgY29waWVkIHRvICR7dGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGV9IHZvbHVtZXN9IGluIHttYWdlbnRhICR7cHJldHR5SHJ0aW1lKGVuZFRpbWUpfX1cXG5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlcnZpY2VzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIGBob3N0YCBhbmQgYG5vbmVgIG5ldHdvcmtzIGRvIG5vdCB3b3JrIHdpdGggc2VydmljZXMgYmVjYXVzZSBhbGlhc2VzIG9ubHkgd29yayBmb3JcbiAgICAgICAgICAgIC8vIHVzZXIgZGVmaW5lZCBuZXR3b3Jrcy5cbiAgICAgICAgICAgIGZvciAoY29uc3QgbmV0d29yayBvZiB0aGlzLmFyZ3YubmV0d29yaykge1xuICAgICAgICAgICAgICAgIGlmIChbXCJob3N0XCIsIFwibm9uZVwiXS5pbmNsdWRlcyhuZXR3b3JrKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3Ioe21lc3NhZ2U6IGBDYW5ub3QgYWRkIHNlcnZpY2UgbmV0d29yayBhbGlhcyB3aXRoIG5ldHdvcmsgbW9kZSAnJHtuZXR3b3JrfSdgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNyZWF0ZURvY2tlck5ldHdvcmsoYGdpdGxhYi1jaS1sb2NhbC0ke3RoaXMuam9iSWR9YCk7XG5cbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZXMubWFwKGFzeW5jIChzZXJ2aWNlLCBzZXJ2aWNlSW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VydmljZU5hbWUgPSBzZXJ2aWNlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHVsbEltYWdlKHdyaXRlU3RyZWFtcywgc2VydmljZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlQ29udGFpbmVySWQgPSBhd2FpdCB0aGlzLnN0YXJ0U2VydmljZSh3cml0ZVN0cmVhbXMsIFV0aWxzLmV4cGFuZFZhcmlhYmxlcyh7Li4uZXhwYW5kZWQsIC4uLnNlcnZpY2UudmFyaWFibGVzfSksIHNlcnZpY2UpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlQ29udGFpbmVyTG9nRmlsZSA9IGAke2FyZ3YuY3dkfS8ke2FyZ3Yuc3RhdGVEaXJ9L3NlcnZpY2VzLW91dHB1dC8ke3RoaXMuc2FmZUpvYk5hbWV9LyR7c2VydmljZU5hbWV9LSR7c2VydmljZUluZGV4fS5sb2dgO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNlcnZpY2VIZWFsdGhDaGVjayh3cml0ZVN0cmVhbXMsIHNlcnZpY2UsIHNlcnZpY2VJbmRleCwgc2VydmljZUNvbnRhaW5lckxvZ0ZpbGUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7c3Rkb3V0LCBzdGRlcnJ9ID0gYXdhaXQgVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcImxvZ3NcIiwgc2VydmljZUNvbnRhaW5lcklkXSk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGZzLmVuc3VyZUZpbGUoc2VydmljZUNvbnRhaW5lckxvZ0ZpbGUpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBmcy5wcm9taXNlcy53cml0ZUZpbGUoc2VydmljZUNvbnRhaW5lckxvZ0ZpbGUsIGAjIyMgc3Rkb3V0ICMjI1xcbiR7c3Rkb3V0fVxcbiMjIyBzdGRlcnIgIyMjXFxuJHtzdGRlcnJ9XFxuYCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5leGVjUHJlU2NyaXB0cyhleHBhbmRlZCk7XG4gICAgICAgIGlmICh0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUgPT0gbnVsbCkgdGhyb3cgRXJyb3IoXCJ0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUgbXVzdCBiZSBkZWZpbmVkIVwiKTtcblxuICAgICAgICBhd2FpdCB0aGlzLmV4ZWNBZnRlclNjcmlwdHMoZXhwYW5kZWQpO1xuXG4gICAgICAgIHRoaXMuX3J1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fZW5kVGltZSA9IHRoaXMuX2VuZFRpbWUgPz8gcHJvY2Vzcy5ocnRpbWUodGhpcy5fc3RhcnRUaW1lKTtcbiAgICAgICAgdGhpcy5wcmludEZpbmlzaGVkU3RyaW5nKCk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5jb3B5Q2FjaGVPdXQodGhpcy53cml0ZVN0cmVhbXMsIGV4cGFuZGVkKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jb3B5QXJ0aWZhY3RzT3V0KHRoaXMud3JpdGVTdHJlYW1zLCBleHBhbmRlZCk7XG5cbiAgICAgICAgaWYgKHRoaXMuam9iRGF0YVtcImNvdmVyYWdlXCJdKSB7XG4gICAgICAgICAgICB0aGlzLl9jb3ZlcmFnZVBlcmNlbnQgPSBhd2FpdCBVdGlscy5nZXRDb3ZlcmFnZVBlcmNlbnQoYXJndi5jd2QsIGFyZ3Yuc3RhdGVEaXIsIHRoaXMuam9iRGF0YVtcImNvdmVyYWdlXCJdLCBzYWZlSm9iTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBjbGVhbnVwUmVzb3VyY2VzICgpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2xvbmdSdW5uaW5nU2lsZW50VGltZW91dCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmFyZ3YuY2xlYW51cCkgcmV0dXJuO1xuXG4gICAgICAgIGlmICh0aGlzLl9jb250YWluZXJzVG9DbGVhbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJybVwiLCBcIi12ZlwiLCAuLi50aGlzLl9jb250YWluZXJzVG9DbGVhbl0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGFzc2VydChlIGluc3RhbmNlb2YgRXJyb3IsIFwiZSBpcyBub3QgaW5zdGFuY2VvZiBFcnJvclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9zZXJ2aWNlTmV0d29ya0lkKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJuZXR3b3JrXCIsIFwicm1cIiwgYCR7dGhpcy5fc2VydmljZU5ldHdvcmtJZH1gXSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGUgaW5zdGFuY2VvZiBFcnJvciwgXCJlIGlzIG5vdCBpbnN0YW5jZW9mIEVycm9yXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5lclZvbHVtZU5hbWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcInZvbHVtZVwiLCBcInJtXCIsIC4uLnRoaXMuX2NvbnRhaW5lclZvbHVtZU5hbWVzXSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGUgaW5zdGFuY2VvZiBFcnJvciwgXCJlIGlzIG5vdCBpbnN0YW5jZW9mIEVycm9yXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm1Qcm9taXNlcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgdGhpcy5fZmlsZXNUb1JtKSB7XG4gICAgICAgICAgICBybVByb21pc2VzLnB1c2goZnMucm0oZmlsZSwge3JlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWV9KSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocm1Qcm9taXNlcyk7XG5cbiAgICAgICAgY29uc3QgZmlsZVZhcmlhYmxlc0RpciA9IHRoaXMuZmlsZVZhcmlhYmxlc0RpcjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGZzLnJtKGZpbGVWYXJpYWJsZXNEaXIsIHtyZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlfSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGFzc2VydChlIGluc3RhbmNlb2YgRXJyb3IsIFwiZSBpcyBub3QgaW5zdGFuY2VvZiBFcnJvclwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVJbmplY3RTU0hBZ2VudE9wdGlvbnMgKCkge1xuICAgICAgICBpZiAoIXRoaXMuaW5qZWN0U1NIQWdlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSBcImRhcndpblwiIHx8IC9eZGFyd2luLy5leGVjKHByb2Nlc3MuZW52Lk9TVFlQRSA/PyBcIlwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiLS1lbnYgU1NIX0FVVEhfU09DSz0vcnVuL2hvc3Qtc2VydmljZXMvc3NoLWF1dGguc29jayAtdiAvcnVuL2hvc3Qtc2VydmljZXMvc3NoLWF1dGguc29jazovcnVuL2hvc3Qtc2VydmljZXMvc3NoLWF1dGguc29ja1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgLS1lbnYgU1NIX0FVVEhfU09DSz0ke3Byb2Nlc3MuZW52LlNTSF9BVVRIX1NPQ0t9IC12ICR7cHJvY2Vzcy5lbnYuU1NIX0FVVEhfU09DS306JHtwcm9jZXNzLmVudi5TU0hfQVVUSF9TT0NLfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZVNjcmlwdENvbW1hbmRzIChzY3JpcHRzOiBzdHJpbmdbXSkge1xuICAgICAgICBsZXQgY21kID0gXCJcIjtcbiAgICAgICAgc2NyaXB0cy5mb3JFYWNoKChzY3JpcHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0ID0gc2NyaXB0LnNwbGl0KC9cXHI/XFxuLyk7XG4gICAgICAgICAgICBjb25zdCBtdWx0aWxpbmVUZXh0ID0gc3BsaXQubGVuZ3RoID4gMSA/IFwiICMgY29sbGFwc2VkIG11bHRpLWxpbmUgY29tbWFuZFwiIDogXCJcIjtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBzcGxpdFswXT8ucmVwbGFjZSgvXFxcXC9nLCBcIlxcXFxcXFxcXCIpLnJlcGxhY2UoL1wiL2csIFwiXFxcXFxcXCJcIikucmVwbGFjZSgvWyRdL2csIFwiXFxcXCRcIik7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnRlcmFjdGl2ZSkge1xuICAgICAgICAgICAgICAgIGNtZCArPSBjaGFsa2BlY2hvIFwie2dyZWVuICQgJHt0ZXh0fSR7bXVsdGlsaW5lVGV4dH19XCJcXG5gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBQcmludCBjb21tYW5kIGVjaG8nZWQgd2l0aCAkR0NMX1NIRUxMX1BST01QVF9QTEFDRUhPTERFUlxuICAgICAgICAgICAgICAgIGNtZCArPSBgZWNobyBcIiR7R0NMX1NIRUxMX1BST01QVF9QTEFDRUhPTERFUn0gJHt0ZXh0fSR7bXVsdGlsaW5lVGV4dH1cIlxcbmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBFeGVjdXRlIGFjdHVhbCBzY3JpcHRcbiAgICAgICAgICAgIGNtZCArPSBgJHtzY3JpcHR9XFxuYDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjbWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBtb3VudENhY2hlQ21kICh3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgZXhwYW5kZWQ6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9KSB7XG4gICAgICAgIGlmICh0aGlzLmltYWdlTmFtZShleHBhbmRlZCkgJiYgIXRoaXMuYXJndi5tb3VudENhY2hlKSByZXR1cm4gW107XG5cbiAgICAgICAgY29uc3QgY21kOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IFtpbmRleCwgY10gb2YgdGhpcy5jYWNoZS5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHVuaXF1ZUNhY2hlTmFtZSA9IGF3YWl0IHRoaXMuZ2V0VW5pcXVlQ2FjaGVOYW1lKHRoaXMuYXJndi5jd2QsIGV4cGFuZGVkLCBpbmRleCk7XG4gICAgICAgICAgICBjLnBhdGhzLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gVXRpbHMuZXhwYW5kVGV4dChwLCBleHBhbmRlZCk7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgbW91bnRpbmcgY2FjaGV9IGZvciBwYXRoICR7cGF0aH1cXG5gKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWNoZU1vdW50ID0gVXRpbHMuc2FmZURvY2tlclN0cmluZyhgZ2NsLSR7ZXhwYW5kZWQuQ0lfUFJPSkVDVF9QQVRIX1NMVUd9LSR7dW5pcXVlQ2FjaGVOYW1lfWApO1xuICAgICAgICAgICAgICAgIGNtZC5wdXNoKFwiLXZcIiwgYCR7Y2FjaGVNb3VudH06JHt0aGlzLmNpUHJvamVjdERpcn0vJHtwYXRofWApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNtZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGV4ZWNQcmVTY3JpcHRzIChleHBhbmRlZDoge1trZXk6IHN0cmluZ106IHN0cmluZ30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgcHJlc2NyaXB0cyA9IHRoaXMuYmVmb3JlU2NyaXB0cy5jb25jYXQodGhpcy5zY3JpcHRzKTtcbiAgICAgICAgZXhwYW5kZWRbXCJDSV9KT0JfU1RBVFVTXCJdID0gXCJydW5uaW5nXCI7XG5cbiAgICAgICAgdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlID0gYXdhaXQgdGhpcy5leGVjU2NyaXB0cyhwcmVzY3JpcHRzLCBleHBhbmRlZCwgXCJcIik7XG4gICAgICAgIGV4cGFuZGVkW1wiQ0lfSk9CX1NUQVRVU1wiXSA9IHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSA9PT0gMCA/IFwic3VjY2Vzc1wiIDogXCJmYWlsZWRcIjtcblxuICAgICAgICB0aGlzLnByaW50RXhpdGVkU3RyaW5nKHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBleGVjQWZ0ZXJTY3JpcHRzIChleHBhbmRlZDoge1trZXk6IHN0cmluZ106IHN0cmluZ30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IFwiUnVubmluZyBhZnRlciBzY3JpcHQuLi5cIjtcbiAgICAgICAgdGhpcy5fYWZ0ZXJTY3JpcHRzRXhpdENvZGUgPSBhd2FpdCB0aGlzLmV4ZWNTY3JpcHRzKHRoaXMuYWZ0ZXJTY3JpcHRzLCBleHBhbmRlZCwgbWVzc2FnZSk7XG5cbiAgICAgICAgdGhpcy5wcmludEFmdGVyU2NyaXB0RXhpdGVkU3RyaW5nKHRoaXMuX2FmdGVyU2NyaXB0c0V4aXRDb2RlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGV4ZWNTY3JpcHRzIChzY3JpcHRzOiBzdHJpbmdbXSwgZXhwYW5kZWQ6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9LCBtZXNzYWdlOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgICBjb25zdCBjd2QgPSB0aGlzLmFyZ3YuY3dkO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IHRoaXMuYXJndi5zdGF0ZURpcjtcbiAgICAgICAgY29uc3Qgc2FmZUpvYk5hbWUgPSB0aGlzLnNhZmVKb2JOYW1lO1xuICAgICAgICBjb25zdCBvdXRwdXRGaWxlc1BhdGggPSBgJHtjd2R9LyR7c3RhdGVEaXJ9L291dHB1dC8ke3NhZmVKb2JOYW1lfS5sb2dgO1xuICAgICAgICBjb25zdCBidWlsZFZvbHVtZU5hbWUgPSB0aGlzLmJ1aWxkVm9sdW1lTmFtZTtcbiAgICAgICAgY29uc3QgdG1wVm9sdW1lTmFtZSA9IHRoaXMudG1wVm9sdW1lTmFtZTtcbiAgICAgICAgY29uc3QgaW1hZ2VOYW1lID0gdGhpcy5pbWFnZU5hbWUoZXhwYW5kZWQpO1xuICAgICAgICBjb25zdCB3cml0ZVN0cmVhbXMgPSB0aGlzLndyaXRlU3RyZWFtcztcblxuICAgICAgICBpZiAoc2NyaXB0cy5sZW5ndGggPT09IDAgfHwgc2NyaXB0c1swXSA9PSBudWxsKSByZXR1cm4gMDtcblxuICAgICAgICBpZiAobWVzc2FnZS5sZW5ndGggPiAwKSB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7bWFnZW50YUJyaWdodCAke21lc3NhZ2V9fVxcbmApO1xuXG4gICAgICAgIGF3YWl0IGZzLnJlbW92ZShgJHtjd2R9LyR7c3RhdGVEaXJ9L2FydGlmYWN0cy8ke3NhZmVKb2JOYW1lfWApO1xuXG4gICAgICAgIC8vIENvcHkgZ2l0IHRyYWNrZWQgZmlsZXMgdG8gYnVpbGQgZm9sZGVyIGlmIHNoZWxsIGlzb2xhdGlvbiBlbmFibGVkLlxuICAgICAgICBpZiAoIWltYWdlTmFtZSAmJiB0aGlzLmFyZ3Yuc2hlbGxJc29sYXRpb24pIHtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLnJzeW5jVHJhY2tlZEZpbGVzKGN3ZCwgc3RhdGVEaXIsIGAke3NhZmVKb2JOYW1lfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW50ZXJhY3RpdmUpIHtcbiAgICAgICAgICAgIGxldCBpQ21kID0gXCJzZXQgLWVvIHBpcGVmYWlsXFxuXCI7XG4gICAgICAgICAgICBpQ21kICs9IHRoaXMuZ2VuZXJhdGVTY3JpcHRDb21tYW5kcyhzY3JpcHRzKTtcblxuICAgICAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVDcCA9IGV4ZWNhKGlDbWQsIHtcbiAgICAgICAgICAgICAgICBjd2QsXG4gICAgICAgICAgICAgICAgc2hlbGw6IFwiYmFzaFwiLFxuICAgICAgICAgICAgICAgIHN0ZGlvOiBbXCJpbmhlcml0XCIsIFwiaW5oZXJpdFwiLCBcImluaGVyaXRcIl0sXG4gICAgICAgICAgICAgICAgZW52OiB7Li4uZXhwYW5kZWQsIC4uLnByb2Nlc3MuZW52fSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIHZvaWQgaW50ZXJhY3RpdmVDcC5vbihcImV4aXRcIiwgKGNvZGUpID0+IHJlc29sdmUoY29kZSA/PyAwKSk7XG4gICAgICAgICAgICAgICAgdm9pZCBpbnRlcmFjdGl2ZUNwLm9uKFwiZXJyb3JcIiwgKGVycikgPT4gcmVqZWN0KGVycikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlZnJlc2hMb25nUnVubmluZ1NpbGVudFRpbWVvdXQod3JpdGVTdHJlYW1zKTtcblxuICAgICAgICBpZiAoaW1hZ2VOYW1lICYmICF0aGlzLl9jb250YWluZXJJZCkge1xuICAgICAgICAgICAgbGV0IGRvY2tlckNtZCA9IGAke3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlfSBjcmVhdGUgLS1pbnRlcmFjdGl2ZSAke3RoaXMuZ2VuZXJhdGVJbmplY3RTU0hBZ2VudE9wdGlvbnMoKX0gYDtcbiAgICAgICAgICAgIGlmICh0aGlzLmFyZ3YucHJpdmlsZWdlZCkge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIi0tcHJpdmlsZWdlZCBcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuYXJndi5kZXZpY2UpIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tZGV2aWNlPSR7dGhpcy5hcmd2LmRldmljZX0gYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuYXJndi51bGltaXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdWxpbWl0IG5vZmlsZT0ke3RoaXMuYXJndi51bGltaXR9IGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmFyZ3YudW1hc2spIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCItLXVzZXIgMDowIFwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5hcmd2LnVzZXJucyAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdXNlcm5zPSR7dGhpcy5hcmd2LnVzZXJuc30gYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuYXJndi5jb250YWluZXJNYWNBZGRyZXNzKSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLW1hYy1hZGRyZXNzIFwiJHt0aGlzLmFyZ3YuY29udGFpbmVyTWFjQWRkcmVzc31cIiBgO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpbWFnZVVzZXIgPSB0aGlzLmltYWdlVXNlcihleHBhbmRlZCk7XG4gICAgICAgICAgICBpZiAoaW1hZ2VVc2VyKSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLXVzZXIgJHtpbWFnZVVzZXJ9IGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmFyZ3YuY29udGFpbmVyRW11bGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJ1bm5lck5hbWU6IHN0cmluZyA9IHRoaXMuYXJndi5jb250YWluZXJFbXVsYXRlO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFHaXRsYWJSdW5uZXJQcmVzZXRWYWx1ZXMuaW5jbHVkZXMocnVubmVyTmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBnaXRsYWIgcnVubmVyIHRvIGVtdWxhdGUuXCIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IG1lbW9yeUNvbmZpZyA9IEdpdGxhYlJ1bm5lck1lbW9yeVByZXNldFZhbHVlW3J1bm5lck5hbWVdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNwdUNvbmZpZyA9IEdpdGxhYlJ1bm5lckNQVXNQcmVzZXRWYWx1ZVtydW5uZXJOYW1lXTtcblxuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS1tZW1vcnk9JHttZW1vcnlDb25maWd9bSBgO1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS1rZXJuZWwtbWVtb3J5PSR7bWVtb3J5Q29uZmlnfW0gYDtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tY3B1cz0ke2NwdUNvbmZpZ30gYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaG9zdCBhbmQgbm9uZSBuZXR3b3JrcyBoYXZlIHRvIGJlIHNwZWNpZmllZCB1c2luZyAtLW5ldHdvcmssIHNpbmNlIHRoZXkgY2Fubm90IGJlIHVzZWQgd2l0aFxuICAgICAgICAgICAgLy8gYGRvY2tlciBuZXR3b3JrIGNvbm5lY3RgLlxuICAgICAgICAgICAgZm9yIChjb25zdCBuZXR3b3JrIG9mIHRoaXMuYXJndi5uZXR3b3JrKSB7XG4gICAgICAgICAgICAgICAgaWYgKFtcImhvc3RcIiwgXCJub25lXCJdLmluY2x1ZGVzKG5ldHdvcmspKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS1uZXR3b3JrICR7bmV0d29ya30gYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUaGUgZGVmYXVsdCBwb2RtYW4gbmV0d29yayBtb2RlIGlzIG5vdCBgYnJpZGdlYCwgd2hpY2ggbWVhbnMgYSBgcG9kbWFuIG5ldHdvcmsgY29ubmVjdGAgY2FsbCB3aWxsIGZhaWxcbiAgICAgICAgICAgIC8vIHdoZW4gY29ubmVjdGluZyB1c2VyIGRlZmluZWQgbmV0d29ya3MuIFRoZSB3b3JrYXJvdW5kIGlzIHRvIHVzZSBhIHVzZXIgZGVmaW5lZCBuZXR3b3JrIG9uIGNvbnRhaW5lclxuICAgICAgICAgICAgLy8gY3JlYXRpb24uXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jb250YWluZXJzL3BvZG1hbi9pc3N1ZXMvMTk1NzdcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBub3QgY2xhc2ggd2l0aCB0aGUgYGhvc3RgIGFuZCBgbm9uZWAgbmV0d29ya3MgYWJvdmUsIHNpbmNlIHNlcnZpY2UgY3JlYXRpb24gc2hvdWxkIGhhdmVcbiAgICAgICAgICAgIC8vIGZhaWxlZCB3aGVuIHVzaW5nIGBob3N0YCBvciBgbm9uZWAgbmV0d29ya3MuXG4gICAgICAgICAgICBpZiAodGhpcy5fc2VydmljZU5ldHdvcmtJZCkge1xuICAgICAgICAgICAgICAgIC8vIGBidWlsZGAgYWxpYXM6IGh0dHBzOi8vZ2l0bGFiLmNvbS9naXRsYWItb3JnL2dpdGxhYi1ydW5uZXIvLS9pc3N1ZXMvMjcwNjBcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tbmV0d29yayAke3RoaXMuX3NlcnZpY2VOZXR3b3JrSWR9IC0tbmV0d29yay1hbGlhcyBidWlsZCBgO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdm9sdW1lICR7YnVpbGRWb2x1bWVOYW1lfToke3RoaXMuY2lQcm9qZWN0RGlyfSBgO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLXZvbHVtZSAke3RtcFZvbHVtZU5hbWV9OiR7dGhpcy5maWxlVmFyaWFibGVzRGlyfSBgO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLXdvcmtkaXIgJHt0aGlzLmNpUHJvamVjdERpcn0gYDtcblxuICAgICAgICAgICAgZm9yIChjb25zdCB2b2x1bWUgb2YgdGhpcy5hcmd2LnZvbHVtZSkge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS12b2x1bWUgJHt2b2x1bWV9IGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZXh0cmFIb3N0IG9mIHRoaXMuYXJndi5leHRyYUhvc3QpIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tYWRkLWhvc3Q9JHtleHRyYUhvc3R9IGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhleHBhbmRlZCkpIHtcbiAgICAgICAgICAgICAgICAvLyBSZXBsYWNpbmcgYCdgIHdpdGggYCdcXCcnYCB0byBjb3JyZWN0bHkgaGFuZGxlIHNpbmdsZSBxdW90ZXMoaWYgYHZhbGAgY29udGFpbnMgYCdgKSBpbiBzaGVsbCBjb21tYW5kc1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgICAtZSAnJHtrZXl9PSR7dmFsLnRvU3RyaW5nKCkucmVwbGFjZSgvJy9nLCBcIidcXFxcJydcIil9JyBcXFxcXFxuYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuaW1hZ2VFbnRyeXBvaW50KSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLWVudHJ5cG9pbnQgJHtVdGlscy5zYWZlQmFzaFN0cmluZyh0aGlzLmltYWdlRW50cnlwb2ludFswXSl9IGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgJHsoYXdhaXQgdGhpcy5tb3VudENhY2hlQ21kKHdyaXRlU3RyZWFtcywgZXhwYW5kZWQpKS5qb2luKFwiIFwiKX0gYDtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgJHtpbWFnZU5hbWV9IGA7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmltYWdlRW50cnlwb2ludD8ubGVuZ3RoID8/IDAgPiAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbWFnZUVudHJ5cG9pbnQ/LnNsaWNlKDEpLmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAke1V0aWxzLnNhZmVCYXNoU3RyaW5nKGUpfSBgO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJzaCAtYyBcXFwiXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJpZiBbIC14IC91c3IvbG9jYWwvYmluL2Jhc2ggXTsgdGhlblxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhlYyAvdXNyL2xvY2FsL2Jpbi9iYXNoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxpZiBbIC14IC91c3IvYmluL2Jhc2ggXTsgdGhlblxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhlYyAvdXNyL2Jpbi9iYXNoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxpZiBbIC14IC9iaW4vYmFzaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC9iaW4vYmFzaCBcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImVsaWYgWyAteCAvdXNyL2xvY2FsL2Jpbi9zaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC91c3IvbG9jYWwvYmluL3NoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxpZiBbIC14IC91c3IvYmluL3NoIF07IHRoZW5cXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGV4ZWMgL3Vzci9iaW4vc2ggXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJlbGlmIFsgLXggL2Jpbi9zaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC9iaW4vc2ggXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJlbGlmIFsgLXggL2J1c3lib3gvc2ggXTsgdGhlblxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhlYyAvYnVzeWJveC9zaCBcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImVsc2VcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGVjaG8gc2hlbGwgbm90IGZvdW5kXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGl0IDFcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImZpXFxuXFxcIlwiO1xuXG4gICAgICAgICAgICBjb25zdCB7c3Rkb3V0OiBjb250YWluZXJJZH0gPSBhd2FpdCBVdGlscy5iYXNoKGRvY2tlckNtZCwgY3dkKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBuZXR3b3JrIG9mIHRoaXMuYXJndi5uZXR3b3JrKSB7XG4gICAgICAgICAgICAgICAgLy8gU3BlY2lhbCBuZXR3b3JrIG5hbWVzIHRoYXQgZG8gbm90IHdvcmsgd2l0aCBgZG9ja2VyIG5ldHdvcmsgY29ubmVjdGBcbiAgICAgICAgICAgICAgICBpZiAoW1wiaG9zdFwiLCBcIm5vbmVcIl0uaW5jbHVkZXMobmV0d29yaykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJuZXR3b3JrXCIsIFwiY29ubmVjdFwiLCBuZXR3b3JrLCBgJHtjb250YWluZXJJZH1gXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lcklkID0gY29udGFpbmVySWQ7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXJzVG9DbGVhbi5wdXNoKHRoaXMuX2NvbnRhaW5lcklkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuY29weUNhY2hlSW4od3JpdGVTdHJlYW1zLCBleHBhbmRlZCk7XG4gICAgICAgIGF3YWl0IHRoaXMuY29weUFydGlmYWN0c0luKHdyaXRlU3RyZWFtcyk7XG5cbiAgICAgICAgbGV0IGNtZCA9IFwic2V0IC1lbyBwaXBlZmFpbFxcblwiO1xuICAgICAgICBjbWQgKz0gXCJleGVjIDA8IC9kZXYvbnVsbFxcblwiO1xuXG4gICAgICAgIGlmICghaW1hZ2VOYW1lICYmIHRoaXMuYXJndi5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgY21kICs9IGBjZCAke3N0YXRlRGlyfS9idWlsZHMvJHtzYWZlSm9iTmFtZX0vXFxuYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbWFnZU5hbWUpIHtcbiAgICAgICAgICAgIGNtZCArPSBgY2QgJHt0aGlzLmNpUHJvamVjdERpcn0gXFxuYDtcblxuICAgICAgICAgICAgaWYgKGV4cGFuZGVkW1wiQ0lfSk9CX1NUQVRVU1wiXSAhPSBcInJ1bm5pbmdcIikge1xuICAgICAgICAgICAgICAgIC8vIEVuc3VyZXMgdGhlIGVudiBgQ0lfSk9CX1NUQVRVU2AgaXMgcGFzc2VkIHRvIHRoZSBhZnRlcl9zY3JpcHQgY29udGV4dFxuICAgICAgICAgICAgICAgIGNtZCArPSBgZXhwb3J0IENJX0pPQl9TVEFUVVM9JHtleHBhbmRlZFtcIkNJX0pPQl9TVEFUVVNcIl19XFxuYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjbWQgKz0gdGhpcy5nZW5lcmF0ZVNjcmlwdENvbW1hbmRzKHNjcmlwdHMpO1xuXG4gICAgICAgIGNtZCArPSBcImV4aXQgMFxcblwiO1xuXG4gICAgICAgIGNvbnN0IGpvYlNjcmlwdEZpbGUgPSBgJHtjd2R9LyR7c3RhdGVEaXJ9L3NjcmlwdHMvJHtzYWZlSm9iTmFtZX1fJHt0aGlzLmpvYklkfWA7XG4gICAgICAgIGF3YWl0IGZzLm91dHB1dEZpbGUoam9iU2NyaXB0RmlsZSwgY21kLCBcInV0Zi04XCIpO1xuICAgICAgICBhd2FpdCBmcy5jaG1vZChqb2JTY3JpcHRGaWxlLCBcIjA3NTVcIik7XG4gICAgICAgIHRoaXMuX2ZpbGVzVG9SbS5wdXNoKGpvYlNjcmlwdEZpbGUpO1xuXG4gICAgICAgIGlmIChpbWFnZU5hbWUpIHtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJjcFwiLCBgJHtzdGF0ZURpcn0vc2NyaXB0cy8ke3NhZmVKb2JOYW1lfV8ke3RoaXMuam9iSWR9YCwgYCR7dGhpcy5fY29udGFpbmVySWR9Oi9nY2wtY21kYF0sIGN3ZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjcCA9IGV4ZWNhKHRoaXMuX2NvbnRhaW5lcklkID8gYCR7dGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGV9IHN0YXJ0IC0tYXR0YWNoIC1pICR7dGhpcy5fY29udGFpbmVySWR9YCA6IFwiYmFzaFwiLCB7XG4gICAgICAgICAgICBjd2QsXG4gICAgICAgICAgICBzaGVsbDogXCJiYXNoXCIsXG4gICAgICAgICAgICBlbnY6IGltYWdlTmFtZSA/IHByb2Nlc3MuZW52IDogZXhwYW5kZWQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IG91dEZ1bmMgPSAobGluZTogc3RyaW5nLCBzdHJlYW06ICh0eHQ6IHN0cmluZykgPT4gdm9pZCwgY29sb3JpemU6IChzdHI6IHN0cmluZykgPT4gc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hMb25nUnVubmluZ1NpbGVudFRpbWVvdXQod3JpdGVTdHJlYW1zKTtcbiAgICAgICAgICAgIHN0cmVhbShgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IGApO1xuICAgICAgICAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aChHQ0xfU0hFTExfUFJPTVBUX1BMQUNFSE9MREVSKSkge1xuICAgICAgICAgICAgICAgIC8vIHJlcGxhY2UgdGhlIEdDTF9TSEVMTF9QUk9NUFRfUExBQ0VIT0xERVIgd2l0aCBgJGAgYW5kIG1ha2UgdGhlIFNIRUxMX1BST01QVCBsaW5lIGdyZWVuIGNvbG9yXG4gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc2xpY2UoR0NMX1NIRUxMX1BST01QVF9QTEFDRUhPTERFUi5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGxpbmUgPSBjaGFsa2B7Z3JlZW4gJCR7bGluZX19YDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtKGAke2NvbG9yaXplKFwiPlwiKX0gYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdHJlYW0oYCR7bGluZX1cXG5gKTtcbiAgICAgICAgICAgIGZzLmFwcGVuZEZpbGVTeW5jKG91dHB1dEZpbGVzUGF0aCwgYCR7bGluZX1cXG5gKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBxdWlldCA9IHRoaXMuYXJndi5xdWlldDtcblxuICAgICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8bnVtYmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXF1aWV0KSB7XG4gICAgICAgICAgICAgICAgY3Auc3Rkb3V0Py5waXBlKHNwbGl0MigpKS5vbihcImRhdGFcIiwgKGU6IHN0cmluZykgPT4gb3V0RnVuYyhlLCB3cml0ZVN0cmVhbXMuc3Rkb3V0LmJpbmQod3JpdGVTdHJlYW1zKSwgKHMpID0+IGNoYWxrYHtncmVlbkJyaWdodCAke3N9fWApKTtcbiAgICAgICAgICAgICAgICBjcC5zdGRlcnI/LnBpcGUoc3BsaXQyKCkpLm9uKFwiZGF0YVwiLCAoZTogc3RyaW5nKSA9PiBvdXRGdW5jKGUsIHdyaXRlU3RyZWFtcy5zdGRlcnIuYmluZCh3cml0ZVN0cmVhbXMpLCAocykgPT4gY2hhbGtge3JlZEJyaWdodCAke3N9fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZvaWQgY3Aub24oXCJleGl0XCIsIChjb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2xvbmdSdW5uaW5nU2lsZW50VGltZW91dCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoY29kZSA/PyAwKTt9LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHZvaWQgY3Aub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2xvbmdSdW5uaW5nU2lsZW50VGltZW91dCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChpbWFnZU5hbWUpIHtcbiAgICAgICAgICAgICAgICBjcC5zdGRpbj8uZW5kKFwiLiAvZ2NsLWNtZFwiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3Auc3RkaW4/LmVuZChgLi8ke3N0YXRlRGlyfS9zY3JpcHRzLyR7c2FmZUpvYk5hbWV9XyR7dGhpcy5qb2JJZH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbWFnZU5hbWUgKHZhcnM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0ge30pOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgaWYgKHRoaXMuYXJndi5mb3JjZVNoZWxsRXhlY3V0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5qb2JEYXRhW1wiaW1hZ2VcIl07XG4gICAgICAgIGlmICghaW1hZ2UpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFyZ3Yuc2hlbGxFeGVjdXRvck5vSW1hZ2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLmdpdGxhYi5jb20vZWUvY2kvcnVubmVycy9ob3N0ZWRfcnVubmVycy9saW51eC5odG1sI2NvbnRhaW5lci1pbWFnZXNcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcmd2LmRlZmF1bHRJbWFnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBleHBhbmRlZCA9IFV0aWxzLmV4cGFuZFZhcmlhYmxlcyh2YXJzKTtcbiAgICAgICAgY29uc3QgaW1hZ2VOYW1lID0gVXRpbHMuZXhwYW5kVGV4dChpbWFnZS5uYW1lLCBleHBhbmRlZCk7XG4gICAgICAgIHJldHVybiBpbWFnZU5hbWUuaW5jbHVkZXMoXCI6XCIpID8gaW1hZ2VOYW1lIDogYCR7aW1hZ2VOYW1lfTpsYXRlc3RgO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW1hZ2VVc2VyICh2YXJzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSA9IHt9KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5qb2JEYXRhW1wiaW1hZ2VcIl07XG4gICAgICAgIGlmICghaW1hZ2UpIHJldHVybiBudWxsO1xuICAgICAgICBpZiAoIWltYWdlW1wiZG9ja2VyXCJdKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIFV0aWxzLmV4cGFuZFRleHQoaW1hZ2VbXCJkb2NrZXJcIl1bXCJ1c2VyXCJdLCB2YXJzKTtcbiAgICB9XG5cbiAgICBnZXQgaW1hZ2VFbnRyeXBvaW50ICgpOiBzdHJpbmdbXSB8IG51bGwge1xuICAgICAgICBjb25zdCBpbWFnZSA9IHRoaXMuam9iRGF0YVtcImltYWdlXCJdO1xuXG4gICAgICAgIGlmICghaW1hZ2U/LmVudHJ5cG9pbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGFzc2VydChBcnJheS5pc0FycmF5KGltYWdlLmVudHJ5cG9pbnQpLCBcImltYWdlOmVudHJ5cG9pbnQgbXVzdCBiZSBhbiBhcnJheVwiKTtcbiAgICAgICAgcmV0dXJuIGltYWdlLmVudHJ5cG9pbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZUNpRGVwZW5kZW5jeVByb3h5U2VydmVyQXV0aGVudGljYXRpb24gKGltYWdlTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IENJX0RFUEVOREVOQ1lfUFJPWFlfU0VSVkVSID0gdGhpcy5fdmFyaWFibGVzW1wiQ0lfREVQRU5ERU5DWV9QUk9YWV9TRVJWRVJcIl07XG4gICAgICAgIGlmICghaW1hZ2VOYW1lLnN0YXJ0c1dpdGgoQ0lfREVQRU5ERU5DWV9QUk9YWV9TRVJWRVIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJsb2dpblwiLCBDSV9ERVBFTkRFTkNZX1BST1hZX1NFUlZFUl0pO1xuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGVyck1zZyA9IGBQbGVhc2UgYXV0aGVudGljYXRlIHRvIHRoZSBEZXBlbmRlbmN5IFByb3h5ICgke0NJX0RFUEVOREVOQ1lfUFJPWFlfU0VSVkVSfSkgaHR0cHM6Ly9kb2NzLmdpdGxhYi5jb20vZWUvdXNlci9wYWNrYWdlcy9kZXBlbmRlbmN5X3Byb3h5LyNhdXRoZW50aWNhdGUtd2l0aC10aGUtZGVwZW5kZW5jeS1wcm94eWA7XG4gICAgICAgICAgICBpZiAodGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUgPT0gXCJkb2NrZXJcIikge1xuICAgICAgICAgICAgICAgIGFzc2VydCghZS5zdGRlcnIuaW5jbHVkZXMoXCJDYW5ub3QgcGVyZm9ybSBhbiBpbnRlcmFjdGl2ZSBsb2dpblwiKSwgZXJyTXNnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUgPT0gXCJwb2RtYW5cIikge1xuICAgICAgICAgICAgICAgIGFzc2VydCghZS5zdGRlcnIuaW5jbHVkZXMoXCJVc2VybmFtZTogRXJyb3I6IGdldHRpbmcgdXNlcm5hbWUgYW5kIHBhc3N3b3JkOiByZWFkaW5nIHVzZXJuYW1lOiBFT0ZcIiksIGVyck1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBwdWxsSW1hZ2UgKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBpbWFnZVRvUHVsbDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHB1bGxQb2xpY3kgPSB0aGlzLmFyZ3YucHVsbFBvbGljeTtcbiAgICAgICAgY29uc3QgYWN0dWFsUHVsbCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudmFsaWRhdGVDaURlcGVuZGVuY3lQcm94eVNlcnZlckF1dGhlbnRpY2F0aW9uKGltYWdlVG9QdWxsKTtcbiAgICAgICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcInB1bGxcIiwgaW1hZ2VUb1B1bGxdKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IHB1bGxlZH0gJHtpbWFnZVRvUHVsbH0gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHB1bGxQb2xpY3kgPT09IFwiYWx3YXlzXCIpIHtcbiAgICAgICAgICAgIGF3YWl0IGFjdHVhbFB1bGwoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcImltYWdlXCIsIFwiaW5zcGVjdFwiLCBpbWFnZVRvUHVsbF0pO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIGF3YWl0IGFjdHVhbFB1bGwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgaW5pdFByb2R1Y2VyUmVwb3J0c0RvdGVudlZhcmlhYmxlcyAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIGV4cGFuZGVkOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAgICAgICBjb25zdCBjd2QgPSB0aGlzLmFyZ3YuY3dkO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IHRoaXMuYXJndi5zdGF0ZURpcjtcbiAgICAgICAgY29uc3QgcHJvZHVjZXJzID0gdGhpcy5wcm9kdWNlcnM7XG4gICAgICAgIGxldCBwcm9kdWNlclJlcG9ydHNFbnZzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgcHJvZHVjZXIgb2YgcHJvZHVjZXJzID8/IFtdKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9kdWNlckRvdGVudiA9IFV0aWxzLmV4cGFuZFRleHQocHJvZHVjZXIuZG90ZW52LCBleHBhbmRlZCk7XG4gICAgICAgICAgICBpZiAocHJvZHVjZXJEb3RlbnYgPT09IG51bGwpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCBzYWZlUHJvZHVjZXJOYW1lID0gVXRpbHMuc2FmZURvY2tlclN0cmluZyhwcm9kdWNlci5uYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGRvdGVudkZvbGRlciA9IGAke2N3ZH0vJHtzdGF0ZURpcn0vYXJ0aWZhY3RzLyR7c2FmZVByb2R1Y2VyTmFtZX0vLmdpdGxhYi1jaS1yZXBvcnRzL2RvdGVudi9gO1xuICAgICAgICAgICAgaWYgKGF3YWl0IGZzLnBhdGhFeGlzdHMoZG90ZW52Rm9sZGVyKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvdGVudkZpbGVzID0gKGF3YWl0IFV0aWxzLnNwYXduKFtcImZpbmRcIiwgXCIuXCIsIFwiLXR5cGVcIiwgXCJmXCJdLCBkb3RlbnZGb2xkZXIpKS5zdGRvdXQuc3BsaXQoXCJcXG5cIik7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBkb3RlbnZGaWxlIG9mIGRvdGVudkZpbGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkb3RlbnZGaWxlID09IFwiXCIpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9kdWNlclJlcG9ydEVudiA9IGRvdGVudi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShgJHtkb3RlbnZGb2xkZXJ9LyR7ZG90ZW52RmlsZX1gKSk7XG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y2VyUmVwb3J0c0VudnMgPSB7Li4ucHJvZHVjZXJSZXBvcnRzRW52cywgLi4ucHJvZHVjZXJSZXBvcnRFbnZ9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge3llbGxvdyByZXBvcnRzLmRvdGVudiBwcm9kdWNlZCBieSAnJHtwcm9kdWNlci5uYW1lfScgY291bGQgbm90IGJlIGZvdW5kfVxcbmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb2R1Y2VyUmVwb3J0c0VudnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjb3B5Q2FjaGVJbiAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIGV4cGFuZGVkOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAgICAgICBpZiAodGhpcy5hcmd2Lm1vdW50Q2FjaGUgJiYgdGhpcy5pbWFnZU5hbWUoZXhwYW5kZWQpKSByZXR1cm47XG4gICAgICAgIGlmICgoIXRoaXMuaW1hZ2VOYW1lKGV4cGFuZGVkKSAmJiAhdGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uKSB8fCB0aGlzLmNhY2hlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGN3ZCA9IHRoaXMuYXJndi5jd2Q7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gdGhpcy5hcmd2LnN0YXRlRGlyO1xuXG4gICAgICAgIGZvciAoY29uc3QgW2luZGV4LCBjXSBvZiB0aGlzLmNhY2hlLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgaWYgKCFbXCJwdWxsXCIsIFwicHVsbC1wdXNoXCJdLmluY2x1ZGVzKGMucG9saWN5KSkgcmV0dXJuO1xuXG4gICAgICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlTmFtZSA9IGF3YWl0IHRoaXMuZ2V0VW5pcXVlQ2FjaGVOYW1lKGN3ZCwgZXhwYW5kZWQsIGluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlRm9sZGVyID0gYCR7Y3dkfS8ke3N0YXRlRGlyfS9jYWNoZS8ke2NhY2hlTmFtZX1gO1xuICAgICAgICAgICAgaWYgKCFhd2FpdCBmcy5wYXRoRXhpc3RzKGNhY2hlRm9sZGVyKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhd2FpdCBNdXRleC5leGNsdXNpdmUoY2FjaGVOYW1lLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jb3B5SW4oY2FjaGVGb2xkZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBpbXBvcnRlZCBjYWNoZSAnJHtjYWNoZU5hbWV9J30gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjb3B5QXJ0aWZhY3RzSW4gKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zKSB7XG4gICAgICAgIGlmICgoIXRoaXMuaW1hZ2VOYW1lKHRoaXMuX3ZhcmlhYmxlcykgJiYgIXRoaXMuYXJndi5zaGVsbElzb2xhdGlvbikgfHwgKHRoaXMucHJvZHVjZXJzID8/IFtdKS5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgICAgICBjb25zdCBjd2QgPSB0aGlzLmFyZ3YuY3dkO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IHRoaXMuYXJndi5zdGF0ZURpcjtcbiAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcHJvZHVjZXIgb2YgdGhpcy5wcm9kdWNlcnMgPz8gW10pIHtcbiAgICAgICAgICAgIGNvbnN0IHByb2R1Y2VyU2FmZU5hbWUgPSBVdGlscy5zYWZlRG9ja2VyU3RyaW5nKHByb2R1Y2VyLm5hbWUpO1xuICAgICAgICAgICAgY29uc3QgYXJ0aWZhY3RGb2xkZXIgPSBgJHtjd2R9LyR7c3RhdGVEaXJ9L2FydGlmYWN0cy8ke3Byb2R1Y2VyU2FmZU5hbWV9YDtcbiAgICAgICAgICAgIGlmICghYXdhaXQgZnMucGF0aEV4aXN0cyhhcnRpZmFjdEZvbGRlcikpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5ta2RpcnAoYXJ0aWZhY3RGb2xkZXIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByZWFkZGlyID0gYXdhaXQgZnMucmVhZGRpcihhcnRpZmFjdEZvbGRlcik7XG4gICAgICAgICAgICBpZiAocmVhZGRpci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7eWVsbG93IGFydGlmYWN0cyBmcm9tIHtibHVlQnJpZ2h0ICR7cHJvZHVjZXJTYWZlTmFtZX19IHdhcyBlbXB0eX1cXG5gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLmNvcHlJbihhcnRpZmFjdEZvbGRlcikpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICAgICAgY29uc3QgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBpbXBvcnRlZCBhcnRpZmFjdHN9IGluIHttYWdlbnRhICR7cHJldHR5SHJ0aW1lKGVuZFRpbWUpfX1cXG5gKTtcbiAgICB9XG5cbiAgICBjb3B5SW4gKHNvdXJjZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHNhZmVKb2JOYW1lID0gdGhpcy5zYWZlSm9iTmFtZTtcbiAgICAgICAgaWYgKCF0aGlzLmltYWdlTmFtZSh0aGlzLl92YXJpYWJsZXMpICYmIHRoaXMuYXJndi5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIFV0aWxzLnNwYXduKFtcInJzeW5jXCIsIFwiLWFcIiwgYCR7c291cmNlfS8uYCwgYCR7dGhpcy5hcmd2LmN3ZH0vJHt0aGlzLmFyZ3Yuc3RhdGVEaXJ9L2J1aWxkcy8ke3NhZmVKb2JOYW1lfWBdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcImNwXCIsIGAke3NvdXJjZX0vLmAsIGAke3RoaXMuX2NvbnRhaW5lcklkfToke3RoaXMuY2lQcm9qZWN0RGlyfWBdKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNvcHlDYWNoZU91dCAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIGV4cGFuZGVkOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAgICAgICBpZiAodGhpcy5hcmd2Lm1vdW50Q2FjaGUgJiYgdGhpcy5pbWFnZU5hbWUoZXhwYW5kZWQpKSByZXR1cm47XG4gICAgICAgIGlmICgoIXRoaXMuaW1hZ2VOYW1lKGV4cGFuZGVkKSAmJiAhdGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uKSB8fCB0aGlzLmNhY2hlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGN3ZCA9IHRoaXMuYXJndi5jd2Q7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gdGhpcy5hcmd2LnN0YXRlRGlyO1xuICAgICAgICBjb25zdCBjYWNoZVBhdGggPSB0aGlzLmltYWdlTmFtZShleHBhbmRlZCkgPyBcIi9jYWNoZVwiIDogXCIuLi8uLi9jYWNoZVwiO1xuXG4gICAgICAgIGxldCB0aW1lLCBlbmRUaW1lO1xuICAgICAgICBmb3IgKGNvbnN0IFtpbmRleCwgY10gb2YgdGhpcy5jYWNoZS5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGlmICghW1wicHVzaFwiLCBcInB1bGwtcHVzaFwiXS5pbmNsdWRlcyhjLnBvbGljeSkpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChcIm9uX3N1Y2Nlc3NcIiA9PT0gYy53aGVuICYmIHRoaXMuam9iU3RhdHVzICE9PSBcInN1Y2Nlc3NcIikgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKFwib25fZmFpbHVyZVwiID09PSBjLndoZW4gJiYgdGhpcy5qb2JTdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBjYWNoZU5hbWUgPSBhd2FpdCB0aGlzLmdldFVuaXF1ZUNhY2hlTmFtZShjd2QsIGV4cGFuZGVkLCBpbmRleCk7XG5cbiAgICAgICAgICAgIGxldCBwYXRocyA9IFwiXCI7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhdGggb2YgYy5wYXRocykge1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNTdWJwYXRoKHBhdGgsIHRoaXMuYXJndi5jd2QsIHRoaXMuYXJndi5jd2QpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIHBhdGhzICs9IFwiIFwiICsgVXRpbHMuZXhwYW5kVGV4dChwYXRoLCBleHBhbmRlZCkucmVwbGFjZShgJHtleHBhbmRlZC5DSV9QUk9KRUNUX0RJUn0vYCwgXCJcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgbGV0IGNtZCA9IFwic2hvcHQgLXMgZ2xvYnN0YXIgbnVsbGdsb2IgZG90Z2xvYlxcblwiO1xuICAgICAgICAgICAgY21kICs9IGBta2RpciAtcCAke1V0aWxzLnNhZmVCYXNoU3RyaW5nKGNhY2hlUGF0aCArIFwiL1wiICsgY2FjaGVOYW1lKX1cXG5gO1xuICAgICAgICAgICAgY21kICs9IGByc3luYyAtUmEgJHtwYXRoc30gJHtVdGlscy5zYWZlQmFzaFN0cmluZyhjYWNoZVBhdGggKyBcIi9cIiArIGNhY2hlTmFtZSArIFwiLy5cIil9IHx8IHRydWVcXG5gO1xuXG4gICAgICAgICAgICBhd2FpdCBNdXRleC5leGNsdXNpdmUoY2FjaGVOYW1lLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jb3B5T3V0KGNtZCwgc3RhdGVEaXIsIFwiY2FjaGVcIiwgW10pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgX19wYXRoIG9mIGMucGF0aHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBfcGF0aCA9IFV0aWxzLmV4cGFuZFRleHQoX19wYXRoLCBleHBhbmRlZCk7XG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc1N1YnBhdGgoX3BhdGgsIHRoaXMuYXJndi5jd2QsIHRoaXMuYXJndi5jd2QpKSB7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtge3llbGxvdyBXQVJOSU5HOiBwcm9jZXNzUGF0aDogYXJ0aWZhY3QgcGF0aCBpcyBub3QgYSBzdWJwYXRoIG9mIHByb2plY3QgZGlyZWN0b3J5OiAke19wYXRofX1cXG5gKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IHBhdGggPSBfcGF0aDtcbiAgICAgICAgICAgICAgICBpZiAoZ2xvYmJ5Lmhhc01hZ2ljKHBhdGgpICYmICFwYXRoLmVuZHNXaXRoKFwiKlwiKSkge1xuICAgICAgICAgICAgICAgICAgICBwYXRoID0gYCR7cGF0aH0vKipgO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBudW1PZkZpbGVzID0gZ2xvYmJ5LnN5bmMocGF0aCwge1xuICAgICAgICAgICAgICAgICAgICBkb3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG9ubHlGaWxlczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGN3ZDogYCR7dGhpcy5hcmd2LmN3ZH0vJHtzdGF0ZURpcn0vY2FjaGUvJHtjYWNoZU5hbWV9YCxcbiAgICAgICAgICAgICAgICB9KS5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICBpZiAobnVtT2ZGaWxlcyA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtge3llbGxvdyBXQVJOSU5HOiAke3BhdGh9OiBubyBtYXRjaGluZyBmaWxlcy4gRW5zdXJlIHRoYXQgdGhlIGFydGlmYWN0IHBhdGggaXMgcmVsYXRpdmUgdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5fVxcbmApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIWdsb2JieS5oYXNNYWdpYyhwYXRoKSkgbnVtT2ZGaWxlcysrOyAvLyBhZGQgb25lIGJlY2F1c2UgdGhlIHBhdHRlcm4gaXRzZWxmIGlzIGEgZm9sZGVyXG5cbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGAke19wYXRofTogZm91bmQgJHtudW1PZkZpbGVzfSBhcnRpZmFjdCBmaWxlcyBhbmQgZGlyZWN0b3JpZXNcXG5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IGNhY2hlIGNyZWF0ZWQgaW4gJyR7c3RhdGVEaXJ9L2NhY2hlLyR7Y2FjaGVOYW1lfSd9IGluIHttYWdlbnRhICR7cHJldHR5SHJ0aW1lKGVuZFRpbWUpfX1cXG5gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29weUFydGlmYWN0c091dCAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIGV4cGFuZGVkOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAgICAgICAvLyBUT0RPOiB1cGRhdGUgdGhlIGNvbmRpdGlvbiB0byBzdXBwb3J0IHdoZW46b25fc3VjY2VzcyAvIHdoZW46b25fZmFpbHVyZVxuICAgICAgICBpZiAodGhpcy5qb2JTdGF0dXMgIT09IFwic3VjY2Vzc1wiICYmIHRoaXMuYXJ0aWZhY3RzPy53aGVuICE9PSBcImFsd2F5c1wiKSByZXR1cm47XG4gICAgICAgIGlmICghdGhpcy5hcnRpZmFjdHMpIHJldHVybjtcbiAgICAgICAgaWYgKCh0aGlzLmFydGlmYWN0cy5wYXRocz8ubGVuZ3RoID8/IDApID09PSAwICYmIHRoaXMuYXJ0aWZhY3RzLnJlcG9ydHM/LmRvdGVudiA9PSBudWxsKSByZXR1cm47XG5cbiAgICAgICAgY29uc3Qgc2FmZUpvYk5hbWUgPSB0aGlzLnNhZmVKb2JOYW1lO1xuICAgICAgICBjb25zdCBjd2QgPSB0aGlzLmFyZ3YuY3dkO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IHRoaXMuYXJndi5zdGF0ZURpcjtcbiAgICAgICAgbGV0IGFydGlmYWN0c1BhdGg6IHN0cmluZztcblxuICAgICAgICBpZiAoIXRoaXMuYXJndi5zaGVsbElzb2xhdGlvbiAmJiAhdGhpcy5pbWFnZU5hbWUoZXhwYW5kZWQpKSB7XG4gICAgICAgICAgICBhcnRpZmFjdHNQYXRoID0gYCR7c3RhdGVEaXJ9L2FydGlmYWN0c2A7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pbWFnZU5hbWUoZXhwYW5kZWQpKSB7XG4gICAgICAgICAgICBhcnRpZmFjdHNQYXRoID0gXCIvYXJ0aWZhY3RzXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcnRpZmFjdHNQYXRoID0gXCIuLi8uLi9hcnRpZmFjdHNcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0aW1lLCBlbmRUaW1lO1xuICAgICAgICBsZXQgY3BDbWQgPSBcInNob3B0IC1zIGdsb2JzdGFyIG51bGxnbG9iIGRvdGdsb2JcXG5cIjtcbiAgICAgICAgY3BDbWQgKz0gYG1rZGlyIC1wICR7YXJ0aWZhY3RzUGF0aH0vJHtzYWZlSm9iTmFtZX1cXG5gO1xuICAgICAgICBjcENtZCArPSBcInJzeW5jIC0tZXhjbHVkZSAnLmdpdGxhYi1jaS1sb2NhbC8qKicgLVJhIFwiO1xuICAgICAgICBmb3IgKGNvbnN0IGFydGlmYWN0RXhjbHVkZVBhdGggb2YgdGhpcy5hcnRpZmFjdHM/LmV4Y2x1ZGUgPz8gW10pIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkUGF0aCA9IFV0aWxzLmV4cGFuZFRleHQoYXJ0aWZhY3RFeGNsdWRlUGF0aCwgZXhwYW5kZWQpLnJlcGxhY2UoYCR7ZXhwYW5kZWQuQ0lfUFJPSkVDVF9ESVJ9L2AsIFwiXCIpO1xuICAgICAgICAgICAgY3BDbWQgKz0gYC0tZXhjbHVkZSAnJHtleHBhbmRlZFBhdGh9JyBgO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgYXJ0aWZhY3RQYXRoIG9mIHRoaXMuYXJ0aWZhY3RzPy5wYXRocyA/PyBbXSkge1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWRQYXRoID0gVXRpbHMuZXhwYW5kVGV4dChhcnRpZmFjdFBhdGgsIGV4cGFuZGVkKS5yZXBsYWNlKGAke2V4cGFuZGVkLkNJX1BST0pFQ1RfRElSfS9gLCBcIlwiKTtcbiAgICAgICAgICAgIGNwQ21kICs9IGAke2V4cGFuZGVkUGF0aH0gYDtcbiAgICAgICAgfVxuICAgICAgICBjcENtZCArPSBgJHthcnRpZmFjdHNQYXRofS8ke3NhZmVKb2JOYW1lfS8uIHx8IHRydWVcXG5gO1xuICAgICAgICBjb25zdCByZXBvcnREb3RlbnYgPSBVdGlscy5leHBhbmRUZXh0KHRoaXMuYXJ0aWZhY3RzLnJlcG9ydHM/LmRvdGVudiA/PyBudWxsLCBleHBhbmRlZCk7XG4gICAgICAgIGNvbnN0IHJlcG9ydERvdGVudnM6IHN0cmluZ1tdIHwgbnVsbCA9ICh0eXBlb2YgcmVwb3J0RG90ZW52ID09PSBcInN0cmluZ1wiKSA/IC8vIG5vcm1hbGl6ZSB0byBzdHJpbmdbXSBmb3IgZWFzaWVyIGhhbmRsaW5nXG4gICAgICAgICAgICBbcmVwb3J0RG90ZW52XSA6XG4gICAgICAgICAgICByZXBvcnREb3RlbnY7XG4gICAgICAgIGlmIChyZXBvcnREb3RlbnZzICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJlcG9ydERvdGVudnMuZm9yRWFjaCgocmVwb3J0RG90ZW52KSA9PiB7XG4gICAgICAgICAgICAgICAgY3BDbWQgKz0gYG1rZGlyIC1wICR7YXJ0aWZhY3RzUGF0aH0vJHtzYWZlSm9iTmFtZX0vLmdpdGxhYi1jaS1yZXBvcnRzL2RvdGVudlxcbmA7XG4gICAgICAgICAgICAgICAgY3BDbWQgKz0gYGlmIFsgLWYgJHtyZXBvcnREb3RlbnZ9IF07IHRoZW5cXG5gO1xuICAgICAgICAgICAgICAgIGNwQ21kICs9IGAgIHJzeW5jIC1SYSAke3JlcG9ydERvdGVudn0gJHthcnRpZmFjdHNQYXRofS8ke3NhZmVKb2JOYW1lfS8uZ2l0bGFiLWNpLXJlcG9ydHMvZG90ZW52Ly5cXG5gO1xuICAgICAgICAgICAgICAgIGNwQ21kICs9IFwiZmlcXG5cIjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgIGNvbnN0IGRvY2tlckNtZEV4dHJhcyA9IHRoaXMuYXJndi5tb3VudENhY2hlID8gYXdhaXQgdGhpcy5tb3VudENhY2hlQ21kKHdyaXRlU3RyZWFtcywgZXhwYW5kZWQpIDogW107XG4gICAgICAgIGF3YWl0IHRoaXMuY29weU91dChjcENtZCwgc3RhdGVEaXIsIFwiYXJ0aWZhY3RzXCIsIGRvY2tlckNtZEV4dHJhcyk7XG4gICAgICAgIGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHJlcG9ydERvdGVudiBvZiByZXBvcnREb3RlbnZzID8/IFtdKSB7XG4gICAgICAgICAgICBpZiAoYXdhaXQgZnMucGF0aEV4aXN0cyhgJHtjd2R9LyR7c3RhdGVEaXJ9L2FydGlmYWN0cy8ke3NhZmVKb2JOYW1lfS8uZ2l0bGFiLWNpLXJlcG9ydHMvZG90ZW52LyR7cmVwb3J0RG90ZW52fWApKSBjb250aW51ZTtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHt5ZWxsb3cgYXJ0aWZhY3QgcmVwb3J0cyBkb3RlbnYgJyR7cmVwb3J0RG90ZW52fScgY291bGQgbm90IGJlIGZvdW5kfVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVhZGRpciA9IGF3YWl0IGZzLnJlYWRkaXIoYCR7Y3dkfS8ke3N0YXRlRGlyfS9hcnRpZmFjdHMvJHtzYWZlSm9iTmFtZX1gKTtcbiAgICAgICAgaWYgKHJlYWRkaXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7eWVsbG93ICEhIG5vIGFydGlmYWN0cyB3YXMgY29waWVkICEhfVxcbmApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgZXhwb3J0ZWQgYXJ0aWZhY3RzfSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hcnRpZmFjdHNUb1NvdXJjZSAmJiAodGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uIHx8IHRoaXMuaW1hZ2VOYW1lKGV4cGFuZGVkKSkpIHtcbiAgICAgICAgICAgIHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW1wicnN5bmNcIiwgXCItLWV4Y2x1ZGU9Ly5naXRsYWItY2ktcmVwb3J0cy9cIiwgXCItYVwiLCBgJHtjd2R9LyR7c3RhdGVEaXJ9L2FydGlmYWN0cy8ke3NhZmVKb2JOYW1lfS8uYCwgY3dkXSk7XG4gICAgICAgICAgICBpZiAocmVwb3J0RG90ZW52ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbXCJyc3luY1wiLCBcIi1hXCIsIGAke2N3ZH0vJHtzdGF0ZURpcn0vYXJ0aWZhY3RzLyR7c2FmZUpvYk5hbWV9Ly5naXRsYWItY2ktcmVwb3J0cy9kb3RlbnYvLmAsIGN3ZF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgY29waWVkIGFydGlmYWN0cyB0byBjd2R9IGluIHttYWdlbnRhICR7cHJldHR5SHJ0aW1lKGVuZFRpbWUpfX1cXG5gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29weU91dCAoY21kOiBzdHJpbmcsIHN0YXRlRGlyOiBzdHJpbmcsIHR5cGU6IFwiYXJ0aWZhY3RzXCIgfCBcImNhY2hlXCIsIGRvY2tlckNtZEV4dHJhczogc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3Qgc2FmZUpvYk5hbWUgPSB0aGlzLnNhZmVKb2JOYW1lO1xuICAgICAgICBjb25zdCBidWlsZFZvbHVtZU5hbWUgPSB0aGlzLmJ1aWxkVm9sdW1lTmFtZTtcbiAgICAgICAgY29uc3QgY3dkID0gdGhpcy5hcmd2LmN3ZDtcbiAgICAgICAgY29uc3QgaGVscGVySW1hZ2VOYW1lID0gdGhpcy5hcmd2LmhlbHBlckltYWdlO1xuXG4gICAgICAgIGF3YWl0IGZzLm1rZGlycChgJHtjd2R9LyR7c3RhdGVEaXJ9LyR7dHlwZX1gKTtcblxuICAgICAgICBpZiAodGhpcy5pbWFnZU5hbWUodGhpcy5fdmFyaWFibGVzKSkge1xuICAgICAgICAgICAgY29uc3Qge3N0ZG91dDogY29udGFpbmVySWR9ID0gYXdhaXQgVXRpbHMuYmFzaChgJHt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZX0gY3JlYXRlIC1pICR7ZG9ja2VyQ21kRXh0cmFzLmpvaW4oXCIgXCIpfSAtdiAke2J1aWxkVm9sdW1lTmFtZX06JHt0aGlzLmNpUHJvamVjdERpcn0gLXcgJHt0aGlzLmNpUHJvamVjdERpcn0gJHtoZWxwZXJJbWFnZU5hbWV9IGJhc2ggLWMgXCIke2NtZC5yZXBsYWNlKC9cIi9nLCBcIlxcXFxcXFwiXCIpfVwiYCwgY3dkKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lcnNUb0NsZWFuLnB1c2goY29udGFpbmVySWQpO1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcInN0YXJ0XCIsIGNvbnRhaW5lcklkLCBcIi0tYXR0YWNoXCJdKTtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJjcFwiLCBgJHtjb250YWluZXJJZH06LyR7dHlwZX0vLmAsIGAke3N0YXRlRGlyfS8ke3R5cGV9Ly5gXSwgY3dkKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFyZ3Yuc2hlbGxJc29sYXRpb24pIHtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLmJhc2goYGJhc2ggLWVvIHBpcGVmYWlsIC1jIFwiJHtjbWR9XCJgLCBgJHtjd2R9LyR7c3RhdGVEaXJ9L2J1aWxkcy8ke3NhZmVKb2JOYW1lfWApO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmFyZ3Yuc2hlbGxJc29sYXRpb24pIHtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLmJhc2goYGJhc2ggLWVvIHBpcGVmYWlsIC1jIFwiJHtjbWR9XCJgLCBgJHtjd2R9YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZnJlc2hMb25nUnVubmluZ1NpbGVudFRpbWVvdXQgKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9sb25nUnVubmluZ1NpbGVudFRpbWVvdXQpO1xuICAgICAgICB0aGlzLl9sb25nUnVubmluZ1NpbGVudFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHtncmV5ID4gc3RpbGwgcnVubmluZy4uLn1cXG5gKTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuICAgICAgICB9LCAxMDAwMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGaW5pc2hlZFN0cmluZyAoKSB7XG4gICAgICAgIHJldHVybiBjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgZmluaXNoZWR9IGluIHttYWdlbnRhICR7dGhpcy5wcmV0dHlEdXJhdGlvbn19YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByaW50RmluaXNoZWRTdHJpbmcgKCkge1xuICAgICAgICBpZiAodGhpcy5qb2JTdGF0dXMgIT09IFwic3VjY2Vzc1wiKSByZXR1cm47XG4gICAgICAgIHRoaXMud3JpdGVTdHJlYW1zLnN0ZG91dChgJHt0aGlzLmdldEZpbmlzaGVkU3RyaW5nKCl9XFxuYCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmludEV4aXRlZFN0cmluZyAoY29kZTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHdyaXRlU3RyZWFtcyA9IHRoaXMud3JpdGVTdHJlYW1zO1xuICAgICAgICBjb25zdCBmaW5pc2hlZFN0ciA9IHRoaXMuZ2V0RmluaXNoZWRTdHJpbmcoKTtcblxuICAgICAgICAvLyBXb24ndCBwcmludCBpZiBqb2JTdGF0dXMgaXMgXCJzdWNjZXNzXCIgYmVjYXVzZSB0aGF0IHdpbGwgYmUgcHJpbnRlZCB2aWEgdGhlIGBwcmludEZpbmlzaGVkU3RyaW5nKClgXG4gICAgICAgIGlmICh0aGlzLmpvYlN0YXR1cyA9PT0gXCJ3YXJuaW5nXCIpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoXG4gICAgICAgICAgICAgICAgY2hhbGtgJHtmaW5pc2hlZFN0cn0ge2JsYWNrLmJnWWVsbG93QnJpZ2h0ICBXQVJOICR7Y29kZS50b1N0cmluZygpfSB9XFxuYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5qb2JTdGF0dXMgPT09IFwiZmFpbGVkXCIpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoXG4gICAgICAgICAgICAgICAgY2hhbGtgJHtmaW5pc2hlZFN0cn0ge2JsYWNrLmJnUmVkICBGQUlMICR7Y29kZS50b1N0cmluZygpfSB9XFxuYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByaW50QWZ0ZXJTY3JpcHRFeGl0ZWRTdHJpbmcgKGNvZGU6IG51bWJlcikge1xuICAgICAgICBjb25zdCB3cml0ZVN0cmVhbXMgPSB0aGlzLndyaXRlU3RyZWFtcztcbiAgICAgICAgY29uc3QgZmluaXNoZWRTdHIgPSB0aGlzLmdldEZpbmlzaGVkU3RyaW5nKCk7XG5cbiAgICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoXG4gICAgICAgICAgICAgICAgY2hhbGtgJHtmaW5pc2hlZFN0cn0ge2JsYWNrLmJnWWVsbG93QnJpZ2h0ICBXQVJOICR7Y29kZS50b1N0cmluZygpfSB9IGFmdGVyX3NjcmlwdFxcbmAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjcmVhdGVEb2NrZXJOZXR3b3JrIChuZXR3b3JrTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHtzdGRvdXQ6IG5ldHdvcmtJZH0gPSBhd2FpdCBVdGlscy5zcGF3bihbdGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUsIFwibmV0d29ya1wiLCBcImNyZWF0ZVwiLCBgJHtuZXR3b3JrTmFtZX1gXSk7XG4gICAgICAgIHRoaXMuX3NlcnZpY2VOZXR3b3JrSWQgPSBuZXR3b3JrSWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzdGFydFNlcnZpY2UgKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBleHBhbmRlZDoge1trZXk6IHN0cmluZ106IHN0cmluZ30sIHNlcnZpY2U6IFNlcnZpY2UpIHtcbiAgICAgICAgY29uc3QgY3dkID0gdGhpcy5hcmd2LmN3ZDtcbiAgICAgICAgbGV0IGRvY2tlckNtZCA9IGAke3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlfSBjcmVhdGUgLS1pbnRlcmFjdGl2ZSBgO1xuICAgICAgICB0aGlzLnJlZnJlc2hMb25nUnVubmluZ1NpbGVudFRpbWVvdXQod3JpdGVTdHJlYW1zKTtcblxuICAgICAgICBpZiAodGhpcy5hcmd2LnVtYXNrKSB7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCItLXVzZXIgMDowIFwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYXJndi51c2VybnMgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdXNlcm5zPSR7dGhpcy5hcmd2LnVzZXJuc30gYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFyZ3YucHJpdmlsZWdlZCkge1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiLS1wcml2aWxlZ2VkIFwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYXJndi5kZXZpY2UpIHtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS1kZXZpY2U9JHt0aGlzLmFyZ3YuZGV2aWNlfSBgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYXJndi51bGltaXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS11bGltaXQgbm9maWxlPSR7dGhpcy5hcmd2LnVsaW1pdH0gYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qgdm9sdW1lIG9mIHRoaXMuYXJndi52b2x1bWUpIHtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS12b2x1bWUgJHt2b2x1bWV9IGA7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGV4dHJhSG9zdCBvZiB0aGlzLmFyZ3YuZXh0cmFIb3N0KSB7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tYWRkLWhvc3Q9JHtleHRyYUhvc3R9IGA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZXJ2aWNlQWxpYXMgPSBzZXJ2aWNlLmFsaWFzO1xuICAgICAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IHNlcnZpY2UubmFtZTtcbiAgICAgICAgY29uc3Qgc2VydmljZU5hbWVXaXRob3V0VmVyc2lvbiA9IHNlcnZpY2VOYW1lLnJlcGxhY2UoLyguKikoOi4qKS8sIFwiJDFcIik7XG4gICAgICAgIGNvbnN0IGFsaWFzZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgYWxpYXNlcy5hZGQoc2VydmljZU5hbWVXaXRob3V0VmVyc2lvbi5yZXBsYWNlQWxsKFwiL1wiLCBcIi1cIikpO1xuICAgICAgICBhbGlhc2VzLmFkZChzZXJ2aWNlTmFtZVdpdGhvdXRWZXJzaW9uLnJlcGxhY2VBbGwoXCIvXCIsIFwiX19cIikpO1xuICAgICAgICBpZiAoc2VydmljZUFsaWFzKSB7XG4gICAgICAgICAgICBhbGlhc2VzLmFkZChzZXJ2aWNlQWxpYXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGV4cGFuZGVkKSkge1xuICAgICAgICAgICAgLy8gUmVwbGFjaW5nIGAnYCB3aXRoIGAnXFwnJ2AgdG8gY29ycmVjdGx5IGhhbmRsZSBzaW5nbGUgcXVvdGVzKGlmIGB2YWxgIGNvbnRhaW5zIGAnYCkgaW4gc2hlbGwgY29tbWFuZHNcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgICAtZSAnJHtrZXl9PSR7dmFsLnRvU3RyaW5nKCkucmVwbGFjZSgvJy9nLCBcIidcXFxcJydcIil9JyBcXFxcXFxuYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlcnZpY2VFbnRyeXBvaW50ID0gc2VydmljZS5lbnRyeXBvaW50O1xuICAgICAgICBpZiAoc2VydmljZUVudHJ5cG9pbnQpIHtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS1lbnRyeXBvaW50ICR7VXRpbHMuc2FmZUJhc2hTdHJpbmcoc2VydmljZUVudHJ5cG9pbnRbMF0pfSBgO1xuICAgICAgICB9XG4gICAgICAgIGRvY2tlckNtZCArPSBgLS12b2x1bWUgJHt0aGlzLmJ1aWxkVm9sdW1lTmFtZX06JHt0aGlzLmNpUHJvamVjdERpcn0gYDtcbiAgICAgICAgZG9ja2VyQ21kICs9IGAtLXZvbHVtZSAke3RoaXMudG1wVm9sdW1lTmFtZX06JHt0aGlzLmZpbGVWYXJpYWJsZXNEaXJ9IGA7XG5cbiAgICAgICAgLy8gVGhlIGRlZmF1bHQgcG9kbWFuIG5ldHdvcmsgbW9kZSBpcyBub3QgYGJyaWRnZWAsIHdoaWNoIG1lYW5zIGEgYHBvZG1hbiBuZXR3b3JrIGNvbm5lY3RgIGNhbGwgd2lsbCBmYWlsXG4gICAgICAgIC8vIHdoZW4gY29ubmVjdGluZyB1c2VyIGRlZmluZWQgbmV0d29ya3MuIFRoZSB3b3JrYXJvdW5kIGlzIHRvIHVzZSBhIHVzZXIgZGVmaW5lZCBuZXR3b3JrIG9uIGNvbnRhaW5lclxuICAgICAgICAvLyBjcmVhdGlvbi5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jb250YWluZXJzL3BvZG1hbi9pc3N1ZXMvMTk1NzdcbiAgICAgICAgZG9ja2VyQ21kICs9IGAtLW5ldHdvcmsgJHt0aGlzLl9zZXJ2aWNlTmV0d29ya0lkfSBgO1xuICAgICAgICBmb3IgKGNvbnN0IGFsaWFzIG9mIGFsaWFzZXMpIHtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS1uZXR3b3JrLWFsaWFzICR7YWxpYXN9IGA7XG4gICAgICAgIH1cblxuICAgICAgICBkb2NrZXJDbWQgKz0gYCR7c2VydmljZU5hbWV9IGA7XG5cbiAgICAgICAgaWYgKHNlcnZpY2VFbnRyeXBvaW50Py5sZW5ndGggPz8gMCA+IDEpIHtcbiAgICAgICAgICAgIHNlcnZpY2VFbnRyeXBvaW50Py5zbGljZSgxKS5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAke1V0aWxzLnNhZmVCYXNoU3RyaW5nKGUpfSBgO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgKHNlcnZpY2UuY29tbWFuZCA/PyBbXSkuZm9yRWFjaCgoZSkgPT4gZG9ja2VyQ21kICs9IGBcIiR7ZS5yZXBsYWNlKC9cXCQvZywgXCJcXFxcJFwiKX1cIiBgKTtcblxuICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcblxuICAgICAgICBjb25zdCB7c3Rkb3V0OiBjb250YWluZXJJZH0gPSBhd2FpdCBVdGlscy5iYXNoKGRvY2tlckNtZCwgY3dkKTtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyc1RvQ2xlYW4ucHVzaChjb250YWluZXJJZCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBuZXR3b3JrIG9mIHRoaXMuYXJndi5uZXR3b3JrKSB7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbdGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUsIFwibmV0d29ya1wiLCBcImNvbm5lY3RcIiwgbmV0d29yaywgYCR7Y29udGFpbmVySWR9YF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcInN0YXJ0XCIsIGAke2NvbnRhaW5lcklkfWBdKTtcblxuICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IHN0YXJ0ZWQgc2VydmljZSBpbWFnZTogJHtzZXJ2aWNlTmFtZX0gd2l0aCBhbGlhc2VzOiAke0FycmF5LmZyb20oYWxpYXNlcykuam9pbihcIiwgXCIpfX0gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuXG4gICAgICAgIHJldHVybiBjb250YWluZXJJZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHNlcnZpY2VIZWFsdGhDaGVjayAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIHNlcnZpY2U6IFNlcnZpY2UsIHNlcnZpY2VJbmRleDogbnVtYmVyLCBzZXJ2aWNlQ29udGFpbmVyTG9nRmlsZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VBbGlhcyA9IHNlcnZpY2UuYWxpYXM7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gc2VydmljZS5uYW1lO1xuICAgICAgICBjb25zdCB3YWl0SW1hZ2VOYW1lID0gdGhpcy5hcmd2LndhaXRJbWFnZTtcblxuICAgICAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IFV0aWxzLnNwYXduKFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJpbWFnZVwiLCBcImluc3BlY3RcIiwgc2VydmljZU5hbWVdKTtcbiAgICAgICAgY29uc3QgaW1hZ2VJbnNwZWN0ID0gSlNPTi5wYXJzZShzdGRvdXQpO1xuXG4gICAgICAgIC8vIENvcGllZCBmcm9tIHRoZSBzdGFydFNlcnZpY2UgYmxvY2suIEltcG9ydGFudCB0aGluZyBpcyB0aGF0IHRoZSBhbGlhc2VzIG1hdGNoXG4gICAgICAgIGNvbnN0IHNlcnZpY2VOYW1lV2l0aG91dFZlcnNpb24gPSBzZXJ2aWNlTmFtZS5yZXBsYWNlKC8oLiopKDouKikvLCBcIiQxXCIpO1xuICAgICAgICBjb25zdCBhbGlhc2VzID0gW3NlcnZpY2VOYW1lV2l0aG91dFZlcnNpb24ucmVwbGFjZUFsbChcIi9cIiwgXCItXCIpLCBzZXJ2aWNlTmFtZVdpdGhvdXRWZXJzaW9uLnJlcGxhY2VBbGwoXCIvXCIsIFwiX19cIildO1xuICAgICAgICBpZiAoc2VydmljZUFsaWFzKSB7XG4gICAgICAgICAgICBhbGlhc2VzLnB1c2goc2VydmljZUFsaWFzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuaXF1ZUFsaWFzID0gYWxpYXNlc1thbGlhc2VzLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIGlmICgoaW1hZ2VJbnNwZWN0WzBdPy5Db25maWc/LkV4cG9zZWRQb3J0cyA/PyBudWxsKSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHt5ZWxsb3cgQ291bGQgbm90IGZpbmQgZXhwb3NlZCB0Y3AgcG9ydHMgJHtzZXJ2aWNlTmFtZX19XFxuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHBvcnQgZGVmaW5lZCBpbiB0aGUgaW1hZ2UsIGFuZCB0cnkgdG8gY29ubmVjdCB0byB0aGUgYWxpYXNcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYW55KE9iamVjdC5rZXlzKGltYWdlSW5zcGVjdFswXS5Db25maWcuRXhwb3NlZFBvcnRzKS5tYXAoKHBvcnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXBvcnQuZW5kc1dpdGgoXCIvdGNwXCIpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgY29uc3QgcG9ydE51bSA9IHBhcnNlSW50KHBvcnQucmVwbGFjZShcIi90Y3BcIiwgXCJcIikpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lck5hbWUgPSBgZ2NsLXdhaXQtZm9yLWl0LSR7dGhpcy5qb2JJZH0tJHtzZXJ2aWNlSW5kZXh9LSR7cG9ydE51bX1gO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwYXduQ21kID0gW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcInJ1blwiLCBcIi0tcm1cIiwgYC0tbmFtZT0ke2NvbnRhaW5lck5hbWV9YCwgXCItLW5ldHdvcmtcIiwgYCR7dGhpcy5fc2VydmljZU5ldHdvcmtJZH1gLCBgJHt3YWl0SW1hZ2VOYW1lfWAsIGAke3VuaXF1ZUFsaWFzfToke3BvcnROdW19YCwgXCItdFwiLCBcIjMwXCJdO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lcnNUb0NsZWFuLnB1c2goY29udGFpbmVyTmFtZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0aWxzLnNwYXduKHNwYXduQ21kKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHtncmVlbkJyaWdodCBzZXJ2aWNlIGltYWdlOiAke3NlcnZpY2VOYW1lfSBoZWFsdGhjaGVjayBwYXNzZWQgaW4ge2dyZWVuICR7cHJldHR5SHJ0aW1lKGVuZFRpbWUpfX19XFxuYCk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIEFnZ3JlZ2F0ZUVycm9yKSkgdGhyb3cgZTtcbiAgICAgICAgICAgIGUuZXJyb3JzLmZvckVhY2goKHNpbmdsZUVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHtyZWRCcmlnaHQgc2VydmljZSBpbWFnZTogJHtzZXJ2aWNlTmFtZX0gaGVhbHRoY2hlY2sgZmFpbGVkfVxcbmApO1xuICAgICAgICAgICAgICAgIHNpbmdsZUVycm9yLm1lc3NhZ2Uuc3BsaXQoL1xccj9cXG4vZykuZm9yRWFjaCgobGluZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHtyZWRCcmlnaHQgICAke2xpbmV9fVxcbmApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHtyZWRCcmlnaHQgYWxzbyBzZWUgKCR7c2VydmljZUNvbnRhaW5lckxvZ0ZpbGV9KX1cXG5gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgLy8gS2lsbCBhbGwgd2FpdC1mb3ItaXQgY29udGFpbmVycywgd2hlbiBvbmUgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChPYmplY3Qua2V5cyhpbWFnZUluc3BlY3RbMF0uQ29uZmlnLkV4cG9zZWRQb3J0cykubWFwKChwb3J0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFwb3J0LmVuZHNXaXRoKFwiL3RjcFwiKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvcnROdW0gPSBwYXJzZUludChwb3J0LnJlcGxhY2UoXCIvdGNwXCIsIFwiXCIpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcInJtXCIsIFwiLXZmXCIsIGBnY2wtd2FpdC1mb3ItaXQtJHt0aGlzLmpvYklkfS0ke3NlcnZpY2VJbmRleH0tJHtwb3J0TnVtfWBdKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZmV0Y2hUcmlnZ2VySW5jbHVkZSAoKSB7XG4gICAgICAgIGNvbnN0IHtjd2QsIHN0YXRlRGlyfSA9IHRoaXMuYXJndjtcblxuICAgICAgICBmcy5ta2RpcnBTeW5jKGAke2N3ZH0vJHtzdGF0ZURpcn0vaW5jbHVkZXMvdHJpZ2dlcnNgKTtcblxuICAgICAgICBsZXQgY29udGVudHM6IGFueSA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3QgaW5jbHVkZSBvZiB0aGlzLmpvYkRhdGEudHJpZ2dlcj8uaW5jbHVkZSA/PyBbXSkge1xuICAgICAgICAgICAgaWYgKGluY2x1ZGVbXCJsb2NhbFwiXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkSW5jbHVkZSA9IFV0aWxzLmV4cGFuZFRleHQoaW5jbHVkZVtcImxvY2FsXCJdLCB0aGlzLl92YXJpYWJsZXMpO1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlSW5jbHVkZUxvY2FsKGV4cGFuZGVkSW5jbHVkZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCByZXNvbHZlSW5jbHVkZUxvY2FsKGV4cGFuZGVkSW5jbHVkZSwgY3dkKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKHttZXNzYWdlOiBgTG9jYWwgaW5jbHVkZSBmaWxlIFxcYCR7aW5jbHVkZVtcImxvY2FsXCJdfVxcYCBzcGVjaWZpZWQgaW4gXFxgLiR7dGhpcy5uYW1lfVxcYCBjYW5ub3QgYmUgZm91bmQhYH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgUGFyc2VyLmxvYWRZYW1sKGZpbGUsIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudHMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jb250ZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbmNsdWRlW1wiYXJ0aWZhY3RcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgUGFyc2VyLmxvYWRZYW1sKGAke2N3ZH0vJHtzdGF0ZURpcn0vYXJ0aWZhY3RzLyR7aW5jbHVkZVtcImpvYlwiXX0vJHtpbmNsdWRlW1wiYXJ0aWZhY3RcIl19YCwge30pO1xuICAgICAgICAgICAgICAgIGNvbnRlbnRzID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5jb250ZW50cyxcbiAgICAgICAgICAgICAgICAgICAgLi4uY29udGVudCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpbmNsdWRlW1wicHJvamVjdFwiXSkge1xuICAgICAgICAgICAgICAgIHRoaXMud3JpdGVTdHJlYW1zLm1lbW9TdGRvdXQoY2hhbGtge2JnWWVsbG93QnJpZ2h0ICBXQVJOIH0gXFxge2JsdWVCcmlnaHQgJHt0aGlzLm5hbWV9LnRyaWdnZXIuaW5jbHVkZS4qLnByb2plY3R9XFxgIHdpbGwgYmUgbm8tb3AuIEl0IGlzIGN1cnJlbnRseSBub3QgaW1wbGVtZW50ZWRcXG5gKTtcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbmNsdWRlW1widGVtcGxhdGVcIl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLndyaXRlU3RyZWFtcy5tZW1vU3Rkb3V0KGNoYWxrYHtiZ1llbGxvd0JyaWdodCAgV0FSTiB9IFxcYHtibHVlQnJpZ2h0ICR7dGhpcy5uYW1lfS50cmlnZ2VyLmluY2x1ZGUuKi50ZW1wbGF0ZX1cXGAgd2lsbCBiZSBuby1vcC4gSXQgaXMgY3VycmVudGx5IG5vdCBpbXBsZW1lbnRlZFxcbmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGAke2N3ZH0vJHtzdGF0ZURpcn0vaW5jbHVkZXMvdHJpZ2dlcnMvJHt0aGlzLm5hbWV9LnltbGA7XG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGFyZ2V0LCB5YW1sLmR1bXAoY29udGVudHMpKTtcbiAgICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbGVhbnVwSm9iUmVzb3VyY2VzIChqb2JzPzogSXRlcmFibGU8Sm9iPikge1xuICAgIGlmICgham9icykgcmV0dXJuO1xuICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgZm9yIChjb25zdCBqb2Igb2Ygam9icykge1xuICAgICAgICBwcm9taXNlcy5wdXNoKGpvYi5jbGVhbnVwUmVzb3VyY2VzKCkpO1xuICAgIH1cbiAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59XG4iXX0=
1348
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiam9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDMUIsT0FBTyxZQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBR2pDLE9BQU8sTUFBTSxFQUFFLEVBQUMsY0FBYyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzlDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFakMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sRUFBQywyQkFBMkIsRUFBRSw2QkFBNkIsRUFBRSx3QkFBd0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ3hILE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDckMsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFDaEMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNuQyxPQUFPLEVBQUMsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxZQUFZLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE1BQU0sNEJBQTRCLEdBQUcsNkJBQTZCLENBQUM7QUEwQ25FLE1BQU0sYUFBYSxHQUFHLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUU7SUFDckQsSUFBSSxFQUFFLFNBQVM7SUFDZixLQUFLLEVBQUUsU0FBUztJQUNoQixJQUFJLEVBQUUsU0FBUztJQUNmLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLE1B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Q0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUNELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0ICogYXMgZG90ZW52IGZyb20gXCJkb3RlbnZcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCBwcmV0dHlIcnRpbWUgZnJvbSBcInByZXR0eS1ocnRpbWVcIjtcbmltcG9ydCBzcGxpdDIgZnJvbSBcInNwbGl0MlwiO1xuaW1wb3J0IHtVdGlsc30gZnJvbSBcIi4vdXRpbHMuanNcIjtcbmltcG9ydCB7V3JpdGVTdHJlYW1zfSBmcm9tIFwiLi93cml0ZS1zdHJlYW1zLmpzXCI7XG5pbXBvcnQge0dpdERhdGF9IGZyb20gXCIuL2dpdC1kYXRhLmpzXCI7XG5pbXBvcnQgYXNzZXJ0LCB7QXNzZXJ0aW9uRXJyb3J9IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7TXV0ZXh9IGZyb20gXCIuL211dGV4LmpzXCI7XG5pbXBvcnQge0FyZ3Z9IGZyb20gXCIuL2FyZ3YuanNcIjtcbmltcG9ydCBleGVjYSBmcm9tIFwiZXhlY2FcIjtcbmltcG9ydCB7Q0lDRFZhcmlhYmxlfSBmcm9tIFwiLi92YXJpYWJsZXMtZnJvbS1maWxlcy5qc1wiO1xuaW1wb3J0IHtHaXRsYWJSdW5uZXJDUFVzUHJlc2V0VmFsdWUsIEdpdGxhYlJ1bm5lck1lbW9yeVByZXNldFZhbHVlLCBHaXRsYWJSdW5uZXJQcmVzZXRWYWx1ZXN9IGZyb20gXCIuL2dpdGxhYi1wcmVzZXQuanNcIjtcbmltcG9ydCB7aGFuZGxlcn0gZnJvbSBcIi4vaGFuZGxlci5qc1wiO1xuaW1wb3J0ICogYXMgeWFtbCBmcm9tIFwianMteWFtbFwiO1xuaW1wb3J0IHtQYXJzZXJ9IGZyb20gXCIuL3BhcnNlci5qc1wiO1xuaW1wb3J0IHtyZXNvbHZlSW5jbHVkZUxvY2FsLCB2YWxpZGF0ZUluY2x1ZGVMb2NhbH0gZnJvbSBcIi4vcGFyc2VyLWluY2x1ZGVzLmpzXCI7XG5pbXBvcnQgZ2xvYmJ5IGZyb20gXCJnbG9iYnlcIjtcbmltcG9ydCB0ZXJtaW5hbExpbmsgZnJvbSBcInRlcm1pbmFsLWxpbmtcIjtcblxuY29uc3QgR0NMX1NIRUxMX1BST01QVF9QTEFDRUhPTERFUiA9IFwiPGdjbFNoZWxsUHJvbXB0UGxhY2Vob2xkZXI+XCI7XG5pbnRlcmZhY2UgSm9iT3B0aW9ucyB7XG4gICAgYXJndjogQXJndjtcbiAgICB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcztcbiAgICBkYXRhOiBhbnk7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGJhc2VOYW1lOiBzdHJpbmc7XG4gICAgcGlwZWxpbmVJaWQ6IG51bWJlcjtcbiAgICBnaXREYXRhOiBHaXREYXRhO1xuICAgIGdsb2JhbFZhcmlhYmxlczoge1tuYW1lOiBzdHJpbmddOiBzdHJpbmd9O1xuICAgIHZhcmlhYmxlc0Zyb21GaWxlczoge1tuYW1lOiBzdHJpbmddOiBDSUNEVmFyaWFibGV9O1xuICAgIHByZWRlZmluZWRWYXJpYWJsZXM6IHtbbmFtZTogc3RyaW5nXTogYW55fTtcbiAgICBtYXRyaXhWYXJpYWJsZXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9IHwgbnVsbDtcbiAgICBub2RlSW5kZXg6IG51bWJlciB8IG51bGw7XG4gICAgbm9kZXNUb3RhbDogbnVtYmVyO1xuICAgIGV4cGFuZFZhcmlhYmxlczogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIENhY2hlIHtcbiAgICBwb2xpY3k6IFwicHVsbFwiIHwgXCJwdWxsLXB1c2hcIiB8IFwicHVzaFwiO1xuICAgIGtleTogc3RyaW5nIHwge2ZpbGVzOiBzdHJpbmdbXX07XG4gICAgcGF0aHM6IHN0cmluZ1tdO1xuICAgIHdoZW46IFwib25fc3VjY2Vzc1wiIHwgXCJvbl9mYWlsdXJlXCIgfCBcImFsd2F5c1wiO1xufVxuXG5pbnRlcmZhY2UgU2VydmljZSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGVudHJ5cG9pbnQ6IHN0cmluZ1tdIHwgbnVsbDtcbiAgICBjb21tYW5kOiBzdHJpbmdbXSB8IG51bGw7XG4gICAgYWxpYXM6IHN0cmluZyB8IG51bGw7XG4gICAgdmFyaWFibGVzOiB7W25hbWU6IHN0cmluZ106IHN0cmluZ307XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmVlZCB7XG4gICAgam9iOiBzdHJpbmc7XG4gICAgYXJ0aWZhY3RzOiBib29sZWFuO1xuICAgIG9wdGlvbmFsPzogYm9vbGVhbjtcbiAgICByZWY/OiBzdHJpbmc7XG4gICAgcGlwZWxpbmU/OiBzdHJpbmc7XG4gICAgcHJvamVjdD86IHN0cmluZztcbn1cblxuY29uc3QgZGF0ZUZvcm1hdHRlciA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHVuZGVmaW5lZCwge1xuICAgIHllYXI6IHVuZGVmaW5lZCxcbiAgICBtb250aDogdW5kZWZpbmVkLFxuICAgIGhvdXI6IFwibnVtZXJpY1wiLFxuICAgIG1pbnV0ZTogXCJudW1lcmljXCIsXG4gICAgc2Vjb25kOiBcIm51bWVyaWNcIixcbiAgICBob3VyMTI6IGZhbHNlLFxufSk7XG5cbmV4cG9ydCB0eXBlIEpvYlJ1bGUgPSB7XG4gICAgaWY/OiBzdHJpbmc7XG4gICAgd2hlbj86IHN0cmluZztcbiAgICBjaGFuZ2VzPzogc3RyaW5nW10gfCB7cGF0aHM6IHN0cmluZ1tdfTtcbiAgICBleGlzdHM/OiBzdHJpbmdbXTtcbiAgICBhbGxvd19mYWlsdXJlPzogYm9vbGVhbjtcbiAgICB2YXJpYWJsZXM/OiB7W25hbWU6IHN0cmluZ106IHN0cmluZ307XG59O1xuXG5leHBvcnQgY2xhc3MgSm9iIHtcbiAgICBwcml2YXRlIGdlbmVyYXRlSm9iSWQgKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVhZG9ubHkgaWxsZWdhbEpvYk5hbWVzID0gbmV3IFNldChbXG4gICAgICAgIFwiaW5jbHVkZVwiLCBcImxvY2FsX2NvbmZpZ3VyYXRpb25cIiwgXCJpbWFnZVwiLCBcInNlcnZpY2VzXCIsXG4gICAgICAgIFwic3RhZ2VzXCIsIFwiYmVmb3JlX3NjcmlwdFwiLCBcImRlZmF1bHRcIixcbiAgICAgICAgXCJhZnRlcl9zY3JpcHRcIiwgXCJ2YXJpYWJsZXNcIiwgXCJjYWNoZVwiLCBcIndvcmtmbG93XCIsIFwicGFnZTpkZXBsb3lcIixcbiAgICBdKTtcblxuICAgIHJlYWRvbmx5IGFyZ3Y6IEFyZ3Y7XG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGJhc2VOYW1lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgZGVwZW5kZW5jaWVzOiBzdHJpbmdbXSB8IG51bGw7XG4gICAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiB7bmFtZTogc3RyaW5nOyB1cmw6IHN0cmluZyB8IG51bGw7IGRlcGxveW1lbnRfdGllcjogc3RyaW5nIHwgbnVsbDsgYWN0aW9uOiBzdHJpbmcgfCBudWxsfTtcbiAgICByZWFkb25seSBqb2JJZDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IHJ1bGVzPzogSm9iUnVsZVtdO1xuXG4gICAgcmVhZG9ubHkgYWxsb3dGYWlsdXJlOiBib29sZWFuIHwge1xuICAgICAgICBleGl0X2NvZGVzOiBudW1iZXIgfCBudW1iZXJbXTtcbiAgICB9O1xuICAgIHJlYWRvbmx5IHdoZW46IHN0cmluZztcbiAgICByZWFkb25seSBleGlzdHM6IHN0cmluZ1tdO1xuICAgIHJlYWRvbmx5IHBpcGVsaW5lSWlkOiBudW1iZXI7XG4gICAgcmVhZG9ubHkgZ2l0RGF0YTogR2l0RGF0YTtcbiAgICByZWFkb25seSBpbmhlcml0OiB7XG4gICAgICAgIHZhcmlhYmxlcz86IGJvb2xlYW4gfCBzdHJpbmdbXTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBfZG90ZW52VmFyaWFibGVzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSA9IHt9O1xuICAgIHByaXZhdGUgX3ByZXNjcmlwdHNFeGl0Q29kZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfYWZ0ZXJTY3JpcHRzRXhpdENvZGUgPSAwO1xuICAgIHByaXZhdGUgX2NvdmVyYWdlUGVyY2VudDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfcnVubmluZyA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2NvbnRhaW5lcklkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9zZXJ2aWNlTmV0d29ya0lkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9sb25nUnVubmluZ1NpbGVudFRpbWVvdXQ6IE5vZGVKUy5UaW1lb3V0ID0gLTEgYXMgYW55O1xuICAgIHByaXZhdGUgX3Byb2R1Y2Vyczoge25hbWU6IHN0cmluZzsgZG90ZW52OiBzdHJpbmcgfCBudWxsfVtdIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfam9iTmFtZVBhZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfY2lQcm9qZWN0RGlyOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9zdGFydFRpbWU/OiBbbnVtYmVyLCBudW1iZXJdO1xuICAgIHByaXZhdGUgX2VuZFRpbWU/OiBbbnVtYmVyLCBudW1iZXJdO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZmlsZXNUb1JtOiBzdHJpbmdbXSA9IFtdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2dsb2JhbFZhcmlhYmxlczoge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF92YXJpYWJsZXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0ge307XG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29udGFpbmVyc1RvQ2xlYW46IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29udGFpbmVyVm9sdW1lTmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBqb2JEYXRhOiBhbnk7XG4gICAgcHJpdmF0ZSByZWFkb25seSB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcztcblxuICAgIGNvbnN0cnVjdG9yIChvcHQ6IEpvYk9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgam9iRGF0YSA9IG9wdC5kYXRhO1xuICAgICAgICBjb25zdCBqb2JWYXJpYWJsZXMgPSBqb2JEYXRhLnZhcmlhYmxlcyA/PyB7fTtcbiAgICAgICAgY29uc3QgdmFyaWFibGVzRnJvbUZpbGVzID0gb3B0LnZhcmlhYmxlc0Zyb21GaWxlcztcbiAgICAgICAgY29uc3QgYXJndiA9IG9wdC5hcmd2O1xuICAgICAgICBjb25zdCBjd2QgPSBhcmd2LmN3ZDtcbiAgICAgICAgY29uc3QgYXJndlZhcmlhYmxlcyA9IGFyZ3YudmFyaWFibGU7XG4gICAgICAgIGNvbnN0IGV4cGFuZFZhcmlhYmxlcyA9IG9wdC5leHBhbmRWYXJpYWJsZXMgPz8gdHJ1ZTtcblxuICAgICAgICB0aGlzLmFyZ3YgPSBhcmd2O1xuICAgICAgICB0aGlzLndyaXRlU3RyZWFtcyA9IG9wdC53cml0ZVN0cmVhbXM7XG4gICAgICAgIHRoaXMuZ2l0RGF0YSA9IG9wdC5naXREYXRhO1xuICAgICAgICB0aGlzLm5hbWUgPSBvcHQubmFtZTtcbiAgICAgICAgdGhpcy5iYXNlTmFtZSA9IG9wdC5iYXNlTmFtZTtcbiAgICAgICAgdGhpcy5qb2JJZCA9IHRoaXMuZ2VuZXJhdGVKb2JJZCgpO1xuICAgICAgICB0aGlzLmpvYkRhdGEgPSBvcHQuZGF0YTtcbiAgICAgICAgdGhpcy5waXBlbGluZUlpZCA9IG9wdC5waXBlbGluZUlpZDtcbiAgICAgICAgdGhpcy5fZ2xvYmFsVmFyaWFibGVzID0gb3B0Lmdsb2JhbFZhcmlhYmxlcztcblxuICAgICAgICB0aGlzLmluaGVyaXQgPSB7fTtcbiAgICAgICAgdGhpcy5pbmhlcml0LnZhcmlhYmxlcyA9IHRoaXMuam9iRGF0YS5pbmhlcml0Py52YXJpYWJsZXMgPz8gdHJ1ZTtcblxuICAgICAgICB0aGlzLndoZW4gPSBqb2JEYXRhLndoZW4gfHwgXCJvbl9zdWNjZXNzXCI7XG4gICAgICAgIHRoaXMuZXhpc3RzID0gam9iRGF0YS5leGlzdHMgfHwgW107XG4gICAgICAgIHRoaXMuYWxsb3dGYWlsdXJlID0gam9iRGF0YS5hbGxvd19mYWlsdXJlID8/IGZhbHNlO1xuICAgICAgICB0aGlzLmRlcGVuZGVuY2llcyA9IGpvYkRhdGEuZGVwZW5kZW5jaWVzIHx8IG51bGw7XG4gICAgICAgIHRoaXMucnVsZXMgPSBqb2JEYXRhLnJ1bGVzIHx8IG51bGw7XG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSB0eXBlb2Ygam9iRGF0YS5lbnZpcm9ubWVudCA9PT0gXCJzdHJpbmdcIiA/IHtuYW1lOiBqb2JEYXRhLmVudmlyb25tZW50fSA6IGpvYkRhdGEuZW52aXJvbm1lbnQ7XG5cbiAgICAgICAgY29uc3QgbWF0cml4VmFyaWFibGVzID0gb3B0Lm1hdHJpeFZhcmlhYmxlcyA/PyB7fTtcbiAgICAgICAgY29uc3QgZmlsZVZhcmlhYmxlcyA9IFV0aWxzLmZpbmRFbnZNYXRjaGVkVmFyaWFibGVzKHZhcmlhYmxlc0Zyb21GaWxlcywgdGhpcy5maWxlVmFyaWFibGVzRGlyKTtcbiAgICAgICAgY29uc3QgcHJlZGVmaW5lZFZhcmlhYmxlcyA9IHRoaXMuX3ByZWRlZmluZWRWYXJpYWJsZXMob3B0KTtcbiAgICAgICAgdGhpcy5fdmFyaWFibGVzID0gey4uLnByZWRlZmluZWRWYXJpYWJsZXMsIC4uLnRoaXMuZ2xvYmFsVmFyaWFibGVzLCAuLi5qb2JWYXJpYWJsZXMsIC4uLm1hdHJpeFZhcmlhYmxlcywgLi4uZmlsZVZhcmlhYmxlcywgLi4uYXJndlZhcmlhYmxlc307XG5cbiAgICAgICAgaWYgKHRoaXMucnVsZXMgJiYgZXhwYW5kVmFyaWFibGVzKSB7XG4gICAgICAgICAgICBjb25zdCBleHBhbmRlZCA9IFV0aWxzLmV4cGFuZFZhcmlhYmxlcyh0aGlzLl92YXJpYWJsZXMpO1xuXG4gICAgICAgICAgICAvLyBFeHBhbmQgdmFyaWFibGVzIGluIHJ1bGVzOmNoYW5nZXNcbiAgICAgICAgICAgIHRoaXMucnVsZXMuZm9yRWFjaCgocnVsZSwgcnVsZUlkeCwgcnVsZXMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGFuZ2VzID0gQXJyYXkuaXNBcnJheShydWxlLmNoYW5nZXMpID8gcnVsZS5jaGFuZ2VzIDogcnVsZS5jaGFuZ2VzPy5wYXRocztcbiAgICAgICAgICAgICAgICBpZiAoIWNoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNoYW5nZXMuZm9yRWFjaCgoY2hhbmdlLCBjaGFuZ2VJZHgsIGNoYW5nZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlc1tjaGFuZ2VJZHhdID0gVXRpbHMuZXhwYW5kVGV4dChjaGFuZ2UsIGV4cGFuZGVkKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBydWxlc1tydWxlSWR4XS5jaGFuZ2VzID0gY2hhbmdlcztcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBFeHBhbmQgdmFyaWFibGVzIGluIHJ1bGVzOmV4aXN0c1xuICAgICAgICAgICAgdGhpcy5ydWxlcy5mb3JFYWNoKChydWxlLCBydWxlSWR4LCBydWxlcykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0cyA9IEFycmF5LmlzQXJyYXkocnVsZS5leGlzdHMpID8gcnVsZS5leGlzdHMgOiBudWxsO1xuICAgICAgICAgICAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXhpc3RzLmZvckVhY2goKGV4aXN0LCBleGlzdElkLCBleGlzdHMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RzW2V4aXN0SWRdID0gVXRpbHMuZXhwYW5kVGV4dChleGlzdCwgZXhwYW5kZWQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJ1bGVzW3J1bGVJZHhdLmV4aXN0cyA9IGV4aXN0cztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJ1bGVWYXJpYWJsZXM6IHtbbmFtZTogc3RyaW5nXTogc3RyaW5nfSB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gU2V0IHt3aGVuLCBhbGxvd0ZhaWx1cmV9IGJhc2VkIG9uIHJ1bGVzIHJlc3VsdFxuICAgICAgICBpZiAodGhpcy5ydWxlcykge1xuICAgICAgICAgICAgY29uc3QgcnVsZVJlc3VsdCA9IFV0aWxzLmdldFJ1bGVzUmVzdWx0KHthcmd2LCBjd2QsIHJ1bGVzOiB0aGlzLnJ1bGVzLCB2YXJpYWJsZXM6IHRoaXMuX3ZhcmlhYmxlc30sIHRoaXMuZ2l0RGF0YSwgdGhpcy53aGVuLCB0aGlzLmFsbG93RmFpbHVyZSk7XG4gICAgICAgICAgICB0aGlzLndoZW4gPSBydWxlUmVzdWx0LndoZW47XG4gICAgICAgICAgICB0aGlzLmFsbG93RmFpbHVyZSA9IHJ1bGVSZXN1bHQuYWxsb3dGYWlsdXJlO1xuICAgICAgICAgICAgcnVsZVZhcmlhYmxlcyA9IHJ1bGVSZXN1bHQudmFyaWFibGVzO1xuICAgICAgICAgICAgdGhpcy5fdmFyaWFibGVzID0gey4uLnRoaXMuX3ZhcmlhYmxlcywgLi4ucnVsZVZhcmlhYmxlcywgLi4uYXJndlZhcmlhYmxlc307XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaW5kIGVudmlyb25tZW50IG1hdGNoZWQgdmFyaWFibGVzXG4gICAgICAgIGlmICh0aGlzLmVudmlyb25tZW50ICYmIGV4cGFuZFZhcmlhYmxlcykge1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWQgPSBVdGlscy5leHBhbmRWYXJpYWJsZXModGhpcy5fdmFyaWFibGVzKTtcbiAgICAgICAgICAgIHRoaXMuZW52aXJvbm1lbnQubmFtZSA9IFV0aWxzLmV4cGFuZFRleHQodGhpcy5lbnZpcm9ubWVudC5uYW1lLCBleHBhbmRlZCk7XG4gICAgICAgICAgICB0aGlzLmVudmlyb25tZW50LnVybCA9IFV0aWxzLmV4cGFuZFRleHQodGhpcy5lbnZpcm9ubWVudC51cmwsIGV4cGFuZGVkKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbnZNYXRjaGVkVmFyaWFibGVzID0gVXRpbHMuZmluZEVudk1hdGNoZWRWYXJpYWJsZXModmFyaWFibGVzRnJvbUZpbGVzLCB0aGlzLmZpbGVWYXJpYWJsZXNEaXIsIHRoaXMuZW52aXJvbm1lbnQpO1xuXG4gICAgICAgIGNvbnN0IHVzZXJEZWZpbmVkVmFyaWFibGVzID0gey4uLnRoaXMuZ2xvYmFsVmFyaWFibGVzLCAuLi5qb2JWYXJpYWJsZXMsIC4uLm1hdHJpeFZhcmlhYmxlcywgLi4ucnVsZVZhcmlhYmxlcywgLi4uZW52TWF0Y2hlZFZhcmlhYmxlcywgLi4uYXJndlZhcmlhYmxlc307XG4gICAgICAgIHRoaXMuZGlzY291cmFnZU92ZXJyaWRpbmdPZlByZWRlZmluZWRWYXJpYWJsZXMocHJlZGVmaW5lZFZhcmlhYmxlcywgdXNlckRlZmluZWRWYXJpYWJsZXMpO1xuXG4gICAgICAgIC8vIE1lcmdlIGFuZCBleHBhbmQgYWZ0ZXIgZmluZGluZyBlbnYgbWF0Y2hlZCB2YXJpYWJsZXNcbiAgICAgICAgdGhpcy5fdmFyaWFibGVzID0gey4uLnByZWRlZmluZWRWYXJpYWJsZXMsIC4uLnVzZXJEZWZpbmVkVmFyaWFibGVzfTtcbiAgICAgICAgLy8gRGVsZXRlIHZhcmlhYmxlcyB0aGUgdXNlciBpbnRlbnRpb25hbGx5IHdhbnRzIHVuc2V0XG4gICAgICAgIGZvciAoY29uc3QgdW5zZXRWYXJpYWJsZSBvZiBhcmd2LnVuc2V0VmFyaWFibGVzKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fdmFyaWFibGVzW3Vuc2V0VmFyaWFibGVdO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNldCBHQ0xfUFJPSkVDVF9ESVJfT05fSE9TVCBpZiBkb2NrZXIgaW1hZ2VcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VOYW1lKHRoaXMuX3ZhcmlhYmxlcykpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlcyA9IHsuLi50aGlzLl92YXJpYWJsZXMsIC4uLntHQ0xfUFJPSkVDVF9ESVJfT05fSE9TVDogY3dkfX07XG4gICAgICAgIH1cblxuICAgICAgICBhc3NlcnQodGhpcy5zY3JpcHRzIHx8IHRoaXMudHJpZ2dlciwgY2hhbGtge2JsdWVCcmlnaHQgJHt0aGlzLm5hbWV9fSBtdXN0IGhhdmUgc2NyaXB0IHNwZWNpZmllZGApO1xuXG4gICAgICAgIGFzc2VydCghKHRoaXMuaW50ZXJhY3RpdmUgJiYgIXRoaXMuYXJndi5zaGVsbEV4ZWN1dG9yTm9JbWFnZSksIGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSBASW50ZXJhY3RpdmUgZGVjb3JhdG9yIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1uby1zaGVsbC1leGVjdXRvci1uby1pbWFnZWApO1xuXG4gICAgICAgIGlmICh0aGlzLmludGVyYWN0aXZlICYmICh0aGlzLndoZW4gIT09IFwibWFudWFsXCIgfHwgdGhpcy5pbWFnZU5hbWUodGhpcy5fdmFyaWFibGVzKSAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcih7bWVzc2FnZTogYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSBASW50ZXJhY3RpdmUgZGVjb3JhdG9yIGNhbm5vdCBoYXZlIGltYWdlOiBhbmQgbXVzdCBiZSB3aGVuOm1hbnVhbGB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmluamVjdFNTSEFnZW50ICYmIHRoaXMuaW1hZ2VOYW1lKHRoaXMuX3ZhcmlhYmxlcykgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcih7bWVzc2FnZTogYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSBASW5qZWN0U1NIQWdlbnQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGltYWdlOmB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4cGFuZGVkID0gVXRpbHMuZXhwYW5kVmFyaWFibGVzKHRoaXMuX3ZhcmlhYmxlcyk7XG4gICAgICAgIGZvciAoY29uc3QgW2ksIGNdIG9mIE9iamVjdC5lbnRyaWVzPGFueT4odGhpcy5jYWNoZSkpIHtcbiAgICAgICAgICAgIGMucG9saWN5ID0gVXRpbHMuZXhwYW5kVGV4dChjLnBvbGljeSwgZXhwYW5kZWQpO1xuICAgICAgICAgICAgYXNzZXJ0KFtcInB1bGxcIiwgXCJwdXNoXCIsIFwicHVsbC1wdXNoXCJdLmluY2x1ZGVzKGMucG9saWN5KSwgY2hhbGtge2JsdWUgJHt0aGlzLm5hbWV9fSBjYWNoZVske2l9XS5wb2xpY3kgaXMgbm90ICdwdWxsJywgJ3B1c2gnIG9yICdwdWxsLXB1c2gnYCk7XG4gICAgICAgICAgICBhc3NlcnQoW1wib25fc3VjY2Vzc1wiLCBcIm9uX2ZhaWx1cmVcIiwgXCJhbHdheXNcIl0uaW5jbHVkZXMoYy53aGVuKSwgY2hhbGtge2JsdWUgJHt0aGlzLm5hbWV9fSBjYWNoZVske2l9XS53aGVuIGlzIG5vdCAnb25fc3VjY2VzcycsICdvbl9mYWlsdXJlJyBvciAnYWx3YXlzJ2ApO1xuICAgICAgICAgICAgYXNzZXJ0KEFycmF5LmlzQXJyYXkoYy5wYXRocyksIGNoYWxrYHtibHVlICR7dGhpcy5uYW1lfX0gY2FjaGVbJHtpfV0ucGF0aHMgbXVzdCBiZSBhcnJheWApO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBbaSwgc10gb2YgT2JqZWN0LmVudHJpZXM8YW55Pih0aGlzLnNlcnZpY2VzKSkge1xuICAgICAgICAgICAgYXNzZXJ0KHMubmFtZSwgY2hhbGtge2JsdWUgJHt0aGlzLm5hbWV9fSBzZXJ2aWNlc1ske2l9XS5uYW1lIGlzIHVuZGVmaW5lZGApO1xuICAgICAgICAgICAgYXNzZXJ0KCFzLmNvbW1hbmQgfHwgQXJyYXkuaXNBcnJheShzLmNvbW1hbmQpLCBjaGFsa2B7Ymx1ZSAke3RoaXMubmFtZX19IHNlcnZpY2VzWyR7aX1dLmNvbW1hbmQgbXVzdCBiZSBhbiBhcnJheWApO1xuICAgICAgICAgICAgYXNzZXJ0KCFzLmVudHJ5cG9pbnQgfHwgQXJyYXkuaXNBcnJheShzLmVudHJ5cG9pbnQpLCBjaGFsa2B7Ymx1ZSAke3RoaXMubmFtZX19IHNlcnZpY2VzWyR7aX1dLmVudHJ5cG9pbnQgbXVzdCBiZSBhbiBhcnJheWApO1xuICAgICAgICB9XG5cbiAgICAgICAgYXNzZXJ0KCF0aGlzLmFydGlmYWN0cz8ucGF0aHMgfHwgQXJyYXkuaXNBcnJheSh0aGlzLmFydGlmYWN0cy5wYXRocyksIGNoYWxrYHtibHVlICR7dGhpcy5uYW1lfX0gYXJ0aWZhY3RzLnBhdGhzIG11c3QgYmUgYW4gYXJyYXlgKTtcblxuICAgICAgICBpZiAodGhpcy5pbWFnZU5hbWUodGhpcy5fdmFyaWFibGVzKSAmJiBhcmd2Lm1vdW50Q2FjaGUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgICAgICAgYy5wYXRocy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBVdGlscy5leHBhbmRUZXh0KHAsIGV4cGFuZGVkKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KCFwYXRoLmluY2x1ZGVzKFwiKlwiKSwgY2hhbGtge2JsdWUgJHt0aGlzLm5hbWV9fSBjYW5ub3QgaGF2ZSAqIGluIGNhY2hlIHBhdGhzLCB3aGVuIC0tbW91bnQtY2FjaGUgaXMgZW5hYmxlZGApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIFdhcm4gd2hlbiBvdmVycmlkaW5nIG9mIHByZWRlZmluZWQgdmFyaWFibGVzIGlzIGRldGVjdGVkXG4gICAgICovXG4gICAgcHJpdmF0ZSBkaXNjb3VyYWdlT3ZlcnJpZGluZ09mUHJlZGVmaW5lZFZhcmlhYmxlcyAocHJlZGVmaW5lZFZhcmlhYmxlczoge1tuYW1lOiBzdHJpbmddOiBzdHJpbmd9LCB1c2VyRGVmaW5lZFZhcmlhYmxlczoge1tuYW1lOiBzdHJpbmddOiBzdHJpbmd9KSB7XG4gICAgICAgIGNvbnN0IHByZWRlZmluZWRWYXJpYWJsZXNLZXlzID0gT2JqZWN0LmtleXMocHJlZGVmaW5lZFZhcmlhYmxlcyk7XG4gICAgICAgIGNvbnN0IHVzZXJEZWZpbmVkVmFyaWFibGVzS2V5cyA9IE9iamVjdC5rZXlzKHVzZXJEZWZpbmVkVmFyaWFibGVzKTtcblxuICAgICAgICBjb25zdCBvdmVycmlkaW5nT2ZQcmVkZWZpbmVkVmFyaWFibGVzID0gdXNlckRlZmluZWRWYXJpYWJsZXNLZXlzLmZpbHRlcihlbGUgPT4gcHJlZGVmaW5lZFZhcmlhYmxlc0tleXMuaW5jbHVkZXMoZWxlKSk7XG4gICAgICAgIGlmIChvdmVycmlkaW5nT2ZQcmVkZWZpbmVkVmFyaWFibGVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaW5rVG9HaXRsYWIgPSBcImh0dHBzOi8vZ2l0bGFiLmNvbS9naXRsYWItb3JnL2dpdGxhYi8tL2Jsb2IvdjE3LjcuMS1lZS9kb2MvY2kvdmFyaWFibGVzL3ByZWRlZmluZWRfdmFyaWFibGVzLm1kP3BsYWluPTEmcmVmX3R5cGU9dGFncyNMMTUtMTZcIjtcbiAgICAgICAgdGhpcy53cml0ZVN0cmVhbXMubWVtb1N0ZG91dChjaGFsa2B7YmdZZWxsb3dCcmlnaHQgIFdBUk4gfSAke3Rlcm1pbmFsTGluayhcIkF2b2lkIG92ZXJyaWRpbmcgcHJlZGVmaW5lZCB2YXJpYWJsZXNcIiwgbGlua1RvR2l0bGFiKX0gW3tib2xkICR7b3ZlcnJpZGluZ09mUHJlZGVmaW5lZFZhcmlhYmxlc319XSBhcyBpdCBjYW4gY2F1c2UgdGhlIHBpcGVsaW5lIHRvIGJlaGF2ZSB1bmV4cGVjdGVkbHkuXFxuYCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBwcmVkZWZpbmVkVmFyaWFibGVzIHRoYXQncyBlbnJpY2hlZCB3aXRoIHRoZSBhZGRpdGlvbmFsIGluZm8gdGhhdCdzIG9ubHkgYXZhaWxhYmxlIHdoZW4gY29uc3RydWN0aW5nXG4gICAgICovXG4gICAgcHJpdmF0ZSBfcHJlZGVmaW5lZFZhcmlhYmxlcyAob3B0OiBKb2JPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGFyZ3YgPSB0aGlzLmFyZ3Y7XG4gICAgICAgIGNvbnN0IGN3ZCA9IGFyZ3YuY3dkO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IHRoaXMuYXJndi5zdGF0ZURpcjtcbiAgICAgICAgY29uc3QgZ2l0RGF0YSA9IHRoaXMuZ2l0RGF0YTtcblxuICAgICAgICBsZXQgY2lCdWlsZHNEaXI6IHN0cmluZztcbiAgICAgICAgaWYgKHRoaXMuam9iRGF0YVtcImltYWdlXCJdKSB7XG4gICAgICAgICAgICBjaUJ1aWxkc0RpciA9IFwiL2J1aWxkc1wiO1xuICAgICAgICAgICAgdGhpcy5jaVByb2plY3REaXIgPSBgJHtjaUJ1aWxkc0Rpcn0vJHtnaXREYXRhLnJlbW90ZS5ncm91cH0vJHtnaXREYXRhLnJlbW90ZS5wcm9qZWN0fWA7XG4gICAgICAgIH0gZWxzZSBpZiAoYXJndi5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgY2lCdWlsZHNEaXIgPSBgJHtjd2R9LyR7c3RhdGVEaXJ9L2J1aWxkcy8ke3RoaXMuc2FmZUpvYk5hbWV9YDtcbiAgICAgICAgICAgIHRoaXMuY2lQcm9qZWN0RGlyID0gY2lCdWlsZHNEaXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaUJ1aWxkc0RpciA9IGN3ZDtcbiAgICAgICAgICAgIHRoaXMuY2lQcm9qZWN0RGlyID0gY2lCdWlsZHNEaXI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcmVkZWZpbmVkVmFyaWFibGVzID0gb3B0LnByZWRlZmluZWRWYXJpYWJsZXM7XG5cbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX0pPQl9JRFwiXSA9IGAke3RoaXMuam9iSWR9YDtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX1BJUEVMSU5FX0lEXCJdID0gYCR7dGhpcy5waXBlbGluZUlpZCArIDEwMDB9YDtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX1BJUEVMSU5FX0lJRFwiXSA9IGAke3RoaXMucGlwZWxpbmVJaWR9YDtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX0pPQl9OQU1FXCJdID0gYCR7dGhpcy5uYW1lfWA7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9KT0JfTkFNRV9TTFVHXCJdID0gYCR7dGhpcy5uYW1lLnJlcGxhY2UoL1teYS16XFxkXSsvaWcsIFwiLVwiKS5yZXBsYWNlKC9eLS8sIFwiXCIpLnNsaWNlKDAsIDYzKS5yZXBsYWNlKC8tJC8sIFwiXCIpLnRvTG93ZXJDYXNlKCl9YDtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX0pPQl9TVEFHRVwiXSA9IGAke3RoaXMuc3RhZ2V9YDtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX0JVSUxEU19ESVJcIl0gPSBjaUJ1aWxkc0RpcjtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX1BST0pFQ1RfRElSXCJdID0gdGhpcy5jaVByb2plY3REaXI7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9KT0JfVVJMXCJdID0gYCR7cHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX1NFUlZFUl9VUkxcIl19LyR7Z2l0RGF0YS5yZW1vdGUuZ3JvdXB9LyR7Z2l0RGF0YS5yZW1vdGUucHJvamVjdH0vLS9qb2JzLyR7dGhpcy5qb2JJZH1gOyAvLyBDaGFuZ2VzIG9uIHJlcnVuLlxuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfUElQRUxJTkVfVVJMXCJdID0gYCR7cHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX1NFUlZFUl9VUkxcIl19LyR7Z2l0RGF0YS5yZW1vdGUuZ3JvdXB9LyR7Z2l0RGF0YS5yZW1vdGUucHJvamVjdH0vcGlwZWxpbmVzLyR7dGhpcy5waXBlbGluZUlpZH1gO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfRU5WSVJPTk1FTlRfTkFNRVwiXSA9IHRoaXMuZW52aXJvbm1lbnQ/Lm5hbWUgPz8gXCJcIjtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX0VOVklST05NRU5UX1NMVUdcIl0gPSB0aGlzLmVudmlyb25tZW50Py5uYW1lPy5yZXBsYWNlKC9bXmEtelxcZF0rL2lnLCBcIi1cIikucmVwbGFjZSgvXi0vLCBcIlwiKS5zbGljZSgwLCAyMykucmVwbGFjZSgvLSQvLCBcIlwiKS50b0xvd2VyQ2FzZSgpID8/IFwiXCI7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9FTlZJUk9OTUVOVF9VUkxcIl0gPSB0aGlzLmVudmlyb25tZW50Py51cmwgPz8gXCJcIjtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX0VOVklST05NRU5UX1RJRVJcIl0gPSB0aGlzLmVudmlyb25tZW50Py5kZXBsb3ltZW50X3RpZXIgPz8gXCJcIjtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX0VOVklST05NRU5UX0FDVElPTlwiXSA9IHRoaXMuZW52aXJvbm1lbnQ/LmFjdGlvbiA/PyBcIlwiO1xuXG4gICAgICAgIGlmIChvcHQubm9kZUluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfTk9ERV9JTkRFWFwiXSA9IGAke29wdC5ub2RlSW5kZXh9YDtcbiAgICAgICAgfVxuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfTk9ERV9UT1RBTFwiXSA9IGAke29wdC5ub2Rlc1RvdGFsfWA7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9SRUdJU1RSWVwiXSA9IGBsb2NhbC1yZWdpc3RyeS4ke3RoaXMuZ2l0RGF0YS5yZW1vdGUuaG9zdH1gO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfUkVHSVNUUllfSU1BR0VcIl0gPSBgJENJX1JFR0lTVFJZLyR7cHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX1BST0pFQ1RfUEFUSFwiXS50b0xvd2VyQ2FzZSgpfWA7XG4gICAgICAgIHJldHVybiBwcmVkZWZpbmVkVmFyaWFibGVzO1xuICAgIH1cblxuICAgIGdldCBqb2JTdGF0dXMgKCkge1xuICAgICAgICBpZiAodGhpcy5wcmVTY3JpcHRzRXhpdENvZGUgPT0gbnVsbCkgcmV0dXJuIFwicGVuZGluZ1wiO1xuICAgICAgICBpZiAodGhpcy5wcmVTY3JpcHRzRXhpdENvZGUgPT0gMCkgcmV0dXJuIFwic3VjY2Vzc1wiO1xuXG4gICAgICAgIGxldCBhbGxvd2VkRXhpdENvZGVzID0gWzBdO1xuICAgICAgICBjb25zdCBhbGxvd0ZhaWx1cmUgPSB0aGlzLmFsbG93RmFpbHVyZTtcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgYWxsb3dGYWlsdXJlKSB7XG4gICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgICAgIGlmIChhbGxvd0ZhaWx1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEV4aXRDb2RlcyA9IFt0aGlzLnByZVNjcmlwdHNFeGl0Q29kZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgICAgIGlmICghIEFycmF5LmlzQXJyYXkoYWxsb3dGYWlsdXJlLmV4aXRfY29kZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRFeGl0Q29kZXMgPSBbYWxsb3dGYWlsdXJlLmV4aXRfY29kZXNdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRFeGl0Q29kZXMgPSBhbGxvd0ZhaWx1cmUuZXhpdF9jb2RlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB0eXBlOiAgJHt0eXBlb2YgYWxsb3dGYWlsdXJlfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFsbG93ZWRFeGl0Q29kZXMuaW5jbHVkZXModGhpcy5wcmVTY3JpcHRzRXhpdENvZGUpID8gXCJ3YXJuaW5nXCIgOiBcImZhaWxlZFwiO1xuICAgIH1cblxuICAgIGdldCBhcnRpZmFjdHNUb1NvdXJjZSAoKSB7XG4gICAgICAgIGlmICh0aGlzLmpvYkRhdGFbXCJnY2xBcnRpZmFjdHNUb1NvdXJjZVwiXSAhPSBudWxsKSByZXR1cm4gdGhpcy5qb2JEYXRhW1wiZ2NsQXJ0aWZhY3RzVG9Tb3VyY2VcIl07XG4gICAgICAgIHJldHVybiB0aGlzLmFyZ3YuYXJ0aWZhY3RzVG9Tb3VyY2U7XG4gICAgfVxuXG4gICAgZ2V0IHByZXR0eUR1cmF0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2VuZFRpbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBwcmV0dHlIcnRpbWUodGhpcy5fZW5kVGltZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRUaW1lID9cbiAgICAgICAgICAgIHByZXR0eUhydGltZShwcm9jZXNzLmhydGltZSh0aGlzLl9zdGFydFRpbWUpKSA6XG4gICAgICAgICAgICBcIjAgbXNcIjtcbiAgICB9XG5cbiAgICBnZXQgZm9ybWF0dGVkSm9iTmFtZSAoKSB7XG4gICAgICAgIGxldCBwcmVmaXggPSBcIlwiO1xuICAgICAgICBpZiAodGhpcy5hcmd2LmNoaWxkUGlwZWxpbmVEZXB0aCA+IDApIHByZWZpeCA9IFwiXFx0XCIucmVwZWF0KHRoaXMuYXJndi5jaGlsZFBpcGVsaW5lRGVwdGgpICsgYFske3RoaXMuYXJndi52YXJpYWJsZS5HQ0xfVFJJR0dFUkVSfV0gLT4gYDtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wUHJlZml4ID0gdGhpcy5hcmd2LnNob3dUaW1lc3RhbXBzID9cbiAgICAgICAgICAgIGBbJHtkYXRlRm9ybWF0dGVyLmZvcm1hdChuZXcgRGF0ZSgpKX0gJHt0aGlzLnByZXR0eUR1cmF0aW9uLnBhZFN0YXJ0KDcpfV0gYCA6XG4gICAgICAgICAgICBcIlwiO1xuXG4gICAgICAgIC8vIFsxNjozMzoxOSAxLjM3IG1pbl0gbXktam9iICAgICA+IGhlbGxvIHdvcmxkXG4gICAgICAgIHJldHVybiBjaGFsa2Ake3RpbWVzdGFtcFByZWZpeH17Ymx1ZUJyaWdodCAke3ByZWZpeH0ke3RoaXMubmFtZS5wYWRFbmQodGhpcy5qb2JOYW1lUGFkKX19YDtcbiAgICB9XG5cbiAgICBnZXQgc2FmZUpvYk5hbWUgKCkge1xuICAgICAgICByZXR1cm4gVXRpbHMuc2FmZURvY2tlclN0cmluZyh0aGlzLm5hbWUpO1xuICAgIH1cblxuICAgIGdldCBuZWVkcyAoKTogTmVlZFtdIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJuZWVkc1wiXSA/PyBudWxsO1xuICAgIH1cblxuICAgIGdldCBidWlsZFZvbHVtZU5hbWUgKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgZ2NsLSR7dGhpcy5zYWZlSm9iTmFtZX0tJHt0aGlzLmpvYklkfS1idWlsZGA7XG4gICAgfVxuXG4gICAgZ2V0IHRtcFZvbHVtZU5hbWUgKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgZ2NsLSR7dGhpcy5zYWZlSm9iTmFtZX0tJHt0aGlzLmpvYklkfS10bXBgO1xuICAgIH1cblxuICAgIGdldCBzZXJ2aWNlcyAoKTogU2VydmljZVtdIHtcbiAgICAgICAgY29uc3Qgc2VydmljZXM6IFNlcnZpY2VbXSA9IFtdO1xuICAgICAgICBpZiAoIXRoaXMuam9iRGF0YVtcInNlcnZpY2VzXCJdKSByZXR1cm4gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBzZXJ2aWNlIG9mIE9iamVjdC52YWx1ZXM8YW55Pih0aGlzLmpvYkRhdGFbXCJzZXJ2aWNlc1wiXSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gVXRpbHMuZXhwYW5kVmFyaWFibGVzKHsuLi50aGlzLl92YXJpYWJsZXMsIC4uLnRoaXMuX2RvdGVudlZhcmlhYmxlcywgLi4uc2VydmljZVtcInZhcmlhYmxlc1wiXX0pO1xuICAgICAgICAgICAgbGV0IHNlcnZpY2VOYW1lID0gVXRpbHMuZXhwYW5kVGV4dChzZXJ2aWNlW1wibmFtZVwiXSwgZXhwYW5kZWQpO1xuICAgICAgICAgICAgaWYgKHNlcnZpY2VOYW1lID09IFwiXCIpIGNvbnRpbnVlO1xuICAgICAgICAgICAgc2VydmljZU5hbWUgPSBzZXJ2aWNlTmFtZS5pbmNsdWRlcyhcIjpcIikgPyBzZXJ2aWNlTmFtZSA6IGAke3NlcnZpY2VOYW1lfTpsYXRlc3RgO1xuICAgICAgICAgICAgc2VydmljZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgbmFtZTogc2VydmljZU5hbWUsXG4gICAgICAgICAgICAgICAgZW50cnlwb2ludDogc2VydmljZVtcImVudHJ5cG9pbnRcIl0gPz8gbnVsbCxcbiAgICAgICAgICAgICAgICBjb21tYW5kOiBzZXJ2aWNlW1wiY29tbWFuZFwiXSA/PyBudWxsLFxuICAgICAgICAgICAgICAgIHZhcmlhYmxlczogZXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgYWxpYXM6IFV0aWxzLmV4cGFuZFRleHQoc2VydmljZVtcImFsaWFzXCJdLCBleHBhbmRlZCkgPz8gbnVsbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJ2aWNlcztcbiAgICB9XG5cbiAgICBzZXQgY2lQcm9qZWN0RGlyIChjaVByb2plY3REaXI6IHN0cmluZykge1xuICAgICAgICBhc3NlcnQodGhpcy5fY2lQcm9qZWN0RGlyID09IG51bGwsIFwidGhpcy5fY2lQcm9qZWN0RGlyIGNhbiBvbmx5IGJlIHNldCBvbmNlXCIpO1xuICAgICAgICB0aGlzLl9jaVByb2plY3REaXIgPSBjaVByb2plY3REaXI7XG4gICAgfVxuICAgIGdldCBjaVByb2plY3REaXIgKCkge1xuICAgICAgICBhc3NlcnQodGhpcy5fY2lQcm9qZWN0RGlyLCBcImF0dGVtcHRlZCB0byBhY2Nlc3MgdGhpcy5fY2lQcm9qZWN0RGlyIGJlZm9yZSBpdCBpcyBpbml0aWFsaXplZFwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NpUHJvamVjdERpcjtcbiAgICB9XG5cbiAgICBzZXQgam9iTmFtZVBhZCAoam9iTmFtZVBhZDogbnVtYmVyKSB7XG4gICAgICAgIGFzc2VydCh0aGlzLl9qb2JOYW1lUGFkID09IG51bGwsIFwidGhpcy5fam9iTmFtZVBhZCBjYW4gb25seSBiZSBzZXQgb25jZVwiKTtcbiAgICAgICAgdGhpcy5fam9iTmFtZVBhZCA9IGpvYk5hbWVQYWQ7XG4gICAgfVxuXG4gICAgZ2V0IGpvYk5hbWVQYWQgKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9qb2JOYW1lUGFkID8/IDA7XG4gICAgfVxuXG4gICAgZ2V0IHByb2R1Y2VycyAoKToge25hbWU6IHN0cmluZzsgZG90ZW52OiBzdHJpbmcgfCBudWxsfVtdIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9kdWNlcnM7XG4gICAgfVxuXG4gICAgc2V0IHByb2R1Y2VycyAocHJvZHVjZXJzOiB7bmFtZTogc3RyaW5nOyBkb3RlbnY6IHN0cmluZyB8IG51bGx9W10gfCBudWxsKSB7XG4gICAgICAgIGFzc2VydCh0aGlzLl9wcm9kdWNlcnMgPT0gbnVsbCwgXCJ0aGlzLl9wcm9kdWNlcnMgY2FuIG9ubHkgYmUgc2V0IG9uY2VcIik7XG4gICAgICAgIHRoaXMuX3Byb2R1Y2VycyA9IHByb2R1Y2VycztcbiAgICB9XG5cbiAgICBnZXQgc3RhZ2UgKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJzdGFnZVwiXSB8fCBcInRlc3RcIjtcbiAgICB9XG5cbiAgICBnZXQgaW50ZXJhY3RpdmUgKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wiZ2NsSW50ZXJhY3RpdmVcIl0gfHwgZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IGluamVjdFNTSEFnZW50ICgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcImdjbEluamVjdFNTSEFnZW50XCJdIHx8IGZhbHNlO1xuICAgIH1cblxuICAgIGdldCBkZXNjcmlwdGlvbiAoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcImdjbERlc2NyaXB0aW9uXCJdID8/IFwiXCI7XG4gICAgfVxuXG4gICAgZ2V0IGFydGlmYWN0cyAoKToge3BhdGhzOiBzdHJpbmdbXTsgZXhjbHVkZT86IHN0cmluZ1tdOyByZXBvcnRzPzoge2RvdGVudj86IHN0cmluZ307IHdoZW4/OiBzdHJpbmd9IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJhcnRpZmFjdHNcIl07XG4gICAgfVxuXG4gICAgZGVsZXRlQXJ0aWZhY3RzICgpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuam9iRGF0YVtcImFydGlmYWN0c1wiXTtcbiAgICB9XG5cbiAgICBnZXQgY2FjaGUgKCk6IENhY2hlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wiY2FjaGVcIl0gfHwgW107XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFVuaXF1ZUNhY2hlTmFtZSAoY3dkOiBzdHJpbmcsIGV4cGFuZGVkOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSwgY2FjaGVJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGdldENhY2hlUHJlZml4ID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IHRoaXMuam9iRGF0YVtcImNhY2hlXCJdW2luZGV4XVtcImtleVwiXVtcInByZWZpeFwiXTtcbiAgICAgICAgICAgIGlmIChwcmVmaXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7aW5kZXh9XyR7VXRpbHMuZXhwYW5kVGV4dChwcmVmaXgsIGV4cGFuZGVkKX0tYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmlsZW5hbWVzID0gdGhpcy5qb2JEYXRhW1wiY2FjaGVcIl1baW5kZXhdW1wia2V5XCJdW1wiZmlsZXNcIl0ubWFwKChwOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBhbmRQID0gVXRpbHMuZXhwYW5kVGV4dChwLCBleHBhbmRlZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4cGFuZFAuc3BsaXQoXCIuXCIpWzBdO1xuICAgICAgICAgICAgfSkuam9pbihcIl9cIik7XG4gICAgICAgICAgICByZXR1cm4gYCR7aW5kZXh9XyR7ZmlsZW5hbWVzfS1gO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuam9iRGF0YVtcImNhY2hlXCJdW2NhY2hlSW5kZXhdLmtleTtcblxuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIiB8fCBrZXkgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFV0aWxzLmV4cGFuZFRleHQoa2V5ID8/IFwiZGVmYXVsdFwiLCBleHBhbmRlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlcyA9IGtleVtcImZpbGVzXCJdLm1hcCgoZjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGF0aCA9IFV0aWxzLmV4cGFuZFRleHQoZiwgZXhwYW5kZWQpO1xuICAgICAgICAgICAgaWYgKHBhdGguc3RhcnRzV2l0aChgJHt0aGlzLmNpUHJvamVjdERpcn0vYCkpIHtcbiAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5zbGljZShgJHt0aGlzLmNpUHJvamVjdERpcn0vYC5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGAke2N3ZH0vJHtwYXRofWA7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZ2V0Q2FjaGVQcmVmaXgoY2FjaGVJbmRleCkgKyBhd2FpdCBVdGlscy5jaGVja3N1bUZpbGVzKGN3ZCwgZmlsZXMpO1xuICAgIH1cblxuICAgIGdldCBiZWZvcmVTY3JpcHRzICgpOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IGJlZm9yZVNjcmlwdHMgPSB0aGlzLmpvYkRhdGFbXCJiZWZvcmVfc2NyaXB0XCJdIHx8IFtdO1xuICAgICAgICByZXR1cm4gdHlwZW9mIGJlZm9yZVNjcmlwdHMgPT09IFwic3RyaW5nXCIgPyBbYmVmb3JlU2NyaXB0c10gOiBiZWZvcmVTY3JpcHRzO1xuICAgIH1cblxuICAgIGdldCBhZnRlclNjcmlwdHMgKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgYWZ0ZXJTY3JpcHRzID0gdGhpcy5qb2JEYXRhW1wiYWZ0ZXJfc2NyaXB0XCJdIHx8IFtdO1xuICAgICAgICByZXR1cm4gdHlwZW9mIGFmdGVyU2NyaXB0cyA9PT0gXCJzdHJpbmdcIiA/IFthZnRlclNjcmlwdHNdIDogYWZ0ZXJTY3JpcHRzO1xuICAgIH1cblxuICAgIGdldCBzY3JpcHRzICgpOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IHNjcmlwdCA9IHRoaXMuam9iRGF0YVtcInNjcmlwdFwiXTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBzY3JpcHQgPT09IFwic3RyaW5nXCIgPyBbc2NyaXB0XSA6IHNjcmlwdDtcbiAgICB9XG5cbiAgICBnZXQgdHJpZ2dlciAoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcInRyaWdnZXJcIl07XG4gICAgfVxuXG4gICAgYXN5bmMgc3RhcnRUcmlnZ2VyUGlwZWxpbmUgKCkge1xuICAgICAgICB0aGlzLndyaXRlU3RyZWFtcy5tZW1vU3Rkb3V0KGNoYWxrYHtiZ1llbGxvd0JyaWdodCAgV0FSTiB9IGRvd25zdHJlYW0gcGlwZWxpbmUgaXMgZXhwZXJpbWVudGFsIGluIGdpdGxhYi1jaS1sb2NhbFxcbmApO1xuICAgICAgICBhd2FpdCB0aGlzLmZldGNoVHJpZ2dlckluY2x1ZGUoKTtcbiAgICAgICAgY29uc3QgdmFyaWFibGVzRm9yRG93bnN0cmVhbVBpcGVsaW5lID0gT2JqZWN0LmVudHJpZXMoey4uLnRoaXMuZ2xvYmFsVmFyaWFibGVzLCAuLi50aGlzLmpvYkRhdGEudmFyaWFibGVzfSkubWFwKChba2V5LCB2YWx1ZV0pID0+IGAke2tleX09JHt2YWx1ZX1gKTtcblxuICAgICAgICBjb25zdCBnY2xUcmlnZ2VyZXIgPSB0aGlzLmFyZ3YudmFyaWFibGVbXCJHQ0xfVFJJR0dFUkVSXCJdID9cbiAgICAgICAgICAgIGAke3RoaXMuYXJndi52YXJpYWJsZVtcIkdDTF9UUklHR0VSRVJcIl19IC0+ICR7dGhpcy5uYW1lfWAgOlxuICAgICAgICAgICAgdGhpcy5uYW1lO1xuICAgICAgICBhd2FpdCBoYW5kbGVyKHtcbiAgICAgICAgICAgIC4uLk9iamVjdC5mcm9tRW50cmllcyh0aGlzLmFyZ3YubWFwKSxcbiAgICAgICAgICAgIGZpbGU6IGAke3RoaXMuYXJndi5zdGF0ZURpcn0vaW5jbHVkZXMvdHJpZ2dlcnMvJHt0aGlzLm5hbWV9LnltbGAsXG4gICAgICAgICAgICB2YXJpYWJsZTogW1xuICAgICAgICAgICAgICAgIGNoYWxrYEdDTF9UUklHR0VSRVI9JHtnY2xUcmlnZ2VyZXJ9YCxcbiAgICAgICAgICAgICAgICBcIkNJX1BJUEVMSU5FX1NPVVJDRT1wYXJlbnRfcGlwZWxpbmVcIixcbiAgICAgICAgICAgIF0uY29uY2F0KHZhcmlhYmxlc0ZvckRvd25zdHJlYW1QaXBlbGluZSksXG4gICAgICAgIH0sIHRoaXMud3JpdGVTdHJlYW1zLCBbXSwgdGhpcy5hcmd2LmNoaWxkUGlwZWxpbmVEZXB0aCArIDEpO1xuICAgIH1cblxuICAgIGdldCBwcmVTY3JpcHRzRXhpdENvZGUgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlO1xuICAgIH1cblxuICAgIGdldCBhZnRlclNjcmlwdHNFeGl0Q29kZSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZnRlclNjcmlwdHNFeGl0Q29kZTtcbiAgICB9XG5cbiAgICBnZXQgc3RhcnRlZCAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydW5uaW5nIHx8IHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICBnZXQgZmluaXNoZWQgKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuX3J1bm5pbmcgJiYgdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlICE9PSBudWxsO1xuICAgIH1cblxuICAgIGdldCBjb3ZlcmFnZVBlcmNlbnQgKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fY292ZXJhZ2VQZXJjZW50O1xuICAgIH1cblxuICAgIGdldCBmaWxlVmFyaWFibGVzRGlyICgpIHtcbiAgICAgICAgcmV0dXJuIGAvdG1wL2dpdGxhYi1jaS1sb2NhbC1maWxlLXZhcmlhYmxlcy0ke3RoaXMuX3ZhcmlhYmxlc1tcIkNJX1BST0pFQ1RfUEFUSF9TTFVHXCJdfS0ke3RoaXMuam9iSWR9YDtcbiAgICB9XG5cbiAgICBnZXQgZ2xvYmFsVmFyaWFibGVzICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5oZXJpdC52YXJpYWJsZXMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmluaGVyaXQudmFyaWFibGVzKSkge1xuICAgICAgICAgICAgY29uc3QgaW5oZXJpdFZhcmlhYmxlcyA9IHRoaXMuaW5oZXJpdC52YXJpYWJsZXM7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuX2dsb2JhbFZhcmlhYmxlcykuZmlsdGVyKChba10pID0+IGluaGVyaXRWYXJpYWJsZXMuaW5jbHVkZXMoaykpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZ2xvYmFsVmFyaWFibGVzO1xuICAgIH1cblxuICAgIGFzeW5jIHN0YXJ0ICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMudHJpZ2dlcikge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zdGFydFRyaWdnZXJQaXBlbGluZSgpO1xuICAgICAgICAgICAgdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlID0gMDsgLy8gTk9URTogc28gdGhhdCBgdGhpcy5maW5pc2hlZGAgd2lsbCBpbXBsaWNpdGx5IGJlIHNldCB0byB0cnVlXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9ydW5uaW5nID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBhcmd2ID0gdGhpcy5hcmd2O1xuICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICB0aGlzLl92YXJpYWJsZXNbXCJDSV9KT0JfU1RBUlRFRF9BVFwiXSA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIi5cIilbMF0gKyBcIlpcIjtcbiAgICAgICAgY29uc3Qgd3JpdGVTdHJlYW1zID0gdGhpcy53cml0ZVN0cmVhbXM7XG4gICAgICAgIHRoaXMuX2RvdGVudlZhcmlhYmxlcyA9IGF3YWl0IHRoaXMuaW5pdFByb2R1Y2VyUmVwb3J0c0RvdGVudlZhcmlhYmxlcyh3cml0ZVN0cmVhbXMsIFV0aWxzLmV4cGFuZFZhcmlhYmxlcyh0aGlzLl92YXJpYWJsZXMpKTtcbiAgICAgICAgY29uc3QgZXhwYW5kZWQgPSBVdGlscy51bnNjYXBlJCRWYXJpYWJsZXMoVXRpbHMuZXhwYW5kVmFyaWFibGVzKHsuLi50aGlzLl92YXJpYWJsZXMsIC4uLnRoaXMuX2RvdGVudlZhcmlhYmxlc30pKTtcbiAgICAgICAgY29uc3QgaW1hZ2VOYW1lID0gdGhpcy5pbWFnZU5hbWUoZXhwYW5kZWQpO1xuICAgICAgICBjb25zdCBoZWxwZXJJbWFnZU5hbWUgPSBhcmd2LmhlbHBlckltYWdlO1xuICAgICAgICBjb25zdCBzYWZlSm9iTmFtZSA9IHRoaXMuc2FmZUpvYk5hbWU7XG5cbiAgICAgICAgY29uc3Qgb3V0cHV0TG9nRmlsZVBhdGggPSBgJHthcmd2LmN3ZH0vJHthcmd2LnN0YXRlRGlyfS9vdXRwdXQvJHtzYWZlSm9iTmFtZX0ubG9nYDtcbiAgICAgICAgYXdhaXQgZnMuZW5zdXJlRmlsZShvdXRwdXRMb2dGaWxlUGF0aCk7XG4gICAgICAgIGF3YWl0IGZzLnRydW5jYXRlKG91dHB1dExvZ0ZpbGVQYXRoKTtcblxuICAgICAgICBpZiAoIXRoaXMuaW50ZXJhY3RpdmUpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IHN0YXJ0aW5nfSAke2ltYWdlTmFtZSA/PyBcInNoZWxsXCJ9ICh7eWVsbG93ICR7dGhpcy5zdGFnZX19KVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGltYWdlTmFtZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wdWxsSW1hZ2Uod3JpdGVTdHJlYW1zLCBpbWFnZU5hbWUpO1xuXG4gICAgICAgICAgICBjb25zdCBidWlsZFZvbHVtZU5hbWUgPSB0aGlzLmJ1aWxkVm9sdW1lTmFtZTtcbiAgICAgICAgICAgIGNvbnN0IHRtcFZvbHVtZU5hbWUgPSB0aGlzLnRtcFZvbHVtZU5hbWU7XG4gICAgICAgICAgICBjb25zdCBmaWxlVmFyaWFibGVzRGlyID0gdGhpcy5maWxlVmFyaWFibGVzRGlyO1xuXG4gICAgICAgICAgICBjb25zdCB2b2x1bWVQcm9taXNlcyA9IFtdO1xuICAgICAgICAgICAgdm9sdW1lUHJvbWlzZXMucHVzaChVdGlscy5zcGF3bihbdGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUsIFwidm9sdW1lXCIsIFwiY3JlYXRlXCIsIGAke2J1aWxkVm9sdW1lTmFtZX1gXSwgYXJndi5jd2QpKTtcbiAgICAgICAgICAgIHZvbHVtZVByb21pc2VzLnB1c2goVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcInZvbHVtZVwiLCBcImNyZWF0ZVwiLCBgJHt0bXBWb2x1bWVOYW1lfWBdLCBhcmd2LmN3ZCkpO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyVm9sdW1lTmFtZXMucHVzaChidWlsZFZvbHVtZU5hbWUpO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyVm9sdW1lTmFtZXMucHVzaCh0bXBWb2x1bWVOYW1lKTtcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHZvbHVtZVByb21pc2VzKTtcblxuICAgICAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hMb25nUnVubmluZ1NpbGVudFRpbWVvdXQod3JpdGVTdHJlYW1zKTtcblxuICAgICAgICAgICAgbGV0IGNob3duT3B0ID0gXCIwOjBcIjtcbiAgICAgICAgICAgIGxldCBjaG1vZE9wdCA9IFwiYStyd1wiO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmFyZ3YudW1hc2spIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IFV0aWxzLnNwYXduKFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJydW5cIiwgXCItLXJtXCIsIFwiLS1lbnRyeXBvaW50XCIsIFwic2hcIiwgaW1hZ2VOYW1lLCBcIi1jXCIsIFwiZWNobyBcXFwiJChpZCAtdSk6JChpZCAtZylcXFwiXCJdKTtcbiAgICAgICAgICAgICAgICBjaG93bk9wdCA9IHN0ZG91dDtcbiAgICAgICAgICAgICAgICBpZiAoY2hvd25PcHQgPT0gXCIwOjBcIikge1xuICAgICAgICAgICAgICAgICAgICBjaG1vZE9wdCA9IFwiZy13XCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhlbHBlckltYWdlTmFtZSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHVsbEltYWdlKHdyaXRlU3RyZWFtcywgaGVscGVySW1hZ2VOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHtzdGRvdXQ6IGNvbnRhaW5lcklkfSA9IGF3YWl0IFV0aWxzLnNwYXduKFtcbiAgICAgICAgICAgICAgICB0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJjcmVhdGVcIiwgXCItLXVzZXI9MDowXCIsIGAtLXZvbHVtZT0ke2J1aWxkVm9sdW1lTmFtZX06JHt0aGlzLmNpUHJvamVjdERpcn1gLCBgLS12b2x1bWU9JHt0bXBWb2x1bWVOYW1lfToke3RoaXMuZmlsZVZhcmlhYmxlc0Rpcn1gLCBgJHtoZWxwZXJJbWFnZU5hbWV9YCxcbiAgICAgICAgICAgICAgICAuLi5bXCJzaFwiLCBcIi1jXCIsIGBjaG93biAke2Nob3duT3B0fSAtUiAke3RoaXMuY2lQcm9qZWN0RGlyfSAmJiBjaG1vZCAke2NobW9kT3B0fSAtUiAke3RoaXMuY2lQcm9qZWN0RGlyfSAmJiBjaG93biAke2Nob3duT3B0fSAtUiAvdG1wLyAmJiBjaG1vZCAke2NobW9kT3B0fSAtUiAvdG1wL2BdLFxuICAgICAgICAgICAgXSwgYXJndi5jd2QpO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyc1RvQ2xlYW4ucHVzaChjb250YWluZXJJZCk7XG4gICAgICAgICAgICBpZiAoYXdhaXQgZnMucGF0aEV4aXN0cyhmaWxlVmFyaWFibGVzRGlyKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJjcFwiLCBgJHtmaWxlVmFyaWFibGVzRGlyfS8uYCwgYCR7Y29udGFpbmVySWR9OiR7ZmlsZVZhcmlhYmxlc0Rpcn1gXSwgYXJndi5jd2QpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcImNwXCIsIGAke2FyZ3Yuc3RhdGVEaXJ9L2J1aWxkcy8uZG9ja2VyLy5gLCBgJHtjb250YWluZXJJZH06JHt0aGlzLmNpUHJvamVjdERpcn1gXSwgYXJndi5jd2QpO1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcInN0YXJ0XCIsIFwiLS1hdHRhY2hcIiwgY29udGFpbmVySWRdLCBhcmd2LmN3ZCk7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbdGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUsIFwicm1cIiwgXCItdmZcIiwgY29udGFpbmVySWRdLCBhcmd2LmN3ZCk7XG4gICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBjb3BpZWQgdG8gJHt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZX0gdm9sdW1lc30gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2VydmljZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gYGhvc3RgIGFuZCBgbm9uZWAgbmV0d29ya3MgZG8gbm90IHdvcmsgd2l0aCBzZXJ2aWNlcyBiZWNhdXNlIGFsaWFzZXMgb25seSB3b3JrIGZvclxuICAgICAgICAgICAgLy8gdXNlciBkZWZpbmVkIG5ldHdvcmtzLlxuICAgICAgICAgICAgZm9yIChjb25zdCBuZXR3b3JrIG9mIHRoaXMuYXJndi5uZXR3b3JrKSB7XG4gICAgICAgICAgICAgICAgaWYgKFtcImhvc3RcIiwgXCJub25lXCJdLmluY2x1ZGVzKG5ldHdvcmspKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcih7bWVzc2FnZTogYENhbm5vdCBhZGQgc2VydmljZSBuZXR3b3JrIGFsaWFzIHdpdGggbmV0d29yayBtb2RlICcke25ldHdvcmt9J2B9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlRG9ja2VyTmV0d29yayhgZ2l0bGFiLWNpLWxvY2FsLSR7dGhpcy5qb2JJZH1gKTtcblxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcy5tYXAoYXN5bmMgKHNlcnZpY2UsIHNlcnZpY2VJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IHNlcnZpY2UubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wdWxsSW1hZ2Uod3JpdGVTdHJlYW1zLCBzZXJ2aWNlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VDb250YWluZXJJZCA9IGF3YWl0IHRoaXMuc3RhcnRTZXJ2aWNlKHdyaXRlU3RyZWFtcywgVXRpbHMuZXhwYW5kVmFyaWFibGVzKHsuLi5leHBhbmRlZCwgLi4uc2VydmljZS52YXJpYWJsZXN9KSwgc2VydmljZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VDb250YWluZXJMb2dGaWxlID0gYCR7YXJndi5jd2R9LyR7YXJndi5zdGF0ZURpcn0vc2VydmljZXMtb3V0cHV0LyR7dGhpcy5zYWZlSm9iTmFtZX0vJHtzZXJ2aWNlTmFtZX0tJHtzZXJ2aWNlSW5kZXh9LmxvZ2A7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2VydmljZUhlYWx0aENoZWNrKHdyaXRlU3RyZWFtcywgc2VydmljZSwgc2VydmljZUluZGV4LCBzZXJ2aWNlQ29udGFpbmVyTG9nRmlsZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHtzdGRvdXQsIHN0ZGVycn0gPSBhd2FpdCBVdGlscy5zcGF3bihbdGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUsIFwibG9nc1wiLCBzZXJ2aWNlQ29udGFpbmVySWRdKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZnMuZW5zdXJlRmlsZShzZXJ2aWNlQ29udGFpbmVyTG9nRmlsZSk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGZzLnByb21pc2VzLndyaXRlRmlsZShzZXJ2aWNlQ29udGFpbmVyTG9nRmlsZSwgYCMjIyBzdGRvdXQgIyMjXFxuJHtzdGRvdXR9XFxuIyMjIHN0ZGVyciAjIyNcXG4ke3N0ZGVycn1cXG5gKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLmV4ZWNQcmVTY3JpcHRzKGV4cGFuZGVkKTtcbiAgICAgICAgaWYgKHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSA9PSBudWxsKSB0aHJvdyBFcnJvcihcInRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSBtdXN0IGJlIGRlZmluZWQhXCIpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuZXhlY0FmdGVyU2NyaXB0cyhleHBhbmRlZCk7XG5cbiAgICAgICAgdGhpcy5fcnVubmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9lbmRUaW1lID0gdGhpcy5fZW5kVGltZSA/PyBwcm9jZXNzLmhydGltZSh0aGlzLl9zdGFydFRpbWUpO1xuICAgICAgICB0aGlzLnByaW50RmluaXNoZWRTdHJpbmcoKTtcblxuICAgICAgICBhd2FpdCB0aGlzLmNvcHlDYWNoZU91dCh0aGlzLndyaXRlU3RyZWFtcywgZXhwYW5kZWQpO1xuICAgICAgICBhd2FpdCB0aGlzLmNvcHlBcnRpZmFjdHNPdXQodGhpcy53cml0ZVN0cmVhbXMsIGV4cGFuZGVkKTtcblxuICAgICAgICBpZiAodGhpcy5qb2JEYXRhW1wiY292ZXJhZ2VcIl0pIHtcbiAgICAgICAgICAgIHRoaXMuX2NvdmVyYWdlUGVyY2VudCA9IGF3YWl0IFV0aWxzLmdldENvdmVyYWdlUGVyY2VudChhcmd2LmN3ZCwgYXJndi5zdGF0ZURpciwgdGhpcy5qb2JEYXRhW1wiY292ZXJhZ2VcIl0sIHNhZmVKb2JOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGNsZWFudXBSZXNvdXJjZXMgKCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fbG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KTtcblxuICAgICAgICBpZiAoIXRoaXMuYXJndi5jbGVhbnVwKSByZXR1cm47XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5lcnNUb0NsZWFuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcInJtXCIsIFwiLXZmXCIsIC4uLnRoaXMuX2NvbnRhaW5lcnNUb0NsZWFuXSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGUgaW5zdGFuY2VvZiBFcnJvciwgXCJlIGlzIG5vdCBpbnN0YW5jZW9mIEVycm9yXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3NlcnZpY2VOZXR3b3JrSWQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcIm5ldHdvcmtcIiwgXCJybVwiLCBgJHt0aGlzLl9zZXJ2aWNlTmV0d29ya0lkfWBdKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZSBpbnN0YW5jZW9mIEVycm9yLCBcImUgaXMgbm90IGluc3RhbmNlb2YgRXJyb3JcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fY29udGFpbmVyVm9sdW1lTmFtZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbdGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUsIFwidm9sdW1lXCIsIFwicm1cIiwgLi4udGhpcy5fY29udGFpbmVyVm9sdW1lTmFtZXNdKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZSBpbnN0YW5jZW9mIEVycm9yLCBcImUgaXMgbm90IGluc3RhbmNlb2YgRXJyb3JcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBybVByb21pc2VzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiB0aGlzLl9maWxlc1RvUm0pIHtcbiAgICAgICAgICAgIHJtUHJvbWlzZXMucHVzaChmcy5ybShmaWxlLCB7cmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZX0pKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChybVByb21pc2VzKTtcblxuICAgICAgICBjb25zdCBmaWxlVmFyaWFibGVzRGlyID0gdGhpcy5maWxlVmFyaWFibGVzRGlyO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZnMucm0oZmlsZVZhcmlhYmxlc0Rpciwge3JlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWV9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXNzZXJ0KGUgaW5zdGFuY2VvZiBFcnJvciwgXCJlIGlzIG5vdCBpbnN0YW5jZW9mIEVycm9yXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUluamVjdFNTSEFnZW50T3B0aW9ucyAoKSB7XG4gICAgICAgIGlmICghdGhpcy5pbmplY3RTU0hBZ2VudCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09IFwiZGFyd2luXCIgfHwgL15kYXJ3aW4vLmV4ZWMocHJvY2Vzcy5lbnYuT1NUWVBFID8/IFwiXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCItLWVudiBTU0hfQVVUSF9TT0NLPS9ydW4vaG9zdC1zZXJ2aWNlcy9zc2gtYXV0aC5zb2NrIC12IC9ydW4vaG9zdC1zZXJ2aWNlcy9zc2gtYXV0aC5zb2NrOi9ydW4vaG9zdC1zZXJ2aWNlcy9zc2gtYXV0aC5zb2NrXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAtLWVudiBTU0hfQVVUSF9TT0NLPSR7cHJvY2Vzcy5lbnYuU1NIX0FVVEhfU09DS30gLXYgJHtwcm9jZXNzLmVudi5TU0hfQVVUSF9TT0NLfToke3Byb2Nlc3MuZW52LlNTSF9BVVRIX1NPQ0t9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlU2NyaXB0Q29tbWFuZHMgKHNjcmlwdHM6IHN0cmluZ1tdKSB7XG4gICAgICAgIGxldCBjbWQgPSBcIlwiO1xuICAgICAgICBzY3JpcHRzLmZvckVhY2goKHNjcmlwdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3BsaXQgPSBzY3JpcHQuc3BsaXQoL1xccj9cXG4vKTtcbiAgICAgICAgICAgIGNvbnN0IG11bHRpbGluZVRleHQgPSBzcGxpdC5sZW5ndGggPiAxID8gXCIgIyBjb2xsYXBzZWQgbXVsdGktbGluZSBjb21tYW5kXCIgOiBcIlwiO1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IHNwbGl0WzBdPy5yZXBsYWNlKC9cXFxcL2csIFwiXFxcXFxcXFxcIikucmVwbGFjZSgvXCIvZywgXCJcXFxcXFxcIlwiKS5yZXBsYWNlKC9bJF0vZywgXCJcXFxcJFwiKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmludGVyYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgY21kICs9IGNoYWxrYGVjaG8gXCJ7Z3JlZW4gJCAke3RleHR9JHttdWx0aWxpbmVUZXh0fX1cIlxcbmA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFByaW50IGNvbW1hbmQgZWNobydlZCB3aXRoICRHQ0xfU0hFTExfUFJPTVBUX1BMQUNFSE9MREVSXG4gICAgICAgICAgICAgICAgY21kICs9IGBlY2hvIFwiJHtHQ0xfU0hFTExfUFJPTVBUX1BMQUNFSE9MREVSfSAke3RleHR9JHttdWx0aWxpbmVUZXh0fVwiXFxuYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEV4ZWN1dGUgYWN0dWFsIHNjcmlwdFxuICAgICAgICAgICAgY21kICs9IGAke3NjcmlwdH1cXG5gO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNtZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIG1vdW50Q2FjaGVDbWQgKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBleHBhbmRlZDoge1trZXk6IHN0cmluZ106IHN0cmluZ30pIHtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VOYW1lKGV4cGFuZGVkKSAmJiAhdGhpcy5hcmd2Lm1vdW50Q2FjaGUpIHJldHVybiBbXTtcblxuICAgICAgICBjb25zdCBjbWQ6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgW2luZGV4LCBjXSBvZiB0aGlzLmNhY2hlLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgdW5pcXVlQ2FjaGVOYW1lID0gYXdhaXQgdGhpcy5nZXRVbmlxdWVDYWNoZU5hbWUodGhpcy5hcmd2LmN3ZCwgZXhwYW5kZWQsIGluZGV4KTtcbiAgICAgICAgICAgIGMucGF0aHMuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBVdGlscy5leHBhbmRUZXh0KHAsIGV4cGFuZGVkKTtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBtb3VudGluZyBjYWNoZX0gZm9yIHBhdGggJHtwYXRofVxcbmApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlTW91bnQgPSBVdGlscy5zYWZlRG9ja2VyU3RyaW5nKGBnY2wtJHtleHBhbmRlZC5DSV9QUk9KRUNUX1BBVEhfU0xVR30tJHt1bmlxdWVDYWNoZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgY21kLnB1c2goXCItdlwiLCBgJHtjYWNoZU1vdW50fToke3RoaXMuY2lQcm9qZWN0RGlyfS8ke3BhdGh9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY21kO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZXhlY1ByZVNjcmlwdHMgKGV4cGFuZGVkOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBwcmVzY3JpcHRzID0gdGhpcy5iZWZvcmVTY3JpcHRzLmNvbmNhdCh0aGlzLnNjcmlwdHMpO1xuICAgICAgICBleHBhbmRlZFtcIkNJX0pPQl9TVEFUVVNcIl0gPSBcInJ1bm5pbmdcIjtcblxuICAgICAgICB0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUgPSBhd2FpdCB0aGlzLmV4ZWNTY3JpcHRzKHByZXNjcmlwdHMsIGV4cGFuZGVkLCBcIlwiKTtcbiAgICAgICAgZXhwYW5kZWRbXCJDSV9KT0JfU1RBVFVTXCJdID0gdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlID09PSAwID8gXCJzdWNjZXNzXCIgOiBcImZhaWxlZFwiO1xuXG4gICAgICAgIHRoaXMucHJpbnRFeGl0ZWRTdHJpbmcodGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGV4ZWNBZnRlclNjcmlwdHMgKGV4cGFuZGVkOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gXCJSdW5uaW5nIGFmdGVyIHNjcmlwdC4uLlwiO1xuICAgICAgICB0aGlzLl9hZnRlclNjcmlwdHNFeGl0Q29kZSA9IGF3YWl0IHRoaXMuZXhlY1NjcmlwdHModGhpcy5hZnRlclNjcmlwdHMsIGV4cGFuZGVkLCBtZXNzYWdlKTtcblxuICAgICAgICB0aGlzLnByaW50QWZ0ZXJTY3JpcHRFeGl0ZWRTdHJpbmcodGhpcy5fYWZ0ZXJTY3JpcHRzRXhpdENvZGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZXhlY1NjcmlwdHMgKHNjcmlwdHM6IHN0cmluZ1tdLCBleHBhbmRlZDoge1trZXk6IHN0cmluZ106IHN0cmluZ30sIG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IGN3ZCA9IHRoaXMuYXJndi5jd2Q7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gdGhpcy5hcmd2LnN0YXRlRGlyO1xuICAgICAgICBjb25zdCBzYWZlSm9iTmFtZSA9IHRoaXMuc2FmZUpvYk5hbWU7XG4gICAgICAgIGNvbnN0IG91dHB1dEZpbGVzUGF0aCA9IGAke2N3ZH0vJHtzdGF0ZURpcn0vb3V0cHV0LyR7c2FmZUpvYk5hbWV9LmxvZ2A7XG4gICAgICAgIGNvbnN0IGJ1aWxkVm9sdW1lTmFtZSA9IHRoaXMuYnVpbGRWb2x1bWVOYW1lO1xuICAgICAgICBjb25zdCB0bXBWb2x1bWVOYW1lID0gdGhpcy50bXBWb2x1bWVOYW1lO1xuICAgICAgICBjb25zdCBpbWFnZU5hbWUgPSB0aGlzLmltYWdlTmFtZShleHBhbmRlZCk7XG4gICAgICAgIGNvbnN0IHdyaXRlU3RyZWFtcyA9IHRoaXMud3JpdGVTdHJlYW1zO1xuXG4gICAgICAgIGlmIChzY3JpcHRzLmxlbmd0aCA9PT0gMCB8fCBzY3JpcHRzWzBdID09IG51bGwpIHJldHVybiAwO1xuXG4gICAgICAgIGlmIChtZXNzYWdlLmxlbmd0aCA+IDApIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHttYWdlbnRhQnJpZ2h0ICR7bWVzc2FnZX19XFxuYCk7XG5cbiAgICAgICAgYXdhaXQgZnMucmVtb3ZlKGAke2N3ZH0vJHtzdGF0ZURpcn0vYXJ0aWZhY3RzLyR7c2FmZUpvYk5hbWV9YCk7XG5cbiAgICAgICAgLy8gQ29weSBnaXQgdHJhY2tlZCBmaWxlcyB0byBidWlsZCBmb2xkZXIgaWYgc2hlbGwgaXNvbGF0aW9uIGVuYWJsZWQuXG4gICAgICAgIGlmICghaW1hZ2VOYW1lICYmIHRoaXMuYXJndi5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMucnN5bmNUcmFja2VkRmlsZXMoY3dkLCBzdGF0ZURpciwgYCR7c2FmZUpvYk5hbWV9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pbnRlcmFjdGl2ZSkge1xuICAgICAgICAgICAgbGV0IGlDbWQgPSBcInNldCAtZW8gcGlwZWZhaWxcXG5cIjtcbiAgICAgICAgICAgIGlDbWQgKz0gdGhpcy5nZW5lcmF0ZVNjcmlwdENvbW1hbmRzKHNjcmlwdHMpO1xuXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUNwID0gZXhlY2EoaUNtZCwge1xuICAgICAgICAgICAgICAgIGN3ZCxcbiAgICAgICAgICAgICAgICBzaGVsbDogXCJiYXNoXCIsXG4gICAgICAgICAgICAgICAgc3RkaW86IFtcImluaGVyaXRcIiwgXCJpbmhlcml0XCIsIFwiaW5oZXJpdFwiXSxcbiAgICAgICAgICAgICAgICBlbnY6IHsuLi5leHBhbmRlZCwgLi4ucHJvY2Vzcy5lbnZ9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8bnVtYmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgdm9pZCBpbnRlcmFjdGl2ZUNwLm9uKFwiZXhpdFwiLCAoY29kZSkgPT4gcmVzb2x2ZShjb2RlID8/IDApKTtcbiAgICAgICAgICAgICAgICB2b2lkIGludGVyYWN0aXZlQ3Aub24oXCJlcnJvclwiLCAoZXJyKSA9PiByZWplY3QoZXJyKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuXG4gICAgICAgIGlmIChpbWFnZU5hbWUgJiYgIXRoaXMuX2NvbnRhaW5lcklkKSB7XG4gICAgICAgICAgICBsZXQgZG9ja2VyQ21kID0gYCR7dGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGV9IGNyZWF0ZSAtLWludGVyYWN0aXZlICR7dGhpcy5nZW5lcmF0ZUluamVjdFNTSEFnZW50T3B0aW9ucygpfSBgO1xuICAgICAgICAgICAgaWYgKHRoaXMuYXJndi5wcml2aWxlZ2VkKSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiLS1wcml2aWxlZ2VkIFwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRldmljZSBvZiB0aGlzLmFyZ3YuZGV2aWNlKSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLWRldmljZSAke2RldmljZX0gYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuYXJndi51bGltaXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdWxpbWl0IG5vZmlsZT0ke3RoaXMuYXJndi51bGltaXR9IGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmFyZ3YudW1hc2spIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCItLXVzZXIgMDowIFwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5hcmd2LnVzZXJucyAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdXNlcm5zPSR7dGhpcy5hcmd2LnVzZXJuc30gYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuYXJndi5jb250YWluZXJNYWNBZGRyZXNzKSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLW1hYy1hZGRyZXNzIFwiJHt0aGlzLmFyZ3YuY29udGFpbmVyTWFjQWRkcmVzc31cIiBgO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpbWFnZVVzZXIgPSB0aGlzLmltYWdlVXNlcihleHBhbmRlZCk7XG4gICAgICAgICAgICBpZiAoaW1hZ2VVc2VyKSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLXVzZXIgJHtpbWFnZVVzZXJ9IGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmFyZ3YuY29udGFpbmVyRW11bGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJ1bm5lck5hbWU6IHN0cmluZyA9IHRoaXMuYXJndi5jb250YWluZXJFbXVsYXRlO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFHaXRsYWJSdW5uZXJQcmVzZXRWYWx1ZXMuaW5jbHVkZXMocnVubmVyTmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBnaXRsYWIgcnVubmVyIHRvIGVtdWxhdGUuXCIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IG1lbW9yeUNvbmZpZyA9IEdpdGxhYlJ1bm5lck1lbW9yeVByZXNldFZhbHVlW3J1bm5lck5hbWVdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNwdUNvbmZpZyA9IEdpdGxhYlJ1bm5lckNQVXNQcmVzZXRWYWx1ZVtydW5uZXJOYW1lXTtcblxuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS1tZW1vcnk9JHttZW1vcnlDb25maWd9bSBgO1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS1rZXJuZWwtbWVtb3J5PSR7bWVtb3J5Q29uZmlnfW0gYDtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tY3B1cz0ke2NwdUNvbmZpZ30gYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaG9zdCBhbmQgbm9uZSBuZXR3b3JrcyBoYXZlIHRvIGJlIHNwZWNpZmllZCB1c2luZyAtLW5ldHdvcmssIHNpbmNlIHRoZXkgY2Fubm90IGJlIHVzZWQgd2l0aFxuICAgICAgICAgICAgLy8gYGRvY2tlciBuZXR3b3JrIGNvbm5lY3RgLlxuICAgICAgICAgICAgZm9yIChjb25zdCBuZXR3b3JrIG9mIHRoaXMuYXJndi5uZXR3b3JrKSB7XG4gICAgICAgICAgICAgICAgaWYgKFtcImhvc3RcIiwgXCJub25lXCJdLmluY2x1ZGVzKG5ldHdvcmspKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS1uZXR3b3JrICR7bmV0d29ya30gYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUaGUgZGVmYXVsdCBwb2RtYW4gbmV0d29yayBtb2RlIGlzIG5vdCBgYnJpZGdlYCwgd2hpY2ggbWVhbnMgYSBgcG9kbWFuIG5ldHdvcmsgY29ubmVjdGAgY2FsbCB3aWxsIGZhaWxcbiAgICAgICAgICAgIC8vIHdoZW4gY29ubmVjdGluZyB1c2VyIGRlZmluZWQgbmV0d29ya3MuIFRoZSB3b3JrYXJvdW5kIGlzIHRvIHVzZSBhIHVzZXIgZGVmaW5lZCBuZXR3b3JrIG9uIGNvbnRhaW5lclxuICAgICAgICAgICAgLy8gY3JlYXRpb24uXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jb250YWluZXJzL3BvZG1hbi9pc3N1ZXMvMTk1NzdcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBub3QgY2xhc2ggd2l0aCB0aGUgYGhvc3RgIGFuZCBgbm9uZWAgbmV0d29ya3MgYWJvdmUsIHNpbmNlIHNlcnZpY2UgY3JlYXRpb24gc2hvdWxkIGhhdmVcbiAgICAgICAgICAgIC8vIGZhaWxlZCB3aGVuIHVzaW5nIGBob3N0YCBvciBgbm9uZWAgbmV0d29ya3MuXG4gICAgICAgICAgICBpZiAodGhpcy5fc2VydmljZU5ldHdvcmtJZCkge1xuICAgICAgICAgICAgICAgIC8vIGBidWlsZGAgYWxpYXM6IGh0dHBzOi8vZ2l0bGFiLmNvbS9naXRsYWItb3JnL2dpdGxhYi1ydW5uZXIvLS9pc3N1ZXMvMjcwNjBcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tbmV0d29yayAke3RoaXMuX3NlcnZpY2VOZXR3b3JrSWR9IC0tbmV0d29yay1hbGlhcyBidWlsZCBgO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdm9sdW1lICR7YnVpbGRWb2x1bWVOYW1lfToke3RoaXMuY2lQcm9qZWN0RGlyfSBgO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLXZvbHVtZSAke3RtcFZvbHVtZU5hbWV9OiR7dGhpcy5maWxlVmFyaWFibGVzRGlyfSBgO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLXdvcmtkaXIgJHt0aGlzLmNpUHJvamVjdERpcn0gYDtcblxuICAgICAgICAgICAgZm9yIChjb25zdCB2b2x1bWUgb2YgdGhpcy5hcmd2LnZvbHVtZSkge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS12b2x1bWUgJHt2b2x1bWV9IGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZXh0cmFIb3N0IG9mIHRoaXMuYXJndi5leHRyYUhvc3QpIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tYWRkLWhvc3Q9JHtleHRyYUhvc3R9IGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhleHBhbmRlZCkpIHtcbiAgICAgICAgICAgICAgICAvLyBSZXBsYWNpbmcgYCdgIHdpdGggYCdcXCcnYCB0byBjb3JyZWN0bHkgaGFuZGxlIHNpbmdsZSBxdW90ZXMoaWYgYHZhbGAgY29udGFpbnMgYCdgKSBpbiBzaGVsbCBjb21tYW5kc1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgICAtZSAnJHtrZXl9PSR7dmFsLnRvU3RyaW5nKCkucmVwbGFjZSgvJy9nLCBcIidcXFxcJydcIil9JyBcXFxcXFxuYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuaW1hZ2VFbnRyeXBvaW50KSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLWVudHJ5cG9pbnQgJHtVdGlscy5zYWZlQmFzaFN0cmluZyh0aGlzLmltYWdlRW50cnlwb2ludFswXSl9IGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgJHsoYXdhaXQgdGhpcy5tb3VudENhY2hlQ21kKHdyaXRlU3RyZWFtcywgZXhwYW5kZWQpKS5qb2luKFwiIFwiKX0gYDtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgJHtpbWFnZU5hbWV9IGA7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmltYWdlRW50cnlwb2ludD8ubGVuZ3RoID8/IDAgPiAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbWFnZUVudHJ5cG9pbnQ/LnNsaWNlKDEpLmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAke1V0aWxzLnNhZmVCYXNoU3RyaW5nKGUpfSBgO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJzaCAtYyBcXFwiXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJpZiBbIC14IC91c3IvbG9jYWwvYmluL2Jhc2ggXTsgdGhlblxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhlYyAvdXNyL2xvY2FsL2Jpbi9iYXNoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxpZiBbIC14IC91c3IvYmluL2Jhc2ggXTsgdGhlblxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhlYyAvdXNyL2Jpbi9iYXNoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxpZiBbIC14IC9iaW4vYmFzaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC9iaW4vYmFzaCBcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImVsaWYgWyAteCAvdXNyL2xvY2FsL2Jpbi9zaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC91c3IvbG9jYWwvYmluL3NoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxpZiBbIC14IC91c3IvYmluL3NoIF07IHRoZW5cXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGV4ZWMgL3Vzci9iaW4vc2ggXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJlbGlmIFsgLXggL2Jpbi9zaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC9iaW4vc2ggXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJlbGlmIFsgLXggL2J1c3lib3gvc2ggXTsgdGhlblxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhlYyAvYnVzeWJveC9zaCBcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImVsc2VcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGVjaG8gc2hlbGwgbm90IGZvdW5kXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGl0IDFcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImZpXFxuXFxcIlwiO1xuXG4gICAgICAgICAgICBjb25zdCB7c3Rkb3V0OiBjb250YWluZXJJZH0gPSBhd2FpdCBVdGlscy5iYXNoKGRvY2tlckNtZCwgY3dkKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBuZXR3b3JrIG9mIHRoaXMuYXJndi5uZXR3b3JrKSB7XG4gICAgICAgICAgICAgICAgLy8gU3BlY2lhbCBuZXR3b3JrIG5hbWVzIHRoYXQgZG8gbm90IHdvcmsgd2l0aCBgZG9ja2VyIG5ldHdvcmsgY29ubmVjdGBcbiAgICAgICAgICAgICAgICBpZiAoW1wiaG9zdFwiLCBcIm5vbmVcIl0uaW5jbHVkZXMobmV0d29yaykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJuZXR3b3JrXCIsIFwiY29ubmVjdFwiLCBuZXR3b3JrLCBgJHtjb250YWluZXJJZH1gXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lcklkID0gY29udGFpbmVySWQ7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXJzVG9DbGVhbi5wdXNoKHRoaXMuX2NvbnRhaW5lcklkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuY29weUNhY2hlSW4od3JpdGVTdHJlYW1zLCBleHBhbmRlZCk7XG4gICAgICAgIGF3YWl0IHRoaXMuY29weUFydGlmYWN0c0luKHdyaXRlU3RyZWFtcyk7XG5cbiAgICAgICAgbGV0IGNtZCA9IFwic2V0IC1lbyBwaXBlZmFpbFxcblwiO1xuICAgICAgICBjbWQgKz0gXCJleGVjIDA8IC9kZXYvbnVsbFxcblwiO1xuXG4gICAgICAgIGlmICghaW1hZ2VOYW1lICYmIHRoaXMuYXJndi5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgY21kICs9IGBjZCAke3N0YXRlRGlyfS9idWlsZHMvJHtzYWZlSm9iTmFtZX0vXFxuYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbWFnZU5hbWUpIHtcbiAgICAgICAgICAgIGNtZCArPSBgY2QgJHt0aGlzLmNpUHJvamVjdERpcn0gXFxuYDtcblxuICAgICAgICAgICAgaWYgKGV4cGFuZGVkW1wiQ0lfSk9CX1NUQVRVU1wiXSAhPSBcInJ1bm5pbmdcIikge1xuICAgICAgICAgICAgICAgIC8vIEVuc3VyZXMgdGhlIGVudiBgQ0lfSk9CX1NUQVRVU2AgaXMgcGFzc2VkIHRvIHRoZSBhZnRlcl9zY3JpcHQgY29udGV4dFxuICAgICAgICAgICAgICAgIGNtZCArPSBgZXhwb3J0IENJX0pPQl9TVEFUVVM9JHtleHBhbmRlZFtcIkNJX0pPQl9TVEFUVVNcIl19XFxuYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjbWQgKz0gdGhpcy5nZW5lcmF0ZVNjcmlwdENvbW1hbmRzKHNjcmlwdHMpO1xuXG4gICAgICAgIGNtZCArPSBcImV4aXQgMFxcblwiO1xuXG4gICAgICAgIGNvbnN0IGpvYlNjcmlwdEZpbGUgPSBgJHtjd2R9LyR7c3RhdGVEaXJ9L3NjcmlwdHMvJHtzYWZlSm9iTmFtZX1fJHt0aGlzLmpvYklkfWA7XG4gICAgICAgIGF3YWl0IGZzLm91dHB1dEZpbGUoam9iU2NyaXB0RmlsZSwgY21kLCBcInV0Zi04XCIpO1xuICAgICAgICBhd2FpdCBmcy5jaG1vZChqb2JTY3JpcHRGaWxlLCBcIjA3NTVcIik7XG4gICAgICAgIHRoaXMuX2ZpbGVzVG9SbS5wdXNoKGpvYlNjcmlwdEZpbGUpO1xuXG4gICAgICAgIGlmIChpbWFnZU5hbWUpIHtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJjcFwiLCBgJHtzdGF0ZURpcn0vc2NyaXB0cy8ke3NhZmVKb2JOYW1lfV8ke3RoaXMuam9iSWR9YCwgYCR7dGhpcy5fY29udGFpbmVySWR9Oi9nY2wtY21kYF0sIGN3ZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjcCA9IGV4ZWNhKHRoaXMuX2NvbnRhaW5lcklkID8gYCR7dGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGV9IHN0YXJ0IC0tYXR0YWNoIC1pICR7dGhpcy5fY29udGFpbmVySWR9YCA6IFwiYmFzaFwiLCB7XG4gICAgICAgICAgICBjd2QsXG4gICAgICAgICAgICBzaGVsbDogXCJiYXNoXCIsXG4gICAgICAgICAgICBlbnY6IGltYWdlTmFtZSA/IHByb2Nlc3MuZW52IDogZXhwYW5kZWQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IG91dEZ1bmMgPSAobGluZTogc3RyaW5nLCBzdHJlYW06ICh0eHQ6IHN0cmluZykgPT4gdm9pZCwgY29sb3JpemU6IChzdHI6IHN0cmluZykgPT4gc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hMb25nUnVubmluZ1NpbGVudFRpbWVvdXQod3JpdGVTdHJlYW1zKTtcbiAgICAgICAgICAgIHN0cmVhbShgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IGApO1xuICAgICAgICAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aChHQ0xfU0hFTExfUFJPTVBUX1BMQUNFSE9MREVSKSkge1xuICAgICAgICAgICAgICAgIC8vIHJlcGxhY2UgdGhlIEdDTF9TSEVMTF9QUk9NUFRfUExBQ0VIT0xERVIgd2l0aCBgJGAgYW5kIG1ha2UgdGhlIFNIRUxMX1BST01QVCBsaW5lIGdyZWVuIGNvbG9yXG4gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc2xpY2UoR0NMX1NIRUxMX1BST01QVF9QTEFDRUhPTERFUi5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGxpbmUgPSBjaGFsa2B7Z3JlZW4gJCR7bGluZX19YDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtKGAke2NvbG9yaXplKFwiPlwiKX0gYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdHJlYW0oYCR7bGluZX1cXG5gKTtcbiAgICAgICAgICAgIGZzLmFwcGVuZEZpbGVTeW5jKG91dHB1dEZpbGVzUGF0aCwgYCR7bGluZX1cXG5gKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBxdWlldCA9IHRoaXMuYXJndi5xdWlldDtcblxuICAgICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8bnVtYmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXF1aWV0KSB7XG4gICAgICAgICAgICAgICAgY3Auc3Rkb3V0Py5waXBlKHNwbGl0MigpKS5vbihcImRhdGFcIiwgKGU6IHN0cmluZykgPT4gb3V0RnVuYyhlLCB3cml0ZVN0cmVhbXMuc3Rkb3V0LmJpbmQod3JpdGVTdHJlYW1zKSwgKHMpID0+IGNoYWxrYHtncmVlbkJyaWdodCAke3N9fWApKTtcbiAgICAgICAgICAgICAgICBjcC5zdGRlcnI/LnBpcGUoc3BsaXQyKCkpLm9uKFwiZGF0YVwiLCAoZTogc3RyaW5nKSA9PiBvdXRGdW5jKGUsIHdyaXRlU3RyZWFtcy5zdGRlcnIuYmluZCh3cml0ZVN0cmVhbXMpLCAocykgPT4gY2hhbGtge3JlZEJyaWdodCAke3N9fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZvaWQgY3Aub24oXCJleGl0XCIsIChjb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2xvbmdSdW5uaW5nU2lsZW50VGltZW91dCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoY29kZSA/PyAwKTt9LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHZvaWQgY3Aub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2xvbmdSdW5uaW5nU2lsZW50VGltZW91dCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChpbWFnZU5hbWUpIHtcbiAgICAgICAgICAgICAgICBjcC5zdGRpbj8uZW5kKFwiLiAvZ2NsLWNtZFwiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3Auc3RkaW4/LmVuZChgLi8ke3N0YXRlRGlyfS9zY3JpcHRzLyR7c2FmZUpvYk5hbWV9XyR7dGhpcy5qb2JJZH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbWFnZU5hbWUgKHZhcnM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0ge30pOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgaWYgKHRoaXMuYXJndi5mb3JjZVNoZWxsRXhlY3V0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5qb2JEYXRhW1wiaW1hZ2VcIl07XG4gICAgICAgIGlmICghaW1hZ2UpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFyZ3Yuc2hlbGxFeGVjdXRvck5vSW1hZ2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLmdpdGxhYi5jb20vZWUvY2kvcnVubmVycy9ob3N0ZWRfcnVubmVycy9saW51eC5odG1sI2NvbnRhaW5lci1pbWFnZXNcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcmd2LmRlZmF1bHRJbWFnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBleHBhbmRlZCA9IFV0aWxzLmV4cGFuZFZhcmlhYmxlcyh2YXJzKTtcbiAgICAgICAgY29uc3QgaW1hZ2VOYW1lID0gVXRpbHMuZXhwYW5kVGV4dChpbWFnZS5uYW1lLCBleHBhbmRlZCk7XG4gICAgICAgIHJldHVybiBpbWFnZU5hbWUuaW5jbHVkZXMoXCI6XCIpID8gaW1hZ2VOYW1lIDogYCR7aW1hZ2VOYW1lfTpsYXRlc3RgO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW1hZ2VVc2VyICh2YXJzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSA9IHt9KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5qb2JEYXRhW1wiaW1hZ2VcIl07XG4gICAgICAgIGlmICghaW1hZ2UpIHJldHVybiBudWxsO1xuICAgICAgICBpZiAoIWltYWdlW1wiZG9ja2VyXCJdKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIFV0aWxzLmV4cGFuZFRleHQoaW1hZ2VbXCJkb2NrZXJcIl1bXCJ1c2VyXCJdLCB2YXJzKTtcbiAgICB9XG5cbiAgICBnZXQgaW1hZ2VFbnRyeXBvaW50ICgpOiBzdHJpbmdbXSB8IG51bGwge1xuICAgICAgICBjb25zdCBpbWFnZSA9IHRoaXMuam9iRGF0YVtcImltYWdlXCJdO1xuXG4gICAgICAgIGlmICghaW1hZ2U/LmVudHJ5cG9pbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGFzc2VydChBcnJheS5pc0FycmF5KGltYWdlLmVudHJ5cG9pbnQpLCBcImltYWdlOmVudHJ5cG9pbnQgbXVzdCBiZSBhbiBhcnJheVwiKTtcbiAgICAgICAgcmV0dXJuIGltYWdlLmVudHJ5cG9pbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZUNpRGVwZW5kZW5jeVByb3h5U2VydmVyQXV0aGVudGljYXRpb24gKGltYWdlTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IENJX0RFUEVOREVOQ1lfUFJPWFlfU0VSVkVSID0gdGhpcy5fdmFyaWFibGVzW1wiQ0lfREVQRU5ERU5DWV9QUk9YWV9TRVJWRVJcIl07XG4gICAgICAgIGlmICghaW1hZ2VOYW1lLnN0YXJ0c1dpdGgoQ0lfREVQRU5ERU5DWV9QUk9YWV9TRVJWRVIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJsb2dpblwiLCBDSV9ERVBFTkRFTkNZX1BST1hZX1NFUlZFUl0pO1xuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGVyck1zZyA9IGBQbGVhc2UgYXV0aGVudGljYXRlIHRvIHRoZSBEZXBlbmRlbmN5IFByb3h5ICgke0NJX0RFUEVOREVOQ1lfUFJPWFlfU0VSVkVSfSkgaHR0cHM6Ly9kb2NzLmdpdGxhYi5jb20vZWUvdXNlci9wYWNrYWdlcy9kZXBlbmRlbmN5X3Byb3h5LyNhdXRoZW50aWNhdGUtd2l0aC10aGUtZGVwZW5kZW5jeS1wcm94eWA7XG4gICAgICAgICAgICBpZiAodGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUgPT0gXCJkb2NrZXJcIikge1xuICAgICAgICAgICAgICAgIGFzc2VydCghZS5zdGRlcnIuaW5jbHVkZXMoXCJDYW5ub3QgcGVyZm9ybSBhbiBpbnRlcmFjdGl2ZSBsb2dpblwiKSwgZXJyTXNnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUgPT0gXCJwb2RtYW5cIikge1xuICAgICAgICAgICAgICAgIGFzc2VydCghZS5zdGRlcnIuaW5jbHVkZXMoXCJVc2VybmFtZTogRXJyb3I6IGdldHRpbmcgdXNlcm5hbWUgYW5kIHBhc3N3b3JkOiByZWFkaW5nIHVzZXJuYW1lOiBFT0ZcIiksIGVyck1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBwdWxsSW1hZ2UgKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBpbWFnZVRvUHVsbDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHB1bGxQb2xpY3kgPSB0aGlzLmFyZ3YucHVsbFBvbGljeTtcbiAgICAgICAgY29uc3QgYWN0dWFsUHVsbCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudmFsaWRhdGVDaURlcGVuZGVuY3lQcm94eVNlcnZlckF1dGhlbnRpY2F0aW9uKGltYWdlVG9QdWxsKTtcbiAgICAgICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcInB1bGxcIiwgaW1hZ2VUb1B1bGxdKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IHB1bGxlZH0gJHtpbWFnZVRvUHVsbH0gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHB1bGxQb2xpY3kgPT09IFwiYWx3YXlzXCIpIHtcbiAgICAgICAgICAgIGF3YWl0IGFjdHVhbFB1bGwoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcImltYWdlXCIsIFwiaW5zcGVjdFwiLCBpbWFnZVRvUHVsbF0pO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIGF3YWl0IGFjdHVhbFB1bGwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgaW5pdFByb2R1Y2VyUmVwb3J0c0RvdGVudlZhcmlhYmxlcyAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIGV4cGFuZGVkOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAgICAgICBjb25zdCBjd2QgPSB0aGlzLmFyZ3YuY3dkO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IHRoaXMuYXJndi5zdGF0ZURpcjtcbiAgICAgICAgY29uc3QgcHJvZHVjZXJzID0gdGhpcy5wcm9kdWNlcnM7XG4gICAgICAgIGxldCBwcm9kdWNlclJlcG9ydHNFbnZzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgcHJvZHVjZXIgb2YgcHJvZHVjZXJzID8/IFtdKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9kdWNlckRvdGVudiA9IFV0aWxzLmV4cGFuZFRleHQocHJvZHVjZXIuZG90ZW52LCBleHBhbmRlZCk7XG4gICAgICAgICAgICBpZiAocHJvZHVjZXJEb3RlbnYgPT09IG51bGwpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCBzYWZlUHJvZHVjZXJOYW1lID0gVXRpbHMuc2FmZURvY2tlclN0cmluZyhwcm9kdWNlci5uYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGRvdGVudkZvbGRlciA9IGAke2N3ZH0vJHtzdGF0ZURpcn0vYXJ0aWZhY3RzLyR7c2FmZVByb2R1Y2VyTmFtZX0vLmdpdGxhYi1jaS1yZXBvcnRzL2RvdGVudi9gO1xuICAgICAgICAgICAgaWYgKGF3YWl0IGZzLnBhdGhFeGlzdHMoZG90ZW52Rm9sZGVyKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvdGVudkZpbGVzID0gKGF3YWl0IFV0aWxzLnNwYXduKFtcImZpbmRcIiwgXCIuXCIsIFwiLXR5cGVcIiwgXCJmXCJdLCBkb3RlbnZGb2xkZXIpKS5zdGRvdXQuc3BsaXQoXCJcXG5cIik7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBkb3RlbnZGaWxlIG9mIGRvdGVudkZpbGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkb3RlbnZGaWxlID09IFwiXCIpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9kdWNlclJlcG9ydEVudiA9IGRvdGVudi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShgJHtkb3RlbnZGb2xkZXJ9LyR7ZG90ZW52RmlsZX1gKSk7XG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y2VyUmVwb3J0c0VudnMgPSB7Li4ucHJvZHVjZXJSZXBvcnRzRW52cywgLi4ucHJvZHVjZXJSZXBvcnRFbnZ9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge3llbGxvdyByZXBvcnRzLmRvdGVudiBwcm9kdWNlZCBieSAnJHtwcm9kdWNlci5uYW1lfScgY291bGQgbm90IGJlIGZvdW5kfVxcbmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb2R1Y2VyUmVwb3J0c0VudnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjb3B5Q2FjaGVJbiAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIGV4cGFuZGVkOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAgICAgICBpZiAodGhpcy5hcmd2Lm1vdW50Q2FjaGUgJiYgdGhpcy5pbWFnZU5hbWUoZXhwYW5kZWQpKSByZXR1cm47XG4gICAgICAgIGlmICgoIXRoaXMuaW1hZ2VOYW1lKGV4cGFuZGVkKSAmJiAhdGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uKSB8fCB0aGlzLmNhY2hlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGN3ZCA9IHRoaXMuYXJndi5jd2Q7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gdGhpcy5hcmd2LnN0YXRlRGlyO1xuXG4gICAgICAgIGZvciAoY29uc3QgW2luZGV4LCBjXSBvZiB0aGlzLmNhY2hlLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgaWYgKCFbXCJwdWxsXCIsIFwicHVsbC1wdXNoXCJdLmluY2x1ZGVzKGMucG9saWN5KSkgcmV0dXJuO1xuXG4gICAgICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlTmFtZSA9IGF3YWl0IHRoaXMuZ2V0VW5pcXVlQ2FjaGVOYW1lKGN3ZCwgZXhwYW5kZWQsIGluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlRm9sZGVyID0gYCR7Y3dkfS8ke3N0YXRlRGlyfS9jYWNoZS8ke2NhY2hlTmFtZX1gO1xuICAgICAgICAgICAgaWYgKCFhd2FpdCBmcy5wYXRoRXhpc3RzKGNhY2hlRm9sZGVyKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhd2FpdCBNdXRleC5leGNsdXNpdmUoY2FjaGVOYW1lLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jb3B5SW4oY2FjaGVGb2xkZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBpbXBvcnRlZCBjYWNoZSAnJHtjYWNoZU5hbWV9J30gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjb3B5QXJ0aWZhY3RzSW4gKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zKSB7XG4gICAgICAgIGlmICgoIXRoaXMuaW1hZ2VOYW1lKHRoaXMuX3ZhcmlhYmxlcykgJiYgIXRoaXMuYXJndi5zaGVsbElzb2xhdGlvbikgfHwgKHRoaXMucHJvZHVjZXJzID8/IFtdKS5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgICAgICBjb25zdCBjd2QgPSB0aGlzLmFyZ3YuY3dkO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IHRoaXMuYXJndi5zdGF0ZURpcjtcbiAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcHJvZHVjZXIgb2YgdGhpcy5wcm9kdWNlcnMgPz8gW10pIHtcbiAgICAgICAgICAgIGNvbnN0IHByb2R1Y2VyU2FmZU5hbWUgPSBVdGlscy5zYWZlRG9ja2VyU3RyaW5nKHByb2R1Y2VyLm5hbWUpO1xuICAgICAgICAgICAgY29uc3QgYXJ0aWZhY3RGb2xkZXIgPSBgJHtjd2R9LyR7c3RhdGVEaXJ9L2FydGlmYWN0cy8ke3Byb2R1Y2VyU2FmZU5hbWV9YDtcbiAgICAgICAgICAgIGlmICghYXdhaXQgZnMucGF0aEV4aXN0cyhhcnRpZmFjdEZvbGRlcikpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5ta2RpcnAoYXJ0aWZhY3RGb2xkZXIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByZWFkZGlyID0gYXdhaXQgZnMucmVhZGRpcihhcnRpZmFjdEZvbGRlcik7XG4gICAgICAgICAgICBpZiAocmVhZGRpci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7eWVsbG93IGFydGlmYWN0cyBmcm9tIHtibHVlQnJpZ2h0ICR7cHJvZHVjZXJTYWZlTmFtZX19IHdhcyBlbXB0eX1cXG5gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLmNvcHlJbihhcnRpZmFjdEZvbGRlcikpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICAgICAgY29uc3QgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBpbXBvcnRlZCBhcnRpZmFjdHN9IGluIHttYWdlbnRhICR7cHJldHR5SHJ0aW1lKGVuZFRpbWUpfX1cXG5gKTtcbiAgICB9XG5cbiAgICBjb3B5SW4gKHNvdXJjZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHNhZmVKb2JOYW1lID0gdGhpcy5zYWZlSm9iTmFtZTtcbiAgICAgICAgaWYgKCF0aGlzLmltYWdlTmFtZSh0aGlzLl92YXJpYWJsZXMpICYmIHRoaXMuYXJndi5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIFV0aWxzLnNwYXduKFtcInJzeW5jXCIsIFwiLWFcIiwgYCR7c291cmNlfS8uYCwgYCR7dGhpcy5hcmd2LmN3ZH0vJHt0aGlzLmFyZ3Yuc3RhdGVEaXJ9L2J1aWxkcy8ke3NhZmVKb2JOYW1lfWBdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcImNwXCIsIGAke3NvdXJjZX0vLmAsIGAke3RoaXMuX2NvbnRhaW5lcklkfToke3RoaXMuY2lQcm9qZWN0RGlyfWBdKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNvcHlDYWNoZU91dCAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIGV4cGFuZGVkOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAgICAgICBpZiAodGhpcy5hcmd2Lm1vdW50Q2FjaGUgJiYgdGhpcy5pbWFnZU5hbWUoZXhwYW5kZWQpKSByZXR1cm47XG4gICAgICAgIGlmICgoIXRoaXMuaW1hZ2VOYW1lKGV4cGFuZGVkKSAmJiAhdGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uKSB8fCB0aGlzLmNhY2hlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGN3ZCA9IHRoaXMuYXJndi5jd2Q7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gdGhpcy5hcmd2LnN0YXRlRGlyO1xuICAgICAgICBjb25zdCBjYWNoZVBhdGggPSB0aGlzLmltYWdlTmFtZShleHBhbmRlZCkgPyBcIi9jYWNoZVwiIDogXCIuLi8uLi9jYWNoZVwiO1xuXG4gICAgICAgIGxldCB0aW1lLCBlbmRUaW1lO1xuICAgICAgICBmb3IgKGNvbnN0IFtpbmRleCwgY10gb2YgdGhpcy5jYWNoZS5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGlmICghW1wicHVzaFwiLCBcInB1bGwtcHVzaFwiXS5pbmNsdWRlcyhjLnBvbGljeSkpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChcIm9uX3N1Y2Nlc3NcIiA9PT0gYy53aGVuICYmIHRoaXMuam9iU3RhdHVzICE9PSBcInN1Y2Nlc3NcIikgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKFwib25fZmFpbHVyZVwiID09PSBjLndoZW4gJiYgdGhpcy5qb2JTdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBjYWNoZU5hbWUgPSBhd2FpdCB0aGlzLmdldFVuaXF1ZUNhY2hlTmFtZShjd2QsIGV4cGFuZGVkLCBpbmRleCk7XG5cbiAgICAgICAgICAgIGxldCBwYXRocyA9IFwiXCI7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhdGggb2YgYy5wYXRocykge1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNTdWJwYXRoKHBhdGgsIHRoaXMuYXJndi5jd2QsIHRoaXMuYXJndi5jd2QpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIHBhdGhzICs9IFwiIFwiICsgVXRpbHMuZXhwYW5kVGV4dChwYXRoLCBleHBhbmRlZCkucmVwbGFjZShgJHtleHBhbmRlZC5DSV9QUk9KRUNUX0RJUn0vYCwgXCJcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgbGV0IGNtZCA9IFwic2hvcHQgLXMgZ2xvYnN0YXIgbnVsbGdsb2IgZG90Z2xvYlxcblwiO1xuICAgICAgICAgICAgY21kICs9IGBta2RpciAtcCAke1V0aWxzLnNhZmVCYXNoU3RyaW5nKGNhY2hlUGF0aCArIFwiL1wiICsgY2FjaGVOYW1lKX1cXG5gO1xuICAgICAgICAgICAgY21kICs9IGByc3luYyAtUmEgJHtwYXRoc30gJHtVdGlscy5zYWZlQmFzaFN0cmluZyhjYWNoZVBhdGggKyBcIi9cIiArIGNhY2hlTmFtZSArIFwiLy5cIil9IHx8IHRydWVcXG5gO1xuXG4gICAgICAgICAgICBhd2FpdCBNdXRleC5leGNsdXNpdmUoY2FjaGVOYW1lLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jb3B5T3V0KGNtZCwgc3RhdGVEaXIsIFwiY2FjaGVcIiwgW10pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgX19wYXRoIG9mIGMucGF0aHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBfcGF0aCA9IFV0aWxzLmV4cGFuZFRleHQoX19wYXRoLCBleHBhbmRlZCk7XG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc1N1YnBhdGgoX3BhdGgsIHRoaXMuYXJndi5jd2QsIHRoaXMuYXJndi5jd2QpKSB7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtge3llbGxvdyBXQVJOSU5HOiBwcm9jZXNzUGF0aDogYXJ0aWZhY3QgcGF0aCBpcyBub3QgYSBzdWJwYXRoIG9mIHByb2plY3QgZGlyZWN0b3J5OiAke19wYXRofX1cXG5gKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IHBhdGggPSBfcGF0aDtcbiAgICAgICAgICAgICAgICBpZiAoZ2xvYmJ5Lmhhc01hZ2ljKHBhdGgpICYmICFwYXRoLmVuZHNXaXRoKFwiKlwiKSkge1xuICAgICAgICAgICAgICAgICAgICBwYXRoID0gYCR7cGF0aH0vKipgO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBudW1PZkZpbGVzID0gZ2xvYmJ5LnN5bmMocGF0aCwge1xuICAgICAgICAgICAgICAgICAgICBkb3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG9ubHlGaWxlczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGN3ZDogYCR7dGhpcy5hcmd2LmN3ZH0vJHtzdGF0ZURpcn0vY2FjaGUvJHtjYWNoZU5hbWV9YCxcbiAgICAgICAgICAgICAgICB9KS5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICBpZiAobnVtT2ZGaWxlcyA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtge3llbGxvdyBXQVJOSU5HOiAke3BhdGh9OiBubyBtYXRjaGluZyBmaWxlcy4gRW5zdXJlIHRoYXQgdGhlIGFydGlmYWN0IHBhdGggaXMgcmVsYXRpdmUgdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5fVxcbmApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIWdsb2JieS5oYXNNYWdpYyhwYXRoKSkgbnVtT2ZGaWxlcysrOyAvLyBhZGQgb25lIGJlY2F1c2UgdGhlIHBhdHRlcm4gaXRzZWxmIGlzIGEgZm9sZGVyXG5cbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGAke19wYXRofTogZm91bmQgJHtudW1PZkZpbGVzfSBhcnRpZmFjdCBmaWxlcyBhbmQgZGlyZWN0b3JpZXNcXG5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IGNhY2hlIGNyZWF0ZWQgaW4gJyR7c3RhdGVEaXJ9L2NhY2hlLyR7Y2FjaGVOYW1lfSd9IGluIHttYWdlbnRhICR7cHJldHR5SHJ0aW1lKGVuZFRpbWUpfX1cXG5gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29weUFydGlmYWN0c091dCAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIGV4cGFuZGVkOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAgICAgICAvLyBUT0RPOiB1cGRhdGUgdGhlIGNvbmRpdGlvbiB0byBzdXBwb3J0IHdoZW46b25fc3VjY2VzcyAvIHdoZW46b25fZmFpbHVyZVxuICAgICAgICBpZiAodGhpcy5qb2JTdGF0dXMgIT09IFwic3VjY2Vzc1wiICYmIHRoaXMuYXJ0aWZhY3RzPy53aGVuICE9PSBcImFsd2F5c1wiKSByZXR1cm47XG4gICAgICAgIGlmICghdGhpcy5hcnRpZmFjdHMpIHJldHVybjtcbiAgICAgICAgaWYgKCh0aGlzLmFydGlmYWN0cy5wYXRocz8ubGVuZ3RoID8/IDApID09PSAwICYmIHRoaXMuYXJ0aWZhY3RzLnJlcG9ydHM/LmRvdGVudiA9PSBudWxsKSByZXR1cm47XG5cbiAgICAgICAgY29uc3Qgc2FmZUpvYk5hbWUgPSB0aGlzLnNhZmVKb2JOYW1lO1xuICAgICAgICBjb25zdCBjd2QgPSB0aGlzLmFyZ3YuY3dkO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IHRoaXMuYXJndi5zdGF0ZURpcjtcbiAgICAgICAgbGV0IGFydGlmYWN0c1BhdGg6IHN0cmluZztcblxuICAgICAgICBpZiAoIXRoaXMuYXJndi5zaGVsbElzb2xhdGlvbiAmJiAhdGhpcy5pbWFnZU5hbWUoZXhwYW5kZWQpKSB7XG4gICAgICAgICAgICBhcnRpZmFjdHNQYXRoID0gYCR7c3RhdGVEaXJ9L2FydGlmYWN0c2A7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pbWFnZU5hbWUoZXhwYW5kZWQpKSB7XG4gICAgICAgICAgICBhcnRpZmFjdHNQYXRoID0gXCIvYXJ0aWZhY3RzXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcnRpZmFjdHNQYXRoID0gXCIuLi8uLi9hcnRpZmFjdHNcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0aW1lLCBlbmRUaW1lO1xuICAgICAgICBsZXQgY3BDbWQgPSBcInNob3B0IC1zIGdsb2JzdGFyIG51bGxnbG9iIGRvdGdsb2JcXG5cIjtcbiAgICAgICAgY3BDbWQgKz0gYG1rZGlyIC1wICR7YXJ0aWZhY3RzUGF0aH0vJHtzYWZlSm9iTmFtZX1cXG5gO1xuICAgICAgICBjcENtZCArPSBcInJzeW5jIC0tZXhjbHVkZSAnLmdpdGxhYi1jaS1sb2NhbC8qKicgLVJhIFwiO1xuICAgICAgICBmb3IgKGNvbnN0IGFydGlmYWN0RXhjbHVkZVBhdGggb2YgdGhpcy5hcnRpZmFjdHM/LmV4Y2x1ZGUgPz8gW10pIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkUGF0aCA9IFV0aWxzLmV4cGFuZFRleHQoYXJ0aWZhY3RFeGNsdWRlUGF0aCwgZXhwYW5kZWQpLnJlcGxhY2UoYCR7ZXhwYW5kZWQuQ0lfUFJPSkVDVF9ESVJ9L2AsIFwiXCIpO1xuICAgICAgICAgICAgY3BDbWQgKz0gYC0tZXhjbHVkZSAnJHtleHBhbmRlZFBhdGh9JyBgO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgYXJ0aWZhY3RQYXRoIG9mIHRoaXMuYXJ0aWZhY3RzPy5wYXRocyA/PyBbXSkge1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWRQYXRoID0gVXRpbHMuZXhwYW5kVGV4dChhcnRpZmFjdFBhdGgsIGV4cGFuZGVkKS5yZXBsYWNlKGAke2V4cGFuZGVkLkNJX1BST0pFQ1RfRElSfS9gLCBcIlwiKTtcbiAgICAgICAgICAgIGNwQ21kICs9IGAke2V4cGFuZGVkUGF0aH0gYDtcbiAgICAgICAgfVxuICAgICAgICBjcENtZCArPSBgJHthcnRpZmFjdHNQYXRofS8ke3NhZmVKb2JOYW1lfS8uIHx8IHRydWVcXG5gO1xuICAgICAgICBjb25zdCByZXBvcnREb3RlbnYgPSBVdGlscy5leHBhbmRUZXh0KHRoaXMuYXJ0aWZhY3RzLnJlcG9ydHM/LmRvdGVudiA/PyBudWxsLCBleHBhbmRlZCk7XG4gICAgICAgIGNvbnN0IHJlcG9ydERvdGVudnM6IHN0cmluZ1tdIHwgbnVsbCA9ICh0eXBlb2YgcmVwb3J0RG90ZW52ID09PSBcInN0cmluZ1wiKSA/IC8vIG5vcm1hbGl6ZSB0byBzdHJpbmdbXSBmb3IgZWFzaWVyIGhhbmRsaW5nXG4gICAgICAgICAgICBbcmVwb3J0RG90ZW52XSA6XG4gICAgICAgICAgICByZXBvcnREb3RlbnY7XG4gICAgICAgIGlmIChyZXBvcnREb3RlbnZzICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJlcG9ydERvdGVudnMuZm9yRWFjaCgocmVwb3J0RG90ZW52KSA9PiB7XG4gICAgICAgICAgICAgICAgY3BDbWQgKz0gYG1rZGlyIC1wICR7YXJ0aWZhY3RzUGF0aH0vJHtzYWZlSm9iTmFtZX0vLmdpdGxhYi1jaS1yZXBvcnRzL2RvdGVudlxcbmA7XG4gICAgICAgICAgICAgICAgY3BDbWQgKz0gYGlmIFsgLWYgJHtyZXBvcnREb3RlbnZ9IF07IHRoZW5cXG5gO1xuICAgICAgICAgICAgICAgIGNwQ21kICs9IGAgIHJzeW5jIC1SYSAke3JlcG9ydERvdGVudn0gJHthcnRpZmFjdHNQYXRofS8ke3NhZmVKb2JOYW1lfS8uZ2l0bGFiLWNpLXJlcG9ydHMvZG90ZW52Ly5cXG5gO1xuICAgICAgICAgICAgICAgIGNwQ21kICs9IFwiZmlcXG5cIjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgIGNvbnN0IGRvY2tlckNtZEV4dHJhcyA9IHRoaXMuYXJndi5tb3VudENhY2hlID8gYXdhaXQgdGhpcy5tb3VudENhY2hlQ21kKHdyaXRlU3RyZWFtcywgZXhwYW5kZWQpIDogW107XG4gICAgICAgIGF3YWl0IHRoaXMuY29weU91dChjcENtZCwgc3RhdGVEaXIsIFwiYXJ0aWZhY3RzXCIsIGRvY2tlckNtZEV4dHJhcyk7XG4gICAgICAgIGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHJlcG9ydERvdGVudiBvZiByZXBvcnREb3RlbnZzID8/IFtdKSB7XG4gICAgICAgICAgICBpZiAoYXdhaXQgZnMucGF0aEV4aXN0cyhgJHtjd2R9LyR7c3RhdGVEaXJ9L2FydGlmYWN0cy8ke3NhZmVKb2JOYW1lfS8uZ2l0bGFiLWNpLXJlcG9ydHMvZG90ZW52LyR7cmVwb3J0RG90ZW52fWApKSBjb250aW51ZTtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHt5ZWxsb3cgYXJ0aWZhY3QgcmVwb3J0cyBkb3RlbnYgJyR7cmVwb3J0RG90ZW52fScgY291bGQgbm90IGJlIGZvdW5kfVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVhZGRpciA9IGF3YWl0IGZzLnJlYWRkaXIoYCR7Y3dkfS8ke3N0YXRlRGlyfS9hcnRpZmFjdHMvJHtzYWZlSm9iTmFtZX1gKTtcbiAgICAgICAgaWYgKHJlYWRkaXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7eWVsbG93ICEhIG5vIGFydGlmYWN0cyB3YXMgY29waWVkICEhfVxcbmApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgZXhwb3J0ZWQgYXJ0aWZhY3RzfSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hcnRpZmFjdHNUb1NvdXJjZSAmJiAodGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uIHx8IHRoaXMuaW1hZ2VOYW1lKGV4cGFuZGVkKSkpIHtcbiAgICAgICAgICAgIHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW1wicnN5bmNcIiwgXCItLWV4Y2x1ZGU9Ly5naXRsYWItY2ktcmVwb3J0cy9cIiwgXCItYVwiLCBgJHtjd2R9LyR7c3RhdGVEaXJ9L2FydGlmYWN0cy8ke3NhZmVKb2JOYW1lfS8uYCwgY3dkXSk7XG4gICAgICAgICAgICBpZiAocmVwb3J0RG90ZW52ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbXCJyc3luY1wiLCBcIi1hXCIsIGAke2N3ZH0vJHtzdGF0ZURpcn0vYXJ0aWZhY3RzLyR7c2FmZUpvYk5hbWV9Ly5naXRsYWItY2ktcmVwb3J0cy9kb3RlbnYvLmAsIGN3ZF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgY29waWVkIGFydGlmYWN0cyB0byBjd2R9IGluIHttYWdlbnRhICR7cHJldHR5SHJ0aW1lKGVuZFRpbWUpfX1cXG5gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29weU91dCAoY21kOiBzdHJpbmcsIHN0YXRlRGlyOiBzdHJpbmcsIHR5cGU6IFwiYXJ0aWZhY3RzXCIgfCBcImNhY2hlXCIsIGRvY2tlckNtZEV4dHJhczogc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3Qgc2FmZUpvYk5hbWUgPSB0aGlzLnNhZmVKb2JOYW1lO1xuICAgICAgICBjb25zdCBidWlsZFZvbHVtZU5hbWUgPSB0aGlzLmJ1aWxkVm9sdW1lTmFtZTtcbiAgICAgICAgY29uc3QgY3dkID0gdGhpcy5hcmd2LmN3ZDtcbiAgICAgICAgY29uc3QgaGVscGVySW1hZ2VOYW1lID0gdGhpcy5hcmd2LmhlbHBlckltYWdlO1xuXG4gICAgICAgIGF3YWl0IGZzLm1rZGlycChgJHtjd2R9LyR7c3RhdGVEaXJ9LyR7dHlwZX1gKTtcblxuICAgICAgICBpZiAodGhpcy5pbWFnZU5hbWUodGhpcy5fdmFyaWFibGVzKSkge1xuICAgICAgICAgICAgY29uc3Qge3N0ZG91dDogY29udGFpbmVySWR9ID0gYXdhaXQgVXRpbHMuYmFzaChgJHt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZX0gY3JlYXRlIC1pICR7ZG9ja2VyQ21kRXh0cmFzLmpvaW4oXCIgXCIpfSAtdiAke2J1aWxkVm9sdW1lTmFtZX06JHt0aGlzLmNpUHJvamVjdERpcn0gLXcgJHt0aGlzLmNpUHJvamVjdERpcn0gJHtoZWxwZXJJbWFnZU5hbWV9IGJhc2ggLWMgXCIke2NtZC5yZXBsYWNlKC9cIi9nLCBcIlxcXFxcXFwiXCIpfVwiYCwgY3dkKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lcnNUb0NsZWFuLnB1c2goY29udGFpbmVySWQpO1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcInN0YXJ0XCIsIGNvbnRhaW5lcklkLCBcIi0tYXR0YWNoXCJdKTtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJjcFwiLCBgJHtjb250YWluZXJJZH06LyR7dHlwZX0vLmAsIGAke3N0YXRlRGlyfS8ke3R5cGV9Ly5gXSwgY3dkKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFyZ3Yuc2hlbGxJc29sYXRpb24pIHtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLmJhc2goYGJhc2ggLWVvIHBpcGVmYWlsIC1jIFwiJHtjbWR9XCJgLCBgJHtjd2R9LyR7c3RhdGVEaXJ9L2J1aWxkcy8ke3NhZmVKb2JOYW1lfWApO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmFyZ3Yuc2hlbGxJc29sYXRpb24pIHtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLmJhc2goYGJhc2ggLWVvIHBpcGVmYWlsIC1jIFwiJHtjbWR9XCJgLCBgJHtjd2R9YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZnJlc2hMb25nUnVubmluZ1NpbGVudFRpbWVvdXQgKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9sb25nUnVubmluZ1NpbGVudFRpbWVvdXQpO1xuICAgICAgICB0aGlzLl9sb25nUnVubmluZ1NpbGVudFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHtncmV5ID4gc3RpbGwgcnVubmluZy4uLn1cXG5gKTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuICAgICAgICB9LCAxMDAwMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGaW5pc2hlZFN0cmluZyAoKSB7XG4gICAgICAgIHJldHVybiBjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgZmluaXNoZWR9IGluIHttYWdlbnRhICR7dGhpcy5wcmV0dHlEdXJhdGlvbn19YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByaW50RmluaXNoZWRTdHJpbmcgKCkge1xuICAgICAgICBpZiAodGhpcy5qb2JTdGF0dXMgIT09IFwic3VjY2Vzc1wiKSByZXR1cm47XG4gICAgICAgIHRoaXMud3JpdGVTdHJlYW1zLnN0ZG91dChgJHt0aGlzLmdldEZpbmlzaGVkU3RyaW5nKCl9XFxuYCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmludEV4aXRlZFN0cmluZyAoY29kZTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHdyaXRlU3RyZWFtcyA9IHRoaXMud3JpdGVTdHJlYW1zO1xuICAgICAgICBjb25zdCBmaW5pc2hlZFN0ciA9IHRoaXMuZ2V0RmluaXNoZWRTdHJpbmcoKTtcblxuICAgICAgICAvLyBXb24ndCBwcmludCBpZiBqb2JTdGF0dXMgaXMgXCJzdWNjZXNzXCIgYmVjYXVzZSB0aGF0IHdpbGwgYmUgcHJpbnRlZCB2aWEgdGhlIGBwcmludEZpbmlzaGVkU3RyaW5nKClgXG4gICAgICAgIGlmICh0aGlzLmpvYlN0YXR1cyA9PT0gXCJ3YXJuaW5nXCIpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoXG4gICAgICAgICAgICAgICAgY2hhbGtgJHtmaW5pc2hlZFN0cn0ge2JsYWNrLmJnWWVsbG93QnJpZ2h0ICBXQVJOICR7Y29kZS50b1N0cmluZygpfSB9XFxuYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5qb2JTdGF0dXMgPT09IFwiZmFpbGVkXCIpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoXG4gICAgICAgICAgICAgICAgY2hhbGtgJHtmaW5pc2hlZFN0cn0ge2JsYWNrLmJnUmVkICBGQUlMICR7Y29kZS50b1N0cmluZygpfSB9XFxuYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByaW50QWZ0ZXJTY3JpcHRFeGl0ZWRTdHJpbmcgKGNvZGU6IG51bWJlcikge1xuICAgICAgICBjb25zdCB3cml0ZVN0cmVhbXMgPSB0aGlzLndyaXRlU3RyZWFtcztcbiAgICAgICAgY29uc3QgZmluaXNoZWRTdHIgPSB0aGlzLmdldEZpbmlzaGVkU3RyaW5nKCk7XG5cbiAgICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoXG4gICAgICAgICAgICAgICAgY2hhbGtgJHtmaW5pc2hlZFN0cn0ge2JsYWNrLmJnWWVsbG93QnJpZ2h0ICBXQVJOICR7Y29kZS50b1N0cmluZygpfSB9IGFmdGVyX3NjcmlwdFxcbmAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjcmVhdGVEb2NrZXJOZXR3b3JrIChuZXR3b3JrTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHtzdGRvdXQ6IG5ldHdvcmtJZH0gPSBhd2FpdCBVdGlscy5zcGF3bihbdGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUsIFwibmV0d29ya1wiLCBcImNyZWF0ZVwiLCBgJHtuZXR3b3JrTmFtZX1gXSk7XG4gICAgICAgIHRoaXMuX3NlcnZpY2VOZXR3b3JrSWQgPSBuZXR3b3JrSWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzdGFydFNlcnZpY2UgKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBleHBhbmRlZDoge1trZXk6IHN0cmluZ106IHN0cmluZ30sIHNlcnZpY2U6IFNlcnZpY2UpIHtcbiAgICAgICAgY29uc3QgY3dkID0gdGhpcy5hcmd2LmN3ZDtcbiAgICAgICAgbGV0IGRvY2tlckNtZCA9IGAke3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlfSBjcmVhdGUgLS1pbnRlcmFjdGl2ZSBgO1xuICAgICAgICB0aGlzLnJlZnJlc2hMb25nUnVubmluZ1NpbGVudFRpbWVvdXQod3JpdGVTdHJlYW1zKTtcblxuICAgICAgICBpZiAodGhpcy5hcmd2LnVtYXNrKSB7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCItLXVzZXIgMDowIFwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYXJndi51c2VybnMgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdXNlcm5zPSR7dGhpcy5hcmd2LnVzZXJuc30gYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFyZ3YucHJpdmlsZWdlZCkge1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiLS1wcml2aWxlZ2VkIFwiO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBkZXZpY2Ugb2YgdGhpcy5hcmd2LmRldmljZSkge1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLWRldmljZSAke2RldmljZX0gYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFyZ3YudWxpbWl0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdWxpbWl0IG5vZmlsZT0ke3RoaXMuYXJndi51bGltaXR9IGA7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHZvbHVtZSBvZiB0aGlzLmFyZ3Yudm9sdW1lKSB7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdm9sdW1lICR7dm9sdW1lfSBgO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBleHRyYUhvc3Qgb2YgdGhpcy5hcmd2LmV4dHJhSG9zdCkge1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLWFkZC1ob3N0PSR7ZXh0cmFIb3N0fSBgO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VydmljZUFsaWFzID0gc2VydmljZS5hbGlhcztcbiAgICAgICAgY29uc3Qgc2VydmljZU5hbWUgPSBzZXJ2aWNlLm5hbWU7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VOYW1lV2l0aG91dFZlcnNpb24gPSBzZXJ2aWNlTmFtZS5yZXBsYWNlKC8oLiopKDouKikvLCBcIiQxXCIpO1xuICAgICAgICBjb25zdCBhbGlhc2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIGFsaWFzZXMuYWRkKHNlcnZpY2VOYW1lV2l0aG91dFZlcnNpb24ucmVwbGFjZUFsbChcIi9cIiwgXCItXCIpKTtcbiAgICAgICAgYWxpYXNlcy5hZGQoc2VydmljZU5hbWVXaXRob3V0VmVyc2lvbi5yZXBsYWNlQWxsKFwiL1wiLCBcIl9fXCIpKTtcbiAgICAgICAgaWYgKHNlcnZpY2VBbGlhcykge1xuICAgICAgICAgICAgYWxpYXNlcy5hZGQoc2VydmljZUFsaWFzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhleHBhbmRlZCkpIHtcbiAgICAgICAgICAgIC8vIFJlcGxhY2luZyBgJ2Agd2l0aCBgJ1xcJydgIHRvIGNvcnJlY3RseSBoYW5kbGUgc2luZ2xlIHF1b3RlcyhpZiBgdmFsYCBjb250YWlucyBgJ2ApIGluIHNoZWxsIGNvbW1hbmRzXG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYCAgLWUgJyR7a2V5fT0ke3ZhbC50b1N0cmluZygpLnJlcGxhY2UoLycvZywgXCInXFxcXCcnXCIpfScgXFxcXFxcbmA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZXJ2aWNlRW50cnlwb2ludCA9IHNlcnZpY2UuZW50cnlwb2ludDtcbiAgICAgICAgaWYgKHNlcnZpY2VFbnRyeXBvaW50KSB7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tZW50cnlwb2ludCAke1V0aWxzLnNhZmVCYXNoU3RyaW5nKHNlcnZpY2VFbnRyeXBvaW50WzBdKX0gYDtcbiAgICAgICAgfVxuICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdm9sdW1lICR7dGhpcy5idWlsZFZvbHVtZU5hbWV9OiR7dGhpcy5jaVByb2plY3REaXJ9IGA7XG4gICAgICAgIGRvY2tlckNtZCArPSBgLS12b2x1bWUgJHt0aGlzLnRtcFZvbHVtZU5hbWV9OiR7dGhpcy5maWxlVmFyaWFibGVzRGlyfSBgO1xuXG4gICAgICAgIC8vIFRoZSBkZWZhdWx0IHBvZG1hbiBuZXR3b3JrIG1vZGUgaXMgbm90IGBicmlkZ2VgLCB3aGljaCBtZWFucyBhIGBwb2RtYW4gbmV0d29yayBjb25uZWN0YCBjYWxsIHdpbGwgZmFpbFxuICAgICAgICAvLyB3aGVuIGNvbm5lY3RpbmcgdXNlciBkZWZpbmVkIG5ldHdvcmtzLiBUaGUgd29ya2Fyb3VuZCBpcyB0byB1c2UgYSB1c2VyIGRlZmluZWQgbmV0d29yayBvbiBjb250YWluZXJcbiAgICAgICAgLy8gY3JlYXRpb24uXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vY29udGFpbmVycy9wb2RtYW4vaXNzdWVzLzE5NTc3XG4gICAgICAgIGRvY2tlckNtZCArPSBgLS1uZXR3b3JrICR7dGhpcy5fc2VydmljZU5ldHdvcmtJZH0gYDtcbiAgICAgICAgZm9yIChjb25zdCBhbGlhcyBvZiBhbGlhc2VzKSB7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tbmV0d29yay1hbGlhcyAke2FsaWFzfSBgO1xuICAgICAgICB9XG5cbiAgICAgICAgZG9ja2VyQ21kICs9IGAke3NlcnZpY2VOYW1lfSBgO1xuXG4gICAgICAgIGlmIChzZXJ2aWNlRW50cnlwb2ludD8ubGVuZ3RoID8/IDAgPiAxKSB7XG4gICAgICAgICAgICBzZXJ2aWNlRW50cnlwb2ludD8uc2xpY2UoMSkuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgJHtVdGlscy5zYWZlQmFzaFN0cmluZyhlKX0gYDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIChzZXJ2aWNlLmNvbW1hbmQgPz8gW10pLmZvckVhY2goKGUpID0+IGRvY2tlckNtZCArPSBgXCIke2UucmVwbGFjZSgvXFwkL2csIFwiXFxcXCRcIil9XCIgYCk7XG5cbiAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG5cbiAgICAgICAgY29uc3Qge3N0ZG91dDogY29udGFpbmVySWR9ID0gYXdhaXQgVXRpbHMuYmFzaChkb2NrZXJDbWQsIGN3ZCk7XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lcnNUb0NsZWFuLnB1c2goY29udGFpbmVySWQpO1xuXG4gICAgICAgIGZvciAoY29uc3QgbmV0d29yayBvZiB0aGlzLmFyZ3YubmV0d29yaykge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW3RoaXMuYXJndi5jb250YWluZXJFeGVjdXRhYmxlLCBcIm5ldHdvcmtcIiwgXCJjb25uZWN0XCIsIG5ldHdvcmssIGAke2NvbnRhaW5lcklkfWBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJzdGFydFwiLCBgJHtjb250YWluZXJJZH1gXSk7XG5cbiAgICAgICAgY29uc3QgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBzdGFydGVkIHNlcnZpY2UgaW1hZ2U6ICR7c2VydmljZU5hbWV9IHdpdGggYWxpYXNlczogJHtBcnJheS5mcm9tKGFsaWFzZXMpLmpvaW4oXCIsIFwiKX19IGluIHttYWdlbnRhICR7cHJldHR5SHJ0aW1lKGVuZFRpbWUpfX1cXG5gKTtcblxuICAgICAgICByZXR1cm4gY29udGFpbmVySWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzZXJ2aWNlSGVhbHRoQ2hlY2sgKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBzZXJ2aWNlOiBTZXJ2aWNlLCBzZXJ2aWNlSW5kZXg6IG51bWJlciwgc2VydmljZUNvbnRhaW5lckxvZ0ZpbGU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBzZXJ2aWNlQWxpYXMgPSBzZXJ2aWNlLmFsaWFzO1xuICAgICAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IHNlcnZpY2UubmFtZTtcbiAgICAgICAgY29uc3Qgd2FpdEltYWdlTmFtZSA9IHRoaXMuYXJndi53YWl0SW1hZ2U7XG5cbiAgICAgICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBVdGlscy5zcGF3bihbdGhpcy5hcmd2LmNvbnRhaW5lckV4ZWN1dGFibGUsIFwiaW1hZ2VcIiwgXCJpbnNwZWN0XCIsIHNlcnZpY2VOYW1lXSk7XG4gICAgICAgIGNvbnN0IGltYWdlSW5zcGVjdCA9IEpTT04ucGFyc2Uoc3Rkb3V0KTtcblxuICAgICAgICAvLyBDb3BpZWQgZnJvbSB0aGUgc3RhcnRTZXJ2aWNlIGJsb2NrLiBJbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCB0aGUgYWxpYXNlcyBtYXRjaFxuICAgICAgICBjb25zdCBzZXJ2aWNlTmFtZVdpdGhvdXRWZXJzaW9uID0gc2VydmljZU5hbWUucmVwbGFjZSgvKC4qKSg6LiopLywgXCIkMVwiKTtcbiAgICAgICAgY29uc3QgYWxpYXNlcyA9IFtzZXJ2aWNlTmFtZVdpdGhvdXRWZXJzaW9uLnJlcGxhY2VBbGwoXCIvXCIsIFwiLVwiKSwgc2VydmljZU5hbWVXaXRob3V0VmVyc2lvbi5yZXBsYWNlQWxsKFwiL1wiLCBcIl9fXCIpXTtcbiAgICAgICAgaWYgKHNlcnZpY2VBbGlhcykge1xuICAgICAgICAgICAgYWxpYXNlcy5wdXNoKHNlcnZpY2VBbGlhcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1bmlxdWVBbGlhcyA9IGFsaWFzZXNbYWxpYXNlcy5sZW5ndGggLSAxXTtcblxuICAgICAgICBpZiAoKGltYWdlSW5zcGVjdFswXT8uQ29uZmlnPy5FeHBvc2VkUG9ydHMgPz8gbnVsbCkgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7eWVsbG93IENvdWxkIG5vdCBmaW5kIGV4cG9zZWQgdGNwIHBvcnRzICR7c2VydmljZU5hbWV9fVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBJdGVyYXRlIG92ZXIgZWFjaCBwb3J0IGRlZmluZWQgaW4gdGhlIGltYWdlLCBhbmQgdHJ5IHRvIGNvbm5lY3QgdG8gdGhlIGFsaWFzXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFueShPYmplY3Qua2V5cyhpbWFnZUluc3BlY3RbMF0uQ29uZmlnLkV4cG9zZWRQb3J0cykubWFwKChwb3J0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFwb3J0LmVuZHNXaXRoKFwiL3RjcFwiKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvcnROdW0gPSBwYXJzZUludChwb3J0LnJlcGxhY2UoXCIvdGNwXCIsIFwiXCIpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250YWluZXJOYW1lID0gYGdjbC13YWl0LWZvci1pdC0ke3RoaXMuam9iSWR9LSR7c2VydmljZUluZGV4fS0ke3BvcnROdW19YDtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGF3bkNtZCA9IFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJydW5cIiwgXCItLXJtXCIsIGAtLW5hbWU9JHtjb250YWluZXJOYW1lfWAsIFwiLS1uZXR3b3JrXCIsIGAke3RoaXMuX3NlcnZpY2VOZXR3b3JrSWR9YCwgYCR7d2FpdEltYWdlTmFtZX1gLCBgJHt1bmlxdWVBbGlhc306JHtwb3J0TnVtfWAsIFwiLXRcIiwgXCIzMFwiXTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250YWluZXJzVG9DbGVhbi5wdXNoKGNvbnRhaW5lck5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBVdGlscy5zcGF3bihzcGF3bkNtZCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7Z3JlZW5CcmlnaHQgc2VydmljZSBpbWFnZTogJHtzZXJ2aWNlTmFtZX0gaGVhbHRoY2hlY2sgcGFzc2VkIGluIHtncmVlbiAke3ByZXR0eUhydGltZShlbmRUaW1lKX19fVxcbmApO1xuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBBZ2dyZWdhdGVFcnJvcikpIHRocm93IGU7XG4gICAgICAgICAgICBlLmVycm9ycy5mb3JFYWNoKChzaW5nbGVFcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7cmVkQnJpZ2h0IHNlcnZpY2UgaW1hZ2U6ICR7c2VydmljZU5hbWV9IGhlYWx0aGNoZWNrIGZhaWxlZH1cXG5gKTtcbiAgICAgICAgICAgICAgICBzaW5nbGVFcnJvci5tZXNzYWdlLnNwbGl0KC9cXHI/XFxuL2cpLmZvckVhY2goKGxpbmU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7cmVkQnJpZ2h0ICAgJHtsaW5lfX1cXG5gKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7cmVkQnJpZ2h0IGFsc28gc2VlICgke3NlcnZpY2VDb250YWluZXJMb2dGaWxlfSl9XFxuYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIC8vIEtpbGwgYWxsIHdhaXQtZm9yLWl0IGNvbnRhaW5lcnMsIHdoZW4gb25lIGhhdmUgYmVlbiBzdWNjZXNzZnVsXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoT2JqZWN0LmtleXMoaW1hZ2VJbnNwZWN0WzBdLkNvbmZpZy5FeHBvc2VkUG9ydHMpLm1hcCgocG9ydCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcG9ydC5lbmRzV2l0aChcIi90Y3BcIikpIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3J0TnVtID0gcGFyc2VJbnQocG9ydC5yZXBsYWNlKFwiL3RjcFwiLCBcIlwiKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0aWxzLnNwYXduKFt0aGlzLmFyZ3YuY29udGFpbmVyRXhlY3V0YWJsZSwgXCJybVwiLCBcIi12ZlwiLCBgZ2NsLXdhaXQtZm9yLWl0LSR7dGhpcy5qb2JJZH0tJHtzZXJ2aWNlSW5kZXh9LSR7cG9ydE51bX1gXSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGZldGNoVHJpZ2dlckluY2x1ZGUgKCkge1xuICAgICAgICBjb25zdCB7Y3dkLCBzdGF0ZURpcn0gPSB0aGlzLmFyZ3Y7XG5cbiAgICAgICAgZnMubWtkaXJwU3luYyhgJHtjd2R9LyR7c3RhdGVEaXJ9L2luY2x1ZGVzL3RyaWdnZXJzYCk7XG5cbiAgICAgICAgbGV0IGNvbnRlbnRzOiBhbnkgPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IGluY2x1ZGUgb2YgdGhpcy5qb2JEYXRhLnRyaWdnZXI/LmluY2x1ZGUgPz8gW10pIHtcbiAgICAgICAgICAgIGlmIChpbmNsdWRlW1wibG9jYWxcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBhbmRlZEluY2x1ZGUgPSBVdGlscy5leHBhbmRUZXh0KGluY2x1ZGVbXCJsb2NhbFwiXSwgdGhpcy5fdmFyaWFibGVzKTtcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZUluY2x1ZGVMb2NhbChleHBhbmRlZEluY2x1ZGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgcmVzb2x2ZUluY2x1ZGVMb2NhbChleHBhbmRlZEluY2x1ZGUsIGN3ZCk7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcih7bWVzc2FnZTogYExvY2FsIGluY2x1ZGUgZmlsZSBcXGAke2luY2x1ZGVbXCJsb2NhbFwiXX1cXGAgc3BlY2lmaWVkIGluIFxcYC4ke3RoaXMubmFtZX1cXGAgY2Fubm90IGJlIGZvdW5kIWB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IFBhcnNlci5sb2FkWWFtbChmaWxlLCB7fSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uY29udGVudHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jb250ZW50LFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5jbHVkZVtcImFydGlmYWN0XCJdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IFBhcnNlci5sb2FkWWFtbChgJHtjd2R9LyR7c3RhdGVEaXJ9L2FydGlmYWN0cy8ke2luY2x1ZGVbXCJqb2JcIl19LyR7aW5jbHVkZVtcImFydGlmYWN0XCJdfWAsIHt9KTtcbiAgICAgICAgICAgICAgICBjb250ZW50cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uY29udGVudHMsXG4gICAgICAgICAgICAgICAgICAgIC4uLmNvbnRlbnQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5jbHVkZVtcInByb2plY3RcIl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLndyaXRlU3RyZWFtcy5tZW1vU3Rkb3V0KGNoYWxrYHtiZ1llbGxvd0JyaWdodCAgV0FSTiB9IFxcYHtibHVlQnJpZ2h0ICR7dGhpcy5uYW1lfS50cmlnZ2VyLmluY2x1ZGUuKi5wcm9qZWN0fVxcYCB3aWxsIGJlIG5vLW9wLiBJdCBpcyBjdXJyZW50bHkgbm90IGltcGxlbWVudGVkXFxuYCk7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5jbHVkZVtcInRlbXBsYXRlXCJdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53cml0ZVN0cmVhbXMubWVtb1N0ZG91dChjaGFsa2B7YmdZZWxsb3dCcmlnaHQgIFdBUk4gfSBcXGB7Ymx1ZUJyaWdodCAke3RoaXMubmFtZX0udHJpZ2dlci5pbmNsdWRlLioudGVtcGxhdGV9XFxgIHdpbGwgYmUgbm8tb3AuIEl0IGlzIGN1cnJlbnRseSBub3QgaW1wbGVtZW50ZWRcXG5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YXJnZXQgPSBgJHtjd2R9LyR7c3RhdGVEaXJ9L2luY2x1ZGVzL3RyaWdnZXJzLyR7dGhpcy5uYW1lfS55bWxgO1xuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRhcmdldCwgeWFtbC5kdW1wKGNvbnRlbnRzKSk7XG4gICAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xlYW51cEpvYlJlc291cmNlcyAoam9icz86IEl0ZXJhYmxlPEpvYj4pIHtcbiAgICBpZiAoIWpvYnMpIHJldHVybjtcbiAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgIGZvciAoY29uc3Qgam9iIG9mIGpvYnMpIHtcbiAgICAgICAgcHJvbWlzZXMucHVzaChqb2IuY2xlYW51cFJlc291cmNlcygpKTtcbiAgICB9XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufVxuIl19